open-insight/LSL2/STPROC/SAP_SERVICES.txt

1093 lines
45 KiB
Plaintext

Function SAP_Services(@Service, @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 : SAP_Services
Description : Handler program for all module related services.
Notes : The generic parameters should contain all the necessary information to process the services. Often
this will be information like the data Record and Key ID.
Parameters :
Service [in] -- Name of the service being requested
Param1-10 [in/out] -- Additional request parameter holders
Response [out] -- Response to be sent back to the Controller (MCP) or requesting procedure
Metadata :
History : (Date, Initials, Notes)
08/08/17 dmb Original programmer. - [EPIOI-8]
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$insert APP_INSERTS
$insert SERVICE_SETUP
$insert WO_MAT_EQUATES
$insert PROD_VER_EQUATES
$insert WO_LOG_EQUATES
$insert COMPANY_EQUATES
$insert SEMI_VEND_CODE_EQUATES
$insert WM_OUT_EQUATES
$Insert SAP_MU_TRANS_EQUATES
$Insert NOTIFICATION_EQUATES
$Insert EPI_PART_EQUATES
Equ Comma$ to ','
Equ new_exist$ To 0 ; * Reduce Mode 0
Equ next_cur$ To 1
Equ add_exist$ to 2
Declare subroutine Error_Services, SAP_Services, Memory_Services, RList, Database_Services, obj_SAP, Logging_Services
Declare subroutine ErrLog, Obj_Notes, Set_Status, Obj_Tables, Obj_Post_Log, Mona_Services, Reduce
Declare function SRP_Array, SAP_Services, Memory_Services, Database_Services, SRP_Sort_Array, Work_Order_Services
Declare function SRP_Math, SRP_Hash, Obj_WO_Mat, Obj_Tables, GaN_Services, Environment_Services, Logging_Services
Declare function Date_Services, SRP_Datetime
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\SAP'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' BatchConv Call Log.csv'
Headers = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'SAPBatchNo' : @FM : 'StorLocFrom' : @FM : 'StorLocTo' : @FM : 'BatchQty'
objLogBatchConv = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Packaging\AddCassComp'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Cass Comp Call Log.csv'
Headers = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'SAPBatchNo' : @FM : 'SAPTxDTM' : @FM : 'RejectCassFlag' : @FM : 'Message'
objLogAddCassComp = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\Shipping\PrintSpectrumLabel'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' Spectrum Label Printing.csv'
Headers = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'Message'
objLogPrintSpectrumLabel = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
GoToService else
Error_Services('Set', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end
Return Response else ''
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Services
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//----------------------------------------------------------------------------------------------------------------------
// AddBatchConvTransaction
//
// Adds BatchConv transaction to the outbound SAP queue.
//----------------------------------------------------------------------------------------------------------------------
Service AddBatchConvTransaction(WOMatKey)
ErrorMsg = ''
If WOMatKey NE '' then
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
If Error_Services('NoError') then
SAPBatchNo = WOMatRec<WO_MAT_SAP_BATCH_NO$>
ReactorType = Xlate('WO_MAT', WOMatKey, 'REACTOR_TYPE', 'X')
If ReactorType EQ 'EPP' then
WMOKey = WOMatRec<WO_MAT_WMO_KEY$>
MakeupBox = Xlate('WM_OUT', WMOKey, WM_OUT_MAKEUP_BOX$, 'X')
end else
MakeupBox = WOMatRec<WO_MAT_MAKEUP_BOX$>
end
If MakeupBox then
// Moving batch from 0500 to 0400
StorLocFrom = '0500'
StorLocTo = '0400'
end else
// Moving batch from 0400 to 0500
StorLocFrom = '0400'
StorLocTo = '0500'
end
WONo = Field(WOMatKey, '*', 1)
Material = Xlate('WO_LOG', WONo, 'EPI_PART_NO', 'X')
BatchQty = obj_WO_Mat('CurrWaferCnt', WOMatKey:@RM:'':@RM:True$)
obj_SAP('AddTransaction', 'BATCH_CONV':@RM:Material:@RM:SAPBatchNo:@RM:StorLocFrom:@RM:StorLocTo:@RM:BatchQty)
LogMessage = ''
ErrCode = ''
If Get_Status(ErrCode) then
LogMessage = 'Error in ':Service:' service. obj_SAP("AddTransaction") call failed. Error code: ':ErrCode
ErrorMsg = LogMessage
end else
LogMessage = 'BatchConv transaction added to outbound SAP queue.'
end
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = WOMatKey
LogData<3> = SAPBatchNo
LogData<4> = StorLocFrom
LogData<5> = StorLocTo
LogData<6> = BatchQty
LogData<7> = LogMessage
Logging_Services('AppendLog', objLogBatchConv, LogData, @RM, @FM)
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
end
end else
Error_Services('Add', 'Error in ':Service:' service. Null WOMatKey passed in!')
end
end service
//----------------------------------------------------------------------------------------------------------------------
// AddCassCompTransaction
//
// Add a CassComp transaction to the outbound SAP queue.
//----------------------------------------------------------------------------------------------------------------------
Service AddCassCompTransaction(WOMatKey)
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
SAPBatchNo = WOMatRec<WO_MAT_SAP_BATCH_NO$>
SAPTxDTM = WOMatRec<WO_MAT_SAP_TX_DTM$>
RejectCass = (SAPBatchNo[-1, 1] EQ 'R')
If ( ( (SAPBatchNo EQ '') and (SAPTxDTM EQ '') ) or ( (RejectCass EQ True$) and (SAPTxDTM EQ '') ) ) then
WONo = WOMatKey[1,'*']
CassNo = WOMatKey[COL2()+1,'*']
ProdOrdNo = XLATE('WO_LOG', WONo, WO_LOG_PROD_ORD_NO$,'X')
ReactorType = Xlate('WO_MAT', WOMatKey, 'REACTOR_TYPE', 'X')
If ReactorType NE 'GAN' then
GRProps = obj_WO_Mat('GetGRProps',WOMatKey:@RM:WOMatRec)
end else
GRProps = GaN_Services('GetGaNGRProps', WOMatKey)
end
GRWfrQty = GRProps[1,@FM]
ScrapQty = GRProps[COL2()+1,@FM]
ProdTWQty = GRProps[COL2()+1,@FM]
AvailMUWfrQty = GRProps[COL2()+1,@FM]
MUCassIDs = GRProps[COL2()+1,@FM]
MUCassQtys = GRProps[COL2()+1,@FM]
//Gets the First MU Cass. Used
MUCassID = FIELD(MUCassIDs,@VM,1)
MUCassQty = FIELD(MUCassQtys,@VM,1)
MUBatchNo = XLATE('WO_MAT', MUCassID, WO_MAT_SAP_BATCH_NO$, 'X')
//Gets all remaining MU Cass. Used
UnTransCassIDs = FIELD(MUCassIds, @VM, 1, 25)
UnTransCassQtys = FIELD(MUCassQtys, @VM, 1, 25)
IF UnTransCassIDs NE '' THEN
//Writes them to the SAP_MU_TRANS_TABLE
otParms = 'SAP_MU_TRANS':@RM ;* TableName
otParms := WONo:'*':CassNo:@RM ;* TableKey
otParms := @RM ;* TableVar
otParms := UntransCassIDs:@FM:UntransCassQtys ;* TableRecord
obj_Tables('WriteRec', otParms)
END
SupplierLotNo = WOMatRec<WO_MAT_LOT_NO$>
IF WOMatRec<WO_MAT_WMO_KEY$> = '' THEN
CassID = WOMatRec<WO_MAT_RDS_NO$>[-1,'B':@VM]
MakeupFlag = WOMatRec<WO_MAT_MAKEUP_BOX$>
END ELSE
CassID = WOMatKey ;* WOMat Key used for WM_OUT as of 2/17/2012 JCH
CONVERT '*' TO '.' IN CassID
MakeupFlag = XLATE('WM_OUT', WOMatRec<WO_MAT_WMO_KEY$>, WM_OUT_MAKEUP_BOX$, 'X')
END
IF MakeupFlag = '' THEN MakeupFlag = 0
IF MakeupFlag = 1 THEN GRWfrQty = AvailMUWfrQty
IF MUBatchNo NE '' THEN
IF MakeupFlag = 0 THEN
MakeupFlag = '-'
END ELSE
MakeupFlag = 2
END
END
ProdVerRec = XLATE('PROD_VER', WOMatRec<WO_MAT_PROD_VER_NO$>, '', 'X')
CustNo = ProdVerRec<PROD_VER_CUST_NO$>
VendCd = XLATE('COMPANY', CustNo, COMPANY_VEND_CD$, 'X')
SubPartNo = ProdVerRec<PROD_VER_SUB_PART_NO$>
IF VendCd NE '' THEN
SubSuppCd = VendCd
END ELSE
IF SubPartNo MATCHES "6N'-'1A'-'2A" THEN
SubSuppCd = FIELD(SubPartNo,'-',3)
END ELSE
SubSuppCd = WOMatRec<WO_MAT_SUB_VEND_CD$>
SubSuppCd = XLATE('SEMI_VEND_CODE',SubSuppCd,SEMI_VEND_CODE_EPI_VEND_CD$,'X')
END
END
CustPartRev = ProdVerRec<PROD_VER_CUST_PART_REV$>
CurrDTM = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTHS'),'DT')
* Getting Records with the DTM missing
If CurrDTM = '' Then
CurrDTM = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTHS'),'DT')
END
obj_Post_Log('Create','WO_MAT':@RM:WOMatKey:@RM:WO_MAT_SAP_TX_DTM$:@RM:CurrDTM)
* Section for Local generation of SAP_BATCH_NO removed 8/10/2011 JCH
atParms = 'CASS_COMP':@RM
atParms := ProdOrdNo:@RM
atParms := WONo:@RM
atParms := CassNo:@RM
atParms := GRWfrQty:@RM
atParms := ScrapQty:@RM
atParms := ProdTWQty:@RM
atParms := CassID:@RM
atParms := SupplierLotNo:@RM
atParms := SubSuppCd:@RM
atParms := CustPartRev:@RM
atParms := MakeupFlag
Copy = atParms
Swap @RM with @FM in Copy
obj_SAP('AddTransaction', atParms)
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = WOMatKey
LogData<3> = SAPBatchNo
LogData<4> = SAPTxDTM
LogData<5> = RejectCass
LogData<6> = 'Sent Cass Comp Transaction'
Logging_Services('AppendLog', objLogAddCassComp, LogData, @RM, @FM)
end else
ErrMsg = 'SAP Batch No already exists for this lot.'
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = WOMatKey
LogData<3> = SAPBatchNo
LogData<4> = SAPTxDTM
LogData<5> = RejectCass
LogData<6> = ErrMsg
Logging_Services('AppendLog', objLogAddCassComp, LogData, @RM, @FM)
Error_Services('Add', ErrMsg)
end
end service
//----------------------------------------------------------------------------------------------------------------------
// SetInboundPending
//
// Calculates and stores the current inbound pending count for SAP.
//----------------------------------------------------------------------------------------------------------------------
Service SetInboundPending()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
rv = Set_Status(0)
LookBack = 15 /* Days */
KeyList = SAP_Services('GetInboundWOMatKeys', Date() - Lookback)
RowCount = DCount(KeyList, @FM)
StatusCode = ''
If Get_Status(StatusCode) Then
Null
end else
OutboundPending = SAP_Services('GetOutboundPending')
InboundPending = RowCount - OutboundPending
If InboundPending < 0 then InboundPending = 0
Database_Services('WriteDataRow', 'APP_INFO', 'INBOUND_PENDING', InboundPending, True$)
Mona_Services('SendMetric', 'GRP_OPENINSIGHT_MES_OP_FE_SAP_INBOUND', 'InboundPending', InboundPending)
end
ClearSelect 0
Unlock hSysLists, ServiceKeyID else Null
end
end service
//----------------------------------------------------------------------------------------------------------------------
// GetInboundPending
//
// Gets the current inbound pending count for SAP.
//----------------------------------------------------------------------------------------------------------------------
Service GetInboundPending()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
InboundPending = Database_Services('ReadDataRow', 'APP_INFO', 'INBOUND_PENDING')
Response = InboundPending
Unlock hSysLists, ServiceKeyID else Null
end
end service
//----------------------------------------------------------------------------------------------------------------------
// MonitorSAPOutboundQueue
//
// Monitor each SAP outbound transactions pending and report the current outbound pending count for MonA
//----------------------------------------------------------------------------------------------------------------------
Service MonitorSAPOutboundQueue()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
hSAPComm = Database_Services('GetTableHandle', 'SAP_COMM')
If Error_Services('NoError') then
rv = Set_Status(0)
SelectStatement = 'SELECT SAP_COMM'
RList(SelectStatement, 5)
If Get_Status(StatusCode) Then
Null
end else
OutboundPendingScrapIn = 0
OutboundPendingInventoryMove = 0
OutboundPendingCassetteComplete = 0
OutboundPendingLotOnHold = 0
OutboundPendingLotOffHold = 0
OutboundPendingWorkOrderStart = 0
EOF = False$
Loop
Readnext SAPCommID else EOF = True$
Until EOF
Read SAPCommRow from hSAPComm, SAPCommID then
TransactionType = SAPCommRow<1>
Begin Case
Case TransactionType _EQC 'SCRAP_IN'
OutboundPendingScrapIn += 1
Case TransactionType _EQC 'BATCHMOVE_IN'
OutboundPendingInventoryMove += 1
Case TransactionType _EQC 'CASS_COMP'
OutboundPendingCassetteComplete += 1
Case TransactionType _EQC 'ON_HOLD'
OutboundPendingLotOnHold += 1
Case TransactionType _EQC 'OFF_HOLD'
OutboundPendingLotOffHold += 1
Case TransactionType _EQC 'WO_START'
OutboundPendingWorkOrderStart += 1
End Case
end
Repeat
// Output to MonA
OSFile = 'SCRAP_IN: ' : OutboundPendingScrapIn :CRLF$
OSFile := 'BATCHMOVE_IN: ' : OutboundPendingInventoryMove :CRLF$
OSFile := 'CASS_COMP: ' : OutboundPendingCassetteComplete :CRLF$
OSFile := 'ON_HOLD: ' : OutboundPendingLotOnHold :CRLF$
OSFile := 'OFF_HOLD: ' : OutboundPendingLotOffHold :CRLF$
OSFile := 'WO_START: ' : OutboundPendingWorkOrderStart
OSWrite OSFile to Environment_Services('GetApplicationRootPath') : '\LogFiles\SAP Outbound Service\Queue.txt'
end
end
ClearSelect 0
Unlock hSysLists, ServiceKeyID else Null
end
end service
//----------------------------------------------------------------------------------------------------------------------
// SetOutboundPending
//
// Calculates and stores the current outbound pending count for SAP.
//----------------------------------------------------------------------------------------------------------------------
Service SetOutboundPending()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
hSAPComm = Database_Services('GetTableHandle', 'SAP_COMM')
If Error_Services('NoError') then
rv = Set_Status(0)
SelectStatement = 'SELECT SAP_COMM'
RList(SelectStatement, 5)
If Get_Status(StatusCode) Then
Null
end else
OutboundPending = 0
EOF = False$
Loop
Readnext SAPCommID else EOF = True$
Until EOF
Read SAPCommRow from hSAPComm, SAPCommID then
TransactionType = SAPCommRow<1>
If TransactionType _EQC 'CASS_COMP' then
OutboundPending += 1
end
end
Repeat
Database_Services('WriteDataRow', 'APP_INFO', 'OUTBOUND_PENDING', OutboundPending, True$)
Mona_Services('SendMetric', 'GRP_OPENINSIGHT_MES_OP_FE_SAP_OUTBOUND', 'OutboundPending', OutboundPending)
end
end
ClearSelect 0
Unlock hSysLists, ServiceKeyID else Null
end
end service
//----------------------------------------------------------------------------------------------------------------------
// GetOutboundPending
//
// Gets the current outbound pending count for SAP.
//----------------------------------------------------------------------------------------------------------------------
Service GetOutboundPending()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
OutboundPending = Database_Services('ReadDataRow', 'APP_INFO', 'OUTBOUND_PENDING')
Response = OutboundPending
Unlock hSysLists, ServiceKeyID else Null
end
end service
//----------------------------------------------------------------------------------------------------------------------
// GetInboundTransactions
//
// Gets the incoming SAP transactions and processes them.
//----------------------------------------------------------------------------------------------------------------------
Service GetInboundTransactions()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
SAPHoldStartDateTime = SAP_Services('GetSAPHoldStartDateTime')
SAPHoldStopDateTime = SAP_Services('GetSAPHoldStopDateTime')
If (SAPHoldStartDateTime NE '') AND (SAPHoldStopDateTime NE '') AND (SAPHoldStopDateTime GT SAPHoldStartDateTime) then
CurrentDateTime = Iconv(Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS'), 'DT')
If (CurrentDateTime GT SAPHoldStartDateTime) AND (CurrentDateTime LT SAPHoldStopDateTime) then
SAP_Services('SetSAPOutageFlag', 1)
end else
SAP_Services('SetSAPOutageFlag', 0)
end
end else
SAP_Services('SetSAPOutageFlag', 0)
end
SAPOutage = SAP_Services('GetSAPOutageFlag')
If Not(SAPOutage) then
TransLogOn = SAP_Services('GetTransactionLoggingFlag')
obj_SAP('GetInbound', TransLogOn)
If Get_Status(errCode) then
ErrLog(errCode) ;* ErrLog clears status
Recipients = Xlate('NOTIFICATION','SAP_COMM',NOTIFICATION_USER_ID$,'X')
SentFrom = 'SAP Comm Server'
Subject = 'SAP Communications Server Errors'
Message = "Communications Errors logged during 'Get_Inbound' on the SAP Communications Server"
AttachWindow = ''
AttachKey = ''
SendToGroup = ''
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
If Get_Status(errCode) then ErrLog(errCode)
end
end
Unlock hSysLists, ServiceKeyID else Null
end
end service
//----------------------------------------------------------------------------------------------------------------------
// SendOutboundTransactions
//
// Sends transactions to the SAP system.
//----------------------------------------------------------------------------------------------------------------------
Service SendOutboundTransactions()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
SAPHoldStartDateTime = SAP_Services('GetSAPHoldStartDateTime')
SAPHoldStopDateTime = SAP_Services('GetSAPHoldStopDateTime')
If (SAPHoldStartDateTime NE '') AND (SAPHoldStopDateTime NE '') AND (SAPHoldStopDateTime GT SAPHoldStartDateTime) then
CurrentDateTime = Iconv(Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS'), 'DT')
If (CurrentDateTime GT SAPHoldStartDateTime) AND (CurrentDateTime LT SAPHoldStopDateTime) then
SAP_Services('SetSAPOutageFlag', 1)
end else
SAP_Services('SetSAPOutageFlag', 0)
end
end else
SAP_Services('SetSAPOutageFlag', 0)
end
SAPOutage = SAP_Services('GetSAPOutageFlag')
If Not(SAPOutage) then
TransLogOn = SAP_Services('GetTransactionLoggingFlag')
TransQty = SAP_Services('GetSAPTransactionLimit')
obj_SAP('SendOutbound',TransLogOn:@RM:TransQty) ;* Transmit transactions to the SAP system
If Get_Status(errCode) then
ErrLog(errCode) ;* ErrLog clears status
Recipients = Xlate('NOTIFICATION','ORDER_ENTRY',NOTIFICATION_USER_ID$,'X')
SentFrom = 'SAP Comm Server'
Subject = 'SAP Communications Server Errors'
Message = "Communications Errors logged during 'SendOutbound' on the SAP Communications Server"
AttachWindow = ''
AttachKey = ''
SendToGroup = ''
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create', Parms)
If Get_Status(errCode) then ErrLog(errCode)
end
end
HeartbeatDTM = SRP_Datetime('Now')
Database_Services('WriteDataRow', 'APP_INFO', 'SAP_HEARTBEAT_DTM', HeartbeatDTM, True$, False%, True$)
Unlock hSysLists, ServiceKeyID else Null
end
end service
//----------------------------------------------------------------------------------------------------------------------
// SendReconcile
//
// Sends reconcile transactions to the SAP system.
//----------------------------------------------------------------------------------------------------------------------
Service SendReconcile()
obj_SAP('SendReconcile')
end service
//----------------------------------------------------------------------------------------------------------------------
// SetTransactionLoggingFlag
//
// Sets the transaction logging flag for SAP transactions.
//----------------------------------------------------------------------------------------------------------------------
Service SetTransactionLoggingFlag(TransactionLoggingFlag)
If TransactionLoggingFlag NE '' then
Database_Services('WriteDataRow', 'APP_INFO', 'TRANSACTION_LOGGING_FLAG', TransactionLoggingFlag)
end else
Error_Services('Add', 'TransactionLoggingFlag argument was missing in the ' : Service : '. service.')
end
end service
//----------------------------------------------------------------------------------------------------------------------
// GetTransactionLoggingFlag
//
// Gets the transaction logging flag for SAP transactions.
//----------------------------------------------------------------------------------------------------------------------
Service GetTransactionLoggingFlag()
TransactionLoggingFlag = Database_Services('ReadDataRow', 'APP_INFO', 'TRANSACTION_LOGGING_FLAG')
Response = TransactionLoggingFlag
end service
//----------------------------------------------------------------------------------------------------------------------
// SetSAPOutageFlag
//
// Sets the SAP outage flag.
//----------------------------------------------------------------------------------------------------------------------
Service SetSAPOutageFlag(SAPOutageFlag)
If SAPOutageFlag NE '' then
Database_Services('WriteDataRow', 'APP_INFO', 'SAP_OUTAGE_FLAG', SAPOutageFlag)
end else
Error_Services('Add', 'SAPOutageFlag argument was missing in the ' : Service : '. service.')
end
end service
//----------------------------------------------------------------------------------------------------------------------
// GetSAPOutageFlag
//
// Gets the SAP outage flag.
//----------------------------------------------------------------------------------------------------------------------
Service GetSAPOutageFlag()
SAPOutageFlag = Database_Services('ReadDataRow', 'APP_INFO', 'SAP_OUTAGE_FLAG')
Response = SAPOutageFlag
end service
//----------------------------------------------------------------------------------------------------------------------
// SetSAPTransactionLimit
//
// Sets the SAP transaction limit.
//----------------------------------------------------------------------------------------------------------------------
Service SetSAPTransactionLimit(SAPTransactionLimit)
If SAPTransactionLimit NE '' then
Database_Services('WriteDataRow', 'APP_INFO', 'SAP_TRANSACTION_LIMIT', SAPTransactionLimit)
end else
Error_Services('Add', 'SAPTransactionLimit argument was missing in the ' : Service : '. service.')
end
end service
//----------------------------------------------------------------------------------------------------------------------
// GetSAPTransactionLimit
//
// Gets the SAP transaction limit.
//----------------------------------------------------------------------------------------------------------------------
Service GetSAPTransactionLimit()
SAPTransactionLimit = Database_Services('ReadDataRow', 'APP_INFO', 'SAP_TRANSACTION_LIMIT')
Response = SAPTransactionLimit
end service
//----------------------------------------------------------------------------------------------------------------------
// SetSAPHoldStartDateTime
//
// Sets the SAP hold start date and time.
//----------------------------------------------------------------------------------------------------------------------
Service SetSAPHoldStartDateTime(SAPHoldStartDateTime)
Database_Services('WriteDataRow', 'APP_INFO', 'SAP_HOLD_START_DATE_TIME', SAPHoldStartDateTime)
end service
//----------------------------------------------------------------------------------------------------------------------
// GetSAPHoldStartDateTime
//
// Gets the SAP hold start date and time.
//----------------------------------------------------------------------------------------------------------------------
Service GetSAPHoldStartDateTime()
SAPHoldStartDateTime = Database_Services('ReadDataRow', 'APP_INFO', 'SAP_HOLD_START_DATE_TIME')
Response = SAPHoldStartDateTime
end service
//----------------------------------------------------------------------------------------------------------------------
// SetSAPHoldStopDateTime
//
// Sets the SAP hold stop date and time.
//----------------------------------------------------------------------------------------------------------------------
Service SetSAPHoldStopDateTime(SAPHoldStopDateTime)
Database_Services('WriteDataRow', 'APP_INFO', 'SAP_HOLD_STOP_DATE_TIME', SAPHoldStopDateTime)
end service
//----------------------------------------------------------------------------------------------------------------------
// GetSAPHoldStopDateTime
//
// Gets the SAP hold stop date and time.
//----------------------------------------------------------------------------------------------------------------------
Service GetSAPHoldStopDateTime()
SAPHoldStopDateTime = Database_Services('ReadDataRow', 'APP_INFO', 'SAP_HOLD_STOP_DATE_TIME')
Response = SAPHoldStopDateTime
end service
Service PrintSpectrumLabel(WONo,StepNo,CassNo)
EQU SIK_FIXED_DATA$ To 1
EQU SIK_P_BNR$ TO 2
EQU SIK_GRVP$ TO 3
EQU SIK_I_GRVP$ TO 4
EQU SIK_M_QUANTITY$ TO 5
EQU SIK_M_QUANTITY1$ TO 6
EQU SIK_M_LOTNO$ TO 7
EQU SIK_DATECODE$ TO 8
EQU SIK_LOTCOUNT$ TO 9
EQU SIK_SERIALNO$ TO 10
EQU SIK_M_CODE$ TO 11
EQU SIK_M_COA$ TO 12
EQU SIK_P_TEXT2_3$ TO 13
EQU SIK_P_SALES_PRODUCT$ TO 14
EQU SIK_BLANK_LINE$ TO 15
EQU SIK_FIXED_DATA_2$ TO 16
EQU SIK_LABEL_ID$ TO 17
EQU SIK_PRT_PORT$ TO 18
If WONo NE '' AND CassNo NE '' then
WoMatKey = WONo : '*' : CassNo
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WoMatKey)
SAPBatchNo = WOMatRec<WO_MAT_SAP_BATCH_NO$>
IF SAPBatchNo NE '' then
CurrTime = Time()
WOLogKey = WONo
EpiPartNo = XLATE('WO_LOG', WOLogKey, WO_LOG_EPI_PART_NO$, 'X')
ReshipEpiPartNo = XLATE('WO_MAT', WoMatKey, WO_MAT_RESHIP_CUST_EPI_PART_NO$, 'X')
IF ReshipEpiPartNo EQ '' then
EpiPartToUse = EpiPartNo
end else
EpiPartToUse = ReshipEpiPartNo
end
ZPVMMatNum = XLATE('EPI_PART', EpiPartToUse, EPI_PART_VARM_PART_NO$, 'X')
If ZPVMMatNum EQ '' then
ZPVMMatNum = EpiPartToUse
end
ZPVMPartDesc = XLATE('EPI_PART', EpiPartToUse, EPI_PART_VARM_DESCRIPTION$ , 'X')
If ZPVMPartDesc EQ '' then
ZPVMPartDesc = XLATE('EPI_PART', EpiPartToUse, EPI_PART_EPI_PART_DESC$ , 'X')
end
ShipDate = XLATE('WO_MAT', WoMatKey, WO_MAT_SAP_TX_DTM$, 'X')
ShipYear = SRP_Datetime('Year', ShipDate)
ShipYear = ShipYear[3,4]
ShipWW = Date_Services('GetWeekNum', ShipDate)
ShipDtCd = ShipYear : ShipWW
SpectrumFileName = SAPBatchNo : '-' :CurrTime : '.sik'
SpectrumDirectory = XLATE('APP_INFO', 'SPECTRUM_FILE_PATH', 1, 'X')
SpectrumExportPath = SpectrumDirectory : SpectrumFileName
CurrWaferCnt = XLATE('WO_MAT', WoMatKey, 'CURR_WFR_CNT', 'X')
SikData = ''
SikData<SIK_FIXED_DATA$> = 'POKE EBSOFTLD.SYSTEM POOL'
SikData<SIK_P_BNR$> = 'P_BNR' : Tab$ : ZPVMMatNum
SikData<SIK_GRVP$> = 'GRVP' : Tab$ : 1; *Default
SikData<SIK_I_GRVP$> = 'I_GRVP' : Tab$ : CurrWaferCnt
SikData<SIK_M_QUANTITY$> = 'M_QUANTITY' : Tab$ : CurrWaferCnt
SikData<SIK_M_QUANTITY1$> = 'M_QUANTITY1' : Tab$ : CurrWaferCnt
SikData<SIK_M_LOTNO$> = 'M_LOTNO' : Tab$ : SAPBatchNo
SikData<SIK_DATECODE$> = 'M_DATECODE' : Tab$ : ShipDtCd
SikData<SIK_LOTCOUNT$> = 'LOTCOUNT' : Tab$ : 1; *Default
SikData<SIK_SERIALNO$> = 'SERIALNO' : Tab$ : 00001; *Default
SikData<SIK_M_CODE$> = 'M_COD' : Tab$ : 'US'; *Default
SikData<SIK_M_COA$> = 'M_COA' : Tab$ : ''
SikData<SIK_P_TEXT2_3$> = 'P_TEXT2_3' : Tab$ : ZPVMPartDesc;
SikData<SIK_P_SALES_PRODUCT$> = 'P_SALES_PRODUCT' : Tab$ : ZPVMPartDesc;
SikData<SIK_BLANK_LINE$> = '';*Intentionally left blank. Example file has a blank line here.
SikData<SIK_FIXED_DATA_2$> = 'EXECUTE EBSOFTLD.SYSTEM PRINT'
SikData<SIK_LABEL_ID$> = 'LABEL_ID' : Tab$ : 'BPL_CYSC'; *Default
SikData<SIK_PRT_PORT$> = 'PRT_PORT' : Tab$ : 'MESOPCNOVP604LBL003';
swap @FM with CRLF$ in SikData
Status() = 0
OSWrite SikData to SpectrumExportPath
StatusCode = Status()
If StatusCode EQ 0 then
SuccessMsg = 'Successfully sent sik file to the spectrum system.'
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = WOMatKey
LogData<3> = SuccessMsg
Logging_Services('AppendLog', objLogPrintSpectrumLabel, LogData, @RM, @FM)
end else
ErrorMsg = ''
Begin Case
Case StatusCode EQ 1
ErrorMsg = 'Bad OS filename.'
Case StatusCode EQ 2
ErrorMsg = 'Access denied by operating system.'
Case StatusCode EQ 3
ErrorMsg = 'Disk or directory full.'
Case StatusCode EQ 4
ErrorMsg = 'File does not exist.'
Case StatusCode EQ 5
ErrorMsg = 'Unknown error.'
Case StatusCode EQ 6
ErrorMsg = 'Attempt to write to a read-only file.'
End Case
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = WOMatKey
LogData<3> = ErrorMsg
Logging_Services('AppendLog', objLogPrintSpectrumLabel, LogData, @RM, @FM)
Error_Services('Add', ErrorMsg)
end
end else
ErrorMsg = 'Error in ':Service:' service. SAP Batch number for WOMat Record ' : WoMatKey : ' does not exist.'
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = WOMatKey
LogData<3> = ErrorMsg
Logging_Services('AppendLog', objLogPrintSpectrumLabel, LogData, @RM, @FM)
Error_Services('Add', ErrorMsg)
end
end else
ErrorMsg = 'Error in ':Service:' service. WO No or Cass No not provided.'
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = WOMatKey
LogData<3> = ErrorMsg
Logging_Services('AppendLog', objLogPrintSpectrumLabel, LogData, @RM, @FM)
Error_Services('Add', ErrorMsg)
end
end service
//----------------------------------------------------------------------------------------------------------------------
// ProcessOutboundHolds
//
// Checks to see if SAP transactions are ready to transmit. This is currently used when an SAP batch number is not yet
// assigned to a work order when the outbound SAP transaction is created.
//----------------------------------------------------------------------------------------------------------------------
Service ProcessOutboundHolds()
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
hSAPHold = Database_Services('GetTableHandle', 'SAP_HOLD')
If Error_Services('NoError') then
rv = Set_Status(0)
SelectStatement = 'SELECT SAP_HOLD BY TRANS_DTM'
RList(SelectStatement, 5)
If Get_Status(StatusCode) Then
Null
end else
EOF = False$
Loop
Readnext SAPHoldID else EOF = True$
Until EOF
Read SAPHoldRow from hSAPHold, SAPHoldID then
WOMatKey = SAPHoldRow<2>
SAPBatchNo = Xlate('WO_MAT', WOMatKey, 'SAP_BATCH_NO', 'X')
If SAPBatchNo NE '' then
TransAction = SAPHoldRow<1>
Sloc = SAPHoldRow<3>
NewMatHoldFlag = SAPHoldRow<4>
Set_Status(0)
obj_SAP('AddTransaction',TransAction:@RM:SAPBatchNo:@RM:Sloc:@RM:NewMatHoldFlag)
ErrorCode = ''
If Get_Status(ErrorCode) then
ErrorMsg = 'Error calling Obj_SAP in the ':Service:' service. Error code: ':ErrorCode
Error_Services('Add', ErrorMsg)
end else
Delete hSAPHold, SAPHoldID else
ErrorMsg = 'Error deleting SAPHold: ':SAPHoldID:' in the ':Service' service.'
Error_Services('Add', ErrorMsg)
end
end
end
end
Repeat
end
end
ClearSelect 0
Unlock hSysLists, ServiceKeyID else Null
end
end service
//----------------------------------------------------------------------------------------------------------------------
// RetransmitCassComp
//
// Input:
// WOMatKey - [Required]
//
// Retransmits CASS_COMP transactions to SAP. This can be used in the event that a CASS_COMP transaction failed to post
// to SAP.
//----------------------------------------------------------------------------------------------------------------------
Service RetransmitCassComp(WOMatKey)
WONo = WOMatKey[1,'*']
CassNo = WOMatKey[COL2()+1,'*']
ProdOrdNo = XLATE('WO_LOG', WONo, WO_LOG_PROD_ORD_NO$, 'X')
WOMatRec = Database_Services('ReadDataRow', 'WO_MAT', WOMatKey)
GRProps = obj_WO_Mat('GetGRProps',WOMatKey:@RM:WOMatRec)
GRWfrQty = GRProps[1,@FM]
ScrapQty = GRProps[COL2()+1,@FM]
ProdTWQty = GRProps[COL2()+1,@FM]
AvailMUWfrQty = GRProps[COL2()+1,@FM]
MUCassIDs = GRProps[COL2()+1,@FM]
MUCassQtys = GRProps[COL2()+1,@FM]
MUCassID = FIELD(MUCassIDs,@VM,1)
MUCassQty = FIELD(MUCassQtys,@VM,1)
MUBatchNo = XLATE('WO_MAT',MUCassID,WO_MAT_SAP_BATCH_NO$,'X')
UnTransCassIDs = FIELD(MUCassIds,@VM,2,25)
UnTransCassQtys = FIELD(MUCassQtys,@VM,2,25)
IF UnTransCassIDs NE '' THEN
otParms = 'SAP_MU_TRANS':@RM ;* TableName
otParms := WONo:'*':CassNo:@RM ;* TableKey
otParms := @RM ;* TableVar
otParms := UntransCassIDs:@FM:UntransCassQtys ;* TableRecord
obj_Tables('WriteRec',otParms)
END
SupplierLotNo = WOMatRec<WO_MAT_LOT_NO$>
IF WOMatRec<WO_MAT_WMO_KEY$> = '' THEN
CassID = WOMatRec<WO_MAT_RDS_NO$>[-1,'B':@VM]
MakeupFlag = WOMatRec<WO_MAT_MAKEUP_BOX$>
END ELSE
CassID = WOMatKey ;* WOMat Key used for WM_OUT as of 2/17/2012 JCH
CONVERT '*' TO '.' IN CassID
MakeupFlag = XLATE('WM_OUT',WOMatRec<WO_MAT_WMO_KEY$>,WM_OUT_MAKEUP_BOX$,'X')
END
IF MakeupFlag = '' THEN MakeupFlag = 0
IF MakeupFlag = 1 THEN GRWfrQty = AvailMUWfrQty
IF MUBatchNo NE '' THEN
IF MakeupFlag = 0 THEN
MakeupFlag = '-'
END ELSE
MakeupFlag = 2
END
END
ProdVerRec = XLATE('PROD_VER',WOMatRec<WO_MAT_PROD_VER_NO$>,'','X')
CustNo = ProdVerRec<PROD_VER_CUST_NO$>
VendCd = XLATE('COMPANY',CustNo,COMPANY_VEND_CD$,'X')
SubPartNo = ProdVerRec<PROD_VER_SUB_PART_NO$>
IF VendCd NE '' THEN
SubSuppCd = VendCd
END ELSE
IF SubPartNo MATCHES "6N'-'1A'-'2A" THEN
SubSuppCd = FIELD(SubPartNo,'-',3)
END ELSE
SubSuppCd = WOMatRec<WO_MAT_SUB_VEND_CD$>
SubSuppCd = XLATE('SEMI_VEND_CODE',SubSuppCd,SEMI_VEND_CODE_EPI_VEND_CD$,'X')
END
END
CustPartRev = ProdVerRec<PROD_VER_CUST_PART_REV$>
CurrDTM = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTHS'),'DT')
* Getting Records with the DTM missing
If CurrDTM = '' Then
CurrDTM = ICONV(OCONV(Date(),'D4/'):' ':OCONV(Time(),'MTHS'),'DT')
END
oPLParms = 'WO_MAT':@RM
oPLParms := WOMatKey:@RM
oPLParms := WO_MAT_SAP_TX_DTM$:@RM
oPLParms := CurrDTM
obj_Post_Log('Create',oPLParms)
* Section for Local generation of SAP_BATCH_NO removed 8/10/2011 JCH
atParms = 'CASS_COMP':@RM
atParms := ProdOrdNo:@RM
atParms := WONo:@RM
atParms := CassNo:@RM
atParms := GRWfrQty:@RM
atParms := ScrapQty:@RM
atParms := ProdTWQty:@RM
atParms := CassID:@RM
atParms := SupplierLotNo:@RM
atParms := SubSuppCd:@RM
atParms := CustPartRev:@RM
atParms := MakeupFlag:@RM
atParms := MUBatchNo:@RM
atParms := MUCassQty
obj_SAP('AddTransaction',atParms)
end service
Service SendUnTransMU(WOMatKey, BatchNo, MUBox)
//First: Get a list of untransacted MU wafers
UnTransRec = Database_Services('ReadDataRow', 'SAP_MU_TRANS', WOMatKey)
If UnTransRec<1> NE '' then
for each MUCass in UnTransRec<SAP_MU_TRANS_MU_CASS_ID$> using @VM setting mPos
WONo = Field(WOMatKey, '*', 1)
Material = Xlate('WO_LOG', WONo, 'EPI_PART_NO', 'X')
BatchFrom = Xlate('WO_MAT', MUCass, 'SAP_BATCH_NO', 'X')
BatchTo = BatchNo
MakeupBox = MUBox
TransQty = UnTransRec<SAP_MU_TRANS_MU_CASS_QTY$, mPos>
If MakeupBox EQ True$ then
// Current box is a makeup box and new box is a makeup box. We want to update
// the batch number in SAP.
SAPSLocFrom = '0400'
SAPSLocTo = '0400'
end else
SAPSLocFrom = '0400'
SAPSLocTo = '0500'
end
obj_SAP('AddTransaction','BATCHMOVE_IN':@RM:Material:@RM:BatchFrom:@RM:BatchTo:@RM:SAPSLocFrom:@RM:SAPSLocTo:@RM:TransQty)
ErrCode = ''
IF NOT(Get_Status(ErrCode)) then
Database_Services('DeleteDataRow', 'SAP_MU_TRANS', WOMatKey)
end else
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\SAP'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' SendMUTrans.csv'
Headers = 'Logging DTM' : @FM : 'WOMatKey' : @FM : 'BatchFrom' : @FM : 'BatchTo'
objMuTransLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, Comma$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
LogData = ''
LogData<1> = LoggingDTM
LogData<2> = WOMatKey
LogData<3> = BatchFrom
LogData<4> = BatchTo
Logging_Services('AppendLog', objMuTransLog, LogData, @RM, @FM)
end
Next MUCass
end
end service
Service GetInboundWOMatKeys(LookbackDate)
Set_Status(0)
If Num(LookbackDate) then LookbackDate = OConv(LookbackDate, 'D4/')
RowCount = 0
KeyList = ''
TableName = "WO_MAT"
Flag = ""
Done = False$
CursorVar = ""
GoSub ClearCursors
SortList = "SAP_TX_DT"
ReduceScript = "WITH {SAP_BATCH_NO} EQ '' AND WITH {SAP_TX_DT} GE '":LookbackDate:"'"
Mode = NEXT_CUR$
Reduce(ReduceScript, SortList, Mode, TableName, CursorVar, Flag)
If Flag then
Select TableName By SortList Using Cursorvar then
Loop
ReadNext key Using Cursorvar By AT Else Done = TRUE$
Until Done
KeyList<-1> = Key
Repeat
end
End
Response = KeyList
end service
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ClearCursors:
For Counter = 0 To 8
ClearSelect Counter
Next Counter
return