510 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			510 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Function NDW_Makeup_Wafer_NCR_Events(CtrlEntId, Event, @PARAMS)
 | |
| /***********************************************************************************************************************
 | |
| 
 | |
|     This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | |
|     permission from Infineon.
 | |
| 
 | |
|     Name        :   NDW_Makeup_Wafer_NCR_Events
 | |
| 
 | |
|     Description :   This function acts as a commuter module for all events related to this window.
 | |
| 
 | |
|     Notes       :   Commuter Modules are automatically called from the Promoted_Events function which is called by the
 | |
|                     application-specific promoted event handler. This makes it possible to add QuickEvents that need to
 | |
|                     execute Basic+ logic without having use the Form Designer to make the association, although this is
 | |
|                     limited to the events which are currently promoted.
 | |
| 
 | |
|                     If the form needs to call the commuter module directly then the QuickEvent parameters should be
 | |
|                     formatted like this:
 | |
| 
 | |
|                         '@SELF','@EVENT',['@PARAM1','@PARAMx']
 | |
| 
 | |
|     Parameters  :
 | |
|         CtrlEntId   [in] -- The fully qualified name of the control calling the promoted event
 | |
|         Event       [in] -- The event being executed. See the Notes section regarding "PRE" events
 | |
|         Param1-15   [in] -- Additional event parameter holders
 | |
|         EventFlow  [out] -- Set to 1 or 0 so the calling event knows whether or not to chain forward. See comments in
 | |
|                             EVENT_SETUP insert
 | |
| 
 | |
|     History     :   (Date, Initials, Notes)
 | |
|         02/12/19    djs  Duplicated from NDW_MAKEUP_WAFER_EVENTS.
 | |
|         02/11/22    djs  Fixed a typo in the PUB_AUTO_NCR.CLICK() event.
 | |
| 
 | |
| ***********************************************************************************************************************/
 | |
| 
 | |
| #pragma precomp SRP_PreCompiler
 | |
| #Window NDW_MAKEUP_WAFER_NCR
 | |
| 
 | |
| $insert APP_INSERTS
 | |
| $insert EVENT_SETUP
 | |
| $insert WO_MAT_EQUATES
 | |
| $insert MSG_EQUATES
 | |
| $insert WM_OUT_EQUATES
 | |
| 
 | |
| Declare subroutine  SRP_EditTable_Manager, SRP_Show_Window, BTree.Extract, Database_Services, Set_Status, ErrMsg
 | |
| Declare subroutine  Obj_WO_Wfr, Obj_Notes
 | |
| Declare function    SRP_EditTable_Manager, Database_Services, Material_Services, SRP_Array, Obj_NCR, ErrMsg
 | |
| 
 | |
| SubclassInfo    = Form_Services('FindSubclassControl')
 | |
| Subclass        = SubclassInfo<1>
 | |
| 
 | |
| // Update the arguments so that the OpenInsight OLE event will treate the ActiveX event as a native event handler.
 | |
| If Event EQ 'OLE' then
 | |
|     Transfer Event to OIEvent
 | |
|     Transfer Param1 to Event
 | |
|     Transfer Param2 to Param1
 | |
|     Transfer Param3 to Param2
 | |
| *    Transfer Param4 to Param3
 | |
| *    Transfer Param5 to Param4
 | |
| *    Transfer Param6 to Param5
 | |
| *    Transfer Param7 to Param6
 | |
| *    Transfer Param8 to Param7
 | |
| end
 | |
| 
 | |
| GoToEvent Event for CtrlEntID
 | |
| 
 | |
| Return EventFlow else EVENT_CONTINUE$
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Events
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| Event WINDOW.CREATE(CreateParam)
 | |
| 
 | |
|     // Get all work orders associated with the now inactive PSN. Use first work order found to find
 | |
|     // makeup wafers associated with the now inactive PSN.
 | |
|     // AllMakeupWafers = Material_Services('GetAvailableMakeupWafers', ThisWorkOrderNo, False$)
 | |
