| icCompanyCode | input | character | Company wherefor you want to do the rebuild (Optional) |
| icCreditorCode | input | character | Supplier wherefor you want to do the rebuild (Optional) - note that in case icCompanyCode was filled, the supplier shoudl exist for that company. |
| icCurrencyCode | input | character | Currency wherefor you want to do the rebuild (Optional) |
| iiFromPeriodYear | input | integer | Period-year from where you want to do the rebuild (Optional) - note that in case icCompanyCode was filled, the period should exist for that company. |
| iiFromPeriodPeriod | input | integer | Period-period from where you want to do the rebuild (Optional) Note that in case icCompanyCode was filled, the period should exist for that company. Note that this paramater can only be filled in case period-year was also filled |
| tCHistRebuildResult | output | temp-table | Temp table with the rebuild result |
| oiReturnStatus | output | integer | Return status of the method. |
/* ===================================== */
/* Initialisation and Exception handling */
/* ===================================== */
assign oiReturnStatus = -98.
empty temp-table tCHistRebuildResult.
/* ================================================================================================= */
/* Validate: no transaction should be active at this moment because this method needs to do several */
/* commits itself as every loop on tqCBalanceByCompanyCreditorCurr needs to have its own transaction */
/* ================================================================================================= */
if viTransactionID <> 0 and
viTransactionID <> ?
then do :
assign oiReturnStatus = -1
vcMessage = trim(substitute(#T-5'Internal error: the rebuild cannot be started when a transaction is already active.':255(65597)t-5#)).
<M-4 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-7203':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
Return.
end. /* if viTransactionID <> 0 and */
/* ============= */
/* Start Block */
/* ============= */
MAJORBLOCK: DO :
/* ========================================================================================= */
/* Input parameter validations: */
/* - Company and currency should exist when filled */
/* - Supplier wherefor you want to do the rebuild (Optional) */
/* (note that in case icCompanyCode was filled, the supplier shoudl exist for that company) */
/* - Period-year from where you want to do the rebuild (Optional) */
/* (note that in case icCompanyCode was filled, the period should exist for that company) */
/* - Period-period from where you want to do the rebuild (Optional) */
/* (note that in case icCompanyCode was filled, the period should exist for that company) */
/* (note that this paramater can only be filled in case period-year was also filled) */
/* ========================================================================================= */
<M-1 run RebuildHistoryValidateInputCheckDaemon
(input-output icCompanyCode (bcCompanyCode),
input-output icCreditorCode (bcCreditorCode),
input-output icCurrencyCode (bcCurrencyCode),
input-output iiFromPeriodYear (biFromPeriodYear),
input-output iiFromPeriodPeriod (biFromPeriodPeriod),
output viResolvedCompanyID (oiResolvedCompanyID),
output viResolvedCreditorID (oiResolvedCreditorID),
output viResolvedCurrencyID (oiResolvedCurrencyID),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then Leave MAJORBLOCK.
/* =========================================================== */
/* Query call to read the CBal-records that need to be removed */
/* =========================================================== */
<Q-2 run CBalanceByCompanyCreditorCurr (all) (Read) (NoCache)
(input viResolvedCompanyID, (CompanyID)
input viResolvedCreditorID, (CreditorID)
input viResolvedCurrencyID, (CurrencyID)
input ?, (CBalanceID)
input icCompanyCode, (CompanyCode)
input icCreditorCode, (CreditorCode)
input icCurrencyCode, (CurrencyCode)
output dataset tqCBalanceByCompanyCreditorCurr) in BCreditorBalance >
/* ============================================================ */
/* Go through all read CBal records (Company/Creditor/Currency) */
/* ============================================================ */
for each tqCBalanceByCompanyCreditorCurr :
/* ============= */
/* Start Block */
/* ============= */
MINORONEBLOCK: DO :
/* =========================================================== */
/* Create an output record with the indication 'unknown error' */
/* Clear the tFcMessages to make sure we start clean */
/* =========================================================== */
empty temp-table tFcMessages.
Create tCHistRebuildResult.
assign tCHistRebuildResult.tcTopic = tqCBalanceByCompanyCreditorCurr.tcCompanyCode + "/":U + tqCBalanceByCompanyCreditorCurr.tcCreditorCode + "/":U + tqCBalanceByCompanyCreditorCurr.tcCurrencyCode + ": ":U + trim(#T-32'Remove old balance':255(69685)T-32#)
tCHistRebuildResult.tcResult = trim(#T-3'Internal error: unknown error occurred.':255(65596)t-3#)
viMinorBlockOneReturnStatus = 0.
/* ================= */
/* Load the instance */
/* ================= */
<M-6 run DataLoad
(input ? (icRowids),
input string(tqCBalanceByCompanyCreditorCurr.ticbalance_ID) (icPkeys),
input ? (icObjectIds),
input ? (icFreeform),
input false (ilKeepPrevious),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viMinorBlockOneReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then Leave MINORONEBLOCK.
find tCBalance where
tCBalance.CBalance_ID = tqCBalanceByCompanyCreditorCurr.tiCBalance_ID
no-error.
if not available tCBalance
then do :
assign viMinorBlockOneReturnStatus = -3
vcMessage = trim(substitute(#T-24'Internal error. The rebuild failed because the system cannot find the balance record based on its ID (&1).':255(69669)t-24#,string(tqCBalanceByCompanyCreditorCurr.ticbalance_ID))).
<M-25 run SetMessage
(input vcMessage (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-8246':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
Leave MINORONEBLOCK.
end. /* if not available tCBalance */
/* =========================================================================== */
/* Mark the instance - or part of it in case a period was entered - as deleted */
/* If only part of it gets deleted, then change the CHist and CBlance record */
/* =========================================================================== */
if iiFromPeriodYear = 0
then assign tCBalance.tc_Status = "D":U.
else do :
/* Mark the later CHists as deleted */
for each tCHist where
tCHist.tc_ParentRowid = tCBalance.tc_Rowid and
tCHist.CHistYearPeriodFrom >= iiFromPeriodYear * 100 + iiFromPeriodPeriod and
tCHist.tc_Status <> "D":U :
assign tCHist.tc_Status = "D":U.
end. /* for each tCHist where */
assign tCBalance.CBalanceTC = 0
tCBalance.CBalanceLC = 0
tCBalance.CBalanceCC = 0
tCBalance.tc_Status = "C":U.
for each tCHist where
tCHist.tc_ParentRowid = tCBalance.tc_Rowid and
tCHist.tc_Status <> "D":U
break by tCHist.Company_ID
by tCHist.Creditor_ID
by tCHist.Currency_ID
by tCHist.Journal_ID
by tCHist.GL_ID
by tCHist.Division_ID
by tCHist.Project_ID
by tCHist.CostCentre_ID
by tCHist.CHistYearperiodFrom desc:
if first-of(tCHist.CostCentre_ID)
then do:
assign tCHist.CHistYearPeriodTill = 999999
tCHist.tc_Status = "C":U
tCBalance.CBalanceTC = tCBalance.CBalanceTC + tCHist.CHistBalanceTC
tCBalance.CBalanceLC = tCBalance.Cbalancelc + tCHist.CHistBalanceLC
tCBalance.CBalanceCC = tCBalance.CBalanceCC + tCHist.CHistBalanceCC.
tCBalance.tc_Status = "C":U.
end. /* first-of */
end. /* for each tCHist where */
end. /* Not if iiFromPeriodYear = 0 */
/* ============================================ */
/* ValidateBC, AddUpd and DataSave (commit trx) */
/* ============================================ */
<M-26 run ValidateBC (output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viMinorBlockOneReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then Leave MINORONEBLOCK.
<M-27 run AdditionalUpdates (output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viMinorBlockOneReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then Leave MINORONEBLOCK.
<M-28 run DataSave (output viFcReturnSuper (oiReturnStatus)) in BCreditorBalance>
if viFcReturnSuper <> 0
then assign viMinorBlockOneReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then Leave MINORONEBLOCK.
/* ============= */
/* End Block */
/* ============= */
END. /* MINORONEBLOCK */
/* ================================================================= */
/* Error Handling: keep track and store any errors/warnings occured */
/* ================================================================= */
if viMinorBlockOneReturnStatus = 0
then assign tCHistRebuildResult.tcResult = trim(#T-29'Correctly processed':255(65598)T-29#).
else do :
/* Add general result to the result temp-table */
if viMinorBlockOneReturnStatus > 0
then assign tCHistRebuildResult.tcResult = trim(#T-30'Warning occurred:':255(65599)t-30#) + " ":U + string(viMinorBlockOneReturnStatus).
else assign tCHistRebuildResult.tcResult = trim(#T-31'Error occurred.':255(65600)t-31#) + " ":U + string(viMinorBlockOneReturnStatus).
/* Add the messages to the result temp-table */
for each tFcMessages :
assign tCHistRebuildResult.tcResult = tCHistRebuildResult.tcResult + chr(10) +
tFcMessages.tcFcMsgNumber + "; ":U + tFcMessages.tcFcMessage.
end. /* for each tFcMessages */
/* Put the return of this single transaction to the return of the method */
if viMinorBlockOneReturnStatus < viLocalReturnStatus
then assign viLocalReturnStatus = viMinorBlockOneReturnStatus.
end. /* if viMinorBlockOneReturnStatus <> 0 */
end. /* for each tqCBalanceByCompanyCreditorCurr */
/* ===================== */
/* Read the CI-movements */
/* ===================== */
<Q-10 run CInvoiceMovementForHistRebuild (all) (Read) (NoCache)
(input viResolvedCompanyID, (CompanyId)
input viResolvedCreditorID, (CreditorID)
input iiFromPeriodYear * 100 + iiFromPeriodPeriod, (FromPeriodYearPeriod)
input viResolvedCurrencyID, (CurrencyID)
input icCompanyCode, (CompanyCode)
input icCreditorCode, (CreditorCode)
input icCurrencyCode, (CurrencyCode)
output dataset tqCInvoiceMovementForHistRebuild) in BCInvoice >
/* ============================================================= */
/* Go through all read CiMov records (Company/Creditor/Currency) */
/* ============================================================= */
for each tqCInvoiceMovementForHistRebuild
break by tqCInvoiceMovementForHistRebuild.tiCompany_ID
by tqCInvoiceMovementForHistRebuild.tiCreditor_ID
by tqCInvoiceMovementForHistRebuild.tiCInvoiceCurrency_ID :
/* ============================================================================ */
/* if first-of then Create an output record with the indication 'unknown error' */
/* Clear the tFcMessages to make sure we start clean */
/* Stop the external instance */
/* ============================================================================ */
if first-of (tqCInvoiceMovementForHistRebuild.tiCInvoiceCurrency_ID)
then do :
/* =========================================================== */
/* Create an output record with the indication 'unknown error' */
/* Clear the tFcMessages to make sure we start clean */
/* Stop the external instance and reset the counter and status */
/* =========================================================== */
empty temp-table tFcMessages.
Create tCHistRebuildResult.
assign tCHistRebuildResult.tcTopic = tqCInvoiceMovementForHistRebuild.tcCompanyCode + "/":U + tqCInvoiceMovementForHistRebuild.tcCreditorCode + "/":U + tqCInvoiceMovementForHistRebuild.tcCurrencyCode + ": ":U + trim(#T-35'Building up new balance.':255(69686)t-35#)
tCHistRebuildResult.tcResult = trim(#T-36'Internal error: unknown error occurred.':255(65596)t-36#)
viCIMovementBlockReturnStatus = 0
viQCInvoiceMovementNewRebuildSq = 0.
if viBQCInvoiceMovementForCBalID <> 0 and
viBQCInvoiceMovementForCBalID <> ?
then do :
<I-34 {bFcStopInstance
&CLASS = "BQCInvoiceMovement"}>
assign viBQCInvoiceMovementForCBalID = 0.
end. /* if viBQCInvoiceMovementForCBalID <> 0 and */
empty temp-table tQCInvoiceMovementNewRebuild.
end. /* if first-of (tqCInvoiceMovementForHistRebuild.tiCInvoiceCurrency_ID) */
/* =================== */
/* Create Q-tt-records */
/* =================== */
if viCIMovementBlockReturnStatus >= 0
then do :
create tQCInvoiceMovementNewRebuild.
assign viQCInvoiceMovementNewRebuildSq = viQCInvoiceMovementNewRebuildSq + 1
tQCInvoiceMovementNewRebuild.tc_Rowid = string(viQCInvoiceMovementNewRebuildSq)
tQCInvoiceMovementNewRebuild.Company_ID = tqCInvoiceMovementForHistRebuild.tiCompany_ID
tQCInvoiceMovementNewRebuild.Creditor_ID = tqCInvoiceMovementForHistRebuild.tiCreditor_ID
tQCInvoiceMovementNewRebuild.Currency_ID = tqCInvoiceMovementForHistRebuild.tiCInvoiceCurrency_ID
tQCInvoiceMovementNewRebuild.Period_ID = tqCInvoiceMovementForHistRebuild.tiPeriod_ID
tQCInvoiceMovementNewRebuild.CInvoiceMovementDebitLC = tqCInvoiceMovementForHistRebuild.tdPostingLineDebitLC
tQCInvoiceMovementNewRebuild.CInvoiceMovementCreditLC = tqCInvoiceMovementForHistRebuild.tdPostingLineCreditLC
tQCInvoiceMovementNewRebuild.CInvoiceMovementDebitTC = tqCInvoiceMovementForHistRebuild.tdPostingLineDebitTC
tQCInvoiceMovementNewRebuild.CInvoiceMovementCreditTC = tqCInvoiceMovementForHistRebuild.tdPostingLineCreditTC
tQCInvoiceMovementNewRebuild.CInvoiceMovementDebitCC = tqCInvoiceMovementForHistRebuild.tdPostingLineDebitCC
tQCInvoiceMovementNewRebuild.CInvoiceMovementCreditCC = tqCInvoiceMovementForHistRebuild.tdPostingLineCreditCC
tQCInvoiceMovementNewRebuild.CInvoiceMovementVatDebTC = if tqCInvoiceMovementForHistRebuild.tcCInvoiceMovementType = {&MOVEMENTTYPE-INITIAL}
then tqCInvoiceMovementForHistRebuild.tdCInvoiceVatDebitTC
else 0
tQCInvoiceMovementNewRebuild.CInvoiceMovementVatCredTC = if tqCInvoiceMovementForHistRebuild.tcCInvoiceMovementType = {&MOVEMENTTYPE-INITIAL}
then tqCInvoiceMovementForHistRebuild.tdCInvoiceVatCreditTC
else 0
tQCInvoiceMovementNewRebuild.CInvoiceMovementIsInvoice = if tqCInvoiceMovementForHistRebuild.tcCInvoiceType = {&INVOICETYPE-INVOICE} or tqCInvoiceMovementForHistRebuild.tcCInvoiceType = {&INVOICETYPE-INVOICECORRECTION}
then true
else false
tQCInvoiceMovementNewRebuild.CInvoiceMovementIsCreditN = if tqCInvoiceMovementForHistRebuild.tcCInvoiceType = {&INVOICETYPE-CREDITNOTE} or tqCInvoiceMovementForHistRebuild.tcCInvoiceType = {&INVOICETYPE-CREDITNOTECORRECTION}
then true
else false
tQCInvoiceMovementNewRebuild.tdExchangeRate = tqCInvoiceMovementForHistRebuild.tdCInvoiceExchangeRate
tQCInvoiceMovementNewRebuild.tdExchangeRateScale = tqCInvoiceMovementForHistRebuild.tdCinvoiceRateScale
tQCInvoiceMovementNewRebuild.ttValidityDate = tqCInvoiceMovementForHistRebuild.ttCInvoiceTaxPointDate
tQCInvoiceMovementNewRebuild.CInvoiceMovementType = tqCInvoiceMovementForHistRebuild.tcCInvoiceMovementType
tQCInvoiceMovementNewRebuild.CInvoiceMovementInfo = trim(string(tqCInvoiceMovementForHistRebuild.tiCInvoiceMovementYearPeriod)) + '/':U +
trim(tqCInvoiceMovementForHistRebuild.tcJournalCode) + '/':U +
trim(string(tqCInvoiceMovementForHistRebuild.tiPostingVoucher))
tQCInvoiceMovementNewRebuild.GL_ID = tqCInvoiceMovementForHistRebuild.tiGL_ID
tQCInvoiceMovementNewRebuild.Division_ID = tqCInvoiceMovementForHistRebuild.tiDivision_ID
tQCInvoiceMovementNewRebuild.Project_ID = tqCInvoiceMovementForHistRebuild.tiProject_ID
tQCInvoiceMovementNewRebuild.Journal_ID = tqCInvoiceMovementForHistRebuild.tiJournal_ID
tQCInvoiceMovementNewRebuild.CostCentre_ID = tqCInvoiceMovementForHistRebuild.tiCostCentre_ID
tQCInvoiceMovementNewRebuild.MovementYearPeriod = tqCInvoiceMovementForHistRebuild.tiCInvoiceMovementYearPeriod.
end. /* if viCIMovementBlockReturnStatus >= 0 */
/* ============================= */
/* Actions for the last-of CIMov */
/* ============================= */
if last-of (tqCInvoiceMovementForHistRebuild.tiCInvoiceCurrency_ID)
then do :
/* ============================= */
/* Call to BQCinvoiceMovement */
/* ============================= */
if viCIMovementBlockReturnStatus >= 0
then do :
if can-find (first tQCInvoiceMovementNewRebuild)
then do:
if viBQCInvoiceMovementForCBalID = 0 or
viBQCInvoiceMovementForCBalID = ?
then do :
<I-11 {bFcStartAndOpenInstance
&ADD-TO-TRANSACTION = "false"
&CLASS = "BQCInvoiceMovement"}>
end. /* if viBQCInvoiceMovementForCBalID = 0 or */
else do :
<I-12 {bFcOpenInstance
&CLASS = "BQCInvoiceMovement"}>
end. /* Not if viBQCInvoiceMovementForCBalID = 0 or */
<M-13 run ApiCreateQCInvoiceMovement
(input tQCInvoiceMovementNewRebuild (tAPIQCInvoiceMovement),
input {&EXCHANGERATETYPE-ACCOUNTING} (icExchangeRateTypeCode),
output viExternalReturnStatus (oiReturnStatus)) in BQCInvoiceMovement>
<I-37 {bFcCloseAndStopInstance
&CLASS = "BQCInvoiceMovement"}>
if viExternalReturnStatus <> 0
then assign viCIMovementBlockReturnStatus = viExternalReturnStatus.
end. /* if can-find */
end. /* if viMinorBlockTwoReturnStatus >= 0 */
/* ================================================================= */
/* Error Handling: keep track and store any errors/warnings occured */
/* ================================================================= */
if viCIMovementBlockReturnStatus = 0
then assign tCHistRebuildResult.tcResult = trim(#T-7'Correctly processed':255(65598)T-7#).
else do :
/* Add general result to the result temp-table */
if viCIMovementBlockReturnStatus > 0
then assign tCHistRebuildResult.tcResult = trim(#T-8'Warning occurred:':255(65599)t-8#) + " ":U + string(viCIMovementBlockReturnStatus).
else assign tCHistRebuildResult.tcResult = trim(#T-9'Error occurred.':255(65600)t-9#) + " ":U + string(viCIMovementBlockReturnStatus).
/* Add the messages to the result temp-table */
for each tFcMessages :
assign tCHistRebuildResult.tcResult = tCHistRebuildResult.tcResult + chr(10) +
tFcMessages.tcFcMsgNumber + "; ":U + tFcMessages.tcFcMessage.
end. /* for each tFcMessages */
/* Put the return of this single transaction to the return of the method */
if viCIMovementBlockReturnStatus < viLocalReturnStatus
then assign viLocalReturnStatus = viCIMovementBlockReturnStatus.
end. /* if viCIMovementBlockReturnStatus <> 0 */
end. /* if last-of (tqCInvoiceMovementForHistRebuild.tiCInvoiceCurrency_ID) */
end. /* for each tqCInvoiceMovementForHistRebuild */
/* ============= */
/* End Block */
/* ============= */
END. /* MAJORBLOCK */
/* ================== */
/* Exception handling */
/* ================== */
assign oiReturnStatus = viLocalReturnStatus.