Parameters
iiBudgetID | input | integer | |
oiQBudgetLinkActualCREATED# | output | integer | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program6/bbudgetrebuild.p)
assign oiReturnStatus = -98
oiQBudgetLinkActualCREATED# = 0.
/* ===================================================================================================== */
/* This method will clear the budget data of the budget and make new queue records for the budget daemon */
/* ===================================================================================================== */
<I-65 {WRITEDIRECTDBACCESS
&WRITETABLENAMES = "'Budget Budgetlink BudgetlinkAcc BudgetlinkAccDet BudgetLinkActual BudgetLinkCommit qBudgetLinkActual qBudgetLinkCommit'"}>
<I-68 {READDIRECTDBACCESS
&READTABLENAMES = "'BudgetPeriod BudgetCompany BudgetFDS BudgetWBS Company Posting PostingLine PostingSAF Journal Layer SharedSet CompanySharedSet GL Division CostCentre SafConcept SafStructure SAF'"}>
/* -------------------------------------------------------------------------------------------------------------------------------------- */
/* delete the records in Budgetlink BudgetLinkAcc BudgetLinkAccDet Budgetlinkactuals Budgetlinkcommit qBudgetLinkActual qBudgetLinkCommit */
/* -------------------------------------------------------------------------------------------------------------------------------------- */
for each Budget where
Budget.Budget_ID = iiBudgetID
no-lock :
/* ============================= */
/* STEP 1 : CLEAR ALL THE DATA */
/* ============================= */
for each Budgetlink of Budget exclusive-lock transaction: delete budgetlink. end.
for each BudgetLinkAcc of Budget exclusive-lock transaction: delete budgetLinkAcc. end.
for each BudgetLinkAccDet of Budget exclusive-lock transaction: delete budgetLinkAccDet. end.
for each BudgetLinkActual of Budget exclusive-lock transaction: delete BudgetLinkActual. end.
for each BudgetLinkCommit of Budget exclusive-lock transaction: delete BudgetLinkCommit. end.
for each qBudgetLinkActual of Budget exclusive-lock transaction: delete qBudgetLinkActual. end.
for each qBudgetLinkCommit of Budget exclusive-lock transaction: delete qBudgetLinkCommit. end.
/* ====================================== */
/* STEP 2 : BUILD UP BUDGET QUEUE RECORD */
/* ====================================== */
assign vlBudgetCompanyFound = can-find (first BudgetCompany of Budget)
vtBudgetFromDate = ?
vtBudgetTillDate = ?.
for each BudgetPeriod of Budget no-lock :
if vtBudgetFromDate = ? or BudgetPeriod.BudgetPeriodFromDate < vtBudgetFromDate
then assign vtBudgetFromDate = BudgetPeriod.BudgetPeriodFromDate.
if vtBudgetTillDate = ? or BudgetPeriod.BudgetPeriodTillDate > vtBudgetTillDate
then assign vtBudgetTillDate = BudgetPeriod.BudgetPeriodTillDate.
end.
if vtBudgetFromDate = ? then assign vtBudgetFromDate = date (01,01,0001).
if vtBudgetTillDate = ? then assign vtBudgetTillDate = date (12,31,9999).
for each Company no-lock :
/* If BudgetCompany was found, we need to use this table */
if vlBudgetCompanyFound and
not can-find (first BudgetCompany of Budget where
BudgetCompany.Company_ID = Company.Company_ID)
then next.
GL_Block:
for each SharedSet where SharedSet.SharedSetTypeCode = {&SHAREDSETTYPE-GL} no-lock,
each CompanySharedSet of Company where
CompanySharedSet.SharedSet_ID = SharedSet.SharedSet_ID no-lock,
each GL where
GL.SharedSet_ID = CompanySharedSet.SharedSet_ID and
GL.GLIsWithBudget
no-lock :
/* In case the GL is one of the FDS elements, we do an extra filtering on the account */
if can-find (first BudgetFDS of Budget no-lock where
BudgetFDS.BudgetFDSType = {&BUDGETFDSTYPE-GL})
then do :
for each BudgetFDS of Budget no-lock where
BudgetFDS.budgetFDSType = {&BUDGETFDSTYPE-GL},
each BudgetWBS where
BudgetWBS.budgetFDS_ID = BudgetFDS.BudgetFDS_ID and
((BudgetWBS.BudgetWBSFDSFromCode <= GL.GLCode and
BudgetWBS.BudgetWBSFDSToCode >= GL.GLCode and
BudgetWBS.BudgetWBSFDSFromCode <> ? and
BudgetWBS.BudgetWBSFDSToCode <> ?) or
BudgetWBS.BudgetWBSFDSCode = GL.GLCode or
can-do (BudgetWBS.BudgetWBSFDSList,GL.GlCode) or
(BudgetWBS.BudgetGroup_ID <> 0 and
BudgetWBS.BudgetGroup_ID <> ? and
BudgetWBS.BudgetGroup_ID = GL.BudgetGroup_ID
)
)
no-lock:
/* Go through all the Transaction Lines */
for each PostingLine where
PostingLine.Company_ID = Company.Company_ID and
PostingLine.GL_ID = GL.GL_ID and
PostingLine.PostingDate >= vtBudgetFromDate and
PostingLine.PostingDate <= vtBudgetTillDate
no-lock,
first Posting of PostingLine no-lock,
first Journal of Posting no-lock,
first Layer of Journal no-lock
TRANSACTION :
<M-71 run StartPersistence
(output vhFcComponent (ohPersistence),
output viFcReturnSuper (oiReturnStatus)) in BBudgetRebuild>
if viFcReturnSuper <> 0
then oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then return.
viObjectNumber = <M-6 GetNextValue (input 'ObjectNumber' (icSequence)) in persistence>.
find first QBudgetLinkActual where
QBudgetLinkActual.PostingLine_ID = PostingLine.PostingLine_ID and
QBudgetLinkActual.Budget_ID = Budget.Budget_ID
no-lock no-error .
if not available QBudgetLinkActual
then do :
create QBudgetLinkActual.
assign oiQBudgetLinkActualCREATED# = oiQBudgetLinkActualCREATED# + 1
QBudgetLinkActual.QBudgetLinkActual_ID = viObjectNumber
QBudgetLinkActual.Layer_ID = Layer.Layer_ID
QBudgetLinkActual.LayerTypeCode = Layer.LayerTypeCode
QBudgetLinkActual.JournalTypeCode = Journal.JournalTypeCode
QBudgetLinkActual.BudgetLinkActualGLCode = GL.GLCode
QBudgetLinkActual.BudgetLinkActualTC = PostingLine.PostingLineDebitTC - PostingLine.PostingLineCreditTC
QBudgetLinkActual.BudgetLinkActualQTY = PostingLine.PostingLineQTY
QBudgetLinkActual.BudgetLinkActualDate = Posting.PostingDate
QBudgetLinkActual.BudgetLinkActualInfo = string(Posting.PostingYear,'9999':U) + '/':U
+ string(Posting.PostingPeriod,'99':U) + '/':U
+ Journal.JournalCode + '/':U
+ string(Posting.PostingVoucher,'999999999':U)
QBudgetLinkActual.PostingLine_ID = PostingLine.PostingLine_ID
QBudgetLinkActual.Company_ID = PostingLine.Company_ID
QBudgetLinkActual.Currency_ID = PostingLine.Currency_ID
QBudgetLinkActual.Journal_ID = Posting.Journal_ID
QBudgetLinkActual.Unit_ID = GL.Unit_ID
QBudgetLinkActual.Budget_ID = Budget.Budget_ID
QBudgetLinkActual.BudgetWBS_ID = 0.
/* Division */
if PostingLine.Division_ID <> 0 and PostingLine.Division_ID <> ?
then do :
find Division of PostingLine no-lock no-error.
if available Division
then assign QBudgetLinkActual.BudgetLinkActualDivCode = Division.DivisionCode.
end.
else assign QBudgetLinkActual.BudgetLinkActualDivCode = ''.
/* CostCentre */
if PostingLine.CostCentre_ID <> 0 and PostingLine.CostCentre_ID <> ?
then do :
find CostCentre of PostingLine no-lock no-error.
if available CostCentre
then assign QBudgetLinkActual.BudgetLinkActualCCCode = CostCentre.Costcentrecode.
end.
else assign QBudgetLinkActual.BudgetLinkActualCCCode = ''.
/* Project */
if PostingLine.Project_ID <> 0 and PostingLine.Project_ID <> ?
then do :
<Q-79 run ProjectPrim (all) (Read) (NoCache)
(input ?, (CompanyId)
input PostingLine.Project_ID, (ProjectID)
input ?, (ProjectCode)
output dataset tqProjectPrim) in BProject>
find first tqProjectPrim where
tqProjectPrim.tiProject_ID = PostingLine.Project_ID
no-error.
if available tqProjectPrim
then assign QBudgetLinkActual.BudgetLinkActualPrjCode = tqProjectPrim.tcProjectCode.
end.
else assign QBudgetLinkActual.BudgetLinkActualPrjCode = ''.
/* Get the SAF info */
for each PostingSAF of PostingLine no-lock,
first SAF of PostingSAF no-lock,
first SafConcept of SAF no-lock,
first SafStructure of PostingSAF no-lock
by PostingSafParentType
by PostingSafInputSequence:
assign QBudgetLinkActual.BudgetLinkActualSafStruct = SafStructure.SafStructureCode.
if PostingSAF.PostingSafInputSequence = 1
then assign QBudgetLinkActual.BudgetLinkActualSaf1Concpt = SafConcept.SafConceptCode
QBudgetLinkActual.BudgetLinkActualSaf1Code = SAF.SafCode.
else
if PostingSAF.PostingSafInputSequence = 2
then assign QBudgetLinkActual.BudgetLinkActualSaf2Concpt = SafConcept.SafConceptCode
QBudgetLinkActual.BudgetLinkActualSaf2Code = SAF.SafCode.
else
if PostingSAF.PostingSafInputSequence = 3
then assign QBudgetLinkActual.BudgetLinkActualSaf3Concpt = SafConcept.SafConceptCode
QBudgetLinkActual.BudgetLinkActualSaf3Code = SAF.SafCode.
else
if PostingSAF.PostingSafInputSequence = 4
then assign QBudgetLinkActual.BudgetLinkActualSaf4Concpt = SafConcept.SafConceptCode
QBudgetLinkActual.BudgetLinkActualSaf4Code = SAF.SafCode.
else
if PostingSAF.PostingSafInputSequence = 5
then assign QBudgetLinkActual.BudgetLinkActualSaf5Concpt = SafConcept.SafConceptCode
QBudgetLinkActual.BudgetLinkActualSaf5Code = SAF.SafCode.
end. /* For each PostingSAF */
release QBudgetLinkActual.
end. /* if not available QBudgetLinkActual */
end. /* for each PostingLine*/
end. /* for each budgetFDS */
end. /* can-find */
end. /* for each SharedSet */
end. /* for each Company */
end. /* for each Budget */
if oiReturnStatus = -98
then assign oiReturnStatus = 0.