【问题标题】:Calculating customer balance from QuickBooks data (QBXML)从 QuickBooks 数据 (QBXML) 计算客户余额
【发布时间】:2013-09-20 10:55:08
【问题描述】:

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

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

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

我还注意到 Keith Palmer 的 this post,这表明发票余额本身并不一定可靠:

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

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

答案

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

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

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

【问题讨论】:

    标签: quickbooks qbxml


    【解决方案1】:

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

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

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

    【讨论】:

    • 这可能行得通。在任何给定的公司文件中都不会有超过 400 名客户。客户是否会遇到您为发票描述的相同问题,即客户余额是否会在客户不改变的情况下改变?
    • 只有 400 位客户,这绝对是可行的方法 - 至少就平衡而言。只需每隔 X 分钟查询一次所有 400 位客户,您就会准备就绪 - 他们不应该花费超过一分钟左右的时间来将所有客户转移到您的网站。
    • 问题是,我仍然需要弄清楚是什么对余额有贡献,因为我需要显示交易报表;不仅仅是余额。请问您对我对主要问题的编辑中的提议有何看法?
    • 我真的不确定。通常,当我们构建这样的东西时,我们会提取单个交易并缓存它们,然后显示来自实际客户的余额。
    【解决方案2】:

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

    【讨论】:

    • 啊,这是一个有趣的想法。查看文档,我还可以使用 GeneralDetailReportQuery 来获取 CustomerBalanceDetail 报告,甚至可以使用 CustomDetailReportQuery 构建我自己的交易报告。
    【解决方案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 中不包括父交易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多