468 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			468 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| COMPILE FUNCTION obj_Order_Det(Method,Parms)
 | |
| /*
 | |
| 	Methods for the Order Detail (ORDER_DET) table
 | |
|     
 | |
| 	01/15/2005 JCH - Initial Coding
 | |
|      
 | |
|     Properties:
 | |
|      
 | |
|     Methods:
 | |
|     
 | |
|     Create(OrdNo,ItemNo,QuoteNo,WONo,ItemDesc,ItemQty,UnitPrice)			;* Create new WO Step entry 	
 | |
|    
 | |
| 	
 | |
| */
 | |
| 
 | |
| 
 | |
| DECLARE FUNCTION Get_Status, Msg, Utility, obj_Tables, Dialog_Box,NextKey, Popup, obj_Quote
 | |
| DECLARE SUBROUTINE  Set_Status, Msg, obj_Tables, Send_Dyn, Btree.Extract, ErrMsg, Send_Dyn, RList
 | |
| 
 | |
| $INSERT MSG_EQUATES
 | |
| $INSERT WO_LOG_EQU
 | |
| $INSERT QUOTE_EQU
 | |
| $INSERT ORDER_EQU
 | |
| $INSERT ORDER_DET_EQU
 | |
| $INSERT PROD_SPEC_EQU
 | |
| $INSERT QUOTE_SPEC_EQU
 | |
| $INSERT EPI_SUSCEPTOR_EQUATES
 | |
| 
 | |
| EQU TARGET_ACTIVELIST$ TO 5
 | |
| 
 | |
| 
 | |
| ErrTitle = 'Error in Stored Procedure "obj_OrderDet"'
 | |
| ErrorMsg = ''
 | |
| 
 | |
| IF NOT(ASSIGNED(Method))	THEN ErrorMsg = 'Unassigned parameter "Method" passed to subroutine'
 | |
| IF NOT(ASSIGNED(Parms))		THEN Parms = ''
 | |
| 
 | |
| IF ErrorMsg NE '' THEN
 | |
| 	Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
 | |
| 	RETURN ''
 | |
| END
 | |
| 
 | |
| Result = ''
 | |
| 
 | |
| BEGIN CASE
 | |
| 	CASE Method = 'Create'				; GOSUB Create
 | |
| 	CASE Method = 'CurrStatus'			; GOSUB CurrStatus
 | |
| 	CASE Method = 'AddWONo'				; GOSUB AddWONo
 | |
| 	CASE Method = 'AddVisionInvoice'	; GOSUB AddVisionInvoice
 | |
| 	CASE Method = 'InvoicedQty'			; GOSUB InvoicedQty
 | |
| 	CASE Method = 'Cancel'				; GOSUB Cancel
 | |
| 	CASE Method = 'EpiPROAdd'			; GOSUB EpiPROAdd
 | |
| 	CASE Method = 'ProdVerNo'			; GOSUB ProdVerNo
 | |
| 	CASE Method = 'PartNo'				; GOSUB ProdVerNo
 | |
| 	CASE Method = 'ActiveProdVerNo'		; GOSUB ActiveProdVerNo
 | |
| 	
 | |
| 	CASE 1
 | |
| 		ErrorMsg = 'Unknown Method ':QUOTE(Method):' passed to routine.'
 | |
| 
 | |
| END CASE
 | |
| 
 | |
| IF ErrorMsg NE '' THEN
 | |
| 	Set_Status(-1,ErrTitle:@SVM:ErrorMsg)
 | |
| 	RETURN ''
 | |
| END
 | |
| 
 | |
| RETURN Result
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Create:
 | |
| * * * * * * *
 | |
| 
 | |
| OrderNo				= Parms[1,@RM]
 | |
| ItemNo				= Parms[COL2()+1,@RM]
 | |
| QuoteNo				= Parms[COL2()+1,@RM]
 | |
| EpiPN				= Parms[COL2()+1,@RM]
 | |
| ItemDesc			= Parms[COL2()+1,@RM]
 | |
| UnitPrice			= Parms[COL2()+1,@RM]
 | |
| ItemQty				= Parms[COL2()+1,@RM]
 | |
| WONo				= Parms[COL2()+1,@RM]
 | |
| VisionItemNo		= Parms[COL2()+1,@RM]
 | |
| VisionItemStatus	= Parms[COL2()+1,@RM]
 | |
| VisionPartType		= Parms[COL2()+1,@RM]
 | |
