Search code examples
pythonxmltallytotallylazy

XML request for Groupwise vouchers details ,ledgers and their bill references , GST breakups ,address


I am trying to fetch Groupwise vouchers details from tally through xml request, I successfully got groups details.

Next, I need to pass group names one by one in for loop , should receive Groupwise vouchers details ,ledgers and their bill references , GST breakups ,address etc.,

I tried following code to get group details and received correct response.

<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>Export</TALLYREQUEST>
        <TYPE>Data</TYPE>
        <ID>MyReportGroupTable</ID>
    </HEADER>
    <BODY>
        <DESC>
            <STATICVARIABLES>
                <SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
            </STATICVARIABLES>
            <TDL>
                <TDLMESSAGE>
                    <REPORT NAME="MyReportGroupTable">
                        <FORMS>MyForm</FORMS>
                    </REPORT>
                    <FORM NAME="MyForm">
                        <PARTS>MyPart</PARTS>
                    </FORM>
                    <PART NAME="MyPart">
                        <LINES>MyLine</LINES>
                        <REPEAT>MyLine : MyCollection</REPEAT>
                        <SCROLLED>Vertical</SCROLLED>
                    </PART>
                    <LINE NAME="MyLine">
                        <FIELDS>FldGuid,FldName,FldParent,FldPrimaryGroup,FldIsRevenue,FldIsDeemedPositive,FldSortPosition</FIELDS>
                    </LINE>
                    <FIELD NAME="FldGuid">
                        <SET>$Guid</SET>
                    </FIELD>
                    <FIELD NAME="FldName">
                        <SET>$$StringFindAndReplace:$Name:'"':'""'</SET>
                    </FIELD>
                    <FIELD NAME="FldParent">
                        <SET>$$StringFindAndReplace:$Parent:'"':'""'</SET>
                    </FIELD>
                    <FIELD NAME="FldPrimaryGroup">
                        <SET>$_PrimaryGroup</SET>
                    </FIELD>
                    <FIELD NAME="FldIsRevenue">
                        <SET>$IsRevenue</SET>
                    </FIELD>
                    <FIELD NAME="FldIsDeemedPositive">
                        <SET>$IsDeemedPositive</SET>
                    </FIELD>
                    <FIELD NAME="FldSortPosition">
                        <SET>$SortPosition</SET>
                    </FIELD>
                    <COLLECTION NAME="MyCollection">
                        <TYPE>Group</TYPE>
                        <FETCH>IsRevenue,IsDeemedPositive,SortPosition,_PrimaryGroup</FETCH>
                    </COLLECTION>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

After this ,I require XML request to get Groupwise vouchers details, ledgers details, their bill references , GST breakups and address

I tried so many xml codes for past one month ,but I didn't get success.

I have tried following code. I got response successfully. But I cannot able to link / add group name & their parent group name

