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

能否通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:54:38