project QadFinancials > class BCInvoice > method CreateCInvoices

Description

Create Creditor prepayment, new open-item,opening balance :
create cinvoice
create ci posting, cinvoicemovement
update balance and status
create cInvoiceposting


Parameters


tOpenBalanceCIinput-outputtemp-tabledfasd
iiBJournalEntryIdinputintegerInstance of BJournalEntry
iiPostingIdinputintegerPosting ID
icPONbrInvinputcharacter
ocNewRecordInfooutputcharacterNew Record Information :
rowid, cinvoice_id, rowid, cinvoice_id, ......
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BBankEntry.AdditionalUpdatesInvPrePayments
method BCDocument.AdditionalUpdatesPostingPrePayment
method BCInvoice.ApiCreateCreditorInvoices
method BCInvoice.ApiStdMaintainTTWithIntPost
method BCInvoiceAPMatching.CreateCInvoiceRun
method BExpenseNote.ExpNoteRegister
method BOpenItemAdjustment.OIAdjCommitSubCInvoice


program code (program3/bcinvoice.p)

empty temp-table tDefaultSafsCI.

assign vlStartCreditorByCreditor       = false
       vlStartReasonByIdCode           = false
       vlStartAddrByAddrBusRelType     = false
       vlStartCompanyPropByBusinessRel = false
       vlStartReasonByInitialStatus    = false
       vlStartBankNrPayCodeForCIDef    = false
       vlStartSupplierForDaybookSet    = false
       vlStartPOAccountingControl      = false.              

/* replace unknown value */
if iiBJournalEntryId = ? then assign iiBJournalEntryId = 0.
if iiPostingId = ? then assign iiPostingId = 0.

