Description
This method will update the Supplier Balance and the Supplier History.
Parameters
tCredBalQCInvoiceMovement | input | temp-table | temp-table that stores the deleted QCInvoiceMovement records that need to be processed. |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program6/bcreditorbalance.p)
/* ======================================================================== */
/* This method will update the Creditor Balance and the Creditor History. */
/* These modifications will be based on the temp-table that will be passed. */
/* This temp-table holds the QCInvoiceMovement records that need to be */
/* processed. (Status = 'D') */
/* ======================================================================== */
/* ================================== */
/* Exception handling / Start queries */
/* ================================== */
assign oiReturnStatus = -98.
<Q-20 run CBalanceByCyCreditorCurrID (Start) in BCreditorBalance >
/* ==================== */
/* Start Block and loop */
/* ==================== */
QCINVOICEBLOCK:
for each tCredBalQCInvoiceMovement:
/* Replace any unknown value by 0 - although striclty spoken here might be no ? here */
if tCredBalQCInvoiceMovement.Company_ID = ?
then assign tCredBalQCInvoiceMovement.Company_ID = 0.
if tCredBalQCInvoiceMovement.CostCentre_ID = ?
then assign tCredBalQCInvoiceMovement.CostCentre_ID = 0.
if tCredBalQCInvoiceMovement.Currency_ID = ?
then assign tCredBalQCInvoiceMovement.Currency_ID = 0.
if tCredBalQCInvoiceMovement.Creditor_ID = ?
then assign tCredBalQCInvoiceMovement.Creditor_ID = 0.
if tCredBalQCInvoiceMovement.Division_ID = ?
then assign tCredBalQCInvoiceMovement.Division_ID = 0.
if tCredBalQCInvoiceMovement.GL_ID = ?
then assign tCredBalQCInvoiceMovement.GL_ID = 0.
if tCredBalQCInvoiceMovement.Journal_ID = ?
then assign tCredBalQCInvoiceMovement.Journal_ID = 0.
if tCredBalQCInvoiceMovement.Period_ID = ?
then assign tCredBalQCInvoiceMovement.Period_ID = 0.
if tCredBalQCInvoiceMovement.Project_ID = ?
then assign tCredBalQCInvoiceMovement.Project_ID = 0.
/* ==================================================================== */
/* Check if a CBalance-record exists for this company/creditor/currency */
/* Load when it exists; if it does not exist, create it. */
/* ==================================================================== */
<Q-1 run CBalanceByCyCreditorCurrID (all) (Read) (Cache)
(input tCredBalQCInvoiceMovement.Company_ID, (CompanyId)
input tCredBalQCInvoiceMovement.Creditor_ID, (Creditor_ID)
input tCredBalQCInvoiceMovement.Currency_ID, (Currency_ID)
input ?, (CBalance_ID)
output dataset tqCBalanceByCyCreditorCurrID) in BCreditorBalance >
find tqCBalanceByCyCreditorCurrID where
tqCBalanceByCyCreditorCurrID.tiCompany_ID = tCredBalQCInvoiceMovement.Company_ID and
tqCBalanceByCyCreditorCurrID.tiCreditor_ID = tCredBalQCInvoiceMovement.Creditor_ID and
tqCBalanceByCyCreditorCurrID.tiCurrency_ID = tCredBalQCInvoiceMovement.Currency_ID
no-lock no-error.
if not available tqCBalanceByCyCreditorCurrID
then do:
<M-2 run AddDetailLine
(input 'CBalance':U (icTable),
input ? (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave QCINVOICEBLOCK.
assign tCBalance.Company_ID = tCredBalQCInvoiceMovement.Company_ID
tCBalance.Creditor_ID = tCredBalQCInvoiceMovement.Creditor_ID
tCBalance.Currency_ID = tCredBalQCInvoiceMovement.Currency_ID.
end. /* CBalance does not exist yet */
else do:
<M-3 run DataLoad
(input ? (icRowids),
input string(tqCBalanceByCyCreditorCurrID.tiCBalance_ID) (icPkeys),
input ? (icObjectIds),
input '' (icFreeform),
input true (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave QCINVOICEBLOCK.
find tCBalance where
tCBalance.CBalance_ID = tqCBalanceByCyCreditorCurrID.tiCBalance_ID
no-lock no-error.
if not available tCBalance
then do:
assign vcCreditorBalanceMsg = trim(#T-29'The supplier balance could not be loaded.':255(1454)t-29#) + chr(10) +
trim(substitute(#T-30'Supplier Balance ID: &1.':150(1455)T-30#, trim(string(tqCBalanceByCyCreditorCurrID.tiCBalance_ID)) ))
viLocalReturnStatus = -3.
<M-4 run SetMessage
(input vcCreditorBalanceMsg (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input string(tqCBalanceByCyCreditorCurrID.tiCBalance_ID) (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-1253':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
leave QCINVOICEBLOCK.
end.
assign tCBalance.tc_Status = 'C':U.
end. /* CBalance does already exist */
/* =========================== */
/* assign the CBalance-amounts */
/* =========================== */
assign tCBalance.CBalanceLC = tCBalance.CBalanceLC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCBalance.CBalanceTC = tCBalance.CBalanceTC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCBalance.CBalanceCC = tCBalance.CBalanceCC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC.
/* ================ */
/* CREDITOR HISTORY */
/* ================ */
/* =================== */
/* Get the Year/Period */
/* =================== */
if tCredBalQCInvoiceMovement.MovementYearPeriod = 0 or
tCredBalQCInvoiceMovement.MovementYearPeriod = ?
then do :
if vlStartedPeriodPrim = false
then do :
<Q-33 run PeriodPrim (Start) in BPeriod >
assign vlStartedPeriodPrim = true.
end. /* if vlStartedPeriodPrim = false */
<Q-5 run PeriodPrim (all) (Read) (Cache)
(input tCredBalQCInvoiceMovement.Company_ID, (CompanyId)
input tCredBalQCInvoiceMovement.Period_ID, (PeriodId)
input ?, (PeriodYear)
input ?, (PeriodPeriod)
output dataset tqPeriodPrim) in BPeriod >
find tqPeriodPrim where
tqPeriodPrim.tiCompany_ID = tCredBalQCInvoiceMovement.Company_ID and
tqPeriodPrim.tiPeriod_ID = tCredBalQCInvoiceMovement.Period_ID
no-lock no-error.
if not available tqPeriodPrim
then do:
assign vcCreditorBalanceMsg = trim(#T-31'The GL period specified is not defined in the system.':255(1456)t-31#) + chr(10) +
trim(substitute(#T-32'GL period ID: &1.':150(1457)T-32#, trim(string(tCredBalQCInvoiceMovement.Period_ID)) ))
viLocalReturnStatus = -25.
<M-6 run SetMessage
(input vcCreditorBalanceMsg (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input string(tCredBalQCInvoiceMovement.Period_ID) (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QADFIN-1254':U (icFcMsgNumber),
input '' (icFcExplanation),
input '' (icFcIdentification),
input '' (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
leave QCINVOICEBLOCK.
end.
assign viYearPeriod = tqPeriodPrim.tiPeriodYear * 100 + tqPeriodPrim.tiPeriodPeriod.
end. /* if tCredBalQCInvoiceMovement.MovementYearPeriod = 0 or */
else assign viYearPeriod = tCredBalQCInvoiceMovement.MovementYearPeriod.
/* ======================== */
/* Calculate the VAT amount */
/* ======================== */
assign vdVatAmountTC = tCredBalQCInvoiceMovement.CInvoiceMovementVatDebTC - tCredBalQCInvoiceMovement.CInvoiceMovementVatCredTC
vdVatAmountLC = tCredBalQCInvoiceMovement.CInvoiceMovementVatDebLC - tCredBalQCInvoiceMovement.CInvoiceMovementVatCredLC
vdVatAmountCC = tCredBalQCInvoiceMovement.CInvoiceMovementVatDebCC - tCredBalQCInvoiceMovement.CInvoiceMovementVatCredCC.
/* ===================================================================== */
/* Look for the CHist-records for this creditor for this period or later */
/* ===================================================================== */
find tCHist where
tCHist.Company_ID = tCredBalQCInvoiceMovement.Company_ID and
tCHist.Creditor_ID = tCredBalQCInvoiceMovement.Creditor_ID and
tCHist.Currency_ID = tCredBalQCInvoiceMovement.Currency_ID and
tCHist.GL_ID = tCredBalQCInvoiceMovement.GL_ID and
tCHist.Division_ID = tCredBalQCInvoiceMovement.Division_ID and
tCHist.Project_ID = tCredBalQCInvoiceMovement.Project_ID and
tCHist.Journal_ID = tCredBalQCInvoiceMovement.Journal_ID and
tCHist.CostCentre_ID = tCredBalQCInvoiceMovement.CostCentre_ID and
tCHist.CHistYearPeriodFrom <= viYearPeriod and
tCHist.CHistYearPeriodTill >= viYearPeriod and
tCHist.tc_Status <> 'D':U
no-error.
if not available tCHist /* No current history record found */
then do:
/* ===================== */
/* Create History Record */
/* ===================== */
<M-8 run AddDetailLine
(input 'CHist':U (icTable),
input tCBalance.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave QCINVOICEBLOCK.
ASSIGN viPrevYearPeriod = 0.
FOR EACH bChist where
bCHist.Company_ID = tCredBalQCInvoiceMovement.Company_ID and
bCHist.Creditor_ID = tCredBalQCInvoiceMovement.Creditor_ID and
bCHist.Currency_ID = tCredBalQCInvoiceMovement.Currency_ID and
bCHist.GL_ID = tCredBalQCInvoiceMovement.GL_ID and
bCHist.Division_ID = tCredBalQCInvoiceMovement.Division_ID and
bCHist.Project_ID = tCredBalQCInvoiceMovement.Project_ID and
bCHist.Journal_ID = tCredBalQCInvoiceMovement.Journal_ID and
bCHist.CostCentre_ID = tCredBalQCInvoiceMovement.CostCentre_ID and
bCHist.CHistYearPeriodFrom > viYearPeriod and
bCHist.tc_Status <> 'D':U
NO-LOCK
by bCHist.CHistYearPeriodFrom DESCENDING :
ASSIGN viPrevYearPeriod = bCHist.CHistYearPeriodFrom.
END.
if viPrevYearPeriod <> 0 /* History record found with later starting period */
then assign viPrevYearPeriod = viPrevYearPeriod - 1.
else assign viPrevYearPeriod = 999999.
ASSIGN tCHist.CBalance_ID = tCBalance.CBalance_ID
tCHist.Company_ID = tCredBalQCInvoiceMovement.Company_ID
tCHist.Creditor_ID = tCredBalQCInvoiceMovement.Creditor_ID
tCHist.Currency_ID = tCredBalQCInvoiceMovement.Currency_ID
tCHist.GL_ID = tCredBalQCInvoiceMovement.GL_ID
tCHist.Division_ID = tCredBalQCInvoiceMovement.Division_ID
tCHist.Project_ID = tCredBalQCInvoiceMovement.Project_ID
tCHist.Journal_ID = tCredBalQCInvoiceMovement.Journal_ID
tCHist.CostCentre_ID = tCredBalQCInvoiceMovement.CostCentre_ID
tCHist.CHistYearPeriodFrom = viYearPeriod
tCHist.CHistYearPeriodTill = viPrevYearPeriod
tCHist.CHistBalanceLC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCHist.CHistBalanceTC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCHist.CHistBalanceCC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC
tCHist.CHistMovementCreditLC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCHist.CHistMovementCreditTC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCHist.CHistMovementCreditCC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC
tCHist.CHistMovementDebitLC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC
tCHist.CHistMovementDebitTC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC
tCHist.CHistMovementDebitCC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC.
/* vdVatAmountTC is a debit amount and therefore > 0 */
if tCredBalQCInvoiceMovement.CInvoiceMovementType = 'INITIAL':U and tCredBalQCInvoiceMovement.CInvoiceMovementIsInvoice
then assign tCHist.CHistNettoInvoiceLC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC - vdVatAmountLC
tCHist.CHistNettoInvoiceTC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC - vdVatAmountTC
tCHist.CHistNettoInvoiceCC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC - vdVatAmountCC
tCHist.CHistGrossInvoiceLC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCHist.CHistGrossInvoiceTC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCHist.CHistGrossInvoiceCC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC.
/* vdVatAmountTC is a credit amount and therefore < 0 */
if tCredBalQCInvoiceMovement.CInvoiceMovementType = 'INITIAL':U and tCredBalQCInvoiceMovement.CInvoiceMovementIsCreditN
then assign tCHist.CHistNettoCredNoteLC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC + vdVatAmountLC
tCHist.CHistNettoCredNoteTC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC + vdVatAmountTC
tCHist.CHistNettoCredNoteCC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC + vdVatAmountCC
tCHist.CHistGrossCredNoteLC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC
tCHist.CHistGrossCredNoteTC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC
tCHist.CHistGrossCredNoteCC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC.
/* Assign CHist values */
<M-19 run UpdateCBalanceAndCHistAssignCHist
(input viYearPeriod (iiYearPeriod),
input tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC - tcredBalQCInvoiceMovement.CInvoiceMovementCreditLC (idCHistBalanceLC),
input tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC - tcredBalQCInvoiceMovement.CInvoiceMovementCreditTC (idCHistBalanceTC),
input tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC - tcredBalQCInvoiceMovement.CInvoiceMovementCreditCC (idCHistBalanceCC),
input tCHist.Project_ID (iiProject),
input tCHist.CostCentre_ID (iiCostCentre),
input tCHist.Division_ID (iiDivision),
input tCHist.Journal_ID (iiJournal),
input tCHist.GL_ID (iiGL),
output viLocalReturnStatus (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave QCINVOICEBLOCK.
end. /* not available tCHist */
else do:
assign tCHist.tc_Status = 'C':U.
if tCHist.CHistYearPeriodFrom = viYearPeriod
then do:
assign tCHist.CHistBalanceLC = tCHist.CHistBalanceLC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCHist.CHistBalanceTC = tCHist.CHistBalanceTC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCHist.CHistBalanceCC = tCHist.CHistBalanceCC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC
tCHist.CHistMovementCreditLC = tCHist.CHistMovementCreditLC + tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCHist.CHistMovementCreditTC = tCHist.CHistMovementCreditTC + tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCHist.CHistMovementCreditCC = tCHist.CHistMovementCreditCC + tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC
tCHist.CHistMovementDebitLC = tCHist.CHistMovementDebitLC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC
tCHist.CHistMovementDebitTC = tCHist.CHistMovementDebitTC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC
tCHist.CHistMovementDebitCC = tCHist.CHistMovementDebitCC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC.
/* vdVatAmountTC is a debit amount and therefore > 0 */
if tCredBalQCInvoiceMovement.CInvoiceMovementType = 'INITIAL':U and tCredBalQCInvoiceMovement.CInvoiceMovementIsInvoice
then assign tCHist.CHistNettoInvoiceLC = tCHist.CHistNettoInvoiceLC + tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC - vdVatAmountLC
tCHist.CHistNettoInvoiceTC = tCHist.CHistNettoInvoiceTC + tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC - vdVatAmountTC
tCHist.CHistNettoInvoiceCC = tCHist.CHistNettoInvoiceCC + tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC - vdVatAmountCC
tCHist.CHistGrossInvoiceLC = tCHist.CHistGrossInvoiceLC + tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCHist.CHistGrossInvoiceTC = tCHist.CHistGrossInvoiceTC + tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCHist.CHistGrossInvoiceCC = tCHist.CHistGrossInvoiceCC + tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC.
/* vdVatAmountTC is a credit amount and therefore < 0 */
if tCredBalQCInvoiceMovement.CInvoiceMovementType = 'INITIAL':U and tCredBalQCInvoiceMovement.CInvoiceMovementIsCreditN
then assign tCHist.CHistNettoCredNoteLC = tCHist.CHistNettoCredNoteLC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC + vdVatAmountLC
tCHist.CHistNettoCredNoteTC = tCHist.CHistNettoCredNoteTC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC + vdVatAmountTC
tCHist.CHistNettoCredNoteCC = tCHist.CHistNettoCredNoteCC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC + vdVatAmountCC
tCHist.CHistGrossCredNoteLC = tCHist.CHistGrossCredNoteLC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC
tCHist.CHistGrossCredNoteTC = tCHist.CHistGrossCredNoteTC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC
tCHist.CHistGrossCredNoteCC = tCHist.CHistGrossCredNoteCC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC.
<M-18 run UpdateCBalanceAndCHistAssignCHist
(input viYearPeriod (iiYearPeriod),
input tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC - tcredBalQCInvoiceMovement.CInvoiceMovementCreditLC (idCHistBalanceLC),
input tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC - tcredBalQCInvoiceMovement.CInvoiceMovementCreditTC (idCHistBalanceTC),
input tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC - tcredBalQCInvoiceMovement.CInvoiceMovementCreditCC (idCHistBalanceCC),
input tCHist.Project_ID (iiProject),
input tCHist.CostCentre_ID (iiCostCentre),
input tCHist.Division_ID (iiDivision),
input tCHist.Journal_ID (iiJournal),
input tCHist.GL_ID (iiGL),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave QCINVOICEBLOCK.
end. /* if tCHist.CHistYearPeriodFrom = viYearPeriod */
else do:
assign viPrevYearPeriod = tCHist.CHistYearPeriodTill
vdCHistBalanceLC = tCHist.CHistBalanceLC
vdCHistBalanceTC = tCHist.CHistBalanceTC
vdCHistBalanceCC = tCHist.CHistBalanceCC
tCHist.CHistYearPeriodTill = viYearPeriod - 1.
<M-16 run AddDetailLine
(input 'CHist':U (icTable),
input tCBalance.tc_Rowid (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave QCINVOICEBLOCK.
assign tCHist.CBalance_ID = tCBalance.CBalance_ID
tCHist.Company_ID = tCredBalQCInvoiceMovement.Company_ID
tCHist.Creditor_ID = tCredBalQCInvoiceMovement.Creditor_ID
tCHist.Currency_ID = tCredBalQCInvoiceMovement.Currency_ID
tCHist.GL_ID = tCredBalQCInvoiceMovement.GL_ID
tCHist.Division_ID = tCredBalQCInvoiceMovement.Division_ID
tCHist.Project_ID = tCredBalQCInvoiceMovement.Project_ID
tCHist.Journal_ID = tCredBalQCInvoiceMovement.Journal_ID
tCHist.CostCentre_ID = tCredBalQCInvoiceMovement.CostCentre_ID
tCHist.CHistYearPeriodFrom = viYearPeriod
tCHist.CHistYearPeriodTill = viPrevYearPeriod
tCHist.CHistBalanceLC = vdCHistBalanceLC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCHist.CHistBalanceTC = vdCHistBalanceTC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCHist.CHistBalanceCC = vdCHistBalanceCC + tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC - tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC
tCHist.CHistMovementCreditLC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCHist.CHistMovementCreditTC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCHist.CHistMovementCreditCC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC
tCHist.CHistMovementDebitLC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC
tCHist.CHistMovementDebitTC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC
tCHist.CHistMovementDebitCC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC.
/* vdVatAmountTC is a debit amount and therefore > 0 */
if tCredBalQCInvoiceMovement.CInvoiceMovementType = 'INITIAL':U and tCredBalQCInvoiceMovement.CInvoiceMovementIsInvoice
then assign tCHist.CHistNettoInvoiceLC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC - vdVatAmountLC
tCHist.CHistNettoInvoiceTC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC - vdVatAmountTC
tCHist.CHistNettoInvoiceCC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC - vdVatAmountCC
tCHist.CHistGrossInvoiceLC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditLC
tCHist.CHistGrossInvoiceTC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditTC
tCHist.CHistGrossInvoiceCC = tCredBalQCInvoiceMovement.CInvoiceMovementCreditCC.
/* vdVatAmountTC is a credit amount and therefore < 0 */
if tCredBalQCInvoiceMovement.CInvoiceMovementType = 'INITIAL':U and tCredBalQCInvoiceMovement.CInvoiceMovementIsCreditN
then assign tCHist.CHistNettoCredNoteLC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC + vdVatAmountLC
tCHist.CHistNettoCredNoteTC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC + vdVatAmountTC
tCHist.CHistNettoCredNoteCC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC + vdVatAmountCC
tCHist.CHistGrossCredNoteLC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC
tCHist.CHistGrossCredNoteTC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC
tCHist.CHistGrossCredNoteCC = tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC.
<M-17 run UpdateCBalanceAndCHistAssignCHist
(input viYearPeriod (iiYearPeriod),
input tCredBalQCInvoiceMovement.CInvoiceMovementDebitLC - tcredBalQCInvoiceMovement.CInvoiceMovementCreditLC (idCHistBalanceLC),
input tCredBalQCInvoiceMovement.CInvoiceMovementDebitTC - tcredBalQCInvoiceMovement.CInvoiceMovementCreditTC (idCHistBalanceTC),
input tCredBalQCInvoiceMovement.CInvoiceMovementDebitCC - tcredBalQCInvoiceMovement.CInvoiceMovementCreditCC (idCHistBalanceCC),
input tCHist.Project_ID (iiProject),
input tCHist.CostCentre_ID (iiCostCentre),
input tCHist.Division_ID (iiDivision),
input tCHist.Journal_ID (iiJournal),
input tCHist.GL_ID (iiGL),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then leave QCINVOICEBLOCK.
end. /* Not if tCHist.CHistYearPeriodFrom = viYearPeriod */
end. /* History record found for this period */
end. /* for each tCredBalQCInvoiceMovement no-lock: + Block */
/* ============ */
/* Stop Queries */
/* ============ */
<Q-24 run CBalanceByCyCreditorCurrID (Stop) in BCreditorBalance >
if vlStartedPeriodPrim = true
then do :
<Q-25 run PeriodPrim (Stop) in BPeriod >
end. /* if vlStartedPeriodPrim = true */
/* ================ */
/* Check for errors */
/* ================ */
assign oiReturnStatus = viLocalReturnStatus.
if oiReturnStatus <> 0
then return.
/* ============ */
/* Validation */
/* ============ */
<M-26 run ValidateBC (output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
/* ============ */
/* AddUpd */
/* ============ */
<M-28 run AdditionalUpdates (output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.