Parameters
iiCOACrossRefID | input | integer | |
oiReturnStatus | output | integer | Return status of the method. |
Internal usage
QadFinancials
program code (program6/bcoacrossref.p)
assign oiReturnStatus = -98.
/* ==============================================================================================*/
/* Find the mapping for type separate */
/* Treat the elements one by one */
/* ==============================================================================================*/
/* Assume you want to find the mapping for 550000 */
/* FROM TO TARGET */
/* a 550000 X */
/* b 400000 600000 X */
/* c 55* X */
/* ==============================================================================================*/
/* Structure */
/* 1- Get the mapping for the GL Account */
/* a Equals */
/* b Range */
/* c wildcard */
/* 2- Get the mapping for the Division */
/* a Equals */
/* b Range */
/* c wildcard */
/* 3- Get the mapping for the CostCentre */
/* a Equals */
/* b Range */
/* c wildcard */
/* 4- Get the mapping for the Project */
/* a Equals */
/* b Range */
/* c wildcard */
/* ==============================================================================================*/
/* ===================================== */
/* 1- Get the mapping for the GL Account */
/* ===================================== */
assign viCountGL = 0.
for each tCOACrossRefResult where
tCOACrossRefResult.tcGLCode > '' and
tCOACrossRefResult.tiTargetGL_ID = 0
break by tCOACrossRefResult.tcGLCode :
assign viCountGL = viCountGL + 1.
/* a- We get the Target account for each GL just once */
if first-of (tCOACrossRefResult.tcGLCode)
then do :
/* Initialise */
assign vcTargetGLCode = ''
viTargetGL_ID = 0
vlGLIsDivisionAccount = no
vlGLIsCostCentreAccount = no
vlGLIsProjectAccount = no
vlGLIsSafAccount = no
vcGLExchangeMethod = ''
vcExchangeRateTypeCode = ''.
/* Check the From-To first on equality */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom = tCOACrossRefResult.tcGLCode
:
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetGL_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetGL_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetGLCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetGLCode = ?)
then next.
assign vcTargetGLCode = tqCOACrossRefDetByIDParentID.tcTargetGLCode
viTargetGL_ID = tqCOACrossRefDetByIDParentID.tiTargetGL_ID
vlGLIsDivisionAccount = tqCOACrossRefDetByIDParentID.tlGLIsDivisionAccount
vlGLIsCostCentreAccount = tqCOACrossRefDetByIDParentID.tlGLIsCostCentreAccount
vlGLIsProjectAccount = tqCOACrossRefDetByIDParentID.tlGLIsProjectAccount
vlGLIsSafAccount = tqCOACrossRefDetByIDParentID.tlGLIsSafAccount
vcGLExchangeMethod = tqCOACrossRefDetByIDParentID.tcGLExchangeMethod
vcExchangeRateTypeCode = tqCOACrossRefDetByIDParentID.tcExchangeRateTypeCode.
end. /* for each tqCOACrossRefDetByIDParentID */
if viTargetGL_ID = 0
then do :
/* b- Check the From-To on range */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom <= tCOACrossRefResult.tcGLCode and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLTo >= tCOACrossRefResult.tcGLCode
:
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetGL_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetGL_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetGLCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetGLCode = ?)
then next.
assign vcTargetGLCode = tqCOACrossRefDetByIDParentID.tcTargetGLCode
viTargetGL_ID = tqCOACrossRefDetByIDParentID.tiTargetGL_ID
vlGLIsDivisionAccount = tqCOACrossRefDetByIDParentID.tlGLIsDivisionAccount
vlGLIsCostCentreAccount = tqCOACrossRefDetByIDParentID.tlGLIsCostCentreAccount
vlGLIsProjectAccount = tqCOACrossRefDetByIDParentID.tlGLIsProjectAccount
vlGLIsSafAccount = tqCOACrossRefDetByIDParentID.tlGLIsSafAccount
vcGLExchangeMethod = tqCOACrossRefDetByIDParentID.tcGLExchangeMethod
vcExchangeRateTypeCode = tqCOACrossRefDetByIDParentID.tcExchangeRateTypeCode.
end. /* for each tqCOACrossRefDetByIDParentID */
end. /* if tCOACrossRefResult.tiTargetGL_ID = 0 */
if viTargetGL_ID = 0
then do :
/* c- Check all */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom > '' :
/* GL Should match */
if not tCOACrossRefResult.tcGLCode matches tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcGLFrom
then next.
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetGL_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetGL_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetGLCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetGLCode = ?)
then next.
assign vcTargetGLCode = tqCOACrossRefDetByIDParentID.tcTargetGLCode
viTargetGL_ID = tqCOACrossRefDetByIDParentID.tiTargetGL_ID
vlGLIsDivisionAccount = tqCOACrossRefDetByIDParentID.tlGLIsDivisionAccount
vlGLIsCostCentreAccount = tqCOACrossRefDetByIDParentID.tlGLIsCostCentreAccount
vlGLIsProjectAccount = tqCOACrossRefDetByIDParentID.tlGLIsProjectAccount
vlGLIsSafAccount = tqCOACrossRefDetByIDParentID.tlGLIsSafAccount
vcGLExchangeMethod = tqCOACrossRefDetByIDParentID.tcGLExchangeMethod
vcExchangeRateTypeCode = tqCOACrossRefDetByIDParentID.tcExchangeRateTypeCode.
end. /* for each tqCOACrossRefDetByIDParentID */
end. /* if tCOACrossRefResult.tiTargetGL_ID = 0 */
end. /* first-of (tCOACrossRefResult.tcGLCode) */
assign tCOACrossRefResult.tcTargetGLCode = vcTargetGLCode
tCOACrossRefResult.tiTargetGL_ID = viTargetGL_ID
tCOACrossRefResult.tlGLIsDivisionAccount = vlGLIsDivisionAccount
tCOACrossRefResult.tlGLIsCostCentreAccount = vlGLIsCostCentreAccount
tCOACrossRefResult.tlGLIsProjectAccount = vlGLIsProjectAccount
tCOACrossRefResult.tlGLIsSafAccount = vlGLIsSafAccount
tCOACrossRefResult.tcGLExchangeMethod = vcGLExchangeMethod
tCOACrossRefResult.tcExchangeRateTypeCode = vcExchangeRateTypeCode.
end. /* for each tCOACrossRefResult */
/* ====================================== */
/* 2- Get the mapping for the Division */
/* ====================================== */
assign viCountDIV = 0.
for each tCOACrossRefResult where
tCOACrossRefResult.tcDivisionCode > '' and
tCOACrossRefResult.tiTargetDivision_ID = 0
break by tCOACrossRefResult.tcDivisionCode :
assign viCountDIV = viCountDIV + 1.
if first-of (tCOACrossRefResult.tcDivisionCode)
then do:
/* Initialise */
assign vcTargetDivisionCode = ''
viTargetDivision_ID = 0.
/* Check the From-To first on equality */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivFrom = tCOACrossRefResult.tcDivisionCode:
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = ?)
then next.
assign vcTargetDivisionCode = tqCOACrossRefDetByIDParentID.tcTargetDivisionCode
viTargetDivision_ID = tqCOACrossRefDetByIDParentID.tiTargetDivision_ID.
end. /* for each tqCOACrossRefDetByIDParentID */
/* Check the From-To first on range */
if viTargetDivision_ID = 0
then do:
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivFrom <= tCOACrossRefResult.tcDivisionCode and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivTo >= tCOACrossRefResult.tcDivisionCode
:
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = ?)
then next.
assign vcTargetDivisionCode = tqCOACrossRefDetByIDParentID.tcTargetDivisionCode
viTargetDivision_ID = tqCOACrossRefDetByIDParentID.tiTargetDivision_ID.
end. /* for each tqCOACrossRefDetByIDParentID */
end. /* viTargetDivision_ID = 0 */
if viTargetDivision_ID = 0
then do:
/* Check the From-To first on all */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivFrom > '' :
/* Division Should match */
if not tCOACrossRefResult.tcDivisionCode matches tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcDivFrom
then next.
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetDivision_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetDivisionCode = ?)
then next.
assign vcTargetDivisionCode = tqCOACrossRefDetByIDParentID.tcTargetDivisionCode
viTargetDivision_ID = tqCOACrossRefDetByIDParentID.tiTargetDivision_ID.
end. /* for each tqCOACrossRefDetByIDParentID */
end. /* viTargetDivision_ID = 0 */
end. /* first-of (tCOACrossRefResult.tcDivisionCode) */
assign tCOACrossRefResult.tcTargetDivisionCode = vcTargetDivisionCode
tCOACrossRefResult.tiTargetDivision_ID = viTargetDivision_ID.
end. /* Get the mapping for the Division */
/* ====================================== */
/* 3- Get the mapping for the CostCentre */
/* ====================================== */
assign viCountCC = 0.
for each tCOACrossRefResult where
tCOACrossRefResult.tcCostCentreCode > '' and
tCOACrossRefResult.tiTargetCostCentre_ID = 0
break by tCOACrossRefResult.tcCostCentreCode :
assign viCountCC = viCountCC + 1.
if first-of (tCOACrossRefResult.tcCostCentreCode)
then do:
/* Initialise */
assign vcTargetCostCentreCode = ''
viTargetCostCentre_ID = 0
vlCostCentreIsWithSaf = no.
/* Check the From-To first on equality */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCFrom = tCOACrossRefResult.tcCostCentreCode
:
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = ?)
then next.
assign vcTargetCostCentreCode = tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode
viTargetCostCentre_ID = tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID
vlCostCentreIsWithSaf = tqCOACrossRefDetByIDParentID.tlCostCentreIsWithSaf.
end. /* for each tqCOACrossRefDetByIDParentID */
if viTargetCostCentre_ID = 0
then do :
/* Check the From-To first on range */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCFrom <= tCOACrossRefResult.tcCostCentreCode and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCTo >= tCOACrossRefResult.tcCostCentreCode
:
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = ?)
then next.
assign vcTargetCostCentreCode = tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode
viTargetCostCentre_ID = tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID
vlCostCentreIsWithSaf = tqCOACrossRefDetByIDParentID.tlCostCentreIsWithSaf.
end. /* for each tqCOACrossRefDetByIDParentID */
end. /* viTargetCostCentre_ID = 0 */
if viTargetCostCentre_ID = 0
then do :
/* Check the From-To first on all */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCFrom > '' :
/* CostCentre Should match */
if not tCOACrossRefResult.tcCostCentreCode matches tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcCCFrom
then next.
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode = ?)
then next.
assign vcTargetCostCentreCode = tqCOACrossRefDetByIDParentID.tcTargetCostCentreCode
viTargetCostCentre_ID = tqCOACrossRefDetByIDParentID.tiTargetCostCentre_ID
vlCostCentreIsWithSaf = tqCOACrossRefDetByIDParentID.tlCostCentreIsWithSaf.
end. /* for each tqCOACrossRefDetByIDParentID */
end. /* viTargetCostCentre_ID = 0 */
end. /* first-of (tCOACrossRefResult.tcCostCentreCode) */
assign tCOACrossRefResult.tcTargetCostCentreCode = vcTargetCostCentreCode
tCOACrossRefResult.tiTargetCostCentre_ID = viTargetCostCentre_ID
tCOACrossRefResult.tlCostCentreIsWithSaf = vlCostCentreIsWithSaf.
end. /* Get the mapping for the CostCentre */
/* ===================================== */
/* 4- Get the mapping for the Project */
/* ===================================== */
assign viCountPRJ = 0.
for each tCOACrossRefResult where
tCOACrossRefResult.tcProjectCode > '' and
tCOACrossRefResult.tiTargetProject_ID = 0
break by tCOACrossRefResult.tcProjectCode :
assign viCountPRJ = viCountPRJ + 1.
if first-of (tCOACrossRefResult.tcProjectCode)
then do:
/* Initialise */
assign vcTargetProjectCode = ''
viTargetProject_ID = 0
vlProjectIsWithSaf = no.
/* Check the From-To first on equality */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjFrom = tCOACrossRefResult.tcProjectCode
:
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetProject_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetProject_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetProjectCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetProjectCode = ?)
then next.
assign vcTargetProjectCode = tqCOACrossRefDetByIDParentID.tcTargetProjectCode
viTargetProject_ID = tqCOACrossRefDetByIDParentID.tiTargetProject_ID
vlProjectIsWithSaf = tqCOACrossRefDetByIDParentID.tlProjectIsWithSaf.
end. /* for each tqCOACrossRefDetByIDParentID */
if viTargetProject_ID = 0
then do :
/* Check the From-To first on range */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjFrom <= tCOACrossRefResult.tcProjectCode and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjTo >= tCOACrossRefResult.tcProjectCode
:
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetProject_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetProject_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetProjectCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetProjectCode = ?)
then next.
assign vcTargetProjectCode = tqCOACrossRefDetByIDParentID.tcTargetProjectCode
viTargetProject_ID = tqCOACrossRefDetByIDParentID.tiTargetProject_ID
vlProjectIsWithSaf = tqCOACrossRefDetByIDParentID.tlProjectIsWithSaf.
end. /* for each tqCOACrossRefDetByIDParentID */
end. /* viTargetProject_ID = 0 */
if viTargetProject_ID = 0
then do :
/* Check the From-To first on all */
for each tqCOACrossRefDetByIDParentID where
tqCOACrossRefDetByIDParentID.tiCOACrossRef_ID = iiCOACrossRefID and
tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjFrom > '' :
/* Project Should match */
if not tCOACrossRefResult.tcProjectCode matches tqCOACrossRefDetByIDParentID.tcCOACrossRefDetSrcProjFrom
then next.
/* Target must be filled in */
if (tqCOACrossRefDetByIDParentID.tiTargetProject_ID = 0 or tqCOACrossRefDetByIDParentID.tiTargetProject_ID = ?) and
(tqCOACrossRefDetByIDParentID.tcTargetProjectCode = '':U or tqCOACrossRefDetByIDParentID.tcTargetProjectCode = ?)
then next.
assign vcTargetProjectCode = tqCOACrossRefDetByIDParentID.tcTargetProjectCode
viTargetProject_ID = tqCOACrossRefDetByIDParentID.tiTargetProject_ID
vlProjectIsWithSaf = tqCOACrossRefDetByIDParentID.tlProjectIsWithSaf.
end. /* for each tqCOACrossRefDetByIDParentID */
end. /* viTargetProject_ID = 0 */
end. /* first-of (tCOACrossRefResult.tcProjectCode) */
assign tCOACrossRefResult.tcTargetProjectCode = vcTargetProjectCode
tCOACrossRefResult.tiTargetProject_ID = viTargetProject_ID
tCOACrossRefResult.tlProjectIsWithSaf = vlProjectIsWithSaf.
end. /* Get the mapping for the Project */
<M-27 run AddAdditionalInfoInCTLOG
(input program-name (1) (icTrace),
input 'GL Reads:' + string (viCountGL) (icParam1),
input 'CC Reads:' + string (viCountCC) (icParam2),
input 'DIV Reads:' + string (viCountDiV) (icParam3),
input 'PRJ Reads:' + string (viCountPRJ) (icParam4),
input '' (icParam5),
input '' (icParam6),
input '' (icParam7),
input '' (icParam8),
input '' (icParam9)) in BCOACrossRef>
if oiReturnStatus = -98
then assign oiReturnStatus = 0.