从QuickBooks数据(QBXML)计算客户余额

从QuickBooks数据(QBXML)计算客户余额,quickbooks,qbxml,Quickbooks,Qbxml,我正在建立一个简单的网站,让我公司的客户可以查看过去12个月的报表,从而查看他们当前的余额。为了实现这一点,我将使用QuickBooks Web连接器将必要的数据从QuickBooks公司文件导出到MySQL数据库(通过ConsoleByte的PHP DevKit) 但是,我对QuickBooks本身并不十分熟悉,所以我的问题是:为了计算准确的客户余额,我需要在数据库中存储哪些QBXML响应字段 我不知道哪些类型的事务会影响余额(发票除外),因此除了InvoiceQuery和CustomerQu

我正在建立一个简单的网站,让我公司的客户可以查看过去12个月的报表,从而查看他们当前的余额。为了实现这一点,我将使用QuickBooks Web连接器将必要的数据从QuickBooks公司文件导出到MySQL数据库(通过ConsoleByte的PHP DevKit)

但是,我对QuickBooks本身并不十分熟悉,所以我的问题是:为了计算准确的客户余额,我需要在数据库中存储哪些QBXML响应字段

我不知道哪些类型的事务会影响余额(发票除外),因此除了InvoiceQuery和CustomerQuery之外,我不知道要发出哪些QBXML请求

我还意识到Keith Palmer的观点,即发票余额本身并不一定可靠:

发票余额可以更改,而发票本身不会更改(因为余额是根据其他记录计算的字段,而不是发票本身上的字段)

我不知道是否最好在每次Web Connector运行时替换数据库中的所有发票数据,或者自己根据相关记录计算发票余额,在这种情况下,我需要什么数据来计算发票余额

答案 @consolibyte的答案似乎是获得客户余额的最简单方法,因此我接受了它,尽管它对于我的具体用途来说不够详细

@Hpjchobbes的回答可能有助于获取QuickBooks的内置余额详细报告


我还添加了我自己的答案,因为我需要提供一份完整的交易明细表。它似乎工作正常,但可能会出现失败的情况。

使用QuickBooks API,仅根据交易数据计算余额可能会很困难。你可能需要考虑很多东西:

  • 发票余额
  • 贷方凭证余额
  • 检查
  • 客户起始余额
  • 付款
  • 付款折扣
  • 可能还有一些我现在想不起来的东西

根据QuickBooks中的客户数量,您最好直接查询客户,然后使用随客户记录返回的
余额
节点

您可以使用一般详细信息报告,甚至可以对每个客户进行筛选,以获得构成其未结余额的交易。我没有使用SDK中的报告,但它们应该模仿QuickBooks中的报告。未结发票报告应显示构成客户余额的任何“未结”交易

IGeneralDetailReportQuery report = MsgRequest.AppendGeneralDetailReportQueryRq();
report.DisplayReport.SetValue(false);
report.GeneralDetailReportType.SetValue(ENGeneralDetailReportType.gdrtOpenInvoices);
report.ORReportPeriod.ReportDateMacro.SetValue(ENReportDateMacro.rdmAll);
report.ReportOpenBalanceAsOf.SetValue(ENReportOpenBalanceAsOf.robaoToday);

// Use this to filter for just a specific customer
report.ReportEntityFilter.ORReportEntityFilter.FullNameWithChildren.SetValue("CustomerName");
report.ReportEntityFilter.ORReportEntityFilter.EntityTypeFilter.SetValue(ENEntityTypeFilter.etfCustomer);

注意:这似乎适用于我的用例,但我不能自信地说这是一个包罗万象的解决方案

因为我需要向客户提供逐项报表,所以我使用TransactionQuery从QuickBooks导入所有事务

随后,对账户名称“应收账款”的交易进行过滤,似乎可以准确地列出对客户余额有贡献的所有交易,并且可以通过对“金额”列求和来计算余额,或者进一步查询同一交易表中的各个行项目。请参见下面的示例查询:

/* Calculate balance from transactions */
SELECT SUM(Amount)
FROM quickbooks_transaction
WHERE EntityRefListID = '$customer_listid'
  AND AccountRefFullName = 'Accounts Receivable';

/* Retrieve line items for a transaction */
SELECT *
FROM quickbooks_transaction
WHERE TxnID = '$transaction_id'
  AND TxnLineID != '';

我想如果你真的想,你甚至可以将行项目的金额相加来计算余额,但你必须确保不将父交易包括在总和中。

这可能有效。在任何给定的公司档案中,不会有超过400个客户。客户是否面临与您在发票中描述的问题相同的问题,即客户余额是否会发生变化,而客户是否会发生变化?如果只有400名客户,这无疑是一条路——至少就余额而言。只要继续,每X分钟查询所有400名客户,您就一切就绪了——他们不应该花超过一分钟左右的时间全部转到您的网站。问题是,我仍然需要找出是什么促成了余额,因为我需要显示一份交易结单;不仅仅是余额。我可以问一下你对我编辑的主要问题的看法吗?我真的不确定。一般来说,当我们构建这样的东西时,我们提取单个事务并缓存它们,然后显示来自实际客户的余额。啊,这是一个有趣的想法。查看文档,我还可以使用GeneralDetailReportQuery获取CustomerBanceDetail报告,甚至使用CustomDetailReportQuery构建自己的事务报告。