如果我在 SQL Server 数据库暂存表中有 5 个凭证,并且我使用 tally XML API 导入了所有 5 个凭证。
如何仅使用凭证编号验证和交叉检查计数和 SQL 之间的凭证?
我是否必须从 tally 中读取整个凭证摘要,然后从 XML 数据中提取凭证编号?提取凭证编号后,我可以将其与暂存表进行比较。
我怎样才能只从理货报告中导出凭证号或一个特定字段?
如果我在 SQL Server 数据库暂存表中有 5 个凭证,并且我使用 tally XML API 导入了所有 5 个凭证。
如何仅使用凭证编号验证和交叉检查计数和 SQL 之间的凭证?
我是否必须从 tally 中读取整个凭证摘要,然后从 XML 数据中提取凭证编号?提取凭证编号后,我可以将其与暂存表进行比较。
我怎样才能只从理货报告中导出凭证号或一个特定字段?
导入 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>
请记住更改SVCURRENTCOMPANY和VCHNO Xml 标签中的公司名称和凭证编号。
您可能会得到一个复杂的 XML 响应。您需要做的就是在 Collection Node - Envelope/Body/Data/Collection/Voucher 中查找名为 Voucher 的 XML 节点。如果此 VoucherNode 存在 = 您的凭证存在于计数中。在这种情况下,您不需要导出任何数据或凭证号。
当您在 Tally 中使用 XML 创建凭证时,您将在成功创建时收到 XML 响应。该响应包含一个标签,其中包括您提供的凭证号和 LASTVCHID。这就像计数中的主 ID。然后只需请求该主 ID 并检查响应就更容易了。如果它没有找到该主 ID,它将给出一个错误(最重要的是,该错误只是一个单行 XML 响应,因此不需要解析)。
查看此 stackoverflow 链接以获取更多详细信息 -如何根据凭证号过滤计数 xml 响应?