/* validate input parameters */
<M-1 run CreateCInvoicesValidate (input-output tOpenBalanceCI (tOpenBalanceCI), 
                                  output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
then assign oiReturnStatus = viFcReturnSuper.
if viFcReturnSuper < 0 then return.

CREATEBLOCK : DO :
    
    for each tOpenBalanceCI where
             tOpenBalanceCI.tcCreditorCode <> "":U no-lock:
        
        /* create the invoice */
        <M-2 run AddDetailLine (input  'CInvoice':U (icTable), 
                                input  '':U (icParentRowid), 
                                output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
        if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
        then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then leave CREATEBLOCK.
    
        find first tFcRowidConvert
            where tFcRowidConvert.tcFcNewRowid = string(rowid(tOpenBalanceCI)) no-error.
        if available tFcRowidConvert then
            assign tFcRowidConvert.tcFcNewRowid = tCInvoice.tc_Rowid.
    
        assign tCInvoice.Company_ID                   = tOpenBalanceCI.tiCompanyId
               tCInvoice.CInvoiceHoldAmountTC         = tOpenBalanceCI.tdInvoiceHoldAmountTC
               tCInvoice.CInvoicePostingPeriod        = tOpenBalanceCI.tiPeriodPeriod
               tCInvoice.CInvoicePostingYear          = tOpenBalanceCI.tiPeriodYear
               tCInvoice.tcCreditorCode               = tOpenBalanceCI.tcCreditorCode
               tCInvoice.tcDivisionCode               = tOpenBalanceCI.tcDivisionCode
               tCInvoice.tcJournalCode                = tOpenBalanceCI.tcJournalCode
               tCInvoice.CInvoicePostingDate          = tOpenBalanceCI.ttPostingDate
               tCInvoice.CInvoiceType                 = tOpenBalanceCI.tcInvoiceType
               tCInvoice.CInvoiceDate                 = tOpenBalanceCI.ttInvoiceDate
               tCInvoice.CInvoiceTaxPointDate         = tOpenBalanceCI.ttInvoiceTaxPointDate
               tCInvoice.CInvoiceReference            = tOpenBalanceCI.tcInvoiceReference
               tCInvoice.CInvoiceDescription          = tOpenBalanceCI.tcInvoiceDescription
               tCInvoice.tcCurrencyCode               = tOpenBalanceCI.tcTCCurrencyCode
               tCInvoice.tcProjectCode                = tOpenBalanceCI.tcProjectCode
               tCInvoice.tcCostCentreCode             = tOpenBalanceCI.tcCostCentreCode
               tCInvoice.tcNormalPaymentConditionCode = tOpenBalanceCI.tcNormalPaymentConditionCode
               tCInvoice.CInvoiceExchangeRate         = tOpenBalanceCI.tdExchangeRateTCLC
               tCInvoice.CinvoiceRateScale            = if (tOpenBalanceCI.tdExchangeRateScale = 0 or tOpenBalanceCI.tdExchangeRateScale = ?) then 1 else tOpenBalanceCI.tdExchangeRateScale  
               tCInvoice.CInvoiceCCRate               = tOpenBalanceCI.tdExchangeRateTCCC
               tCInvoice.CInvoiceCCScale              = if (tOpenBalanceCI.tdCCExchangeRateScale = 0 or tOpenBalanceCI.tdExchangeRateScale = ?)then 1 else tOpenBalanceCI.tdCCExchangeRateScale
               tCInvoice.tcReasonCode                 = tOpenBalanceCI.tcReasonCode
               tCInvoice.CInvoiceTSMNumber            = tOpenBalanceCI.tcInvoiceTSMNumber
               tCInvoice.CInvoiceDueDate              = tOpenBalanceCI.ttInvoiceDueDate
               tCInvoice.CInvoiceDiscountDueDate      = tOpenBalanceCI.ttInvoiceDiscountDueDate
               tCInvoice.CInvoiceCIText               = tOpenBalanceCI.tcPostingText
               tCInvoice.CInvoiceIsOpen               = true
               tCInvoice.CInvoiceIsERS                = tOpenBalanceCI.tlInvoiceIsERS
               tCInvoice.CInvoiceBatchNumber          = tOpenBalanceCI.tcInvoiceBatchNumber
               tCInvoice.CInvoiceIsSelected           = false
               ocNewRecordInfo                        = if tOpenBalanceCI.tcKey <> "":U
                                                        then tOpenBalanceCI.tcKey + ",":U + string(tCInvoice.CInvoice_ID)
                                                        else "":U 
               tOpenBalanceCI.tiInvoiceId            = tCInvoice.CInvoice_ID
               tCInvoice.tcRoleName                  = tOpenBalanceCI.tcRoleName
               tCInvoice.CInvoiceCommentNote         = tOpenBalanceCI.tcInvoiceCommentNote
               tCInvoice.CInvoiceDayBookSetCode      = tOpenBalanceCI.tcDayBookSetCode
               tCInvoice.tcBLWIGroupCode             = tOpenBalanceCI.tcBLWIGroupCode.
                    
        if tCInvoice.CInvoiceType <> {&INVOICETYPE-PREPAYMENT}
        then do:  
            
            if icPONbrInv <> ? and
               icPONbrInv <> "":U
            then do:  
                <Q-40 run PurchaseOrderByDomainNbrVend (all) (Read) (NoCache)
                   (input vcDomainCode, (DomainCode)
                    input icPONbrInv, (PONbr)
                    input ?, (POVendor)
                    input ?, (POCurrency)
                    input ?, (POType)
                    output dataset tqPurchaseOrderByDomainNbrVend) in BMfgPO>
             
                find tqPurchaseOrderByDomainNbrVend where
                     tqPurchaseOrderByDomainNbrVend.tcpo_domain = vcDomainCode and
                     tqPurchaseOrderByDomainNbrVend.tcpo_nbr    = icPONbrInv
                no-error.
            
                if available tqPurchaseOrderByDomainNbrVend
                then do:
                    assign tCInvoice.CInvoiceSiteCode         = tqPurchaseOrderByDomainNbrVend.tcpo_site
                           tCInvoice.CInvoiceDayBookSetCode   = tqPurchaseOrderByDomainNbrVend.tcpo_daybookset.
                end.
                    
                if  tCInvoice.CInvoiceDayBookSetCode = "":U or
                    tCInvoice.CInvoiceDayBookSetCode = ?
                then do:

                    <M-39 run CreateCInvoicesDayBookSetCode
                       (input-output vlStartSupplierForDaybookSet (blStartSupplierForDaybookSet), 
                        input-output vlStartPOAccountingControl (blStartPOAccountingControl), 
                        output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                    if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
                    then assign oiReturnStatus = viFcReturnSuper.
                    if viFcReturnSuper < 0 then leave CREATEBLOCK.
                end. /* If (tCInvoice.CInvoiceDayBookSetCode = "":U or */
            end. /* if icPONbrInv <> ? or */
            else do:
                <M-97 run CreateCInvoicesDayBookSetCode
                   (input-output vlStartSupplierForDaybookSet (blStartSupplierForDaybookSet), 
                    input-output vlStartPOAccountingControl (blStartPOAccountingControl), 
                    output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
                then assign oiReturnStatus = viFcReturnSuper.
                if viFcReturnSuper < 0 then leave CREATEBLOCK.
            end. /* else do: */
        end. /* if tCInvoice.CInvoiceType <> {&INVOICETYPE-PREPAYMENT} */       
        
        if tOpenBalanceCI.tcPostingType = {&POSTINGTYPE-DEBIT}
        then assign tCInvoice.CInvoiceOriginalDebitTC = tOpenBalanceCI.tdInvoiceAmountTC
                    tCInvoice.CInvoiceOriginalDebitLC = tOpenBalanceCI.tdInvoiceAmountLC
                    tCInvoice.CInvoiceOriginalDebitCC = tOpenBalanceCI.tdInvoiceAmountCC
                    tCInvoice.tdCInvoiceOriginalTC    = tOpenBalanceCI.tdInvoiceAmountTC
                    tCInvoice.tdCInvoiceOriginalLC    = tOpenBalanceCI.tdInvoiceAmountLC.
        else assign tCInvoice.CInvoiceOriginalCreditTC = tOpenBalanceCI.tdInvoiceAmountTC
                    tCInvoice.CInvoiceOriginalCreditLC = tOpenBalanceCI.tdInvoiceAmountLC
                    tCInvoice.CInvoiceOriginalCreditCC = tOpenBalanceCI.tdInvoiceAmountCC
                    tCInvoice.tdCInvoiceOriginalTC     = tOpenBalanceCI.tdInvoiceAmountTC
                    tCInvoice.tdCInvoiceOriginalLC     = tOpenBalanceCI.tdInvoiceAmountLC.

        if not vlStartCreditorByCreditor
        then do:
            <Q-29 run CreditorByCreditor  (Start) in BCreditor >
            assign vlStartCreditorByCreditor = true.
        end. /* end not vlStartCreditorByCreditor */
    
        <Q-4 run CreditorByCreditor (first) (Read) (Cache)
           (input ?, (CreditorId)
            input tOpenBalanceCI.tiCompanyId, (CompanyId)
            input tOpenBalanceCI.tcCreditorCode, (CreditorCode)
            input {&ADDRESSTYPECODESYSTEM-HEADOFFICE}, (AddressType)
            output dataset tqCreditorByCreditor) in BCreditor >
        find first tqCreditorByCreditor no-error.
        if not available tqCreditorByCreditor
        then do:
            assign oiReturnStatus = -1.
            <M-5 run SetMessage
               (input  trim(#T-12'The supplier is not defined in the system.':255(1134)T-12#) (icMessage), 
                input  '':U (icArguments), 
                input  '':U (icFieldName), 
                input  '':U (icFieldValue), 
                input  'E':U (icType), 
                input  3 (iiSeverity), 
                input  '':U (icRowid), 
                input  'QADFIN-670':U (icFcMsgNumber), 
                input  '' (icFcExplanation), 
                input  '' (icFcIdentification), 
                input  '' (icFcContext), 
                output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
            leave CREATEBLOCK.
        end. /* end not available tqCreditorByCreditor */
        assign tCInvoice.Creditor_ID        = tqCreditorByCreditor.tiCreditor_ID
               tCInvoice.tcPurchaseTypeCode = tqCreditorByCreditor.tcPurchaseTypeCode 
               tCInvoice.tcBLWIGroupCode    = tqCreditorByCreditor.tcBLWIGroupCode.
    
        /*Use the Credit Term per domain*/        
        if tCInvoice.CInvoiceType = {&INVOICETYPE-PREPAYMENT} 
             and (tCInvoice.tcNormalPaymentConditionCode = "":U or tCInvoice.tcNormalPaymentConditionCode = ?)
        then do:
           
            <Q-55 run DomainCreditTermByDomain (first) (Read) (NoCache)
               (input viDomainID, (Domain_ID)
                output dataset tqDomainCreditTermByDomain) in BDomainProperty>
    
            find first tqDomainCreditTermByDomain no-error.
            
            if available(tqDomainCreditTermByDomain) and tqDomainCreditTermByDomain.tcPrePaymentConditionCode <> ? and tqDomainCreditTermByDomain.tcPrePaymentConditionCode <> '':U 
                and tqDomainCreditTermByDomain.tlPrePaymentConditionIsActive = true 
            then
                tCInvoice.tcNormalPaymentConditionCode = tqDomainCreditTermByDomain.tcPrePaymentConditionCode. 
            else
                tCInvoice.tcNormalPaymentConditionCode = "":U.          
            
            if tCInvoice.tcNormalPaymentConditionCode = "":U or
               tCInvoice.tcNormalPaymentConditionCode = ?
            then do:
                assign tCInvoice.tcNormalPaymentConditionCode = tqCreditorByCreditor.tcNormalPaymentConditionCode.  
            
                /*if the paymentconditioncode is stage, get first normal paymentcondition*/
                if tqCreditorByCreditor.tcNormalPaymentConditionPayType = {&PAYMENTCONDITIONPAYMENTTYPE-STAGED} then
                do:
                    <Q-66 run PaymentConditionByProperties (all) (Read) (NoCache)
                       (input ?, (PaymentCondition_ID)
                        input ?, (PaymentConditionCode)
                        input true, (PaymentConditionIsActive)
                        input {&PAYMENTCONDITIONPAYMENTTYPE-NORMAL}, (PaymentConditionPaymentType)
                        input ?, (PaymentConditionPdDiscType)
                        input 0, (PaymentConditionPercentage)
                        output dataset tqPaymentConditionByProperties) in BPaymentCondition>                    
                    find first tqPaymentConditionByProperties no-error.
                    if available tqPaymentConditionByProperties
                    then assign tCInvoice.tcNormalPaymentConditionCode = tqPaymentConditionByProperties.tcPaymentConditionCode.
                end. /*tqCreditorByCreditor.tcNormalPaymentConditionPayType = {&PAYMENTCONDITIONPAYMENTTYPE-STAGED} */
            end.  
                       
        end. /* end tCInvoice.CInvoiceType = {&INVOICETYPE-PREPAYMENT} */
    
        /* default reason of creditor if not yet filled and linked cinvoiceislockpayment and cinvoiceisinvoiceapproved */
        if tCInvoice.tcReasonCode = "":U
        then assign tCInvoice.Reason_ID    = if tqCreditorByCreditor.tiReason_ID = ? then 0 else tqCreditorByCreditor.tiReason_ID
                    tCInvoice.tcReasonCode = if tqCreditorByCreditor.tcReasonCode = ? then "":U else tqCreditorByCreditor.tcReasonCode
                    vlReasonFromCreditor   = true.
        else assign vlReasonFromCreditor = false.
    
        /* all defaulting based on the reason code */
        <M-24 run CreateCInvoicesReason
           (input-output vlStartReasonByIdCode (blStartReasonByIdCode), 
            input-output vlStartReasonByInitialStatus (blStartReasonByInitialStatus), 
            input  vlReasonFromCreditor (ilIsReasonFromCreditor), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
        if viFcReturnSuper < 0 or viFcReturnSuper > 0 and oiReturnStatus = 0 then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then leave CREATEBLOCK.
        
        <M-44 run CreateCInvoicesDet  (output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
        if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
        then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then leave CREATEBLOCK.
    
        /* default own vat number, transaction end country */
        if not vlStartCompanyPropByBusinessRel
        then do:
             <Q-31 run CompanyPropertyByBusinessRel  (Start) in BCompanyProperty >
             assign vlStartCompanyPropByBusinessRel = true.
        end. /* end not vlStartCompanyPropByBusinessRel */
    
        <Q-7 run CompanyPropertyByBusinessRel (first) (Read) (Cache)
           (input tOpenBalanceCI.tiCompanyId, (CompanyId)
            input ?, (AddressType)
            output dataset tqCompanyPropertyByBusinessRel) in BCompanyProperty >
        find first tqCompanyPropertyByBusinessRel no-error.
        if available tqCompanyPropertyByBusinessRel
        then assign tCInvoice.CInvoiceOwnVatNumber        = tqCompanyPropertyByBusinessRel.tcAddressTaxIDState
                    tCInvoice.tcOwnVatNumberCountryCode   = tqCompanyPropertyByBusinessRel.tcAddressCountryCode.
    
        /* creditor vat number, transaction start */
        if not vlStartAddrByAddrBusRelType
        then do:
            <Q-33 run AddressByAddressBusRelType  (Start) in BBusinessRelation >
            assign vlStartAddrByAddrBusRelType = true.
        end. /* end not vlStartAddrByAddrBusRelType */
    
        <Q-8 run AddressByAddressBusRelType (all) (Read) (Cache)
           (input ?, (AddressTypeId)
            input {&ADDRESSTYPECODESYSTEM-HEADOFFICE}, (AddressTypeCode)
            input tqCreditorByCreditor.tiBusinessRelation_ID, (BusinessRelationId)
            input tqCreditorByCreditor.tcBusinessRelationCode, (BusinessRelationCode)
            input ?, (AddressId)
            output dataset tqAddressByAddressBusRelType) in BBusinessRelation >
        find first tqAddressByAddressBusRelType no-error.
        if available tqAddressByAddressBusRelType
        then assign tCInvoice.CInvoiceCreditorVatNumber     = tqAddressByAddressBusRelType.tcAddressTaxIDState
                    tCInvoice.tcCredVatNumberCountryCode    = tqAddressByAddressBusRelType.tcCountryCode.
    
        /* Create CInvoiceBank */
        if (tOpenBalanceCI.tiBankNumber_ID <> ? and tOpenBalanceCI.tiBankNumber_ID <> 0) or
           (tOpenBalanceCI.tcBankNumber <> ? and tOpenBalanceCI.tcBankNumber <> "":U)
        then do:
             <M-14 run AddDetailLine
                (input  'CInvoiceBank':U (icTable), 
                 input  tCInvoice.tc_rowid (icParentRowid), 
                 output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
            if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
            then assign oiReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 then leave CREATEBLOCK.
    
            assign tCInvoiceBank.CInvoice_ID           = tCInvoice.CInvoice_ID
                   tCInvoiceBank.BankNumber_ID         = tOpenBalanceCI.tiBankNumber_ID
                   tCInvoiceBank.tcBankNumber          = tOpenBalanceCI.tcBankNumber
                   tCInvoiceBank.CInvoiceBankToPayTC   = tOpenBalanceCI.tdInvoiceAmountTC
                   tCInvoiceBank.tcBankNumberExtension = tOpenBalanceCI.tcBankNumberExtension
                   tCInvoiceBank.tiParentObject_ID     = tCInvoice.Creditor_ID.
        end. /* end tOpenBalanceCI.tiBankNumber_ID <> ? and ... */
        else do:

           <Q-22 run BankNumberForCIDefault (all) (Read) (NoCache)
              (input tCInvoice.Creditor_ID, (ParentObjectId)
               input ?, (BankNumberIsDefault)
               input true, (BankNumberIsActive)
               input ?, (CompanyId)
               output dataset tqBankNumberForCIDefault) in BBankNumber>
            
           /* Find active and default bank number for current activity */
            find first tqBankNumberForCIDefault where 
                       tqBankNumberForCIDefault.tiParentObject_ID     = tCInvoice.Creditor_ID and
                       tqBankNumberForCIDefault.tlBankNumberIsActive  = true                  and
                       tqBankNumberForCIDefault.tlBankNumberIsDefault = true                  and
                       tqBankNumberForCIDefault.tiCompany_ID          = tOpenBalanceCI.tiCompanyId 
                       no-error.
                         
            /* Find active bank number for the current entity */     
            if not available tqBankNumberForCIDefault
            then find first tqBankNumberForCIDefault where
                            tqBankNumberForCIDefault.tiParentObject_ID    = tCInvoice.Creditor_ID and
                            tqBankNumberForCIDefault.tlBankNumberIsActive = true                  and
                            tqBankNumberForCIDefault.tiCompany_ID         = tOpenBalanceCI.tiCompanyId
                            no-error.
            
            /* just find the first active bank number */
            if not available tqBankNumberForCIDefault
            then find first  tqBankNumberForCIDefault where
                             tqBankNumberForCIDefault.tiParentObject_ID     = tCInvoice.Creditor_ID and
                             tqBankNumberForCIDefault.tlBankNumberIsDefault = true                  and
                             tqBankNumberForCIDefault.tlBankNumberIsActive  = true
                             no-error.  
             
            if available tqBankNumberForCIDefault
            then do:
              <M-16 run AddDetailLine
                 (input  'CInvoiceBank':U (icTable), 
                  input  tCInvoice.tc_rowid (icParentRowid), 
                  output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                    
                if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
                then assign oiReturnStatus = viFcReturnSuper.
                if viFcReturnSuper < 0 then leave CREATEBLOCK.
    
                assign tCInvoiceBank.CInvoice_ID           = tCInvoice.CInvoice_ID
                       tCInvoiceBank.BankNumber_ID         = tqBankNumberForCIDefault.tiBankNumber_ID
                       tCInvoiceBank.tcBankNumber          = tqBankNumberForCIDefault.tcBankNumber
                       tCInvoiceBank.CInvoiceBankToPayTC   = tOpenBalanceCI.tdInvoiceAmountTC
                       tCInvoiceBank.tcBankNumberExtension = tqBankNumberForCIDefault.tcBankNumberExtension
                       tCInvoiceBank.tiBankPayFormat_ID    = tqBankNumberForCIDefault.tiBankPayFormat_ID
                       tCInvoiceBank.tiParentObject_ID     = tqBankNumberForCIDefault.tiParentObject_ID.
                       
            end. /* end if available */
        end. /* else  tOpenBalanceCI.tcCreditorCode <> '' */
        
        if can-find(first tCInvoiceBank) and
           tCInvoiceBank.BankNumber_ID <> 0 and
           tCInvoiceBank.BankNumber_ID <> ? and
           tCInvoiceBank.CInvoiceBank_ID <> 0 and
           tCInvoiceBank.CInvoiceBank_ID <> ?
        then do:
            if not vlStartBankNrPayCodeForCIDef
            then do:
                <Q-37 run BankNumberPayCodeForCIDefSupp  (Start) in BBankNumber>
                assign vlStartBankNrPayCodeForCIDef = true.
            end. /* end not vlStartBankNrPayCodeForCIDef */
    
            <Q-19 run BankNumberPayCodeForCIDefSupp (all) (Read) (Cache)
               (input tCInvoiceBank.BankNumber_ID, (BankNumberId)
                output dataset tqBankNumberPayCodeForCIDefSupp) in BBankNumber>
            
            for each tqBankNumberPayCodeForCIDefSupp where
                     tqBankNumberPayCodeForCIDefSupp.tiBankNumber_ID = tCInvoiceBank.BankNumber_ID:
                <M-20 run AddDetailLine
                   (input  'CInvoiceBankPayCode':U (icTable), 
                    input  tCInvoiceBank.tc_Rowid (icParentRowid), 
                    output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                if viFcReturnSuper < 0 or
                   oiReturnStatus  = 0
                then assign oiReturnStatus = viFcReturnSuper.
                if viFcReturnSuper < 0 then leave CREATEBLOCK.
            
                assign tCInvoiceBankPayCode.CInvoiceBank_ID             = tCInvoiceBank.CInvoiceBank_ID
                       tCInvoiceBankPayCode.PayFormatCode_ID            = tqBankNumberPayCodeForCIDefSupp.tiPayFormatCode_ID
                       tCInvoiceBankPayCode.PayFormatGroup_ID           = tqBankNumberPayCodeForCIDefSupp.tiPayFormatGroup_ID
                       tCInvoiceBankPayCode.CInvoiceBankPayCodeValue    = (if tqBankNumberPayCodeForCIDefSupp.tcBankNumberPayCodeValue <> ? and
                                                                           tqBankNumberPayCodeForCIDefSupp.tcBankNumberPayCodeValue <> "":U
                                                                           then tqBankNumberPayCodeForCIDefSupp.tcBankNumberPayCodeValue
                                                                           else tqBankNumberPayCodeForCIDefSupp.tcPayFormatCode)
                       tCInvoiceBankPayCode.tcPayFormatGroupCode        = tqBankNumberPayCodeForCIDefSupp.tcPayFormatGroupCode
                       tCInvoiceBankPayCode.tcPayFormatGroupDescription = tqBankNumberPayCodeForCIDefSupp.tcPayFormatGroupDescription
                       tCInvoiceBankPayCode.tlPayFormatGroupIsMandatory = tqBankNumberPayCodeForCIDefSupp.tlPayFormatGroupIsMandatory
                       tCInvoiceBankPayCode.tcPayFormatGroupInputOption = tqBankNumberPayCodeForCIDefSupp.tcPayFormatGroupInputOption
                       tCInvoiceBankPayCode.tcPayFormatGroupDataType    = tqBankNumberPayCodeForCIDefSupp.tcPayFormatGroupDataType.
                       
                       if tCInvoiceBankPayCode.tcPayFormatGroupDataType = {&PAYFORMATGROUPDATATYPE-LOGICAL} and
                       (tCInvoiceBankPayCode.CInvoiceBankPayCodeValue = ? or
                        tCInvoiceBankPayCode.CInvoiceBankPayCodeValue = "":U)
                        then assign tCInvoiceBankPayCode.CInvoiceBankPayCodeValue = "false":U.
            end. /* end for each tqBankNumberPayCodeForCIDefSupp ... */
        end. /* end can-find(first tCInvoiceBank) and ... */
        
        /* VAT currency rate - VAT currency itself is defaulted in IntialValues */
        <M-13 run GetVatExchangeRate
           (input  tCInvoice.Company_ID (iiCompanyID), 
            input  tCInvoice.tcCurrencyCode (icCInvoiceCurrencyCode), 
            input  tCInvoice.tcVatCurrencyCode (icOwnVatCurrencyCode), 
            input  tCInvoice.CInvoiceExchangeRate (idCInvoiceExchangeRate), 
            input  tCInvoice.CinvoiceRateScale (idCInvoiceRateScale), 
            input  tCInvoice.CInvoiceCurrency_ID (iiCInvoiceCurrencyId), 
            input  tCInvoice.VatCurrency_ID (iiOwnVatCurrencyId), 
            input  tCInvoice.CInvoiceTaxPointDate (itTaxPointDate), 
            output tCInvoice.CInvoiceVatExchangeRate (odVatExchangeRate), 
            output tCInvoice.CInvoiceVatRateScale (odVatRateScale), 
            output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
        if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
        then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then leave CREATEBLOCK.
        
        /* If field tOpenBalanceCI.tcBLWIGroupCode is set to SKIPGTMCALLFORNONTAXOPENBAL and the invoice is non-taxable */
        /* then we just look for the non-taxable VAT of the domain and create CInvoiceVat ourself                       */
        /* else we call DefaultValuesTax that will create all required data after calling GTM                           */
        /* This was implemented to increase the performance for opening-balances (as they are always non-taxable)       */
        if tOpenBalanceCI.tcBLWIGroupCode  = {&SKIPGTMCALLFORNONTAXOPENBAL} and 
           tCInvoice.CInvoiceIsTaxable     = false                          and 
           tCInvoice.Company_ID           <> 0                              and
           tCInvoice.Company_ID           <> ?
        then do :
            /* Find the domain of the invoice */
            if tCInvoice.Company_ID = viCompanyID 
            then assign vcDomainCodeOfCInvoice = vcDomainCode.
            else do : 
                <Q-86 run CompanyByCompanyIdCode (all) (Read) (Cache)
                   (input tCInvoice.Company_ID, (CompanyId)
                    input ?, (CompanyCode)
                    output dataset tqCompanyByCompanyIdCode) in BCompany>
                Find tqCompanyByCompanyIdCode where 
                     tqCompanyByCompanyIdCode.tiCompany_ID = tCInvoice.Company_ID
                     no-lock no-error.
                if not available tqCompanyByCompanyIdCode
                then do :
                    assign vcMessage      = trim(substitute(#T-746'Unable to find the Domain based upon the ID of the Company (&1) of the Invoice':250(211246318)T-746#,tCInvoice.Company_ID))
                           oiReturnStatus = -1.
                    <M-48 run SetMessage
                       (input  vcMessage (icMessage), 
                        input  '':U (icArguments), 
                        input  '':U (icFieldName), 
                        input  '':U (icFieldValue), 
                        input  'E':U (icType), 
                        input  3 (iiSeverity), 
                        input  '':U (icRowid), 
                        input  'qadfin-813459':U (icFcMsgNumber), 
                        input  '' (icFcExplanation), 
                        input  '' (icFcIdentification), 
                        input  '' (icFcContext), 
                        output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                    leave CREATEBLOCK.                
                end. /* if not available tqCompanyByCompanyIdCode */
                assign vcDomainCodeOfCInvoice = tqCompanyByCompanyIdCode.tcDomainCode. 
            end. /* Not if tCInvoice.Company_ID = viCompanyID */
            /* Remove any taxes that were already on the invoice */
            for each tCInvoiceVat where
                     tCInvoiceVat.tc_ParentRowid = tCInvoice.tc_Rowid :
                if tCInvoiceVat.tc_Status = "N":U
                then delete tCInvoiceVat.
                else assign tCInvoiceVat.tc_Status = "D":U.
            end. /* for each tCInvoiceVat where */
            /* Query the non-taxable VAT of the domain used for output */
            <Q-56 run VATPrim (all) (Read) (Cache)
               (input ?, (VatId)
                input '00000000':U, (VatCode)
                input ?, (DomainId)
                input vcDomainCode, (DomainCode)
                input {&VATINOUT-INPUT}, (VatInOut)
                output dataset tqVATPrim) in BVAT>
            for first tqVATPrim where
                      tqVATPrim.tcVatCode    = "00000000":U       and 
                      tqVATPrim.tcVatInOut   = {&VATINOUT-INPUT} and 
                      tqVATPrim.tcDomainCode = vcDomainCode
                      no-lock :
                /* Create a tCInvoiceVat with all default values */
                <M-46 run AddDetailLine
                   (input  'CInvoiceVat':U (icTable), 
                    input  tCInvoice.tc_Rowid (icParentRowid), 
                    output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
                if viFcReturnSuper <> 0 then assign oiReturnStatus = viFcReturnSuper.
                if viFcReturnSuper < 0 then leave CREATEBLOCK.
                assign tCInvoiceVat.tcVatCode                  = tqVATPrim.tcVatCode
                       tCInvoiceVat.tcDomainCode               = tqVATPrim.tcDomainCode
                       tCInvoiceVat.tcVatInOut                 = tqVATPrim.tcVatInOut
                       tCInvoiceVat.tcNormalTaxGLCode          = "":U
                       tCInvoiceVat.tcNormalTaxDivisionCode    = "":U
                       tCInvoiceVat.tcAbsRetTaxGLCode          = "":U
                       tCInvoiceVat.tcAbsRetTaxDivisionCode    = "":U
                       tCInvoiceVat.CInvoiceVatIsTaxable       = tCInvoice.CInvoiceIsTaxable
                       tCInvoiceVat.CInvoiceVatSequence        = 1
                       tCInvoiceVat.CInvoiceVatUILinkedRowID   = "0":U                   
                       tCInvoiceVat.CInvoiceVatVatBaseDebitLC  = 0
                       tCInvoiceVat.CInvoiceVatVatBaseDebitTC  = 0
                       tCInvoiceVat.CInvoiceVatVatBaseCreditLC = 0
                       tCInvoiceVat.CInvoiceVatVatBaseCreditTC = 0
                       tCInvoiceVat.CInvoiceVatVatBaseDebitCC  = 0
                       tCInvoiceVat.CInvoiceVatVatBaseCreditCC = 0
                       tCInvoiceVat.CInvoiceVatNTBaseDebitTC   = 0
                       tCInvoiceVat.CInvoiceVatNTBaseCreditTC  = 0 
                       tCInvoiceVat.CInvoiceVatVatDebitTC      = 0
                       tCInvoiceVat.CInvoiceVatVatDebitLC      = 0        
                       tCInvoiceVat.CInvoiceVatVatCreditTC     = 0
                       tCInvoiceVat.CInvoiceVatVatCreditLC     = 0
                       tCInvoiceVat.CInvoiceVatIsUpdAllow      = false
                       tCInvoiceVat.CInvoiceVatIsAbsRet        = false
                       tCInvoiceVat.CInvoiceVatIsAccrRcpUs     = false
                       tCInvoiceVat.CInvoiceVatIsRevCharge     = false
                       tCInvoiceVat.CInvoiceVatTaxTrType       = {&VATTAXTRANSACTIONTYPE-APVOUCHER} 
                       tCInvoiceVat.TxtyTaxType                = {&VATTAXTYPE-NONTAX}
                       tCInvoiceVat.TxenvTaxEnv                = "":U
                       tCInvoiceVat.TxclTaxCls                 = "":U
                       tCInvoiceVat.TxuTaxUsage                = "":U.           
            end. /* for first tqVATPrim where */
        end. /* if tOpenBalanceCI.tcBLWIGroupCode  = {&SKIPGTMCALLFORNONTAXOPENBAL} and */
        else do :
            <M-17 run DefaultValuesTax
               (input  tCInvoice.tc_Rowid (icCInvoiceRowid), 
                input  tCInvoice.CInvoice_ID (iiCInvoiceId), 
                input  tCInvoice.tcCurrencyCode (icCurrencyCode), 
                input  tCInvoice.CInvoiceVoucher (icDocumentReference), 
                input  tCInvoice.CInvoiceTaxPointDate (itTaxPointDate), 
                input  tqCreditorByCreditor.tcTxzTaxZone (icShipFromTaxZone), 
                input  tCInvoice.tcShipToTaxZone (icShipToTaxZone), 
                input  tqCreditorByCreditor.tcTxclTaxCls (icTxclTaxClass), 
                input  tqCreditorByCreditor.tcTxuTaxUsage (icTxuTaxUsage), 
                input  if tCInvoice.CInvoiceType = {&INVOICETYPE-INVOICE} then tCInvoice.CInvoiceOriginalCreditTC else if tCInvoice.CInvoiceType = {&INVOICETYPE-CREDITNOTE} then tCInvoice.CInvoiceOriginalDebitTC else 0 (idInvoiceAmountTC), 
                input  tCInvoice.CInvoiceExchangeRate (idExchangeRate), 
                input  tCInvoice.CInvoiceRateScale (idExchangeRateScale), 
                input  tCInvoice.tcNormalPaymentConditionCode (icPaymentConditionCode), 
                input  tCInvoice.CInvoicePostingDate (itPostingDate), 
                input  false (ilTaxable), 
                input  tCInvoice.CInvoiceIsWHT (ilCreditorIsWht), 
                input  tCInvoice.CInvoiceType (icInvoiceType), 
                input  ? (ilShipToAddressIsTaxInCity), 
                input  tCInvoice.CInvoiceVatExchangeRate (idVatExchangeRate), 
                input  tCInvoice.CInvoiceVatRateScale (idVatRateScale), 
                input  tCInvoice.CInvoiceIsLogisticMatching (ilIsLogisticMatching), 
                output vcDummy (ocTxenvTaxEnv), 
                input  tCInvoice.CInvoiceIsTaxExcluded (ilCInvoiceIsTaxExcluded), 
                input  tCInvoice.CInvoiceDate (itCInvoiceDate), 
                input  tCInvoice.CInvoiceCCRate (idCCExchangeRate), 
                input  tCInvoice.CInvoiceCCScale (idCCExchangeRateScale), 
                input  tCInvoice.tiShipToAddressId (iiShipToAddressID), 
                input  tqCreditorByCreditor.tiAddress_ID (iiShipFromAddressID), 
                input  tCInvoice.tcCreditorCode (icCreditorCode), 
                output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
            if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
            then assign oiReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 then leave CREATEBLOCK.
        end. /* Not if tOpenBalanceCI.tcBLWIGroupCode  = {&SKIPGTMCALLFORNONTAXOPENBAL} and */
        
        /* Update payment details of the invoice including staged payment */
        <M-51 run CreateCInvoicesPayment  (output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
        if viFcReturnSuper < 0 or viFcReturnSuper > 0 and oiReturnStatus = 0 then assign oiReturnStatus = viFcReturnSuper.
        if viFcReturnSuper < 0 then leave CREATEBLOCK.
    
        /* ci posting */
        if tCInvoice.CInvoiceIsInitialStatus <> true
        then do:
             <M-79 run CreateCInvoicesGLAccount
                (input  tCInvoice.tcControlGLCode (icGLCode), 
                 input  ? (iiDivisionId), 
                 input-output tCInvoice.tcDivisionCode (bcDivisionCode), 
                 input  ? (iiCostCentreId), 
                 input-output tCInvoice.tcCostCentreCode (bcCostCentreCode), 
                 input  ? (iiProjectId), 
                 input-output tCInvoice.tcProjectCode (bcProjectCode), 
                 input  tCInvoice.CInvoiceType (icCInvoiceType), 
                 input  tqCreditorByCreditor.tiInvControlGLProfile_ID (iiInvControlGLProfileId), 
                 input  tqCreditorByCreditor.tiCnControlGLProfile_ID (iiCnControlGLProfileId), 
                 input  tqCreditorByCreditor.tiPrePayControlGLProfile_ID (iiPrePayControlGLProfileId), 
                 output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
            if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
            then assign oiReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 then leave CREATEBLOCK.
    
            /* i don't use it but i have to give it as input parameter so i make it empty first */
            assign viRepeatingPostingID = iiPostingId. /* to make sure that in case iiPostingId = 0, it stays 0 after the first run */        
            <M-11 run CreateCIPosting
               (input  tCInvoice.CInvoice_ID (iiCInvoiceId), 
                input  tOpenBalanceCI.tiPeriodYear (iiPeriodYear), 
                input  tOpenBalanceCI.tiPeriodPeriod (iiPeriodPeriod), 
                input  tOpenBalanceCI.ttPostingDate (itPostingDate), 
                input  tqCreditorByCreditor.tiCreditor_ID (iiCreditorId), 
                input  tOpenBalanceCI.tcCreditorCode (icCreditorCode), 
                input  tOpenBalanceCI.tcInvoiceType (icCInvoiceType), 
                input  if tOpenBalanceCI.tcTransferAccountDivisionCode = '':U then tOpenBalanceCI.tcDivisionCode else tOpenBalanceCI.tcTransferAccountDivisionCode (icDivisionCode), 
                input  tOpenBalanceCI.tcJournalCode (icJournalCode), 
                input  tOpenBalanceCI.tiInvoiceVoucher (iiVoucher), 
                input  tOpenBalanceCI.ttInvoiceTaxPointDate (itTaxPointDate), 
                input  tOpenBalanceCI.tcInvoiceReference (icReference), 
                input  tOpenBalanceCI.tcInvoiceDescription (icDescription), 
                input  tOpenBalanceCI.tdInvoiceAmountTC (idInvoiceAmountTC), 
                input  tOpenBalanceCI.tdInvoiceAmountLC (idInvoiceAmountLC), 
                input  tOpenBalanceCI.tdInvoiceAmountCC (idInvoiceAmountCC), 
                input  tOpenBalanceCI.tcTCCurrencyCode (icCurrencyCode), 
                input  tOpenBalanceCI.tdExchangeRateTCLC (idExchangeRate), 
                input  (if tOpenBalanceCI.tdExchangeRateScale = 0 then 1 else tOpenBalanceCI.tdExchangeRateScale) (idExchangeRateScale), 
                input  tOpenBalanceCI.tcPostingText (icCIText), 
                input  tOpenBalanceCI.tcPostingType (icPostingType), 
                input  tOpenBalanceCI.tcTransferAccountGLCode (icGlCode), 
                input  if tOpenBalanceCI.tcTransferAccountCostCentreCode = '':U then tOpenBalanceCI.tcCostCentreCode else tOpenBalanceCI.tcTransferAccountCostCentreCode (icCostCentreCode), 
                input  if tOpenBalanceCI.tcTransferAccountProjectCode = '':U then tOpenBalanceCI.tcProjectCode else tOpenBalanceCI.tcTransferAccountProjectCode (icProjectCode), 
                input  tOpenBalanceCI.tlOnlyControlAccount (ilOnlyControlAccount), 
                input  '':U (icShipToCountryCode), 
                input  '':U (icTxclTaxCls), 
                input  '':U (icTxuTaxUsage), 
                input  '':U (icTxenvTaxEnv), 
                input  '':U (icPaymentCondition), 
                input  ? (ilIsTaxInCityFromShipTo), 
                input  '':U (icPoNbr), 
                input  ? (ilIsTaxable), 
                input  tCInvoice.tcCostCentreCode (icControlCostCentreCode), 
                input  tCInvoice.tcProjectCode (icControlProjectCode), 
                input  0 (iiShipFromAddressId), 
                input  0 (iiShipToAddressId), 
                input  false (ilIsLogisticMatching), 
                input  true (ilGetDefaultSafs), 
                input  tqCreditorByCreditor.tcBusinessRelationCode (icBusinessRelationCode), 
                input  tqCreditorByCreditor.tiPrePayControlGLProfile_ID (iiPrePayControlGLProfileId), 
                input  tqCreditorByCreditor.tiInvControlGLProfile_ID (iiInvControlGLProfileId), 
                input  tqCreditorByCreditor.tiCnControlGLProfile_ID (iiCnControlGLProfileId), 
                input  tCInvoice.tc_Rowid (icCInvoiceRowid), 
                input  if tqCreditorByCreditor.tlBusinessRelationIsInterco then tqCreditorByCreditor.tcBusinessRelationICCode else '':U (icBusinessRelationInterCoCode), 
                input  tqCreditorByCreditor.tcCountryCode (icShipFromCountryCode), 
                input  tqCreditorByCreditor.tlCountryIsEUCountry (ilShipFromCountryIsEUCountry), 
                input  tqCreditorByCreditor.tcTxzTaxZone (icCreditorTaxZone), 
                input  tCInvoice.CInvoiceIsTaxExcluded (ilCInvoiceIsTaxExcluded), 
                input  ? (ilIsInitialStatus), 
                input-output tCInvoiceVat (tApiCInvoiceVat), 
                input  tDefaultSafsCI (tDefaultSafsCI), 
                input  yes (ilHandleCommunicationWithJE), 
                input-output iiBJournalEntryId (biBJournalEntryId), 
                input-output viRepeatingPostingID (biPostingId), 
                input  tOpenBalanceCI.tdExchangeRateTCCC (idExchangeRateCC), 
                input  tOpenBalanceCI.tdCCExchangeRateScale (idExchangeRateScaleCC), 
                input  tOpenBalanceCI.ttInvoiceDate (itInvoiceDate), 
                output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
            if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
            then assign oiReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 then leave CREATEBLOCK.
        end. /* of if tCInvoice.CInvoiceIsInitialStatus <> true */
        
        /* /* XXS LBO 5.8.2004 */
        if tCInvoice.CInvoiceType = {&INVOICETYPE-PREPAYMENT}
        then assign tCInvoice.CInvoiceAllocationStatus  = {&ALLOCSTATUS-ALLOC}
                    tCInvoice.CInvoiceIsLockPayment     = false
                    tCInvoice.CInvoiceIsInitialStatus   = false
                    tCInvoice.CInvoiceIsInvoiceApproved = true
                    tCInvoice.tcReasonAllocationStatus  = {&ALLOCSTATUS-NOALLOC}.
        /* XXE LBO 5.8.2004 */ */
                
        /* Tackle the withholding taxes WHT: for every invoice - meaning each tOpenBalanceCI - there can only be a single WHT via this method although the normal UI of the CI support multiple WHTs to be specified per invoice */
        /* This was a limitation to reduce the impact of extending the current SupplierOpeningBalance function for WHT - agreeed upon by BA's (IMH)  */
        if tOpenBalanceCI.tcVatCode <> "":U and 
           tOpenBalanceCI.tcVatCode <> ?    and 
           ((tOpenBalanceCI.tdWHTFeeCreditTC     <> 0 and 
             tOpenBalanceCI.tdWHTFeeCreditTC     <> ?)      or 
            (tOpenBalanceCI.tdWHTFeeDebitTC      <> 0 and 
             tOpenBalanceCI.tdWHTFeeDebitTC      <> ?)      or 
            (tOpenBalanceCI.tdWHTExpenseCreditTC <> 0 and 
             tOpenBalanceCI.tdWHTExpenseCreditTC <> ?)      or 
            (tOpenBalanceCI.tdWHTExpenseDebitTC  <> 0 and 
             tOpenBalanceCI.tdWHTExpenseDebitTC  <> ?) )
        then do :
            /* Create a CInvoiceWHT record */
            <M-91 run AddDetailLine
               (input  'CInvoiceWHT':U (icTable), 
                input  tCInvoice.tc_rowid (icParentRowid), 
                output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
            if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
            then assign oiReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 then leave CREATEBLOCK.
            /* Copy the input into the new CInvoiceWHT record */
            assign tCInvoiceWHT.tcVatCode                  = tOpenBalanceCI.tcVatCode
                   tCInvoiceWHT.CInvoiceWHTFeeDebitTC      = tOpenBalanceCI.tdWHTFeeDebitTC
                   tCInvoiceWHT.CInvoiceWHTFeeCreditTC     = tOpenBalanceCI.tdWHTFeeCreditTC
                   tCInvoiceWHT.CInvoiceWHTExpenseDebitTC  = tOpenBalanceCI.tdWHTExpenseDebitTC
                   tCInvoiceWHT.CInvoiceWHTExpenseCreditTC = tOpenBalanceCI.tdWHTExpenseCreditTC.
            /* Default and copy the Domain and In-out of the WHT-code */
            assign tCInvoiceWHT.tcVatInOut                 = (if tOpenBalanceCI.tcVatInOut <> "":U and tOpenBalanceCI.tcVatInOut <> ? then tOpenBalanceCI.tcVatInOut else {&VATINOUT-INPUT})
                   tCInvoiceWHT.tcDomainCode               = (if tOpenBalanceCI.tcDomainCode <> "":U and tOpenBalanceCI.tcDomainCode <> ? then tOpenBalanceCI.tcDomainCode else vcDomainCode).
            /* Call the defaulting method that will fill in all WHT details based upon the VatCode (=WHTCode) and the Fee or Expense */
            /* Note that some of the output parameters of this call will need to be chnaged when merging in FT293 with the Brasil-WHT into the trunk  */
            <M-61 run DefaultValuesWHTCode
               (input  tCInvoice.tc_Rowid (icCInvoiceRowId), 
                input  tCInvoice.CInvoiceType (icCInvoiceType), 
                input  tCInvoiceWHT.tcVatCode (icWHTCode), 
                input-output tCInvoiceWHT.CInvoiceWHTFeeDebitTC (bdCInvoiceWHTFeesDebitTC), 
                input-output tCInvoiceWHT.CInvoiceWHTFeeCreditTC (bdCInvoiceWHTFeesCreditTC), 
                input  tCInvoice.tcCurrencyCode (icCInvoiceCurrencyCode), 
                input  tCInvoice.CInvoiceCurrency_ID (iiCInvoiceCurrencyId), 
                input  tCInvoice.CInvoiceExchangeRate (idCInvoiceExchangeRate), 
                input  tCInvoice.CInvoiceRateScale (idCInvoiceExchangeRateScale), 
                input  tCInvoice.CInvoicePostingDate (itCInvoicePostingDate), 
                input  tCInvoice.CInvoiceDate (itCInvoiceDate), 
                output tCInvoiceWHT.CInvoiceWHTTaxType (ocTx2TaxType), 
                output tCInvoiceWHT.tcVatDescription (ocTx2Desc), 
                output tCInvoiceWHT.CInvoiceWHTTaxPct (odTx2TaxPct), 
                output tCInvoiceWHT.CInvoiceWHTBaseTaxPct (odWHTBasePercentage), 
                output tCInvoiceWHT.tcGLCode (ocWHTAcct), 
                output tCInvoiceWHT.tcDivisionCode (ocWHTSubAcct), 
                output tCInvoiceWHT.CInvoiceWHTTaxFeeDebitTC (odCInvoiceWHTTaxableFeesDebitTC), 
                output tCInvoiceWHT.CInvoiceWHTTaxFeeCreditTC (odCInvoiceWHTTaxableFeesCreditTC), 
                output tCInvoiceWHT.CInvoiceWHTTaxFeeDebitLC (odCInvoiceWHTTaxableFeesDebitLC), 
                output tCInvoiceWHT.CInvoiceWHTTaxFeeCreditLC (odCInvoiceWHTTaxableFeesCreditLC), 
                output tCInvoiceWHT.CInvoiceWHTTaxFeeDebitCC (odCInvoiceWHTTaxableFeesDebitCC), 
                output tCInvoiceWHT.CInvoiceWHTTaxFeeCreditCC (odCInvoiceWHTTaxableFeesCreditCC), 
                output tCInvoiceWHT.CInvoiceWHTAmtDebitTC (odCInvoiceWHTAmountDebitTC), 
                output tCInvoiceWHT.CInvoiceWHTAmtCreditTC (odCInvoiceWHTAmountCreditTC), 
                output tCInvoiceWHT.CInvoiceWHTAmtDebitLC (odCInvoiceWHTAmountDebitLC), 
                output tCInvoiceWHT.CInvoiceWHTAmtCreditLC (odCInvoiceWHTAmountCreditLC), 
                output tCInvoiceWHT.CInvoiceWHTAmtDebitCC (odCInvoiceWHTAmountDebitCC), 
                output tCInvoiceWHT.CInvoiceWHTAmtCreditCC (odCInvoiceWHTAmountCreditCC), 
                output tCInvoiceWHT.CInvoiceWHTIsUpdAllow (olWHTIsUpdAllow), 
                output viFcReturnSuper (oiReturnStatus)) in BCInvoice>
            if viFcReturnSuper < 0 or (viFcReturnSuper > 0 and oiReturnStatus = 0)
            then assign oiReturnStatus = viFcReturnSuper.
            if viFcReturnSuper < 0 then leave CREATEBLOCK.
        end. /* if tOpenBalanceCI.tcVatCode <> "":U and */           
                
    end. /* end for each tOpenBalanceCI */
    
END. /* end CREATEBLOCK */

if vlStartCreditorByCreditor
then do:
    <Q-26 run CreditorByCreditor  (Stop) in BCreditor >
end. /* end vlStartCreditorByCreditor */

if vlStartReasonByIdCode
then do:
    <Q-28 run ReasonByIdCode  (Stop) in BReason >
end. /* end vlStartReasonByIdCode */

if vlStartReasonByInitialStatus
then do:
    <Q-30 run ReasonByInitialStatus  (Stop) in BReason >
end. /* end vlStartReasonByInitialStatus */

if vlStartCompanyPropByBusinessRel
then do:
    <Q-32 run CompanyPropertyByBusinessRel  (Stop) in BCompanyProperty >
end. /* end vlStartCompanyPropByBusinessRel */

if vlStartAddrByAddrBusRelType
then do:
    <Q-34 run AddressByAddressBusRelType  (Stop) in BBusinessRelation >
end. /* end vlStartAddrByAddrBusRelType */

if vlStartBankNrPayCodeForCIDef
then do:
    <Q-38 run BankNumberPayCodeForCIDefSupp  (Stop) in BBankNumber>
end. /* end vlStartBankNrPayCodeForCIDef */

if vlStartSupplierForDaybookSet
then do:
    <Q-49 run SupplierForDaybookSetSite  (Stop) in BMfgSupplier >    
end. /* end vlStartSupplierForDaybookSet */