project QadFinancials > class TConCheck > method CreditorControlGLBalance

Description

AP sub-administration with GL


Parameters


icFileinputcharacter
ocConCheckLineDetResultoutputcharacter
otConCheckLineDetStartDateoutputdate
oiConCheckLineDetStartTimeoutputinteger
oiConCheckLineDetDurationoutputinteger
iiCompanyIDinputinteger
iiPeriodIDinputinteger
iiSessionIDinputinteger
oiErrorNumbersoutputinteger
ocConCheckLineDetVersionoutputcharacter
icAppVersioninputcharacter
icSumFileinputcharacterSummary file
ihTranslationHandleinputhandle
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method TConCheck.MainEntry


program code (program1/tconcheck.p)

/*******************************************************************************************/
/* ================================================================================= */
/* This is the method for AP sub-administration with GL                              */
/* ================================================================================= */

assign oiReturnStatus = -98.

assign vdStartEtime               = etime(no)
       otConCheckLineDetStartDate = now
       oiConCheckLineDetStartTime = time
       oiErrorNumbers             = 0
       ocConCheckLineDetVersion   = icAppVersion + '.1'.

/* open logfile stream */
OUTPUT STREAM sTechOut TO value(icFile) append. 
OUTPUT STREAM sSumOut TO value(icSumFile) append. 

PUT STREAM sTechOut unformatted ' ' skip.
PUT STREAM sTechOut unformatted '##### AP sub-administration with GL #####' skip.
PUT STREAM sTechOut unformatted 'Version: ' ocConCheckLineDetVersion skip.
PUT STREAM sTechOut unformatted 'Validation Start At: ' string(now, '99/99/9999 HH:MM:SS') skip.
    
      

