project QadFinancials > class BPosting > method ValidateComponentPreAssignPostingLineCross
Description
This method establishes relation between two cross company postings created from the operational.
Parameters
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program4/bposting.p)
/* =========================================================================================== *
* Method: ValidateComponentPreAssignPostingLineCross *
* Desc: This method updates cross company link of the postings inside current *
* instance of the BPosting component. This cross company link is updated only *
* in case of the Posting created from the operational. *
* It also generates correction records for the PostingHist daemon if needed *
* =========================================================================================== */
/* ========================================================================================================== *
* Process only those lines created from the operational, where the cross company link is not yet established *
* ========================================================================================================== */
if t_sPosting.PostingOriginIsExternal <> true or
t_sPostingLine.tlLinkedCrCyDaemonReqExists = true or
t_sPostingLine.tcGLTypeCode <> {&GLTYPECODE-CROSS} or
t_sPostingLine.tc_status = "D" or
t_sPostingLine.PostingLineCrossExternRef = "":U or
t_sPostingLine.PostingLineCrossExternRef = ? or
(t_sPostingLine.CrossCompanyPostingLine_ID <> 0 and
t_sPostingLine.CrossCompanyPostingLine_ID <> ?)
then leave.
/* ===================================================================================== */
/* Try to find a postingline in our business-instance with the same CrossExternRef value */
/* and that is not yet linked to another posting-line (CrossCompanyXXX-fields = 0) */
/* Note: bCrossCompanyPostingLine is a buffer on t_sPostingLine */
/* ===================================================================================== */
find bCrossCompanyPostingLine where
bCrossCompanyPostingLine.tc_rowid <> t_sPostingLine.tc_rowid and
bCrossCompanyPostingLine.Company_ID <> t_sPostingLine.Company_ID and
bCrossCompanyPostingLine.tc_status <> "D":U and
bCrossCompanyPostingLine.PostingLineCrossExternRef = t_sPostingLine.PostingLineCrossExternRef and
bCrossCompanyPostingLine.Currency_ID = t_sPostingLine.Currency_ID and
bCrossCompanyPostingLine.PostingLineCreditTC = t_sPostingLine.PostingLineDebitTC and
bCrossCompanyPostingLine.PostingLineDebitTC = t_sPostingLine.PostingLineCreditTC and
(bCrossCompanyPostingLine.CrossCompanyPostingLine_ID = 0 or
bCrossCompanyPostingLine.CrossCompanyPostingLine_ID = ?) and
((bCrossCompanyPostingLine.PostingLineCreditTC <> ? and
bCrossCompanyPostingLine.PostingLineCreditTC <> 0 and
bCrossCompanyPostingLine.PostingLineCreditTC = t_sPostingLine.PostingLineDebitTC) or
(bCrossCompanyPostingLine.PostingLineDebitTC <> ? and
bCrossCompanyPostingLine.PostingLineDebitTC <> 0 and
bCrossCompanyPostingLine.PostingLineDebitTC = t_sPostingLine.PostingLineCreditTC))
no-error.
if available bCrossCompanyPostingLine
then do:
assign bCrossCompanyPostingLine.CrossCompanyPostingLine_ID = t_sPostingLine.PostingLine_ID
bCrossCompanyPostingLine.CrossCompanyPosting_ID = t_sPostingLine.Posting_ID
bCrossCompanyPostingLine.CrossCompany_ID = t_sPostingLine.Company_ID
bCrossCompanyPostingLine.IntercoBusinessRelation_ID = t_sPostingLine.IntercoBusinessRelation_ID
bCrossCompanyPostingLine.tc_status = (if bCrossCompanyPostingLine.tc_status = "":U then "C":U else bCrossCompanyPostingLine.tc_status)
t_sPostingLine.CrossCompanyPostingLine_ID = bCrossCompanyPostingLine.PostingLine_ID
t_sPostingLine.CrossCompanyPosting_ID = bCrossCompanyPostingLine.Posting_ID
t_sPostingLine.CrossCompany_ID = bCrossCompanyPostingLine.Company_ID
t_sPostingLine.tc_status = (if t_sPostingLine.tc_status = "":U then "C":U else t_sPostingLine.tc_status).
/* Get business relation for cross company posting */
<M-26 run CalcCrossCompanyBusinessRelation
(input t_sPostingLine.CrossCompany_ID (iiCrossCompanyId),
input ? (icCrossCompanyCode),
output t_sPostingLine.tcIntercoBusinessRelationCode (ocBusinessRelationICCode),
output t_sPostingLine.IntercoBusinessRelation_ID (oiBusinessRelationId),
output viFcReturnSuper (oiReturnStatus)) in BPosting>
if oiReturnStatus = 0 or oiReturnStatus > 0 and viFcReturnSuper < 0 then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0 then return.
<M-54 run CalcCrossCompanyBusinessRelation
(input bCrossCompanyPostingLine.CrossCompany_ID (iiCrossCompanyId),
input ? (icCrossCompanyCode),
output bCrossCompanyPostingLine.tcIntercoBusinessRelationCode (ocBusinessRelationICCode),
output bCrossCompanyPostingLine.IntercoBusinessRelation_ID (oiBusinessRelationId),
output viFcReturnSuper (oiReturnStatus)) in BPosting>
if oiReturnStatus = 0 or oiReturnStatus > 0 and viFcReturnSuper < 0 then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0 then return.
end. /* if available bCrossCompanyPostingLine */
else do :
/* =============================================================================== */
/* Try to find a postingline in the db with the same CrossExternRef value */
/* and that is not yet linked to another posting-line (CrossCompanyXXX-fields = 0) */
/* =============================================================================== */
<Q-70 run PostingLineByCrossExternRef (all) (Read) (NoCache)
(input t_sPostingLine.Company_ID, (NotCompanyId)
input t_sPostingLine.PostingLineCrossExternRef, (PostingLineCrossExternRef)
input t_sPostingLine.tc_Rowid, (PostingLineRowid)
input -999999, (CrossCompanyPostingLineID)
input ?, (CompanyId)
output dataset tqPostingLineByCrossExternRef) in BPosting>
find tqPostingLineByCrossExternRef where
tqPostingLineByCrossExternRef.tiCompany_ID <> t_sPostingLine.Company_ID and
tqPostingLineByCrossExternRef.tcPostingLineCrossExternRef = t_sPostingLine.PostingLineCrossExternRef and
(tqPostingLineByCrossExternRef.tiCrossCompanyPostingLine_ID = 0 or
tqPostingLineByCrossExternRef.tiCrossCompanyPostingLine_ID = ?) and
tqPostingLineByCrossExternRef.tcCurrencyCode = t_sPostingLine.tcCurrencyCode and
((tqPostingLineByCrossExternRef.tdPostingLineCreditTC <> ? and
tqPostingLineByCrossExternRef.tdPostingLineCreditTC <> 0 and
tqPostingLineByCrossExternRef.tdPostingLineCreditTC = t_sPostingLine.PostingLineDebitTC) or
(tqPostingLineByCrossExternRef.tdPostingLineDebitTC <> 0 and
tqPostingLineByCrossExternRef.tdPostingLineDebitTC <> ? and
tqPostingLineByCrossExternRef.tdPostingLineDebitTC = t_sPostingLine.PostingLineCreditTC))
no-error.
if not available tqPostingLineByCrossExternRef
then leave.
/* Update posting in the current business component */
assign t_sPostingLine.CrossCompanyPostingLine_ID = tqPostingLineByCrossExternRef.tiPostingLine_ID
t_sPostingLine.CrossCompanyPosting_ID = tqPostingLineByCrossExternRef.tiPosting_ID
t_sPostingLine.CrossCompany_ID = tqPostingLineByCrossExternRef.tiCompany_ID
t_sPostingLine.tcCrossCompanyCode = tqPostingLineByCrossExternRef.tcCompanyCode
t_sPostingLine.tc_status = (if t_sPostingLine.tc_Status = "":U then "C":U else t_sPostingLine.tc_Status).
<M-2 run CalcCrossCompanyBusinessRelation
(input t_sPostingLine.CrossCompany_ID (iiCrossCompanyId),
input ? (icCrossCompanyCode),
output t_sPostingLine.tcIntercoBusinessRelationCode (ocBusinessRelationICCode),
output t_sPostingLine.IntercoBusinessRelation_ID (oiBusinessRelationId),
output viFcReturnSuper (oiReturnStatus)) in BPosting>
if oiReturnStatus = 0 or oiReturnStatus > 0 and viFcReturnSuper < 0 then assign oiReturnStatus = viFcReturnSuper.
if oiReturnStatus < 0 then return.
/* Make correction of the incorrect posting hist record, which was created for the Cross company posting line *
* already available in the database */
/* Get business relation of the entity of the posting in the component. This Intercompany will be *
* updated to in the PreSave method to the database */
<M-1 run CalcCrossCompanyBusinessRelation
(input t_sPostingLine.Company_ID (iiCrossCompanyId),
input ? (icCrossCompanyCode),
output vcDummy (ocBusinessRelationICCode),
output viBusinessRelationId (oiBusinessRelationId),
output viFcReturnSuper (oiReturnStatus)) in BPosting>
if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.
/* Create correction QPostingLine record */
create tApiQPostingLine.
assign viApiQPostingLineID = viApiQPostingLineID + 1
tApiQPostingLine.QPostingLine_ID = viApiQPostingLineID
tApiQPostingLine.Company_ID = tqPostingLineByCrossExternRef.tiCompany_ID
tApiQPostingLine.Period_ID = tqPostingLineByCrossExternRef.tiPeriod_ID
tApiQPostingLine.GL_ID = tqPostingLineByCrossExternRef.tiGL_ID
tApiQPostingLine.Division_ID = tqPostingLineByCrossExternRef.tiDivision_ID
tApiQPostingLine.CostCentre_ID = tqPostingLineByCrossExternRef.tiCostCentre_ID
tApiQPostingLine.Project_ID = tqPostingLineByCrossExternRef.tiProject_ID
tApiQPostingLine.Journal_ID = tqPostingLineByCrossExternRef.tiJournal_ID
tApiQPostingLine.Currency_ID = tqPostingLineByCrossExternRef.tiCurrency_ID
tApiQPostingLine.IntercoBusinessRelation_ID = tqPostingLineByCrossExternRef.tiIntercoBusinessRelation_ID
tApiQPostingLine.QPostingLineDebitLC = - tqPostingLineByCrossExternRef.tdPostingLineDebitLC
tApiQPostingLine.QPostingLineCreditLC = - tqPostingLineByCrossExternRef.tdPostingLineCreditLC
tApiQPostingLine.QPostingLineDebitTC = - tqPostingLineByCrossExternRef.tdPostingLineDebitTC
tApiQPostingLine.QPostingLineCreditTC = - tqPostingLineByCrossExternRef.tdPostingLineCreditTC
tApiQPostingLine.QPostingLineDebitCC = - tqPostingLineByCrossExternRef.tdPostingLineDebitCC
tApiQPostingLine.QPostingLineCreditCC = - tqPostingLineByCrossExternRef.tdPostingLineCreditCC
tApiQPostingLine.QPostingLineQTY = - tqPostingLineByCrossExternRef.tdPostingLineQTY
tApiQPostingLine.QPostingLineInfo = string(tqPostingLineByCrossExternRef.tiPostingYear) + "/":U + string(tqPostingLineByCrossExternRef.tiPostingPeriod) + "/":U + tqPostingLineByCrossExternRef.tcJournalCode + "/":U + string(tqPostingLineByCrossExternRef.tiPostingVoucher)
tApiQPostingLine.PeriodYearPeriod = tqPostingLineByCrossExternRef.tiPostingYear * 100 + tqPostingLineByCrossExternRef.tiPostingPeriod
tApiQPostingLine.Layer_ID = tqPostingLineByCrossExternRef.tiLayer_ID
tApiQPostingLine.JournalTypeCode = tqPostingLineByCrossExternRef.tcJournalTypeCode
tApiQPostingLine.tc_Rowid = string(viApiQPostingLineID)
tApiQPostingLine.tc_ParentRowid = "":U
tApiQPostingLine.tc_Status = "N":U.
/* Create new correct update record for Posting Hist record */
create tApiQPostingLine.
assign viApiQPostingLineID = viApiQPostingLineID + 1
tApiQPostingLine.QPostingLine_ID = viApiQPostingLineID
tApiQPostingLine.Company_ID = tqPostingLineByCrossExternRef.tiCompany_ID
tApiQPostingLine.Period_ID = tqPostingLineByCrossExternRef.tiPeriod_ID
tApiQPostingLine.GL_ID = tqPostingLineByCrossExternRef.tiGL_ID
tApiQPostingLine.Division_ID = tqPostingLineByCrossExternRef.tiDivision_ID
tApiQPostingLine.CostCentre_ID = tqPostingLineByCrossExternRef.tiCostCentre_ID
tApiQPostingLine.Project_ID = tqPostingLineByCrossExternRef.tiProject_ID
tApiQPostingLine.Journal_ID = tqPostingLineByCrossExternRef.tiJournal_ID
tApiQPostingLine.Currency_ID = tqPostingLineByCrossExternRef.tiCurrency_ID
tApiQPostingLine.IntercoBusinessRelation_ID = viBusinessRelationId
tApiQPostingLine.QPostingLineDebitLC = tqPostingLineByCrossExternRef.tdPostingLineDebitLC
tApiQPostingLine.QPostingLineCreditLC = tqPostingLineByCrossExternRef.tdPostingLineCreditLC
tApiQPostingLine.QPostingLineDebitTC = tqPostingLineByCrossExternRef.tdPostingLineDebitTC
tApiQPostingLine.QPostingLineCreditTC = tqPostingLineByCrossExternRef.tdPostingLineCreditTC
tApiQPostingLine.QPostingLineDebitCC = tqPostingLineByCrossExternRef.tdPostingLineDebitCC
tApiQPostingLine.QPostingLineCreditCC = tqPostingLineByCrossExternRef.tdPostingLineCreditCC
tApiQPostingLine.QPostingLineQTY = tqPostingLineByCrossExternRef.tdPostingLineQTY
tApiQPostingLine.QPostingLineInfo = string(tqPostingLineByCrossExternRef.tiPostingYear) + "/":U + string(tqPostingLineByCrossExternRef.tiPostingPeriod) + "/":U + tqPostingLineByCrossExternRef.tcJournalCode + "/":U + string(tqPostingLineByCrossExternRef.tiPostingVoucher)
tApiQPostingLine.PeriodYearPeriod = tqPostingLineByCrossExternRef.tiPostingYear * 100 + tqPostingLineByCrossExternRef.tiPostingPeriod
tApiQPostingLine.Layer_ID = tqPostingLineByCrossExternRef.tiLayer_ID
tApiQPostingLine.JournalTypeCode = tqPostingLineByCrossExternRef.tcJournalTypeCode
tApiQPostingLine.tc_Rowid = string(viApiQPostingLineID)
tApiQPostingLine.tc_ParentRowid = "":U
tApiQPostingLine.tc_Status = "N":U.
end. /* else if available bCrossCompanyPostingLine */