| CustPartNo			= Parms[COL2()+1,@RM]
 | |
| VisionShipQty		= Parms[COL2()+1,@RM]
 | |
| PromiseDt			= Parms[COL2()+1,@RM]
 | |
| ReqShipDt			= Parms[COL2()+1,@RM]
 | |
| ShipWinOpenDt		= Parms[COL2()+1,@RM]
 | |
| CustReqDt			= Parms[COL2()+1,@RM]
 | |
| 
 | |
| IF OrderNo 		= '' THEN ErrorMsg = 'Null parameter "OrderNo" passed to routine. (':Method:')'
 | |
| IF ItemNo		= '' THEN ErrorMsg = 'Null parameter "ItemNo" passed to routine. (':Method:')'
 | |
| IF QuoteNo		= '' THEN ErrorMsg = 'Null parameter "QuoteNo" passed to routine. (':Method:')'
 | |
| IF EpiPN		= '' THEN Null	;* Not used during conversion
 | |
| 
 | |
| OrderDetKey = OrderNo:'*':ItemNo
 | |
| 
 | |
| PSNo		= XLATE('QUOTE',QuoteNo,QUOTE_PROC_STEP_PSN$,'X')<1,1>		;* Field is multivalued - take the first one
 | |
| SuppliedBy	= XLATE('PROD_SPEC',PSNo,'SUB_SUPPLIED_BY','X')
 | |
| 
 | |
| TableVar = ''
 | |
| OtParms = 'ORDER_DET':@RM:OrderDetKey:@RM:TableVar 
 | |
| OrderDetRec = obj_Tables('ReadRec',OtParms)			;* Locks and reads record for update So OK maybe it's not STRICTLY a create method...
 | |
| 
 | |
| OrderDetRec = ''
 | |
| OrderDetRec<ORDER_DET_QUOTE_NO$>			= QuoteNo
 | |
| OrderDetRec<ORDER_DET_EPI_PN$>				= EpiPN
 | |
| OrderDetRec<ORDER_DET_ITEM_DESC$>			= ItemDesc
 | |
| OrderDetRec<ORDER_DET_UNIT_PRICE$>			= ICONV(UnitPrice,'MD2')
 | |
| OrderDetRec<ORDER_DET_ITEM_QTY$>			= ICONV(ItemQty,'MD0')
 | |
| OrderDetRec<ORDER_DET_WO_NO$>				= WONo
 | |
| OrderDetRec<ORDER_DET_VISION_ITEM_STATUS$>	= VisionItemStatus
 | |
| OrderDetRec<ORDER_DET_VISION_PART_TYPE$>	= VisionPartType
 | |
| OrderDetRec<ORDER_DET_CUST_PN$>				= CustPartNo
 | |
| OrderDetRec<ORDER_DET_VISION_SHIP_QTY$>		= ICONV(VisionShipQty,'MD0')
 | |
| OrderDetRec<ORDER_DET_PROMISE_DT$>			= ICONV(PromiseDt,'D')
 | |
| OrderDetRec<ORDER_DET_REQ_SHIP_DT$>			= ICONV(ReqShipDt,'D')
 | |
| OrderDetRec<ORDER_DET_SHIP_WIN_DT$>			= ICONV(ShipWinOpenDt,'D')
 | |
| OrderDetRec<ORDER_DET_CUST_REQ_DT$>			= ICONV(CustReqDt,'D')
 | |
| OrderDetRec<ORDER_DET_VISION_LINE_NO$>		= VisionItemNo
 | |
| OrderDetRec<ORDER_DET_SUPPLIED_BY$>			= SuppliedBy
 | |
| 
 | |
| 
 | |
| OtParms = FieldStore(OtParms,@RM,4,1,OrderDetRec)
 | |
| obj_Tables('WriteRec',OtParms)
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| CurrStatus:
 | |
| * * * * * * *
 | |
| 
 | |
| OrderNo		= Parms[1,@RM]
 | |
| ItemNo		= Parms[COL2()+1,@RM]
 | |
| OrderDetRec	= Parms[COL2()+1,@RM]
 | |
| 
 | |
| IF OrderNo = ''	THEN RETURN			;* This is used in the dictionary -> don't throw an error for a null parmeter
 | |
| IF ItemNo = ''	THEN RETURN			;* This is used in the dictionary -> don't throw an error for a null parmeter
 | |
| 
 | |
