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

向Tally发送XML请求获取磁盘公司列表时遇Starting From公式错误

解决Tally XML请求中"Starting From"公式错误问题

问题描述

向Tally发送XML请求获取磁盘上的公司列表时,只要包含起始日期(Starting From)字段,就会收到错误提示:Cannot understand Bad formula! 'Starting From'。移除该字段后能正常返回结果,但业务逻辑必须包含这个字段,需要解决此公式错误。

原请求XML代码:

<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>DATA</TYPE>
        <ID>CA_COMPANY</ID>
    </HEADER>
    <BODY>
        <DESC>
            <STATICVARIABLES>
                <SVEXPORTFORMAT>$$SysName:xml</SVEXPORTFORMAT>
            </STATICVARIABLES>
            <TDL>
                <TDLMESSAGE>
                    <REPORT ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO"
                        ISINTERNAL="NO" NAME="CA_COMPANY">
                        <FORM>CA_COMPANY</FORM>
                    </REPORT>
                    <FORM ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO"
                        NAME="CA_COMPANY">
                        <PART>CA_COMPANY</PART>
                        <XMLTAG>COMPANIES</XMLTAG>
                    </FORM>
                    <PART ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO"
                        NAME="CA_COMPANY">
                        <LINE>CA_COMPANY</LINE>
                        <REPEAT>CA_COMPANY:CA_COMPANYCOLLECTION</REPEAT>
                        <SCROLLED>Vertical</SCROLLED>
                    </PART>
                    <LINE ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO"
                        NAME="CA_COMPANY">
                        <FIELDS>
                            CA_NAME,CA_STARTINGFROM
                        </FIELDS>
                        <XMLTAG>COMPANY</XMLTAG>
                    </LINE>
                    <FIELD ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO"
                        ISINTERNAL="NO" NAME="CA_NAME">
                        <SET>$NAME</SET>
                        <XMLTAG>NAME</XMLTAG>
                    </FIELD>
                    <FIELD ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO"
                        ISINTERNAL="NO" NAME="CA_STARTINGFROM">
                        <TYPE>Date</TYPE>
                        <SET>$STARTINGFROM</SET>
                        <XMLTAG>STARTINGFROM</XMLTAG>
                    </FIELD>
                    <COLLECTION ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO"
                        ISINTERNAL="NO" NAME="CA_COMPANYCOLLECTION">
                        <TYPE>COMPANYONDISK</TYPE>
                        <NATIVEMETHOD>NAME</NATIVEMETHOD>
                        <NATIVEMETHOD>STARTINGFROM</NATIVEMETHOD>
                    </COLLECTION>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

解决方案

错误的核心原因是Tally的COMPANYONDISK集合不支持直接调用STARTINGFROM原生方法,该集合仅暴露有限的原生属性,STARTINGFROM不在其中。要获取公司的起始日期,需通过COMPANY对象而非COMPANYONDISK访问该字段。

修改后的XML请求代码如下:

<ENVELOPE>
    <HEADER>
        <VERSION>1</VERSION>
        <TALLYREQUEST>EXPORT</TALLYREQUEST>
        <TYPE>DATA</TYPE>
        <ID>CA_COMPANY</ID>
    </HEADER>
    <BODY>
        <DESC>
            <STATICVARIABLES>
                <SVEXPORTFORMAT>$$SysName:xml</SVEXPORTFORMAT>
            </STATICVARIABLES>
            <TDL>
                <TDLMESSAGE>
                    <REPORT ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO"
                        ISINTERNAL="NO" NAME="CA_COMPANY">
                        <FORM>CA_COMPANY</FORM>
                    </REPORT>
                    <FORM ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO"
                        NAME="CA_COMPANY">
                        <PART>CA_COMPANY</PART>
                        <XMLTAG>COMPANIES</XMLTAG>
                    </FORM>
                    <PART ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO"
                        NAME="CA_COMPANY">
                        <LINE>CA_COMPANY</LINE>
                        <REPEAT>CA_COMPANY:CA_COMPANYCOLLECTION</REPEAT>
                        <SCROLLED>Vertical</SCROLLED>
                    </PART>
                    <LINE ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO"
                        NAME="CA_COMPANY">
                        <FIELDS>
                            CA_NAME,CA_STARTINGFROM
                        </FIELDS>
                        <XMLTAG>COMPANY</XMLTAG>
                    </LINE>
                    <FIELD ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO"
                        ISINTERNAL="NO" NAME="CA_NAME">
                        <SET>$NAME</SET>
                        <XMLTAG>NAME</XMLTAG>
                    </FIELD>
                    <FIELD ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO"
                        ISINTERNAL="NO" NAME="CA_STARTINGFROM">
                        <TYPE>Date</TYPE>
                        <!-- 使用COMPANY对象的STARTINGFROM属性 -->
                        <SET>##COMPANY:$NAME.STARTINGFROM</SET>
                        <XMLTAG>STARTINGFROM</XMLTAG>
                    </FIELD>
                    <COLLECTION ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO"
                        ISINTERNAL="NO" NAME="CA_COMPANYCOLLECTION">
                        <TYPE>COMPANYONDISK</TYPE>
                        <NATIVEMETHOD>NAME</NATIVEMETHOD>
                        <!-- 移除STARTINGFROM原生方法,因为COMPANYONDISK不支持 -->
                    </COLLECTION>
                </TDLMESSAGE>
            </TDL>
        </DESC>
    </BODY>
</ENVELOPE>

修改说明

  1. 移除集合中的STARTINGFROM原生方法:从CA_COMPANYCOLLECTION的<NATIVEMETHOD>标签里删掉STARTINGFROM,因为COMPANYONDISK集合不提供这个属性的直接访问。
  2. 修改字段的SET公式:将CA_STARTINGFROM字段的<SET>值从$STARTINGFROM改为##COMPANY:$NAME.STARTINGFROM,通过公司名称关联到COMPANY对象,进而获取其起始日期属性。

这样修改后,XML请求就能正确获取到公司的起始日期,同时避免公式错误。

内容的提问来源于stack exchange,提问作者Ammar Haider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:26:00