|     InactivePSN         = CreateParam
 | |
|     Set_Property(@Window, '@INACTIVE_PSN', InactivePSN)
 | |
|     AllMakeupWafers     = ''
 | |
|     WorkOrderList       = ''
 | |
|     SearchTable         = 'WO_LOG'
 | |
|     SearchString        = 'PS_NO' : @VM : InactivePSN : @FM
 | |
|     hDictSearchTable    = Database_Services('GetTableHandle', 'DICT.' : SearchTable)   
 | |
|     If Error_Services('NoError') then
 | |
|         rv              = Set_Status(0)
 | |
|         Flag            = ''
 | |
|         StatusCode      = ''
 | |
|         Btree.Extract(SearchString, SearchTable, hDictSearchTable, WorkOrderList, '', Flag)
 | |
|         If Get_Status(StatusCode) then
 | |
|             Error_Services('Add', 'Error calling Btree.Extract in the ':Event:' event. StatusCode: ':StatusCode)
 | |
|         end else
 | |
|             If WorkOrderList NE '' then
 | |
|                 // We just need one work order with this PSN to lookup available makeup wafers
 | |
|                 WorkOrderNo = WorkOrderList<1,1>
 | |
|                 WOMakeupWafers = ''
 | |
|                 WOMakeupWafers = Material_Services('GetAvailableMakeupWafers', WorkOrderNo, False$)
 | |
|                 SignedWafers   = ''
 | |
|                 UnsignedWafers = ''
 | |
|                 If WOMakeupWafers NE '' then
 | |
|                     SignedWafers    = WOMakeupWafers<1>
 | |
|                     UnsignedWafers  = WOMakeupWafers<2>
 | |
|                 end
 | |
|                 AllMakeupWafers = SRP_Array('Join', AllMakeupWafers, SignedWafers, 'OR', @VM)
 | |
|                 AllMakeupWafers = SRP_Array('Join', AllMakeupWafers, UnsignedWafers, 'OR', @VM)
 | |
|             end
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     GoSub Setup_OLE_Controls
 | |
| 
 | |
|     SRP_Show_Window(@Window, '', 'C', 'C', 1, '', False$, False$, FormSize)
 | |
| 
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event WINDOW.READ()
 | |
| 
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event WINDOW.CLOSE(CancelFlag)
 | |
| 
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event WINDOW.CLEAR(bSaveKey, bSuppressWarning, bMaintainFocus, CtrlIDFocus)
 | |
| 
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PUB_AUTO_NCR.CLICK()
 | |
|     
 | |
|     ErrorMsg    = ''
 | |
|     InternalDTM = IConv(OConv(Date(),'D'):' ':OConv(Time(),'MT'), 'DT')
 | |
|     // To do: NCR all makeup wafers and send a message to Dan S. and Mark C.
 | |
|     WafersToNCR = Get_Property(@Window:'.OLE_RPT_WAFERS_TO_NCR', 'OLE.List')
 | |
|     InactivePSN = Get_Property(@Window, '@INACTIVE_PSN')
 | |
|     ReactType   = Xlate('PROD_SPEC', InactivePSN, 'REACTOR_TYPE', 'X')
 | |
|     If InactivePSN NE '' then
 | |
|         If (ReactType EQ 'EPP') or (ReactType EQ 'P') then
 | |
|             // EpiPro Routine - Code adapted from COMM_WM_OUT('RejMat')
 | |
|             For each Row in WafersToNCR              
 | |
|                 WoNo        = Row<0,1>
 | |
|                 CassNo      = Row<0,2>
 | |
|                 SAPBatchNo  = Row<0,3>
 | |
|                 MakeupPSN   = Row<0,4>
 | |
|                 CustPartNo  = Row<0,5>
 | |
|                 CurrWfrQty  = Row<0,6>
 | |
|                 RDSNo       = Row<0,7>         
 | |
|                 WOStep		= 1
 | |
|                 OutCassNo	= CassNo
 | |
