project QadFinancials > class BClosingPostingsReport > method VoucherCompletenessDet

report procedure


Parameters


dcrVoucherCompletenessoutputdatasetDataset of VoucherCompleteness.
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BClosingPostingsReport.ProcessVoucherCompleteness
method BClosingPostingsReport.VoucherCompleteness


program code (program7/bclosingpostingsreport.p)

empty temp-table tqVoucherCompleteness.
assign vcMsg1 = trim (#T-4'Used in the GL period:':30(16332)T-4#)
       vcMsg2 = trim(#T-95'Missing in the year:':30(16331)T-95#).
/* ========================================================= */
/* Assign the filter-data-items based on the tFilter records */
/* ========================================================= */
<M-87 run SetDataItemsBasedOnFilterTTDet  (output viFcReturnSuper (oiReturnStatus)) in BClosingPostingsReport>            

/* Validate filters */
if viPeriodYearFilter   = ?
then do:
    <M-72 run SetMessage
       (input  #T-53'You must specify the year.':50(16327)T-53# (icMessage), 
        input  '':U (icArguments), 
        input  '':U (icFieldName), 
        input  '':U (icFieldValue), 
        input  'E':U (icType), 
        input  3 (iiSeverity), 
        input  '':U (icRowid), 
        input  'qadfin-973184':U (icFcMsgNumber), 
        input  #T-67'You must enter all mandatory filter fields.':100(14847)T-67# (icFcExplanation), 
        input  '':U (icFcIdentification), 
        input  '':U (icFcContext), 
        output oiReturnStatus (oiReturnStatus)) in BClosingPostingsReport>
    
    assign oiReturnStatus = -1.
    return.
end.

if viFromPeriodFilter = ? then assign viFromPeriodFilter = 0. 
if viTillPeriodFilter = ? then assign viTillPeriodFilter = 99.
if viPeriodPeriodFilter <> ?
then assign viFromPeriodFilter = viPeriodPeriodFilter
            viTillPeriodFilter = viPeriodPeriodFilter.

assign viYearPeriodFrom = viPeriodYearFilter * 100 + viFromPeriodFilter
       viYearPeriodTill = viPeriodYearFilter * 100 + viTillPeriodFilter.

if vcCPCompanyCodeFilter = '' or vcCPCompanyCodeFilter = ?
then assign vcCPCompanyCodeFilter = vcCompanyCode.

if vcCPCandoJournalCodeFilter = ?
then assign vcCPCandoJournalCodeFilter = ''.

/* ====================================== */
/* Get all the Data and do the validation */
/* ====================================== */
<M-79 run LogFiltersValues
   (input  'vcCPCompanyCodeFilter=' + vcCPCompanyCodeFilter (icParameter1), 
    input  'vcCPCandoJournalCodeFilter=' + vcCPCandoJournalCodeFilter (icParameter2), 
    input  'viYearPeriodFrom=' + string (viYearPeriodFrom) (icParameter3), 
    input  'viYearPeriodTill=' + string (viYearPeriodTill) (icParameter4), 
    input  '' (icParameter5), 
    input  '' (icParameter6), 
    input  '' (icParameter7), 
    input  '' (icParameter8), 
    input  '' (icParameter9), 
    input  '' (icParameter10), 
    output oiReturnStatus (oiReturnStatus)) in BClosingPostingsReport>

     
<I-25 {READDIRECTDBACCESS
     &READTABLENAMES = "'Company CompanySharedSet SharedSet Journal Layer Period Posting'"}>
       
for each Company fields (Company_ID CompanyCode) where 
         can-do (vcCPCompanyCodeFilter,Company.CompanyCode)
         no-lock,
    each CompanySharedSet of Company no-lock,
    each SharedSet of CompanySharedSet where
         SharedSet.SharedSetTypeCode = {&SHAREDSETTYPE-JOURNAL} no-lock,
    each Journal of SharedSet where 
         (can-do (vcCPCandoJournalCodeFilter,Journal.Journalcode) or
          vcCPCandoJournalCodeFilter = ''),
    first Layer of Journal where
          Layer.LayerTypeCode <> {&LAYERTYPECODE-TRANSIENT}  
          no-lock:

    assign viLowestVoucher  = 0
           viHighestVoucher = 0.

    /* ============================================================== */
    /* Get the Lowest and Highest number used in the period selection */
    /* ============================================================== */
    for each Period fields (Company_ID PeriodYearPeriod PeriodYear PeriodPeriod) where
             Period.Company_ID       = Company.Company_ID and
             Period.PeriodYearPeriod >= viYearPeriodFrom and
             Period.PeriodYearPeriod <= viYearPeriodTill
             no-lock 
             by Period.Company_ID 
             by Period.PeriodYearPeriod:
            
        find first Posting where
                   Posting.Company_ID    = Company.Company_ID  and
                   Posting.PostingYear   = Period.PeriodYear   and
                   Posting.PostingPeriod = Period.PeriodPeriod and
                   Posting.Journal_id    = Journal.Journal_ID               
                   use-index ViewIndex /* Company PostingYear PostingPeriod Journal */
                   no-lock no-error.

        if available Posting
        then do:
            assign viLowestVoucher = if viLowestVoucher = 0
                                     then Posting.PostingVoucher
                                     else min (viLowestVoucher,Posting.PostingVoucher).

            find last Posting of Company where
                      Posting.Company_ID    = Company.Company_ID  and
                      Posting.PostingYear   = Period.PeriodYear   and
                      Posting.PostingPeriod = Period.PeriodPeriod and
                      Posting.Journal_id    = Journal.Journal_ID               
                      use-index ViewIndex /* Company PostingYear PostingPeriod Journal */
                      no-lock no-error.
        
            assign viHighestVoucher = max (viHighestVoucher,Posting.PostingVoucher).
        end.

    end. /* for each Period */

    /* ============================================================== */
    /* If no Postign Found, we can go to the next daybook             */
    /* ============================================================== */
    if viLowestVoucher = 0
    then next.

    create tqVoucherCompleteness.
    assign tqVoucherCompleteness.tcJournalCode        = Company.CompanyCode + '-' + Journal.JournalCode
           tqVoucherCompleteness.tcJournalDescription = Journal.JournalDescription
           tqVoucherCompleteness.tiFirstVoucherNumber = viLowestVoucher
           tqVoucherCompleteness.tiLastVoucherNumber  = viHighestVoucher.              

    /* ============================================================== */
    /* OK let's check now                                             */
    /* ============================================================== */
    
    /*Initializes the values.*/
    assign viPrevVoucher           = 0
           viPrevCollectedVoucher  = 0
           viFromVoucher           = 0  
           viNumberOfVouchers      = 0.
    empty temp-table tCollectedVoucherPeriod.

    for each Posting fields (Company_ID PostingYear Journal_ID PostingVoucher PostingYearPeriod PostingPeriod) where
             Posting.Company_ID     = Company.Company_ID and
             Posting.PostingYear    = viPeriodYearFilter and
             Posting.Journal_id     = Journal.Journal_ID and
             Posting.PostingVoucher >= viLowestVoucher   and
             Posting.PostingVoucher <= viHighestVoucher
             no-lock
             by Posting.Company_ID
             by Posting.PostingYear
             by Posting.Journal_id
             by Posting.PostingVoucher :
        
        if viPrevVoucher <> 0
        then do :

           /* If the Voucher is consecutive but in another period, we report it */
           if Posting.PostingYearPeriod < viYearPeriodFrom or
              Posting.PostingYearPeriod > viYearPeriodTill
           then do:
               create tCollectedVoucherPeriod.
               assign tCollectedVoucherPeriod.tcCompanyCode  = Company.CompanyCode
                      tCollectedVoucherPeriod.tcJournalCode  = Journal.JournalCode
                      tCollectedVoucherPeriod.tiVoucher      = Posting.PostingVoucher 
                      tCollectedVoucherPeriod.tiPeriodPeriod = Posting.PostingPeriod
                      tCollectedVoucherPeriod.tiPeriodYear   = Posting.PostingYear
                      tCollectedVoucherPeriod.tiCompanyId    = Company.Company_ID
                      tCollectedVoucherPeriod.tiJournalId    = Journal.Journal_ID.
           end. /*if Posting.PostingYearPeriod < viYearPeriodFrom or */
           
           if Posting.PostingVoucher = viPrevVoucher + 2
           then do:
                create tqVoucherCompleteness.
                assign tqVoucherCompleteness.tcJournalCode  = Company.CompanyCode + '-' + Journal.JournalCode
                       tqVoucherCompleteness.tcErrorType    = string (Posting.PostingVoucher - 1) + ' (1) : ' + vcMsg2 .
           end.
           else if Posting.PostingVoucher > viPrevVoucher + 2
           then do:
                create tqVoucherCompleteness.
                assign tqVoucherCompleteness.tcJournalCode  = Company.CompanyCode + '-' + Journal.JournalCode
                       tqVoucherCompleteness.tcErrorType    = string (viPrevVoucher + 1) + ' - ' + string (Posting.PostingVoucher - 1) + " (" +
                                                              string (Posting.PostingVoucher - viPrevVoucher - 1) + 
                                                              ') : ' + vcMsg2.
           end.
            
        end. /* viPrevVoucher <> viLowestVoucher */

        assign viPrevVoucher = Posting.PostingVoucher.
    
    end.  /* for each Posting */

    for each tCollectedVoucherPeriod where 
             tCollectedVoucherPeriod.tiCompanyId   = Company.Company_ID  and
             tCollectedVoucherPeriod.tiJournalId   = Journal.Journal_ID
    no-lock 
    break by tCollectedVoucherPeriod.tiJournalId
    by tCollectedVoucherPeriod.tiVoucher :

        if first-of(tCollectedVoucherPeriod.tiJournalId)
        then do:
            assign viFromVoucher          = tCollectedVoucherPeriod.tiVoucher
                   viNumberOfVouchers     = 0
                   viPrevCollectedVoucher = tCollectedVoucherPeriod.tiVoucher - 1
                   viFromVouchPeriod      = tCollectedVoucherPeriod.tiPeriodPeriod.
        end. /*if viFromVoucher = 0*/

        if viFromVouchPeriod = tCollectedVoucherPeriod.tiPeriodPeriod
        then do:
            /*This will check whether the voucher is not in sequence and if the voucher reaches to end then display the thus accumulated vouchers*/
            if tCollectedVoucherPeriod.tiVoucher <> viPrevCollectedVoucher + 1
            then do:
                /*if more than one voucher collected in the list*/
                if viFromVoucher <> viPrevCollectedVoucher
                then do :
                    create tqVoucherCompleteness.
                    assign tqVoucherCompleteness.tcJournalCode = Company.CompanyCode + '-' + Journal.JournalCode
                           tqVoucherCompleteness.tcErrorType   = string(viFromVoucher) + '-' + string(viPrevCollectedVoucher) +  ' (' + string(viNumberOfVouchers) + ') '  + vcMsg1 + ' '
                                                                 + string(tCollectedVoucherPeriod.tiPeriodYear) + "/":U + string(tCollectedVoucherPeriod.tiPeriodPeriod).
                end. /*if viFromVoucher <> viPrevCollectedVoucher*/ 
                else do :
                    create tqVoucherCompleteness.
                    assign tqVoucherCompleteness.tcJournalCode = Company.CompanyCode + '-' + Journal.JournalCode
                           tqVoucherCompleteness.tcErrorType   = string(viFromVoucher) + ' (1) '  + vcMsg1 + ' ' + string(tCollectedVoucherPeriod.tiPeriodYear) + "/":U 
                                                                 + string(tCollectedVoucherPeriod.tiPeriodPeriod).
                end. /*else */

                /*Reassign the fromvoucher to current voucher as,till the prev voucher the message was displayed */
                assign viFromVoucher      = tCollectedVoucherPeriod.tiVoucher 
                       viNumberOfVouchers = 0
                       viFromVouchPeriod  = tCollectedVoucherPeriod.tiPeriodPeriod.
            end. /*if (tCollectedVoucherPeriod.tiVoucher <> viPrevCollectedVoucher + 1 */
           
        end. /*if viFromVouchPeriod = tCollectedVoucherPeriod.tiPeriodPeriod*/ 
        else do:
            if viFromVoucher <> viPrevCollectedVoucher
            then do:
                create tqVoucherCompleteness.
                assign tqVoucherCompleteness.tcJournalCode = Company.CompanyCode + '-' + Journal.JournalCode
                       tqVoucherCompleteness.tcErrorType   = string(viFromVoucher) + '-' + string(viPrevCollectedVoucher) +  ' (' + string(viNumberOfVouchers) + ') '  + vcMsg1 + ' ' + string(tCollectedVoucherPeriod.tiPeriodYear) + "/":U 
                                                             + string(viFromVouchPeriod).
            end. /*if viFromVoucher          <> viPrevCollectedVoucher*/
            else do:
                create tqVoucherCompleteness.
                assign tqVoucherCompleteness.tcJournalCode = Company.CompanyCode + '-' + Journal.JournalCode
                       tqVoucherCompleteness.tcErrorType   = string(viFromVoucher) + ' (1) '  + vcMsg1 + ' ' + string(tCollectedVoucherPeriod.tiPeriodYear) + "/":U 
                                                             + string(viFromVouchPeriod).
            end. /*else do:*/
            assign viFromVoucher      = tCollectedVoucherPeriod.tiVoucher 
                   viNumberOfVouchers = 0
                   viFromVouchPeriod  = tCollectedVoucherPeriod.tiPeriodPeriod.
        end. /*else do:*/
        assign viPrevCollectedVoucher = tCollectedVoucherPeriod.tiVoucher
               viNumberOfVouchers     = viNumberOfVouchers + 1.

        if last-of(tCollectedVoucherPeriod.tiJournalId)
        then do:
            if viFromVoucher <> viPrevCollectedVoucher
            then do:
                create tqVoucherCompleteness.
                assign tqVoucherCompleteness.tcJournalCode = Company.CompanyCode + '-' + Journal.JournalCode
                       tqVoucherCompleteness.tcErrorType   = string(viFromVoucher) + '-' + string(viPrevCollectedVoucher) +  ' (' + string(viNumberOfVouchers) + ') '  + vcMsg1 + ' ' + string(tCollectedVoucherPeriod.tiPeriodYear) + "/":U 
                                                             + string(viFromVouchPeriod).
            end. /*if viFromVoucher          <> viPrevCollectedVoucher*/
            else do:
                create tqVoucherCompleteness.
                assign tqVoucherCompleteness.tcJournalCode = Company.CompanyCode + '-' + Journal.JournalCode
                       tqVoucherCompleteness.tcErrorType   = string(viFromVoucher) + ' (1) '  + vcMsg1 + ' ' + string(tCollectedVoucherPeriod.tiPeriodYear) + "/":U 
                                                             + string(viFromVouchPeriod).
            end. /*else do:*/
        end. /*if tCollectedVoucherPeriod.tiVoucher = viLastCollectedVoucher and*/
    end. /*for each tCollectedVoucherPeriod where*/  
End. /* for each Company */