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

如何动态传递ALTERID获取TALLY XML API最新凭证/库存/客户数据

TALLY XML API 动态获取最新数据方案

问题背景

当前通过TALLY XML API导出凭证、库存项及客户数据时,静态指定ALTERID作为过滤条件,无法自动获取最新更新的数据,需要实现动态传递ALTERID或通过其他方式获取最新数据。


当前静态过滤的请求XML

1. 凭证(VOUCHER)请求

<ENVELOPE>
    <HEADER>enter code here
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>COLLECTION</TYPE>
        <ID>CUSTOMVOUCHERDATA</ID>
    </HEADER>
    <BODY>
        <DESC>
            <TDL>
                <TDLMESSAGE>
                    <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="CUSTOMVOUCHERDATA">
                        <TYPE>VOUCHER</TYPE>
                        <FETCH>VOUCHERNUMBER,DATE,ISCANCELLED,PARTYNAME,PARTYLEDGERNAME,PARTYGSTIN,CONSIGNEEGSTIN,LEDGERENTRIES.LIST,ALLLEDGERENTRIES,AMOUNT,VCHSTATUSDATE,EFFECTIVEDATE,ALTERID,MASTERID,VOUCHERKEY,VOUCHERRETAINKEY,GUID,BASICSHIPDOCUMENTNO,BASICFINALDESTINATION,BASICSHIPVESSELNO,EICHECKPOST,BILLOFLADINGNO,BILLOFLADINGDATE,BILLOFLADINGDATE,BASICSHIPPEDBY,IRN,IRNACKDATE,GSTREGISTRATION,VOUCHERTYPENAME,CMPGSTREGISTRATIONTYPE,CMPGSTSTATE,NUMBERINGSTYLE,VCHSTATUSTAXUNIT,GSTNATUREOFRETURN</FETCH>
                        <FILTER>Masterfilter</FILTER>
                    </COLLECTION>
                    <SYSTEM TYPE="Formulae" NAME="Masterfilter">$MASTERID > 829 AND $ALTERID > 1343</SYSTEM>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

2. 库存项(STOCKITEM)请求

<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>COLLECTION</TYPE>
        <ID>CUSTOMSTOCKITEMCOL</ID>
    </HEADER>
    <BODY>
        <DESC>
            <STATICVARIABLES>
                <SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
            </STATICVARIABLES>
            <TDL>
                <TDLMESSAGE>
                    <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="CUSTOMSTOCKITEMCOL">
                        <TYPE>STOCKITEM</TYPE>
                        <FETCH>NAME,GUID,GSTAPPLICABLE,GSTDETAILS.LIST,ALTERID,MRPDETAILS.LIST,BASEUNITS,ISDELETED,OPENINGBALANCE,OPENINGRATE</FETCH>
                        <FILTER>Masterfilter</FILTER>
                    </COLLECTION>
                    <SYSTEM TYPE="Formulae" NAME="Masterfilter">$ALTERID > 1094</SYSTEM>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

3. 客户(LEDGER)请求

<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>COLLECTION</TYPE>
        <ID>CUSTOMERDATA</ID>
    </HEADER>
    <BODY>
        <DESC>
            <STATICVARIABLES>
                <SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
            </STATICVARIABLES>
            <TDL>
                <TDLMESSAGE>
                    <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="CUSTOMERDATA">
                        <TYPE>LEDGER</TYPE>
                        <FETCH>NAME,PARENT,GUID,PARTYGSTIN,BILLCREDITPERIOD,LEDGERMOBILE,LEDGERCOUNTRYISCODE,ISDELETED,ALTERID,EMAIL,PRIORSTATENAME</FETCH>
                        <FILTER>Masterfilter</FILTER>
                    </COLLECTION>
                    <SYSTEM TYPE="Formulae" NAME="Masterfilter">$ALTERID > 32</SYSTEM>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

解决方案

1. 动态传递ALTERID参数

通过TALLY的<STATICVARIABLES>定义自定义变量,在请求时动态传入最新的ALTERID阈值,替代静态硬编码数值。

改造后的凭证(VOUCHER)请求

