0

如果我在 SQL Server 数据库暂存表中有 5 个凭证,并且我使用 tally XML API 导入了所有 5 个凭证。

如何仅使用凭证编号验证和交叉检查计数和 SQL 之间的凭证?

我是否必须从 tally 中读取整个凭证摘要,然后从 XML 数据中提取凭证编号?提取凭证编号后,我可以将其与暂存表进行比较。

我怎样才能只从理货报告中导出凭证号或一个特定字段?

4

2 回答 2

1

导入 Tally 后您知道凭证号吗?根据对此的答案,我将更新我的答案。

案例 1:如果您知道凭证号,您可以使用 Tally XML 请求该特定凭证号,如果您得到肯定的响应,则该凭证存在于计数中。无需阅读凭证摘要。您只需要在 XML 响应中查找特定元素标记 - 如果该元素存在 = 凭证存在。

案例 2:但我假设您不知道在导入期间创建的凭证号。在这种情况下。这会有点棘手。让我知道,我会用我拥有的任何解决方案进行更新。

- 更新 -

在讨论(见评论)之后,我将根据案例 1 更新答案。 XML 请求结构 -

<ENVELOPE>
  <HEADER>
    <VERSION>1</VERSION>
    <TALLYREQUEST>EXPORT</TALLYREQUEST>
    <TYPE>COLLECTION</TYPE>
    <ID>FindParticularVoucher</ID>
  </HEADER>
  <BODY>
    <DESC>
      <STATICVARIABLES>
        <SVEXPORTFORMAT>$$SysName:XML</SVEXPORTFORMAT>
        <SVCURRENTCOMPANY>FOO COMPANY</SVCURRENTCOMPANY>
        <VCHNO>ABC1234</VCHNO>
      </STATICVARIABLES>
      <TDL>
        <TDLMESSAGE>
          <COLLECTION NAME="FindParticularVoucher" ISINITIALIZE="YES">
            <TYPE>Voucher</TYPE>
            <FILTER>GetInvoiceVoucher</FILTER>
          </COLLECTION>
          <VARIABLE NAME="VCHNO">
            <TYPE>String</TYPE>
          </VARIABLE>
          <SYSTEM TYPE="FORMULAE" NAME="GetInvoiceVoucher">$VoucherNumber = $$String:##VCHNO</SYSTEM>
        </TDLMESSAGE>
      </TDL>
    </DESC>
  </BODY>
</ENVELOPE>

请记住更改SVCURRENTCOMPANYVCHNO Xml 标签中的公司名称和凭证编号。

您可能会得到一个复杂的 XML 响应。您需要做的就是在 Collection Node - Envelope/Body/Data/Collection/Voucher 中查找名为 Voucher 的 XML 节点。如果此 VoucherNode 存在 = 您的凭证存在于计数中。在这种情况下,您不需要导出任何数据或凭证号。

于 2019-06-04T11:00:46.270 回答
0

当您在 Tally 中使用 XML 创建凭证时,您将在成功创建时收到 XML 响应。该响应包含一个标签,其中包括您提供的凭证号和 LASTVCHID。这就像计数中的主 ID。然后只需请求该主 ID 并检查响应就更容易了。如果它没有找到该主 ID,它将给出一个错误(最重要的是,该错误只是一个单行 XML 响应,因此不需要解析)。

查看此 stackoverflow 链接以获取更多详细信息 -如何根据凭证号过滤计数 xml 响应?

于 2019-11-06T14:12:47.700 回答