|                 WMOKey      = WONo:'*':WOStep:'*':OutCassNo
 | |
|                 Database_Services('ActivateRecord', 'WM_OUT', WMOKey)
 | |
|                 InCassNos 	= ''
 | |
|                 InSlotNos	= ''
 | |
|                 RDSNos		= ''
 | |
|                 PocketNos	= ''
 | |
|                 Zones		= ''
 | |
|                 OutSlotNos	= ''
 | |
|                 OutCassNos	= ''
 | |
|                 SlotNCRs	= ''
 | |
|                 MUWONos		= ''
 | |
|                 MUWOSteps	= ''
 | |
|                 MUCassIDs	= ''
 | |
|                 MUSlotNos	= ''
 | |
|                 GoodLines   = 0
 | |
|                 LastSlot    = 25
 | |
|                 For vPos = 1 to LastSlot ;// NCR all wafers that meet the following criteria.
 | |
|                     If ({UMW_CASS_ID}<0,vPos> EQ '') and ({RDS}<0,vPos> NE '') and (({SLOT_NCR}<0,vPos> EQ '') or ({MU_WO_NO}<0,vPos> NE '')) then
 | |
|                         GoodLines += 1
 | |
|                         RDSNos<1,GoodLines> 	= {RDS}<0,vPos>
 | |
|                         InCassNos<1,GoodLines>	= {IN_CASS_NO}<0,vPos>
 | |
|                         InSlotNos<1,GoodLines>	= {IN_SLOT_NO}<0,vPos>
 | |
|                         PocketNos<1,GoodLines>	= {POCKET}<0,vPos>
 | |
|                         Zones<1,GoodLines>		= {ZONE}<0,vPos>
 | |
|                         OutSlotNos<1,GoodLines>	= {SLOT_NO}<0,vPos>
 | |
|                         OutCassNos<1,GoodLines> = OutCassNo                     
 | |
|                         SlotNCRs				= {SLOT_NCR}<0,vPos>
 | |
|                         MUWONos					= {MU_WO_NO}<0,vPos>
 | |
|                         MUWOSteps				= {MU_WO_STEP}<0,vPos>
 | |
|                         MUCassIDs				= {MU_CASS_NO}<0,vPos>
 | |
|                         MUSlotNos				= {MU_SLOT_NO}<0,vPos>         
 | |
|                     end
 | |
|                 Next vPos
 | |
|                 If GoodLines NE False$ then       
 | |
|                     ncrParms  = WONo:@RM
 | |
|                     ncrParms := WOStep:@RM
 | |
|                     ncrParms := OutCassNo:@RM			;* Place holder for WO_MAT_CASS_NO **** Changed 9/26/2011 JCH
 | |
|                     ncrParms := '':@RM					;* Single RDS field (Non-EpiPro)
 | |
|                     ncrParms := '':@RM					;* Reactor No (Non-EpiPro)					
 | |
|                     ncrParms := 'POST':@RM              ;* Stage
 | |
|                     ncrParms := InCassNos:@RM           ;* InCassNos
 | |
|                     ncrParms := InSlotNos:@RM           ;* InSlotNos
 | |
|                     ncrParms := PocketNos:@RM           ;* Pocket Numbers
 | |
|                     ncrParms := Zones:@RM               ;* Zones
 | |
|                     ncrParms := OutCassNos:@RM          ;* OutCassNos
 | |
|                     ncrParms := OutSlotNos:@RM          ;* OutSlotNos
 | |
|                     ncrParms := RDSNos:@RM              ;* Multiple RDS Numbers (EpiPro)
 | |
|                     ncrParms := '':@RM					;* Placeholder for RejWaferIDS	
 | |
|                     ncrParms := SlotNCRs:@RM			;* Previous NCR No's				
 | |
|                     ncrParms := MUWONos:@RM             ;* Makeup Work Order Numbers
 | |
|                     ncrParms := MUWOSteps:@RM           ;* Makeup Work Order Steps
 | |
|                     ncrParms := MUCassIDs:@RM           ;* Makeup Cassette IDs
 | |