| WONo				= OrderDetRec<ORDER_DET_WO_NO$>
 | |
| VisionItemStatus	= OrderDetRec<ORDER_DET_VISION_ITEM_STATUS$>
 | |
| ItemQty				= OrderDetRec<ORDER_DET_ITEM_QTY$>
 | |
| ShipQty				= SUM(XLATE('COC',OrderDetRec<ORDER_DET_SHIP_NO$>,'TOT_QTY','X'))
 | |
| 
 | |
| IF VisionItemStatus = 'C' THEN
 | |
| 	IF (ShipQty = ItemQty) AND ItemQty > 0 THEN
 | |
| 		Result = 'COMP'
 | |
| 	END ELSE
 | |
| 		Result = 'CANC'
 | |
| 	END
 | |
| 	RETURN
 | |
| END
 | |
| 
 | |
| 
 | |
| WOStatus = XLATE('WO_LOG',WONo,'CURR_STATUS','X')
 | |
| 
 | |
| IF WOStatus = 'NEW' THEN
 | |
| 	SuppliedBy = OrderDetRec<ORDER_DET_SUPPLIED_BY$>
 | |
| 	IF SuppliedBy = 'C' THEN
 | |
| 		Result = 'RTP'
 | |
| 	END ELSE
 | |
| 		Result = 'ASN'
 | |
| 	END
 | |
| 	RETURN
 | |
| END ELSE
 | |
| 	Result = WOStatus
 | |
| END
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| AddWONo:
 | |
| * * * * * * *
 | |
| 
 | |
| OrderNo		= Parms[1,@RM]
 | |
| ItemNos		= Parms[COL2()+1,@RM]
 | |
| WONo		= Parms[COL2()+1,@RM]
 | |
| 
 | |
| ErrorMsg = ''
 | |
| 
 | |
| IF OrderNo	= '' THEN ErrorMsg = 'Null parameter "OrderNo" passed to routine. (':Method:')'
 | |
| IF ItemNos	= '' THEN ErrorMsg = 'Null parameter "ItemNos" passed to routine. (':Method:')'
 | |
| IF WONo		= '' THEN ErrorMsg = 'Null parameter "WONo" passed to routine. (':Method:')'
 | |
| 
 | |
| IF ErrorMsg NE '' THEN RETURN
 | |
| 
 | |
| TableVar = ''
 | |
| 
 | |
| FOR I = 1 TO COUNT(ItemNos,@VM) + (ItemNos NE '')
 | |
| 	ItemNo = ItemNos<1,I>
 | |
| 	OrderDetKey = OrderNo:'*':ItemNo
 | |
| 
 | |
| 	OtParms = 'ORDER_DET':@RM:OrderDetKey:@RM:TableVar 
 | |
| 	OrderDetRec = obj_Tables('ReadRec',OtParms)			;* Locks and reads record for update 
 | |
| 	
 | |
| 	OrderDetRec<ORDER_DET_WO_NO$> = WONo
 | |
| 
 | |
| 	OtParms = FieldStore(OtParms,@RM,4,1,OrderDetRec)
 | |
| 	obj_Tables('WriteRec',OtParms)
 | |
| NEXT I
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| AddVisionInvoice:
 | |
| * * * * * * * 
 | |
| 
 | |
| OrderNo				= Parms[1,@RM]
 | |
| ItemNo				= Parms[COL2()+1,@RM]
 | |
| VisionInvoiceNo		= Parms[COL2()+1,@RM]
 | |
| VisionInvoiceItem	= Parms[COL2()+1,@RM]
 | |
| 
 | |
| ErrorMsg = ''
 | |
| 
 | |
| IF OrderNo				= '' THEN ErrorMsg = 'Null parameter "OrderNo" passed to routine. (':Method:')'
 | |
| IF ItemNo				= '' THEN ErrorMsg = 'Null parameter "ItemNo" passed to routine. (':Method:')'
 | |
| IF VisionInvoiceNo		= '' THEN ErrorMsg = 'Null parameter "VisionInvoiceNo" passed to routine. (':Method:')'
 | |
| IF VisionInvoiceItem	= '' THEN ErrorMsg = 'Null parameter "VisionInvoiceNo" passed to routine. (':Method:')'
 | |
| 
 | |
| IF ErrorMsg NE '' THEN RETURN
 | |
| 
 | |
| OrderDetKey = OrderNo:'*':ItemNo
 | |
| 
 | |
