XML响应中金额符号未导出(仅导出绝对值)的技术求助
Tally XML导出带符号金额的配置修正
原XML请求导出的金额均为绝对值,无正负符号,问题出在金额字段的取值和配置上。以下是修正方案:
问题原因
当前配置中使用$AMOUNT获取金额,该字段返回的是凭证金额的绝对值,不包含借贷方向对应的符号;同时集合中也未声明获取带符号的金额字段。
修正步骤
- 修改金额字段的取值:将
CA_AMOUNT字段的<SET>值从$AMOUNT替换为$LedgerAmount,该字段会根据 ledger 在凭证中的借贷方向返回带符号的金额。 - 更新集合的原生方法:在
CA_VOUCHERCOLLECTION的<NATIVEMETHOD>列表中添加LedgerAmount,确保Tally能正确提取该字段数据。
修改后的完整XML
<ENVELOPE> <HEADER> <VERSION>1</VERSION> <TALLYREQUEST>EXPORT</TALLYREQUEST> <TYPE>DATA</TYPE> <ID>CA_VOUCHER</ID> </HEADER> <BODY> <DESC> <STATICVARIABLES> <SVEXPORTFORMAT>$$SysName:xml</SVEXPORTFORMAT> <SVCURRENTCOMPANY>COMPANY NAME</SVCURRENTCOMPANY> <SVFROMDATE TYPE="Date">01-01-2023</SVFROMDATE> <SVTODATE TYPE="Date">31-12-2023</SVTODATE> </STATICVARIABLES> <TDL> <TDLMESSAGE> <REPORT ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO" NAME="CA_VOUCHER"> <FORM>CA_VOUCHER</FORM> </REPORT> <FORM ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO" NAME="CA_VOUCHER"> <PART>CA_VOUCHER</PART> <XMLTAG>Vouchers.LIST</XMLTAG> </FORM> <PART ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO" NAME="CA_VOUCHER"> <LINE>CA_VOUCHER</LINE> <REPEAT>CA_VOUCHER:CA_VOUCHERCOLLECTION</REPEAT> <SCROLLED>Vertical</SCROLLED> </PART> <LINE ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO" NAME="CA_VOUCHER"> <FIELDS>CA_DATE,CA_VOUCHERTYPENAME,CA_VOUCHERNUMBER,CA_AMOUNT</FIELDS> <XMLTAG>VOUCHER</XMLTAG> </LINE> <FIELD ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO" NAME="CA_DATE"> <SET>$Date</SET> <XMLTAG>DATE</XMLTAG> </FIELD> <FIELD ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO" NAME="CA_VOUCHERTYPENAME"> <SET>$VOUCHERTYPENAME</SET> <XMLTAG>VOUCHERTYPENAME</XMLTAG> </FIELD> <FIELD ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO" NAME="CA_VOUCHERNUMBER"> <SET>$VoucherNumber</SET> <XMLTAG>VOUCHERNUMBER</XMLTAG> </FIELD> <FIELD ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO" NAME="CA_AMOUNT"> <SET>$LedgerAmount</SET> <XMLTAG>AMOUNT</XMLTAG> </FIELD> <COLLECTION ISMODIFY="NO" ISFIXED="NO" ISINITIALIZE="NO" ISOPTION="NO" ISINTERNAL="NO" NAME="CA_VOUCHERCOLLECTION"> <TYPE> Vouchers : Ledger</TYPE> <Childof>LEDGER NAME</Childof> <BELONGSTO>Yes</BELONGSTO> <NATIVEMETHOD>DATE</NATIVEMETHOD> <NATIVEMETHOD>VOUCHERTYPENAME</NATIVEMETHOD> <NATIVEMETHOD>VOUCHERNUMBER</NATIVEMETHOD> <NATIVEMETHOD>AMOUNT</NATIVEMETHOD> <NATIVEMETHOD>LedgerAmount</NATIVEMETHOD> </COLLECTION> </TDLMESSAGE> </TDL> </DESC> </BODY> </ENVELOPE>
补充说明
$LedgerAmount的符号规则:通常借方发生额为正数,贷方发生额为负数(或反之,取决于Tally的账套配置),但会始终保留符号以区分借贷方向。- 如果需要自定义符号规则(比如销售凭证统一为正,采购为负),可以结合
$VoucherTypeName做条件判断,例如:<SET>$$If: $VoucherTypeName = "Sales" Then $AMOUNT Else -$AMOUNT</SET>
内容的提问来源于stack exchange,提问作者Ammar Haider
相关产品推荐
相关产品推荐