|                     ncrParms := MUSlotNos:@RM           ;* Makeup Slot Numbers
 | |
|                     ncrParms := 'C':@RM                 ;* Loss By
 | |
|                     ncrParms := 'PSN Inactive':@RM      ;* Containment Actions
 | |
|                     ncrParms := 'PSN Inactive':@RM      ;* Loss Comments
 | |
|                     ncrParms := 'PSN Inactive':@RM      ;* AC Comments
 | |
|                     ncrParms := 'Customer':@RM          ;* Department Responsible
 | |
|                     ncrParms := '365':@RM               ;* AC Code
 | |
|                     ncrParms := 'D58':@RM               ;* Loss Code
 | |
|                     ncrParms := 'C':@RM                 ;* NCR Status - Closed
 | |
|                     ncrParms := '0':@RM                 ;* Shift
 | |
|                     ncrParms := @USER4:@RM              ;* Shipment Signature
 | |
|                     ncrParms := @USER4:@RM              ;* Reject Signature
 | |
|                     ncrParms := InternalDTM:@RM         ;* Sent to SPC Datetime
 | |
|                     ncrParms := InternalDTM:@RM         ;* Shipment Signature Datetime
 | |
|                     ncrParms := 'Production'            ;* Department Handled
 | |
|                     
 | |
|                     Set_Status(0)
 | |
|                     NCRNo       = obj_NCR('Create',ncrParms)	;* Create new NCR for this wafer/group of wafers                   
 | |
|                     errCode = ''
 | |
|                     IF Get_Status(errCode) THEN
 | |
| *                        ErrMsg(errCode)
 | |
|                         ErrorMsg = errCode
 | |
|                     END ELSE
 | |
|                         RejDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')              
 | |
|                         RejWfrIDs	= ''
 | |
|                         CurrSlotIDs = ''
 | |
|                        
 | |
|                         FOR N = 1 TO COUNT(OutSlotNos,@VM) + (OutSlotNos NE '')               
 | |
|                             * * * *   Added 4/23/2016  JCH - wafer history   * * * *                    
 | |
|                             CurrSlotID 	= WONo:'*':OutCassNos<1,N>:'*':OutSlotNos<1,N>                  
 | |
|                             CurrSlotIDs<1,-1> = CurrSlotID                                       
 | |
|                             IF MUWONos<1,N> = '' THEN
 | |
|                                 RejWfrID = WONo:'*':InCassNos<1,N>:'*':InSlotNos<1,N>
 | |
|                             END ELSE
 | |
|                                 RejWfrID = MUWONos<1,N>:'*':MUCassIDs<1,N>:'*':MUSlotNos<1,N>
 | |
|                             END                    
 | |
|                             RejWfrIDs<1,-1> = RejWfrID                   
 | |
|                             Parms  = RejWfrID:@RM			;* WfrID
 | |
|                             Parms := RejDTM:@RM				;* EventDtm
 | |
|                             Parms := @USER4:@RM				;* EventBy
 | |
|                             Parms := 'NCR':@RM				;* Event
 | |
|                             Parms := '':@RM					;* NewSlotID
 | |
|                             Parms := '':@RM					;* RunLoc
 | |
|                             Parms := NCRNo:@RM				;* NCRNo
 | |
|                             Parms := '':@RM					;* TWUse
 | |
|                             Parms := CurrSlotID:@RM			;* CurrSlotID
 | |
|                             Parms := '':@RM					;* NewToolID
 | |
|                             Parms := '':@RM					;* CurrToolID
 | |
|                             Parms := '':@RM					;* NewInvLoc
 | |
|                             Parms := '':@RM					;* CurrInvLoc
 | |
|                             Parms := 'O'					;* Wfr Side
 | |
|                             obj_WO_Wfr('AddEvent',Parms)                               
 | |
|                             LineNo = OutSlotNos<1,N>
 | |
| *                            @Record<WM_OUT_RDS$,LineNo>         = ''
 | |