MAIN_BLOCK: 
do:   
    /* Get CompanyCode by iiCompanyId */
    find first Company where 
               Company_id = iiCompanyID 
               no-lock no-error.     
    if iiCompanyID = ? or iiCompanyID = 0 or not available Company
    then do:
       assign ocConCheckLineDetResult = {&CONCHECKRESULT-FAILED}.
       PUT STREAM sTechOut unformatted "**Error** Input parameter CompanyID is null or Company not found." skip. 
       LEAVE MAIN_BLOCK.
    end.
    assign vcCompanyCode = Company.CompanyCode.
    
    /* Get YearPeriod by iiPeriodID */
    find first Period of Company where 
               Period_id = iiPeriodID 
               no-lock no-error.    
    if iiPeriodID = ? or iiPeriodID = 0 or not available Period
    then do:
       assign ocConCheckLineDetResult = {&CONCHECKRESULT-FAILED}.
       PUT STREAM sTechOut unformatted "**Error** Input parameter PeriodID is null or Period not found." skip. 
       LEAVE MAIN_BLOCK.
    end.
    assign viSelectedYearPeriod = Period.PeriodYearPeriod.

    find first DomainProperty where DomainProperty.Domain_ID = Company.Domain_ID no-lock no-error.
    if available DomainProperty then
    assign viCompanyLC = DomainProperty.Currency_ID
           viCompanyCC = DomainProperty.StatutoryCurrency_ID.

    for each CompanySharedSet OF Company no-lock,
        first SharedSet OF CompanySharedSet where
              SharedSet.SharedSetType = 'GL' no-lock:
    
        assign vdTotGLLCMovementCredit = 0
               vdTotINLCMovementCredit = 0
               vdTotGLLCMovementDebit = 0
               vdTotINLCMovementDebit = 0
               vdTotGLCCMovementCredit = 0
               vdTotINCCMovementCredit = 0
               vdTotGLCCMovementDebit = 0
               vdTotINCCMovementDebit = 0.     
                         
        /* This program will calculate 3 different numbers and compare then between AP and GL: */
        /*   1. Movements in Selected Period                                                   */          
        /*   2. Balance as of end of selected Period                                           */
    
        /*   1. Movements in Selected Period                                                   */                     
        empty temp-table tBalanceByGLAP.
        /* Get the balance of GL as of date */
        for each GL no-lock
            where 
               GL.GLTypeCode = {&GLTYPECODE-CRED} and
                GL.SharedSet_Id = SharedSet.SharedSet_Id,
            each PostingHist no-lock
            where 
                PostingHist.Company_ID = Company.Company_ID and
                PostingHist.GL_ID = GL.GL_ID and 
                PostingHist.PostingHistYearPeriodFrom = viSelectedYearPeriod 
            break by gl.gl_id:
            if first-of(gl.gl_id) then
            do:
                create tBalanceByGLAP.
                assign tBalanceByGLAP.tiGLID = gl.gl_id
                       tBalanceByGLAP.tcGLCode = gl.glcode.
            end.
                assign tBalanceByGLAP.tdBalanceGLLC =  tBalanceByGLAP.tdBalanceGLLC + PostingHist.PostingHistMovemntDebitLC
                       tBalanceByGLAP.tdBalanceGLLCCredit = tBalanceByGLAP.tdBalanceGLLCCredit + PostingHist.PostingHistMovemntDebitLC
                       tBalanceByGLAP.tdBalanceGLCC =  tBalanceByGLAP.tdBalanceGLCC + PostingHist.PostingHistMovemntDebitCC
                       tBalanceByGLAP.tdBalanceGLCCCredit = tBalanceByGLAP.tdBalanceGLCCCredit + PostingHist.PostingHistMovemntDebitCC
                       vdTotGLLCMovementCredit = vdTotGLLCMovementCredit + PostingHistMovemntCreditLC
                       vdTotGLLCMovementDebit = vdTotGLLCMovementDebit + PostingHistMovemntDebitLC
                       vdTotGLCCMovementCredit = vdTotGLCCMovementCredit + PostingHistMovemntCreditCC
                       vdTotGLCCMovementDebit = vdTotGLCCMovementDebit + PostingHistMovemntDebitCC.
    
        end.
    
        /* Get the AP movement */
        for each CInvoiceMovement of Company no-lock
            where
           CInvoiceMovement.CInvoiceMovementYearPeriod = viSelectedYearPeriod,
        first PostingLine no-lock
            where 
           PostingLine.PostingLine_ID = CInvoiceMovement.PostingLine_ID: 
            find first tBalanceByGLAP where tBalanceByGLAP.tiGLID = PostingLine.GL_ID no-error.
            if available tBalanceByGLAP then
            do:
                assign tBalanceByGLAP.tdBalanceAPLC = tBalanceByGLAP.tdBalanceAPLC + postinglinedebitlc
                       tBalanceByGLAP.tdBalanceAPCC = tBalanceByGLAP.tdBalanceAPCC + postinglinedebitcc
                       tBalanceByGLAP.tdBalanceAPLCCredit = tBalanceByGLAP.tdBalanceAPLCCredit + postinglinecreditlc
                       tBalanceByGLAP.tdBalanceAPCCCredit = tBalanceByGLAP.tdBalanceAPCCCredit + postinglinecreditcc.
            end.
            else do:
                find first gl where GL.GL_ID = PostingLine.GL_ID 
                            and GL.SharedSet_Id = SharedSet.SharedSet_Id no-lock no-error.
                if available gl then 
                do:
                    create tBalanceByGLAP.
                    assign tBalanceByGLAP.tiGLID = gl.gl_id
                           tBalanceByGLAP.tcGLCode = gl.glcode
                           tBalanceByGLAP.tdBalanceAPLC = postinglinedebitlc 
                           tBalanceByGLAP.tdBalanceAPCC = postinglinedebitcc
                           tBalanceByGLAP.tdBalanceAPLCCredit = postinglinecreditlc
                           tBalanceByGLAP.tdBalanceAPCCCredit = postinglinecreditcc. 
                end.                 
            end.
            assign vdTotINLCMovementCredit = vdTotINLCMovementCredit + postinglinecreditlc
                 vdTotINLCMovementDebit = vdTotINLCMovementDebit + postinglinedebitlc
                 vdTotINCCMovementCredit = vdTotINCCMovementCredit + postinglinecreditcc
                 vdTotINCCMovementDebit = vdTotINCCMovementDebit + postinglinedebitcc.
         End.
    
        if vdTotINLCMovementDebit <> vdTotGLLCMovementDebit
        then do :
            /* try to get header info */
            put stream sTechOut unformatted skip (1) 'Movements in selected period - Base Currency':U skip.
            put stream sTechOut unformatted 'GL Account':U     at 1
                                             'GL Amount Debit':U      to 60
                                             'AP Amount Debit':U      to 90
                                             'Difference Debit':U     to 120 skip.
            for each tBalanceByGLAP:
                if tBalanceByGLAP.tdBalanceGLLC <> tBalanceByGLAP.tdBalanceAPLC then
                do:
                    put stream sTechOut unformatted tBalanceByGLAP.tcGLCode    at 1
                                                    tBalanceByGLAP.tdBalanceGLLC                             to 60
                                                    tBalanceByGLAP.tdBalanceAPLC                             to 90
                                                    tBalanceByGLAP.tdBalanceGLLC - tBalanceByGLAP.tdBalanceAPLC   to 120 skip.               
                end.
            end.
        end.

        if vdTotINLCMovementCredit <> vdTotGLLCMovementCredit
        then do :
            /* try to get header info */
            put stream sTechOut unformatted skip (1) 'Movements in selected period - Base Currency':U skip.
            put stream sTechOut unformatted 'GL Account':U     at 1
                                             'GL Amount Credit':U      to 60
                                             'AP Amount Credit':U      to 90
                                             'Difference Credit':U     to 120 skip.
            for each tBalanceByGLAP:
                if tBalanceByGLAP.tdBalanceGLLCCredit <> tBalanceByGLAP.tdBalanceAPLCCredit then
                do:
                    put stream sTechOut unformatted tBalanceByGLAP.tcGLCode    at 1
                                                    tBalanceByGLAP.tdBalanceGLLCCredit                             to 60
                                                    tBalanceByGLAP.tdBalanceAPLCCredit                             to 90
                                                    tBalanceByGLAP.tdBalanceGLLCCredit - tBalanceByGLAP.tdBalanceAPLCCredit to 120 skip.             
                end.
            end.
        end.

        if vdTotINCCMovementDebit <> vdTotGLCCMovementDebit
        then do :
            /* try to get header info */
            put stream sTechOut unformatted skip (1) 'Movements in selected period - Statutory Currency':U skip.
            put stream sTechOut unformatted 'GL Account Debit':U     at 1
                                            'GL Amount Debit':U      to 60
                                            'AP Amount Debit':U      to 90
                                            'Difference Debit':U     to 120 skip.
            for each tBalanceByGLAP:
                if tBalanceByGLAP.tdBalanceGLCC <> tBalanceByGLAP.tdBalanceAPCC then
                do:
                    put stream sTechOut unformatted tBalanceByGLAP.tcGLCode    at 1
                                                         tBalanceByGLAP.tdBalanceGLCC                             to 60
                                                         tBalanceByGLAP.tdBalanceAPCC                             to 90
                                                         tBalanceByGLAP.tdBalanceGLCC - tBalanceByGLAP.tdBalanceAPCC  to 120 skip.            
                end.
            end.
        end. 

        if vdTotINCCMovementCredit <> vdTotGLCCMovementCredit 
        then do :
            /* try to get header info */
            put stream sTechOut unformatted skip (1) 'Movements in selected period - Statutory Currency':U skip.
            put stream sTechOut unformatted 'GL Account Credit':U     at 1
                                            'GL Amount Credit':U      to 60
                                            'AP Amount Credit':U      to 90
                                            'Difference Credit':U     to 120 skip.
            for each tBalanceByGLAP:
                if tBalanceByGLAP.tdBalanceGLCCCredit <> tBalanceByGLAP.tdBalanceAPCCCredit then
                do:
                    put stream sTechOut unformatted tBalanceByGLAP.tcGLCode    at 1
                                                         tBalanceByGLAP.tdBalanceGLCCCredit                             to 60
                                                         tBalanceByGLAP.tdBalanceAPCCCredit                             to 90
                                                         tBalanceByGLAP.tdBalanceGLCCCredit - tBalanceByGLAP.tdBalanceAPCCCredit  to 120 skip.            
                end.
            end.
        end. 

       /*   2. Balance as of end of selected Period                                           */        
       empty temp-table tBalanceByGLAP.
       
       /* Get the balance of GL as of date */
       for each GL no-lock
            where 
                GL.GLTypeCode = {&GLTYPECODE-CRED} and 
                GL.SharedSet_Id = SharedSet.SharedSet_Id,
            each PostingHist no-lock
            where 
                PostingHist.Company_ID = Company.Company_id and 
                PostingHist.GL_ID = GL.GL_ID and 
                PostingHist.PostingHistYearPeriodFrom <= viSelectedYearPeriod and
                PostingHist.PostingHistYearPeriodTill >= viSelectedYearPeriod
            break by gl.gl_id:
            find first tBalanceByGLAP where tBalanceByGLAP.tiGLID = GL.GL_ID and
                                            tBalanceByGLAP.tiCurrencyID = PostingHist.Currency_ID no-error.
            if not available tBalanceByGLAP
            then do:
                create tBalanceByGLAP.
                assign tBalanceByGLAP.tiGLID = gl.gl_id
                       tBalanceByGLAP.tiCurrencyID = PostingHist.Currency_ID
                       tBalanceByGLAP.tcGLCode = gl.glcode
                       tBalanceByGLAP.tcGLDescription = gl.gldescription.
                for first Currency where Currency.Currency_ID = PostingHist.Currency_ID:
                    assign tBalanceByGLAP.tcCurrencyCode = Currency.CurrencyCode.
                end.
            end.
            assign tBalanceByGLAP.tdBalanceGLLC =  tBalanceByGLAP.tdBalanceGLLC + PostingHist.PostingHistBalanceDebitLC  - PostingHist.PostingHistBalanceCreditLC
                   tBalanceByGLAP.tdBalanceGLCC =  tBalanceByGLAP.tdBalanceGLCC + PostingHist.PostingHistBalanceDebitCC  - PostingHist.PostingHistBalanceCreditCC
                   tBalanceByGLAP.tdBalanceGLTC =  tBalanceByGLAP.tdBalanceGLTC + PostingHist.PostingHistBalanceDebitTC  - PostingHist.PostingHistBalanceCreditTC.
    
       end.
   
       /* Get the balance of AP as of date */
       for each CInvoice of Company no-lock
                where 
                   CInvoice.CInvoiceClosingDate > Period.PeriodEndDate  and
                   CInvoice.CInvoicePostingDate <= Period.PeriodEndDate and
                   CInvoice.CInvoiceIsInitialStatus = no,
            each CInvoiceMovement no-lock
                where 
                   CInvoiceMovement.CInvoice_ID = CInvoice.CInvoice_ID and
                   CInvoiceMovement.CInvoiceMovementPostDate <= Period.PeriodEndDate,
            first PostingLine no-lock
                where 
                   PostingLine.PostingLine_ID = CInvoiceMovement.PostingLine_ID, 
            first GL no-lock
                where 
                     GL.GL_ID = PostingLine.GL_ID and
                     GL.SharedSet_Id = SharedSet.SharedSet_Id: 
            find first tBalanceByGLAP where tBalanceByGLAP.tiGLID = PostingLine.GL_ID  and
                                            tBalanceByGLAP.tiCurrencyID = PostingLine.Currency_ID no-error.
            if available tBalanceByGLAP then
            do:
                assign tBalanceByGLAP.tdBalanceAPLC = tBalanceByGLAP.tdBalanceAPLC + postinglinedebitlc - postinglinecreditlc
                       tBalanceByGLAP.tdBalanceAPCC = tBalanceByGLAP.tdBalanceAPCC + postinglinedebitcc - postinglinecreditcc
                       tBalanceByGLAP.tdBalanceAPTC = tBalanceByGLAP.tdBalanceAPTC + postinglinedebittc - postinglinecredittc.
            end.
            else do:
                    create tBalanceByGLAP.
                    assign tBalanceByGLAP.tiGLID = gl.gl_id
                           tBalanceByGLAP.tiCurrencyID = PostingLine.Currency_ID
                           tBalanceByGLAP.tcGLCode = gl.glcode
                           tBalanceByGLAP.tcGLDescription = gl.gldescription
                           tBalanceByGLAP.tdBalanceAPLC = postinglinedebitlc - postinglinecreditlc
                           tBalanceByGLAP.tdBalanceAPCC = postinglinedebitcc - postinglinecreditcc
                           tBalanceByGLAP.tdBalanceAPCC = postinglinedebittc - postinglinecredittc. 
                    for first Currency where Currency.Currency_ID = PostingLine.Currency_ID:
                        assign tBalanceByGLAP.tcCurrencyCode = Currency.CurrencyCode.
                    end.
            end.
        End.

        if can-find (first tBalanceByGLAP where tBalanceByGLAP.tdBalanceGLTC <> tBalanceByGLAP.tdBalanceAPTC)
        then do:
            /* try to get header info */
            put stream sTechOut unformatted skip (1) 'Balance as of end of selected period - Transaction Currency':U skip.
            put stream sTechOut unformatted 'GL Account':U     at 1
                                            'GL Amount':U      to 60
                                            'AP Amount':U      to 90
                                            'Difference':U     to 120 skip.

            for each tBalanceByGLAP where tBalanceByGLAP.tdBalanceGLTC <> tBalanceByGLAP.tdBalanceAPTC:
                put stream sTechOut unformatted tBalanceByGLAP.tcGLCode    at 1
                                                tBalanceByGLAP.tdBalanceGLTC                             to 60
                                                tBalanceByGLAP.tdBalanceAPTC                             to 90
                                                tBalanceByGLAP.tdBalanceGLTC - tBalanceByGLAP.tdBalanceAPTC to 120 skip. 
                assign oiErrorNumbers = oiErrorNumbers + 1.              
            end.
        end. /* if can-find (first tBalanceByGLAP) */
      
           
        if can-find (first tBalanceByGLAP where tBalanceByGLAP.tdBalanceGLLC <> tBalanceByGLAP.tdBalanceAPLC)
        then do :
            /* try to get header info */
            put stream sTechOut unformatted skip (1) 'Balance as of end of selected period - Base Currency':U skip.
            put stream sTechOut unformatted 'GL Account':U     at 1
                                             'GL Amount':U      to 60
                                             'AP Amount':U      to 90
                                             'Difference':U     to 120 skip.
            for each tBalanceByGLAP where tBalanceByGLAP.tdBalanceGLLC <> tBalanceByGLAP.tdBalanceAPLC:
                put stream sTechOut unformatted tBalanceByGLAP.tcGLCode    at 1
                                                tBalanceByGLAP.tdBalanceGLLC                             to 60
                                                tBalanceByGLAP.tdBalanceAPLC                             to 90
                                                tBalanceByGLAP.tdBalanceGLLC - tBalanceByGLAP.tdBalanceAPLC                           to 120 skip. 
                assign oiErrorNumbers = oiErrorNumbers + 1.              
            end.
        end. /* if can-find (first tBalanceByGLAP) */
        
        if can-find (first tBalanceByGLAP where tBalanceByGLAP.tdBalanceGLCC <> tBalanceByGLAP.tdBalanceAPCC)
        then do :
            /* try to get header info */
            put stream sTechOut unformatted skip (1) 'Balance as of end of selected period - Statutory Currency':U skip.
            put stream sTechOut unformatted 'GL Account':U     at 1
                                            'GL Amount':U      to 60
                                            'AP Amount':U      to 90
                                            'Difference':U     to 120 skip.
            for each tBalanceByGLAP where tBalanceByGLAP.tdBalanceGLCC <> tBalanceByGLAP.tdBalanceAPCC:
                put stream sTechOut unformatted tBalanceByGLAP.tcGLCode    at 1
                                                tBalanceByGLAP.tdBalanceGLCC                             to 60
                                                tBalanceByGLAP.tdBalanceAPCC                             to 90
                                                tBalanceByGLAP.tdBalanceGLCC - tBalanceByGLAP.tdBalanceAPCC                           to 120 skip. 
                assign oiErrorNumbers = oiErrorNumbers + 1.              
            end.
        end. /* if can-find (first tBalanceByGLAP) */
    end. /* for each Company */
    
    if oiErrorNumbers > 0 then assign ocConCheckLineDetResult = {&CONCHECKRESULT-FAILED}.
    else assign ocConCheckLineDetResult = {&CONCHECKRESULT-PASSED}.