<ENVELOPE>
   <HEADER>
       <VERSION>1</VERSION>
       <TALLYREQUEST>Export</TALLYREQUEST>
       <TYPE>Data</TYPE>
       <ID>MyReportLedgerVouchers</ID>
   </HEADER>
   <BODY>
       <DESC>
           <STATICVARIABLES>
               <SVFROMDATE>$fromDate$</SVFROMDATE>
               <SVTODATE>$toDate$</SVTODATE>
               <SVEXPORTFORMAT>$$SysName:ASCII</SVEXPORTFORMAT>
           </STATICVARIABLES>
           <TDL>
               <TDLMESSAGE>
                   <REPORT NAME="MyReportLedgerVouchers">
                       <FORMS>MyForm</FORMS>
                   </REPORT>
                   <FORM NAME="MyForm">
                       <PARTS>MyPart</PARTS>
                   </FORM>
                   <PART NAME="MyPart">
                       <LINES>MyLine</LINES>
                       <REPEAT>MyLine : MyCollection</REPEAT>
                       <SCROLLED>Vertical</SCROLLED>
                   </PART>
                   <LINE NAME="MyLine">
                       <FIELDS>FldDate,FldVoucherType,FldVoucherNumber,FldLedger,FldAmount,FldNarration</FIELDS>
                   </LINE>
                   <FIELD NAME="FldDate">
                       <SET>$Date</SET>
                   </FIELD>
                   <FIELD NAME="FldVoucherType">
                       <SET>$VoucherTypeName</SET>
                   </FIELD>
                   <FIELD NAME="FldVoucherNumber">
                       <SET>$$StringFindAndReplace:$VoucherNumber:'"':'""'</SET>
                   </FIELD>
                   <FIELD NAME="FldLedger">
                       <SET>$$StringFindAndReplace:$FldLedger:'"':'""'</SET>
                   </FIELD>
                   <FIELD NAME="FldAmount">
                       <SET>$FldAmount</SET>
                   </FIELD>
                   <FIELD NAME="FldNarration">
                       <SET>$$StringFindAndReplace:$Narration:'"':'""'</SET>
                   </FIELD>
                   <COLLECTION NAME="MyCollection">
                       <TYPE>Voucher</TYPE>
                       <FETCH>Narration,AllLedgerEntries</FETCH>
                       <FILTER>FilterCancelledVouchers,FilterOptionalVouchers,FilterVch</FILTER>
                   </COLLECTION>
                   <SYSTEM TYPE="Formulae" NAME="FilterVch">NOT $$IsEmpty:($$FilterValue:$LedgerName:AllLedgerEntries:First:FilterVchLedger)</SYSTEM>
                   <SYSTEM TYPE="Formulae" NAME="FilterVchLedger">$$IsEqual:$LedgerName:"$ledgerName$"</SYSTEM>
                   <SYSTEM TYPE="Formulae" NAME="FilterVchLedgerNot">NOT $$IsEqual:$LedgerName:"$ledgerName$"</SYSTEM>
                   <SYSTEM TYPE="Formulae" NAME="FldAmount">if $$IsDr:$$FilterAmtTotal:AllLedgerEntries:FilterVchLedger:$Amount then (-$$FilterAmtTotal:AllLedgerEntries:FilterVchLedger:$Amount) else ($$FilterAmtTotal:AllLedgerEntries:FilterVchLedger:$Amount)</SYSTEM>
                   <SYSTEM TYPE="Formulae" NAME="FldLedger">if $$FilterCount:AllLedgerEntries:FilterVchLedgerNot > 1 then ($$FullList:AllLedgerEntries:$LedgerName) else ($$FilterValue:$LedgerName:AllLedgerEntries:First:FilterVchLedgerNot)</SYSTEM>
                   <SYSTEM TYPE="Formulae" NAME="FilterCancelledVouchers">NOT $IsCancelled</SYSTEM>
                   <SYSTEM TYPE="Formulae" NAME="FilterOptionalVouchers">NOT $IsOptional</SYSTEM>
               </TDLMESSAGE>
           </TDL>
       </DESC>
   </BODY>
</ENVELOPE>```

Solution

  • Use Below Xml to get Vouchers based on Group Name

    Change <Childof>Sales Accounts</Childof> accordingly

    <ENVELOPE>
        <HEADER>
            <VERSION>1</VERSION>
            <TALLYREQUEST>Export</TALLYREQUEST>
            <TYPE>Collection</TYPE>
            <ID>Vouchers</ID>
        </HEADER>
        <BODY>
            <DESC>
                <STATICVARIABLES>
                    <SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT> <!-- * Supports only xml format -->
                  <SVViewName>Accounting Voucher View</SVViewName>
                    <SVFROMDATE TYPE="Date">20200801</SVFROMDATE>
                    <SVTODATE TYPE="Date">20210831</SVTODATE>
                </STATICVARIABLES>
                <TDL>
                    <TDLMESSAGE>
                        <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="Vouchers">
                            <TYPE> Vouchers : Group</TYPE>
                                <!--Replace Sales Accounts with GroupName you want to search -->
                            <Childof>Sales Accounts</Childof>
                            <NATIVEMETHOD>*</NATIVEMETHOD>
                        
                        </COLLECTION>
      
                    </TDLMESSAGE>
                </TDL>
            </DESC>
        </BODY>
    </ENVELOPE>