| *                            @Record<WM_OUT_POCKET$,LineNo>      = ''
 | |
| *                            @Record<WM_OUT_ZONE$,LineNo>        = ''
 | |
| *                            @Record<WM_OUT_IN_CASS_NO$,LineNo>  = ''
 | |
| *                            @Record<WM_OUT_IN_SLOT_NO$,LineNo>  = ''
 | |
| *                            @Record<WM_OUT_SLOT_NCR$,LineNo>    = NCRNo
 | |
| *                            @Record<WM_OUT_WO_NO$,LineNo>       = ''
 | |
| *                            @Record<WM_OUT_MU_WO_STEP$,LineNo>  = ''
 | |
| *                            @Record<WM_OUT_MU_CASS_NO$,LineNo>  = ''
 | |
| *                            @Record<WM_OUT_MU_SLOT_NO$,LineNo>  = ''                   
 | |
|                         NEXT N            
 | |
|                     END
 | |
| 
 | |
| *                    Database_Services('WriteDataRow', 'WM_OUT', WMOKey, @Record, True$, False$, True$)
 | |
|                   
 | |
|                 end else
 | |
|                     ErrorMsg = 'Error occurred while attempting to automatically NCR EpiPro makeup wafers. ' |
 | |
|                              : @SVM:'Notify FI team.'
 | |
| *                    ErrMsg(ErrorMsg)
 | |
|                 end
 | |
|                              
 | |
|             Next Row         
 | |
|         end else
 | |
|             AllRDS            = ''
 | |
|             AllWorkOrders     = ''
 | |
|             AllCass           = ''
 | |
|             // Non-EpiPro Routine - Code adapted from COMM_WO_MAT_WFR('RejMat')    
 | |
|             For each Row in WafersToNCR
 | |
|                 WoNo                = Row<0,1>
 | |
|                 AllWorkOrders<0,-1> = WoNo
 | |
|                 CassNo              = Row<0,2>
 | |
|                 AllCass<0,-1>       = CassNo
 | |
|                 SAPBatchNo          = Row<0,3>
 | |
|                 MakeupPSN           = Row<0,4>
 | |
|                 CustPartNo          = Row<0,5>
 | |
|                 CurrWfrQty          = Row<0,6>
 | |
|                 RDSNo               = Row<0,7>
 | |
|                 AllRDS<0,-1>        = RDSNo
 | |
|                 WOStepNo            = 1   
 | |
|                 Reactor             = Xlate('RDS', RDSNo, 'REACTOR', 'X')
 | |
|                 WOMatKey            = WONo:'*':CassNo
 | |
|                 Database_Services('ActivateRecord', 'WO_MAT', WOMatKey)
 | |
|                 WaferIDs            = {SLOT_WAFER_ID}
 | |
|                 GoodLines           = 0
 | |
|                 RejWaferIDs         = ''
 | |
|                 PrevNCRNos          = ''
 | |
|                 SlotNos             = ''
 | |
|                 For each WaferID in WaferIDs using @VM setting vPos
 | |
|                     If WaferID NE '' then
 | |
|                         GoodLines += 1
 | |
|                         RejWaferIDs<0,GoodLines> = WaferID
 | |
|                         PrevNCRNos<0,GoodLines>  = {SLOT_NCR}<0,vPos>
 | |
|                         SlotNos<0,GoodLines>     = {SLOT_NO}<0,vPos>        
 | |
|                     end
 | |
|                 Next WaferID
 | |
| 
 | |
|                 ncrParms  = WONo:@RM
 | |
|                 ncrParms := WOStepNo:@RM
 | |
|                 ncrParms := CassNo:@RM				;* Place holder for WO_MAT_CASS_NO
 | |
|                 ncrParms := RDSNo:@RM				;* Single RDS field 
 | |
|                 ncrParms := Reactor:@RM				;* Reactor No
 | |
|                 ncrParms := 'POST':@RM				;* Stage
 | |
|                 ncrParms := '':@RM					;* InCassNos
 | |
