问题描述
以下xml请求用于从tally导出Master
<!--XML Tags to fetch Master Data from Tally--><ENVELOPE><HEADER><TALLYREQUEST>Export Data</TALLYREQUEST></HEADER><BODY><EXPORTDATA><REQUESTDESC><REPORTNAME>List of Accounts</REPORTNAME><STATICVARIABLES><SVCURRENTCOMPANY></SVCURRENTCOMPANY><DSPNAMESTYLE>$$SYSNAME:NAMEONLY</DSPNAMESTYLE><!--Specify the Period here--><SVFROMDATE></SVFROMDATE><SVTODATE></SVTODATE><sveXPORTFORMAT>$$SysName:XML</sveXPORTFORMAT><!--Other possible values for sveXPORTFORMAT tag are given below--><!--$$SysName:HTML--><!--$$SysName:SDF--></STATICVARIABLES></REQUESTDESC></EXPORTDATA></BODY></ENVELOPE>
但是我得到了
- 超时错误,即使是 30 分钟(对于不同的超时参数) 或
- 没有足够的内存资源来完成此操作
在代码行“objtally.sEnd sendxml”
[
'CODE USED
Set objtally = New MSXML2.ServerXMLHTTP
objtally.setTimeouts 5000,5000,100000,100000
objtally.Open "POST","http://localhost:9000"
objtally.sEnd sendxml
]
主文件有大量帐户(大约 30000 个分类帐)。适用于较小的计数文件。 我正在使用以下代码读取响应:
RequestXML = objtally.responseText
adostream.Write objtally.responseBody
但是在得到响应之前我遇到了错误。 我正在使用 Tally Erp9。
如何解决这个问题?
解决方法
首先使用以下 XML 获取分类帐名称
<?xml version="1.0" encoding="utf-8"?>
<ENVELOPE>
<HEADER>
<VERSION>1</VERSION>
<TALLYREQUEST>Export</TALLYREQUEST>
<TYPE>Data</TYPE>
<ID>List of Ledgers</ID>
</HEADER>
<BODY>
<DESC>
<STATICVARIABLES>
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
<SVCURRENTCOMPANY><!--Specify Company here--></SVCURRENTCOMPANY>
<SVFROMDATE TYPE="Date"><!--Specify the Period here--></SVFROMDATE>
</STATICVARIABLES>
<TDL>
<TDLMESSAGE>
<REPORT NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<FORMS>List of Ledgers</FORMS>
</REPORT>
<FORM NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<TOPPARTS>List of Ledgers</TOPPARTS>
<XMLTAG>"List of Ledgers"</XMLTAG>
</FORM>
<PART NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<TOPLINES>List of Ledgers</TOPLINES>
<REPEAT>List of Ledgers : Collection of Ledgers</REPEAT>
<SCROLLED>Vertical</SCROLLED>
</PART>
<LINE NAME="List of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<LEFTFIELDS>Name</LEFTFIELDS>
</LINE>
<FIELD NAME="Name" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<SET>$Name</SET>
<XMLTAG>"NAME"</XMLTAG>
</FIELD>
<COLLECTION NAME="Collection of Ledgers" ISMODIFY="No" ISFIXED="No" ISINITIALIZE="No" ISOPTION="No" ISINTERNAL="No">
<TYPE>Ledger</TYPE>
</COLLECTION>
</TDLMESSAGE>
</TDL>
</DESC>
</BODY>
</ENVELOPE>
将分类帐名称保存在列表中,并通过循环遍历列表使用以下 xml 单独获取每个分类帐
<ENVELOPE>
<HEADER>
<VERSION>1</VERSION>
<TALLYREQUEST>EXPORT</TALLYREQUEST>
<TYPE>Object</TYPE>
<SUBTYPE>Ledger</SUBTYPE>
<ID TYPE="Name">
<!--Specify Ledgername here-->
</ID>
</HEADER>
<BODY>
<DESC>
<STATICVARIABLES>
<SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
<!--Specify other static variables here-->
</STATICVARIABLES>
<FETCHLIST>
<FETCH>*</FETCH>
<!--Fetch Fields here instead of "*" -->
<!--
<FETCH>PARENT</FETCH>
<FETCH>ADDRESS</FETCH>
-->
</FETCHLIST>
</DESC>
</BODY>
</ENVELOPE>