我正在建立一个简单的网站,我公司的客户可以查看过去12个月的陈述,以及他们当前的余额。为此,我将使用QuickBooks Web连接器将QuickBooks公司文件中的必要数据导出到MySQL数据库(通过ConsoliBYTE的PHP DevKit)。
但是,我对QuickBooks本身并不十分精通,所以我的问题是:为了计算准确的客户余额,我需要在哪些字段中存储QBXML响应才能计算出准确的客户余额?
我不知道哪种类型的交易可以促成或影响余额(除了发票),所以我不知道除了InvoiceQuery和CustomerQuery之外哪些QBXML请求。
我也意识到凯斯帕尔默的this post,这表明发票余额本身并不一定可靠:
“发票余额可以更改而不会更改发票本身(因为余额是从其他记录计算的字段,而不是发票本身的字段)”
我不知道每次Web连接器运行时我是否最好更换数据库中的所有Invoice数据,或者自己从相关记录计算Invoice余额,在这种情况下我需要计算哪些数据发票余额?
@ consolibyte的回答似乎是获得客户余额的最简单方法,所以我已经接受了它,即使它对于我的具体用法并不够详细。
@Hpjchobbes的回答对于获取QuickBooks内置的平衡细节报告非常有用。
我还添加了自己的答案,因为我需要提供一个完整明细的交易清单。它似乎工作正常,但可能会出现失败的情况。
答案 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中包含父事务。