project QadFinancials > class BPosting > method AdditionalUpdatesPreCreateTempTables
Description
Create the temp-tables used to pass to other components. This way, we only need to go through the instance records once.
Parameters
ilPostingChanged | input | logical | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program5/bposting.p)
/* ================== */
/* Exception Handling */
/* ================== */
assign oiReturnStatus = -98
viLocalReturnStatus = 0.
TEMPTABLEBLOCK:
do:
/* ======================================= */
/* create temp-table for open item records */
/* GL Open Item Reconciliation */
/* ======================================= */
assign viLayerID = tPosting.tiLayer_ID.
if available t_iPosting and tPosting.Journal_ID <> t_iPosting.Journal_ID and tPosting.Journal_ID <> 0 and tPosting.Journal_ID <> ?
then do:
<Q-6 run JournalByLayerIDJournalID (all) (Read) (Cache)
(input ?, (LayerId)
input ?, (CompanyId)
input tPosting.Journal_ID, (JournalID)
output dataset tqJournalByLayerIDJournalID) in BJournal>
find first tqJournalByLayerIDJournalID where
tqJournalByLayerIDJournalID.tiJournal_ID = tPosting.Journal_ID
no-error.
if available tqJournalByLayerIDJournalID
then assign viLayerID = tqJournalByLayerIDJournalID.tiLayer_ID.
end.
for each tPostingLine where
tPostingLine.tc_ParentRowid = tPosting.tc_Rowid and
tPostingLine.tc_Status = "C":U and
tPostingLine.tcGLTypeCode <> {&GLTYPECODE-OPEN}
no-lock:
find t_iPostingLine where
t_iPostingLine.PostingLine_ID = tPostingLine.PostingLine_ID and
t_iPostingLine.tc_ParentRowid = tPosting.tc_Rowid and
t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-OPEN}
no-error.
if available t_iPostingLine
then do:
<M-57 run AdditionalUpdatesPreCreateTempTablesD (output viFcReturnSuper (oiReturnStatus)) in BPosting>
if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave TEMPTABLEBLOCK.
end. /*if available t_iPostingLine*/
end. /*for each tPostingLine where*/
for each tPostingLine where
tPostingLine.tc_ParentRowid = tPosting.tc_Rowid and
tPostingLine.tcGLTypeCode = {&GLTYPECODE-OPEN} :
find t_iPostingLine where
t_iPostingLine.tc_Rowid = tPostingLine.tc_Rowid
no-error.
/* =========================================================== */
/* only execute when you have changed record in allocate later */
/* =========================================================== */
if not available t_iPostingLine and
tPostingLine.tcAllocationType = {&ALLOCATIONTYPE-LATER}
then next.
/* ==================================================== */
/* create tGLOpenItemMovement records for DELETED lines */
/* ==================================================== */
if tPosting.tc_Status = "D":U or tPostingLine.tc_Status = "D":U
then do:
if not available t_iPosting or
not available t_iPostingLine
then next.
<M-40 run AdditionalUpdatesPreCreateTempTablesD (output viFcReturnSuper (oiReturnStatus)) in BPosting>
if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave TEMPTABLEBLOCK.
next.
end.
/* ================================================ */
/* create tGLOpenItemMovement records for NEW lines */
/* ================================================ */
if tPosting.tc_Status <> "D":U and tPostingLine.tc_Status = "N":U
then do:
<M-53 run AdditionalUpdatesPreCreateTempTablesN (output viFcReturnSuper (oiReturnStatus)) in BPosting>
if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave TEMPTABLEBLOCK.
next.
end.
/* ===================================================== */
/* create tGLOpenItemMovement records for MODIFIED lines */
/* ===================================================== */
if tPosting.tc_Status <> "D":U and
tPostingLine.tc_Status <> "N":U and
available t_iPostingLine and
( tPostingLine.tcAllocationType <> t_iPostingLine.tcAllocationType or
tPostingLine.tcAllocationKey <> t_iPostingLine.tcAllocationKey or
tPostingLine.PostingLineDebitTC <> t_iPostingLine.PostingLineDebitTC or
tPostingLine.PostingLineDebitLC <> t_iPostingLine.PostingLineDebitLC or
tPostingLine.PostingLineDebitCC <> t_iPostingLine.PostingLineDebitCC or
tPostingLine.PostingLineCreditTC <> t_iPostingLine.PostingLineCreditTC or
tPostingLine.PostingLineCreditLC <> t_iPostingLine.PostingLineCreditLC or
tPostingLine.PostingLineCreditCC <> t_iPostingLine.PostingLineCreditCC or
tPostingLine.GL_ID <> t_iPostingLine.GL_ID or
tPostingLine.Currency_ID <> t_iPostingLine.Currency_ID)
then do:
if not available t_iPosting or
not available t_iPostingLine
then next.
<M-2 run AdditionalUpdatesPreCreateTempTablesC (output viFcReturnSuper (oiReturnStatus)) in BPosting>
if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave TEMPTABLEBLOCK.
next.
end.
end. /* end for each tPostingLine {&GLTYPECODE-OPEN} */
/* ====================== */
/* create history records */
/* ====================== */
for each tPostingLine where
tPostingLine.tc_ParentRowid = tPosting.tc_Rowid :
find t_iPostingLine where
t_iPostingLine.tc_Rowid = tPostingLine.tc_Rowid
no-error.
/* =========================================== */
/* A Create tApiQPostingLine for DELETED lines */
/* =========================================== */
if tPostingLine.tc_Status = "D":U or
tPosting.tc_Status = "D":U
then do:
if not available t_iPosting or
not available t_iPostingLine
then leave TEMPTABLEBLOCK.
create tApiQPostingLine.
assign viApiQPostingLineID = viApiQPostingLineID + 1
tApiQPostingLine.QPostingLine_ID = viApiQPostingLineID
tApiQPostingLine.Company_ID = t_iPosting.Company_ID
tApiQPostingLine.Period_ID = t_iPosting.Period_ID
tApiQPostingLine.GL_ID = t_iPostingLine.GL_ID
tApiQPostingLine.Division_ID = t_iPostingLine.Division_ID
tApiQPostingLine.CostCentre_ID = t_iPostingLine.CostCentre_ID
tApiQPostingLine.Project_ID = t_iPostingLine.Project_ID
tApiQPostingLine.Journal_ID = t_iPosting.Journal_ID
tApiQPostingLine.Currency_ID = t_iPostingLine.Currency_ID
tApiQPostingLine.IntercoBusinessRelation_ID = t_iPostingLine.IntercoBusinessRelation_ID
tApiQPostingLine.QPostingLineDebitLC = - t_iPostingLine.PostingLineDebitLC
tApiQPostingLine.QPostingLineCreditLC = - t_iPostingLine.PostingLineCreditLC
tApiQPostingLine.QPostingLineDebitTC = - t_iPostingLine.PostingLineDebitTC
tApiQPostingLine.QPostingLineCreditTC = - t_iPostingLine.PostingLineCreditTC
tApiQPostingLine.QPostingLineDebitCC = - t_iPostingLine.PostingLineDebitCC
tApiQPostingLine.QPostingLineCreditCC = - t_iPostingLine.PostingLineCreditCC
tApiQPostingLine.QPostingLineQTY = - t_iPostingLine.PostingLineQTY
tApiQPostingLine.QPostingLineInfo = string(tPosting.PostingYear) + "/":U + string(tPosting.PostingPeriod) + "/":U + tPosting.tcJournalCode + "/":U + string(tPosting.PostingVoucher)
tApiQPostingLine.PeriodYearPeriod = t_iPosting.PostingYear * 100 + t_iPosting.PostingPeriod
tApiQPostingLine.Layer_ID = t_iPosting.tiLayer_ID
tApiQPostingLine.JournalTypeCode = t_iPosting.tcJournalTypeCode
tApiQPostingLine.tc_Rowid = string(viApiQPostingLineID)
tApiQPostingLine.tc_ParentRowid = "":U
tApiQPostingLine.tc_Status = "N":U
tApiQPostingLine.QPostingDate = t_iPostingLine.PostingDate.
/* =================================================================== */
/* A.1 Create tApiQPostingSaf records for the tApiQPostingLine records */
/* =================================================================== */
for each t_iPostingSaf where
t_iPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid:
create tApiQPostingSaf.
assign viApiQPostingSafID = viApiQPostingSafID + 1
tApiQPostingSaf.QPostingSaf_ID = viApiQPostingSafID
tApiQPostingSaf.QPostingLine_ID = viApiQPostingLineID
tApiQPostingSaf.Saf_ID = t_iPostingSaf.Saf_ID
tApiQPostingSaf.QPostingSafParentType = t_iPostingSaf.PostingSafParentType
tApiQPostingSaf.QPostingSafInputSequence = t_iPostingSaf.PostingSafInputSequence
tApiQPostingSaf.SafStructure_ID = t_iPostingSaf.SafStructure_ID
tApiQPostingSaf.tc_Rowid = string(viApiQPostingSafID)
tApiQPostingSaf.tc_ParentRowid = tApiQPostingLine.tc_Rowid
tApiQPostingSaf.tc_Status = "N":U.
if vlBankCashTrxInRealTime = TRUE and
(t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
then do:
create tApiQPostingSafBank.
buffer-copy tApiQPostingSaf to tApiQPostingSafBank.
delete tApiQPostingSaf.
end.
end.
if vlBankCashTrxInRealTime = TRUE and
(t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
then do:
create tApiQPostingLineBank.
buffer-copy tApiQPostingLine to tApiQPostingLineBank.
delete tApiQPostingLine.
end.
end. /* A Create tApiQPostingLine for DELETED lines */
/* ============================================ */
/* B Create tApiQPostingLine for MODIFIED lines */
/* ============================================ */
if (ilPostingChanged = true and
tPostingLine.tc_status <> 'N':U) or
((tPostingLine.tc_Status = 'C':U or /* Posting-line changed */
(tPostingLine.tc_Status = '':U and /* Posting-safs changed */
can-find (first tPostingSaf where
tPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid and
tPostingSaf.tc_status <> '':U))) and
tPosting.tc_Status <> 'D':U) /* Posting not deleted */
then do:
if tPostingLine.tc_Status = '':U and
ilPostingChanged = false
then do:
assign vlSafModif = false.
for each tPostingSaf where
tPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid:
if tPostingSaf.tc_Status = 'C':U or
tPostingSaf.tc_Status = 'N':U or
(tPostingSaf.tc_Status = 'D':U and
can-find( t_iPostingSaf where
t_iPostingSaf.tc_Rowid = tPostingSaf.tc_Rowid))
then do:
assign vlSafModif = true.
leave.
end.
end.
if vlSafModif = false
then leave TEMPTABLEBLOCK.
end.
/* Find the original PostingLine (before changes) */
if not available t_iPostingLine
then do:
assign vcMessage = trim(#T-4'The original record for this posting line cannot be found.':255(3258)T-4#) + chr(10) +
trim(subst("tPostingLine.tc_Rowid: &1.":U, trim(tPostingLine.tc_rowid)))
oiReturnStatus = -5.
<M-3 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input tPostingLine.tc_Rowid (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input tPostingLine.tc_Rowid (icRowid),
input 'QadFin-7582':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BPosting>
leave TEMPTABLEBLOCK.
end.
/* ==================================================================================== */
/* B.1 Positive QPostingLine for new values */
/* ==================================================================================== */
create tApiQPostingLine.
assign viApiQPostingLineID = viApiQPostingLineID + 1
tApiQPostingLine.QPostingLine_ID = viApiQPostingLineID
tApiQPostingLine.Company_ID = tPosting.Company_ID
tApiQPostingLine.Period_ID = tPosting.Period_ID
tApiQPostingLine.GL_ID = tPostingLine.GL_ID
tApiQPostingLine.Division_ID = tPostingLine.Division_ID
tApiQPostingLine.CostCentre_ID = tPostingLine.CostCentre_ID
tApiQPostingLine.Project_ID = tPostingLine.Project_ID
tApiQPostingLine.Journal_ID = tPosting.Journal_ID
tApiQPostingLine.Currency_ID = tPostingLine.Currency_ID
tApiQPostingLine.IntercoBusinessRelation_ID = tPostingLine.IntercoBusinessRelation_ID
tApiQPostingLine.QPostingLineDebitLC = tPostingLine.PostingLineDebitLC
tApiQPostingLine.QPostingLineCreditLC = tPostingLine.PostingLineCreditLC
tApiQPostingLine.QPostingLineDebitTC = tPostingLine.PostingLineDebitTC
tApiQPostingLine.QPostingLineCreditTC = tPostingLine.PostingLineCreditTC
tApiQPostingLine.QPostingLineDebitCC = tPostingLine.PostingLineDebitCC
tApiQPostingLine.QPostingLineCreditCC = tPostingLine.PostingLineCreditCC
tApiQPostingLine.QPostingLineQTY = tPostingLine.PostingLineQTY
tApiQPostingLine.QPostingLineInfo = string(tPosting.PostingYear) + "/":U + string(tPosting.PostingPeriod) + "/":U + tPosting.tcJournalCode + "/":U + string(tPosting.PostingVoucher)
tApiQPostingLine.PeriodYearPeriod = tPosting.PostingYear * 100 + tPosting.PostingPeriod
tApiQPostingLine.JournalTypeCode = tPosting.tcJournalTypeCode
tApiQPostingLine.tc_Rowid = string(viApiQPostingLineID)
tApiQPostingLine.tc_ParentRowid = "":U
tApiQPostingLine.tc_Status = "N":U
tApiQPostingLine.QPostingDate = t_iPostingLine.PostingDate.
/* Assign the Layer */
assign tApiQPostingLine.Layer_ID = viLayerID.
/* =============================================================== */
/* Create tApiQPostingSaf records for the tApiQPostingLine records */
/* =============================================================== */
for each tPostingSaf where
tPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid and
tPostingSaf.tc_Status <> "D":U:
create tApiQPostingSaf.
assign viApiQPostingSafID = viApiQPostingSafID + 1
tApiQPostingSaf.QPostingSaf_ID = viApiQPostingSafID
tApiQPostingSaf.QPostingLine_ID = viApiQPostingLineID
tApiQPostingSaf.Saf_ID = tPostingSaf.Saf_ID
tApiQPostingSaf.QPostingSafParentType = tPostingSaf.PostingSafParentType
tApiQPostingSaf.QPostingSafInputSequence = tPostingSaf.PostingSafInputSequence
tApiQPostingSaf.SafStructure_ID = tPostingSaf.SafStructure_ID
tApiQPostingSaf.tc_Rowid = string(viApiQPostingSafID)
tApiQPostingSaf.tc_ParentRowid = tApiQPostingLine.tc_Rowid
tApiQPostingSaf.tc_Status = "N":U.
if vlBankCashTrxInRealTime = TRUE and
(tPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
tPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
then do:
create tApiQPostingSafBank.
buffer-copy tApiQPostingSaf to tApiQPostingSafBank.
delete tApiQPostingSaf.
end.
end. /* for each tPostingSaf */
if vlBankCashTrxInRealTime = TRUE and
(tPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
tPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
then do:
create tApiQPostingLineBank.
buffer-copy tApiQPostingLine to tApiQPostingLineBank.
delete tApiQPostingLine.
end.
/* ==================================================================================== */
/* B.2 Negative QPostingLine with old values */
/* ==================================================================================== */
create tApiQPostingLine.
assign viApiQPostingLineID = viApiQPostingLineID + 1
tApiQPostingLine.QPostingLine_ID = viApiQPostingLineID
tApiQPostingLine.Company_ID = t_iPosting.Company_ID
tApiQPostingLine.Period_ID = t_iPosting.Period_ID
tApiQPostingLine.GL_ID = t_iPostingLine.GL_ID
tApiQPostingLine.Division_ID = t_iPostingLine.Division_ID
tApiQPostingLine.CostCentre_ID = t_iPostingLine.CostCentre_ID
tApiQPostingLine.Project_ID = t_iPostingLine.Project_ID
tApiQPostingLine.Journal_ID = t_iPosting.Journal_ID
tApiQPostingLine.Currency_ID = t_iPostingLine.Currency_ID
tApiQPostingLine.IntercoBusinessRelation_ID = t_iPostingLine.IntercoBusinessRelation_ID
tApiQPostingLine.QPostingLineDebitLC = - t_iPostingLine.PostingLineDebitLC
tApiQPostingLine.QPostingLineCreditLC = - t_iPostingLine.PostingLineCreditLC
tApiQPostingLine.QPostingLineDebitTC = - t_iPostingLine.PostingLineDebitTC
tApiQPostingLine.QPostingLineCreditTC = - t_iPostingLine.PostingLineCreditTC
tApiQPostingLine.QPostingLineDebitCC = - t_iPostingLine.PostingLineDebitCC
tApiQPostingLine.QPostingLineCreditCC = - t_iPostingLine.PostingLineCreditCC
tApiQPostingLine.QPostingLineQTY = - t_iPostingLine.PostingLineQTY
tApiQPostingLine.QPostingLineInfo = string(tPosting.PostingYear) + "/":U + string(tPosting.PostingPeriod) + "/":U + tPosting.tcJournalCode + "/":U + string(tPosting.PostingVoucher)
tApiQPostingLine.PeriodYearPeriod = t_iPosting.PostingYear * 100 + t_iPosting.PostingPeriod
tApiQPostingLine.Layer_ID = t_iPosting.tiLayer_ID
tApiQPostingLine.JournalTypeCode = t_iPosting.tcJournalTypeCode
tApiQPostingLine.tc_Rowid = string(viApiQPostingLineID)
tApiQPostingLine.tc_ParentRowid = "":U
tApiQPostingLine.tc_Status = "N":U
tApiQPostingLine.QPostingDate = t_iPostingLine.PostingDate.
/* =============================================================== */
/* Create tApiQPostingSaf records for the tApiQPostingLine records */
/* =============================================================== */
for each t_iPostingSaf where
t_iPostingSaf.tc_ParentRowid = tPostingLine.tc_Rowid and
t_iPostingSaf.tc_Status <> "D":U:
create tApiQPostingSaf.
assign viApiQPostingSafID = viApiQPostingSafID + 1
tApiQPostingSaf.QPostingSaf_ID = viApiQPostingSafID
tApiQPostingSaf.QPostingLine_ID = viApiQPostingLineID
tApiQPostingSaf.Saf_ID = t_iPostingSaf.Saf_ID
tApiQPostingSaf.QPostingSafParentType = t_iPostingSaf.PostingSafParentType
tApiQPostingSaf.QPostingSafInputSequence = t_iPostingSaf.PostingSafInputSequence
tApiQPostingSaf.SafStructure_ID = t_iPostingSaf.SafStructure_ID
tApiQPostingSaf.tc_Rowid = string(viApiQPostingSafID)
tApiQPostingSaf.tc_ParentRowid = tApiQPostingLine.tc_Rowid
tApiQPostingSaf.tc_Status = "N":U.
if vlBankCashTrxInRealTime = TRUE and
(t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
then do:
create tApiQPostingSafBank.
buffer-copy tApiQPostingSaf to tApiQPostingSafBank.
delete tApiQPostingSaf.
end.
end. /* for each t_iPostingSaf */
if vlBankCashTrxInRealTime = TRUE and
(t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-BANK} or
t_iPostingLine.tcGLTypeCode = {&GLTYPECODE-CASH})
then do:
create tApiQPostingLineBank.
buffer-copy tApiQPostingLine to tApiQPostingLineBank.
delete tApiQPostingLine.
end.
end. /* B Create tApiQPostingLine for MODIFIED lines */
/* ======================================= */
/* C Create tApiQPostingLine for NEW lines */
/* ======================================= */
if tPostingLine.tc_Status = "N":U and
tPosting.tc_Status <> "D":U
then do:
<M-42 run AdditionalUpdatesCreateQPostingLineN (output viFcReturnSuper (oiReturnStatus)) in BPosting>
if viFcReturnSuper <> 0 and viLocalReturnStatus >= 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave TEMPTABLEBLOCK.
end. /* C Create tApiQPostingLine for NEW lines */
end. /* for each tpostingline */
end. /* TEMPTABLEBLOCK */
/* ================== */
/* Exception Handling */
/* ================== */
assign oiReturnStatus = viLocalReturnStatus.