6

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

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

我不知道哪些类型的交易会促成或影响余额(发票除外),所以我不知道除了 InvoiceQuery 和 CustomerQuery 之外还需要提出哪些 QBXML 请求。

我也意识到 Keith Palmer 的这篇文章表明发票余额本身并不一定可靠:

“发票余额可以在发票本身不改变的情况下改变(因为余额是根据其他记录计算的字段,而不是发票本身的字段)”

我不知道是否最好在每次 Web 连接器运行时替换数据库中的所有 Invoice 数据,或者自己从相关记录中计算 Invoice 余额,在这种情况下,我需要哪些数据来计算 Invoice 余额?

答案

@consolibyte 的答案似乎是获得客户余额的最简单方法,所以我接受了它,即使它对于我的特定用途来说还不够冗长。

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

我还添加了自己的答案,因为我需要提供一份完整的交易清单。它似乎工作正常,但在某些情况下它可能会失败。

4

3 回答 3

4

使用 QuickBooks API 可能很难仅根据交易数据计算余额。您可能需要考虑很多事情:

  • 发票余额
  • 贷项通知单余额
  • 支票
  • 客户起始余额
  • 付款
  • 付款折扣
  • 可能还有其他一些我现在想不起来的东西

根据您在 QuickBooks 中拥有的客户数量,您最好直接查询客户,然后使用Balance与客户记录一起返回的节点来代替。

于 2013-09-20T12:21:23.143 回答
4

您也许可以使用一般详细信息报告,甚至可以过滤每个客户以获取构成其未结余额的交易。我没有使用 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);
于 2013-09-24T18:07:19.053 回答
3

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

由于我需要向客户提供分项报表,因此我使用 TransactionQuery 从 QuickBooks 导入所有交易。

随后过滤帐户名称“Accounts Receivable”的交易似乎准确地列出了对客户余额有贡献的所有交易,并且可用于通过对“Amount”列求和来计算余额或进一步查询相同的交易表单个订单项。请参阅下面的示例查询:

/* 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 != '';

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

于 2013-09-26T11:17:03.097 回答