| OtParms = 'ORDER_DET':@RM:OrderDetKey 
 | |
| OrderDetRec = obj_Tables('ReadRec',OtParms)			;* Locks and reads record for update 
 | |
| 
 | |
| LOCATE VisionInvoiceNo IN OrderDetRec<ORDER_DET_VISION_INVOICE_NO$> USING @VM SETTING POS ELSE
 | |
| 	OrderDetRec = INSERT(OrderDetRec,ORDER_DET_VISION_INVOICE_NO$,POS,0,VisionInvoiceNo)
 | |
| 	OrderDetRec = INSERT(OrderDetRec,ORDER_DET_VISION_INVOICE_ITEM$,POS,0,VisionInvoiceItem)
 | |
| END
 | |
| OtParms = FieldStore(OtParms,@RM,4,1,OrderDetRec)
 | |
| obj_Tables('WriteRec',OtParms)
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| InvoicedQty:
 | |
| * * * * * * *
 | |
| 
 | |
| OrderNo		= Parms[1,@RM]
 | |
| ItemNo		= Parms[COL2()+1,@RM]
 | |
| OrderDetRec	= Parms[COL2()+1,@RM]
 | |
| 
 | |
| IF OrderNo = ''	THEN RETURN			;* This is used in the dictionary -> don't throw an error for a null parmeter
 | |
| IF ItemNo = ''	THEN RETURN			;* This is used in the dictionary -> don't throw an error for a null parmeter
 | |
| 
 | |
| IF OrderDetRec = '' THEN
 | |
| 	OrderDetRec = XLATE('ORDER_DET',OrderNo:'*':ItemNo,'','X')
 | |
| 	IF OrderDetRec = '' THEN RETURN
 | |
| END
 | |
| 
 | |
| InvoiceNos = OrderDetRec<ORDER_DET_INVOICE_NO$>
 | |
| InvoicedQtys = ''
 | |
| FOR I = 1 TO COUNT(InvoiceNos,@VM) + (InvoiceNos NE '')
 | |
| 	InvoiceNo = InvoiceNos<1,I>
 | |
| 	InvODItemNos	= XLATE('INVOICE',InvoiceNo,48,'X')
 | |
| 	InvQtys			= XLATE('INVOICE',InvoiceNo,35,'X')
 | |
| 	
 | |
| 	FOR N = 1 TO COUNT(InvODItemNos,@VM) + (InvODItemNos NE '')
 | |
| 		IF InvODItemNos<1,N> = ItemNo THEN
 | |
| 			InvoicedQtys<1,I> = InvoicedQtys<1,I> + SUM(InvQtys<1,N>)
 | |
| 		END
 | |
| 	NEXT N
 | |
| NEXT I
 | |
| 
 | |
| Result = InvoicedQtys
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| Cancel:
 | |
| * * * * * * *
 | |
| 
 | |
| OrderNo		= Parms[1,@RM]
 | |
| ItemNo		= Parms[COL2()+1,@RM]
 | |
| 
 | |
| ErrorMsg = ''
 | |
| 
 | |
| IF OrderNo		= '' THEN ErrorMsg = 'Null parameter "OrderNo" passed to routine. (':Method:')'
 | |
| IF ItemNo		= '' THEN ErrorMsg = 'Null parameter "ItemNo" passed to routine. (':Method:')'
 | |
| 
 | |
| IF ErrorMsg NE '' THEN RETURN
 | |
| 
 | |
| OrderDetKey = OrderNo:'*':ItemNo
 | |
| 
 | |
| OtParms = 'ORDER_DET':@RM:OrderDetKey 
 | |
| OrderDetRec = obj_Tables('ReadRec',OtParms)			;* Locks and reads record for update 
 | |
| 
 | |
| OrderDetRec<ORDER_DET_ITEM_QTY$>	= 0
 | |
| OrderDetRec<ORDER_DET_UNIT_PRICE$>	= 0
 | |
| 
 | |
| OtParms = FieldStore(OtParms,@RM,4,1,OrderDetRec)
 | |
| obj_Tables('WriteRec',OtParms)
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| EpiPROAdd:
 | |
| * * * * * * *
 | |
| 
 | |
| OrderDetKey	= Parms[1,@RM]
 | |
| OrderDetRec	= Parms[COL2()+1,@RM]
 | |
| 
 | |
| IF OrderDetKey = '' THEN RETURN
 | |
