COMPILE FUNCTION Comm_WO_Mat(Instruction, Parm1,Parm2) #pragma precomp SRP_PreCompiler /* Commuter module for WO_MAT (Work Order Material) window 10/18/2006 - John C. Henry, J.C. Henry & Co., Inc. */ DECLARE SUBROUTINE Set_Property, Set_Status, ErrMsg, Set_Property, obj_AppWindow, Send_Message DECLARE SUBROUTINE Btree.Extract, Send_Event, Security_Err_Msg, Forward_Event, End_Window, Start_Window DECLARE SUBROUTINE EditCell, obj_NCR, obj_Notes, obj_WO_Mat, obj_Tables, SAP_Services, Hold_Services DECLARE FUNCTION Get_Property, Get_Status, Popup, Send_Message, Msg, Security_Check, Dialog_Box, RowExists DECLARE FUNCTION Dialog_Box, obj_WO_Log, obj_NCR, MemberOf, obj_Tables, Error_Services, Hold_Services, Database_Services $INSERT POPUP_EQUATES $INSERT LOGICAL $INSERT MSG_EQUATES $INSERT APPCOLORS $INSERT WM_IN_EQUATES $INSERT WO_LOG_EQU $INSERT WO_STEP_EQU $INSERT WO_MAT_EQUATES $INSERT ORDER_EQU $INSERT RDS_EQU $INSERT PROD_SPEC_EQU $INSERT NOTIFICATION_EQU $INSERT LSL_USERS_EQU $INSERT SECURITY_RIGHTS_EQU EQU CRLF$ TO \0D0A\ EQU COL$PROC_STEP TO 1 EQU COL$PSN TO 2 EQU COL$PRE_CLEAN TO 3 EQU COL$RDS_NO TO 4 EQU COL$CURR_STATUS TO 5 EQU COL$POST_CLEAN TO 6 EQU COL$WFRS_OUT TO 7 EQU COL$ON_HOLD_DTM TO 1 EQU COL$ON_HOLD_USER TO 2 EQU COL$ON_REASON TO 3 EQU COL$OFF_HOLD_DTM TO 4 EQU COL$OFF_HOLD_USER TO 5 EQU COL$OFF_REASON TO 6 EQU COL$INV_TAG TO 8 EQU COL$CI_KEY TO 1 EQU COL$CI_STEP TO 2 EQU COL$CI_STAGE TO 3 EQU COL$CI_CLEAN_TOOL TO 4 EQU COL_WFR_SLOT_NO$ TO 1 EQU COL_WFR_ID$ TO 2 EQU COL_WFR_DISP$ TO 3 ErrTitle = 'Error in Comm_WO_MAT' ErrorMsg = '' Result = '' BEGIN CASE CASE Instruction = 'Create' ; GOSUB Create CASE Instruction = 'Refresh' ; GOSUB Refresh CASE Instruction = 'Read' ; GOSUB Read CASE Instruction = 'Write' ; GOSUB Write CASE Instruction = 'Clear' ; GOSUB Clear CASE Instruction = 'Delete' ; GOSUB Delete CASE Instruction = 'Close' ; GOSUB Close CASE Instruction = 'WfrDC' ; GOSUB WfrDC CASE Instruction = 'Shipment' ; GOSUB Shipment CASE Instruction = 'NCRKeysDC' ; GOSUB NCRKeysDC CASE Instruction = 'TabClick' ; GOSUB TabClick CASE Instruction = 'HoldClick' ; GOSUB HoldClick CASE Instruction = 'FlagClick' ; GOSUB FlagClick CASE Instruction = 'MakeUpClick' ; GOSUB MakeUpClick CASE Instruction = 'CleanInspDC' ; GOSUB CleanInspDC CASE Instruction = 'ProdVerClick' ; GOSUB ProdVerClick CASE Instruction = 'SendGR' ; GOSUB SendGR CASE Instruction = 'BatchFixit' ; GOSUB BatchFixit CASE 1 ErrorMsg = 'Unknown Instruction passed to routine' END CASE IF ErrorMsg NE '' THEN ErrMsg(ErrTitle:@SVM:ErrorMsg) END RETURN Result * * * * * * * Create: * * * * * * * obj_Appwindow('Create',@WINDOW) * get the current style IF MemberOf(@USER4,'OI_SUPERUSER') THEN Set_Property(@WINDOW:'.VOID_CHECKBOX','VISIBLE',1) END ELSE Set_Property(@WINDOW:'.VOID_CHECKBOX','VISIBLE',0) END * Provides compatibility with the existing messaging attachment system IF Parm1 NE '' THEN PassedKeys = FIELD(Parm1,'*',1) obj_Appwindow('ViewRelated',@WINDOW:@RM:PassedKeys) END GOSUB Refresh RETURN * * * * * * * Read: * * * * * * * WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') IF RowExists('WO_MAT',WONo:'*':CassNo) ELSE ErrMsg('Incorrect Work Order Mat Key entered.') Send_Event(@WINDOW,'CLEAR') RETURN END GOSUB Refresh RETURN * * * * * * * Write: * * * * * * * RETURN * * * * * * * Clear: * * * * * * * GOTO Refresh RETURN * * * * * * * Delete: * * * * * * * IF NOT(Security_Check('WO Material',DELETE$)) THEN Security_Err_Msg('WO Material',DELETE$) RETURN END WONo = Get_Property(@WINDOW:'.WO_NO','TEXT') CassNo = Get_Property(@WINDOW:'.CASS_NO','TEXT') IF WONo NE '' AND CassNo NE '' THEN obj_WO_Mat('Delete',WONo:@RM:CassNo) IF Get_Status(errCode) THEN ErrMsg(errCode) RETURN END END Send_Event(@WINDOW,'CLEAR') obj_AppWindow('ReadOnly',@WINDOW:@RM:1) ;* Clear Read Only Result = 0 RETURN * * * * * * * Close: * * * * * * * obj_Appwindow('DetailReturn') RETURN * * * * * * * * WfrDC: * * * * * * * * WMId = Get_Property(@WINDOW,'ID') CtrlEntID = Get_Property(@WINDOW,'FOCUS') CurrPos = Get_Property(CtrlEntID,'SELPOS') CurrCol = CurrPos<1> CurrRow = CurrPos<2> WfrID = Get_Property(CtrlEntID,'CELLPOS',COL_WFR_ID$:@FM:CurrRow) CONVERT '.' TO '*' IN WfrID DetWindow = 'WO_WFR' DetKeys = WfrID DefaultRec = '' RetKey = WMId RetWin = @WINDOW RetPage = 1 RetCtrl = CtrlEntID RetPos = CurrPos obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos) RETURN * * * * * * * Refresh: * * * * * * * WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') WOMatKey = WONo:'*':CassNo sapBatchId = Get_Property(@WINDOW:'.SAP_BATCH_NO', 'TEXT') SAPTXDtm = Xlate('WO_MAT', WOMatKey, WO_MAT_SAP_TX_DTM$, 'X') * Disabled until further notice! - DJS / JRO - 2023/09/18 * Re-enabled SAP Batch Fixit for material handlers - JRO - 2023/10/10 IF MemberOf(@USER4,'MATERIAL HANDLER') THEN Set_Property(@WINDOW:'.SAP_FIXIT','ENABLED',1) END ELSE Set_Property(@WINDOW:'.SAP_FIXIT','ENABLED',0) END IF MemberOf(@USER4,'OI_SUPERUSER') THEN Set_Property(@WINDOW:'.VOID_CHECKBOX','VISIBLE',1) Set_Property(@WINDOW:'.FIX_ORDER_ITEM','VISIBLE',1) END ELSE Set_Property(@WINDOW:'.VOID_CHECKBOX','VISIBLE',0) Set_Property(@WINDOW:'.FIX_ORDER_ITEM','VISIBLE',0) END Ctrls = @WINDOW:'.WMO_KEY':@RM ; Props = 'DEFPROP':@RM Ctrls := @WINDOW:'.WMI_KEY':@RM ; Props := 'DEFPROP':@RM Ctrls := @WINDOW:'.PS_REACTOR_TYPE' ; Props := 'DEFPROP' Props = Get_Property(Ctrls,Props) WMOKey = Props[1,@RM] WMIKey = Props[COL2()+1,@RM] ReactorType = Props[COL2()+1,@RM] IF ReactorType = 'P' OR ReactorType = 'EPP' THEN IF WMIKey NE '' THEN Set_Property(@WINDOW:'.EPI_GROUP','ENABLED',1) END ELSE Set_Property(@WINDOW:'.EPI_GROUP','ENABLED',0) END IF WMOKey NE '' THEN Set_Property(@WINDOW:'.EPO_GROUP','ENABLED',1) END ELSE Set_Property(@WINDOW:'.EPO_GROUP','ENABLED',0) END Set_Property(@WINDOW:'.ASM_GROUP','ENABLED',0) END ELSE Set_Property(@WINDOW:'.ASM_GROUP','ENABLED',1) Set_Property(@WINDOW:'.EPO_GROUP','ENABLED',0) Set_Property(@WINDOW:'.EPI_GROUP','ENABLED',0) END * QBF buttons Ctrls = @WINDOW:'.QBF_FIRST_FIX':@RM ; Props = 'ENABLED':@RM Ctrls := @WINDOW:'.QBF_PREV_FIX':@RM ; Props := 'ENABLED':@RM Ctrls := @WINDOW:'.QBF_ABS_FIX':@RM ; Props := 'ENABLED':@RM Ctrls := @WINDOW:'.QBF_NEXT_FIX':@RM ; Props := 'ENABLED':@RM Ctrls := @WINDOW:'.QBF_LAST_FIX':@RM ; Props := 'ENABLED':@RM Ctrls := @WINDOW:'.QBF_STOP_FIX' ; Props := 'ENABLED' IF Get_Property(@WINDOW,'QBFLIST') = '' THEN Vals = 0:@RM:0:@RM:0:@RM:0:@RM:0:@RM:0 END ELSE Vals = 1:@RM:1:@RM:1:@RM:1:@RM:1:@RM:1 END Set_Property(Ctrls,Props,Vals) * Turn edit table symbolic column backgrounds to green ETSymbolics = Get_Property(@WINDOW,'@ET_SYMBOLICS') ;* Loaded during 'Create' in obj_Appwindow ETCtrls = ETSymbolics<1> ETCols = ETSymbolics<2> FOR I = 1 TO COUNT(ETCtrls,@VM) + (ETCtrls NE '') ETCtrl = ETCtrls<1,I> IF ETCtrl NE @WINDOW:'.CASSETTES' AND ETCtrl NE @WINDOW:'.INV_WH' THEN ETList = Get_Property(ETCtrl,'LIST') FOR Line = 1 TO COUNT(ETList,@FM) + (ETList NE '') IF ETList NE '' THEN FOR N = 1 TO COUNT(ETCols<1,I>,@SVM) + (ETCols<1,I> NE '') stat = Send_Message(ETCtrl,'COLOR_BY_POS',ETCols<1,I,N>,Line,GREEN$) NEXT N END NEXT Line END NEXT I CtrlName = @WINDOW:'.INV_WH' InvArray = Get_Property(CtrlName,'INVALUE') TagIDs = InvArray TagCnt = COUNT(TagIDs,@VM) + (TagIDs NE '') FOR I = 1 TO TagCnt InvTag = InvArray BEGIN CASE CASE InvTag[1,1] = 'I' ; LineColor = PRE_BLUE$ CASE InvTag[1,1] = 'O' ; LineColor = YELLOW$ CASE 1 ; LineColor = GREEN$ END CASE stat = Send_Message(CtrlName,'COLOR_BY_POS',0,I,LineColor) NEXT I CtrlName = @WINDOW:'.NCR_KEYS' NCRList = Get_Property(CtrlName,'LIST') ColCount = COUNT(NCRList<1>,@VM) + (NCRList<1> NE '') FOR Line = 1 TO COUNT(NCRList,@FM) + (NCRList NE '') Status = NCRList BEGIN CASE CASE Status = '' ; Color = WHITE$ CASE Status = 'Closed' ; Color = GREEN$ CASE Status = 'Open' ; Color = RED$ CASE Status = 'Verified' ; Color = YELLOW$ CASE 1 ; Color = WHITE$ END CASE FOR Col = 1 TO ColCount stat = Send_Message(CtrlName,'COLOR_BY_POS',Col,Line,Color) NEXT Col NEXT Line RETURN * * * * * * * Shipment: * * * * * * * ShipNo = Get_Property(@WINDOW:'.SHIP_NO','DEFPROP') IF ShipNo NE '' THEN obj_AppWindow('ViewRelated','SHIPMENT':@RM:ShipNo) END RETURN * * * * * * * RdsDC: * * * * * * * WOStepKey = Get_Property(@WINDOW,'ID') IF WOStepKey = '' THEN RETURN CtrlEntID = @WINDOW:'.CASSETTES' CurrPos = Get_Property(CtrlEntID,'NOTIFYPOS') ;* Undocumented property that gives cell location when multi select is enabled. CurrCol = CurrPos<1> CurrRow = CurrPos<2> RDSNo = Get_Property(CtrlEntID,'CELLPOS',2:@FM:CurrRow) IF RDSNo NE '' THEN Set_Property(@WINDOW,'@RETURN_FROM_RDS',WOStepKey) ;* Bullshit lashup to work with multiple RDS windows thisFormName = 'RDS' thisFormWindowUp = Get_Property(thisFormName,'VISIBLE') ;* Returns 0 = hidden, 1 = visible, 2 = minimized, 3 = maximized IF thisFormWindowUp = '' THEN If Get_Property('NDW_MAIN', 'VISIBLE') then AppMain = 'NDW_MAIN' end else AppMain = 'LSL_MAIN2' end Start_Window(thisFormName,AppMain,RDSNo:'*CENTER', '', '') ;* Put up the card window RETURN END IF thisFormWindowUp = 2 THEN Set_Property(thisFormName,'VISIBLE',9) ;* Restore the window if minimized IF Get_Property(thisFormName,'SAVEWARN') THEN Send_Event(thisFormName,'CLEAR') ;* Clear anything existing (prompts for save first) END END RETURN * * * * * * * NCRKeysDC: * * * * * * * WMId = Get_Property(@WINDOW,'ID') CtrlEntID = @WINDOW:'.NCR_KEYS' CurrPos = Get_Property(CtrlEntID,'SELPOS') CurrCol = CurrPos<1> CurrRow = CurrPos<2> NCRKey = Get_Property(CtrlEntID,'CELLPOS',1:@FM:CurrRow) Send_Event(@WINDOW,'WRITE') DetWindow = 'NCR' DetKeys = NCRKey DefaultRec = '' RetKey = WMId RetWin = @WINDOW RetPage = 1 RetCtrl = CtrlEntID RetPos = CurrPos obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos) RETURN * * * * * * * TabClick: * * * * * * * IF Parm1 NE '' THEN Page = Parm1 END ELSE Page = Get_Property(@WINDOW:'.TAB_CONTROL','VALUE') END Set_Property(@WINDOW,'VPOSITION',Page) RETURN * * * * * * * HoldClick: * * * * * * * WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') CtrlEnt = Get_Property(@WINDOW,'FOCUS') IF WONo = '' OR CassNo = '' THEN RETURN WOMatKey = WONo:'*':CassNo HoldEntity = 'WO_MAT' HoldEntityID = WOMatKey Send_Event(CtrlEnt,'GOTFOCUS') Set_Property(@WINDOW,'SAVEWARN',0) Send_Event(@WINDOW,'CLEAR') * obj_WO_Mat('ToggleHold',WOMatKey:@RM:HoldEntity:@RM:HoldEntityID:@RM:CtrlEnt) * * IF Get_Status(errCode) THEN ErrMsg(errCode) Transition = Hold_Services('CheckForHold', WOMatKey, CtrlEnt) HoldType = 'HOLD' HoldData = '' HoldData = Dialog_Box('DIALOG_HOLD',@WINDOW,Transition:@FM:@FM:HoldType) If HoldData NE 'Cancel' then Hold_Services('ToggleHold', WOMatKey, HoldEntity, HoldEntityID, CtrlEnt, '', HoldData, '') IF Error_Services("HasError") THEN ErrCode = Error_Services("GetMessage") ErrMsg(errCode) end end obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey) RETURN * * * * * * * HoldDC: * * * * * * * WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') IF WONo = '' OR CassNo = '' THEN RETURN WOMatKey = WONo:'*':CassNo CtrlEntID = @WINDOW:'.HOLD_HISTORY' HoldHistory = Get_Property(CtrlEntID,'LIST') CurrPos = Get_Property(CtrlEntID,'SELPOS') CurrCol = CurrPos<1> CurrRow = CurrPos<2> HistoryCols = Get_Property(CtrlEntID, "COLUMN") ColName = HistoryCols<1,1,CurrCol> Set_Property(@WINDOW,'SAVEWARN',0) WOMatRec = Database_Services("ReadDataRow", "WO_MAT", WOMatKey, "", "", FALSE$) IF INDEX(ColName,'START',1) THEN HoldStartReason = WOMatRec UpdatedText = Dialog_Box('DIALOG_TEXT',@WINDOW,'Hold Start Reason':@FM:HoldStartReason) END ELSE IF INDEX(ColName,'STOP',1) THEN HoldStopReason = WOMatRec UpdatedText = Dialog_Box('DIALOG_TEXT',@WINDOW,'Hold Stop Reason':@FM:HoldStopReason) END END If UpdatedText NE 'Cancel' then Hold_Services("EditHoldReason",WOMatKey, ColName, CurrRow, UpdatedText) End IF Error_Services("NoError") NE TRUE$ THEN ErrMsg(Error_Services("GetMessage")) end obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey) RETURN * * * * * * * FlagClick: * * * * * * * WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') CtrlEnt = Get_Property(@WINDOW,'FOCUS') FieldNo = Get_Property(CtrlEnt,'POS') IF WONo = '' OR CassNo = '' THEN RETURN WOMatKey = WONo:'*':CassNo IF NOT(MemberOf(@USER4,'MASTER_SCHED')) AND NOT(MemberOf(@USER4,'OI_ADMIN')) THEN ErrMsg('This function is limited to Material Control.') RETURN END Send_Event(CtrlEnt,'GOTFOCUS') CheckValue = Get_Property(CtrlEnt,'DEFPROP') Set_Property(@WINDOW,'SAVEWARN','0') Send_Event(@WINDOW,'CLEAR') obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) IF Get_Status(errCode) THEN ErrMsg(errCode) obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey) RETURN ************ MakeUpClick: ************ WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') CtrlEnt = Get_Property(@WINDOW,'FOCUS') FieldNo = Get_Property(CtrlEnt,'POS') Send_Event(CtrlEnt,'GOTFOCUS') CheckValue = Get_Property(CtrlEnt,'DEFPROP') InvalidRequest = False$ IF ((WONo NE '') AND (CassNo NE '')) THEN WOMatKey = WONo:'*':CassNo OnHold = Xlate('WO_MAT', WOMatKey, 'HOLD', 'X') IF OnHold NE True$ then IF (MemberOf(@USER4,'MASTER_SCHED')) | OR (MemberOf(@USER4,'SUPERVISOR')) | OR (MemberOf(@USER4,'ENGINEERING')) | OR (MemberOf(@USER4,'LEAD')) | OR (MemberOf(@USER4,'OI_ADMIN')) THEN WOMatRec = Database_Services("ReadDataRow", 'WO_MAT', WOMatKey) If Error_Services('NoError') then SAPBatchNo = WOMatRec SAPTXDtm = WOMatRec AwaitingBatchNo = ( (SAPTXDtm NE '') and (SAPBatchNo EQ '') ) FullBoxReject = (SAPBatchNo[-1, 1] = 'R') Begin Case Case AwaitingBatchNo InvalidRequest = True$ ErrMsg('WARNING: Cassette ineligible to be converted as it is awaiting a batch number from SAP.') Case FullBoxReject InvalidRequest = True$ ErrMsg('WARNING: Cassette ineligible to be converted as it is a full box reject.') Case Otherwise$ Null End Case If Not(InvalidRequest) then ReactorType = Xlate('WO_MAT', WOMatKey, 'REACTOR_TYPE_NO_CONV', 'X') EpiPro = (ReactorType EQ 'EPP') If EpiPro then LotId = Xlate('WO_MAT', WOMatKey, 'WMO_KEY', 'X') end else LotId = Xlate('WO_MAT', WOMatKey, 'RDS_NO', 'X') end If LotId NE '' then Parms = '' Parms<1> = LotId ; // Cassette to verify wafer count of. Parms<2> = 0 ; // Wafer count adjustment - 0 because converting box. Parms<3> = 'MU' ; // Wafer counter tool location Proceed = Dialog_Box('NDW_WAFER_COUNTER', @Window, Parms) If Proceed EQ True$ then Set_Property(@WINDOW,'SAVEWARN', False$) Send_Event(@WINDOW,'CLEAR') obj_WO_Mat('ChangeFlag',WOMatKey:@RM:FieldNo:@RM:CheckValue) IF Get_Status(errCode) THEN ErrMsg(errCode) END end else InvalidRequest = True$ end end else InvalidRequest = True$ ErrMsg('WARNING: Error starting wafer counter check. RDS No is missing.') end end end else InvalidRequest = True$ ErrMsg('ERROR: Error reading WO_MAT record.') end END ELSE InvalidRequest = True$ ErrMsg('INFO: This function is limited to authorized users only.') END end else InvalidRequest = True$ ErrMsg('INFO: You cannot make changes to the lot while it is on hold.') end END ELSE InvalidRequest = True$ ErrMsg('WARNING: Work Order and Cassette information is missing.') END IF (InvalidRequest EQ True$) then /* Toggle back the checkbox flag */ IF (CheckValue EQ False$) THEN Set_Property(CtrlEnt, 'DEFPROP', True$) END ELSE Set_Property(CtrlEnt, 'DEFPROP', False$) END END obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey) RETURN * * * * * * * CleanInspDC: * * * * * * * CtrlEntID = @WINDOW:'.CLEAN_INSP' CurrPos = Get_Property(CtrlEntID,"SELPOS") CurrCol = CurrPos<1> CurrRow = CurrPos<2> CIKey = Get_Property(CtrlEntID,'CELLPOS',COL$CI_KEY:@FM:CurrRow) WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') IF CIKey NE '' AND WONo NE '' AND CassNo NE '' THEN Send_Event(@WINDOW,'CLEAR') DetWindow = 'CLEAN_INSP' DetKeys = CIKey DefaultRec = '' RetKey = WONo:'*':CassNo RetWin = @WINDOW RetPage = 1 RetCtrl = CtrlEntID RetPos = CurrPos obj_Appwindow('ViewNewDetail',DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos) IF Get_Status(errCode) THEN ErrMsg(errCode) END END RETURN * * * * * * * ProdVerClick: * * * * * * * Ctrls = @WINDOW:'.WO_NO':@RM ; Props = 'DEFPROP':@RM Ctrls := @WINDOW:'.CASS_NO':@RM ; Props := 'DEFPROP':@RM Ctrls := @WINDOW:'.PROD_VER_NO' ; Props := 'DEFPROP' Vals = Get_Property(Ctrls,Props) WONo = Vals[1,@RM] CassNo = Vals[COL2()+1,@RM] ProdVerNo = Vals[COL2()+1,@RM] IF WONo NE '' AND CassNo NE '' THEN DetWindow = 'PROD_VER' DetKeys = ProdVerNo DefaultRec = '' RetKey = WONo:'*':CassNo RetPage = 1 RetCtrl = '' RetPos = '' oAParms = DetWindow:@RM:DetKeys:@RM:DefaultRec:@RM:RetKey:@RM:RetPage:@RM:RetCtrl:@RM:RetPos obj_AppWindow('ViewNewDetail',oAParms) IF Get_Status(errCode) THEN ErrMsg(errCode) END END RETURN * * * * * * * SendGR: * * * * * * * WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') If WONo NE '' and CassNo NE '' then WOMatKey = WONo:'*':CassNo WOMATRec = xlate('WO_MAT', WOMatKey, '', 'X') MUBox = Xlate('WO_MAT', WOMatKey, 'MAKEUP_BOX', 'X') Locate 'PACK' In WOMATRec<7> Using @VM Setting packLoc Then myVal = WOMATRec<31, packLoc> packComplete = (WOMATRec<31, packLoc> _EQC 'packaging complete') end else packComplete = FALSE$ end If ( (packComplete EQ '1') or (MUBox EQ True$) ) Then Sap_Services('RetransmitCassComp', WOMatKey) obj_AppWindow('LoadFormKeys',@WINDOW:@RM:WOMatKey) ErrMsg('SAP Transaction for ':WOMatKey:' succesfully resent.') end else ErrMsg('Packaging Step not complete - cannot send to SAP.':CRLF$:'Please return cassette to FAB for packaging.') end end else ErrorMessage = 'Process Error: Either Work Order number or Cassette number are null.' ErrMsg(ErrorMessage) end RETURN * * * * * * * BatchFixit: * * * * * * * WONo = Get_Property(@WINDOW:'.WO_NO','DEFPROP') CassNo = Get_Property(@WINDOW:'.CASS_NO','DEFPROP') WOMatKey = WONo:'*':CassNo IF WONo NE '' AND CassNo NE '' THEN Send_Event(@WINDOW,'CLEAR') obj_Appwindow('ViewRelated','WO_MAT_BATCH':@RM:WOMatKey) Set_Property('WO_MAT_BATCH','@RETURNKEY',WOMatKey) END RETURN