You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tally XML请求中按凭证号过滤销售记录?

解决Tally ERP 9 XML POST请求过滤指定凭证号销售记录的问题

我之前帮不少开发者处理过Tally API的过滤问题,你遇到的情况很常见——没有在XML请求中正确配置过滤条件,导致返回了全量数据。下面直接给你可用的XML请求示例,再拆解关键部分:

正确的XML请求示例(过滤凭证号=5的销售记录)

<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>DATA</TYPE>
        <ID>Sales Vouchers</ID>
    </HEADER>
    <BODY>
        <DESC>
            <STATICVARIABLES>
                <SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
            </STATICVARIABLES>
            <TDL>
                <TDLMESSAGE>
                    <REPORT NAME="FilteredSalesVouchers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
                        <FORM>FilteredSalesVoucherForm</FORM>
                        <DATAOBJECT>Voucher</DATAOBJECT>
                        <FILTERS>FilterVoucherNumber</FILTERS>
                    </REPORT>
                    <FORM NAME="FilteredSalesVoucherForm" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
                        <PART>FilteredSalesVoucherPart</PART>
                    </FORM>
                    <PART NAME="FilteredSalesVoucherPart" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
                        <LINE>FilteredSalesVoucherLine</LINE>
                        <REPEAT>FilteredSalesVoucherLine : Voucher</REPEAT>
                    </PART>
                    <LINE NAME="FilteredSalesVoucherLine" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
                        <FIELD>VoucherNumber</FIELD>
                        <FIELD>Date</FIELD>
                        <FIELD>PartyName</FIELD>
                        <FIELD>Amount</FIELD>
                        <!-- 这里可以添加你需要的其他销售凭证字段 -->
                    </LINE>
                    <FILTER NAME="FilterVoucherNumber" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
                        <CONDITION>$$IsSalesLedger AND VoucherNumber = "5"</CONDITION>
                    </FILTER>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

关键部分解释

  • <FILTERS>标签:指定要应用的过滤器名称(这里是FilterVoucherNumber),告诉Tally只返回符合过滤条件的数据。
  • <FILTER>定义:
    • $$IsSalesLedger:确保只筛选销售类凭证,避免返回其他类型的凭证(比如采购、付款)。
    • VoucherNumber = "5":这就是你需要的精准过滤条件,指定只返回凭证号为5的记录。注意凭证号是字符串类型,所以要加双引号。
  • 字段选择:在<LINE>标签下,你可以按需添加需要获取的销售凭证字段(比如PartyName、Amount等),不需要的可以删掉,减少返回数据量。

额外注意事项

  1. 确认Tally ERP 9的版本支持TDL过滤:大部分主流版本(Release 6及以上)都支持这个写法,如果你用的是更老的版本,可能需要调整过滤逻辑。
  2. 凭证号的匹配规则:如果你的Tally中凭证号是数字格式,也可以直接写VoucherNumber = 5,但保险起见用字符串匹配更稳妥。
  3. 测试时可以先简化请求:比如只保留VoucherNumber字段,确认过滤生效后再添加其他字段。

内容的提问来源于stack exchange,提问作者Raize Ahamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:53:04