能否通过C#代码自动将TDL文件加载至Tally系统?
实现C#自动加载Tally TDL文件的方法
可以通过Tally提供的XML远程接口实现C#自动加载TDL文件,以下是具体实现方案:
1. 先开启Tally的远程访问权限
在Tally中完成基础配置:
- 打开Tally,进入
F12:配置->高级配置 - 勾选
启用Tally.ERP 9的HTTP服务,设置端口(默认9000) - 保存配置后重启Tally
2. 构造TDL加载的XML请求
Tally遵循特定XML格式处理远程指令,加载TDL的模板如下:
<ENVELOPE> <HEADER> <VERSION>1</VERSION> <TALLYREQUEST>Import</TALLYREQUEST> <TYPE>TDL</TYPE> <ID>LoadTDL</ID> </HEADER> <BODY> <DESC> <TDL> <TDLFILE> <FILE>{TDL文件绝对路径}</FILE> </TDLFILE> </TDL> </DESC> </BODY> </ENVELOPE>
3. C#代码实现HTTP请求发送
通过HttpWebRequest向Tally的HTTP服务端口发送POST请求,传递上述XML内容:
using System; using System.IO; using System.Net; using System.Text; public class TallyTdlAutoLoader { public static void LoadTdl(string tallyServerUrl, string tdlFullPath) { // 拼接XML请求内容 string xmlPayload = $@" <ENVELOPE> <HEADER> <VERSION>1</VERSION> <TALLYREQUEST>Import</TALLYREQUEST> <TYPE>TDL</TYPE> <ID>LoadTDL</ID> </HEADER> <BODY> <DESC> <TDL> <TDLFILE> <FILE>{tdlFullPath}</FILE> </TDLFILE> </TDL> </DESC> </BODY> </ENVELOPE>"; try { // 创建POST请求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(tallyServerUrl); request.Method = "POST"; request.ContentType = "application/xml"; request.ContentLength = Encoding.UTF8.GetByteCount(xmlPayload); // 写入请求数据 using (Stream requestStream = request.GetRequestStream()) { byte[] data = Encoding.UTF8.GetBytes(xmlPayload); requestStream.Write(data, 0, data.Length); } // 获取并验证响应 using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.OK) { Console.WriteLine("TDL文件已成功加载到Tally"); } else { Console.WriteLine($"加载失败,状态码:{response.StatusCode}"); } } } catch (WebException ex) { Console.WriteLine($"请求异常:{ex.Message}"); } } // 调用示例 static void Main() { string tallyEndpoint = "http://localhost:9000"; // Tally服务地址 string targetTdlPath = @"D:\TallyCustom\MySyncTDL.tdl"; // TDL文件绝对路径 LoadTdl(tallyEndpoint, targetTdlPath); } }
关键注意事项
- 确保Tally处于运行状态,且端口配置与代码中一致
- TDL文件路径必须是Tally可访问的绝对路径(同机器用本地路径,跨机器用网络共享路径)
- 如需加载多个TDL,可在
<TDLFILE>节点下添加多个<FILE>标签 - 建议添加异常捕获逻辑,处理Tally未响应、权限不足等情况
内容的提问来源于stack exchange,提问作者Gokul Kannan
相关产品推荐
相关产品推荐

