'Out of memory ' Error for Voucher Register Report

Discussion in 'Tally Integration' started by Researcher1, Apr 10, 2023.

    
  1. Researcher1

    Researcher1 Member


    The below XML request used to fetch voucher data from tally ERP9

    Code:
    <ENVELOPE><HEADER><TALLYREQUEST>Export Data</TALLYREQUEST></HEADER><BODY><EXPORTDATA><REQUESTDESC><STATICVARIABLES><SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE>20220216</SVFROMDATE>20220216<SVTODATE></SVTODATE></STATICVARIABLES><REPORTNAME>Voucher Register</REPORTNAME></REQUESTDESC></EXPORTDATA></BODY></ENVELOPE>
    It works fine if the voucher count is less . But when voucher count is approx(14,000) gives error as " Out of memory "

    Is there any way to fetch voucher report when voucher count is more ?
    Or Is it possible to split the report into 2 or more parts and fetch the data.
    Note: I have tried to split the data based on date but 1 day have 14,000 vouchers. How to split further?
     


  2. Sai Vineeth

    Sai Vineeth Active Member


    Tally doesn't provide pagination.
    So, need to create your own pagination mechanism.
    Ex: Paginate by 1,000

    Code:
    <ENVELOPE Action="">
        <HEADER>
            <VERSION>1</VERSION>
            <TALLYREQUEST>EXPORT</TALLYREQUEST>
            <TYPE>COLLECTION</TYPE>
            <ID>CUSTOMVoucherCOL</ID>
        </HEADER>
        <BODY>
            <DESC>
                <STATICVARIABLES>
                </STATICVARIABLES>
                <TDL>
                    <TDLMESSAGE>
                        <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="CUSTOMVoucherCOL">
                            <TYPE>Vouchers</TYPE>
                            <NATIVEMETHOD>MasterId</NATIVEMETHOD>
                            <NATIVEMETHOD>*</NATIVEMETHOD>
                            <COMPUTE>LineIndex : ##vLineIndex</COMPUTE>
                            <COMPUTEVAR>vLineIndex: Number : IF $$IsEmpty:##vLineIndex THEN 1 ELSE ##vLineIndex + 1</COMPUTEVAR>
                            <FILTERS>PaginationFilter</FILTERS>
                        </COLLECTION>
                        <SYSTEM TYPE="Formulae" NAME="PaginationFilter">##vLineIndex &lt;= 1000 AND ##vLineIndex &gt; 0</SYSTEM>
                    </TDLMESSAGE>
                </TDL>
            </DESC>
        </BODY>
    </ENVELOPE>
    }
    For Second page change PaginationFilter to
    Code:
    ##vLineIndex &lt;= 2000 AND ##vLineIndex &gt; 1000
    -----------------------------------------------------------------------------------------------------
    If you are using C# or python, Tally Connector Library Supports this.
    Page -1
    Code:
    TCM.Pagination.PaginatedResponse<TCM.Voucher> paginatedResponse = await _tallyService.GetVouchersAsync(new() { RecordsPerPage = 1000,PageNum=1});
            var objects = paginatedResponse.Data;
    Page-2
    Code:
    TCM.Pagination.PaginatedResponse<TCM.Voucher> paginatedResponse = await _tallyService.GetVouchersAsync(new() { RecordsPerPage = 1000,PageNum=2});
            var objects = paginatedResponse.Data;
     
    Last edited: Apr 18, 2023


  3. Researcher1

    Researcher1 Member


    Using above Xml request I could able fetch 500 voucher out of 1000 voucher. So I replaced
    PHP:
    <COMPUTEVAR>vLineIndexNumber : IF $$IsEmpty:##vLineIndex THEN 1 ELSE ##vLineIndex + 1</COMPUTEVAR>
    to
    PHP:
    <COMPUTEVAR>vLineIndexNumber : IF $$IsEmpty:##vLineIndex THEN 1 ELSE ##vLineIndex + 0.5</COMPUTEVAR>
    and able to fetch 1000 voucher. But using same xml request when I tried to fetch vouchers , query returns only 1 out of 2 voucher.

    Is above request can be modified to work for any number of vouchers?
     


  4. Sai Vineeth

    Sai Vineeth Active Member


    I didn't understand what issue you are facing

    One suggestion is
    Keep
    Code:
    <COMPUTEVAR>vLineIndex: Number : IF $$IsEmpty:##vLineIndex THEN 1 ELSE ##vLineIndex + 1</COMPUTEVAR>
    as is

    If you want to increase or decrease number of results per page change in Fiter only
     


  5. Researcher1

    Researcher1 Member


    Using above query i was able to fetch only 500 vouchers at a time. But as per
    it should have fetched 1000 voucher.
     


  6. Sai Vineeth

    Sai Vineeth Active Member


    It will fetch 1,000 vouchers only (unless you changed something like date or any filter).
    Once post your full xml
     


  7. Researcher1

    Researcher1 Member


    I previously asked, "Is there any way to fetch voucher report when voucher count is more?"
    I changed the XML request you gave me, and it now functions without an Out of Memory issue.
    Code:
    <ENVELOPE>
        <HEADER>
            <VERSION>1</VERSION>
            <TALLYREQUEST>EXPORT</TALLYREQUEST>
            <TYPE>COLLECTION</TYPE>
            <ID>CUSTOMVoucherCOL</ID>
        </HEADER>
        <BODY>
            <DESC>
                <STATICVARIABLES>
                    <SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT><SVFROMDATE TYPE='Date'>YYYYMMDD</SVFROMDATE>
                     <SVTODATE TYPE='Date'>YYYYMMDD</SVTODATE>
                </STATICVARIABLES>
                <TDL>
                    <TDLMESSAGE>
                        <COLLECTION ISMODIFY='No' ISFIXED='No' ISINITIALIZE='No' ISOPTION='No' ISINTERNAL='No' NAME='CUSTOMVoucherCOL'>
                            <TYPE>Voucher</TYPE>
                            <FETCH>ALLLEDGERENTRIES.LIST,BANKALLOCATIONS.LIST,LEDGERENTRIES.LIST</FETCH>                         
                        </COLLECTION>
                    </TDLMESSAGE>
                </TDL>
            </DESC>
        </BODY>
    </ENVELOPE>
     
    Sai Vineeth likes this.


Share This Page