Modified WM_IN ZPL label generation to include a 2D datamatrix
barcode. Implemented 2D barcode verification in PTI and FQA Label Check Operations. Bug fixes Changed WMI 2D barcode to have 8 fields to keep code base simpler minor changes to error message verbiage Refactored code to use post log. Refactored code to not use multiple returns. Modfield input form fields to force upper case only. changed LSL password verification to be case insensitive to avoid barcode scanning issues when caps lock is on temporary change to allow 1D WMI scans at PTI while we exhaust current supply
This commit is contained in:
committed by
Stieber Daniel (CSC FI SPS MESLEO)
parent
2f6b376ece
commit
b2c9e500f8
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -572,7 +572,7 @@
|
|||||||
"<3,8>": "28",
|
"<3,8>": "28",
|
||||||
"<3,9>": "",
|
"<3,9>": "",
|
||||||
"<3,10>": {
|
"<3,10>": {
|
||||||
"<3,10,1>": "0x5E000080",
|
"<3,10,1>": "0x5E000088",
|
||||||
"<3,10,2>": "0x200"
|
"<3,10,2>": "0x200"
|
||||||
},
|
},
|
||||||
"<3,11>": {
|
"<3,11>": {
|
||||||
@ -739,7 +739,7 @@
|
|||||||
"<4,8>": "28",
|
"<4,8>": "28",
|
||||||
"<4,9>": "",
|
"<4,9>": "",
|
||||||
"<4,10>": {
|
"<4,10>": {
|
||||||
"<4,10,1>": "0x5E000080",
|
"<4,10,1>": "0x5E000088",
|
||||||
"<4,10,2>": "0x200"
|
"<4,10,2>": "0x200"
|
||||||
},
|
},
|
||||||
"<4,11>": {
|
"<4,11>": {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
"<2>": "-2",
|
"<2>": "-2",
|
||||||
"<3>": "-1",
|
"<3>": "-1",
|
||||||
"<4>": "-1",
|
"<4>": "-1",
|
||||||
"<5>": "16777215",
|
"<5>": "-2",
|
||||||
"<6>": {
|
"<6>": {
|
||||||
"<6,1>": {
|
"<6,1>": {
|
||||||
"<6,1,1>": "Tahoma",
|
"<6,1,1>": "Tahoma",
|
||||||
@ -76,11 +76,21 @@
|
|||||||
"<28>": "",
|
"<28>": "",
|
||||||
"<29>": "0",
|
"<29>": "0",
|
||||||
"<30>": "0",
|
"<30>": "0",
|
||||||
"<31>": "0",
|
"<31>": "1",
|
||||||
"<32>": "0",
|
"<32>": "0",
|
||||||
"<33>": "0",
|
"<33>": "0",
|
||||||
"<34>": "16777215",
|
"<34>": "-2",
|
||||||
"<35>": "16777215"
|
"<35>": "-2",
|
||||||
|
"<36>": "",
|
||||||
|
"<37>": "",
|
||||||
|
"<38>": "",
|
||||||
|
"<39>": "",
|
||||||
|
"<40>": "-2",
|
||||||
|
"<41>": "1000",
|
||||||
|
"<42>": "",
|
||||||
|
"<43>": "",
|
||||||
|
"<44>": "",
|
||||||
|
"<45>": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@
|
|||||||
"<2>": "-2",
|
"<2>": "-2",
|
||||||
"<3>": "-1",
|
"<3>": "-1",
|
||||||
"<4>": "-1",
|
"<4>": "-1",
|
||||||
"<5>": "16777215",
|
"<5>": "-2",
|
||||||
"<6>": {
|
"<6>": {
|
||||||
"<6,1>": {
|
"<6,1>": {
|
||||||
"<6,1,1>": "Tahoma",
|
"<6,1,1>": "Tahoma",
|
||||||
@ -84,11 +84,21 @@
|
|||||||
"<28>": "",
|
"<28>": "",
|
||||||
"<29>": "0",
|
"<29>": "0",
|
||||||
"<30>": "0",
|
"<30>": "0",
|
||||||
"<31>": "0",
|
"<31>": "1",
|
||||||
"<32>": "0",
|
"<32>": "0",
|
||||||
"<33>": "0",
|
"<33>": "0",
|
||||||
"<34>": "16777215",
|
"<34>": "-2",
|
||||||
"<35>": "16777215"
|
"<35>": "-2",
|
||||||
|
"<36>": "",
|
||||||
|
"<37>": "",
|
||||||
|
"<38>": "",
|
||||||
|
"<39>": "",
|
||||||
|
"<40>": "-2",
|
||||||
|
"<41>": "1000",
|
||||||
|
"<42>": "",
|
||||||
|
"<43>": "",
|
||||||
|
"<44>": "",
|
||||||
|
"<45>": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@
|
|||||||
"<2>": "-2",
|
"<2>": "-2",
|
||||||
"<3>": "-1",
|
"<3>": "-1",
|
||||||
"<4>": "-1",
|
"<4>": "-1",
|
||||||
"<5>": "16777215",
|
"<5>": "-2",
|
||||||
"<6>": {
|
"<6>": {
|
||||||
"<6,1>": {
|
"<6,1>": {
|
||||||
"<6,1,1>": "MS Sans Serif",
|
"<6,1,1>": "MS Sans Serif",
|
||||||
@ -93,8 +93,21 @@
|
|||||||
"<28>": "",
|
"<28>": "",
|
||||||
"<29>": "0",
|
"<29>": "0",
|
||||||
"<30>": "0",
|
"<30>": "0",
|
||||||
"<31>": "0",
|
"<31>": "1",
|
||||||
"<32>": "0"
|
"<32>": "0",
|
||||||
|
"<33>": "0",
|
||||||
|
"<34>": "-2",
|
||||||
|
"<35>": "-2",
|
||||||
|
"<36>": "",
|
||||||
|
"<37>": "",
|
||||||
|
"<38>": "",
|
||||||
|
"<39>": "",
|
||||||
|
"<40>": "-2",
|
||||||
|
"<41>": "1000",
|
||||||
|
"<42>": "",
|
||||||
|
"<43>": "",
|
||||||
|
"<44>": "",
|
||||||
|
"<45>": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -62,117 +62,161 @@ Options SCAN_TYPES_PTO = 'LABEL1', 'LABEL2'
|
|||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
Service ProcessFQAScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
|
Service ProcessFQAScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
If (ScanData NE '') then
|
If (ScanData NE '') then
|
||||||
// Code 3of9 encodes the asterisk and underscore characters. These need to be decoded.
|
|
||||||
//ScanData = Scan_Services('DecodeScanData', ScanData)
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
ColumnIndex = ''
|
||||||
|
ColumnValue = ''
|
||||||
|
|
||||||
ColumnIndex = ''
|
// Identify the scan data based on the data identifier prefix (if any). Otherwise, assume this is a
|
||||||
ColumnValue = ''
|
// type of cassette ID (i.e., RDS or WMO).
|
||||||
|
|
||||||
// Identify the scan data based on the data identifier prefix (if any). Otherwise, assume this is a
|
Begin Case
|
||||||
// type of cassette ID (i.e., RDS or WMO).
|
|
||||||
|
|
||||||
Begin Case
|
Case ScanType EQ 'SUPPLIER'
|
||||||
|
ValidLot = False$
|
||||||
|
If ScanData[1, 2] EQ '2T' OR ScanData[1,2] EQ '1T' then ScanData[1, 2] = ''
|
||||||
|
ScanSubLot = ScanData
|
||||||
|
|
||||||
Case ScanType EQ 'SUPPLIER'
|
CassetteID = Param1
|
||||||
ValidLot = False$
|
If INDEX(CassetteID,'.',2) then
|
||||||
If ScanData[1, 2] EQ '2T' OR ScanData[1,2] EQ '1T' then ScanData[1, 2] = ''
|
RDSType = 'EPP'
|
||||||
ScanSubLot = ScanData
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
|
||||||
CassetteID = Param1
|
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
||||||
If INDEX(CassetteID,'.',2) then
|
If ValidLot NE True$ then
|
||||||
RDSType = 'EPP'
|
// Add error to error stack
|
||||||
end else
|
ErrorMsg = 'Invalid Supplier Lot: ':ScanData
|
||||||
RDSType = 'SIC'
|
end
|
||||||
end
|
|
||||||
|
|
||||||
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
If ErrorMsg EQ '' then Response = ScanSubLot
|
||||||
If ValidLot NE True$ then
|
|
||||||
// Add error to error stack
|
|
||||||
ErrorMessage = 'Invalid Supplier Lot: ':ScanData
|
|
||||||
Error_Services('Add', ErrorMessage)
|
|
||||||
end
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
Case ScanType EQ 'CASSETTE1'
|
||||||
Response = ScanSubLot
|
|
||||||
end
|
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE1'
|
DelimCount = DCount(ScanData, '|')
|
||||||
|
Begin Case
|
||||||
|
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') )
|
||||||
|
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
|
||||||
|
Case (DelimCount NE 8)
|
||||||
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
|
Case Otherwise$
|
||||||
|
CassetteID = Field(ScanData, '|', 3)
|
||||||
|
SeqNo = Field(ScanData, '|', 8)
|
||||||
|
End Case
|
||||||
|
|
||||||
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
If ErrorMsg EQ '' then
|
||||||
// non-existent carrier will the scan data be considered invalid.
|
|
||||||
// Strip '1T', 'I', and 'O' prefixes.
|
|
||||||
If ScanData[1, 2] EQ '1T' then
|
|
||||||
ScanData[1, 2] = ''
|
|
||||||
end else If ScanData[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
|
||||||
ScanData[1,1] = ''
|
|
||||||
end
|
|
||||||
CassetteID = ScanData
|
|
||||||
|
|
||||||
If INDEX(CassetteID,'.',2) then
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
RDSType = 'EPP'
|
CassetteID[1, 2] = ''
|
||||||
WOMatKey = Field(CassetteID, '.', 1):'*':Field(CassetteID, '.', 3)
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
end else
|
CassetteID[1,1] = ''
|
||||||
RDSType = 'SIC'
|
|
||||||
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X')
|
|
||||||
end
|
|
||||||
|
|
||||||
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
|
||||||
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
|
||||||
|
|
||||||
If RDSType EQ 'EPP' then
|
|
||||||
LotDesc = 'EPP Lot '
|
|
||||||
end else
|
|
||||||
LotDesc = 'RDS Number '
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If INDEX(CassetteID,'.',2) then
|
||||||
|
RDSType = 'EPP'
|
||||||
|
WOMatKey = Field(CassetteID, '.', 1):'*':Field(CassetteID, '.', 3)
|
||||||
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
WOMatKey = Xlate('RDS', CassetteID, 'WO_MAT_KEY', 'X')
|
||||||
|
end
|
||||||
|
|
||||||
|
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
||||||
|
|
||||||
If ValidCassetteID EQ True$ then
|
If ValidCassetteID EQ True$ then
|
||||||
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
||||||
Error_Services('Add', LotDesc:'Mismatch: ':CassetteID: ' does not match ': Param1)
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Param1
|
||||||
end
|
end
|
||||||
|
|
||||||
// Check if FQA is signed
|
If ErrorMsg EQ '' then
|
||||||
FQASigned = ''
|
// Check if FQA is signed
|
||||||
WorkOrdNo = Field(WOMatKey, '*', 1)
|
FQASigned = ''
|
||||||
ReactorType = XLATE('WO_LOG', WorkOrdNo, 'REACT_TYPE', 'X')
|
WorkOrdNo = Field(WOMatKey, '*', 1)
|
||||||
QAStage = ''
|
ReactorType = XLATE('WO_LOG', WorkOrdNo, 'REACT_TYPE', 'X')
|
||||||
|
QAStage = ''
|
||||||
|
|
||||||
Begin Case
|
Begin Case
|
||||||
Case RDSType EQ 'EPP'
|
Case RDSType EQ 'EPP'
|
||||||
QAStage = 'MO_QA'
|
QAStage = 'MO_QA'
|
||||||
Case Otherwise$
|
Case Otherwise$
|
||||||
QAStage = 'QA'
|
QAStage = 'QA'
|
||||||
End Case
|
End Case
|
||||||
|
|
||||||
FQASigned = Signature_Services('CheckSignature', WOMatKey, QAStage)
|
FQASigned = Signature_Services('CheckSignature', WOMatKey, QAStage)
|
||||||
|
|
||||||
IF NOT(FQASigned) THEN
|
If NOT(FQASigned) then ErrorMsg = 'FQA not signed for ':CassetteID:'!'
|
||||||
Error_Services('Add', 'FQA not signed for ':LotDesc:CassetteID: '!')
|
end
|
||||||
END
|
|
||||||
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid ':LotDesc:CassetteID)
|
ErrorMsg = 'Invalid Lot ID ':CassetteID
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If ErrorMsg EQ '' then
|
||||||
Response = CassetteID
|
Response = ''
|
||||||
end
|
Response<1> = CassetteID
|
||||||
|
Response<2> = SeqNo
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE2'
|
Case ScanType EQ 'CASSETTE2'
|
||||||
Response = Material_Movement_Services('ProcessPTIScanData', ScanData, 'CASSETTE1', Param1)
|
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
||||||
Response = ScanData
|
// non-existent carrier will the scan data be considered invalid.
|
||||||
|
// Strip '1T', 'I', and 'O' prefixes.
|
||||||
|
|
||||||
End Case
|
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
|
Cassette1ID = Param1
|
||||||
|
Seq1No = Param2
|
||||||
|
DelimCount = DCount(ScanData, '|')
|
||||||
|
Begin Case
|
||||||
|
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') )
|
||||||
|
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
|
||||||
|
Case (DelimCount NE 8)
|
||||||
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
|
Case Otherwise$
|
||||||
|
CassetteID = Field(ScanData, '|', 3)
|
||||||
|
Seq2No = Field(ScanData, '|', 8)
|
||||||
|
End Case
|
||||||
|
|
||||||
end
|
If ErrorMsg EQ '' then
|
||||||
|
|
||||||
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
|
CassetteID[1, 2] = ''
|
||||||
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
|
CassetteID[1,1] = ''
|
||||||
|
end
|
||||||
|
|
||||||
|
If INDEX(CassetteID,'.',2) then
|
||||||
|
RDSType = 'EPP'
|
||||||
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
|
||||||
|
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
||||||
|
If ValidCassetteID EQ True$ then
|
||||||
|
If Cassette1ID NE '' AND (CassetteID NE Cassette1ID) then ;*Cassette2 Scan
|
||||||
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Cassette1ID
|
||||||
|
end
|
||||||
|
If Seq1No EQ Seq2No then
|
||||||
|
ErrorMsg = 'FQA Label verification failed due':CRLF$:'to operator double-scanning barcode.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Invalid RDS Number: ':CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then Response = CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
|
End Case
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'ScanData argument was missing in the ' : Service : ' service.')
|
ErrorMsg = 'ScanData argument was missing in the ' : Service : ' service.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
// ProcessPTIScanData
|
// ProcessPTIScanData
|
||||||
//
|
//
|
||||||
@ -183,92 +227,148 @@ end service
|
|||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
Service ProcessPTIScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
|
Service ProcessPTIScanData(ScanData, ScanType = SCAN_TYPES, Param1, Param2, Param3)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
If (ScanData NE '') then
|
If (ScanData NE '') then
|
||||||
// Code 3of9 encodes the asterisk and underscore characters. These need to be decoded.
|
|
||||||
//ScanData = Scan_Services('DecodeScanData', ScanData)
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
ColumnIndex = ''
|
||||||
|
ColumnValue = ''
|
||||||
|
|
||||||
ColumnIndex = ''
|
// Identify the scan data based on the data identifier prefix (if any). Otherwise, assume this is a
|
||||||
ColumnValue = ''
|
// type of cassette ID (i.e., RDS or WMO).
|
||||||
|
|
||||||
// Identify the scan data based on the data identifier prefix (if any). Otherwise, assume this is a
|
Begin Case
|
||||||
// type of cassette ID (i.e., RDS or WMO).
|
|
||||||
|
|
||||||
Begin Case
|
Case ScanType EQ 'SUPPLIER'
|
||||||
|
|
||||||
Case ScanType EQ 'SUPPLIER'
|
ValidLot = False$
|
||||||
ValidLot = False$
|
If ScanData[1, 2] EQ '2T' OR ScanData[1,2] EQ '1T' then ScanData[1, 2] = ''
|
||||||
If ScanData[1, 2] EQ '2T' OR ScanData[1,2] EQ '1T' then ScanData[1, 2] = ''
|
ScanSubLot = ScanData
|
||||||
ScanSubLot = ScanData
|
CassetteID = Param1
|
||||||
|
If INDEX(CassetteID,'.',2) then
|
||||||
|
RDSType = 'EPP'
|
||||||
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
||||||
|
If ValidLot NE True$ then ErrorMsg = 'Invalid Supplier Lot: ':ScanData
|
||||||
|
If ErrorMsg EQ '' then Response = ScanSubLot
|
||||||
|
|
||||||
CassetteID = Param1
|
Case ScanType EQ 'CASSETTE1'
|
||||||
If INDEX(CassetteID,'.',2) then
|
debug
|
||||||
RDSType = 'EPP'
|
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
||||||
end else
|
// non-existent carrier will the scan data be considered invalid.
|
||||||
RDSType = 'SIC'
|
// Strip '1T', 'I', and 'O' prefixes.
|
||||||
end
|
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
|
DelimCount = DCount(ScanData, '|')
|
||||||
|
Begin Case
|
||||||
|
Case (ScanData[1, 1] EQ 'I')
|
||||||
|
! Temporary exception while we exhaust current WMI inventory on KIT racks that
|
||||||
|
! do not have a 2D barcode.
|
||||||
|
CassetteID = ScanData
|
||||||
|
SeqNo = 'SEQ1'
|
||||||
|
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') )
|
||||||
|
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
|
||||||
|
Case (DelimCount NE 8)
|
||||||
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
|
Case Otherwise$
|
||||||
|
CassetteID = Field(ScanData, '|', 3)
|
||||||
|
SeqNo = Field(ScanData, '|', 8)
|
||||||
|
End Case
|
||||||
|
|
||||||
ValidLot = Rds_Services('IsValidSubLot', CassetteID, RDSType, ScanSubLot)
|
If ErrorMsg EQ '' then
|
||||||
If ValidLot NE True$ then
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
// Add error to error stack
|
CassetteID[1, 2] = ''
|
||||||
ErrorMessage = 'Invalid Supplier Lot: ':ScanData
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
Error_Services('Add', ErrorMessage)
|
CassetteID[1,1] = ''
|
||||||
end
|
end
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If INDEX(CassetteID,'.',2) then
|
||||||
Response = ScanSubLot
|
RDSType = 'EPP'
|
||||||
end
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE1'
|
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType)
|
||||||
|
If ValidCassetteID EQ True$ then
|
||||||
|
If Param1 NE '' AND (ScanData NE Param1) then ;*Cassette2 Scan
|
||||||
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Param1
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Invalid Cassette Number: ':CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
If ErrorMsg EQ '' then
|
||||||
// non-existent carrier will the scan data be considered invalid.
|
Response = ''
|
||||||
// Strip '1T', 'I', and 'O' prefixes.
|
Response<1> = CassetteID
|
||||||
If ScanData[1, 2] EQ '1T' then
|
Response<2> = SeqNo
|
||||||
ScanData[1, 2] = ''
|
end
|
||||||
end else If ScanData[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
end
|
||||||
ScanData[1,1] = ''
|
|
||||||
end
|
|
||||||
CassetteID = ScanData
|
|
||||||
|
|
||||||
If INDEX(CassetteID,'.',2) then
|
Case ScanType EQ 'CASSETTE2'
|
||||||
RDSType = 'EPP'
|
// Assume this is intended to be a Cassette ID scan (either WMO or RDS). Only if this is a
|
||||||
end else
|
// non-existent carrier will the scan data be considered invalid.
|
||||||
RDSType = 'SIC'
|
// Strip '1T', 'I', and 'O' prefixes.
|
||||||
end
|
|
||||||
|
|
||||||
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
ValidCassetteID = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType )
|
Cassette1ID = Param1
|
||||||
If ValidCassetteID EQ True$ then
|
Seq1No = Param2
|
||||||
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
|
||||||
Error_Services('Add', 'RDS Mismatch: ':CassetteID: ' does not match ': Param1)
|
|
||||||
end
|
|
||||||
end else
|
|
||||||
Error_Services('Add', 'Invalid RDS Number: ':CassetteID)
|
|
||||||
end
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
DelimCount = DCount(ScanData, '|')
|
||||||
Response = CassetteID
|
Begin Case
|
||||||
end
|
Case (ScanData[1, 1] EQ 'I')
|
||||||
|
! Temporary exception while we exhaust current WMI inventory on KIT racks that
|
||||||
|
! do not have a 2D barcode.
|
||||||
|
CassetteID = ScanData
|
||||||
|
Seq2No = 'SEQ2'
|
||||||
|
Case ( (ScanData[1, 2] EQ '1T') or (ScanData[1, 1] EQ 'O') )
|
||||||
|
ErrorMsg = '1D Lot Label Scanned. 2D Lot Label Required.'
|
||||||
|
Case (DelimCount NE 8)
|
||||||
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
|
Case Otherwise$
|
||||||
|
CassetteID = Field(ScanData, '|', 3)
|
||||||
|
Seq2No = Field(ScanData, '|', 8)
|
||||||
|
End Case
|
||||||
|
|
||||||
Case ScanType EQ 'CASSETTE2'
|
If ErrorMsg EQ '' then
|
||||||
Response = Material_Movement_Services('ProcessPTIScanData', ScanData, 'CASSETTE1', Param1)
|
|
||||||
Response = ScanData
|
|
||||||
|
|
||||||
End Case
|
If CassetteID[1, 2] EQ '1T' then
|
||||||
|
CassetteID[1, 2] = ''
|
||||||
|
end else If CassetteID[1,1] EQ 'I' OR CassetteID[1,1] EQ 'O' then
|
||||||
|
CassetteID[1,1] = ''
|
||||||
|
end
|
||||||
|
|
||||||
|
If INDEX(CassetteID,'.',2) then
|
||||||
|
RDSType = 'EPP'
|
||||||
|
end else
|
||||||
|
RDSType = 'SIC'
|
||||||
|
end
|
||||||
|
|
||||||
|
ValidCassetteID = Rds_Services('IsValidRDS', CassetteID, RDSType)
|
||||||
|
If ValidCassetteID EQ True$ then
|
||||||
|
If Cassette1ID NE '' AND (CassetteID NE Cassette1ID) then ;*Cassette2 Scan
|
||||||
|
ErrorMsg = 'Lot Label Mismatch: ':CassetteID: ' does not match ': Cassette1ID
|
||||||
|
end
|
||||||
|
If Seq1No EQ Seq2No then
|
||||||
|
ErrorMsg = 'PTI Label verification failed due':CRLF$:'to operator double-scanning barcode.'
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
ErrorMsg = 'Invalid Cassette Number: ':CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
|
If ErrorMsg EQ '' then Response = CassetteID
|
||||||
|
end
|
||||||
|
|
||||||
|
End Case
|
||||||
|
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'ScanData argument was missing in the ' : Service : ' service.')
|
ErrorMsg = 'ScanData argument was missing in the ' : Service : ' service.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
//to do before release of ProcessPTOScanData
|
|
||||||
//1. prerequisite - waiting on newly printed (on/after 10/18/21) labels to make their way through warehouse, though not critical
|
|
||||||
//2. showstopper - need barcode scanners to be able to scan 2D barcodes - currently only 1 such scanner (purchased for shipping but not deployed, given to Cheryl)
|
|
||||||
//3. fix prod print routine to use SRP GetPrinter methods similar to what the Test_Print_SAP_Cass_Ship_Label does
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
// ProcessPTOScanData
|
// ProcessPTOScanData
|
||||||
//
|
//
|
||||||
@ -282,174 +382,165 @@ end service
|
|||||||
//----------------------------------------------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------------------------------------------
|
||||||
Service ProcessPTOScanData(ScanData, ScanType = SCAN_TYPES_PTO, Param1, Param2)
|
Service ProcessPTOScanData(ScanData, ScanType = SCAN_TYPES_PTO, Param1, Param2)
|
||||||
|
|
||||||
|
ErrorMsg = ''
|
||||||
Location = 'PTO Mat'
|
Location = 'PTO Mat'
|
||||||
If (ScanData NE '') then
|
If (ScanData NE '') then
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
ColumnIndex = ''
|
||||||
|
ColumnValue = ''
|
||||||
|
Cassette1 = ''
|
||||||
|
Cassette2 = ''
|
||||||
|
|
||||||
ColumnIndex = ''
|
Begin Case
|
||||||
ColumnValue = ''
|
|
||||||
Cassette1 = ''
|
|
||||||
Cassette2 = ''
|
|
||||||
|
|
||||||
Begin Case
|
Case ScanType EQ 'LABEL1'
|
||||||
|
// Determine whether regular NEPP or EPP label scan
|
||||||
|
// NEPP should be data matrix scan and have 7 parts, RDS_No is the 3rd
|
||||||
|
// EPP is 1D scan and will have the WMO number (e.g. 170369*1*48)
|
||||||
|
// This should be a multi-part 2D datamatrix scan, so there should be a long string separated by pipe symbols.
|
||||||
|
// Validate the 1. it is multi-part string and 2. that the RDS number from the string is a) valid RDS number
|
||||||
|
// and b) is currently is the proper state to do PTO transaction.
|
||||||
|
// Strip any standardized prefixes (e.g. '1T', '2T', etc.) as necessary
|
||||||
|
|
||||||
Case ScanType EQ 'LABEL1'
|
// Data from Label1 should have 8 parts (no matter type - Si or EPP), we're looking for the 3rd
|
||||||
//determine whether regular NEPP or EPP label scan
|
cnt = DCount(ScanData, '|')
|
||||||
//NEPP should be data matrix scan and have 7 parts, RDS_No is the 3rd
|
if cnt NE 8 then
|
||||||
//EPP is 1D scan and will have the WMO number (e.g. 170369*1*48)
|
ErrorMsg = 'Invalid Lot Label Scan.'
|
||||||
// This should be a multi-part 2D datamatrix scan, so there should be a long string separated by pipe symbols.
|
end else
|
||||||
// Validate the 1. it is multi-part string and 2. that the RDS number from the string is a) valid RDS number
|
Cassette1 = Field(ScanData, '|', 3)
|
||||||
// and b) is currently is the proper state to do PTO transaction.
|
end
|
||||||
// Strip any standardized prefixes (e.g. '1T', '2T', etc.) as necessary
|
|
||||||
|
|
||||||
// data from Label1 should have 8 parts (no matter type - Si or EPP), we're looking for the 3rd
|
If ErrorMsg EQ '' then
|
||||||
cnt = DCount(ScanData, '|')
|
// Strip the prefix encoding
|
||||||
if cnt NE 8 then
|
If Cassette1[1, 2] EQ '1T' OR Cassette1[1, 2] EQ '2T' then
|
||||||
Cassette1 = 0
|
Cassette1[1, 2] = ''
|
||||||
Error_Services('Add', 'Invalid Lot Label Scan.')
|
end else If Cassette1[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
||||||
return
|
Cassette1[1,1] = ''
|
||||||
end else
|
end
|
||||||
//RDS should be 3rd position
|
|
||||||
Cassette1 = Field(ScanData, '|', 3)
|
|
||||||
end
|
|
||||||
|
|
||||||
//strip the prefix encoding
|
WOMatKey = ''
|
||||||
If Cassette1[1, 2] EQ '1T' OR Cassette1[1, 2] EQ '2T' then
|
RdsRec = ''
|
||||||
Cassette1[1, 2] = ''
|
WONo = ''
|
||||||
end else If Cassette1[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
CassNo = ''
|
||||||
Cassette1[1,1] = ''
|
|
||||||
end
|
|
||||||
|
|
||||||
WOMatKey = ''
|
If INDEX(Cassette1,'.',2) then
|
||||||
RdsRec = ''
|
RDSType = 'EPP'
|
||||||
WONo = ''
|
WMOKey = Cassette1
|
||||||
CassNo = ''
|
|
||||||
|
|
||||||
If INDEX(Cassette1,'.',2) then
|
|
||||||
RDSType = 'EPP'
|
|
||||||
WMOKey = Cassette1
|
|
||||||
Convert '.' to '*' in WMOKey
|
Convert '.' to '*' in WMOKey
|
||||||
If RowExists('WM_OUT', WMOKey) then
|
If RowExists('WM_OUT', WMOKey) then
|
||||||
WONo = Field(WMOKey, '*', 1, 1)
|
WONo = Field(WMOKey, '*', 1, 1)
|
||||||
CassNo = Field(WMOKey, '*', 3, 1)
|
CassNo = Field(WMOKey, '*', 3, 1)
|
||||||
WOMatKey = WONo:'*':CassNo
|
WOMatKey = WONo:'*':CassNo
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
RDSType = 'SIC'
|
RDSType = 'SIC'
|
||||||
WOMatKey = XLATE('RDS', Cassette1, 'WO_MAT_KEY', 'X')
|
WOMatKey = XLATE('RDS', Cassette1, 'WO_MAT_KEY', 'X')
|
||||||
RdsRec = Database_Services('ReadDataRow','RDS', Cassette1)
|
RdsRec = Database_Services('ReadDataRow','RDS', Cassette1)
|
||||||
WONo = RdsRec<RDS_WO$>
|
WONo = RdsRec<RDS_WO$>
|
||||||
CassNo = RdsRec<RDS_CASS_NO$>
|
CassNo = RdsRec<RDS_CASS_NO$>
|
||||||
end
|
end
|
||||||
|
|
||||||
ValidCassette1 = False$ ; // Assume Cassette ID is not valid for now.
|
ValidCassette1 = False$ ; // Assume Cassette ID is not valid for now.
|
||||||
testCass1 = Cassette1
|
testCass1 = Cassette1
|
||||||
|
|
||||||
Convert '*' to '.' in testCass1
|
Convert '*' to '.' in testCass1
|
||||||
If Rds_Services('IsValidRDS', Cassette1, RDSType) then
|
If Rds_Services('IsValidRDS', Cassette1, RDSType) then
|
||||||
If Rds_Services('GetHoldStatus', Cassette1, RDSType) EQ False$ then
|
If Rds_Services('GetHoldStatus', Cassette1, RDSType) EQ False$ then
|
||||||
If Rds_Services('IsPackaged', Cassette1, RDSType) EQ True$ then
|
If Rds_Services('IsPackaged', Cassette1, RDSType) EQ True$ then
|
||||||
ValidCassette1 = True$
|
ValidCassette1 = True$
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', RDSType: ' RDS ':testCass1: ' has not completed packaging.')
|
ErrorMsg = RDSType: ' RDS ':testCass1: ' has not completed packaging.'
|
||||||
return
|
end
|
||||||
end
|
end else
|
||||||
end else
|
ErrorMsg = RDSType: ' RDS ':testCass1: ' is currently on hold.'
|
||||||
Error_Services('Add', RDSType: ' RDS ':testCass1: ' is currently on hold.')
|
end
|
||||||
return
|
end else
|
||||||
end
|
ErrorMsg = RDSType: ' RDS ' : testCass1 : ' is an invalid RDS number.'
|
||||||
end else
|
end
|
||||||
Error_Services('Add', RDSType: ' RDS ' : testCass1 : ' is an invalid RDS number.')
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
If ErrorMsg EQ '' then
|
||||||
StepNo = 1
|
LastPTO = obj_WO_Mat('OutofPTO',WOMatKey)
|
||||||
IF LastPTO THEN
|
StepNo = 1
|
||||||
MsgHead = 'Cassette previously scanned through PTO'
|
IF LastPTO THEN
|
||||||
MsgText = 'Scanned at ':LastPTO<2>:' by ':LastPTO<1>:CRLF$
|
MsgHead = 'Cassette previously scanned through PTO'
|
||||||
MsgText := 'Are you sure you wish to rescan and reprint the shipping label?'
|
MsgText = 'Scanned at ':LastPTO<2>:' by ':LastPTO<1>:CRLF$
|
||||||
|
MsgText := 'Are you sure you wish to rescan and reprint the shipping label?'
|
||||||
|
|
||||||
OK = Msg(@WINDOW, '','YESNO','',MsgHead:@FM:MsgText)
|
OK = Msg(@WINDOW, '','YESNO','',MsgHead:@FM:MsgText)
|
||||||
|
|
||||||
IF NOT(OK) THEN
|
IF NOT(OK) THEN
|
||||||
Error_Services('Add', 'Scan Cancelled')
|
ErrorMsg = 'Scan Cancelled'
|
||||||
RETURN
|
END else
|
||||||
END else
|
Print_SAP_Cass_Ship_Label(WONo,StepNo,CassNo,Cassette1, RDSType)
|
||||||
Print_SAP_Cass_Ship_Label(WONo,StepNo,CassNo,Cassette1, RDSType)
|
end
|
||||||
end
|
end else
|
||||||
end else
|
Print_SAP_Cass_Ship_Label(WONo,StepNo,CassNo,Cassette1, RDSType)
|
||||||
Print_SAP_Cass_Ship_Label(WONo,StepNo,CassNo,Cassette1, RDSType)
|
end
|
||||||
END
|
|
||||||
|
|
||||||
If ValidCassette1 EQ True$ then
|
If ErrorMsg EQ '' then
|
||||||
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
If ValidCassette1 EQ True$ then
|
||||||
Error_Services('Add', 'RDS Mismatch: ':Cassette1: ' does not match ': Param1)
|
If Param1 NE '' AND ScanData NE Param1 then ;*Cassette2 Scan
|
||||||
return
|
ErrorMsg = 'RDS Mismatch: ':Cassette1: ' does not match ': Param1
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid RDS Number: ':Cassette1)
|
ErrorMsg = 'Invalid RDS Number: ':Cassette1
|
||||||
return
|
end
|
||||||
end
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If ErrorMsg EQ '' then Response = Cassette1
|
||||||
Response = Cassette1
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Case ScanType EQ 'LABEL2'
|
Case ScanType EQ 'LABEL2'
|
||||||
cnt = DCount(ScanData, ';')
|
cnt = DCount(ScanData, ';')
|
||||||
if cnt EQ 9 then
|
if cnt EQ 9 then
|
||||||
//Tower is customer and RDS should be 2nd position
|
// Tower is customer and RDS should be 2nd position
|
||||||
Cassette2 = Field(ScanData, ';', 2)
|
Cassette2 = Field(ScanData, ';', 2)
|
||||||
end else if cnt EQ 10 then
|
end else if cnt EQ 10 then
|
||||||
//all other customers and RDS should be 3rd position
|
// All other customers and RDS should be 3rd position
|
||||||
Cassette2 = Field(ScanData, ';', 3)
|
Cassette2 = Field(ScanData, ';', 3)
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'Invalid Shipping Label Scan.')
|
ErrorMsg = 'Invalid Shipping Label Scan.'
|
||||||
return
|
end
|
||||||
end
|
|
||||||
|
|
||||||
//strip the prefix encoding
|
If ErrorMsg EQ '' then
|
||||||
If Cassette2[1, 2] EQ '1T' OR Cassette2[1, 2] EQ '2T' then
|
|
||||||
Cassette2[1, 2] = ''
|
|
||||||
end else If Cassette2[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
|
||||||
Cassette2[1,1] = ''
|
|
||||||
end
|
|
||||||
testCass1 = Param3
|
|
||||||
testCass2 = Cassette2
|
|
||||||
convert '*' to '.' in testCass1
|
|
||||||
convert '*' to '.' in testCass2
|
|
||||||
|
|
||||||
If testCass1 NE testCass2 then
|
// Strip the prefix encoding
|
||||||
ErrorMsg = 'Scan Mismatch - RDS values do not match. Both cassettes placed on hold - Supervisor, Lead, or Engineering disposition required.':CRLF$ |
|
If Cassette2[1, 2] EQ '1T' OR Cassette2[1, 2] EQ '2T' then
|
||||||
|
Cassette2[1, 2] = ''
|
||||||
|
end else If Cassette2[1,1] EQ 'I' OR ScanData[1,1] EQ 'O' then
|
||||||
|
Cassette2[1,1] = ''
|
||||||
|
end
|
||||||
|
testCass1 = Param3
|
||||||
|
testCass2 = Cassette2
|
||||||
|
convert '*' to '.' in testCass1
|
||||||
|
convert '*' to '.' in testCass2
|
||||||
|
|
||||||
|
If testCass1 NE testCass2 then
|
||||||
|
ErrorMsg = 'Scan Mismatch - RDS values do not match. Both cassettes placed on hold - Supervisor, Lead, or Engineering disposition required.':CRLF$ |
|
||||||
: 'RDS Label #1: ':testCass1:CRLF$ |
|
: 'RDS Label #1: ':testCass1:CRLF$ |
|
||||||
: 'RDS Label #2: ':testCass2:CRLF$
|
: 'RDS Label #2: ':testCass2:CRLF$
|
||||||
|
|
||||||
ScanMismatch = True$
|
ScanMismatch = True$
|
||||||
gosub ToggleLotHold
|
GoSub ToggleLotHold
|
||||||
Error_Services('Add', ErrorMsg)
|
end
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
If Error_Services('NoError') then
|
If ErrorMsg EQ '' then Response = Cassette2
|
||||||
Response = Cassette2
|
end
|
||||||
end
|
End Case
|
||||||
|
|
||||||
End Case
|
|
||||||
|
|
||||||
end
|
|
||||||
end else
|
end else
|
||||||
Error_Services('Add', 'ScanData argument was missing in the ' : Service : ' service.')
|
ErrorMsg = 'ScanData argument was missing in the ' : Service : ' service.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
|
||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
Service SaveRecord(CassetteID, Warehouse, Location, OperatorID)
|
Service SaveRecord(CassetteID, Warehouse, Location, OperatorID)
|
||||||
|
|
||||||
* Write success record in Material Log
|
// Write success record in Material Log
|
||||||
|
|
||||||
RDSKey = CassetteID
|
RDSKey = CassetteID
|
||||||
WMOKey = CassetteID
|
WMOKey = CassetteID
|
||||||
Convert '.' to '*' in WMOKey
|
Convert '.' to '*' in WMOKey
|
||||||
@ -504,20 +595,12 @@ Service SaveRecord(CassetteID, Warehouse, Location, OperatorID)
|
|||||||
errCode = ''
|
errCode = ''
|
||||||
obj_WO_Mat_Log('Create',WOMLParms)
|
obj_WO_Mat_Log('Create',WOMLParms)
|
||||||
|
|
||||||
* aiParms = 'WO_MAT':@RM:WONo:@RM:CassNo:@RM:WhCd:'*':LocCd:@RM:Action:@RM:InvDTM:@RM:UserID:@RM:Tag:@RM:ToolID
|
If Get_Status(errCode) then
|
||||||
* obj_WO_Mat('AddInvTrans', aiParms)
|
Swap @SVM with CRLF$ in errCode
|
||||||
|
ErrorMsg = 'Errors calling obj_WO_Mat_Log("Create"). Error code: ':errCode
|
||||||
|
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN
|
|
||||||
swap @SVM with CRLF$ in errCode
|
|
||||||
ErrorMsg = 'Errors calling obj_WO_Mat_Log("Create"). Error code: ':errCode:', Len(errCode)=':Len(errCode):'. FI has been notified.'
|
|
||||||
Error_Services('Add', ErrorMsg)
|
Error_Services('Add', ErrorMsg)
|
||||||
if LEN(errCode) > 5 then
|
Gosub SendErrorNotification
|
||||||
Gosub SendErrorNotification
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end service
|
end service
|
||||||
@ -525,19 +608,20 @@ end service
|
|||||||
|
|
||||||
SendErrorNotification:
|
SendErrorNotification:
|
||||||
|
|
||||||
Recipients = XLATE('NOTIFICATION','FI_SUPPORT',NOTIFICATION_USER_ID$,'X')
|
Recipients = ''
|
||||||
SentFrom = 'MATERIAL_MOVEMENT_SERVICES'
|
SentFrom = 'MATERIAL_MOVEMENT_SERVICES'
|
||||||
Subject = 'ERROR CALLING OBJ_WO_MAT '
|
Subject = 'ERROR CALLING OBJ_WO_MAT '
|
||||||
Message = 'Error occured while attempting to write WO_MAT_LOG at ':Location:' Scan':CRLF$:ErrorMsg
|
Message = 'Error occured while attempting to write WO_MAT_LOG at ':Location:' Scan':CRLF$:ErrorMsg
|
||||||
AttachKey = WoMatKey
|
AttachKey = WoMatKey
|
||||||
AttachWindow = ''
|
AttachWindow = ''
|
||||||
SendToGroup = ''
|
SendToGroup = 'FI_SUPPORT'
|
||||||
|
|
||||||
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
|
||||||
obj_Notes('Create',Parms)
|
obj_Notes('Create',Parms)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
ToggleLotHold:
|
ToggleLotHold:
|
||||||
|
|
||||||
If ScanMismatch EQ True$ then
|
If ScanMismatch EQ True$ then
|
||||||
@ -578,22 +662,26 @@ ToggleLotHold:
|
|||||||
// To do: Throw Error
|
// To do: Throw Error
|
||||||
End Case
|
End Case
|
||||||
Convert '*' to '.' in Cassette1
|
Convert '*' to '.' in Cassette1
|
||||||
|
|
||||||
HoldEntityID = Cassette1
|
HoldEntityID = Cassette1
|
||||||
|
|
||||||
// Manually add work order material log entry
|
WOMLParms = LogFile:@RM
|
||||||
WOMatKey = WONo:'*':CassNo
|
WOMLParms := LogDTM:@RM
|
||||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
WOMLParms := Action:@RM
|
||||||
NumTimestamps = Dcount(WOMatRec<WO_MAT_INV_WH$>, @VM)
|
WOMLParms := WhCd:@RM
|
||||||
NewEntryPos = NumTimestamps + 1
|
WOMLParms := LocCd:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_WH$, NewEntryPos, 0, WhCd)
|
WOMLParms := WONo:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_LOCATION$, NewEntryPos, 0, LocCd)
|
WOMLParms := CassNo:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_ACTION$, NewEntryPos, 0, Action)
|
WOMLParms := UserID:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_DTM$, NewEntryPos, 0, LogDTM)
|
WOMLParms := Tags:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_USER$, NewEntryPos, 0, UserID)
|
WOMLParms := ToolID
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_TAG$, NewEntryPos, 0, Tags)
|
Set_Status(0)
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_TOOL_ID$, NewEntryPos, 0, ToolID)
|
errCode = ''
|
||||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
obj_WO_Mat_Log('Create',WOMLParms)
|
||||||
|
If Get_Status(errCode) then
|
||||||
|
Swap @SVM with CRLF$ in errCode
|
||||||
|
ErrorMsg = 'Error calling obj_WO_Mat_Log("Create"). Error code: ':errCode
|
||||||
|
Gosub SendErrorNotification
|
||||||
|
end
|
||||||
|
|
||||||
// Place first cassette on hold
|
// Place first cassette on hold
|
||||||
WOMatKey = WONo:'*':CassNo
|
WOMatKey = WONo:'*':CassNo
|
||||||
@ -637,24 +725,26 @@ ToggleLotHold:
|
|||||||
ToolID = ''
|
ToolID = ''
|
||||||
HoldEntityID = Cassette2
|
HoldEntityID = Cassette2
|
||||||
|
|
||||||
// Manually add work order material log entry
|
WOMLParms = LogFile:@RM
|
||||||
|
WOMLParms := LogDTM:@RM
|
||||||
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
|
WOMLParms := Action:@RM
|
||||||
NumTimestamps = Dcount(WOMatRec<WO_MAT_INV_WH$>, @VM)
|
WOMLParms := WhCd:@RM
|
||||||
NewEntryPos = NumTimestamps + 1
|
WOMLParms := LocCd:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_WH$, NewEntryPos, 0, WhCd)
|
WOMLParms := WONo:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_LOCATION$, NewEntryPos, 0, LocCd)
|
WOMLParms := CassNo:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_ACTION$, NewEntryPos, 0, Action)
|
WOMLParms := UserID:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_DTM$, NewEntryPos, 0, LogDTM)
|
WOMLParms := Tags:@RM
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_USER$, NewEntryPos, 0, UserID)
|
WOMLParms := ToolID
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_TAG$, NewEntryPos, 0, Tags)
|
Set_Status(0)
|
||||||
WOMatRec = INSERT(WOMatRec, WO_MAT_INV_TOOL_ID$, NewEntryPos, 0, ToolID)
|
errCode = ''
|
||||||
Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, WOMatRec, True$, False$, True$)
|
obj_WO_Mat_Log('Create',WOMLParms)
|
||||||
|
If Get_Status(errCode) then
|
||||||
//pause before putting second cassette on hold
|
Swap @SVM with CRLF$ in errCode
|
||||||
|
ErrorMsg = 'Error calling obj_WO_Mat_Log("Create"). Error code: ':errCode
|
||||||
|
Gosub SendErrorNotification
|
||||||
|
end
|
||||||
|
|
||||||
// Place second cassette on hold
|
// Place second cassette on hold
|
||||||
|
|
||||||
WOMatKey = WONo:'*':CassNo
|
WOMatKey = WONo:'*':CassNo
|
||||||
CtrlEntID = False$ ;* Control checked/unchecked
|
CtrlEntID = False$ ;* Control checked/unchecked
|
||||||
OriginFlag = 'PTO' ;* Flag to indicate a hold initiated from the packaging form
|
OriginFlag = 'PTO' ;* Flag to indicate a hold initiated from the packaging form
|
||||||
@ -662,7 +752,8 @@ ToggleLotHold:
|
|||||||
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEntID, OriginFlag, '', OperatorID)
|
Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEntID, OriginFlag, '', OperatorID)
|
||||||
end
|
end
|
||||||
|
|
||||||
gosub SendPTOMismatchNotification
|
GoSub SendPTOMismatchNotification
|
||||||
|
|
||||||
errCode = ''
|
errCode = ''
|
||||||
IF Get_Status(errCode) THEN Error_Services('Add', 'Error code ':errCode:' in ':Service:' service.')
|
IF Get_Status(errCode) THEN Error_Services('Add', 'Error code ':errCode:' in ':Service:' service.')
|
||||||
Error_Services('Add', 'Cassette scans did not match! Both cassettes placed on hold - Supervisor, Lead, or Engineering disposition required.')
|
Error_Services('Add', 'Cassette scans did not match! Both cassettes placed on hold - Supervisor, Lead, or Engineering disposition required.')
|
||||||
@ -671,6 +762,7 @@ ToggleLotHold:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
SendPTOMismatchNotification:
|
SendPTOMismatchNotification:
|
||||||
|
|
||||||
// Send scan mismatch notification
|
// Send scan mismatch notification
|
||||||
|
@ -36,40 +36,37 @@ $insert WO_MAT_EQUATES
|
|||||||
$insert APPCOLORS
|
$insert APPCOLORS
|
||||||
$insert MESSAGE_BOX_EQUATES
|
$insert MESSAGE_BOX_EQUATES
|
||||||
|
|
||||||
Equ CRLF$ to \0D0A\
|
Equ CRLF$ to \0D0A\
|
||||||
Equ MSG_WIDTH$ to 600
|
Equ MSG_WIDTH$ to 600
|
||||||
Equ EditTable$ to @Window:'.OLE_EDT_SCANDATA'
|
Equ EditTable$ to @Window:'.OLE_EDT_SCANDATA'
|
||||||
Equ Cassette1$ to @Window:'.EDL_CASSETTE1_SCAN'
|
Equ Cassette1$ to @Window:'.EDL_CASSETTE1_SCAN'
|
||||||
Equ Cassette2$ to @Window:'.EDL_CASSETTE2_SCAN'
|
Equ Cassette2$ to @Window:'.EDL_CASSETTE2_SCAN'
|
||||||
Equ Supplier$ to @Window:'.EDL_SUPPLIER_SCAN'
|
Equ Supplier$ to @Window:'.EDL_SUPPLIER_SCAN'
|
||||||
|
|
||||||
Declare subroutine Set_Property, Send_Event, Post_Event, Send_Message, SendMessage, Error_Services
|
Declare subroutine Set_Property, Send_Event, Post_Event, Send_Message, SendMessage, Error_Services
|
||||||
Declare subroutine Obj_Wo_Mat_Log, Errmsg, Utility, SRP_Show_Window, Material_Movement_Services, Set_Status
|
Declare subroutine Obj_Wo_Mat_Log, Errmsg, Utility, SRP_Show_Window, Material_Movement_Services, Set_Status
|
||||||
Declare function Get_Property, Send_Message, SendMessage, Material_Movement_Services, Error_Services,
|
Declare function Get_Property, Send_Message, SendMessage, Material_Movement_Services, Error_Services,
|
||||||
Declare function Popup, obj_WO_Mat, Database_Services, Utility, Rds_Services, Message_Box
|
Declare function Popup, obj_WO_Mat, Database_Services, Utility, Rds_Services, Message_Box
|
||||||
|
|
||||||
*Subclass = @Window : '.OLE_SUBCLASS'
|
|
||||||
|
|
||||||
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
|
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
|
||||||
If Event EQ 'OLE' then
|
If Event EQ 'OLE' then
|
||||||
Transfer Event to OIEvent
|
Transfer Event to OIEvent
|
||||||
Transfer Param1 to Event
|
Transfer Param1 to Event
|
||||||
Transfer Param2 to Param1
|
Transfer Param2 to Param1
|
||||||
Transfer Param3 to Param2
|
Transfer Param3 to Param2
|
||||||
Transfer Param4 to Param3
|
Transfer Param4 to Param3
|
||||||
Transfer Param5 to Param4
|
Transfer Param5 to Param4
|
||||||
Transfer Param6 to Param5
|
Transfer Param6 to Param5
|
||||||
Transfer Param7 to Param6
|
Transfer Param7 to Param6
|
||||||
Transfer Param8 to Param7
|
Transfer Param8 to Param7
|
||||||
end
|
end
|
||||||
|
|
||||||
GoToEvent Event for CtrlEntId else
|
GoToEvent Event for CtrlEntId else
|
||||||
// Event not implemented
|
// Event not implemented
|
||||||
end
|
end
|
||||||
|
|
||||||
Return EventFlow or 1
|
Return EventFlow or 1
|
||||||
|
|
||||||
*global
|
|
||||||
ScanField = ''
|
ScanField = ''
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -78,27 +75,18 @@ ScanField = ''
|
|||||||
|
|
||||||
Event WINDOW.CREATE(CreateParam)
|
Event WINDOW.CREATE(CreateParam)
|
||||||
|
|
||||||
* CurrVer = Xlate('APP_INFO', 'LSL2_VERSION', '', 'X')
|
GoSub SetupOLEControls
|
||||||
* UserVer = Xlate('LSL_USERS', @User4, 'LSL2_VERSION', 'X')
|
GoSub ResetForm
|
||||||
* If UserVer NE CurrVer then
|
SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize)
|
||||||
* // Error message and close form
|
MsgStruct = ''
|
||||||
* ErrMsg = 'OpenInsight Version Error':@FM:'You are running an outdated version of OpenInsight and cannot release material until you restart your session.'
|
MsgStruct<MTEXTWIDTH$> = MSG_WIDTH$
|
||||||
* Msg(@Window, '', 'OK', '', ErrMsg)
|
|
||||||
* Post_Event(@Window, 'CLOSE')
|
|
||||||
* end else
|
|
||||||
GoSub SetupOLEControls
|
|
||||||
GoSub ResetForm
|
|
||||||
SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize)
|
|
||||||
MsgStruct = ''
|
|
||||||
MsgStruct<MTEXTWIDTH$> = MSG_WIDTH$
|
|
||||||
* end
|
|
||||||
|
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
Event OLE_BTN_CLEAR.OnClick(Point, Button, Shift, Ctrl)
|
Event OLE_BTN_CLEAR.OnClick(Point, Button, Shift, Ctrl)
|
||||||
*get count of unprocessed records
|
|
||||||
|
|
||||||
|
*get count of unprocessed records
|
||||||
allCompleted = True$
|
allCompleted = True$
|
||||||
resp = ''
|
resp = ''
|
||||||
Data = Get_Property(EditTable$, "OLE.ARRAY")
|
Data = Get_Property(EditTable$, "OLE.ARRAY")
|
||||||
@ -120,105 +108,117 @@ Event OLE_BTN_CLEAR.OnClick(Point, Button, Shift, Ctrl)
|
|||||||
GoSub ResetForm
|
GoSub ResetForm
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
Event OLE_BTN_SAVE.OnClick(Point, Button, Shift, Ctrl)
|
Event OLE_BTN_SAVE.OnClick(Point, Button, Shift, Ctrl)
|
||||||
|
|
||||||
*check for unfinished scan
|
*check for unfinished scan
|
||||||
F1 = Get_Property(Cassette1$, 'TEXT')
|
F1 = Get_Property(Cassette1$, 'TEXT')
|
||||||
F2 = Get_Property(Cassette2$, 'TEXT')
|
F2 = Get_Property(Cassette2$, 'TEXT')
|
||||||
F3 = Get_Property(Supplier$, 'TEXT')
|
F3 = Get_Property(Supplier$, 'TEXT')
|
||||||
resp = True$
|
resp = True$
|
||||||
If F1 NE '' OR F2 NE '' OR F3 NE '' then
|
If F1 NE '' OR F2 NE '' OR F3 NE '' then
|
||||||
resp = Message_Box(@Window, 'You have an unfinished scan (not in grid) - continue?', 'Confirm Save', MSG_BTN_OKCAN$ + MSG_DEFAULT2$)
|
resp = Message_Box(@Window, 'You have an unfinished scan (not in grid) - continue?', 'Confirm Save', MSG_BTN_OKCAN$ + MSG_DEFAULT2$)
|
||||||
end
|
end
|
||||||
if resp EQ True$ Then
|
if resp EQ True$ Then
|
||||||
Warehouse = '1K'
|
Warehouse = '1K'
|
||||||
Location = 'PTI'
|
Location = 'PTI'
|
||||||
Gosub SaveRecords
|
Gosub SaveRecords
|
||||||
end
|
end
|
||||||
|
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
Event EDL_CASSETTE1_SCAN.LOSTFOCUS(Flag, FocusID)
|
Event EDL_CASSETTE1_SCAN.LOSTFOCUS(Flag, FocusID)
|
||||||
|
|
||||||
ScanField = 'Cassette1'
|
ScanField = 'Cassette1'
|
||||||
If Flag EQ 1 then
|
If Flag EQ 1 then
|
||||||
ScanData = Get_Property(CtrlEntID, 'TEXT')
|
ScanData = Get_Property(CtrlEntID, 'TEXT')
|
||||||
If ScanData NE '' then
|
If ScanData NE '' then
|
||||||
ScanData = Material_Movement_Services('ProcessFQAScanData', ScanData, 'CASSETTE1')
|
ScanData = Material_Movement_Services('ProcessFQAScanData', ScanData, 'CASSETTE1')
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
RDSNo = ScanData<1>
|
||||||
Set_Property(Cassette2$, 'ENABLED', True$)
|
SeqNo = ScanData<2>
|
||||||
Set_Property(Cassette2$, 'FOCUS', True$)
|
Set_Property(Cassette1$, '@SEQNO', SeqNo)
|
||||||
Set_Property(CtrlEntID, 'ENABLED', False$)
|
Set_Property(CtrlEntID, 'TEXT', RDSNo)
|
||||||
Gosub ValidateGrid
|
Set_Property(Cassette2$, 'ENABLED', True$)
|
||||||
end else
|
Set_Property(Cassette2$, 'FOCUS', True$)
|
||||||
GoSub ResetForm
|
Set_Property(CtrlEntID, 'ENABLED', False$)
|
||||||
ErrorMessage = Error_Services('GetMessage')
|
Gosub ValidateGrid
|
||||||
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMessage)
|
end else
|
||||||
end
|
GoSub ResetForm
|
||||||
end
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
end
|
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMessage)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
Event EDL_CASSETTE2_SCAN.LOSTFOCUS(Flag, FocusID)
|
Event EDL_CASSETTE2_SCAN.LOSTFOCUS(Flag, FocusID)
|
||||||
ScanField = 'Cassette2'
|
|
||||||
If Flag EQ 1 then
|
|
||||||
ScanData = Get_Property(CtrlEntID, 'TEXT')
|
|
||||||
Cass1 = Get_Property(Cassette1$, 'TEXT')
|
|
||||||
retVal = Set_Property(@window, '@IsEpp', False$)
|
|
||||||
If ScanData[1,1] = 'O' OR ScanData[1,3] = '1TO' then
|
|
||||||
retVal = Set_Property(@window, '@IsEpp', True$)
|
|
||||||
end
|
|
||||||
If ScanData NE '' then
|
|
||||||
ScanData = Material_Movement_Services('ProcessFQAScanData', ScanData, 'CASSETTE2', Cass1)
|
|
||||||
If Error_Services('NoError') then
|
|
||||||
* IF EPP, prepopulate lot and just validate
|
|
||||||
|
|
||||||
If Get_Property(@window, '@IsEpp') EQ True$ then
|
ScanField = 'Cassette2'
|
||||||
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
If Flag EQ 1 then
|
||||||
Set_Property(Supplier$, 'TEXT', 'EpiPRO')
|
ScanData = Get_Property(CtrlEntID, 'TEXT')
|
||||||
|
Cass1 = Get_Property(Cassette1$, 'TEXT')
|
||||||
|
Seq1No = Get_Property(Cassette1$, '@SEQNO')
|
||||||
|
retVal = Set_Property(@window, '@IsEpp', False$)
|
||||||
|
If Index(ScanData, '.', 1) then
|
||||||
|
retVal = Set_Property(@window, '@IsEpp', True$)
|
||||||
|
end
|
||||||
|
If ScanData NE '' then
|
||||||
|
ScanData = Material_Movement_Services('ProcessFQAScanData', ScanData, 'CASSETTE2', Cass1, Seq1No)
|
||||||
|
If Error_Services('NoError') then
|
||||||
|
* IF EPP, prepopulate lot and just validate
|
||||||
|
If Get_Property(@window, '@IsEpp') EQ True$ then
|
||||||
|
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
||||||
|
Set_Property(Supplier$, 'TEXT', 'EpiPRO')
|
||||||
Gosub ValidateGrid
|
Gosub ValidateGrid
|
||||||
Set_Property(Supplier$, 'ENABLED', False$)
|
Set_Property(Supplier$, 'ENABLED', False$)
|
||||||
Set_Property(Cassette1$, 'FOCUS', True$)
|
Set_Property(Cassette1$, 'FOCUS', True$)
|
||||||
Gosub ValidateGrid
|
Gosub ValidateGrid
|
||||||
end else
|
end else
|
||||||
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
||||||
Gosub ValidateGrid
|
Gosub ValidateGrid
|
||||||
Set_Property(Supplier$, 'ENABLED', True$)
|
Set_Property(Supplier$, 'ENABLED', True$)
|
||||||
Set_Property(Supplier$, 'FOCUS', True$)
|
Set_Property(Supplier$, 'FOCUS', True$)
|
||||||
Set_Property(CtrlEntID, 'ENABLED', False$)
|
Set_Property(CtrlEntID, 'ENABLED', False$)
|
||||||
Gosub ValidateGrid
|
Gosub ValidateGrid
|
||||||
end
|
end
|
||||||
end else
|
end else
|
||||||
GoSub ResetForm
|
GoSub ResetForm
|
||||||
ErrorMessage = Error_Services('GetMessage')
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMessage)
|
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMessage)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
Event EDL_SUPPLIER_SCAN.LOSTFOCUS(Flag, FocusID)
|
Event EDL_SUPPLIER_SCAN.LOSTFOCUS(Flag, FocusID)
|
||||||
|
|
||||||
ScanField = 'Lot'
|
ScanField = 'Lot'
|
||||||
If Flag EQ 1 then
|
If Flag EQ 1 then
|
||||||
Cassette1 = Get_Property(Cassette1$, 'TEXT')
|
Cassette1 = Get_Property(Cassette1$, 'TEXT')
|
||||||
ScanData = Get_Property(CtrlEntID, 'TEXT')
|
ScanData = Get_Property(CtrlEntID, 'TEXT')
|
||||||
If ScanData NE '' then
|
If ScanData NE '' then
|
||||||
ScanData = Material_Movement_Services('ProcessFQAScanData', ScanData, 'SUPPLIER', Cassette1)
|
ScanData = Material_Movement_Services('ProcessFQAScanData', ScanData, 'SUPPLIER', Cassette1)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
||||||
Set_Property(CtrlEntID, 'ENABLED', False$)
|
Set_Property(CtrlEntID, 'ENABLED', False$)
|
||||||
Gosub ValidateGrid
|
Gosub ValidateGrid
|
||||||
end else
|
end else
|
||||||
GoSub ResetForm
|
GoSub ResetForm
|
||||||
ErrorMessage = Error_Services('GetMessage')
|
ErrorMessage = Error_Services('GetMessage')
|
||||||
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMessage)
|
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMessage)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end event
|
end event
|
||||||
|
|
||||||
|
|
||||||
@ -227,6 +227,7 @@ end event
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
SaveRecords:
|
SaveRecords:
|
||||||
|
|
||||||
*iterate thround all records in the grid, saving them and updating the status and location
|
*iterate thround all records in the grid, saving them and updating the status and location
|
||||||
Data = Get_Property(EditTable$, "OLE.ARRAY")
|
Data = Get_Property(EditTable$, "OLE.ARRAY")
|
||||||
cnt = count(Data<1>, @VM) + (Data<1># '')
|
cnt = count(Data<1>, @VM) + (Data<1># '')
|
||||||
@ -243,12 +244,12 @@ SaveRecords:
|
|||||||
Loc = '1K*PTI'
|
Loc = '1K*PTI'
|
||||||
Set_Property(EditTable$, 'OLE.CellColors[ALL;':i:']', 'Auto':@FM:'Auto')
|
Set_Property(EditTable$, 'OLE.CellColors[ALL;':i:']', 'Auto':@FM:'Auto')
|
||||||
cntProc += 1
|
cntProc += 1
|
||||||
end else
|
end else
|
||||||
Status = 'Error'
|
Status = 'Error'
|
||||||
Set_Property(EditTable$, 'OLE.CellColors[ALL;':i:']', 'Auto':@FM:'Red')
|
Set_Property(EditTable$, 'OLE.CellColors[ALL;':i:']', 'Auto':@FM:'Red')
|
||||||
end
|
end
|
||||||
|
|
||||||
Set_Property(EditTable$, 'OLE.CELLTEXT[4;':i:']', Status)
|
Set_Property(EditTable$, 'OLE.CELLTEXT[4;':i:']', Status)
|
||||||
Set_Property(EditTable$, 'OLE.CELLTEXT[5;':i:']', Loc)
|
Set_Property(EditTable$, 'OLE.CELLTEXT[5;':i:']', Loc)
|
||||||
end
|
end
|
||||||
Next i
|
Next i
|
||||||
@ -274,6 +275,7 @@ return
|
|||||||
|
|
||||||
|
|
||||||
ValidateGrid:
|
ValidateGrid:
|
||||||
|
|
||||||
F1 = Get_Property(Cassette1$, 'TEXT')
|
F1 = Get_Property(Cassette1$, 'TEXT')
|
||||||
F2 = Get_Property(Cassette2$, 'TEXT')
|
F2 = Get_Property(Cassette2$, 'TEXT')
|
||||||
F3 = Get_Property(Supplier$, 'TEXT')
|
F3 = Get_Property(Supplier$, 'TEXT')
|
||||||
@ -285,11 +287,6 @@ ValidateGrid:
|
|||||||
result = 1
|
result = 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
* if ScanField = 'Lot' then ; * do not look for duplicates
|
|
||||||
* result = 0
|
|
||||||
* end else
|
|
||||||
* result = InList(Data, ScanData, @VM) OR InList(Data, ScanData, @FM)
|
|
||||||
* end
|
|
||||||
|
|
||||||
If INDEX(F1,'.',2) then
|
If INDEX(F1,'.',2) then
|
||||||
RDSType = 'EPP'
|
RDSType = 'EPP'
|
||||||
@ -313,32 +310,32 @@ ValidateGrid:
|
|||||||
|
|
||||||
if result EQ 1 then
|
if result EQ 1 then
|
||||||
ErrorMessage = 'Value already exists in grid: ':ScanData
|
ErrorMessage = 'Value already exists in grid: ':ScanData
|
||||||
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMessage)
|
Msg(@Window, MsgStruct, 'PROCESS_ERROR', '', ErrorMessage)
|
||||||
Gosub ResetForm
|
Gosub ResetForm
|
||||||
end else if F1 NE '' AND F2 NE '' AND F3 NE '' then
|
end else if F1 NE '' AND F2 NE '' AND F3 NE '' then
|
||||||
|
|
||||||
// Add Material Log Entry
|
// Add Material Log Entry
|
||||||
CurrDTM = OCONV(Date(),'D2/'):' ':OCONV(Time(),'MTS')
|
CurrDTM = OCONV(Date(),'D2/'):' ':OCONV(Time(),'MTS')
|
||||||
UserID = @USER4
|
UserID = @USER4
|
||||||
|
|
||||||
LogFile = 'WO_MAT' ;* Changed so all scans are logged in the WO_MAT table 12/3/2006
|
LogFile = 'WO_MAT' ;* Changed so all scans are logged in the WO_MAT table 12/3/2006
|
||||||
Action = 'LBLCHK' ;* Final label check for same top and bottom and correct Lot Number on WO_MAT record
|
Action = 'LBLCHK' ;* Final label check for same top and bottom and correct Lot Number on WO_MAT record
|
||||||
WHCd = 'CR' ;* Clean room @ final QA
|
WHCd = 'CR' ;* Clean room @ final QA
|
||||||
LocCd = 'PKO' ;* QA wants this to "place" the cassette into the outbound passthrough
|
LocCd = 'PKO' ;* QA wants this to "place" the cassette into the outbound passthrough
|
||||||
WONo = Field(WOMatKey, '*', 1)
|
WONo = Field(WOMatKey, '*', 1)
|
||||||
CassNo = Field(WOMatKey, '*', 2)
|
CassNo = Field(WOMatKey, '*', 2)
|
||||||
Set_Status(0)
|
Set_Status(0)
|
||||||
obj_WO_Mat_Log('Create',LogFile:@RM:CurrDTM:@RM:Action:@RM:WhCd:@RM:LocCd:@RM:WONo:@RM:CassNo:@RM:UserID:@RM:'Match')
|
obj_WO_Mat_Log('Create',LogFile:@RM:CurrDTM:@RM:Action:@RM:WhCd:@RM:LocCd:@RM:WONo:@RM:CassNo:@RM:UserID:@RM:'Match')
|
||||||
|
|
||||||
IF Get_Status(errCode) THEN
|
IF Get_Status(errCode) THEN
|
||||||
Errmsg(errCode)
|
Errmsg(errCode)
|
||||||
END else
|
END else
|
||||||
// Insert row into OLE edit table to provide user feedback.
|
// Insert row into OLE edit table to provide user feedback.
|
||||||
Data = ''
|
Data = ''
|
||||||
Data<1> = F1:@VM:F2:@VM:F3:@VM:'Completed':@VM:Location:@VM
|
Data<1> = F1:@VM:F2:@VM:F3:@VM:'Completed':@VM:Location:@VM
|
||||||
Send_Message(EditTable$, 'OLE.INSERT', 1, Data)
|
Send_Message(EditTable$, 'OLE.INSERT', 1, Data)
|
||||||
GoSub ResetForm
|
GoSub ResetForm
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -346,38 +343,40 @@ return
|
|||||||
|
|
||||||
|
|
||||||
DisableFormControls:
|
DisableFormControls:
|
||||||
|
|
||||||
Set_Property(@Window:'.EDL_CASSETTE1_SCAN', 'TEXT', '')
|
Set_Property(@Window:'.EDL_CASSETTE1_SCAN', 'TEXT', '')
|
||||||
Set_Property(@Window:'.EDL_CASSETTE2_SCAN', 'TEXT', '')
|
Set_Property(@Window:'.EDL_CASSETTE2_SCAN', 'TEXT', '')
|
||||||
Set_Property(@Window:'.EDL_SUPPLIER_SCAN', 'TEXT', '')
|
Set_Property(@Window:'.EDL_SUPPLIER_SCAN', 'TEXT', '')
|
||||||
Set_Property(@Window:'.EDL_CASSETTE1_SCAN', 'ENABLED', False$)
|
Set_Property(@Window:'.EDL_CASSETTE1_SCAN', 'ENABLED', False$)
|
||||||
Set_Property(@Window:'.EDL_CASSETTE2_SCAN', 'ENABLED', False$)
|
Set_Property(@Window:'.EDL_CASSETTE2_SCAN', 'ENABLED', False$)
|
||||||
Set_Property(@Window:'.EDL_SUPPLIER_SCAN', 'ENABLED', False$)
|
Set_Property(@Window:'.EDL_SUPPLIER_SCAN', 'ENABLED', False$)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
SetupOLEControls:
|
SetupOLEControls:
|
||||||
|
|
||||||
// Qualify OLE events that we want to intercept
|
// Qualify OLE events that we want to intercept
|
||||||
Qualifier = ''
|
Qualifier = ''
|
||||||
Qualifier<1> = 1
|
Qualifier<1> = 1
|
||||||
Qualifier<3> = ''
|
Qualifier<3> = ''
|
||||||
Qualifier<4> = 0 ; * process synchronously
|
Qualifier<4> = 0 ; * process synchronously
|
||||||
NumCols = 4
|
NumCols = 4
|
||||||
NumRows = 150
|
NumRows = 150
|
||||||
|
|
||||||
Ctrl = @Window:'.OLE_BTN_CLEAR'
|
Ctrl = @Window:'.OLE_BTN_CLEAR'
|
||||||
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', Qualifier)
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', Qualifier)
|
||||||
Ctrl = @Window:'.OLE_BTN_SAVE'
|
Ctrl = @Window:'.OLE_BTN_SAVE'
|
||||||
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', Qualifier)
|
Send_Message(Ctrl, 'QUALIFY_EVENT', 'OLE.OnClick', Qualifier)
|
||||||
|
|
||||||
DimensionArray = NumCols:@FM:NumRows
|
DimensionArray = NumCols:@FM:NumRows
|
||||||
Set_Property(EditTable$, "OLE.Dimension", DimensionArray)
|
Set_Property(EditTable$, "OLE.Dimension", DimensionArray)
|
||||||
Titles = "Top Label":@VM:"Bottom Label":@VM:"Sub Lot":@VM:"Scan Status"
|
Titles = "Top Label":@VM:"Bottom Label":@VM:"Sub Lot":@VM:"Scan Status"
|
||||||
Set_Property(EditTable$, "OLE.TitleList", Titles)
|
Set_Property(EditTable$, "OLE.TitleList", Titles)
|
||||||
|
|
||||||
Set_Property(EditTable$, "OLE.DataColumn[1-2]", '85')
|
Set_Property(EditTable$, "OLE.DataColumn[1-2]", '85')
|
||||||
Set_Property(EditTable$, "OLE.DataColumn[3]", '80')
|
Set_Property(EditTable$, "OLE.DataColumn[3]", '80')
|
||||||
Set_Property(EditTable$, "OLE.DataColumn[4]", '90')
|
Set_Property(EditTable$, "OLE.DataColumn[4]", '90')
|
||||||
|
|
||||||
AlignArray = 'C':@FM:'C':@FM:'L'
|
AlignArray = 'C':@FM:'C':@FM:'L'
|
||||||
Set_Property(EditTable$, "OLE.CellAlignment[All; All]", AlignArray)
|
Set_Property(EditTable$, "OLE.CellAlignment[All; All]", AlignArray)
|
||||||
@ -396,6 +395,8 @@ SetupOLEControls:
|
|||||||
SelStyleArray = 'Black' : @VM : OI_HOT_BLUE$ : ' L=70' : @FM : 'Black' : @VM : OI_HOT_BLUE$
|
SelStyleArray = 'Black' : @VM : OI_HOT_BLUE$ : ' L=70' : @FM : 'Black' : @VM : OI_HOT_BLUE$
|
||||||
Set_Property(EditTable$, 'OLE.SelectionStyle', SelStyleArray) ; // Automatically highlight the current row with one color and highlight the current row with another color.
|
Set_Property(EditTable$, 'OLE.SelectionStyle', SelStyleArray) ; // Automatically highlight the current row with one color and highlight the current row with another color.
|
||||||
|
|
||||||
|
Set_Property(@Window:'.OLE_BTN_CLEAR', 'OLE.Style', 'STD')
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@ -414,5 +415,7 @@ ResetForm:
|
|||||||
cnt = count(Data<1>, @VM) + (Data<1># '')
|
cnt = count(Data<1>, @VM) + (Data<1># '')
|
||||||
Set_Property(@Window:'.OLE_BTN_SAVE', 'ENABLED', cnt GE 1)
|
Set_Property(@Window:'.OLE_BTN_SAVE', 'ENABLED', cnt GE 1)
|
||||||
Set_Property(EditTable$, 'OLE.CellColors[ALL;All]', 'Auto':@FM:'Auto')
|
Set_Property(EditTable$, 'OLE.CellColors[ALL;All]', 'Auto':@FM:'Auto')
|
||||||
|
Set_Property(Cassette1$, '@SEQNO', '')
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -36,20 +36,18 @@ $insert WO_MAT_EQUATES
|
|||||||
$insert APPCOLORS
|
$insert APPCOLORS
|
||||||
$insert MESSAGE_BOX_EQUATES
|
$insert MESSAGE_BOX_EQUATES
|
||||||
|
|
||||||
Equ CRLF$ to \0D0A\
|
Equ CRLF$ to \0D0A\
|
||||||
Equ MSG_WIDTH$ to 600
|
Equ MSG_WIDTH$ to 600
|
||||||
Equ EditTable$ to @Window:'.OLE_EDT_SCANDATA'
|
Equ EditTable$ to @Window:'.OLE_EDT_SCANDATA'
|
||||||
Equ Cassette1$ to @Window:'.EDL_CASSETTE1_SCAN'
|
Equ Cassette1$ to @Window:'.EDL_CASSETTE1_SCAN'
|
||||||
Equ Cassette2$ to @Window:'.EDL_CASSETTE2_SCAN'
|
Equ Cassette2$ to @Window:'.EDL_CASSETTE2_SCAN'
|
||||||
Equ Supplier$ to @Window:'.EDL_SUPPLIER_SCAN'
|
Equ Supplier$ to @Window:'.EDL_SUPPLIER_SCAN'
|
||||||
|
|
||||||
Declare subroutine Set_Property, Send_Event, Post_Event, Send_Message, SendMessage, Error_Services
|
Declare subroutine Set_Property, Send_Event, Post_Event, Send_Message, SendMessage, Error_Services
|
||||||
Declare subroutine Obj_Wo_Mat_Log, Errmsg, Utility, SRP_Show_Window, Material_Movement_Services, PlaceDialog
|
Declare subroutine Obj_Wo_Mat_Log, Errmsg, Utility, SRP_Show_Window, Material_Movement_Services, PlaceDialog
|
||||||
Declare function Get_Property, Send_Message, SendMessage, Material_Movement_Services, Error_Services,
|
Declare function Get_Property, Send_Message, SendMessage, Material_Movement_Services, Error_Services,
|
||||||
Declare function Popup, obj_WO_Mat, Database_Services, Utility, Rds_Services, Message_Box
|
Declare function Popup, obj_WO_Mat, Database_Services, Utility, Rds_Services, Message_Box
|
||||||
|
|
||||||
*Subclass = @Window : '.OLE_SUBCLASS'
|
|
||||||
|
|
||||||
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
|
// Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
|
||||||
If Event EQ 'OLE' then
|
If Event EQ 'OLE' then
|
||||||
Transfer Event to OIEvent
|
Transfer Event to OIEvent
|
||||||
@ -69,7 +67,6 @@ end
|
|||||||
|
|
||||||
Return EventFlow or 1
|
Return EventFlow or 1
|
||||||
|
|
||||||
*global
|
|
||||||
ScanField = ''
|
ScanField = ''
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -151,7 +148,10 @@ Event EDL_CASSETTE1_SCAN.LOSTFOCUS(Flag, FocusID)
|
|||||||
If ScanData NE '' then
|
If ScanData NE '' then
|
||||||
ScanData = Material_Movement_Services('ProcessPTIScanData', ScanData, 'CASSETTE1')
|
ScanData = Material_Movement_Services('ProcessPTIScanData', ScanData, 'CASSETTE1')
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
RDSNo = ScanData<1>
|
||||||
|
SeqNo = ScanData<2>
|
||||||
|
Set_Property(Cassette1$, '@SEQNO', SeqNo)
|
||||||
|
Set_Property(CtrlEntID, 'TEXT', RDSNo)
|
||||||
Set_Property(Cassette2$, 'ENABLED', True$)
|
Set_Property(Cassette2$, 'ENABLED', True$)
|
||||||
Set_Property(Cassette2$, 'FOCUS', True$)
|
Set_Property(Cassette2$, 'FOCUS', True$)
|
||||||
Set_Property(CtrlEntID, 'ENABLED', False$)
|
Set_Property(CtrlEntID, 'ENABLED', False$)
|
||||||
@ -174,8 +174,9 @@ Event EDL_CASSETTE2_SCAN.LOSTFOCUS(Flag, FocusID)
|
|||||||
If Flag EQ 1 then
|
If Flag EQ 1 then
|
||||||
ScanData = Get_Property(CtrlEntID, 'TEXT')
|
ScanData = Get_Property(CtrlEntID, 'TEXT')
|
||||||
Cass1 = Get_Property(Cassette1$, 'TEXT')
|
Cass1 = Get_Property(Cassette1$, 'TEXT')
|
||||||
|
Seq1No = Get_Property(Cassette1$, '@SEQNO')
|
||||||
If ScanData NE '' then
|
If ScanData NE '' then
|
||||||
ScanData = Material_Movement_Services('ProcessPTIScanData', ScanData, 'CASSETTE2', Cass1)
|
ScanData = Material_Movement_Services('ProcessPTIScanData', ScanData, 'CASSETTE2', Cass1, Seq1No)
|
||||||
If Error_Services('NoError') then
|
If Error_Services('NoError') then
|
||||||
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
Set_Property(CtrlEntID, 'TEXT', ScanData)
|
||||||
Gosub ValidateGrid
|
Gosub ValidateGrid
|
||||||
@ -379,6 +380,9 @@ SetupOLEControls:
|
|||||||
SelStyleArray = 'Black' : @VM : OI_HOT_BLUE$ : ' L=70' : @FM : 'Black' : @VM : OI_HOT_BLUE$
|
SelStyleArray = 'Black' : @VM : OI_HOT_BLUE$ : ' L=70' : @FM : 'Black' : @VM : OI_HOT_BLUE$
|
||||||
Set_Property(EditTable$, 'OLE.SelectionStyle', SelStyleArray) ; // Automatically highlight the current row with one color and highlight the current row with another color.
|
Set_Property(EditTable$, 'OLE.SelectionStyle', SelStyleArray) ; // Automatically highlight the current row with one color and highlight the current row with another color.
|
||||||
|
|
||||||
|
Set_Property(@Window:'.OLE_BTN_CLEAR', 'OLE.Style', 'STD')
|
||||||
|
Set_Property(@Window:'.OLE_BTN_SAVE', 'OLE.Style', 'STD')
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ $INSERT EPI_PART_EQUATES
|
|||||||
$INSERT COMPANY_EQUATES
|
$INSERT COMPANY_EQUATES
|
||||||
$INSERT CUST_EPI_PART_EQUATES
|
$INSERT CUST_EPI_PART_EQUATES
|
||||||
$INSERT PRS_STAGE_EQUATES
|
$INSERT PRS_STAGE_EQUATES
|
||||||
|
$INSERT UNIT_EQUATES
|
||||||
|
|
||||||
DECLARE FUNCTION FIELDCOUNT, MSG, Key_Sort, Get_Printer, SRP_Math, Set_Printer, Utility, obj_Install, Printer_Select, obj_Vendor_Code, Direct_Print, Environment_Services
|
DECLARE FUNCTION FIELDCOUNT, MSG, Key_Sort, Get_Printer, SRP_Math, Set_Printer, Utility, obj_Install, Printer_Select, obj_Vendor_Code, Direct_Print, Environment_Services
|
||||||
DECLARE SUBROUTINE Extract_Si_Keys, Update_Index, ErrMsg
|
DECLARE SUBROUTINE Extract_Si_Keys, Update_Index, ErrMsg
|
||||||
@ -48,129 +49,139 @@ EQU PS$RECIPE TO 3
|
|||||||
EQU PS$FREQ TO 4
|
EQU PS$FREQ TO 4
|
||||||
EQU PS$PATTERN TO 11
|
EQU PS$PATTERN TO 11
|
||||||
|
|
||||||
IF NOT(ASSIGNED(RdsIds)) THEN RdsIds = '' ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
Main:
|
||||||
IF NOT(ASSIGNED(MultiStep)) THEN MultiStep = '' ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
|
||||||
|
|
||||||
IF RdsIds = '' THEN RETURN 0 ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
IF NOT(ASSIGNED(RdsIds)) THEN RdsIds = '' ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||||
IF MultiStep = '' THEN MultiStep = 0 ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
IF NOT(ASSIGNED(MultiStep)) THEN MultiStep = '' ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||||
|
|
||||||
FileName = "Printing Label"
|
IF RdsIds = '' THEN RETURN 0 ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||||
Title = "Printing Label"
|
IF MultiStep = '' THEN MultiStep = 0 ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||||
|
|
||||||
PageInfo = ''
|
FileName = "Printing Label"
|
||||||
PageInfo<PI$LEFT> = 0.1
|
Title = "Printing Label"
|
||||||
PageInfo<PI$TOP> = 0.1
|
|
||||||
PageInfo<PI$RIGHT> = 0.1
|
|
||||||
PageInfo<PI$BOTTOM> = 0.1
|
|
||||||
|
|
||||||
PageSetup = '1' ;* Landscape
|
PageInfo = ''
|
||||||
PrintSetup = '' ;* Preview
|
PageInfo<PI$LEFT> = 0.1
|
||||||
|
PageInfo<PI$TOP> = 0.1
|
||||||
|
PageInfo<PI$RIGHT> = 0.1
|
||||||
|
PageInfo<PI$BOTTOM> = 0.1
|
||||||
|
|
||||||
PrinterID = ''
|
PageSetup = '1' ;* Landscape
|
||||||
PrintPath = Printer_Select(PrinterID) ;* Popup is skipped IF Printer ID is passed
|
PrintSetup = '' ;* Preview
|
||||||
|
|
||||||
If PrintPath NE '' then
|
PrinterID = ''
|
||||||
|
PrintPath = Printer_Select(PrinterID) ;* Popup is skipped IF Printer ID is passed
|
||||||
|
|
||||||
|
If PrintPath NE '' then
|
||||||
|
|
||||||
|
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
||||||
|
stat = Set_Printer("INIT",FileName,Title,PageInfo,PageSetup,PrintSetup,PrintPath)
|
||||||
|
end else
|
||||||
|
stat = Direct_Print('START', PrintPath<1>, '', '')
|
||||||
|
end
|
||||||
|
|
||||||
|
IF stat GE 0 THEN
|
||||||
|
|
||||||
|
EQU DosPath$ TO 'C:\WINDOWS\OIZPL.TXT' ;* remove jch
|
||||||
|
|
||||||
|
CLOrientation = '' ;* used for printing on cleanroom labels
|
||||||
|
|
||||||
|
IF RdsIds THEN
|
||||||
|
Update_Index ("RDS", "WO", "")
|
||||||
|
Void = utility( 'CURSOR', 'H' )
|
||||||
|
IdCnt = fieldcount( RdsIds, @FM )
|
||||||
|
* sort by run order number
|
||||||
|
IF IdCnt > 1 THEN
|
||||||
|
RdsIds = key_sort( RdsIds, 'RDS', 'WO':@FM:'RUN_ORDER_NUM', 1, '', '' )
|
||||||
|
END
|
||||||
|
|
||||||
|
// To work around the design flaws in the label printing logic regarding multiple RDS Key IDs
|
||||||
|
// while still preserving the variable names, the RdsIds values will be transferred to AllRdsIds
|
||||||
|
// and then each RDS Key ID will be parsed in a loop and passed into the RdsIds variable.
|
||||||
|
Transfer RdsIds to AllRdsIds
|
||||||
|
For Each RdsIds in AllRdsIds using @FM
|
||||||
|
IdCnt = fieldcount( RdsIds, @FM )
|
||||||
|
GOSUB PrintCleanRoomLabels
|
||||||
|
Next RdsIds
|
||||||
|
|
||||||
|
// Restore RdsIds variable for other processes that need it to be intact.
|
||||||
|
Transfer AllRdsIds to RdsIds
|
||||||
|
|
||||||
|
UniqueWOs = ''
|
||||||
|
CustNos = ''
|
||||||
|
CompositeKeys = ''
|
||||||
|
IdCnt = fieldcount( RdsIds, @FM )
|
||||||
|
|
||||||
|
IF MultiStep > 0 THEN
|
||||||
|
|
||||||
|
WOStepKeys = XLATE('RDS',RdsIds,RDS_WO_STEP_KEY$,'X') ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||||
|
FOR I = 1 TO IdCnt
|
||||||
|
ThisWO = WOStepKeys<I>
|
||||||
|
CONVERT '*' TO '.' IN ThisWO
|
||||||
|
CassNo = XLATE('RDS',RdsIds<I>,'CASS_NO','X')
|
||||||
|
WOMatRec = XLATE('WO_MAT',ThisWO:'*':CassNo,'','X')
|
||||||
|
ReShipCustNo = WOMatRec<WO_MAT_RESHIP_CUST_NO$>
|
||||||
|
If ReShipCustNo EQ '' then
|
||||||
|
CustNo = XLATE( 'WO_LOG', ThisWO, wo_log_cust_no$, 'X' )
|
||||||
|
end else
|
||||||
|
CustNo = ReShipCustNo
|
||||||
|
end
|
||||||
|
LOCATE ThisWO : '*' : CustNo IN CompositeKeys USING @VM SETTING FPos ELSE
|
||||||
|
UniqueWOs<1,-1> = ThisWO
|
||||||
|
CustNos<1,-1> = CustNo
|
||||||
|
CompositeKeys<1,-1> = ThisWO : '*' : CustNo
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END ELSE
|
||||||
|
|
||||||
|
AllWOs = XLATE( 'RDS', RdsIds, rds_wo$, 'X' )
|
||||||
|
FOR I = 1 TO IdCnt
|
||||||
|
ThisWO = AllWOs<I>
|
||||||
|
CassNo = XLATE('RDS',RdsIds<I>,'CASS_NO','X')
|
||||||
|
WOMatRec = XLATE('WO_MAT',ThisWO:'*':CassNo,'','X')
|
||||||
|
ReShipCustNo = WOMatRec<WO_MAT_RESHIP_CUST_NO$>
|
||||||
|
If ReShipCustNo EQ '' then
|
||||||
|
CustNo = XLATE( 'WO_LOG', ThisWO, wo_log_cust_no$, 'X' )
|
||||||
|
end else
|
||||||
|
CustNo = ReShipCustNo
|
||||||
|
end
|
||||||
|
LOCATE ThisWO : '*' : CustNo IN CompositeKeys USING @VM SETTING Fpos ELSE
|
||||||
|
UniqueWOs<1,-1> = ThisWO
|
||||||
|
CustNos<1,-1> = CustNo
|
||||||
|
CompositeKeys<1,-1> = ThisWO : '*' : CustNo
|
||||||
|
END
|
||||||
|
NEXT I
|
||||||
|
|
||||||
|
END
|
||||||
|
|
||||||
|
GOSUB PrintWOLabels ;* Activated WO label printing again -dkk 12/3/14
|
||||||
|
|
||||||
|
WONo = XLATE('RDS',RdsIds<1>,RDS_WO$,'X')
|
||||||
|
CustNo = XLATE('WO_LOG',WONo,WO_LOG_CUST_NO$,'X')
|
||||||
|
Void = UTILITY( 'CURSOR', 'A' )
|
||||||
|
END
|
||||||
|
end
|
||||||
|
|
||||||
|
GoSub EndPrint
|
||||||
|
|
||||||
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
|
||||||
stat = Set_Printer("INIT",FileName,Title,PageInfo,PageSetup,PrintSetup,PrintPath)
|
|
||||||
end else
|
|
||||||
stat = Direct_Print('START', PrintPath<1>, '', '')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
IF stat < 0 THEN GOTO OIPrint_Error
|
RETURN
|
||||||
|
|
||||||
EQU DosPath$ TO 'C:\WINDOWS\OIZPL.TXT' ;* remove jch
|
|
||||||
|
|
||||||
CLOrientation = '' ;* used for printing on cleanroom labels
|
* * * * * *
|
||||||
|
EndPrint:
|
||||||
IF RdsIds THEN
|
* * * * * *
|
||||||
Update_Index ("RDS", "WO", "")
|
|
||||||
Void = utility( 'CURSOR', 'H' )
|
|
||||||
IdCnt = fieldcount( RdsIds, @FM )
|
|
||||||
* sort by run order number
|
|
||||||
IF IdCnt > 1 THEN
|
|
||||||
RdsIds = key_sort( RdsIds, 'RDS', 'WO':@FM:'RUN_ORDER_NUM', 1, '', '' )
|
|
||||||
END
|
|
||||||
|
|
||||||
// To work around the design flaws in the label printing logic regarding multiple RDS Key IDs
|
|
||||||
// while still preserving the variable names, the RdsIds values will be transferred to AllRdsIds
|
|
||||||
// and then each RDS Key ID will be parsed in a loop and passed into the RdsIds variable.
|
|
||||||
Transfer RdsIds to AllRdsIds
|
|
||||||
For Each RdsIds in AllRdsIds using @FM
|
|
||||||
IdCnt = fieldcount( RdsIds, @FM )
|
|
||||||
GOSUB PrintCleanRoomLabels
|
|
||||||
Next RdsIds
|
|
||||||
|
|
||||||
// Restore RdsIds variable for other processes that need it to be intact.
|
|
||||||
Transfer AllRdsIds to RdsIds
|
|
||||||
|
|
||||||
UniqueWOs = ''
|
|
||||||
CustNos = ''
|
|
||||||
CompositeKeys = ''
|
|
||||||
IdCnt = fieldcount( RdsIds, @FM )
|
|
||||||
|
|
||||||
IF MultiStep > 0 THEN
|
|
||||||
|
|
||||||
WOStepKeys = XLATE('RDS',RdsIds,RDS_WO_STEP_KEY$,'X') ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
|
||||||
FOR I = 1 TO IdCnt
|
|
||||||
ThisWO = WOStepKeys<I>
|
|
||||||
CONVERT '*' TO '.' IN ThisWO
|
|
||||||
CassNo = XLATE('RDS',RdsIds<I>,'CASS_NO','X')
|
|
||||||
WOMatRec = XLATE('WO_MAT',ThisWO:'*':CassNo,'','X')
|
|
||||||
ReShipCustNo = WOMatRec<WO_MAT_RESHIP_CUST_NO$>
|
|
||||||
If ReShipCustNo EQ '' then
|
|
||||||
CustNo = XLATE( 'WO_LOG', ThisWO, wo_log_cust_no$, 'X' )
|
|
||||||
end else
|
|
||||||
CustNo = ReShipCustNo
|
|
||||||
end
|
|
||||||
LOCATE ThisWO : '*' : CustNo IN CompositeKeys USING @VM SETTING FPos ELSE
|
|
||||||
UniqueWOs<1,-1> = ThisWO
|
|
||||||
CustNos<1,-1> = CustNo
|
|
||||||
CompositeKeys<1,-1> = ThisWO : '*' : CustNo
|
|
||||||
END
|
|
||||||
NEXT I
|
|
||||||
|
|
||||||
END ELSE
|
|
||||||
|
|
||||||
AllWOs = XLATE( 'RDS', RdsIds, rds_wo$, 'X' )
|
|
||||||
FOR I = 1 TO IdCnt
|
|
||||||
ThisWO = AllWOs<I>
|
|
||||||
CassNo = XLATE('RDS',RdsIds<I>,'CASS_NO','X')
|
|
||||||
WOMatRec = XLATE('WO_MAT',ThisWO:'*':CassNo,'','X')
|
|
||||||
ReShipCustNo = WOMatRec<WO_MAT_RESHIP_CUST_NO$>
|
|
||||||
If ReShipCustNo EQ '' then
|
|
||||||
CustNo = XLATE( 'WO_LOG', ThisWO, wo_log_cust_no$, 'X' )
|
|
||||||
end else
|
|
||||||
CustNo = ReShipCustNo
|
|
||||||
end
|
|
||||||
LOCATE ThisWO : '*' : CustNo IN CompositeKeys USING @VM SETTING Fpos ELSE
|
|
||||||
UniqueWOs<1,-1> = ThisWO
|
|
||||||
CustNos<1,-1> = CustNo
|
|
||||||
CompositeKeys<1,-1> = ThisWO : '*' : CustNo
|
|
||||||
END
|
|
||||||
NEXT I
|
|
||||||
|
|
||||||
END
|
|
||||||
|
|
||||||
GOSUB PrintWOLabels ;* Activated WO label printing again -dkk 12/3/14
|
|
||||||
|
|
||||||
WONo = XLATE('RDS',RdsIds<1>,RDS_WO$,'X')
|
|
||||||
CustNo = XLATE('WO_LOG',WONo,WO_LOG_CUST_NO$,'X')
|
|
||||||
Void = UTILITY( 'CURSOR', 'A' )
|
|
||||||
END
|
|
||||||
|
|
||||||
* * * * * *
|
|
||||||
OIPrint_Error:
|
|
||||||
* * * * * *
|
|
||||||
|
|
||||||
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
||||||
stat = Set_Printer("TERM")
|
stat = Set_Printer("TERM")
|
||||||
end else
|
end else
|
||||||
stat = Direct_Print('STOP')
|
stat = Direct_Print('STOP')
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
RETURN
|
return
|
||||||
|
|
||||||
|
|
||||||
* * * * * * * * * * * * Local Subroutines * * * * * * * * * * * *
|
* * * * * * * * * * * * Local Subroutines * * * * * * * * * * * *
|
||||||
|
|
||||||
@ -246,9 +257,7 @@ PrintCleanRoomLabels:
|
|||||||
PSNIds = XLATE( 'RDS', RdsIds, rds_prod_spec_id$, 'X' )
|
PSNIds = XLATE( 'RDS', RdsIds, rds_prod_spec_id$, 'X' )
|
||||||
SpecType = OCONV( XLATE( 'RDS', RdsIds, 'SPEC_TYPE', 'X' ), '[SPEC_TYPE_CONV]' )
|
SpecType = OCONV( XLATE( 'RDS', RdsIds, 'SPEC_TYPE', 'X' ), '[SPEC_TYPE_CONV]' )
|
||||||
SubPartNum = XLATE( 'RDS', RdsIds, 'SUB_PART_NUM', 'X' )
|
SubPartNum = XLATE( 'RDS', RdsIds, 'SUB_PART_NUM', 'X' )
|
||||||
|
|
||||||
RecipeInfo = XLATE( 'RECIPE', RecipeIDS, 'RECIPE_NAME_NO', 'X' )
|
RecipeInfo = XLATE( 'RECIPE', RecipeIDS, 'RECIPE_NAME_NO', 'X' )
|
||||||
|
|
||||||
ThickVar = XLATE( 'PROD_SPEC', PSNIds, 'THICK_MEASURE_L1', 'X' )
|
ThickVar = XLATE( 'PROD_SPEC', PSNIds, 'THICK_MEASURE_L1', 'X' )
|
||||||
ResVar = XLATE( 'PROD_SPEC', PSNIds, 'RES_MEASURE_L1', 'X' )
|
ResVar = XLATE( 'PROD_SPEC', PSNIds, 'RES_MEASURE_L1', 'X' )
|
||||||
ConVar = XLATE( 'PROD_SPEC', PSNIds, 'CON_MEASURE_L1', 'X' )
|
ConVar = XLATE( 'PROD_SPEC', PSNIds, 'CON_MEASURE_L1', 'X' )
|
||||||
@ -618,16 +627,16 @@ PrintCleanRoomLabels:
|
|||||||
END
|
END
|
||||||
|
|
||||||
swap '~' with fmt( ' ', 'L#2' ) in PrintThickPrintVar
|
swap '~' with fmt( ' ', 'L#2' ) in PrintThickPrintVar
|
||||||
swap 'æm' with 'um' in PrintThickTargets
|
swap UNIT_MICROMETER$ with 'um' in PrintThickTargets
|
||||||
swap 'ê-cm' with 'ohm.cm' in PrintThickTargets
|
swap UNIT_OHM_CM$ with 'ohm.cm' in PrintThickTargets
|
||||||
swap 'ê/Ü' with 'ohm/sq' in PrintThickTargets
|
swap UNIT_OHM_PER_SQ$ with 'ohm/sq' in PrintThickTargets
|
||||||
swap 'Â' with 'A' in PrintThickTargets
|
swap UNIT_A$ with 'A' in PrintThickTargets
|
||||||
|
|
||||||
swap '~' with fmt( ' ', 'L#2' ) in PrintResPrintVar
|
swap '~' with fmt( ' ', 'L#2' ) in PrintResPrintVar
|
||||||
swap 'æm' with 'um' in PrintResTargets
|
swap UNIT_MICROMETER$ with 'um' in PrintResTargets
|
||||||
swap 'ê-cm' with 'ohm.cm' in PrintResTargets
|
swap UNIT_OHM_CM$ with 'ohm.cm' in PrintResTargets
|
||||||
swap 'ê/Ü' with 'ohm/sq' in PrintResTargets
|
swap UNIT_OHM_PER_SQ$ with 'ohm/sq' in PrintResTargets
|
||||||
swap 'Â' with 'A' in PrintResTargets
|
swap UNIT_A$ with 'A' in PrintResTargets
|
||||||
|
|
||||||
//only print cheat sheet label on cassette #1
|
//only print cheat sheet label on cassette #1
|
||||||
IF CassNo EQ 1 then
|
IF CassNo EQ 1 then
|
||||||
@ -644,6 +653,7 @@ RETURN
|
|||||||
* * * * * * *
|
* * * * * * *
|
||||||
PrintLabel:
|
PrintLabel:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
* Standard RDS Label print method
|
* Standard RDS Label print method
|
||||||
IF PrintSpecType EQ 'Production' THEN PrintSpecType = 'Prod'
|
IF PrintSpecType EQ 'Production' THEN PrintSpecType = 'Prod'
|
||||||
IF PrintSpecType EQ 'Pre-Production' THEN PrintSpecType = 'Pre'
|
IF PrintSpecType EQ 'Pre-Production' THEN PrintSpecType = 'Pre'
|
||||||
@ -659,71 +669,71 @@ PrintLabel:
|
|||||||
PrintQARecipe = FIELD(PrintRecipe, @VM, 1)
|
PrintQARecipe = FIELD(PrintRecipe, @VM, 1)
|
||||||
PrintCompany = PrintCompany[1,32]
|
PrintCompany = PrintCompany[1,32]
|
||||||
|
|
||||||
//looping instead of using ^PQ2 since I have to set sequential key in 2D barcode
|
// Looping instead of using ^PQ2 since I have to set sequential key in 2D barcode
|
||||||
|
|
||||||
Str = ''
|
Str = ''
|
||||||
For cnt = 1 to 2
|
For cnt = 1 to 2
|
||||||
Str := '^XA'
|
Str := '^XA'
|
||||||
Str := '^LH0,0'
|
Str := '^LH0,0'
|
||||||
Str := '^PR1' ;* Print speed 2 inches per second
|
Str := '^PR1' ;* Print speed 2 inches per second
|
||||||
Str := '^LL406' ;* Label length @203 dpi
|
Str := '^LL406' ;* Label length @203 dpi
|
||||||
Str := '^PW900'
|
Str := '^PW900'
|
||||||
Str := '^MD0' ;* Media darkness
|
Str := '^MD5' ;* Media darkness
|
||||||
Str := '^MMT' ;* Media mode t=tear off mode
|
Str := '^MMT' ;* Media mode t=tear off mode
|
||||||
*Str := '^PQ2' ;* Print 2 labels for each pass through here
|
*Str := '^PQ2' ;* Print 2 labels for each pass through here
|
||||||
|
|
||||||
****** First Line, Cust, WO and RO
|
****** First Line, Cust, WO and RO
|
||||||
Str := '^FO25,25^AC,18^FDCust: ^FS':CRLF$
|
Str := '^FO25,25^AC,18^FDCust: ^FS':CRLF$
|
||||||
Str := '^FO95,14^A045,35^FD':PrintCompany:'^FS':CRLF$
|
Str := '^FO95,14^A045,35^FD':PrintCompany:'^FS':CRLF$
|
||||||
Str := '^FO570,25^AC18^FDWO: ^FS':CRLF$
|
Str := '^FO570,25^AC18^FDWO: ^FS':CRLF$
|
||||||
Str := '^FO610,14^A045,35^FD':PrintWO:'^FS':CRLF$
|
Str := '^FO610,14^A045,35^FD':PrintWO:'^FS':CRLF$
|
||||||
Str := '^FO730,25^AC18^FDRO: ^FS':CRLF$
|
Str := '^FO730,25^AC18^FDRO: ^FS':CRLF$
|
||||||
Str := '^FO770,14^A045,35^FD':PrintRONum:'^FS':CRLF$
|
Str := '^FO770,14^A045,35^FD':PrintRONum:'^FS':CRLF$
|
||||||
|
|
||||||
****** Second Line, Cust Spec, PSN and Type
|
****** Second Line, Cust Spec, PSN and Type
|
||||||
Str := '^FO25,75^AC18^FD(P)Cust Spec: ^FS':CRLF$
|
Str := '^FO25,75^AC18^FD(P)Cust Spec: ^FS':CRLF$
|
||||||
Str := '^FO185,65^A045,35^FD':CustEpiPartSpecNo:'^FS':CRLF$
|
Str := '^FO185,65^A045,35^FD':CustEpiPartSpecNo:'^FS':CRLF$
|
||||||
Str := '^FO25,95^BY2,2.0^B3,,50,N^FDP':CustEpiPartSpecNo:'^FS':CRLF$
|
Str := '^FO25,95^BY2,2.0^B3,,50,N^FDP':CustEpiPartSpecNo:'^FS':CRLF$
|
||||||
Str := '^FO640,75^AC18^FDPSN:^FS':CRLF$
|
Str := '^FO640,75^AC18^FDPSN:^FS':CRLF$
|
||||||
Str := '^FO690,65^A045,35^FD':PrintPSN:'^FS':CRLF$
|
Str := '^FO690,65^A045,35^FD':PrintPSN:'^FS':CRLF$
|
||||||
Str := '^FO630,125^AC18^FDType:^FS':CRLF$
|
Str := '^FO630,125^AC18^FDType:^FS':CRLF$
|
||||||
Str := '^FO690,115^A045,30^FD':PrintSpecType:'^FS':CRLF$
|
Str := '^FO690,115^A045,30^FD':PrintSpecType:'^FS':CRLF$
|
||||||
|
|
||||||
****** Third Line, Sub Lot, Qty and RDS
|
****** Third Line, Sub Lot, Qty and RDS
|
||||||
Str := '^FO25,175^AC18^FD(2T)Sub Lot:^FS':CRLF$
|
Str := '^FO25,175^AC18^FD(2T)Sub Lot:^FS':CRLF$
|
||||||
Str := '^FO175,165^A045,35^FD':PrintLotNum:'^FS':CRLF$
|
Str := '^FO175,165^A045,35^FD':PrintLotNum:'^FS':CRLF$
|
||||||
Str := '^FO25,195^BY1,3.0^B3,,50,N^FD2T':PrintLotNum:'^FS':CRLF$
|
Str := '^FO25,195^BY1,3.0^B3,,50,N^FD2T':PrintLotNum:'^FS':CRLF$
|
||||||
Str := '^FO400,175^AC18^FD(Q)Qty:^FS':CRLF$
|
Str := '^FO400,175^AC18^FD(Q)Qty:^FS':CRLF$
|
||||||
Str := '^FO500,165^A045,35^FD':PrintQty:'^FS':CRLF$
|
Str := '^FO500,165^A045,35^FD':PrintQty:'^FS':CRLF$
|
||||||
Str := '^FO400,195^B3,,50,N^FDQ':PrintQty:'^FS':CRLF$
|
Str := '^FO400,195^B3,,50,N^FDQ':PrintQty:'^FS':CRLF$
|
||||||
Str := '^FO590,175^AC18^FD(1T)RDS: ^FS':CRLF$
|
Str := '^FO590,175^AC18^FD(1T)RDS: ^FS':CRLF$
|
||||||
Str := '^FO690,165^A045,35^FD':PrintRDSId:'^FS':CRLF$
|
Str := '^FO690,165^A045,35^FD':PrintRDSId:'^FS':CRLF$
|
||||||
Str := '^FO630,195^B3,,50,N^FD1T':PrintRDSId:'^FS':CRLF$
|
Str := '^FO630,195^B3,,50,N^FD1T':PrintRDSId:'^FS':CRLF$
|
||||||
|
|
||||||
****** Fourth Line, SubPN, Vendor and QA Metrology recipe
|
****** Fourth Line, SubPN, Vendor and QA Metrology recipe
|
||||||
Str := '^FO25,275^AC18^FD(S)Sub PN:^FS':CRLF$
|
Str := '^FO25,275^AC18^FD(S)Sub PN:^FS':CRLF$
|
||||||
Str := '^FO145,265^A045,35^FD':PrintSubPartNum:'^FS':CRLF$
|
Str := '^FO145,265^A045,35^FD':PrintSubPartNum:'^FS':CRLF$
|
||||||
Str := '^FO25,295^B3,,50,N^FDS':PrintSubPartNum:'^FS':CRLF$
|
Str := '^FO25,295^B3,,50,N^FDS':PrintSubPartNum:'^FS':CRLF$
|
||||||
Str := '^FO400,275^AC18^FD(1V)Vend:^FS':CRLF$
|
Str := '^FO400,275^AC18^FD(1V)Vend:^FS':CRLF$
|
||||||
Str := '^FO510,265^A045,35^FD':PrintSuppCd:'^FS':CRLF$
|
Str := '^FO510,265^A045,35^FD':PrintSuppCd:'^FS':CRLF$
|
||||||
Str := '^FO400,295^B3,,50,N^FD1V':PrintSuppCd:'^FS':CRLF$
|
Str := '^FO400,295^B3,,50,N^FD1V':PrintSuppCd:'^FS':CRLF$
|
||||||
Str := '^FO590,275^AC18^FD':PrintQARecipe:'^FS':CRLF$
|
Str := '^FO590,275^AC18^FD':PrintQARecipe:'^FS':CRLF$
|
||||||
|
|
||||||
****** Fifth Line, Motto and Data Matrix barcode
|
****** Fifth Line, Motto and Data Matrix barcode
|
||||||
Str := '^FO25,370^A045,28':CRLF$
|
Str := '^FO25,370^A045,28':CRLF$
|
||||||
Str := "^FDWe do what we promise. That's quality made by Infineon.^FS":CRLF$
|
Str := "^FDWe do what we promise. That's quality made by Infineon.^FS":CRLF$
|
||||||
Str := '^FO725,320^CI28':CRLF$
|
Str := '^FO725,320^CI28':CRLF$
|
||||||
Str := '^BXN,2,200^FDP':CustEpiPartSpecNo:'|S':PrintSubPartNum:'|1T':PrintRDSId:'|2T':PrintLotNum:'|':PrintPSN:'|Q':PrintQty:'|1V':PrintSuppCd:'|SEQ':cnt:'^FS':CRLF$
|
Str := '^BXN,2,200^FDP':CustEpiPartSpecNo:'|S':PrintSubPartNum:'|1T':PrintRDSId:'|2T':PrintLotNum:'|':PrintPSN:'|Q':PrintQty:'|1V':PrintSuppCd:'|SEQ':cnt:'^FS':CRLF$
|
||||||
|
|
||||||
****** End the print job (ZPL script)
|
****** End the print job (ZPL script)
|
||||||
Str:= '^XZ'
|
Str:= '^XZ'
|
||||||
Next
|
Next
|
||||||
|
|
||||||
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
||||||
stat = Set_Printer('TEXT',Str)
|
stat = Set_Printer('TEXT',Str)
|
||||||
end else
|
end else
|
||||||
stat = Direct_Print('PRINT', Str)
|
stat = Direct_Print('PRINT', Str)
|
||||||
end
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -783,7 +793,6 @@ PrintWOLabel:
|
|||||||
|
|
||||||
END ELSE
|
END ELSE
|
||||||
Str:= '^FO70,30^A0220,210^FD':PrintUniqueWO:'^FS':CRLF$
|
Str:= '^FO70,30^A0220,210^FD':PrintUniqueWO:'^FS':CRLF$
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
CustName = XLATE( 'COMPANY', CustNo, 'ABBREV_OR_CO_NAME', 'X' )
|
CustName = XLATE( 'COMPANY', CustNo, 'ABBREV_OR_CO_NAME', 'X' )
|
||||||
@ -801,6 +810,7 @@ PrintWOLabel:
|
|||||||
end else
|
end else
|
||||||
stat = Direct_Print('PRINT', Str)
|
stat = Direct_Print('PRINT', Str)
|
||||||
end
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
|
||||||
@ -826,10 +836,10 @@ PrintCheatSheetLabel:
|
|||||||
WaferSize = XLATE('EPI_PART', CustPart, EPI_PART_SUB_WAFER_SIZE$, 'X')
|
WaferSize = XLATE('EPI_PART', CustPart, EPI_PART_SUB_WAFER_SIZE$, 'X')
|
||||||
*Field(SpecSub, @VM, QSSubWafersize$)
|
*Field(SpecSub, @VM, QSSubWafersize$)
|
||||||
|
|
||||||
convert char(248) to @fm in SpecEpi ;* char(248) is used to separate layers
|
convert char(248) to @fm in SpecEpi ;* char(248) is used to separate layers
|
||||||
layerCount = fieldcount( SpecEpi, @fm )
|
layerCount = fieldcount( SpecEpi, @fm )
|
||||||
layerInfo = SpecEpi<layerCount>
|
layerInfo = SpecEpi<layerCount>
|
||||||
//if this is just 1 layer, we're returning that info, if 3 layers, we're returning layer 3 (combo)
|
//if this is just 1 layer, we're returning that info, if 3 layers, we're returning layer 3 (combo)
|
||||||
|
|
||||||
ThkData = Field(layerInfo, @VM, QSEpiThickMeasure$)
|
ThkData = Field(layerInfo, @VM, QSEpiThickMeasure$)
|
||||||
ResData = Field(layerInfo, @VM, QSEpiResMeasure$)
|
ResData = Field(layerInfo, @VM, QSEpiResMeasure$)
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -28,6 +28,7 @@ $INSERT WM_OUT_EQUATES
|
|||||||
$INSERT EPI_PART_EQUATES
|
$INSERT EPI_PART_EQUATES
|
||||||
$INSERT CUST_EPI_PART_EQUATES
|
$INSERT CUST_EPI_PART_EQUATES
|
||||||
$INSERT PRS_STAGE_EQUATES
|
$INSERT PRS_STAGE_EQUATES
|
||||||
|
$insert UNIT_EQUATES
|
||||||
|
|
||||||
DECLARE FUNCTION Msg, Get_Printer, Set_Printer, Utility, obj_Install, Printer_Select, FieldCount, Popup
|
DECLARE FUNCTION Msg, Get_Printer, Set_Printer, Utility, obj_Install, Printer_Select, FieldCount, Popup
|
||||||
DECLARE FUNCTION MemberOf, Direct_Print, Environment_Services
|
DECLARE FUNCTION MemberOf, Direct_Print, Environment_Services
|
||||||
@ -41,191 +42,199 @@ EQU PI$WIDTH TO 5
|
|||||||
EQU PI$HEIGHT TO 6
|
EQU PI$HEIGHT TO 6
|
||||||
EQU PI$SIZE TO 7
|
EQU PI$SIZE TO 7
|
||||||
|
|
||||||
IF NOT(ASSIGNED(WONo)) THEN RETURN
|
Main:
|
||||||
IF WONo = '' THEN RETURN
|
|
||||||
|
|
||||||
IF NOT(ASSIGNED(WOStep)) THEN WOStep = 1
|
IF NOT(ASSIGNED(WONo)) THEN RETURN
|
||||||
|
IF WONo = '' THEN RETURN
|
||||||
|
|
||||||
FileName = "Printing Label"
|
IF NOT(ASSIGNED(WOStep)) THEN WOStep = 1
|
||||||
Title = "Printing Label"
|
|
||||||
|
|
||||||
PageInfo = ''
|
FileName = "Printing Label"
|
||||||
PageInfo<PI$LEFT> = 0.1
|
Title = "Printing Label"
|
||||||
PageInfo<PI$TOP> = 0.1
|
|
||||||
PageInfo<PI$RIGHT> = 0.1
|
PageInfo = ''
|
||||||
PageInfo<PI$BOTTOM> = 0.1
|
PageInfo<PI$LEFT> = 0.1
|
||||||
|
PageInfo<PI$TOP> = 0.1
|
||||||
|
PageInfo<PI$RIGHT> = 0.1
|
||||||
|
PageInfo<PI$BOTTOM> = 0.1
|
||||||
|
|
||||||
|
|
||||||
PageSetup = '1' ;* Landscape
|
PageSetup = '1' ;* Landscape
|
||||||
PrintSetup = '' ;* Preview
|
PrintSetup = '' ;* Preview
|
||||||
PrinterID = ''
|
PrinterID = ''
|
||||||
PrintPath = Printer_Select(PrinterID) ;* Popup is skipped IF Printer ID is passed
|
PrintPath = Printer_Select(PrinterID) ;* Popup is skipped IF Printer ID is passed
|
||||||
|
|
||||||
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
||||||
stat = Set_Printer("INIT",FileName,Title,PageInfo,PageSetup,PrintSetup,PrintPath)
|
stat = Set_Printer("INIT",FileName,Title,PageInfo,PageSetup,PrintSetup,PrintPath)
|
||||||
end else
|
end else
|
||||||
stat = Direct_Print('START', PrintPath<1>, '', '')
|
stat = Direct_Print('START', PrintPath<1>, '', '')
|
||||||
end
|
end
|
||||||
|
|
||||||
IF stat < 0 THEN GOTO OIPrint_Error
|
IF stat GE 0 THEN
|
||||||
|
|
||||||
CLOrientation = '' ;* used for printing on cleanroom labels
|
CLOrientation = '' ;* used for printing on cleanroom labels
|
||||||
|
WMOutKeys = XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_WM_OUT_KEYS$,'X')
|
||||||
|
|
||||||
|
TypeOver = ''
|
||||||
|
TypeOver<PDISPLAY$> = WMOutKeys
|
||||||
|
TypeOver<PTITLE$> = 'WM_OUT - Outbound Cassettes'
|
||||||
|
TypeOver<PSHOWGAUGE$> = True$
|
||||||
|
|
||||||
WMOutKeys = XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_WM_OUT_KEYS$,'X')
|
WMoutKeys = Popup(@WINDOW,TypeOver,'PRINT_WM_LABELS')
|
||||||
|
CONVERT '.' TO '*' IN WMOutKeys
|
||||||
|
|
||||||
TypeOver = ''
|
IF WMOutKeys = '' THEN RETURN
|
||||||
TypeOver<PDISPLAY$> = WMOutKeys
|
|
||||||
TypeOver<PTITLE$> = 'WM_OUT - Outbound Cassettes'
|
|
||||||
|
|
||||||
WMoutKeys = Popup(@WINDOW,TypeOver,'PRINT_WM_LABELS')
|
Void = Utility( 'CURSOR', 'H' )
|
||||||
CONVERT '.' TO '*' IN WMOutKeys
|
|
||||||
|
|
||||||
IF WMOutKeys = '' THEN RETURN
|
WOStepKeys = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X')
|
||||||
|
|
||||||
Void = Utility( 'CURSOR', 'H' )
|
IF INDEX(WOStepKeys,@VM,1) THEN
|
||||||
|
PrintWONo = WONo:'.':WOStep
|
||||||
WOStepKeys = XLATE('WO_LOG',WONo,WO_LOG_WO_STEP_KEY$,'X')
|
END ELSE
|
||||||
|
PrintWONo = WONo
|
||||||
IF INDEX(WOStepKeys,@VM,1) THEN
|
|
||||||
PrintWONo = WONo:'.':WOStep
|
|
||||||
END ELSE
|
|
||||||
PrintWONo = WONo
|
|
||||||
END
|
|
||||||
|
|
||||||
WORec = XLATE('WO_LOG',WONo,'','X')
|
|
||||||
|
|
||||||
ReqShipDate = OCONV(WORec<WO_LOG_PROMISE_SHIP_DT$>,'D2/')
|
|
||||||
|
|
||||||
CustNo = WORec<WO_LOG_CUST_NO$>
|
|
||||||
CustName = XLATE('COMPANY',CustNo,'ABBREV_OR_CO_NAME','X')
|
|
||||||
Captive = XLATE('COMPANY',CustNo,'CAPTIVE','X')
|
|
||||||
PONo = WORec<WO_LOG_CUST_PO_NO$>
|
|
||||||
|
|
||||||
PSNo = XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_PROD_SPEC_ID$,'X')
|
|
||||||
PSRec = XLATE('PROD_SPEC',PSNo,'','X')
|
|
||||||
|
|
||||||
CustSpecNo = ''
|
|
||||||
IF Captive THEN
|
|
||||||
CustSpecNos = PSRec<PROD_SPEC_SPEC_NUM$>
|
|
||||||
CustSpecDescs = PSRec<PROD_SPEC_SPEC_DESC$>
|
|
||||||
CustSpecRevNos = PSRec<PROD_SPEC_REV_NUM$>
|
|
||||||
CustSpecRevDts = PSRec<PROD_SPEC_REV_DATE$>
|
|
||||||
|
|
||||||
SpecCnt = COUNT(CustSpecNos,@VM) + (CustSpecNos NE '')
|
|
||||||
|
|
||||||
FOR I = 1 TO SpecCnt
|
|
||||||
IF CustSpecDescs<1,I> _EQC 'GENERAL' THEN
|
|
||||||
CustSpecNo = CustSpecNos<1,I>
|
|
||||||
CustSpecDesc = CustSpecDescS<1,I>
|
|
||||||
CustSpecRevNo = CustSpecRevNos<1,I>
|
|
||||||
CustSpecRevDt = OCONV(CustSpecRevDts<1,I>,'D4/')
|
|
||||||
END
|
END
|
||||||
UNTIL CustSpecNo NE ''
|
|
||||||
|
|
||||||
NEXT I
|
WORec = XLATE('WO_LOG',WONo,'','X')
|
||||||
END
|
|
||||||
|
|
||||||
EpiPartNo = WORec<WO_LOG_EPI_PART_NO$>
|
ReqShipDate = OCONV(WORec<WO_LOG_PROMISE_SHIP_DT$>,'D2/')
|
||||||
CustEpiPartRec = XLATE('CUST_EPI_PART',CustNo:'*':EpiPartNo,'','X')
|
|
||||||
|
|
||||||
ShipBagReq = CustEpiPartRec<CUST_EPI_PART_SHIP_BAG_REQ$>
|
CustNo = WORec<WO_LOG_CUST_NO$>
|
||||||
|
CustName = XLATE('COMPANY',CustNo,'ABBREV_OR_CO_NAME','X')
|
||||||
|
Captive = XLATE('COMPANY',CustNo,'CAPTIVE','X')
|
||||||
|
PONo = WORec<WO_LOG_CUST_PO_NO$>
|
||||||
|
|
||||||
PreSurfscan = XLATE('PRS_STAGE',PSNo:'*PRE',PRS_STAGE_SURFSCAN_SIG_REQ$,'X')
|
PSNo = XLATE('WO_STEP',WONo:'*':WOStep,WO_STEP_PROD_SPEC_ID$,'X')
|
||||||
FirstSurfscan = XLATE('PRS_STAGE',PSNo:'*WFR',PRS_STAGE_SURFSCAN_SIG_REQ$,'X')
|
PSRec = XLATE('PROD_SPEC',PSNo,'','X')
|
||||||
PostCleanSurfScan = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURFSCAN_SIG_REQ$,'X')
|
|
||||||
|
|
||||||
PostCleanSSSampleQty = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SS_SAMP_QTY$, 'X' )
|
CustSpecNo = ''
|
||||||
PostCleanSurfscanRecipe = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURFSCAN_RECIPE$,'X')
|
IF Captive THEN
|
||||||
PostCleanSurfDefects = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURF_DEFECTS$,'X')
|
CustSpecNos = PSRec<PROD_SPEC_SPEC_NUM$>
|
||||||
PostCleanSurfHaze = OCONV(XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURF_HAZE$,'X'),'MD2')
|
CustSpecDescs = PSRec<PROD_SPEC_SPEC_DESC$>
|
||||||
|
CustSpecRevNos = PSRec<PROD_SPEC_REV_NUM$>
|
||||||
|
CustSpecRevDts = PSRec<PROD_SPEC_REV_DATE$>
|
||||||
|
|
||||||
SubPreClean = XLATE('PRS_STAGE',PSNo:'*PRE','TOOL_DISPLAY','X')
|
SpecCnt = COUNT(CustSpecNos,@VM) + (CustSpecNos NE '')
|
||||||
SubPostClean = XLATE('PRS_STAGE',PSNo:'*POST','TOOL_DISPLAY','X')
|
|
||||||
|
|
||||||
PreCleanTool = XLATE('PRS_STAGE',PSNo:'*PRE','TOOL_DISPLAY','X')
|
FOR I = 1 TO SpecCnt
|
||||||
PostCleanTool = XLATE('PRS_STAGE',PSNo:'*POST','TOOL_DISPLAY','X')
|
IF CustSpecDescs<1,I> _EQC 'GENERAL' THEN
|
||||||
|
CustSpecNo = CustSpecNos<1,I>
|
||||||
|
CustSpecDesc = CustSpecDescS<1,I>
|
||||||
|
CustSpecRevNo = CustSpecRevNos<1,I>
|
||||||
|
CustSpecRevDt = OCONV(CustSpecRevDts<1,I>,'D4/')
|
||||||
|
END
|
||||||
|
UNTIL CustSpecNo NE ''
|
||||||
|
|
||||||
PreAkrionRecipe = XLATE('PRS_STAGE',PSNo:'*PRE',PRS_STAGE_CLEAN_RECIPE$,'X')
|
NEXT I
|
||||||
PostAkrionRecipe = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_CLEAN_RECIPE$,'X')
|
END
|
||||||
|
|
||||||
|
EpiPartNo = WORec<WO_LOG_EPI_PART_NO$>
|
||||||
|
CustEpiPartRec = XLATE('CUST_EPI_PART',CustNo:'*':EpiPartNo,'','X')
|
||||||
|
|
||||||
|
ShipBagReq = CustEpiPartRec<CUST_EPI_PART_SHIP_BAG_REQ$>
|
||||||
|
|
||||||
|
PreSurfscan = XLATE('PRS_STAGE',PSNo:'*PRE',PRS_STAGE_SURFSCAN_SIG_REQ$,'X')
|
||||||
|
FirstSurfscan = XLATE('PRS_STAGE',PSNo:'*WFR',PRS_STAGE_SURFSCAN_SIG_REQ$,'X')
|
||||||
|
PostCleanSurfScan = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURFSCAN_SIG_REQ$,'X')
|
||||||
|
|
||||||
|
PostCleanSSSampleQty = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SS_SAMP_QTY$, 'X' )
|
||||||
|
PostCleanSurfscanRecipe = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURFSCAN_RECIPE$,'X')
|
||||||
|
PostCleanSurfDefects = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURF_DEFECTS$,'X')
|
||||||
|
PostCleanSurfHaze = OCONV(XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_SURF_HAZE$,'X'),'MD2')
|
||||||
|
|
||||||
|
SubPreClean = XLATE('PRS_STAGE',PSNo:'*PRE','TOOL_DISPLAY','X')
|
||||||
|
SubPostClean = XLATE('PRS_STAGE',PSNo:'*POST','TOOL_DISPLAY','X')
|
||||||
|
|
||||||
|
PreCleanTool = XLATE('PRS_STAGE',PSNo:'*PRE','TOOL_DISPLAY','X')
|
||||||
|
PostCleanTool = XLATE('PRS_STAGE',PSNo:'*POST','TOOL_DISPLAY','X')
|
||||||
|
|
||||||
|
PreAkrionRecipe = XLATE('PRS_STAGE',PSNo:'*PRE',PRS_STAGE_CLEAN_RECIPE$,'X')
|
||||||
|
PostAkrionRecipe = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_CLEAN_RECIPE$,'X')
|
||||||
|
|
||||||
|
|
||||||
* * * * * * * * Following needs update to point to the PRS_LAYER & PRS_STAGE tables as required.
|
* * * * * * * * Following needs update to point to the PRS_LAYER & PRS_STAGE tables as required.
|
||||||
* * * * * * * * It's the required part that needs sorted out JCH 1/28/2014
|
* * * * * * * * It's the required part that needs sorted out JCH 1/28/2014
|
||||||
|
|
||||||
RecipeNo = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO_L1', 'X' )
|
RecipeNo = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO_L1', 'X' )
|
||||||
RecipeName = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NAME_L1', 'X' )
|
RecipeName = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NAME_L1', 'X' )
|
||||||
|
|
||||||
SpecType = OCONV( XLATE( 'PROD_SPEC', PSNo, 'SPEC_TYPE', 'X' ), '[SPEC_TYPE_CONV]' )
|
SpecType = OCONV( XLATE( 'PROD_SPEC', PSNo, 'SPEC_TYPE', 'X' ), '[SPEC_TYPE_CONV]' )
|
||||||
SubOxide = OCONV( XLATE( 'PROD_SPEC', PSNo, 'SUB_OXIDE_STRIP', 'X' ), 'B' )
|
SubOxide = OCONV( XLATE( 'PROD_SPEC', PSNo, 'SUB_OXIDE_STRIP', 'X' ), 'B' )
|
||||||
ThickTarget = OCONV( XLATE( 'PROD_SPEC', PSNo, 'THICK_TARGET_ALL', 'X' ), 'MD3' )
|
ThickTarget = OCONV( XLATE( 'PROD_SPEC', PSNo, 'THICK_TARGET_ALL', 'X' ), 'MD3' )
|
||||||
ResTarget = OCONV( XLATE( 'PROD_SPEC', PSNo, 'RES_TARGET_ALL', 'X' ), 'MD3' )
|
ResTarget = OCONV( XLATE( 'PROD_SPEC', PSNo, 'RES_TARGET_ALL', 'X' ), 'MD3' )
|
||||||
|
|
||||||
ThickUnit = XLATE( 'PROD_SPEC', PSNo, 'THICK_UNITS_ALL', 'X' )
|
ThickUnit = XLATE( 'PROD_SPEC', PSNo, 'THICK_UNITS_ALL', 'X' )
|
||||||
ResUnit = XLATE( 'PROD_SPEC', PSNo , 'RES_UNITS_ALL', 'X' )
|
ResUnit = XLATE( 'PROD_SPEC', PSNo , 'RES_UNITS_ALL', 'X' )
|
||||||
|
|
||||||
Dopant = XLATE( 'PROD_SPEC', PSNo, 'DOPANT_L1', 'X' )
|
Dopant = XLATE( 'PROD_SPEC', PSNo, 'DOPANT_L1', 'X' )
|
||||||
RecipeNo = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO', 'X' )
|
RecipeNo = XLATE( 'PROD_SPEC', PSNo, 'RECIPE_NO', 'X' )
|
||||||
RecipeInfo = XLATE( 'RECIPE', RecipeNo, 'RECIPE_NAME_NO', 'X' )
|
RecipeInfo = XLATE( 'RECIPE', RecipeNo, 'RECIPE_NAME_NO', 'X' )
|
||||||
|
|
||||||
CleaningReqs = ''
|
CleaningReqs = ''
|
||||||
|
|
||||||
ThickCnt = FIELDCOUNT( ThickTarget<1>, @VM )
|
ThickCnt = FIELDCOUNT( ThickTarget<1>, @VM )
|
||||||
PrintThickTargets = ''
|
PrintThickTargets = ''
|
||||||
FOR J = 1 TO ThickCnt
|
FOR J = 1 TO ThickCnt
|
||||||
PrintThickTargets<1,J> = ThickTarget<1,J>:ThickUnit<1,J>
|
PrintThickTargets<1,J> = ThickTarget<1,J>:ThickUnit<1,J>
|
||||||
NEXT J
|
NEXT J
|
||||||
|
|
||||||
ResCnt = FIELDCOUNT( ResTarget<1>, @VM )
|
ResCnt = FIELDCOUNT( ResTarget<1>, @VM )
|
||||||
PrintResTargets = ''
|
PrintResTargets = ''
|
||||||
FOR J = 1 TO ResCnt
|
FOR J = 1 TO ResCnt
|
||||||
IF ResTarget<1,J>[1,1] = '.' THEN
|
IF ResTarget<1,J>[1,1] = '.' THEN
|
||||||
TargetVal = '0':ResTarget<1,J>
|
TargetVal = '0':ResTarget<1,J>
|
||||||
END ELSE
|
END ELSE
|
||||||
TargetVal = ResTarget<1,J>
|
TargetVal = ResTarget<1,J>
|
||||||
END
|
END
|
||||||
PrintResTargets<1,J> = TargetVal:ResUnit<1,J>
|
PrintResTargets<1,J> = TargetVal:ResUnit<1,J>
|
||||||
NEXT J
|
NEXT J
|
||||||
|
|
||||||
APreRec = ''
|
APreRec = ''
|
||||||
APostRec = ''
|
APostRec = ''
|
||||||
IF ( PreAkrionRecipe<1> <> '' ) THEN
|
IF ( PreAkrionRecipe<1> <> '' ) THEN
|
||||||
APreRec = ' ':PreAkrionRecipe:' '
|
APreRec = ' ':PreAkrionRecipe:' '
|
||||||
SubOxide = 'No' ;* If Akrion then no oxide strip
|
SubOxide = 'No' ;* If Akrion then no oxide strip
|
||||||
END
|
END
|
||||||
|
|
||||||
IF ( PostAkrionRecipe<1> <> '' ) THEN
|
IF ( PostAkrionRecipe<1> <> '' ) THEN
|
||||||
APostRec = ' ':PostAkrionRecipe
|
APostRec = ' ':PostAkrionRecipe
|
||||||
END
|
END
|
||||||
|
|
||||||
PrintCleaningReqs = TRIM( 'Strip:':SubOxide:' Pre:':SubPreClean:APreRec:' Post:':SubPostClean:APostRec )
|
PrintCleaningReqs = TRIM( 'Strip:':SubOxide:' Pre:':SubPreClean:APreRec:' Post:':SubPostClean:APostRec )
|
||||||
|
|
||||||
swap 'æm' with 'um' in PrintThickTargets
|
swap UNIT_MICROMETER$ with 'um' in PrintThickTargets
|
||||||
swap 'ê-cm' with 'ohm.cm' in PrintThickTargets
|
swap UNIT_OHM_CM$ with 'ohm.cm' in PrintThickTargets
|
||||||
swap 'ê/Ü' with 'ohm/sq' in PrintThickTargets
|
swap UNIT_OHM_PER_SQ$ with 'ohm/sq' in PrintThickTargets
|
||||||
swap '' with 'A' in PrintThickTargets
|
swap UNIT_A$ with 'A' in PrintThickTargets
|
||||||
|
|
||||||
swap 'æm' with 'um' in PrintResTargets
|
swap UNIT_MICROMETER$ with 'um' in PrintResTargets
|
||||||
swap 'ê-cm' with 'ohm.cm' in PrintResTargets
|
swap UNIT_OHM_CM$ with 'ohm.cm' in PrintResTargets
|
||||||
swap 'ê/Ü' with 'ohm/sq' in PrintResTargets
|
swap UNIT_OHM_PER_SQ$ with 'ohm/sq' in PrintResTargets
|
||||||
swap '' with 'A' in PrintResTargets
|
swap UNIT_A$ with 'A' in PrintResTargets
|
||||||
|
|
||||||
WMOBoxCnt = COUNT( WMOutKeys, @VM ) + (WMOutKeys NE '')
|
WMOBoxCnt = COUNT( WMOutKeys, @VM ) + (WMOutKeys NE '')
|
||||||
|
|
||||||
GOSUB PrintCleanRoomLabels
|
GOSUB PrintCleanRoomLabels
|
||||||
GOSUB PrintWOLabels ;* Activated WO label printing again -dkk 12/3/14
|
GOSUB PrintWOLabels ;* Activated WO label printing again -dkk 12/3/14
|
||||||
|
|
||||||
|
Void = UTILITY( 'CURSOR', 'A' )
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
GoSub EndPrint
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
Void = UTILITY( 'CURSOR', 'A' )
|
|
||||||
|
|
||||||
* * * * * *
|
* * * * * *
|
||||||
OIPrint_Error:
|
EndPrint:
|
||||||
* * * * * *
|
* * * * * *
|
||||||
|
|
||||||
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
||||||
stat = Set_Printer("TERM")
|
stat = Set_Printer("TERM")
|
||||||
end else
|
end else
|
||||||
stat = Direct_Print('STOP')
|
stat = Direct_Print('STOP')
|
||||||
end
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -236,35 +245,35 @@ RETURN
|
|||||||
PrintCleanRoomLabels:
|
PrintCleanRoomLabels:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
|
|
||||||
FOR I = 1 TO WMOBoxCnt
|
FOR I = 1 TO WMOBoxCnt
|
||||||
|
|
||||||
WMOutKey = WMOutKeys<1,I>
|
WMOutKey = WMOutKeys<1,I>
|
||||||
|
|
||||||
MakeupBox = XLATE('WM_OUT',WMOutKey,WM_OUT_MAKEUP_BOX$ ,'X')
|
MakeupBox = XLATE('WM_OUT',WMOutKey,WM_OUT_MAKEUP_BOX$ ,'X')
|
||||||
|
|
||||||
PrintWMOutKey = WMOutKey
|
PrintWMOutKey = WMOutKey
|
||||||
CONVERT '*' TO '.' IN PrintWMOutKey
|
CONVERT '*' TO '.' IN PrintWMOutKey
|
||||||
|
|
||||||
CassNo = FIELD(WMOutKey,'*',3)
|
CassNo = FIELD(WMOutKey,'*',3)
|
||||||
|
|
||||||
LotNo = 'Multiple'
|
LotNo = 'Multiple'
|
||||||
WfrQty = XLATE('WM_OUT',WMOutKey,'WFRS_SCHED','X')
|
WfrQty = XLATE('WM_OUT',WMOutKey,'WFRS_SCHED','X')
|
||||||
|
|
||||||
SubPartNo = WORec<WO_LOG_ORD_SUB_PART_NO$>
|
SubPartNo = WORec<WO_LOG_ORD_SUB_PART_NO$>
|
||||||
CustPartNo = WORec<WO_LOG_CUST_PART_NO$>
|
CustPartNo = WORec<WO_LOG_CUST_PART_NO$>
|
||||||
EpiPartNo = WORec<WO_LOG_EPI_PART_NO$>
|
EpiPartNo = WORec<WO_LOG_EPI_PART_NO$>
|
||||||
CustPartDesc = XLATE('EPI_PART',EpiPartNo,EPI_PART_EPI_PART_DESC$,'X')
|
CustPartDesc = XLATE('EPI_PART',EpiPartNo,EPI_PART_EPI_PART_DESC$,'X')
|
||||||
PartNo = CustPartNo ;* Temporary for 4x2 to 4x4 conversion
|
PartNo = CustPartNo ;* Temporary for 4x2 to 4x4 conversion
|
||||||
PartDesc = CustPartDesc ;* Temporary for 4x2 to 4x4 conversion
|
PartDesc = CustPartDesc ;* Temporary for 4x2 to 4x4 conversion
|
||||||
SubVendCode = WORec<WO_LOG_EXP_VEND_CD$>
|
SubVendCode = WORec<WO_LOG_EXP_VEND_CD$>
|
||||||
Vendor = XLATE('SEMI_VEND_CODE', SubVendCode, 'EPI_VEND_CD', 'X')
|
Vendor = XLATE('SEMI_VEND_CODE', SubVendCode, 'EPI_VEND_CD', 'X')
|
||||||
|
|
||||||
SuppCd = TRIM(SubPartNo[-1,'B-'])
|
SuppCd = TRIM(SubPartNo[-1,'B-'])
|
||||||
IF LEN(SuppCd) NE '2' THEN SuppCd =''
|
IF LEN(SuppCd) NE '2' THEN SuppCd =''
|
||||||
|
|
||||||
GOSUB PrintLabel
|
GOSUB PrintLabel
|
||||||
|
|
||||||
NEXT I
|
NEXT I
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -272,160 +281,160 @@ RETURN
|
|||||||
* * * * * * *
|
* * * * * * *
|
||||||
PrintLabel:
|
PrintLabel:
|
||||||
* * * * * * *
|
* * * * * * *
|
||||||
Str = ''
|
Str = ''
|
||||||
For cnt = 1 to 2
|
For cnt = 1 to 2
|
||||||
***** Start of label ZPL
|
***** Start of label ZPL
|
||||||
Str := '^XA'
|
Str := '^XA'
|
||||||
|
|
||||||
***** Label setup
|
***** Label setup
|
||||||
Str := '^LH0,0'
|
Str := '^LH0,0'
|
||||||
Str := '^PR2' ;* Print speed 2 inches per second
|
Str := '^PR2' ;* Print speed 2 inches per second
|
||||||
Str := '^LL406' ;* Label length 203 dpi
|
Str := '^LL406' ;* Label length 203 dpi
|
||||||
Str := '^PW900' ;* Print width 900 dpi
|
Str := '^PW900' ;* Print width 900 dpi
|
||||||
Str := '^MD2' ;* Media darkness
|
Str := '^MD2' ;* Media darkness
|
||||||
Str := '^MMT':CRLF$ ;* Media mode t=tear off mode
|
Str := '^MMT':CRLF$ ;* Media mode t=tear off mode
|
||||||
//Str := '^PQ2' ;* Print 2 labels for each pass through here
|
//Str := '^PQ2' ;* Print 2 labels for each pass through here
|
||||||
|
|
||||||
***** Border
|
***** Border
|
||||||
Str := '^FO10,5^GB795,398,3,B^FS':CRLF$
|
Str := '^FO10,5^GB795,398,3,B^FS':CRLF$
|
||||||
|
|
||||||
****** First Line
|
****** First Line
|
||||||
Company = 'IFX Epi Services'
|
Company = 'IFX Epi Services'
|
||||||
Str := '^FO30,20^A0,45,36^FD':Company:'^FS':CRLF$
|
Str := '^FO30,20^A0,45,36^FD':Company:'^FS':CRLF$
|
||||||
Str := '^FO290,25^AC,18^FDWO No:^FS':CRLF$
|
Str := '^FO290,25^AC,18^FDWO No:^FS':CRLF$
|
||||||
Str := '^FO370,20^A045,36^FD':PrintWONo:'^FS':CRLF$
|
Str := '^FO370,20^A045,36^FD':PrintWONo:'^FS':CRLF$
|
||||||
|
|
||||||
IF CassNo = 1 THEN
|
IF CassNo = 1 THEN
|
||||||
Str := '^FO535,15^GB120,40,40,,3^FS':CRLF$
|
Str := '^FO535,15^GB120,40,40,,3^FS':CRLF$
|
||||||
Str := '^FO540,25^AC,18^FR^FDCass:^FS':CRLF$
|
Str := '^FO540,25^AC,18^FR^FDCass:^FS':CRLF$
|
||||||
Str := '^FO600,20^A045,36^FR^FD':CassNo:'^FS':CRLF$
|
Str := '^FO600,20^A045,36^FR^FD':CassNo:'^FS':CRLF$
|
||||||
END ELSE
|
END ELSE
|
||||||
Str := '^FO540,25^AC,18^FDCass:^FS':CRLF$
|
Str := '^FO540,25^AC,18^FDCass:^FS':CRLF$
|
||||||
Str := '^FO600,20^A045,36^FD':CassNo:'^FS':CRLF$
|
Str := '^FO600,20^A045,36^FD':CassNo:'^FS':CRLF$
|
||||||
END
|
END
|
||||||
Str:= '^FO665,20^A045,36^FDWM Out^FS':CRLF$
|
Str:= '^FO665,20^A045,36^FDWM Out^FS':CRLF$
|
||||||
|
|
||||||
****** Second Line
|
****** Second Line
|
||||||
Str:= '^FO30,70^AC,18^FDWM Out:^FS':CRLF$
|
Str:= '^FO30,70^AC,18^FDWM Out:^FS':CRLF$
|
||||||
Str:= '^FO120,65^A050,30^FD':PrintWMOutKey:'^FS':CRLF$
|
Str:= '^FO120,65^A050,30^FD':PrintWMOutKey:'^FS':CRLF$
|
||||||
Str := '^BY2,2.0':CRLF$
|
|
||||||
Str := '^FO300,58^B3,,37,N^FD':'O':PrintWMOutKey:'^FS':CRLF$
|
|
||||||
Str := '^BY2,3.0':CRLF$
|
|
||||||
Str:= '^FO700,60^AC,18^FDQty:^FS':CRLF$
|
|
||||||
Str:= '^FO760,60^A045,25^FD':WfrQty:'^FS':CRLF$
|
|
||||||
|
|
||||||
****** Third Line
|
|
||||||
Str:= '^FO30,100^AC,18^FDShip Dt:^FS':CRLF$
|
|
||||||
Str:= '^FO140,100^A0,,25^FD':ReqShipDate:'^FS':CRLF$
|
|
||||||
Str:= '^FO250,100^AC,18^FDCust:^FS':CRLF$
|
|
||||||
Str:= '^FO320,100^A045,25^FD':CustName:'^FS':CRLF$
|
|
||||||
Str:= '^FO560,100^AC,18^FDPO:^FS':CRLF$
|
|
||||||
Str:= '^FO600,100^A045,25^FD':PONo:'^FS':CRLF$
|
|
||||||
|
|
||||||
****** Separator bar
|
|
||||||
Str:= '^FO15,125^GB790,1^FS':CRLF$
|
|
||||||
|
|
||||||
****** Fourth Line
|
|
||||||
Str := '^FO30,130^AC,18^FDLot No:^FS':CRLF$
|
|
||||||
Str := '^FO120,130^A0,20^FD':LotNo:'^FS':CRLF$
|
|
||||||
Str := '^FO410,130^AC,18^FDPart No:^FS':CRLF$
|
|
||||||
Str := '^FO510,130^A0,20^FD':PartNo:'^FS':CRLF$
|
|
||||||
|
|
||||||
****** Fifth Line
|
|
||||||
Str := '^FO30,155^AC,18^FDSub PN:^FS':CRLF$
|
|
||||||
Str := '^FO120,155^A0,20^FD':SubPartNo:'^FS':CRLF$
|
|
||||||
|
|
||||||
IF SuppCd NE '' THEN
|
|
||||||
Str := '^FO410,155^AC,18^FDSupp Cd:^FS':CRLF$
|
|
||||||
Str := '^FO510,155^A0,20^FD':SuppCd:'^FS':CRLF$
|
|
||||||
Str := '^BY2,2.0':CRLF$
|
Str := '^BY2,2.0':CRLF$
|
||||||
Str := '^FO610,155^A040,20^B3,,23,N^FD':SuppCd:'^FS':CRLF$
|
Str := '^FO300,58^B3,,37,N^FD':'O':PrintWMOutKey:'^FS':CRLF$
|
||||||
Str := '^BY2,3.0':CRLF$
|
Str := '^BY2,3.0':CRLF$
|
||||||
END
|
Str:= '^FO700,60^AC,18^FDQty:^FS':CRLF$
|
||||||
|
Str:= '^FO760,60^A045,25^FD':WfrQty:'^FS':CRLF$
|
||||||
|
|
||||||
****** Separator bar
|
****** Third Line
|
||||||
Str := '^FO15,180^GB790,1^FS':CRLF$
|
Str:= '^FO30,100^AC,18^FDShip Dt:^FS':CRLF$
|
||||||
|
Str:= '^FO140,100^A0,,25^FD':ReqShipDate:'^FS':CRLF$
|
||||||
|
Str:= '^FO250,100^AC,18^FDCust:^FS':CRLF$
|
||||||
|
Str:= '^FO320,100^A045,25^FD':CustName:'^FS':CRLF$
|
||||||
|
Str:= '^FO560,100^AC,18^FDPO:^FS':CRLF$
|
||||||
|
Str:= '^FO600,100^A045,25^FD':PONo:'^FS':CRLF$
|
||||||
|
|
||||||
IF MakeupBox THEN
|
****** Separator bar
|
||||||
Str := '^FO410,190^A050,30^FD* * * M a k e u p B o x * * *^FS':CRLF$
|
Str:= '^FO15,125^GB790,1^FS':CRLF$
|
||||||
END ELSE
|
|
||||||
Str := '^FO410,190^AC,18^FDReact Type:^FS':CRLF$
|
|
||||||
Str := '^FO560,190^A0,20^FDEpiPro^FS':CRLF$
|
|
||||||
END
|
|
||||||
|
|
||||||
****** Seventh Line
|
****** Fourth Line
|
||||||
Str := '^FO30,190^AC,18^FDPre:^FS':CRLF$
|
Str := '^FO30,130^AC,18^FDLot No:^FS':CRLF$
|
||||||
Str := '^FO90,190^A0,20^FD':SubPreClean:'^FS':CRLF$
|
Str := '^FO120,130^A0,20^FD':LotNo:'^FS':CRLF$
|
||||||
|
Str := '^FO410,130^AC,18^FDPart No:^FS':CRLF$
|
||||||
|
Str := '^FO510,130^A0,20^FD':PartNo:'^FS':CRLF$
|
||||||
|
|
||||||
IF PreAkrionRecipe NE '' THEN
|
****** Fifth Line
|
||||||
Str := '^FO210,190^AC,18^FDAkrion:^FS':CRLF$
|
Str := '^FO30,155^AC,18^FDSub PN:^FS':CRLF$
|
||||||
Str := '^FO300,190^A0,20^FD':PreAkrionRecipe:'^FS':CRLF$
|
Str := '^FO120,155^A0,20^FD':SubPartNo:'^FS':CRLF$
|
||||||
Str := '^BY2,2.0':CRLF$
|
|
||||||
Str := '^FO450,190^A040,20^B3,,23,N^FD':PreAkrionRecipe:'^FS':CRLF$
|
|
||||||
Str := '^BY2,3.0':CRLF$
|
|
||||||
END
|
|
||||||
|
|
||||||
****** Eighth Line
|
IF SuppCd NE '' THEN
|
||||||
Str := '^FO30,225^AC,18^FDRecipe:^FS':CRLF$
|
Str := '^FO410,155^AC,18^FDSupp Cd:^FS':CRLF$
|
||||||
Str := '^FO120,225^A0,20^FD':RecipeInfo:'^FS':CRLF$
|
Str := '^FO510,155^A0,20^FD':SuppCd:'^FS':CRLF$
|
||||||
Str := '^FO410,225^AC,18^FDEpi Dopant:^FS':CRLF$
|
Str := '^BY2,2.0':CRLF$
|
||||||
Str := '^FO560,225^A040,20^FD':Dopant:'^FS':CRLF$
|
Str := '^FO610,155^A040,20^B3,,23,N^FD':SuppCd:'^FS':CRLF$
|
||||||
|
Str := '^BY2,3.0':CRLF$
|
||||||
|
END
|
||||||
|
|
||||||
|
****** Separator bar
|
||||||
|
Str := '^FO15,180^GB790,1^FS':CRLF$
|
||||||
|
|
||||||
|
IF MakeupBox THEN
|
||||||
|
Str := '^FO410,190^A050,30^FD* * * M a k e u p B o x * * *^FS':CRLF$
|
||||||
|
END ELSE
|
||||||
|
Str := '^FO410,190^AC,18^FDReact Type:^FS':CRLF$
|
||||||
|
Str := '^FO560,190^A0,20^FDEpiPro^FS':CRLF$
|
||||||
|
END
|
||||||
|
|
||||||
|
****** Seventh Line
|
||||||
|
Str := '^FO30,190^AC,18^FDPre:^FS':CRLF$
|
||||||
|
Str := '^FO90,190^A0,20^FD':SubPreClean:'^FS':CRLF$
|
||||||
|
|
||||||
|
IF PreAkrionRecipe NE '' THEN
|
||||||
|
Str := '^FO210,190^AC,18^FDAkrion:^FS':CRLF$
|
||||||
|
Str := '^FO300,190^A0,20^FD':PreAkrionRecipe:'^FS':CRLF$
|
||||||
|
Str := '^BY2,2.0':CRLF$
|
||||||
|
Str := '^FO450,190^A040,20^B3,,23,N^FD':PreAkrionRecipe:'^FS':CRLF$
|
||||||
|
Str := '^BY2,3.0':CRLF$
|
||||||
|
END
|
||||||
|
|
||||||
|
****** Eighth Line
|
||||||
|
Str := '^FO30,225^AC,18^FDRecipe:^FS':CRLF$
|
||||||
|
Str := '^FO120,225^A0,20^FD':RecipeInfo:'^FS':CRLF$
|
||||||
|
Str := '^FO410,225^AC,18^FDEpi Dopant:^FS':CRLF$
|
||||||
|
Str := '^FO560,225^A040,20^FD':Dopant:'^FS':CRLF$
|
||||||
|
|
||||||
|
|
||||||
****** Ninth, Tenth and Eleventh Lines
|
****** Ninth, Tenth and Eleventh Lines
|
||||||
Str := '^FO30,260^AC,18^FDThk Spec:^FS':CRLF$
|
Str := '^FO30,260^AC,18^FDThk Spec:^FS':CRLF$
|
||||||
FOR M = 1 TO COUNT(PrintThickTargets,@VM) + (PrintThickTargets NE '')
|
FOR M = 1 TO COUNT(PrintThickTargets,@VM) + (PrintThickTargets NE '')
|
||||||
BaseLine = 260 + (M-1)*20
|
BaseLine = 260 + (M-1)*20
|
||||||
Str := '^FO140,':BaseLine:'^A040,20^FD':PrintThickTargets<1,M>:'^FS':CRLF$
|
Str := '^FO140,':BaseLine:'^A040,20^FD':PrintThickTargets<1,M>:'^FS':CRLF$
|
||||||
NEXT M
|
NEXT M
|
||||||
|
|
||||||
Str := '^FO410,260^AC,18^FDRes Spec:^FS':CRLF$
|
Str := '^FO410,260^AC,18^FDRes Spec:^FS':CRLF$
|
||||||
FOR M = 1 TO COUNT(PrintResTargets,@VM) + (PrintResTargets NE '')
|
FOR M = 1 TO COUNT(PrintResTargets,@VM) + (PrintResTargets NE '')
|
||||||
BaseLine = 260 + (M-1)*20
|
BaseLine = 260 + (M-1)*20
|
||||||
Str := '^FO520,':BaseLine:'^A040,20^FD':PrintResTargets<1,M>:'^FS':CRLF$
|
Str := '^FO520,':BaseLine:'^A040,20^FD':PrintResTargets<1,M>:'^FS':CRLF$
|
||||||
NEXT M
|
NEXT M
|
||||||
|
|
||||||
IF PostAkrionRecipe NE '' THEN
|
IF PostAkrionRecipe NE '' THEN
|
||||||
Str := '^FO30,335^AC,18^FDPost:^FS':CRLF$
|
Str := '^FO30,335^AC,18^FDPost:^FS':CRLF$
|
||||||
Str := '^FO90,335^A0,20^FD':SubPostClean:'^FS':CRLF$
|
Str := '^FO90,335^A0,20^FD':SubPostClean:'^FS':CRLF$
|
||||||
Str := '^FO210,335^AC,18^FDAkrion:^FS':CRLF$
|
Str := '^FO210,335^AC,18^FDAkrion:^FS':CRLF$
|
||||||
Str := '^FO300,335^A0,20^FD':PostAkrionRecipe:'^FS':CRLF$
|
Str := '^FO300,335^A0,20^FD':PostAkrionRecipe:'^FS':CRLF$
|
||||||
Str := '^BY2,2.0':CRLF$
|
Str := '^BY2,2.0':CRLF$
|
||||||
Str := '^FO450,335^A040,20^B3,,23,N^FD':PostAkrionRecipe:'^FS':CRLF$
|
Str := '^FO450,335^A040,20^B3,,23,N^FD':PostAkrionRecipe:'^FS':CRLF$
|
||||||
Str := '^BY2,3.0':CRLF$
|
Str := '^BY2,3.0':CRLF$
|
||||||
END ELSE
|
END ELSE
|
||||||
Str := '^FO30,335^AC,18^FDPost:^FS':CRLF$
|
Str := '^FO30,335^AC,18^FDPost:^FS':CRLF$
|
||||||
Str := '^FO120,335^A0,20^FD':SubPostClean:'^FS':CRLF$
|
Str := '^FO120,335^A0,20^FD':SubPostClean:'^FS':CRLF$
|
||||||
END
|
END
|
||||||
|
|
||||||
****** Separator bar
|
****** Separator bar
|
||||||
Str := '^FO15,365^GB790,1^FS':CRLF$
|
Str := '^FO15,365^GB790,1^FS':CRLF$
|
||||||
|
|
||||||
****** Data Matrix barcode
|
****** Data Matrix barcode
|
||||||
Str := '^FO720,280^CI28':CRLF$
|
Str := '^FO720,280^CI28':CRLF$
|
||||||
Str := '^BXN,2,200^FDP':PartNo:'|S':SubPartNo:'|1T':PrintWMOutKey:'|2T':LotNo:'|':PSNo:'|Q':WfrQty:'|1V':Vendor:'|SEQ':Cnt:'^FS':CRLF$
|
Str := '^BXN,2,200^FDP':PartNo:'|S':SubPartNo:'|1T':PrintWMOutKey:'|2T':LotNo:'|':PSNo:'|Q':WfrQty:'|1V':Vendor:'|SEQ':Cnt:'^FS':CRLF$
|
||||||
|
|
||||||
****** Fourteenth Line
|
****** Fourteenth Line
|
||||||
Str := '^FO30,375^AC,18^FDProd Spec No:^FS':CRLF$
|
Str := '^FO30,375^AC,18^FDProd Spec No:^FS':CRLF$
|
||||||
Str := '^FO190,375^A0,25^FD':PSNo:'^FS':CRLF$
|
Str := '^FO190,375^A0,25^FD':PSNo:'^FS':CRLF$
|
||||||
|
|
||||||
IF SpecType = 'Production' THEN SpecType = 'Prod'
|
IF SpecType = 'Production' THEN SpecType = 'Prod'
|
||||||
IF SpecType = 'Pre-Production' THEN SpecType = 'Pre'
|
IF SpecType = 'Pre-Production' THEN SpecType = 'Pre'
|
||||||
|
|
||||||
Str := '^FO275,375^AC,18^FDSpec Type:^FS':CRLF$
|
Str := '^FO275,375^AC,18^FDSpec Type:^FS':CRLF$
|
||||||
Str := '^FO400,375^A0,25^FD':SpecType:'^FS':CRLF$
|
Str := '^FO400,375^A0,25^FD':SpecType:'^FS':CRLF$
|
||||||
Str:= '^FO480,375^AC,18^FDBag:^FS':CRLF$
|
Str:= '^FO480,375^AC,18^FDBag:^FS':CRLF$
|
||||||
Str:= '^FO530,375^A0,20^FD':ShipBagReq:'^FS':CRLF$
|
Str:= '^FO530,375^A0,20^FD':ShipBagReq:'^FS':CRLF$
|
||||||
|
|
||||||
***** End of Label
|
***** End of Label
|
||||||
Str:= '^XZ'
|
Str:= '^XZ'
|
||||||
Next
|
Next
|
||||||
|
|
||||||
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
||||||
stat = Set_Printer('TEXT',Str)
|
stat = Set_Printer('TEXT',Str)
|
||||||
end else
|
end else
|
||||||
stat = Direct_Print('PRINT', Str)
|
stat = Direct_Print('PRINT', Str)
|
||||||
end
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
@ -438,34 +447,35 @@ PrintWOLabels:
|
|||||||
PrintWO:
|
PrintWO:
|
||||||
* * * * * *
|
* * * * * *
|
||||||
|
|
||||||
Str = '^XA^CFD'
|
Str = '^XA^CFD'
|
||||||
Str := '^LH0,0'
|
Str := '^LH0,0'
|
||||||
Str := '^PR2' ;* Print speed 2 inches per second
|
Str := '^PR2' ;* Print speed 2 inches per second
|
||||||
Str := '^LL325' ;* Label length in dots
|
Str := '^LL325' ;* Label length in dots
|
||||||
Str := '^MD2' ;* Media darkness
|
Str := '^MD2' ;* Media darkness
|
||||||
Str := '^PQ2' ;* Print 2 labels for each pass through here
|
Str := '^PQ2' ;* Print 2 labels for each pass through here
|
||||||
STR := '^MMT':CRLF$ ;* Media mode t=tear off mode
|
STR := '^MMT':CRLF$ ;* Media mode t=tear off mode
|
||||||
|
|
||||||
IF INDEX(PrintWONo,'.',1) THEN
|
IF INDEX(PrintWONo,'.',1) THEN
|
||||||
Str:= '^FO10,30^A0,220,210^FD':PrintWONo:'^FS':CRLF$
|
Str:= '^FO10,30^A0,220,210^FD':PrintWONo:'^FS':CRLF$
|
||||||
END ELSE
|
END ELSE
|
||||||
Str:= '^FO70,30^A0,220,210^FD':PrintWONo:'^FS':CRLF$
|
Str:= '^FO70,30^A0,220,210^FD':PrintWONo:'^FS':CRLF$
|
||||||
END
|
END
|
||||||
|
|
||||||
CharCnt = LEN(CustName)
|
CharCnt = LEN(CustName)
|
||||||
NameLength = CharCnt*72
|
NameLength = CharCnt*72
|
||||||
WhiteSpace = INT(((2103 - NameLength)/2103) * 806)
|
WhiteSpace = INT(((2103 - NameLength)/2103) * 806)
|
||||||
StartingXPos = INT(WhiteSpace/2)
|
StartingXPos = INT(WhiteSpace/2)
|
||||||
|
|
||||||
Str:= '^FO':StartingXPos:',230^A0,75,72^FD':CustName:'^FS':CRLF$
|
Str:= '^FO':StartingXPos:',230^A0,75,72^FD':CustName:'^FS':CRLF$
|
||||||
|
|
||||||
Str:= '^FO160,320^A080,50^FD':'Commit Date: ':OCONV( XLATE( 'WO_LOG', WONo, WO_LOG_COMMIT_DATE$, 'X' ), 'D2/' ):'^FS':CRLF$
|
Str:= '^FO160,320^A080,50^FD':'Commit Date: ':OCONV( XLATE( 'WO_LOG', WONo, WO_LOG_COMMIT_DATE$, 'X' ), 'D2/' ):'^FS':CRLF$
|
||||||
Str:= '^XZ'
|
Str:= '^XZ'
|
||||||
|
|
||||||
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
If Environment_Services('GetLabelPrintMethod') _EQC 'OIPI' then
|
||||||
stat = Set_Printer('TEXT',Str)
|
stat = Set_Printer('TEXT',Str)
|
||||||
end else
|
end else
|
||||||
stat = Direct_Print('PRINT', Str)
|
stat = Direct_Print('PRINT', Str)
|
||||||
end
|
end
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
|
|
||||||
|
@ -62,7 +62,8 @@ Service AuthenticateLSLCredentials(LSLUsername, LSLPassword)
|
|||||||
|
|
||||||
Response = False$
|
Response = False$
|
||||||
If ( (LSLUsername NE '') and (LSLPassword NE '') ) then
|
If ( (LSLUsername NE '') and (LSLPassword NE '') ) then
|
||||||
Convert @Lower_Case to @Upper.Case in LSLUsername
|
Convert @Lower_Case to @Upper_Case in LSLUsername
|
||||||
|
Convert @Lower_Case to @Upper_Case in LSLPassword
|
||||||
If RowExists('LSL_USERS', LSLUsername) then
|
If RowExists('LSL_USERS', LSLUsername) then
|
||||||
Password = Xlate('LSL_USERS', LSLUsername, 'PASSWORD', 'X')
|
Password = Xlate('LSL_USERS', LSLUsername, 'PASSWORD', 'X')
|
||||||
If LSLPassword EQ Password then
|
If LSLPassword EQ Password then
|
||||||
@ -313,67 +314,3 @@ Service GetLSLUser(Username)
|
|||||||
|
|
||||||
end service
|
end service
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
|
||||||
// VerifyUserSessions
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//----------------------------------------------------------------------------------------------------------------------
|
|
||||||
Service VerifyUserSessions()
|
|
||||||
|
|
||||||
// Use MESSENGER as the recipient. It will process callback procedures.
|
|
||||||
Messaging_Services('SendMessage', 'GetLoggedInUsers', 'Request', 'MESSENGER', 'All', '', 'Procedure', 'Security_Services,UserSessionsListener,@MESSAGE,@ARGUMENTS')
|
|
||||||
|
|
||||||
end service
|
|
||||||
|
|
||||||
|
|
||||||
Service UserSessionsListener()
|
|
||||||
|
|
||||||
// Process message
|
|
||||||
// If user is running an old version of LSL, then send them a popup asking them to restart their session.
|
|
||||||
Transfer Param2 to SessionInfo
|
|
||||||
Station = SessionInfo<1, 2>
|
|
||||||
OIUserName = SessionInfo<2, 2>
|
|
||||||
SSOUserName = SessionInfo<3, 2>
|
|
||||||
ProcessID = SessionInfo<4, 2>
|
|
||||||
LSL2Version = SessionInfo<5, 2>
|
|
||||||
OCXVersion = SessionInfo<6, 2>
|
|
||||||
|
|
||||||
CurrLSL2Version = Database_Services('ReadDataRow', 'APP_INFO', 'LSL2_VERSION')
|
|
||||||
If ((LSL2Version NE '') and (LSL2Version NE CurrLSL2Version)) then
|
|
||||||
// Send a message to the user
|
|
||||||
Message = 'You are running an outdated version of LSL. Restart your application ASAP to pickup the latest code.'
|
|
||||||
Messaging_Services('SendMessage', 'SetPopupMessage', 'Request', '', Station, Message)
|
|
||||||
* If OIUserName EQ 'DANIEL_ST' then
|
|
||||||
* Messaging_Services('SendMessage', 'RunProcedure', 'Request', '', Station, 'SECURITY_SERVICES,REQUIREREAUTHENTICATION', '', '', '')
|
|
||||||
* end
|
|
||||||
end
|
|
||||||
|
|
||||||
end service
|
|
||||||
|
|
||||||
|
|
||||||
Service RequireReauthentication()
|
|
||||||
|
|
||||||
Authenticated = False$
|
|
||||||
|
|
||||||
If MemberOf(@USER4, 'OI_ADMIN') then
|
|
||||||
ParentForm = 'NDW_MAIN'
|
|
||||||
end else
|
|
||||||
ParentForm = 'LSL_MAIN2'
|
|
||||||
end
|
|
||||||
Loop
|
|
||||||
|
|
||||||
Response = Dialog_Box('NDW_VERIFY_USER', ParentForm, @USER4)
|
|
||||||
Authenticated = Response<1>
|
|
||||||
If Not(Authenticated) then
|
|
||||||
ErrorMessage = 'You must reauthenticate to continue running your old version of OpenInsight.'
|
|
||||||
rv = Msg('', '', 'OK', '', 'Authentication Required':@FM:ErrorMessage)
|
|
||||||
end
|
|
||||||
Until Authenticated
|
|
||||||
Repeat
|
|
||||||
|
|
||||||
end service
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -792,10 +792,11 @@ Service PrintLabels(WONo)
|
|||||||
end
|
end
|
||||||
|
|
||||||
If INDEX(RDSNos,@VM,1) then
|
If INDEX(RDSNos,@VM,1) then
|
||||||
TypeOver = ''
|
TypeOver = ''
|
||||||
TypeOver<PDISPLAY$> = RDSNos
|
TypeOver<PDISPLAY$> = RDSNos
|
||||||
TypeOver<PFIELD$> = 2
|
TypeOver<PFIELD$> = 2
|
||||||
TypeOver<PTYPE$> = 'K'
|
TypeOver<PTYPE$> = 'K'
|
||||||
|
TypeOver<PSHOWGAUGE$> = True$
|
||||||
|
|
||||||
RDSKeys = Popup(@WINDOW,TypeOver,'WO_LOG_RTS')
|
RDSKeys = Popup(@WINDOW,TypeOver,'WO_LOG_RTS')
|
||||||
|
|
||||||
@ -1565,5 +1566,3 @@ ClearCursors:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
13
LSL2/STPROCINS/UNIT_EQUATES.txt
Normal file
13
LSL2/STPROCINS/UNIT_EQUATES.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
compile insert UNIT_EQUATES
|
||||||
|
/*----------------------------------------
|
||||||
|
Author : DJM
|
||||||
|
Written : 11/6/2025
|
||||||
|
Description : Insert for unit-hex conversion.
|
||||||
|
----------------------------------------*/
|
||||||
|
|
||||||
|
Equ UNIT_MICROMETER$ To \E66D\
|
||||||
|
Equ UNIT_OHM_CM$ To \EA2D636D\
|
||||||
|
Equ UNIT_OHM_PER_SQ$ To \EA2FDC\
|
||||||
|
Equ UNIT_A$ To ''
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user