<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>COLLECTION</TYPE>
        <ID>CUSTOMVOUCHERDATA</ID>
    </HEADER>
    <BODY>
        <DESC>
            <STATICVARIABLES>
                <!-- 请求时替换为上次导出的最大MASTERID -->
                <SV_LAST_MASTERID>829</SV_LAST_MASTERID>
                <!-- 请求时替换为上次导出的最大ALTERID -->
                <SV_LAST_ALTERID>1343</SV_LAST_ALTERID>
            </STATICVARIABLES>
            <TDL>
                <TDLMESSAGE>
                    <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="CUSTOMVOUCHERDATA">
                        <TYPE>VOUCHER</TYPE>
                        <FETCH>VOUCHERNUMBER,DATE,ISCANCELLED,PARTYNAME,PARTYLEDGERNAME,PARTYGSTIN,CONSIGNEEGSTIN,LEDGERENTRIES.LIST,ALLLEDGERENTRIES,AMOUNT,VCHSTATUSDATE,EFFECTIVEDATE,ALTERID,MASTERID,VOUCHERKEY,VOUCHERRETAINKEY,GUID,BASICSHIPDOCUMENTNO,BASICFINALDESTINATION,BASICSHIPVESSELNO,EICHECKPOST,BILLOFLADINGNO,BILLOFLADINGDATE,BILLOFLADINGDATE,BASICSHIPPEDBY,IRN,IRNACKDATE,GSTREGISTRATION,VOUCHERTYPENAME,CMPGSTREGISTRATIONTYPE,CMPGSTSTATE,NUMBERINGSTYLE,VCHSTATUSTAXUNIT,GSTNATUREOFRETURN</FETCH>
                        <FILTER>Masterfilter</FILTER>
                    </COLLECTION>
                    <!-- 使用静态变量替代硬编码值 -->
                    <SYSTEM TYPE="Formulae" NAME="Masterfilter">$MASTERID > $$SV_LAST_MASTERID AND $ALTERID > $$SV_LAST_ALTERID</SYSTEM>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

改造后的库存项(STOCKITEM)请求

<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>COLLECTION</TYPE>
        <ID>CUSTOMSTOCKITEMCOL</ID>
    </HEADER>
    <BODY>
        <DESC>
            <STATICVARIABLES>
                <SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
                <!-- 请求时替换为上次导出的最大ALTERID -->
                <SV_LAST_ALTERID>1094</SV_LAST_ALTERID>
            </STATICVARIABLES>
            <TDL>
                <TDLMESSAGE>
                    <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="CUSTOMSTOCKITEMCOL">
                        <TYPE>STOCKITEM</TYPE>
                        <FETCH>NAME,GUID,GSTAPPLICABLE,GSTDETAILS.LIST,ALTERID,MRPDETAILS.LIST,BASEUNITS,ISDELETED,OPENINGBALANCE,OPENINGRATE</FETCH>
                        <FILTER>Masterfilter</FILTER>
                    </COLLECTION>
                    <SYSTEM TYPE="Formulae" NAME="Masterfilter">$ALTERID > $$SV_LAST_ALTERID</SYSTEM>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

改造后的客户(LEDGER)请求

<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>COLLECTION</TYPE>
        <ID>CUSTOMERDATA</ID>
    </HEADER>
    <BODY>
        <DESC>
            <STATICVARIABLES>
                <SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
                <!-- 请求时替换为上次导出的最大ALTERID -->
                <SV_LAST_ALTERID>32</SV_LAST_ALTERID>
            </STATICVARIABLES>
            <TDL>
                <TDLMESSAGE>
                    <COLLECTION ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No" NAME="CUSTOMERDATA">
                        <TYPE>LEDGER</TYPE>
                        <FETCH>NAME,PARENT,GUID,PARTYGSTIN,BILLCREDITPERIOD,LEDGERMOBILE,LEDGERCOUNTRYISCODE,ISDELETED,ALTERID,EMAIL,PRIORSTATENAME</FETCH>
                        <FILTER>Masterfilter</FILTER>
                    </COLLECTION>
                    <SYSTEM TYPE="Formulae" NAME="Masterfilter">$ALTERID > $$SV_LAST_ALTERID</SYSTEM>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

使用逻辑:每次请求前,从本地存储或上次导出结果中提取最大的ALTERID(及MASTERID),替换XML中对应静态变量的数值,即可获取自上次导出后更新的数据。


2. 按时间过滤替代方案

若ALTERID逻辑不可靠,可通过数据的修改时间字段过滤,比如凭证的EFFECTIVEDATE/VCHSTATUSDATE,库存项/客户的MODIFIEDDATE字段(需确认TALLY中对应字段)。

示例:凭证按时间过滤的配置

<SYSTEM TYPE="Formulae" NAME="Masterfilter">$EFFECTIVEDATE > $$SV_LAST_SYNC_DATE</SYSTEM>

其中SV_LAST_SYNC_DATE为动态传入的上次同步时间,格式需符合TALLY要求(如DD-MM-YYYY)。


内容的提问来源于stack exchange,提问作者bjss kiriti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:37:02