| IF OrderDetRec = '' THEN OrderDetRec = XLATE('ORDER_DET',OrderDetKey,'','X')
 | |
| 
 | |
| 
 | |
| OrderNo = FIELD(OrderDetKey,'*',1,1)
 | |
| 
 | |
| CustNo = XLATE('ORDER',OrderNo,ORDER_CUST_NO$,'X')
 | |
| 
 | |
| QuoteNo			= OrderDetRec<ORDER_DET_QUOTE_NO$>
 | |
| ProcStepPSNs	= XLATE('QUOTE',QuoteNo,'PROC_STEP_PSN','X')
 | |
| PSNo			= ProcStepPSNs<1,1>			;* Wafers don't change size from one step to the other so use the first PSN
 | |
| 
 | |
| PSNWaferSize		= XLATE('PROD_SPEC',PSNo,'SUB_WAFER_SIZE','X')
 | |
| PSNReactorType  	= XLATE('PROD_SPEC',PSNo,'REACTOR_TYPE','X')
 | |
| PSNSubstrateSpec	= XLATE('PROD_SPEC',PSNo,PROD_SPEC_SPEC_SUBSTRATE$,'X')
 | |
| 
 | |
| PSType = PSNSubstrateSpec<1,QSSubSpecType$>
 | |
| 
 | |
| IF PSNReactorType NE 'P' AND PSNReactorType NE 'EPP' THEN RETURN	;* Not an EpiPRO specification
 | |
| 
 | |
| *IF PSType = 'Q' OR CustNo = '7034' OR CustNo = '7035' THEN		;* Removed Vishay 2/21/2008 JCH
 | |
| 
 | |
| IF PSType = 'Q'THEN
 | |
| 	Result = 0							;* This is an EpiPRO Qual Run or a Vishay production order -> no extra boxes required
 | |
| 	RETURN
 | |
| END
 | |
| 
 | |
| BEGIN CASE
 | |
| 	CASE PSNWaferSize = '150 mm 6 in'
 | |
| 		EpiSusceptor = XLATE('EPI_SUSCEPTOR','6','','X')
 | |
| 		
 | |
| 	CASE PSNWaferSize = '125 mm 5 in'
 | |
| 		EpiSusceptor = XLATE('EPI_SUSCEPTOR','5','','X')
 | |
| 		
 | |
| 	CASE 1
 | |
| 		RETURN ;* No error - this is called from the data dictionary
 | |
| 		
 | |
| END CASE
 | |
| 
 | |
| TestWfrsRun		= OCONV(EpiSusceptor<EPI_SUSCEPTOR_TEST_WFRS_RUN$>,'MD2')
 | |
| ProveInWfrsWO	= EpiSusceptor<EPI_SUSCEPTOR_PROVEIN_WFRS_WO$>
 | |
| Pockets			= EpiSusceptor<EPI_SUSCEPTOR_POCKET_NO$>
 | |
| 
 | |
| PocketCnt	= COUNT(Pockets,@VM) + (Pockets NE '')
 | |
| OrderQty	= OrderDetRec<ORDER_DET_ITEM_QTY$>
 | |
| 
 | |
| FracRuns	= (OrderQty + ProveInWfrsWO)/(PocketCnt - TestWfrsRun)
 | |
| ReqRuns		= INT(FracRuns)
 | |
| 
 | |
| IF MOD(FracRuns,ReqRuns) > 0 THEN ReqRuns += 1
 | |
| 
 | |
| EstWafersReq = ReqRuns * PocketCnt
 | |
| 
 | |
| BoxCnt = INT(EstWafersReq/25)
 | |
| IF MOD(EstWafersReq,25) THEN BoxCnt += 1		;* Now have the total number of boxes to be pulled
 | |
| 
 | |
| Result = (BoxCnt*25) - OrderQty 				;* Total number of wafers beyond the order quantity in a multiple of 25
 | |
| 
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| ProdVerNo:
 | |
| * * * * * * *
 | |
| 
 | |
| 
 | |
| OrdDetKey = Parms[1,@RM]
 | |
| OrdDetRec = Parms[COL2()+1,@RM]
 | |
| 
 | |
| IF OrdDetKey = '' THEN RETURN
 | |
| IF OrdDetRec = '' THEN 
 | |
| 	OrdDetRec = XLATE('ORDER_DET',OrdDetKey,'','X')
 | |
| 	IF OrdDetRec = '' THEN RETURN
 | |
| END
 | |
| 
 | |
