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. |
/* ================================ */ /* 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.