| opPrimeKey | output | longchar | Primary Key field value of loaded record(s). Keys are chr(4) separated. Key fields are chr(2) separated. |
| oiReturnStatus | output | integer | Return status of the method. |
assign oiReturnStatus = -98
viLocalReturnStatus = 0.
PROCESSBLOCK:
for each t_sDDocument
by t_sDDocument.tc_Rowid:
/* ===================================================================== */
/* if you don't fill the logical key, you can say you are in create mode */
/* ===================================================================== */
if (t_sDDocument.DDocumentType = "":U or t_sDDocument.DDocumentType = ?) or
(t_sDDocument.DDocumentYear = 0 or t_sDDocument.DDocumentYear = ? ) or
(t_sDDocument.DDocumentNumber = 0 or t_sDDocument.DDocumentNumber = ?)
then assign vcActivityCode = "Create":U.
/* =========================== */
/* Fill company_id when blank. */
/* =========================== */
if t_sDDocument.Company_ID = 0 or
t_sDDocument.Company_ID = ?
then assign t_sDDocument.Company_ID = viCompanyId.
/* ================================= */
/* Lookup object by logical key */
/* When in create mode, skip lookup. */
/* ================================= */
if vcActivityCode <> "Create":U
then do:
assign vcFreeform = "for each DDocument where DDocument.Company_ID = ":U + string(t_sDDocument.Company_ID) +
" and DDocument.DDocumentType = '":U + t_sDDocument.DDocumentType + "'":U +
" and DDocument.DDocumentYear = ":U + string(t_sDDocument.DDocumentYear) +
" and DDocument.DDocumentNumber = ":U + string(t_sDDocument.DDocumentNumber).
<M-1 run DataLoad
(input '':U (icRowids),
input '':U (icPkeys),
input '':U (icObjectIds),
input vcFreeForm (icFreeform),
input true (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BDDocument>
if viFcReturnSuper = -4 and vcActivityCode = "Delete":U
then do:
/* ============================================== */
/* When in delete mode, ignore input data. */
/* When object not found, do not return an error. */
/* ============================================== */
delete t_sDDocument.
next.
end.
else do:
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then leave PROCESSBLOCK.
find first tDDocument where
tDDocument.Company_ID = t_sDDocument.Company_ID and
tDDocument.DDocumentType = t_sDDocument.DDocumentType and
tDDocument.DDocumentYear = t_sDDocument.DDocumentYear and
tDDocument.DDocumentNumber = t_sDDocument.DDocumentNumber
no-error.
if not available tDDocument
then do:
assign vcMessage = trim(#T-18'Unable to find Customer Payment.':255(999890196)T-18#) + chr(10) +
trim(substitute(#T-19'Company ID: &1':255(69637)T-19#, trim(string(t_sDDocument.Company_ID)) )) + chr(10) +
trim(substitute(#T-20'Document Type: &1':255(999890193)T-20#, trim(t_sDDocument.DDocumentType) )) + chr(10) +
trim(substitute(#T-21'Document Year: &1':222(999890194)T-21#, trim(string(t_sDDocument.DDocumentYear)) )) + chr(10) +
trim(substitute(#T-22'Document Number: &1':200(999890195)T-22#, trim(string(t_sDDocument.DDocumentNumber)) ))
viLocalReturnStatus = -1.
<M-17 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input t_sDDocument.tc_Rowid (icRowid),
input 'QadFin-8977':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDDocument>
next.
end. /* end if not available tDDocument */
/* ====================================== */
/* Update input to allow correct matching */
/* ====================================== */
assign t_sDDocument.tc_Rowid = tDDocument.tc_Rowid
t_sDDocument.tc_ParentRowid = "":U
opPrimeKey = (if opPrimeKey = "":U
then "":U
else opPrimeKey + chr(4)) + string(tDDocument.DDocument_ID).
end. /* end if viFcReturnSuper = -4 ... */
end. /* if vcActivityCode <> "Create":U or */
if vcActivityCode = "ExternalCreate":U or
vcActivityCode = "Create":U
then do:
/* ====================================================== */
/* put this value on zero, so that he will get new number */
/* ====================================================== */
assign t_sDDocument.DDocumentNumber = 0.
/* ======================================= */
/* When object in create mode, create it. */
/* ======================================= */
<M-8 run AddDetailLine
(input 'DDocument':U (icTable),
input '':U (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BDDocument>
if viFcReturnSuper <> 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then leave PROCESSBLOCK.
/* ====================================== */
/* Update input to allow correct matching */
/* ====================================== */
assign t_sDDocument.tc_Status = "N":U
/* fill the primary key with the t table values that are filled in initialvalues when not filled, needed for getnumber */
t_sDDocument.Company_ID = if t_sDDocument.Company_ID = ? or t_sDDocument.Company_ID = 0
then tDDocument.Company_ID
else t_sDDocument.Company_ID
t_sDDocument.DDocumentType = if t_sDDocument.DDocumentType = ? or t_sDDocument.DDocumentType = "":U
then tDDocument.DDocumentType
else t_sDDocument.DDocumentType
t_sDDocument.DDocumentYear = if t_sDDocument.DDocumentYear = ? or t_sDDocument.DDocumentYear = 0
then tDDocument.DDocumentYear
else t_sDDocument.DDocumentYear.
end. /* if vcActivityCode = Create */
else
/* ====================================== */
/* Update input to allow correct matching */
/* ====================================== */
assign t_sDDocument.tc_Status = "C":U.
assign t_sDDocument.DDocument_ID = tDDocument.DDocument_ID.
/* Determine BankNumber_ID if not specified */
if t_sDDocument.BankNumber_ID = ? or t_sDDocument.BankNumber_ID = 0
then do:
if viBBankNumber2ID = 0 or viBBankNumber2ID = ?
then do:
<I-33 {bFcStartAndOpenInstance
&ADD-TO-TRANSACTION = "true"
&CLASS = "BBankNumber"}>
end.
else do:
<I-34 {bFcOpenInstance
&CLASS = "BBankNumber"}>
end.
<M-35 run GetParentBankData
(input t_sDDocument.Company_ID (iiCompanyID),
input ? (icCreditorCode),
input t_sDDocument.tcDebtorCode (icDebtorCode),
input t_sDDocument.DDocumentType (icPaymentInstrument),
output t_sDDocument.BankNumber_ID (oiBankNumberID),
output t_sDDocument.tcDebtorBankNumber (ocBankNumber),
output vcDummy (ocBankNumberExtension),
input t_sDDocument.tcOwnBankNumber (icOwnBankNumber),
input t_sDDocument.tcGLCode (icGLCode),
output viFcReturnSuper (oiReturnStatus)) in BBankNumber>
if viFcReturnSuper <> 0 then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then do:
assign vcMessage = trim(substitute(#T-39'Failed to retrieve bank information for customer &1':255(591273430)T-39#, t_sDDocument.tcDebtorCode)) + chr(10) +
trim(substitute(#T-40'Company ID: &1':255(69637)T-40#, trim(string(t_sDDocument.Company_ID)) )) + chr(10) +
trim(substitute(#T-41'Document Type: &1':255(999890193)T-41#, trim(t_sDDocument.DDocumentType) )) + chr(10) +
trim(substitute(#T-42'Document Year: &1':222(999890194)T-42#, trim(string(t_sDDocument.DDocumentYear)) )) + chr(10) +
trim(substitute(#T-43'Document Number: &1':200(999890195)T-43#, trim(string(t_sDDocument.DDocumentNumber)) )).
<M-38 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'W':U (icType),
input 3 (iiSeverity),
input t_sDDocument.tc_Rowid (icRowid),
input 'QadFin-9555':U:U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDDocument>
next.
end.
end.
if t_sDDocument.BankNumber_ID <> ? and
t_sDDocument.BankNumber_ID <> 0 and
(t_sDDocument.tcDebtorBankNumber = "":U or
t_sDDocument.tcDebtorBankNumber = ? )
then do :
<Q-72 run BankNumberByID (all) (Read) (Cache)
(input t_sDDocument.BankNumber_ID, (BankNumber_ID)
input ?, (CompanyId)
output dataset tqBankNumberByID) in BBankNumber>
for first tqBankNumberByID where
tqBankNumberByID.tiBankNumber_ID = t_sDDocument.BankNumber_ID :
assign t_sDDocument.tcDebtorBankNumber = tqBankNumberByID.tcBankNumber .
end.
end.
/* Determine PayFormatTypeCode */
if t_sDDocument.BankNumber_ID <> ? and t_sDDocument.BankNumber_ID <> 0 and
((t_sDDocument.tcPayFormatTypeCode = ? or t_sDDocument.tcPayFormatTypeCode = "":U) or
((tDDocument.GL_ID = ? or tDDocument.GL_ID = 0) and
(tDDocument.tcGLCode = ? or tDDocument.tcGLCode = "":U)))
then do:
<Q-44 run BankNumberOwnBankGLByID (all) (Read) (Cache)
(input t_sDDocument.BankNumber_ID, (BankNumber_ID)
input ?, (CompanyId)
output dataset tqBankNumberOwnBankGLByID) in BBankNumber>
for first tqBankNumberOwnBankGLByID where
tqBankNumberOwnBankGLByID.tiBankNumber_ID = t_sDDocument.BankNumber_ID:
assign t_sDDocument.tcPayFormatTypeCode = tqBankNumberOwnBankGLByID.tcPayFormatTypeCode
t_sDDocument.tcOwnBankNumber = tqBankNumberOwnBankGLByID.tcOwnBankNumber
t_sDDocument.tcGLCode = tqBankNumberOwnBankGLByID.tcGLCode
t_sDDocument.GL_ID = tqBankNumberOwnBankGLByID.tiGL_ID.
end.
end.
/* ============================= */
/* Code for DDocumentPostingLine */
/* Delete existing detail */
/* ============================= */
for each tDDocumentPostingLine where
tDDocumentPostingLine.tc_ParentRowid = tDDocument.tc_Rowid:
assign tDDocumentPostingLine.tc_Status = "D":U.
end. /* for each tDDocumentPostingLine where */
/* =================== */
/* Update / add detail */
/* =================== */
if can-find(first t_sDDocumentPostingLine where
t_sDDocumentPostingLine.tc_ParentRowid = t_sDDocument.tc_Rowid)
then do:
assign vcMessage = trim(#T-27'It's not needed to pass Customer Payment Posting Line Records, they will be automatically created.':255(999890300)T-27#) + chr(10) +
trim(substitute(#T-28'Company ID: &1':255(69637)T-28#, trim(string(t_sDDocument.Company_ID)) )) + chr(10) +
trim(substitute(#T-29'Document Type: &1':255(999890193)T-29#, trim(t_sDDocument.DDocumentType) )) + chr(10) +
trim(substitute(#T-30'Document Year: &1':222(999890194)T-30#, trim(string(t_sDDocument.DDocumentYear)) )) + chr(10) +
trim(substitute(#T-31'Document Number: &1':200(999890195)T-31#, trim(string(t_sDDocument.DDocumentNumber)) ))
viLocalReturnStatus = +1.
<M-32 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'W':U (icType),
input 3 (iiSeverity),
input t_sDDocument.tc_Rowid (icRowid),
input 'QadFin-8998':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDDocument>
next.
end. /* end can-find t_sDDocumentPostingLine */
/* =========================================================== */
/* delete passed records, will be created in additionalupdates */
/* =========================================================== */
for each t_sDDocumentPostingLine where
t_sDDocumentPostingLine.tc_ParentRowid = t_sDDocument.tc_Rowid :
assign t_sDDocumentPostingLine.tc_Status = "D":U.
end.
/* ============================= */
/* Code for DDocumentInvoiceXref */
/* Delete existing detail */
/* ============================= */
for each tDDocumentInvoiceXref where
tDDocumentInvoiceXref.tc_ParentRowid = tDDocument.tc_Rowid:
assign tDDocumentInvoiceXref.tc_Status = "D":U.
end. /* for each tDDocumentInvoiceXref where */
/* =================== */
/* Update / add detail */
/* =================== */
for each t_sDDocumentInvoiceXref where
t_sDDocumentInvoiceXref.tc_ParentRowid = t_sDDocument.tc_Rowid and
t_sDDocumentInvoiceXref.tc_Status <> "D":U:
assign t_sDDocumentInvoiceXref.DDocument_ID = t_sDDocument.DDocument_ID.
find first tDDocumentInvoiceXref where
tDDocumentInvoiceXref.tc_ParentRowid = tDDocument.tc_Rowid and
tDDocumentInvoiceXref.DInvoice_ID = t_sDDocumentInvoiceXref.DInvoice_ID and
(tDDocumentInvoiceXref.DInvoice_ID <> 0 and tDDocumentInvoiceXref.DInvoice_ID <> ?)
no-error.
if available tDDocumentInvoiceXref
then assign t_sDDocumentInvoiceXref.tc_Status = "C":U.
else do:
<M-14 run AddDetailLine
(input 'DDocumentInvoiceXref':U (icTable),
input tDDocument.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BDDocument>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then leave PROCESSBLOCK.
assign t_sDDocumentInvoiceXref.tc_Status = "N":U.
end. /* else do: */
assign viDInvoicePostingYear = integer(entry(1, t_sDDocumentInvoiceXref.tcDInvoiceReference, "/":U))
viDInvoiceVoucher = integer(entry(3, t_sDDocumentInvoiceXref.tcDInvoiceReference, "/":U))
vcJournalCode = entry(2, t_sDDocumentInvoiceXref.tcDInvoiceReference, "/":U) no-error.
if error-status:error
then do:
assign viLocalReturnStatus = -3
vcMessage = trim(substitute(#T-23'Internal error: unable to get the invoice posting year, daybook and invoice voucher out of the invoice reference &1.':255(999890245)T-23#,t_sDDocumentInvoiceXref.tcDInvoiceReference)).
if error-status:num-messages > 0
then assign vcMessage = vcMessage + chr(10) +
trim(substitute(#T-24'Detailed info: &1 (&2)':255(16477)T-24#,error-status:Get-Message(1),string(error-status:Get-Number(1)))).
<M-25 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'S':U (icType),
input 3 (iiSeverity),
input t_sDDocument.tc_Rowid (icRowid),
input 'QadFin-8978':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BDDocument>
leave PROCESSBLOCK.
end.
if not vlStartDInvoice
then do:
<Q-26 run DInvoiceByYearJournalVoucher (Start) in BDInvoice >
assign vlStartDInvoice = true.
end.
if t_sDDocumentInvoiceXref.tcCompanyCode <> "":U or
t_sDDocumentInvoiceXref.tcCompanyCode <> ?
then do :
<Q-84 run CompanyByCompanyIdCode (all) (Read) (NoCache)
(input ?, (CompanyId)
input t_sDDocumentInvoiceXref.tcCompanyCode, (CompanyCode)
output dataset tqCompanyByCompanyIdCode) in BCompany>
find first tqCompanyByCompanyIdCode
where tqCompanyByCompanyIdCode.tcCompanyCode = t_sDDocumentInvoiceXref.tcCompanyCode no-error .
if available tqCompanyByCompanyIdCode
then assign viInvCompanyID = tqCompanyByCompanyIdCode.tiCompany_ID .
end.
else assign viInvCompanyID = ? .
<Q-13 run DInvoiceByYearJournalVoucher (all) (Read) (Cache)
(input viInvCompanyID, (CompanyId)
input viDInvoicePostingYear, (DInvoicePostingYear)
input vcJournalCode, (JournalCode)
input viDInvoiceVoucher, (DInvoiceVoucher)
output dataset tqDInvoiceByYearJournalVoucher) in BDInvoice>
find first tqDInvoiceByYearJournalVoucher where
tqDInvoiceByYearJournalVoucher.tiCompany_ID = viInvCompanyID and
tqDInvoiceByYearJournalVoucher.tiDInvoicePostingYear = viDInvoicePostingYear and
tqDInvoiceByYearJournalVoucher.tcJournalCode = vcJournalCode and
tqDInvoiceByYearJournalVoucher.tiDInvoiceVoucher = viDInvoiceVoucher
no-error.
if available tqDInvoiceByYearJournalVoucher
then assign t_sDDocumentInvoiceXref.DInvoice_ID = tqDInvoiceByYearJournalVoucher.tiDInvoice_ID
t_sDDocumentInvoiceXref.tcCurrencyCode = tqDInvoiceByYearJournalVoucher.tcCurrencyCode
t_sDDocumentInvoiceXref.tcDivisionCode = tqDInvoiceByYearJournalVoucher.tcDivisionCode
t_sDDocumentInvoiceXref.tcAllocAmountCrDt = if tqDInvoiceByYearJournalVoucher.tdDInvoiceOriginalCreditTC <> 0 and
tqDInvoiceByYearJournalVoucher.tdDInvoiceOriginalCreditTC <> ?
then {&CREDITDEBITABBREVIATION-DEBIT}
else {&CREDITDEBITABBREVIATION-CREDIT}
t_sDDocumentInvoiceXref.tcDInvoiceBalanceCrDt = if tqDInvoiceByYearJournalVoucher.tdDInvoiceOriginalCreditTC <> 0 and
tqDInvoiceByYearJournalVoucher.tdDInvoiceOriginalCreditTC <> ?
then {&CREDITDEBITABBREVIATION-CREDIT}
else {&CREDITDEBITABBREVIATION-DEBIT}.
/* ==================================== */
/* Code needed for DDocInvoiceXrefStage */
/* ==================================== */
assign t_sDDocumentInvoiceXref.DDocumentInvoiceXref_ID = tDDocumentInvoiceXref.DDocumentInvoiceXref_ID.
/* ====================== */
/* Delete existing detail */
/* ====================== */
for each tDDocInvoiceXrefStage where
tDDocInvoiceXrefStage.tc_ParentRowid = tDDocumentInvoiceXref.tc_Rowid:
assign tDDocInvoiceXrefStage.tc_Status = "D":U.
end. /* for each tDDocInvoiceXrefStage where */
/* =================== */
/* Update / add detail */
/* =================== */
for each t_sDDocInvoiceXrefStage where
t_sDDocInvoiceXrefStage.tc_ParentRowid = t_sDDocumentInvoiceXref.tc_Rowid and
t_sDDocInvoiceXrefStage.tc_Status <> "D":U:
find first tDDocInvoiceXrefStage where
tDDocInvoiceXrefStage.tc_ParentRowid = tDDocumentInvoiceXref.tc_Rowid and
tDDocInvoiceXrefStage.DInvoiceStage_ID = t_sDDocInvoiceXrefStage.DInvoiceStage_ID and
(tDDocInvoiceXrefStage.DInvoiceStage_ID <> 0 and tDDocInvoiceXrefStage.DInvoiceStage_ID <> ?)
no-error.
if available tDDocInvoiceXrefStage
then assign t_sDDocInvoiceXrefStage.tc_Status = "C":U.
else do:
<M-11 run AddDetailLine
(input 'DDocInvoiceXrefStage':U (icTable),
input tDDocumentInvoiceXref.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BDDocument>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then leave PROCESSBLOCK.
assign t_sDDocInvoiceXrefStage.tc_Status = "N":U.
end. /* else do: */
/* ================================================================= */
/* override value for identity fields in input (DDocInvoiceXrefStage) */
/* ================================================================= */
assign t_sDDocInvoiceXrefStage.DDocInvoiceXrefStage_ID = tDDocInvoiceXrefStage.DDocInvoiceXrefStage_ID
/* ====================================== */
/* Update input to allow correct matching */
/* ====================================== */
t_sDDocInvoiceXrefStage.tc_Rowid = tDDocInvoiceXrefStage.tc_Rowid
t_sDDocInvoiceXrefStage.tc_ParentRowid = tDDocumentInvoiceXref.tc_Rowid.
end. /* for each t_sDDocInvoiceXrefStage */
/* ================================================================= */
/* override value for identity fields in input (DDocumentInvoiceXref) */
/* ================================================================= */
assign t_sDDocumentInvoiceXref.DDocumentInvoiceXref_ID = tDDocumentInvoiceXref.DDocumentInvoiceXref_ID
/* ====================================== */
/* Update input to allow correct matching */
/* ====================================== */
t_sDDocumentInvoiceXref.DDocument_ID = tDDocumentInvoiceXref.DDocument_ID
t_sDDocumentInvoiceXref.tc_Rowid = tDDocumentInvoiceXref.tc_Rowid
t_sDDocumentInvoiceXref.tc_ParentRowid = tDDocument.tc_Rowid.
end. /* end for each t_sDDocumentInvoiceXref */
if t_sDDocument.tc_Status = "N":U and
t_sDDocument.Company_ID <> 0 and t_sDDocument.Company_ID <> ? and
t_sDDocument.DDocumentType <> "":U and t_sDDocument.DDocumentType <> ? and
t_sDDocument.DDocumentYear <> 0 and t_sDDocument.DDocumentYear <> ? and
(t_sDDocument.DDocumentNumber = 0 or t_sDDocument.DDocumentNumber = ?)
then do:
assign vhFcComponent = ?.
<M-12 run GetNumber
(input t_sDDocument.Company_ID (iiCompanyId),
input t_sDDocument.DDocumentYear (iiNumbrYear),
input 'D':U + t_sDDocument.DDocumentType (icNumbrType),
output t_sDDocument.DDocumentNumber (oiNumber),
input viFcCurrentInstanceId (iiInstanceId),
input vcFcComponentName (icClassName),
output viFcReturnSuper (oiReturnStatus)) in BNumber>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then leave PROCESSBLOCK.
end.
/* ======================================================= */
/* override value for identity fields in input (DDocument) */
/* ======================================================= */
assign t_sDDocument.DDocument_ID = tDDocument.DDocument_ID
t_sDDocument.Company_ID = tDDocument.Company_ID
t_sDDocument.CreationUsr_ID = viUsrId
t_sDDocument.tcCreationUsrLogin = vcUserLogin
/* ====================================== */
/* Update input to allow correct matching */
/* ====================================== */
t_sDDocument.tc_Rowid = tDDocument.tc_Rowid
t_sDDocument.tc_ParentRowid = "":U
opPrimeKey = (if opPrimeKey = "":U
then "":U
else opPrimeKey + chr(4)) + string(tDDocument.DDocument_ID).
end. /* PROCESSBLOCK */
if vlStartDInvoice
then do:
<Q-16 run DInvoiceByYearJournalVoucher (Stop) in BDInvoice >
end.
assign oiReturnStatus = viLocalReturnStatus.