| CustPN		= OrdDetRec<ORDER_DET_CUST_PN$>
 | |
| SubPN		= OrdDetRec<ORDER_DET_SUB_PART_NO$>
 | |
| 
 | |
| Supplier = SubPN[-1,'B-']
 | |
| IF Supplier[1,1] = 'I' AND LEN(Supplier) = 2 ELSE Supplier = ''
 | |
| 
 | |
| OrdNo	= OrdDetKey[1,'*']
 | |
| OrdRec	= XLATE('ORDER',OrdNo,'','X')
 | |
| 
 | |
| CustNo	= OrdRec<ORDER_CUST_NO$>
 | |
| OrderDt	= OrdRec<ORDER_ENTRY_DATE$>
 | |
| 
 | |
| IF OrderDt < ICONV('8/1/2005','D') THEN RETURN	;* No part numbers on older records
 | |
| 
 | |
| ProcStepPSNs = XLATE('ORDER_DET',OrdDetKey,'QUOTE_PROC_STEP_PSN','X')
 | |
| 
 | |
| PsnID = ProcStepPSNs
 | |
| CONVERT @VM TO '.' IN PsnID
 | |
| 
 | |
| ShipPSN = ProcStepPSNs[-1,'B':@VM]
 | |
| 
 | |
| ReactType = XLATE('PROD_SPEC',ShipPSN,PROD_SPEC_REACTOR_TYPE$,'X')
 | |
| 
 | |
| /*	Dead 9/5/2014 JCH
 | |
| BEGIN CASE
 | |
| 	CASE ShipReactType = 'A'	; ReactType = 'ASM+'
 | |
| 	CASE ShipReactType = 'P'	; ReactType = 'EPP'
 | |
| 	CASE ShipReactType = 'E'	; ReactType = 'EPS'
 | |
| 	CASE ShipReactType = 'H'	; ReactType = 'HTR'
 | |
| 	CASE ShipReactType = 'C'	; ReactType = 'SIG'
 | |
| 	CASE 1						; ReactType = ''
 | |
| END CASE
 | |
| */
 | |
| 
 | |
| 
 | |
| SubPN = TRIM(SubPN)
 | |
| CONVERT @LOWER_CASE TO @UPPER_CASE IN SubPN
 | |
| 
 | |
| SortKey = SubPN:'*':ReactType:'*':PSNId		;* PART_WORK key * * * * * * * * *
 | |
| 
 | |
| CONVERT @LOWER_CASE TO @UPPER_CASE IN SortKey
 | |
| 
 | |
| Result = XLATE('PART_WORK',SortKey,1,'X') ;* Only field in PART_WORK is ProdVer (was Part) No.
 | |
| RETURN
 | |
| 
 | |
| 
 | |
| * * * * * * *
 | |
| ActiveProdVerNo:
 | |
| * * * * * * *
 | |
| 
 | |
| OrdDetKey = Parms[1,@RM]
 | |
| OrdDetRec = Parms[COL2()+1,@RM]
 | |
| 
 | |
| IF OrdDetKey = '' THEN RETURN
 | |
| IF OrdDetRec = '' THEN 
 | |
| 	OrdDetRec = XLATE('ORDER_DET',OrdDetKey,'','X')
 | |
| 	IF OrdDetRec = '' THEN RETURN
 | |
| END
 | |
| 
 | |
| PsnID = XLATE('QUOTE',OrdDetRec<1>,'PROC_STEP_PSN','X')
 | |
| 
 | |
| CONVERT @VM TO '.' IN PsnID
 | |
| 
 | |
| OPEN 'DICT.PROD_VER' TO DictProdVer ELSE
 | |
| 	ErrMsg('Unable to Open DICT.PROD_VER table for BTREE.EXTRACT')
 | |
| 	RETURN
 | |
| END
 | |
| 
 | |
| *Search				= 'PSN_ID':@VM:PsnID:@FM:'STATUS':@VM:'A':@FM
 | |
| Search				= 'PSN_ID':@VM:PsnID:@FM
 | |
| Table				= 'PROD_VER'
 | |
| ActiveProdVerNos	= ''
 | |
| Option				= ''
 | |
| Flag				= ''
 | |
| 
 | |
| Btree.Extract(Search,Table,DictProdVer,ActiveProdVerNos,Option,Flag)
 | |
| 
 | |
| Result = ActiveProdVerNos
 | |
| 
 | |
| RETURN
 |