end. /* MAIN_BLOCK */


assign oiConCheckLineDetDuration = etime - vdStartEtime.


/* to format the total duration time */
assign viMilliSecs = oiConCheckLineDetDuration.
assign viSecs = TRUNCATE (oiConCheckLineDetDuration / 1000, 0).
assign viMilliSecs = viMilliSecs mod 1000.
assign vcTotalTime = string(viSecs, 'HH:MM:SS')  +  '.'  +  string(viMilliSecs).
put stream sTechOut unformatted 'Execution Duration: ' vcTotalTime skip. 
put stream sTechOut unformatted 'Execution Result: ' ocConCheckLineDetResult skip.
put stream sTechOut  unformatted '<Error Count:> ' oiErrorNumbers skip.
put stream sTechOut unformatted '**********************************************************************' skip.
output stream sTechOut close.

put stream sSumOut unformatted ' ' skip. 
PUT STREAM sSumOut unformatted trim({&CONCHECKLINEDETTYPE-APSUBGL-TR}) skip.
PUT STREAM sSumOut unformatted '-----------------------------' skip.
put stream sSumOut unformatted trim(#T-66'Execution Result':255(510391963)T-66#) + ': ' + ocConCheckLineDetResult skip.
if ocConCheckLineDetResult = {&CONCHECKRESULT-FAILED} 
then do:

     put stream sSumOut unformatted 
                        trim(#T-84'Total number of errors':100(376712702)T-84#)
                        + ': ' + string(oiErrorNumbers) skip.
     put stream sSumOut unformatted 
                        '(' 
                        trim(#T-96'Please see details in the file':150(806040074)T-96#) ' ' icFile ')' skip.        
    
end.
if can-find (first tBalanceByGLAP)
then do:
    for each tBalanceByGLAP break by tBalanceByGLAP.tiGLID
                                  by tBalanceByGLAP.tiCurrencyID:
        if first-of(tBalanceByGLAP.tiGLID)
        then do:
            assign vdGLBalanceLCPerGL = 0
                   vdGLBalanceCCPerGL = 0
                   vdSubBalanceCCPerGL = 0
                   vdSubBalanceLCPerGL = 0
                   vlDetailPrinted = no. 
            put stream sSumOut unformatted ' ' skip.
            put stream sSumOut unformatted trim(#T-48'GL':20(199)T-48#)
                                           ': ':U 
                                           tBalanceByGLAP.tcGLCode
                                           '    ':U
                                           tBalanceByGLAP.tcGLDescription
                                           '    ':U skip.
        end.
        assign vdGLBalanceLCPerGL = vdGLBalanceLCPerGL + tBalanceByGLAP.tdBalanceGLLC
               vdGLBalanceCCPerGL = vdGLBalanceCCPerGL + tBalanceByGLAP.tdBalanceGLCC
               vdSubBalanceLCPerGL = vdSubBalanceLCPerGL + tBalanceByGLAP.tdBalanceAPLC
               vdSubBalanceCCPerGL = vdSubBalanceCCPerGL + tBalanceByGLAP.tdBalanceAPCC.
        if tBalanceByGLAP.tdBalanceGLTC <> tBalanceByGLAP.tdBalanceAPTC or
           tBalanceByGLAP.tdBalanceGLLC <> tBalanceByGLAP.tdBalanceAPLC or
           tBalanceByGLAP.tdBalanceGLCC <> tBalanceByGLAP.tdBalanceAPCC
        then do:
            assign vlDetailPrinted = yes.
            put stream sSumOut unformatted trim(#T-44'Currency':20(220)T-44#) + 
                                            ': ':U + tBalanceByGLAP.tcCurrencyCode at 1
                                           trim(#T-17'GL Balance':20(1017)T-17#) + 
                                           '':U to 30
                                           trim(#T-28'Sub-ledger Balance':20(254104290)T-28#)  to 60
                                           trim(#T-4'Difference':20(4114)T-4#) to 90 skip.   
            <M-92 run RoundAmount
               (input-output tBalanceByGLAP.tdBalanceGLTC (bdUnroundedAmount), 
                input  tBalanceByGLAP.tiCurrencyID (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcGLBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            <M-57 run RoundAmount
               (input-output tBalanceByGLAP.tdBalanceAPTC (bdUnroundedAmount), 
                input  tBalanceByGLAP.tiCurrencyID (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcSubBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            assign vdDiff = tBalanceByGLAP.tdBalanceGLTC - tBalanceByGLAP.tdBalanceAPTC.
            <M-35 run RoundAmount
               (input-output vdDiff (bdUnroundedAmount), 
                input  tBalanceByGLAP.tiCurrencyID (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcDiffFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            put stream sSumOut unformatted trim(#T-23'TC':3(4029)T-23#) at 1
                                           vcGLBalanceFormat to 30
                                           vcSubBalanceFormat to 60
                                           vcDiffFormat to 90 skip.
            <M-82 run RoundAmount
               (input-output tBalanceByGLAP.tdBalanceGLLC (bdUnroundedAmount), 
                input  viCompanyLC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcGLBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            <M-34 run RoundAmount
               (input-output tBalanceByGLAP.tdBalanceAPLC (bdUnroundedAmount), 
                input  viCompanyLC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcSubBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            assign vdDiff = tBalanceByGLAP.tdBalanceGLLC - tBalanceByGLAP.tdBalanceAPLC.
            <M-45 run RoundAmount
               (input-output vdDiff (bdUnroundedAmount), 
                input  viCompanyLC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcDiffFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            put stream sSumOut unformatted trim(#T-38'BC':3(4030)T-38#) at 1
                                           vcGLBalanceFormat to 30
                                           vcSubBalanceFormat to 60
                                           vcDiffFormat to 90 skip.   
            <M-1 run RoundAmount
               (input-output tBalanceByGLAP.tdBalanceGLCC (bdUnroundedAmount), 
                input  viCompanyCC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcGLBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            <M-39 run RoundAmount
               (input-output tBalanceByGLAP.tdBalanceAPCC (bdUnroundedAmount), 
                input  viCompanyCC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcSubBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            assign vdDiff = tBalanceByGLAP.tdBalanceGLCC - tBalanceByGLAP.tdBalanceAPCC.   
            <M-20 run RoundAmount
               (input-output vdDiff (bdUnroundedAmount), 
                input  viCompanyCC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcDiffFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            put stream sSumOut unformatted trim(#T-37'SC':12(3936)T-37#) at 1
                                           vcGLBalanceFormat to 30
                                           vcSubBalanceFormat to 60
                                           vcDiffFormat to 90 skip.
        end.
        if last-of(tBalanceByGLAP.tiGLID)
        then do:                                
            assign vdSumGLBalanceCC = vdSumGLBalanceCC + vdGLBalanceCCPerGL
                   vdSumGLBalanceLC = vdSumGLbalanceLC + vdGLBalanceLCPerGL
                   vdSumSubBalanceCC = vdSumSubBalanceCC + vdSubBalanceCCPerGL
                   vdSumSubBalanceLC = vdSumSubBalanceLC + vdSubBalanceLCPerGL. 

            if vlDetailPrinted  then put stream sSumOut unformatted ' ':U skip. 
            put stream sSumOut unformatted trim(#T-29'All Currencies':50(837972044)T-29#) at 1
                                           trim(#T-95'GL Balance':20(1017)T-95#) to 30
                                           trim(#T-89'Sub-ledger Balance':20(254104290)T-89#) to 60
                                           trim(#T-32'Difference':20(4114)T-32#) to 90 skip.                                            
            <M-5 run RoundAmount
               (input-output vdGLBalanceLCPerGL (bdUnroundedAmount), 
                input  viCompanyLC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcGLBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            <M-98 run RoundAmount
               (input-output vdSubBalanceLCPerGL (bdUnroundedAmount), 
                input  viCompanyLC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcSubBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            assign vdDiff = vdGLBalanceLCPerGL - vdSubBalanceLCPerGL.    
            <M-61 run RoundAmount
               (input-output vdDiff (bdUnroundedAmount), 
                input  viCompanyLC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcDiffFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            put stream sSumOut unformatted trim(#T-43'BC':3(4030)T-43#) at 1
                                           vcGLBalanceFormat to 30
                                           vcSubBalanceFormat to 60
                                           vcDiffFormat to 90 skip. 
            <M-75 run RoundAmount
               (input-output vdGLBalanceCCPerGL (bdUnroundedAmount), 
                input  viCompanyCC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcGLBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            <M-33 run RoundAmount
               (input-output vdSubBalanceCCPerGL (bdUnroundedAmount), 
                input  viCompanyCC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcSubBalanceFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>
            assign vdDiff = vdGLBalanceCCPerGL - vdSubBalanceCCPerGL.   
            <M-87 run RoundAmount
               (input-output vdDiff (bdUnroundedAmount), 
                input  viCompanyCC (iiCurrencyId), 
                input  ? (icCurrencyCode), 
                output vcDiffFormat (ocFormatedAmount), 
                output viFcReturnSuper (oiReturnStatus)) in TConCheck>    

            put stream sSumOut unformatted trim(#T-88'SC':12(3936)T-88#) at 1
                                           vcGLBalanceFormat to 30
                                           vcSubBalanceFormat to 60
                                           vcDiffFormat to 90 skip.                                               
        end.        
    
    end. /* for each tBalanceByGLAP */
            
    put stream sSumOut unformatted ' ' skip.
    <M-70 run RoundAmount
       (input-output vdSumGLBalanceLC (bdUnroundedAmount), 
        input  viCompanyLC (iiCurrencyId), 
        input  ? (icCurrencyCode), 
        output vcGLBalanceFormat (ocFormatedAmount), 
        output viFcReturnSuper (oiReturnStatus)) in TConCheck>
    <M-40 run RoundAmount
       (input-output vdSumSubBalanceLC (bdUnroundedAmount), 
        input  viCompanyLC (iiCurrencyId), 
        input  ? (icCurrencyCode), 
        output vcSubBalanceFormat (ocFormatedAmount), 
        output viFcReturnSuper (oiReturnStatus)) in TConCheck>
    assign vdDiff = vdSumGLBalanceLC - vdSumSubBalanceLC.    
    <M-7 run RoundAmount
       (input-output vdDiff (bdUnroundedAmount), 
        input  viCompanyLC (iiCurrencyId), 
        input  ? (icCurrencyCode), 
        output vcDiffFormat (ocFormatedAmount), 
        output viFcReturnSuper (oiReturnStatus)) in TConCheck>
    put stream sSumOut unformatted trim(#T-90'Total BC':50(330832880)T-90#) at 1
                                   vcGLBalanceFormat to 30
                                   vcSubBalanceFormat to 60
                                   vcDiffFormat to 90 skip. 
    <M-74 run RoundAmount
       (input-output vdSumGLBalanceCC (bdUnroundedAmount), 
        input  viCompanyCC (iiCurrencyId), 
        input  ? (icCurrencyCode), 
        output vcGLBalanceFormat (ocFormatedAmount), 
        output viFcReturnSuper (oiReturnStatus)) in TConCheck>
    <M-83 run RoundAmount
       (input-output vdSumSubBalanceCC (bdUnroundedAmount), 
        input  viCompanyCC (iiCurrencyId), 
        input  ? (icCurrencyCode), 
        output vcSubBalanceFormat (ocFormatedAmount), 
        output viFcReturnSuper (oiReturnStatus)) in TConCheck>
    assign vdDiff = vdSumGLBalanceCC - vdSumSubBalanceCC.           
    <M-56 run RoundAmount
       (input-output vdDiff (bdUnroundedAmount), 
        input  viCompanyCC (iiCurrencyId), 
        input  ? (icCurrencyCode), 
        output vcDiffFormat (ocFormatedAmount), 
        output viFcReturnSuper (oiReturnStatus)) in TConCheck>    
                                   
    put stream sSumOut unformatted trim(#T-329'Total SC':50(601335079)T-329#) at 1
                                   vcGLBalanceFormat to 30
                                   vcSubBalanceFormat to 60
                                   vcDiffFormat to 90 skip.
end.
put stream sSumOut unformatted "____________________________________________________________" skip.
output stream sSumOut close.

if oiReturnStatus = -98
then assign oiReturnStatus = 0.