|                 ncrParms := SlotNos:@RM				;* InSlotNos
 | |
|                 ncrParms := '':@RM					;* PockeNots
 | |
|                 ncrParms := '':@RM					;* Zones
 | |
|                 ncrParms := '':@RM					;* OutCassNos
 | |
|                 ncrParms := '':@RM					;* OutSlotNos
 | |
|                 ncrParms := '':@RM					;* Multiple RDSNos (EpiPro)
 | |
|                 ncrParms := RejWaferIDs:@RM			;* Rejected Wafer ID's
 | |
|                 ncrParms := PrevNCRNos:@RM			;* Previous NCR No's
 | |
|                 ncrParms := '':@RM                  ;* Makeup Work Order Numbers
 | |
|                 ncrParms := '':@RM                  ;* Makeup Work Order Steps
 | |
|                 ncrParms := '':@RM                  ;* Makeup Cassette IDs
 | |
|                 ncrParms := '':@RM                  ;* Makeup Slot Numbers
 | |
|                 ncrParms := 'C':@RM                 ;* Loss By
 | |
|                 ncrParms := 'PSN Inactive':@RM      ;* Containment Actions
 | |
|                 ncrParms := 'PSN Inactive':@RM      ;* Loss Comments
 | |
|                 ncrParms := 'PSN Inactive':@RM      ;* AC Comments
 | |
|                 ncrParms := 'Customer':@RM          ;* Department Responsible
 | |
|                 ncrParms := '365':@RM               ;* AC Code
 | |
|                 ncrParms := 'D58':@RM               ;* Loss Code
 | |
|                 ncrParms := 'C':@RM                 ;* NCR Status - Closed
 | |
|                 ncrParms := '0':@RM                 ;* Shift
 | |
|                 ncrParms := @USER4:@RM              ;* Shipment Signature
 | |
|                 ncrParms := @USER4:@RM              ;* Reject Signature
 | |
|                 ncrParms := InternalDTM:@RM         ;* Sent to SPC Datetime
 | |
|                 ncrParms := InternalDTM:@RM         ;* Shipment Signature Datetime
 | |
|                 ncrParms := 'Production'            ;* Department Handled
 | |
| 
 | |
|                 Set_Status(0)
 | |
|                 NCRNo       = obj_NCR('Create',ncrParms)		;* Create new NCR for this wafer/group of wafers
 | |
|                 IF Get_Status(errCode) THEN
 | |
| *                    ErrMsg(errCode)
 | |
|                     ErrorMsg = errCode
 | |
|                 END ELSE
 | |
|                     RejDTM = OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTS')                
 | |
|                     RejWfrIDs	= ''
 | |
|                     CurrSlotIDs	= ''
 | |
|                     sCnt = COUNT(SlotNos,@VM) + (SlotNos NE '')
 | |
|                     FOR N = 1 TO sCnt                 
 | |
|                         * * * *   Added 3/23/2016  JCH - wafer history   * * * *                     
 | |
|                         RejWfrID	= RejWaferIDs<1,N>
 | |
|                         CurrSlotID	= WONo:'*':CassNo:'*':SlotNos<1,N>                      
 | |
|                         Convert '.' To '*' In RejWfrID                       
 | |
|                         RejWfrIDs<1,-1>		= RejWfrID
 | |
|                         CurrSlotIDs<1,-1>	= CurrSlotID
 | |
|                                                
 | |
|                         Parms  = RejWfrID:@RM							;* WfrID
 | |
|                         Parms := RejDTM:@RM								;* EventDtm
 | |
|                         Parms := @USER4:@RM								;* EventBy
 | |
|                         Parms := 'NCR':@RM								;* Event
 | |
|                         Parms := '':@RM									;* NewSlotID
 | |
|                         Parms := '':@RM									;* RunLoc
 | |
|                         Parms := NCRNo:@RM								;* NCRNo
 | |
|                         Parms := '':@RM									;* TWUse
 | |
|                         Parms := CurrSlotID:@RM							;* CurrSlotID
 | |
