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

使用objHTTP发送Tally ODBC导出XML时大数据请求超时错误的解决求助

解决Tally大数据量XML导出HTTP POST超时问题

针对你遇到的小体量XML正常、大数据量超时的问题,结合你的代码objHTTP.Open "POST", URL, False和objHTTP.send (TallyString),以及给出的XML请求内容,分享几个实用的解决思路:

1. 延长HTTP请求的超时时间

默认情况下,MSXML2.XMLHTTP(假设你用的是这个组件)的超时设置比较短,大数据量传输和Tally端处理都需要更多时间。你可以手动设置超时参数,覆盖默认值:

Set objHTTP = CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "POST", URL, False
' 设置超时:连接超时、发送超时、接收超时(单位:毫秒,这里设为5分钟)
objHTTP.SetTimeouts 0, 0, 300000, 300000
objHTTP.send (TallyString)

参数说明:SetTimeouts(resolveTimeout, connectTimeout, sendTimeout, receiveTimeout),把后两个参数设为较大值(比如300000=5分钟),给Tally足够的时间处理并返回数据。

2. 拆分XML请求的时间范围

你的请求是导出2020-04-01到2021-03-31一整年的Purchase凭证,数据量肯定不小。可以尝试把时间范围拆分成更小的批次(比如按季度、月份),分批导出后再合并数据:

修改后的XML请求片段(以季度为例):

</HEADER>
<BODY>
<EXPORTDATA>
<REQUESTDESC>
<STATICVARIABLES>
<SVFROMDATE>20200401</SVFROMDATE>
<SVTODATE>20200630</SVTODATE>
<VOUCHERTYPENAME>Purchase</VOUCHERTYPENAME>
<EXPLODEFLAG>No</EXPLODEFLAG>
<SVEXPORTFORMAT>$$SysName: XML</SVEXPORTFORMAT>
</STATICVARIABLES>
<REPORTNAME>Voucher Register</REPORTNAME>
</REQUESTDESC>
</EXPORTDATA>
</BODY>
</ENVELOPE>

这样每次请求的数据量大幅减少,不容易触发超时,后续你可以把多个批次的XML数据合并成完整的数据集。

3. 优化Tally的运行性能

Tally在处理大量数据时可能因为内存不足或配置限制导致响应缓慢:

  • 打开Tally的配置文件Tally.ini,调整MaxMemoryUsage参数(比如设为MaxMemoryUsage=2048,单位MB),给Tally分配更多内存;
  • 导出前关闭Tally中不必要的模块、报表或弹窗,减少系统资源占用;
  • 如果是网络版Tally,确认服务器的硬件资源(CPU、内存)足够支撑大数据量导出请求。

4. 压缩XML数据后传输

大数据量XML的体积通常很大,压缩后能显著减少传输时间。你可以用VBScript把XML字符串压缩成gzip格式,再添加请求头告知Tally接收压缩数据:

' 示例:压缩XML字符串为gzip(需要用到ADODB.Stream和Scripting.FileSystemObject)
Set objStream = CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 2 ' 文本模式
objStream.Charset = "UTF-8"
objStream.WriteText TallyString
objStream.Position = 0
objStream.Type = 1 ' 二进制模式
objStream.SaveToFile "temp.gz", 2 ' 保存为压缩文件
' 读取压缩后的二进制数据
objStream.Open
objStream.Type = 1
objStream.LoadFromFile "temp.gz"
compressedData = objStream.Read

' 发送压缩数据
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "POST", URL, False
objHTTP.SetRequestHeader "Content-Encoding", "gzip"
objHTTP.send compressedData

注意:需要确认你的Tally版本支持接收gzip压缩的请求,否则这个方法不适用。

5. 检查网络与服务器限制

  • 确认你的客户端和Tally服务器之间的网络稳定,没有丢包或带宽限制;
  • 检查防火墙、代理服务器是否设置了大文件传输的超时限制,必要时调整相关规则;
  • 如果是云服务器上的Tally,确认服务商没有限制单请求的大小或超时时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:49:11