Implemented ReceiveRelease_API.
Added OI Wizard Webview form to launch into OI Wizard from OI and auto-login the user. Added menu items to NDW_MAIN to launch the OI Wizard webview form and navigated to the appropriate page.
This commit is contained in:
@ -52,12 +52,10 @@ Function RDS_Services(@Service, @Params)
|
||||
***********************************************************************************************************************/
|
||||
#pragma precomp SRP_PreCompiler
|
||||
|
||||
$Insert SERVICE_SETUP
|
||||
$Insert APP_INSERTS
|
||||
$Insert MSG_EQUATES
|
||||
$Insert RTI_DEBUG_COMMON
|
||||
$Insert SRPMail_Inserts
|
||||
$Insert LOGICAL
|
||||
$Insert SERVICE_SETUP
|
||||
$Insert RDS_EQUATES
|
||||
$Insert PROD_SPEC_EQUATES
|
||||
$Insert RDS_LAYER_EQUATES
|
||||
@ -85,6 +83,11 @@ $Insert DICT_EQUATES
|
||||
$Insert COMPANY_EQUATES
|
||||
$Insert RETURN_TO_FAB_LOTS_EQUATES
|
||||
$Insert TEST_RUN_EQUATES
|
||||
$Insert RDS_LAYER_INFO_EQU
|
||||
$Insert EPI_PART_EQUATES
|
||||
$Insert CUST_EPI_PART_EQUATES
|
||||
$Insert UNIT_EQUATES
|
||||
$Insert QUOTE_SPEC_EQU
|
||||
|
||||
EQU COL$LSID TO 1
|
||||
EQU COL$RECIPE TO 2
|
||||
@ -108,6 +111,20 @@ EQU COL$MET_TWSIG TO 19
|
||||
EQU COL$MET_TWSIG_Z1 TO 20
|
||||
EQU COL$MET_TWSIG_Z2 TO 21
|
||||
|
||||
EQU PI$LEFT TO 1
|
||||
EQU PI$TOP TO 2
|
||||
EQU PI$RIGHT TO 3
|
||||
EQU PI$BOTTOM TO 4
|
||||
EQU PI$WIDTH TO 5
|
||||
EQU PI$HEIGHT TO 6
|
||||
EQU PI$SIZE TO 7
|
||||
|
||||
EQU PS$TOOL TO 1
|
||||
EQU PS$TYPE TO 2
|
||||
EQU PS$RECIPE TO 3
|
||||
EQU PS$FREQ TO 4
|
||||
EQU PS$PATTERN TO 11
|
||||
|
||||
EQU COMMA$ to ','
|
||||
|
||||
EQU NEW_EXIST$ To 0 ; * Reduce Mode 0
|
||||
@ -119,13 +136,14 @@ AutoDisplayErrors = FALSE$ ; // Set this to True$ when debugging so all erro
|
||||
Declare subroutine SRP_Stopwatch, Error_Services, obj_Tables, Metrology_Services, obj_RDS_Test, SRP_JSON, Logging_Services
|
||||
Declare subroutine RTI_Set_Debugger, Database_Services, Btree.Extract, Extract_SI_Keys, Obj_WO_Mat, Obj_WO_Mat_Log
|
||||
Declare subroutine Dialog_Box, Obj_Notes, RList, Set_Status, Errmsg, Obj_React_Status, Reactor_Services
|
||||
Declare subroutine Rds_Services, Obj_Post_Log, Mona_Services, Transaction_Services, Reduce
|
||||
Declare subroutine Rds_Services, Obj_Post_Log, Mona_Services, Transaction_Services, Reduce, Update_Index
|
||||
Declare function SRP_Sort_Array, Metrology_Services, obj_RDS_Test, obj_Test_Point_Map, Database_Services
|
||||
Declare function Work_Order_Services, SRP_JSON, Logging_Services, Environment_Services, SRP_Trim, Error_Services
|
||||
Declare function Memberof, Obj_WO_Mat, Obj_WO_Mat_Log, SRP_Array, DateTime, Dialog_Box, obj_Prod_Spec
|
||||
Declare function RDS_Services, RTI_DistinctList, GetTickCount, Clean_Insp_Services, WO_Mat_QA_Services
|
||||
Declare function PSN_Services, Rds_Layer_Services, SRP_Rotate_Array, Qa_Services, SRP_Date, SRP_Time, SRP_Datetime
|
||||
Declare function Reactor_Services, Signature_Services, obj_rds, Test_Run_Services, Return_To_Fab_Services
|
||||
Declare function obj_Vendor_Code
|
||||
|
||||
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\RDS'
|
||||
LogDate = Oconv(Date(), 'D4/')
|
||||
@ -2559,6 +2577,797 @@ Service UnsignPreEpiSignature(RDSNo, UserId)
|
||||
|
||||
end service
|
||||
|
||||
|
||||
Service GetRdsZpl(RdsKey)
|
||||
|
||||
ZPL = ''
|
||||
ErrorMsg = ''
|
||||
If RdsKey NE '' then
|
||||
If RowExists('RDS', RdsKey) then
|
||||
Update_Index ("RDS", "WO", "")
|
||||
UniqueWOs = ''
|
||||
CustNos = ''
|
||||
CompositeKeys = ''
|
||||
WONo = XLATE('RDS',RdsKey,RDS_WO$,'X')
|
||||
WOStepKey = Xlate('RDS', RdsKey, 'WO_STEP_KEY', 'X')
|
||||
CustNo = XLATE('WO_LOG',WONo,WO_LOG_CUST_NO$,'X')
|
||||
WOLogRec = XLATE('WO_LOG',WONo,'','X')
|
||||
CassNo = XLATE('RDS',RdsKey,'CASS_NO','X')
|
||||
WOMatRec = XLATE('WO_MAT',WONo:'*':CassNo,'','X')
|
||||
ReShipCustNo = WOMatRec<WO_MAT_RESHIP_CUST_NO$>
|
||||
ReShipDate = WOMatRec<WO_MAT_RESHIP_DT$>
|
||||
ReShipCustEpiPartNo = WOMatRec<WO_MAT_RESHIP_CUST_EPI_PART_NO$>
|
||||
ReShipCustPO = WOMatRec<WO_MAT_RESHIP_CUST_PO$>
|
||||
ReShipCustPartNo = WOMatRec<WO_MAT_RESHIP_CUST_PART_NO$>
|
||||
|
||||
If ReShipCustNo EQ '' then
|
||||
CustNo = WOLogRec<WO_LOG_CUST_NO$>
|
||||
CustName = XLATE( 'RDS', RdsKey, 'ABBREV_OR_CO_NAME', 'X' )
|
||||
CustName = XLATE( 'COMPANY', CustNo, 'ABBREV_OR_CO_NAME', 'X' )
|
||||
end else
|
||||
CustNo = ReShipCustNo
|
||||
CompRec = XLATE('COMPANY',CustNo,'','X')
|
||||
CustName = CompRec<COMPANY_ABBREV$>
|
||||
end
|
||||
|
||||
If ReShipCustEpiPartNo EQ '' then
|
||||
EpiPartNo = WOLogRec<WO_LOG_EPI_PART_NO$>
|
||||
end else
|
||||
EpiPartNo = ReShipCustEpiPartNo
|
||||
end
|
||||
|
||||
EpiPartRec = XLATE('EPI_PART',EpiPartNo,'','X')
|
||||
CustEpiPartRec = XLATE('CUST_EPI_PART',CustNo:'*':EpiPartNo,'','X')
|
||||
CustEpiPartSpecNo = CustEpiPartRec<CUST_EPI_PART_SPEC_NO$>[-1,'B':@VM] ;* Last (current) Customer Spec Number
|
||||
|
||||
ShipBagReq = CustEpiPartRec<CUST_EPI_PART_SHIP_BAG_REQ$>
|
||||
|
||||
If ReShipDate EQ '' then
|
||||
ReqShipDate = OCONV( XLATE( 'WO_LOG', WO, WO_LOG_PROMISE_SHIP_DT$, 'X' ), 'D2/' )
|
||||
end else
|
||||
ReqShipDate = ReShipDate
|
||||
end
|
||||
|
||||
If ReShipCustPO EQ '' then
|
||||
IF CustNo = '7108' THEN
|
||||
PO = '' ;* Changed for "Foundry" customer additions 8/28/2012 JCH **********
|
||||
END ELSE
|
||||
PO = XLATE( 'RDS', RdsKey, rds_po$, 'X' )
|
||||
END
|
||||
end else
|
||||
PO = ReShipCustPO
|
||||
end
|
||||
|
||||
If ReShipCustPartNo EQ '' then
|
||||
PartNum = XLATE( 'RDS', RdsKey, rds_part_num$, 'X' )
|
||||
end else
|
||||
PartNum = ReShipCustPartNo
|
||||
end
|
||||
|
||||
ThickTarget = OCONV( XLATE( 'RDS', RdsKey, 'THICK_TARGET_ALL', 'X' ), 'MD3' )
|
||||
ThickUnit = XLATE( 'RDS', RdsKey, 'THICK_UNITS_ALL', 'X' )
|
||||
Dopant = XLATE( 'RDS', RdsKey, 'DOPANT_L1', 'X' )
|
||||
ResTarget = OCONV( XLATE( 'RDS', RdsKey, 'RES_TARGET_ALL', 'X' ), 'MD3' )
|
||||
ResUnit = XLATE( 'RDS', RdsKey, 'RES_UNITS_ALL', 'X' )
|
||||
RecipeIDS = XLATE( 'RDS', RdsKey, 'RECIPE_NO', 'X' )
|
||||
LotNum = XLATE( 'RDS', RdsKey, rds_lot_num$, 'X' )
|
||||
RONum = XLATE( 'RDS', RdsKey, 'RUN_ORDER_NUM', 'X' )
|
||||
PSNo = XLATE( 'RDS', RdsKey, rds_prod_spec_id$, 'X' )
|
||||
SpecType = OCONV( XLATE( 'RDS', RdsKey, 'SPEC_TYPE', 'X' ), '[SPEC_TYPE_CONV]' )
|
||||
SubPartNum = XLATE( 'RDS', RdsKey, 'SUB_PART_NUM', 'X' )
|
||||
RecipeInfo = XLATE( 'RECIPE', RecipeIDS, 'RECIPE_NAME_NO', 'X' )
|
||||
ThickVar = XLATE( 'PROD_SPEC', PSNo, 'THICK_MEASURE_L1', 'X' )
|
||||
ResVar = XLATE( 'PROD_SPEC', PSNo, 'RES_MEASURE_L1', 'X' )
|
||||
ConVar = XLATE( 'PROD_SPEC', PSNo, 'CON_MEASURE_L1', 'X' )
|
||||
StressVar = XLATE( 'PROD_SPEC', PSNo, 'STRESS_MEASURE', 'X' )
|
||||
TransVar = XLATE( 'PROD_SPEC', PSNo, 'TRANS_MEASURE', 'X' )
|
||||
ReactTypes = OCONV( XLATE( 'PROD_SPEC', PSNo, 'REACTOR_TYPE', 'X' ), '[REACT_TYPE_CONV,CODE]')
|
||||
SubOxide = OCONV(EpiPartRec<EPI_PART_SUB_OXIDE$>,'B')
|
||||
|
||||
SubPreCleans = ''
|
||||
SubPostCleans = ''
|
||||
PreAkrionRecipes = ''
|
||||
PostAkrionRecipes = ''
|
||||
|
||||
SubPreCleans = XLATE('PRS_STAGE',PSNo:'*PRE','TOOL_DISPLAY','X')
|
||||
SubPostCleans = XLATE('PRS_STAGE',PSNo:'*POST','TOOL_DISPLAY','X')
|
||||
PreAkrionRecipes = XLATE('PRS_STAGE',PSNo:'*PRE',PRS_STAGE_CLEAN_RECIPE$,'X')
|
||||
PostAkrionRecipes = XLATE('PRS_STAGE',PSNo:'*POST',PRS_STAGE_CLEAN_RECIPE$,'X')
|
||||
|
||||
SWAP 'AKRION' WITH 'Akr' IN SubPreCleans
|
||||
SWAP 'AKRION' WITH 'Akr' IN SubPostCleans
|
||||
|
||||
SWAP ' or ' WITH '/' IN SubPreCleans
|
||||
SWAP ' or ' WITH '/' IN SubPostCleans ;* To wide for field on small label "squeezed" data to fit JCH
|
||||
|
||||
SubPartNum = XLATE( 'RDS', RdsKey, 'SUB_PART_NUM', 'X' )
|
||||
WOStepKeys = XLATE( 'RDS',RdsKey,RDS_WO_STEP_KEY$,'X' ) ;* 05/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||
|
||||
IF CustNo = '7108' THEN
|
||||
CustPNDescs = '' ;* 8/28/2012 - JCH Added for new "Foundry" customer ******************
|
||||
END ELSE
|
||||
CustPNDescs = XLATE('EPI_PART',EpiPartNo,EPI_PART_EPI_PART_DESC$,'X') ;* 12/2/2011 - JCH Added for SAP interface
|
||||
END
|
||||
|
||||
************************************
|
||||
PreSurfscan = XLATE( 'PRS_STAGE', PSNo:'*PRE' , PRS_STAGE_SURFSCAN_SIG_REQ$ , 'X' )
|
||||
FirstSurfscan = XLATE( 'PRS_STAGE', PSNo:'*FWI' , PRS_STAGE_SURFSCAN_SIG_REQ$ , 'X' )
|
||||
PostCleanSurfscan = XLATE( 'PRS_STAGE', PSNo:'*POST' , PRS_STAGE_SURFSCAN_SIG_REQ$ , 'X' )
|
||||
|
||||
CleaningReqs = ''
|
||||
|
||||
SRPFlag = XLATE( 'PROD_SPEC', PSNo, 'SRP_REQ', 'X' ) ;* Updated in PROD_SPEC dictionary JCH 4/21/2015
|
||||
Qtys = XLATE( 'RDS', RdsKey, 'WAFERS_SCHEDULED', 'X' )
|
||||
MultilayVar = XLATE( 'RDS', RdsKey, 'MULTI_LAYER', 'X' )
|
||||
|
||||
* Lets break out thick and res and see if it gets measured based on frequency
|
||||
* Thickness
|
||||
|
||||
ThickPrintVar = ''
|
||||
ResPrintVar = ''
|
||||
SRPPrintVar = ''
|
||||
SRPTypePrintVar = ''
|
||||
|
||||
ThisThickVar = ThickVar
|
||||
ThisResVar = ResVar
|
||||
ThisConVar = ConVar
|
||||
ThisStressVar = StressVar
|
||||
ThisTransVar = TransVar
|
||||
ThisRunOrdNum = RONum
|
||||
ThisWO = WONo
|
||||
ThisWOStepKey = WOStepKey ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||
MultiStep = 0
|
||||
IF MultiStep > 0 THEN ThisWO = ThisWOStepKey[1,'*'] ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||
|
||||
ThickTool = field( ThisThickVar, '~', 1 )
|
||||
ThickType = field( ThisThickVar, '~', 2 )
|
||||
ThickRecipe = field( ThisThickVar, '~', 3 )
|
||||
ThickFreq = field( ThisThickVar, '~', 4 )
|
||||
ThickFirst = field( ThisThickVar, '~', 6 )
|
||||
ThickLast = field( ThisThickVar, '~', 7 )
|
||||
|
||||
ResTool = field( ThisResVar, '~', 1 )
|
||||
ResType = field( ThisResVar, '~', 2 )
|
||||
ResRecipe = field( ThisResVar, '~', 3 )
|
||||
ResFreq = field( ThisResVar, '~', 4 )
|
||||
ResFirst = field( ThisResVar, '~', 6 )
|
||||
ResLast = field( ThisResVar, '~', 7 )
|
||||
|
||||
ConTool = field( ThisConVar, '~', 1 )
|
||||
ConType = field( ThisConVar, '~', 2 )
|
||||
ConRecipe = field( ThisConVar, '~', 3 )
|
||||
ConFreq = field( ThisConVar, '~', 4 )
|
||||
ConFirst = field( ThisConVar, '~', 6 )
|
||||
ConLast = field( ThisConVar, '~', 7 )
|
||||
|
||||
StressTool = field( ThisStressVar, '~', 1 )
|
||||
StressType = field( ThisStressVar, '~', 2 )
|
||||
StressRecipe = field( ThisStressVar, '~', 3 )
|
||||
StressFreq = field( ThisStressVar, '~', 4 )
|
||||
StressFirst = field( ThisStressVar, '~', 6 )
|
||||
StressLast = field( ThisStressVar, '~', 7 )
|
||||
|
||||
TransTool = field( ThisTransVar, '~', 1 )
|
||||
TransType = field( ThisTransVar, '~', 2 )
|
||||
TransRecipe = field( ThisTransVar, '~', 3 )
|
||||
TransFreq = field( ThisTransVar, '~', 4 )
|
||||
TransFirst = field( ThisTransVar, '~', 6 )
|
||||
TransLast = field( ThisTransVar, '~', 7 )
|
||||
|
||||
IF MultiStep > 0 THEN
|
||||
WOBoxCnt = COUNT(XLATE('WO_STEP',ThisWOStepKey,6,'X'),@VM) ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||
END ELSE
|
||||
|
||||
EXTRACT_SI_KEYS( 'RDS', 'WO', ThisWO, RDSsInWO ) ;* Original Code
|
||||
|
||||
WOBoxCnt = FIELDCOUNT( RDSsInWO, @VM ) ;* Original Code
|
||||
END
|
||||
|
||||
* First check thickness
|
||||
|
||||
PrintThickness = false$
|
||||
IF ( ThisRunOrdNum = 1 ) AND ( ThickFirst ) THEN PrintThickness = true$
|
||||
IF ( ThisRunOrdNum = WOBoxCnt ) AND ( ThickLast ) THEN PrintThickness = true$
|
||||
|
||||
IF ThickFreq THEN
|
||||
* Need to check run order and see if it needs to be printed
|
||||
IF ThickFreq = 1 THEN
|
||||
PrintThickness = true$
|
||||
END ELSE
|
||||
* Generate @FM delim of runs that should print
|
||||
RoPrintFlag = str( @FM, WOBoxCnt-1 )
|
||||
FOR J = 1 TO WOBoxCnt step ThickFreq
|
||||
RoPrintFlag<J> = 1
|
||||
NEXT J
|
||||
IF ( RoPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintThickness = true$
|
||||
END
|
||||
END
|
||||
|
||||
IF PrintThickness THEN
|
||||
PSNRec = XLATE( 'PROD_SPEC', PSNo, '', 'X' )
|
||||
SpecSub = PSNRec<prod_spec_spec_substrate$>
|
||||
|
||||
TOrient = SpecSub<1,QSSubOrientation$>
|
||||
convert '<' TO '' in TOrient
|
||||
convert '>' TO '' in TOrient
|
||||
Orient = TOrient
|
||||
|
||||
ThickPrintVar = ThickTool:'~':ThickType:'~':Orient:'~':ThickRecipe
|
||||
END ELSE
|
||||
ThickPrintVar = ''
|
||||
END
|
||||
|
||||
* Now check resistivity
|
||||
|
||||
PrintResistivity = false$
|
||||
IF ( ThisRunOrdNum = 1 ) and ( ResFirst ) THEN PrintResistivity = true$
|
||||
IF ( ThisRunOrdNum = WOBoxCnt ) and ( ResLast ) THEN PrintResistivity = true$
|
||||
|
||||
IF ResFreq THEN
|
||||
* NEED TO CHECK RUN ORDER AND SEE IF IT NEEDS TO BE PRINTED
|
||||
IF ResFreq = 1 THEN
|
||||
PrintResistivity = true$
|
||||
END ELSE
|
||||
* Generate @FM delim of runs that should print
|
||||
RoPrintFlag = str( @FM, WOBoxCnt-1 )
|
||||
FOR J = 1 TO WOBoxCnt step ResFreq
|
||||
RoPrintFlag<J> = 1
|
||||
NEXT J
|
||||
IF ( RoPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintResistivity = true$
|
||||
END
|
||||
END
|
||||
|
||||
IF PrintResistivity THEN
|
||||
PSNRec = XLATE( 'PROD_SPEC', PSNo, '', 'X' )
|
||||
SpecSub = PSNRec<prod_spec_spec_substrate$> ;******* Moved to EPI_PART
|
||||
|
||||
TOrient = SpecSub<1,QSSubOrientation$>
|
||||
convert '<' TO '' in TOrient
|
||||
convert '>' TO '' in TOrient
|
||||
Orient = TOrient
|
||||
|
||||
ResPrintVar = ResTool:'~':ResType:'~':Orient:'~':ResRecipe
|
||||
END ELSE
|
||||
ResPrintVar = ''
|
||||
END
|
||||
|
||||
PrintSRP = false$
|
||||
SRPType = ''
|
||||
IF SRPFlag THEN
|
||||
* We know that SRP is one of the tools
|
||||
|
||||
IF PrintThickness THEN
|
||||
IF ThickTool = 'SRP' THEN
|
||||
PrintSRP = true$
|
||||
SRPType = ThickType
|
||||
END
|
||||
END
|
||||
|
||||
IF PrintResistivity THEN
|
||||
IF ResTool = 'SRP' THEN
|
||||
PrintSRP = true$
|
||||
SRPType = ResType
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
IF NOT(PrintSRP) THEN
|
||||
|
||||
* Now need to check concentration
|
||||
|
||||
IF ConTool = 'SRP' THEN
|
||||
IF ( ThisRunOrdNum = 1 ) and ( ConFirst ) THEN PrintSRP = true$
|
||||
IF ( ThisRunOrdNum = WOBoxCnt ) and ( ConLast ) THEN PrintSRP = true$
|
||||
|
||||
IF ConFreq THEN
|
||||
* Need to check run order and see if it needs to be printed
|
||||
IF ConFreq = 1 THEN
|
||||
PrintSRP = true$
|
||||
END ELSE
|
||||
* Generate fm delim of runs that should print
|
||||
RoPrintFlag = str( @FM, WOBoxCnt-1 )
|
||||
FOR J = 1 TO WOBoxCnt step ConFreq
|
||||
RoPrintFlag<J> = 1
|
||||
NEXT J
|
||||
IF ( RoPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintSRP = true$
|
||||
END
|
||||
END
|
||||
END
|
||||
IF PrintSRP THEN SRPType = ConType
|
||||
END
|
||||
|
||||
|
||||
IF NOT(PrintSRP) THEN
|
||||
|
||||
* Now need to check stress
|
||||
|
||||
IF StressTool = 'SRP' THEN
|
||||
IF ( ThisRunOrdNum = 1 ) AND ( StressFirst ) THEN PrintSRP = true$
|
||||
IF ( ThisRunOrdNum = WOBoxCnt ) AND ( StressLast ) THEN PrintSRP = true$
|
||||
|
||||
IF StressFreq THEN
|
||||
* Need to check run order and see if it needs to be printed
|
||||
IF StressFreq = 1 THEN
|
||||
PrintSRP = true$
|
||||
END ELSE
|
||||
* Generate @FM delim of runs that should print
|
||||
RoPrintFlag = str( @FM, WOBoxCnt-1 )
|
||||
FOR J = 1 TO WOBoxCnt step StressFreq
|
||||
RoPrintFlag<J> = 1
|
||||
NEXT J
|
||||
IF ( RoPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintSRP = true$
|
||||
END
|
||||
END
|
||||
END
|
||||
IF PrintSRP THEN SRPType = StressType
|
||||
END
|
||||
|
||||
IF NOT(PrintSRP) THEN
|
||||
* Now need to check transition
|
||||
IF TransTool = 'SRP' THEN
|
||||
IF ( ThisRunOrdNum = 1 ) AND ( TransFirst ) THEN PrintSRP = true$
|
||||
IF ( ThisRunOrdNum = WOBoxCnt ) AND ( TransLast ) THEN PrintSRP = true$
|
||||
|
||||
IF TransFreq THEN
|
||||
* Need to check run order and see if it needs to be printed
|
||||
IF TransFreq = 1 THEN
|
||||
PrintSRP = true$
|
||||
END ELSE
|
||||
* Generate fm delim of runs that should print
|
||||
RoPrintFlag = str( @FM, WOBoxCnt-1 )
|
||||
FOR J = 1 TO WOBoxCnt step TransFreq
|
||||
RoPrintFlag<J> = 1
|
||||
NEXT J
|
||||
IF ( ROPrintFlag<ThisRunOrdNum> = 1 ) THEN PrintSRP = true$
|
||||
END
|
||||
IF PrintSRP THEN SRPType = TransType
|
||||
END
|
||||
END
|
||||
END
|
||||
|
||||
IF PrintSRP THEN
|
||||
SRPPrintVar = true$
|
||||
SRPTypePrintVar = SRPType
|
||||
END ELSE
|
||||
SRPPrintVar = false$
|
||||
SRPTypePrintVar = ''
|
||||
END
|
||||
|
||||
END ELSE
|
||||
SRPPrintVar = false$
|
||||
SRPTypePrintVar = ''
|
||||
END
|
||||
|
||||
* Got all data now we can print
|
||||
|
||||
PrintCustName = CustName
|
||||
|
||||
IF MultiStep > 0 THEN
|
||||
WONo = WONo:'.':MultiStep ;* 5/21/2005 - JCH - Added for Order Entry/Vision upgrade
|
||||
WONo = WOStepKeys
|
||||
CONVERT '*' TO '.' IN WONo
|
||||
END
|
||||
|
||||
PrintWO = WoNo ;* 5/21/2005 - JCH - Changed for Order Entry/Vision upgrade
|
||||
PrintPSNNo = PSNo ;* 6/10/2005 - JCH - Added per manufacturing manager request
|
||||
PrintLotNum = LotNum
|
||||
PrintRecipeInfo = RecipeInfo
|
||||
PrintSpecType = SpecType
|
||||
PrintRONum = RONum
|
||||
PrintRdsId = RdsKey
|
||||
PrintThickPrintVar = ThickPrintVar
|
||||
PrintResPrintVar = ResPrintVar
|
||||
PrintMultiLayVar = MultiLayVar
|
||||
PrintSRPPrintVar = SRPPrintVar
|
||||
PrintSRPTypePrintVar = SRPTypePrintVar
|
||||
PrintQty = Qtys
|
||||
PrintThickTargets = ''
|
||||
PrintThickTargets = ThickTarget:ThickUnit
|
||||
|
||||
PrintResTargets = ''
|
||||
IF ResTarget[1,1] = '.' THEN
|
||||
TargetVal = '0':ResTarget
|
||||
END ELSE
|
||||
TargetVal = ResTarget
|
||||
END
|
||||
PrintResTargets = TargetVal:ResUnit
|
||||
|
||||
PrintPO = PO
|
||||
PrintPartNum = PartNum:' ':CustPNDescs
|
||||
PrintPartNo = PartNum
|
||||
PrintSubPartNum = SubPartNum
|
||||
|
||||
SubSupplier = obj_Vendor_Code('SemiToEpi',WOMatRec<WO_MAT_SUB_VEND_CD$>)
|
||||
|
||||
VendCd = XLATE('COMPANY',CustNo,COMPANY_VEND_CD$,'X')
|
||||
PrintCompany = XLATE('COMPANY', CustNo, COMPANY_CO_NAME$, 'X')
|
||||
|
||||
IF VendCd NE '' THEN
|
||||
SubSupplier = VendCd ;* Substrate supplier code found in the EPI_PART window. 12/9/2011 for cust 7067
|
||||
END
|
||||
|
||||
PrintSuppCd = SubSupplier
|
||||
PrintDopant = Dopant
|
||||
PrintShipBagReq = ShipBagReq ;* Changed to single value ShipBagReq 9/27/2012 JCH
|
||||
PrintReqShipDate = ReqShipDate
|
||||
PrintSubOxide = SubOxide
|
||||
PrintReactType = ReactTypes
|
||||
PrintSubPreClean = SubPreCleans
|
||||
PrintSubPostClean = SubPostCleans
|
||||
PrintPreAkrionRecipe = PreAkrionRecipes
|
||||
PrintPostAkrionRecipe = PostAkrionRecipes
|
||||
|
||||
APreRec = ''
|
||||
APostRec = ''
|
||||
IF ( PreAkrionRecipes <> '' ) THEN
|
||||
APreRec = ' ':PreAkrionRecipes<I>:' '
|
||||
SubOxide = 'No' ;* IF AKRION THEN NO OXIDE STRIP
|
||||
END
|
||||
|
||||
IF ( PostAkrionRecipes <> '' ) THEN
|
||||
APostRec = ' ':PostAkrionRecipes
|
||||
END
|
||||
|
||||
swap '~' with fmt( ' ', 'L#2' ) in PrintThickPrintVar
|
||||
swap UNIT_MICROMETER$ with 'um' in PrintThickTargets
|
||||
swap UNIT_OHM_CM$ with 'ohm.cm' in PrintThickTargets
|
||||
swap UNIT_OHM_PER_SQ$ with 'ohm/sq' in PrintThickTargets
|
||||
swap UNIT_A$ with 'A' in PrintThickTargets
|
||||
|
||||
swap '~' with fmt( ' ', 'L#2' ) in PrintResPrintVar
|
||||
swap UNIT_MICROMETER$ with 'um' in PrintResTargets
|
||||
swap UNIT_OHM_CM$ with 'ohm.cm' in PrintResTargets
|
||||
swap UNIT_OHM_PER_SQ$ with 'ohm/sq' in PrintResTargets
|
||||
swap UNIT_A$ with 'A' in PrintResTargets
|
||||
|
||||
//only print cheat sheet label on cassette #1
|
||||
IF CassNo EQ 1 then
|
||||
|
||||
PsnRec = XLATE('PROD_SPEC', PSNo, '', 'X')
|
||||
|
||||
SpecEpi = PsnRec<prod_spec_spec_epi$>
|
||||
SpecSub = PsnRec<PROD_SPEC_SPEC_SUBSTRATE$>
|
||||
|
||||
ThkSmile = PsnRec<PROD_SPEC_THICK_SMILE_REQ$>
|
||||
ThkShift = Field(PsnRec, @FM, PROD_SPEC_THICK_LIMIT_SHIFT$)
|
||||
|
||||
ResShift = Field(PsnRec, @FM, PROD_SPEC_RES_LIMIT_SHIFT$)
|
||||
|
||||
SSRecipe = XLATE('PRS_STAGE', PSNo:'*LWI', 5, 'X')
|
||||
PCRecipe = XLATE('PRS_STAGE', PSNo, 'POST_CLEAN_SURFSCAN_RECIPE', 'X')
|
||||
CustPart = PsnRec<PROD_SPEC_CUST_PART_NO$>
|
||||
WaferSize = XLATE('EPI_PART', CustPart, EPI_PART_SUB_WAFER_SIZE$, 'X')
|
||||
*Field(SpecSub, @VM, QSSubWafersize$)
|
||||
|
||||
convert char(248) to @fm in SpecEpi ;* char(248) is used to separate layers
|
||||
layerCount = fieldcount( SpecEpi, @fm )
|
||||
layerInfo = SpecEpi<layerCount>
|
||||
//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$)
|
||||
ResData = Field(layerInfo, @VM, QSEpiResMeasure$)
|
||||
ConData = Field(layerInfo, @VM, QSEpiConcMeasure$)
|
||||
CResData = Field(layerInfo, @VM, QSEpiCresMeasure$)
|
||||
|
||||
ThkMin = OCONV(Field(layerInfo, @VM, QSEpiMinThick$), 'MD3')
|
||||
ThkMax = OCONV(Field(layerInfo, @VM, QSEpiMaxThick$), 'MD3')
|
||||
ThkTarg = ''
|
||||
If ThkMin NE '' Then ThkTarg = oConv(iconv((ThkMin+ThkMax)/2, 'MD3'), 'MD3')
|
||||
|
||||
ResMin = OCONV(Field(layerInfo, @VM, QSEpiResMinThick$), 'MD3')
|
||||
ResMax = OCONV(Field(layerInfo, @VM, QSEpiResMaxThick$), 'MD3')
|
||||
ResTarg = ''
|
||||
If ResMin NE '' Then ResTarg = oConv(iconv((ResMin+ResMax)/2, 'MD3'), 'MD3')
|
||||
|
||||
ConMin = OCONV(Field(layerInfo, @VM, QSEpiConcMinThick$), 'MD3')
|
||||
ConMax = OCONV(Field(layerInfo, @VM, QSEpiConcMaxThick$), 'MD3')
|
||||
ConTarg = ''
|
||||
If ConMin NE '' Then ConTarg = oConv(iconv((ConMin+ConMax)/2, 'MD3'), 'MD3')
|
||||
|
||||
CResMin = OCONV(Field(layerInfo, @VM, QSEpiCresMin$), 'MD3')
|
||||
CResMax = OCONV(Field(layerInfo, @VM, QSEpiCresMax$), 'MD3')
|
||||
CResTarg = ''
|
||||
If CResMin NE '' Then CResTarg = oConv(iconv((CResMin+CResMax)/2, 'MD3'), 'MD3')
|
||||
|
||||
ThkTool = Field(ThkData, '~', PS$TOOL)
|
||||
ThkType = Field(ThkData, '~', PS$TYPE)
|
||||
ThkRecipe = Field(ThkData, '~', PS$RECIPE)
|
||||
ThkFreq = Field(ThkData, '~', PS$FREQ)
|
||||
ThkPattern = Field(ThkData, '~', PS$PATTERN)
|
||||
|
||||
ResTool = Field(ResData, '~', PS$TOOL)
|
||||
ResType = Field(ResData, '~', PS$TYPE)
|
||||
ResRecipe = Field(ResData, '~', PS$RECIPE)
|
||||
ResFreq = Field(ResData, '~', PS$FREQ)
|
||||
ResPattern = Field(ResData, '~', PS$PATTERN)
|
||||
|
||||
ConTool = Field(ConData, '~', PS$TOOL)
|
||||
ConType = Field(ConData, '~', PS$TYPE)
|
||||
ConRecipe = Field(ConData, '~', PS$RECIPE)
|
||||
ConFreq = Field(ConData, '~', PS$FREQ)
|
||||
ConPattern = Field(ConData, '~', PS$PATTERN)
|
||||
|
||||
CResTool = Field(CResData, '~', PS$TOOL)
|
||||
CResType = Field(CResData, '~', PS$TYPE)
|
||||
CResRecipe = Field(CResData, '~', PS$RECIPE)
|
||||
CResFreq = Field(CResData, '~', PS$FREQ)
|
||||
CResPattern = Field(CResData, '~', PS$PATTERN)
|
||||
|
||||
IF ThkMin EQ '' THEN ThkMin = '--'
|
||||
IF ThkMax EQ '' THEN ThkMax = '--'
|
||||
IF ThkTarg EQ '' THEN ThkTarg = '--'
|
||||
IF ThkTool EQ '' THEN ThkTool = '--'
|
||||
IF ThkType EQ '' THEN ThkType = '--'
|
||||
IF ThkRecipe EQ '' THEN ThkRecipe = '--'
|
||||
IF ThkPattern EQ '' THEN ThkPattern = '--'
|
||||
IF ThkFreq EQ '' THEN ThkFreq = '--'
|
||||
|
||||
IF ResMin EQ '' THEN ResMin = '--'
|
||||
IF ResMax EQ '' THEN ResMax = '--'
|
||||
IF ResTarg EQ '' THEN ResTarg = '--'
|
||||
IF ResTool EQ '' THEN ResTool = '--'
|
||||
IF ResType EQ '' THEN ResType = '--'
|
||||
IF ResRecipe EQ '' THEN ResRecipe = '--'
|
||||
IF ResPattern EQ '' THEN ResPattern = '--'
|
||||
IF ResFreq EQ '' THEN ResFreq = '--'
|
||||
|
||||
IF ConMin EQ '' THEN ConMin = '--'
|
||||
IF ConMax EQ '' THEN ConMax = '--'
|
||||
IF ConTarg EQ '' THEN ConTarg = '--'
|
||||
IF ConTool EQ '' THEN ConTool = '--'
|
||||
IF ConType EQ '' THEN ConType = '--'
|
||||
IF ConRecipe EQ '' THEN ConRecipe = '--'
|
||||
IF ConPattern EQ '' THEN ConPattern = '--'
|
||||
IF ConFreq EQ '' THEN ConFreq = '--'
|
||||
|
||||
IF CResMin EQ '' THEN CResMin = '--'
|
||||
IF CResMax EQ '' THEN CResMax = '--'
|
||||
IF CResTarg EQ '' THEN CResTarg = '--'
|
||||
IF CResTool EQ '' THEN CResTool = '--'
|
||||
IF CResType EQ '' THEN CResType = '--'
|
||||
IF CResRecipe EQ '' THEN CResRecipe = '--'
|
||||
IF CResPattern EQ '' THEN CResPattern = '--'
|
||||
IF CResFreq EQ '' THEN CResFreq = '--'
|
||||
|
||||
Swap @VM with ' / ' in SSRecipe
|
||||
IF PCRecipe EQ '' Then PCRecipe = '--'
|
||||
|
||||
If ThkSmile EQ '' OR ThkSmile EQ '0' then
|
||||
ThkSmile = 'N'
|
||||
end else
|
||||
ThkSmile = 'Y'
|
||||
end
|
||||
|
||||
If ThkShift EQ '' OR ThkShift EQ '0' then
|
||||
ThkShift = 'N'
|
||||
end else
|
||||
ThkShift = 'Y'
|
||||
end
|
||||
|
||||
If ResShift EQ '' OR ResShift EQ '0' then
|
||||
ResShift = 'N'
|
||||
end else
|
||||
ResShift = 'Y'
|
||||
end
|
||||
|
||||
if Len(ThkMin) > 6 then
|
||||
ThkMin = ThkMin[1,6]
|
||||
end
|
||||
if Len(ThkMax) > 6 then
|
||||
ThkMax = ThkMax[1,6]
|
||||
end
|
||||
if Len(ThkTarg) > 6 then
|
||||
ThkTarg = ThkTarg[1,6]
|
||||
end
|
||||
|
||||
if Len(ResMin) > 6 then
|
||||
ResMin = ResMin[1,6]
|
||||
end
|
||||
if Len(ResMax) > 6 then
|
||||
ResMax = ResMax[1,6]
|
||||
end
|
||||
if Len(ResTarg) > 6 then
|
||||
ResTarg = ResTarg[1,6]
|
||||
end
|
||||
|
||||
if Len(ConMin) > 6 then
|
||||
ConMin = ConMin[1,6]
|
||||
end
|
||||
if Len(ConMax) > 6 then
|
||||
ConMax = ConMax[1,6]
|
||||
end
|
||||
if Len(ConTarg) > 6 then
|
||||
ConTarg = ConTarg[1,6]
|
||||
end
|
||||
|
||||
|
||||
if Len(CResMin) > 6 then
|
||||
CResMin = CResMin[1,6]
|
||||
end
|
||||
if Len(CResMax) > 6 then
|
||||
CResMax = CResMax[1,6]
|
||||
end
|
||||
if Len(CResTarg) > 6 then
|
||||
CResTarg = CResTarg[1,6]
|
||||
end
|
||||
|
||||
****** Begin ZPL
|
||||
ZPL := '^XA'
|
||||
ZPL := '^LH10,0'
|
||||
ZPL := '^PR2' ;* Print speed 2 inches per second
|
||||
ZPL := '^LL406' ;* Label length @203 dpi
|
||||
ZPL := '^PW900'
|
||||
ZPL := '^MD0' ;* Media darkness
|
||||
ZPL := '^MMT' ;* Media mode t=tear off mode
|
||||
|
||||
****** 1st/2nd Line
|
||||
ZPL := '^FO30,20^A0,,40^FDWO ':PrintWO:'^FS'
|
||||
ZPL := '^FO590,10^A050,30^FDPSN ':PrintPSNNo:'^FS'
|
||||
ZPL := '^FO555,40^A050,30^FDDopant ':PrintDopant:'^FS'
|
||||
|
||||
****** 3rd Line - headers
|
||||
ZPL := '^FO85,100^A050,23^FDMin^FS'
|
||||
ZPL := '^FO145,100^A050,23^FDTarg^FS'
|
||||
ZPL := '^FO210,100^A050,23^FDMax^FS'
|
||||
ZPL := '^FO280,100^A050,23^FDTool^FS'
|
||||
ZPL := '^FO330,100^A050,23^FDType^FS'
|
||||
ZPL := '^FO470,100^A050,23^FDRecipe^FS'
|
||||
ZPL := '^FO600,100^A050,23^FDPattern^FS'
|
||||
ZPL := '^FO740,100^A050,23^FDFreq^FS'
|
||||
|
||||
****** 4th Line - Thickness (Thk)
|
||||
ZPL := '^FO70,130^GB720,0,3^FS'
|
||||
ZPL := '^FO70,130^GB0,160,3^FS'
|
||||
ZPL := '^FO10,140^A050,23^FDThk:^FS'
|
||||
ZPL := '^FO80,140^A050,23^FD':ThkMin:'^FS'
|
||||
ZPL := '^FO145,140^A050,23^FD':ThkTarg:'^FS'
|
||||
ZPL := '^FO210,140^A050,23^FD':ThkMax:'^FS'
|
||||
ZPL := '^FO280,140^A050,23^FD':ThkTool[1,5]:'^FS'
|
||||
ZPL := '^FO330,140^A050,23^FD':ThkType[1,11]:'^FS'
|
||||
ZPL := '^FO470,140^A050,23^FD':ThkRecipe[1,11]:'^FS'
|
||||
ZPL := '^FO600,140^A050,23^FD':ThkPattern[1,11]:'^FS'
|
||||
ZPL := '^FO750,140^A050,23^FD':ThkFreq:'^FS'
|
||||
|
||||
****** 5th Line - Resistivity (Res)
|
||||
ZPL := '^FO10,170^GB780,0,3^FS'
|
||||
ZPL := '^FO10,180^A050,23^FDRes:^FS'
|
||||
ZPL := '^FO80,180^A050,23^FD':ResMin:'^FS'
|
||||
ZPL := '^FO145,180^A050,23^FD':ResTarg:'^FS'
|
||||
ZPL := '^FO210,180^A050,23^FD':ResMax:'^FS'
|
||||
ZPL := '^FO280,180^A050,23^FD':ResTool[1,5]:'^FS'
|
||||
ZPL := '^FO330,180^A050,23^FD':ResType[1,11]:'^FS'
|
||||
ZPL := '^FO470,180^A050,23^FD':ResRecipe[1,11]:'^FS'
|
||||
ZPL := '^FO600,180^A050,23^FD':ResPattern[1,11]:'^FS'
|
||||
ZPL := '^FO750,180^A050,23^FD':ResFreq:'^FS'
|
||||
|
||||
****** 6th Line - Contact (Con)
|
||||
ZPL := '^FX***LINE 4'
|
||||
ZPL := '^FO10,210^GB780,0,3^FS'
|
||||
ZPL := '^FO10,220^A050,23^FDCon:^FS'
|
||||
ZPL := '^FO80,220^A050,23^FD':ConMin:'^FS'
|
||||
ZPL := '^FO145,220^A050,23^FD':ConTarg:'^FS'
|
||||
ZPL := '^FO210,220^A050,23^FD':ConMax:'^FS'
|
||||
ZPL := '^FO280,220^A050,23^FD':ConTool[1,5]:'^FS'
|
||||
ZPL := '^FO330,220^A050,23^FD':ConType[1,11]:'^FS'
|
||||
ZPL := '^FO470,220^A050,23^FD':ConRecipe[1,11]:'^FS'
|
||||
ZPL := '^FO600,220^A050,23^FD':ConPattern[1,11]:'^FS'
|
||||
ZPL := '^FO750,220^A050,23^FD':ConFreq:'^FS'
|
||||
|
||||
****** 7th Line - Contact Resistance (CRes)
|
||||
ZPL := '^FO10,250^GB780,0,3^FS'
|
||||
ZPL := '^FO10,260^A050,23^FDCRes:^FS'
|
||||
ZPL := '^FO80,260^A050,23^FD':CResMin:'^FS'
|
||||
ZPL := '^FO145,260^A050,23^FD':CResTarg:'^FS'
|
||||
ZPL := '^FO210,260^A050,23^FD':CResMax:'^FS'
|
||||
ZPL := '^FO280,260^A050,23^FD':CResTool[1,5]:'^FS'
|
||||
ZPL := '^FO330,260^A050,23^FD':CResType[1,11]:'^FS'
|
||||
ZPL := '^FO470,260^A050,23^FD':CResRecipe[1,11]:'^FS'
|
||||
ZPL := '^FO600,260^A050,23^FD':CResPattern[1,11]:'^FS'
|
||||
ZPL := '^FO750,260^A050,23^FD':CResFreq:'^FS'
|
||||
|
||||
ZPL := '^FO10,290^GB780,0,3^FS'
|
||||
|
||||
****** 8th Line - Special Instructions
|
||||
ZPL := '^FO10,310^A050,23^FDSurfScan: ':SSRecipe:'^FS'
|
||||
ZPL := '^FO10,340^A050,23^FDPostClean: ':PCRecipe:'^FS'
|
||||
ZPL := '^FO10,370^A050,23^FDWafer Size: ':WaferSize:'^FS'
|
||||
ZPL := '^FO560,310^A050,23^FDSmile Required: ':ThkSmile:'^FS'
|
||||
ZPL := '^FO560,340^A050,23^FDSPC Thk Shift: ':ThkShift:'^FS'
|
||||
ZPL := '^FO560,370^A050,23^FDSPC Res Shift: ':ResShift:'^FS'
|
||||
|
||||
ZPL:= '^XZ':CRLF$
|
||||
****** End ZPL
|
||||
|
||||
end
|
||||
|
||||
* Standard RDS Label print method
|
||||
IF PrintSpecType EQ 'Production' THEN PrintSpecType = 'Prod'
|
||||
IF PrintSpecType EQ 'Pre-Production' THEN PrintSpecType = 'Pre'
|
||||
|
||||
EpiPartRec = XLATE('EPI_PART',EpiPartNo,'','X')
|
||||
IsExportControl = EpiPartRec<EPI_PART_EXPORT_CONTROL$>
|
||||
CustEpiPartRec = XLATE('CUST_EPI_PART',CustNo:'*':EpiPartNo,'','X')
|
||||
CustEpiPartSpecNo = CustEpiPartRec<CUST_EPI_PART_SPEC_NO$>[-1,'B':@VM] ;* Last (current) Customer Spec Number
|
||||
PrintPSN = XLATE('RDS',PrintRDSId,'PROD_SPEC_ID', 'X')
|
||||
PrintRecipe = ''
|
||||
PSStageKey = PrintPSN:'*QA'
|
||||
PrintRecipe = XLATE('PRS_STAGE',PSStageKey,'MET_RECIPE','X')
|
||||
PrintQARecipe = FIELD(PrintRecipe, @VM, 1)
|
||||
PrintCompany = PrintCompany[1,32]
|
||||
|
||||
// Looping instead of using ^PQ2 since I have to set sequential key in 2D barcode
|
||||
For cnt = 1 to 2
|
||||
ZPL := '^XA'
|
||||
ZPL := '^LH0,0'
|
||||
ZPL := '^PR1' ;* Print speed 2 inches per second
|
||||
ZPL := '^LL406' ;* Label length @203 dpi
|
||||
ZPL := '^PW900'
|
||||
ZPL := '^MD5' ;* Media darkness
|
||||
ZPL := '^MMT' ;* Media mode t=tear off mode
|
||||
|
||||
****** First Line, Cust, WO and RO
|
||||
ZPL := '^FO25,25^AC,18^FDCust: ^FS':CRLF$
|
||||
ZPL := '^FO95,14^A045,35^FD':PrintCompany:'^FS':CRLF$
|
||||
ZPL := '^FO570,25^AC18^FDWO: ^FS':CRLF$
|
||||
ZPL := '^FO610,14^A045,35^FD':PrintWO:'^FS':CRLF$
|
||||
ZPL := '^FO730,25^AC18^FDRO: ^FS':CRLF$
|
||||
ZPL := '^FO770,14^A045,35^FD':PrintRONum:'^FS':CRLF$
|
||||
|
||||
****** Second Line, Cust Spec, PSN and Type
|
||||
ZPL := '^FO25,75^AC18^FD(P)Cust Spec: ^FS':CRLF$
|
||||
ZPL := '^FO185,65^A045,35^FD':CustEpiPartSpecNo:'^FS':CRLF$
|
||||
ZPL := '^FO25,95^BY2,2.0^B3,,50,N^FDP':CustEpiPartSpecNo:'^FS':CRLF$
|
||||
ZPL := '^FO640,75^AC18^FDPSN:^FS':CRLF$
|
||||
ZPL := '^FO690,65^A045,35^FD':PrintPSN:'^FS':CRLF$
|
||||
ZPL := '^FO630,125^AC18^FDType:^FS':CRLF$
|
||||
ZPL := '^FO690,115^A045,30^FD':PrintSpecType:'^FS':CRLF$
|
||||
|
||||
****** Third Line, Sub Lot, Qty and RDS
|
||||
ZPL := '^FO25,175^AC18^FD(2T)Sub Lot:^FS':CRLF$
|
||||
ZPL := '^FO175,165^A045,35^FD':PrintLotNum:'^FS':CRLF$
|
||||
ZPL := '^FO25,195^BY1,3.0^B3,,50,N^FD2T':PrintLotNum:'^FS':CRLF$
|
||||
ZPL := '^FO400,175^AC18^FD(Q)Qty:^FS':CRLF$
|
||||
ZPL := '^FO500,165^A045,35^FD':PrintQty:'^FS':CRLF$
|
||||
ZPL := '^FO400,195^B3,,50,N^FDQ':PrintQty:'^FS':CRLF$
|
||||
ZPL := '^FO590,175^AC18^FD(1T)RDS: ^FS':CRLF$
|
||||
ZPL := '^FO690,165^A045,35^FD':PrintRDSId:'^FS':CRLF$
|
||||
ZPL := '^FO630,195^B3,,50,N^FD1T':PrintRDSId:'^FS':CRLF$
|
||||
|
||||
****** Fourth Line, SubPN, Vendor and QA Metrology recipe
|
||||
ZPL := '^FO25,275^AC18^FD(S)Sub PN:^FS':CRLF$
|
||||
ZPL := '^FO145,265^A045,35^FD':PrintSubPartNum:'^FS':CRLF$
|
||||
ZPL := '^FO25,295^B3,,50,N^FDS':PrintSubPartNum:'^FS':CRLF$
|
||||
ZPL := '^FO400,275^AC18^FD(1V)Vend:^FS':CRLF$
|
||||
ZPL := '^FO510,265^A045,35^FD':PrintSuppCd:'^FS':CRLF$
|
||||
ZPL := '^FO400,295^B3,,50,N^FD1V':PrintSuppCd:'^FS':CRLF$
|
||||
ZPL := '^FO590,275^AC18^FD':PrintQARecipe:'^FS':CRLF$
|
||||
|
||||
****** Fifth Line, Motto and Data Matrix barcode
|
||||
ZPL := '^FO25,370^A045,28':CRLF$
|
||||
ZPL := "^FDWe do what we promise. That's quality made by Infineon.^FS":CRLF$
|
||||
ZPL := '^FO725,320^CI28':CRLF$
|
||||
ZPL := '^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)
|
||||
ZPL:= '^XZ'
|
||||
Next
|
||||
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. RDS ':RdsKey:' does not exist.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Null RdsKey passed in.'
|
||||
end
|
||||
|
||||
If ErrorMsg EQ '' then
|
||||
Response = ZPL
|
||||
end else
|
||||
Error_Services('Add', ErrorMsg)
|
||||
end
|
||||
|
||||
end service
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Internal GoSubs
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
@ -2571,3 +3380,4 @@ ClearCursors:
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user