|                         Parms := '':@RM									;* NewToolID
 | |
|                         Parms := '':@RM									;* CurrToolID
 | |
|                         Parms := '':@RM									;* NewInvLoc
 | |
|                         Parms := '':@RM									;* CurrInvLoc
 | |
|                         Parms := 'O'									;* Wfr Side
 | |
| 
 | |
|                         obj_WO_Wfr('AddEvent',Parms)
 | |
|                     
 | |
|                         * * * * * * * **
 | |
|                         WaferIndex = SlotNos<1,N>
 | |
| *                        @Record<WO_MAT_SLOT_NCR$,WaferIndex>            = NCRNo
 | |
| *                        @Record<WO_MAT_SLOT_REP_WAFER_ID$,WaferIndex>   = ''
 | |
| *                        @Record<WO_MAT_SLOT_REP_BY$,WaferIndex>         = ''
 | |
|                         
 | |
|                     NEXT N
 | |
|                     
 | |
|                 END         
 | |
| *                Database_Services('WriteDataRow', 'WO_MAT', WOMatKey, @Record, True$, False$, True$)
 | |
|                 
 | |
|             Next Row
 | |
|         end
 | |
|         
 | |
|         If ErrorMsg = '' then
 | |
|             
 | |
|             If Assigned(RejWfrIDs) then
 | |
|                 Recipients		= 'DAN_CR':@VM:'MARK_C'
 | |
|                 SentFrom		= @USER4
 | |
|                 Subject			= 'PSN ':InactivePSN:' Inactivated - Auto-NCR Wafers'
 | |
|                 Message = "The following wafers have been NCR'd and are ready to be physically removed: ":CRLF$
 | |
|                 For each RejWfrID in RejWfrIDs using @VM setting vPos
 | |
|                     Message := RejWfrID : CRLF$
 | |
|                 Next RejWfrID
 | |
|                 Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message
 | |
|                 obj_Notes('Create',Parms)
 | |
| 
 | |
|                 If Get_Status(errCode) then
 | |
| *                    ErrMsg(errCode)
 | |
|                     ErrorMsg = errCode
 | |
|                 end
 | |
|             end
 | |
|             
 | |
|             MsgDef = ''
 | |
|             MsgDef<MTEXT$>  = 'All makeup wafers successfully NCRd.'
 | |
|             MsgDef<MTYPE$>  = 'BO'
 | |
|             MsgDef<MICON$>  = '!'
 | |
|             MsgDef<MMODAL$> = 'W'
 | |
|             PrevCursor = Set_Property("SYSTEM", "CURSOR", "A")
 | |
|             Response = Msg(@Window, MsgDef)
 | |
|             Send_Event(@Window, 'CLOSE')          
 | |
|         end else
 | |
|             ErrMsg(ErrorMsg)
 | |
|         end
 | |
|         
 | |
|     end else
 | |
|         ErrorMsg = 'Error occurred retrieving inactivated PSN. Please notify FI team.'
 | |
|         ErrMsg(ErrorMsg)
 | |
|     end
 | |
| 
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event PUB_CANCEL.CLICK()
 | |
| 
 | |
|     End_Dialog(@Window, '')
 | |
| 
 | |
| end event
 | |
| 
 | |
| 
 | |
| Event OLE_SUBCLASS.OnComboClick(CtrlId, Sel, Value)
 | |
| 
 | |
|     Send_Event(CtrlId, 'LOSTFOCUS')
 | |
| 
 | |
| end event
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Internal GoSubs
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| Setup_OLE_Controls:
 | |
| 
 | |
|     Qualify     = ''
 | |
|     Qualify<1>  = 1
 | |
|     Qualify<4>  = 0
 | |
| 
 | |
|     RptCtrl       = @Window : '.OLE_RPT_WAFERS_TO_NCR'
 | |
|     PicCtrl       = @Window : '.OLE_PIC_NO_WAFERS'
 | |
|     DivCtrl       = @Window : '.OLE_PIC_DIVIDER'
 | |
