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

时间:2013-09-20 10:55:09

标签: quickbooks qbxml

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

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

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

我也意识到凯斯帕尔默的this post,这表明发票余额本身并不一定可靠:

  

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

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

答案

@ consolibyte的回答似乎是获得客户余额的最简单方法,所以我已经接受了它,即使它对于我的具体用法并不够详细。

@Hpjchobbes的回答对于获取QuickBooks内置的平衡细节报告非常有用。

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

3 个答案:

答案 0 :(得分:4)

使用QuickBooks API计算基于交易数据的余额可能很困难。你可能需要考虑很多东西:

  • 发票余额
  • 贷项通知单余额
  • 检查
  • 客户起始余额
  • 付款
  • 付款折扣
  • 可能是其他一些我现在无法想到的东西

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

答案 1 :(得分: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);

答案 2 :(得分:3)

注意:这似乎适用于我的用例,但我无法自信地说这是一个全能的解决方案。

由于我需要向客户提供逐项陈述,我使用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 != '';

我认为如果你真的想要,你甚至可以计算行数的余额来计算余额,但是你必须确保不在SUM中包含父事务。