| iiCInvoiceID | input | integer | ID of the Invoice |
| icAPMatchingStatus | input | character | |
| icAPMatchingJournalCode | input | character | Journal-code to be used for the matching. If no value is received for this parameter and there is only one journal with the correct type, then that one will be used |
| ilIsUpdateCInvoiceAutomatically | input | logical | Do you want to automatically update the supplier invoice? |
| oiAPMatchingID | output | integer | corresponds with field APMatching_ID of the newly create tAPMatching record |
| ocAPMatchingTcRowid | output | character | corresponds with field tc_rowid of the newly create tAPMatchign record |
| oiReturnStatus | output | integer | Return status of the method. |
QadFinancials
/* ================================ */
/* Exception handling - Start Block */
/* ================================ */
assign oiReturnStatus = -98
viLocalReturnStatus = 0.
MAINADDBLOCK: Do :
/* ============== */
/* Validate input */
/* ============== */
if iiCInvoiceID = 0 or
iiCInvoiceID = ?
then do :
assign viLocalReturnStatus = -3
vcMsgAPMatching = trim(#T-1'The system cannot create a matching header if the invoice ID is not specified.':255(70287)t-1#).
<M-2 run SetMessage
(input vcMsgAPMatching (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-8315':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
Leave MAINADDBLOCK.
end. /* if iiCInvoiceID = 0 or */
if icAPMatchingStatus = "":U or
icAPMatchingStatus = ?
then do :
assign viLocalReturnStatus = -3
vcMsgAPMatching = trim(#T-4'The system cannot create a matching header if the matching status is not specified.':255(70288)t-4#).
<M-3 run SetMessage
(input vcMsgAPMatching (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-8316':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
Leave MAINADDBLOCK.
end. /* if icAPMatchingStatus = "" or */
else do :
if icAPMatchingStatus <> {&APMATCHINGSTATUS-INITIAL} and
icAPMatchingStatus <> {&APMATCHINGSTATUS-FINISHED}
then do :
assign viLocalReturnStatus = -3
vcMsgAPMatching = trim(substitute(#T-6'The system cannot create a matching header with an invalid status (&1).':255(70289)t-6#,icAPMatchingStatus)).
<M-5 run SetMessage
(input vcMsgAPMatching (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-8317':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
Leave MAINADDBLOCK.
end. /* if icAPMatchingStatus <> {&APMATCHINGSTATUS-INITIAL} and */
end. /* Not if icAPMatchingStatus = "" or */
/* ============================================================================== */
/* Find the invoice based upon its ID to get its Registration-number and Company */
/* ============================================================================== */
<Q-16 run CInvoiceByIDForRegistrationNr (all) (Read) (NoCache)
(input iiCInvoiceID, (CInvoiceID)
input ?, (CompanyId)
output dataset tqCInvoiceByIDForRegistrationNr) in BCInvoice >
Find first tqCInvoiceByIDForRegistrationNr where
tqCInvoiceByIDForRegistrationNr.tiCInvoice_ID = iiCInvoiceID
no-lock no-error.
if not available tqCInvoiceByIDForRegistrationNr
then do :
assign viLocalReturnStatus = -3
vcMsgAPMatching = trim(substitute(#T-9'Cannot create a matching header because the invoice &1 is invalid.':255(70290)t-9#,string(iiCInvoiceID))).
<M-8 run SetMessage
(input vcMsgAPMatching (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-8318':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
Leave MAINADDBLOCK.
end. /* if not avaiable tqCInvoiceByIDForRegistrationNr */
else do :
if tqCInvoiceByIDForRegistrationNr.tiCompany_ID <> viCompanyID
then do :
assign viLocalReturnStatus = -3
vcMsgAPMatching = trim(substitute(#T-11'Cannot create a matching header because the invoice &1 belongs to an entity &2 that differs from the current entity &3.':255(70292)t-11#,string(iiCInvoiceID),string(tqCInvoiceByIDForRegistrationNr.tiCompany_ID),string(viCompanyID))).
<M-10 run SetMessage
(input vcMsgAPMatching (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-8319':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
Leave MAINADDBLOCK.
end. /* if tqCInvoiceByIDForRegistrationNr.tiCompany_ID <> viCompanyID */
else
if tqCInvoiceByIDForRegistrationNr.tiCInvoiceRegistrationNr = 0 or
tqCInvoiceByIDForRegistrationNr.tiCInvoiceRegistrationNr = ?
then do :
assign viLocalReturnStatus = -3
vcMsgAPMatching = trim(substitute(#T-13'Cannot create a matching header because the invoice &1 does not have a registration number.':255(70293)t-13#,string(iiCInvoiceID))).
<M-12 run SetMessage
(input vcMsgAPMatching (icMessage),
input '':U (icArguments),
input '':U (icFieldName),
input '':U (icFieldValue),
input 'E':U (icType),
input 3 (iiSeverity),
input '':U (icRowid),
input 'QadFin-8320':U (icFcMsgNumber),
input '':U (icFcExplanation),
input '':U (icFcIdentification),
input '':U (icFcContext),
output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
Leave MAINADDBLOCK.
end. /* if tqCInvoiceByIDForRegistrationNr.tiCInvoiceRegistrationNr = 0 or */
end. /* Not if not avaiable tqCInvoiceByIDForRegistrationNr */
/* ========================================================================== */
/* Create a new APM header and Fill the output param pointing to this record. */
/* Assign some fields in the new record: APMStatus,CI and Registration-nbr */
/* ========================================================================== */
<M-14 run AddDetailLine
(input 'APMatching':U (icTable),
input '':U (icParentRowid),
output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
if viFcReturnSuper <> 0
then assign viLocalReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0
then Leave MAINADDBLOCK.
assign tAPMatching.APMatchingStatus = icAPMatchingStatus
tAPMatching.tiCInvoiceRegistrationNr = tqCInvoiceByIDForRegistrationNr.tiCInvoiceRegistrationNr
tAPMatching.tlIsUpdateCInvoiceAutomatically = ilIsUpdateCInvoiceAutomatically
oiAPMatchingID = tAPMatching.APMatching_ID
ocAPMatchingTcRowid = tAPMatching.tc_Rowid.
/* ========================================================================== */
/* Call defaulting-method to get all invoice-related data into the APM-header */
/* ========================================================================== */
<M-15 run DefaultValuesInvoice
(input tAPMatching.tc_Rowid (icAPMatchingTcRowid),
input-output tAPMatching.tiCInvoicePostingYear (biInvoiceYear),
input-output tAPMatching.tcCInvoiceJournalCode (bcInvoiceJournal),
input-output tAPMatching.tiCInvoiceVoucher (biInvoiceVoucher),
input-output tAPMatching.tcCInvoiceReference (bcInvoiceReference),
input-output tAPMatching.tiCInvoiceRegistrationNr (biInvoiceRegistrationNr),
input-output tAPMatching.tcCreditorCode (bcCreditorCode),
input ? (iiOldReasonID),
input-output tAPMatching.Reason_ID (biNewReasonID),
input-output tAPMatching.tcReasonCode (bcNewReasonCode),
output tAPMatching.tiBusinessRelationID (oiBusinessRelationID),
output tAPMatching.tcBusinessRelationCode (ocBusinessRelationCode),
output tAPMatching.tcBusinessRelationICCode (ocBusinessRelationICCode),
output tAPMatching.tcCurrencyCode (ocCurrencyCode),
output tAPMatching.APMatchingTotalAmountTC (odAmountToMatchTC),
output tAPMatching.APMatchingTotalAmountLC (odAmountToMatchLC),
output tAPMatching.CInvoice_ID (oiCInvoiceId),
output tAPMatching.tdCInvoiceExchangeRate (odCInvoiceExchangeRate),
output tAPMatching.tdCInvoiceRateScale (odCInvoiceRateScale),
output tAPMatching.tdCInvoiceCCRate (odCInvoiceCCRate),
output tAPMatching.tdCInvoiceCCScale (odCInvoiceCCScale),
output tAPMatching.tdCInvoiceLCCCRate (odCInvoiceLCCCRate),
output tAPMatching.tdCInvoiceLCCCScale (odCInvoiceLCCCScale),
output tAPMatching.ttCInvoiceDate (otCInvoiceDate),
output tAPMatching.ttCInvoicePostingDate (otCInvoicePostingDate),
output tAPMatching.ttCInvoiceTaxPointDate (otCInvoiceTaxPointDate),
output tAPMatching.tcCInvoiceType (ocCInvoiceType),
output tAPMatching.tcCInvoicePaymentConditionCode (ocCInvoicePaymentCondition),
output tAPMatching.tlCInvoiceIsInitialStatus (olCInvoiceIsInitialStatus),
output tAPMatching.APMatchingARRecTaxTC (odTaxAcrueReceiptRecovTC),
output tAPMatching.APMatchingARNRecTaxTC (odTaxAcrueReceiptNonRecovTC),
output tAPMatching.APMatchingAIRecTaxTC (odTaxAcrueInvoiceRecovTC),
output tAPMatching.APMatchingAINRecTaxTC (odTaxAcrueInvoiceNonRecovTC),
output tAPMatching.APMatchingCInvoiceDiscPct (odInvoiceDiscountPercentage),
output tAPMatching.tcCreditorAddrTaxIDFederal (ocCreditorAddrTaxIDFederal),
output tAPMatching.tcCreditorAddrTaxIDState (ocCreditorAddrTaxIDState),
output tAPMatching.tcCreditorAddrTaxIDMisc1 (ocCreditorAddrTaxIDMisc1),
output tAPMatching.tcCreditorAddrTaxIDMisc2 (ocCreditorAddrTaxIDMisc2),
output tAPMatching.tcCreditorAddrTaxIDMisc3 (ocCreditorAddrTaxIDMisc3),
output tAPMatching.tlCreditorAddrIsTaxInCity (olCreditorAddrIsTaxInCity),
output tAPMatching.tlCreditorAddrIsEUCountry (olCreditorAddrIsEUCountry),
output tAPMatching.tcShipToAddrCountryCode (ocCreditorAddrCountryCode),
output tAPMatching.tiCreditorAddr_ID (oiCreditorAddrID),
output tAPMatching.tcShipToAddrTaxIDFederal (ocShipToAddrTaxIDFederal),
output tAPMatching.tcShipToAddrTaxIDState (ocShipToAddrTaxIDState),
output tAPMatching.tcShipToAddrTaxIDMisc1 (ocShipToAddrTaxIDMisc1),
output tAPMatching.tcShipToAddrTaxIDMisc2 (ocShipToAddrTaxIDMisc2),
output tAPMatching.tcShipToAddrTaxIDMisc3 (ocShipToAddrTaxIDMisc3),
output tAPMatching.tiShipToAddrTaxDeclaration (oiShipToAddrTaxDeclarat),
output tAPMatching.tlShipToAddrIsTaxInCity (olShipToAddrIsTaxInCity),
output tAPMatching.tlShipToAddrIsEUCountry (olShipToAddrIsEUCountry),
output tAPMatching.tcShipToAddrCountryCode (ocShipToAddrCountryCode),
output viDummy (oiOriginalAPMatchingID),
output tOrderFilterAPM (tOrderFilterAPM),
output tAPMatching.APMatchingDate (otPostingDate),
output viFcReturnSuper (oiReturnStatus)) in BAPMatching>
/* =============================================================================== */
/* Set the Date, Yr & Pd of the matching equal to the corresponding invoice-fields */
/* If the JournalCode was specified as input then use that one. If no JournalCode */
/* was specified then keep the default that was set by the InitialValues */
/* =============================================================================== */
assign tAPMatching.APMatchingDate = tqCInvoiceByIDForRegistrationNr.ttCInvoicePostingDate
tAPMatching.tiPeriodYear = tqCInvoiceByIDForRegistrationNr.tiCInvoicePostingYear
tAPMatching.tiPeriodPeriod = tqCInvoiceByIDForRegistrationNr.tiCInvoicePostingPeriod.
if icAPMatchingJournalCode <> "":U and
icAPMatchingJournalCode <> ?
then assign tAPMatching.tcJournalCode = icAPMatchingJournalCode.
END. /* MAINADDBLOCK */
/* ======================== */
/* Exception handling */
/* ======================== */
assign oiReturnStatus = viLocalReturnStatus.