|     ColumnList    = ''
 | |
|     ColumnList<1> = 'WO No' : @VM : 'TEXT' : @VM : 100 : @VM : @VM : @VM : @VM : @VM : @VM : @VM : 'Center' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
|     ColumnList<2> = 'Cass No' : @VM : 'TEXT' : @VM : 100 : @VM : @VM : @VM : @VM : @VM : @VM : @VM : 'Center' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
|     ColumnList<3> = 'SAP Batch No' : @VM : 'TEXT' : @VM : 150 : @VM : @VM : @VM : @VM : @VM : @VM : @VM : 'Center' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
|     ColumnList<4> = 'MU Ps No' : @VM : 'TEXT' : @VM : 100 : @VM : @VM : @VM : @VM : @VM : @VM : @VM : 'Center' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
|     ColumnList<5> = 'Cust Part No' : @VM : 'TEXT' : @VM : 200 : @VM : @VM : @VM : @VM : @VM : @VM : @VM : 'Left' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
|     ColumnList<6> = 'Curr Wfr Qty' : @VM : 'TEXT' : @VM : 100 : @VM : @VM : @VM : @VM : @VM : @VM : @VM : 'Right' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
|     ColumnList<7> = 'RDS No' : @VM : 'TEXT' : @VM : 100 : @VM : @VM : @VM : @VM : @VM : @VM : @VM : 'Right' : @VM : @VM : @VM : @VM : 'Segoe UI,9'
 | |
|     Set_Property(RptCtrl, 'OLE.ColumnList', ColumnList)
 | |
|     WafersToNCR   = ''
 | |
|     If AllMakeupWafers NE '' then
 | |
|         WafersToNCR = AllMakeupWafers<1>
 | |
|         Convert @VM to @FM in WafersToNCR
 | |
|         Convert @SVM to @VM in WafersToNCR
 | |
|     end
 | |
| 
 | |
|     // Get the design time form size. This will be adjusted based on various conditions.
 | |
|     FormSize       = Get_Property(@Window, 'SIZE')
 | |
|     RptCtrlSize    = Get_Property(RptCtrl, 'SIZE')
 | |
|     PicCtrlSize    = Get_Property(PicCtrl, 'SIZE')
 | |
|     NumWafersToNCR = DCount(WafersToNCR, @FM)
 | |
| 
 | |
|     If NumWafersToNCR EQ 0 then
 | |
|         // If there are no affected makeup wafers, display the prompt that informs the user of this.
 | |
|         Set_Property(DivCtrl, 'VISIBLE', False$)
 | |
|         Set_Property(RptCtrl, 'VISIBLE', False$)
 | |
|         // Increase the lenth of the form to accommodate the OLE_PIC control with the message.
 | |
|         PicLen      = PicCtrlSize<4>
 | |
|         RptLen      = RptCtrlSize<4>
 | |
|         Diff        = PicLen - RptLen
 | |
|         FormSize<4> = FormSize<4> + Diff - 20
 | |
|         Set_Property(@Window, 'SIZE', FormSize)
 | |
|         Set_Property(PicCtrl, 'VISIBLE', True$)
 | |
|         Set_Property(@Window : '.PUB_AUTO_NCR', 'ENABLED', False$)
 | |
|     end else
 | |
|         Set_Property(RptCtrl, 'OLE.List', WafersToNCR)
 | |
|         If NumWafersToNCR GT 1 then
 | |
|             RptCtrlSize<4> = RptCtrlSize<4> + (20 * (NumWafersToNCR - 1))
 | |
|             Set_Property(RptCtrl, 'SIZE', RptCtrlSize)
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     Set_Property(RptCtrl, 'OLE.List', WafersToNCR)
 | |
| 
 | |
|     Caption = 'There are no makeup wafers associated with this PSN.' :@TM: 'No further action required.'
 | |
|     Set_Property(PicCtrl, 'OLE.Caption', Caption)
 | |
| 
 | |
| return
 |