c# - 如果它是销售收据的一部分,您如何从 Quickbooks 交易中找到付款行的 TxnLineID?

标签 c# quickbooks intuit-partner-platform

我可以查询 SalesReceipt 对象:

    public bool GetSalesReceipt(string sRefNum, string sAccount, out ISalesReceiptRet ret)
    {
        ret = null;

        IMsgSetRequest msr = sm.CreateMsgSetRequest("US", 4, 0);
        msr.Attributes.OnError = ENRqOnError.roeStop;

        ISalesReceiptQuery q = msr.AppendSalesReceiptQueryRq();
        q.metaData.SetValue(ENmetaData.mdMetaDataAndResponseData);
        q.ORTxnQuery.TxnFilter.ORRefNumberFilter.RefNumberFilter.RefNumber.SetValue(sRefNum);
        q.ORTxnQuery.TxnFilter.ORRefNumberFilter.RefNumberFilter.MatchCriterion.SetValue(ENMatchCriterion.mcContains);
        q.ORTxnQuery.TxnFilter.AccountFilter.ORAccountFilter.FullNameList.Add(sAccount);
        q.IncludeLineItems.SetValue(true);

        IMsgSetResponse resp = sm.DoRequests(msr);
        if (resp.ResponseList.Count == 0)
            return false;

        IResponseList rl = resp.ResponseList;
        if (rl.Count == 1)
        {
            IResponse r = rl.GetAt(0);
            if (r.Detail == null)
                return false;

            if (r.StatusCode != 0)
                return false;

            if (r.Type.GetValue() == (short)ENResponseType.rtSalesReceiptQueryRs)
            {
                ISalesReceiptRetList crl = (ISalesReceiptRetList)r.Detail;
                if (crl.Count == 1)
                    ret = crl.GetAt(0);
            }
        }

        if (ret == null)
            return false;

        return true;
    }

SalesReceipt 在 ORSalesReceiptLineRetList 中有一个 SalesReceipt 行列表,但这些行都不是付款行。无法从付款行的 SalesReceipt 对象中获取 TxnLineID(我可以找到)。

我正在尝试做的是从 SalesReceipt 中找到一个特定的 TxnLineID,以便我可以将其标记为已清除。当我进行搜索时,我可以看到有一个交易行(信用卡批处理中的下面一个:Visa/MC 帐户)。如何找到该特定线路的 TxnLineID?

qb transaction

这是一个屏幕截图,显示了标记为已清除的交易,我通过单击已清除列中的框通过 UI 完成了该交易。

enter image description here

最佳答案

据我了解,销售收据没有单独的付款行。使用发票,您会在稍后的某个时间点收到带有行的付款,但使用销售收据,付款已经发生,因此信息被捕获为销售收据本身的一部分。您在屏幕截图中看到的付款行是根据销售收据上存储的信息生成的。

这也可以解释为什么销售收据只允许单一付款方式以及为什么不能分开付款 - 销售收据的全额被视为已收到,因此只存储有关付款方式本身的信息。

看看 PaymentMethodRef , CheckNumber , DepositToAccountRefCreditCardTxnInfo返回的属性 ISalesReceiptRet ;我能找到的最接近的可链接文档是 adding a Sales Receipt , 但这应该足以列出可用属性(他们的 OSR tool 更漂亮,但无法提供链接到特定结果集的方法)。

您可能还会发现检查 Interop.QBFC5Lib.dll 很有帮助在 Reflector(或您喜欢的等效项)中。对我来说,这通常比尝试查阅官方文档更快。


当您说要使用 TxnLineID 将付款行标记为已清除时,我不确定您的意思。如果您的意思是销售收据显示未结余额,那么这似乎是一个 known issue .

或者,如果您想确认信用卡交易的状态,您可以查看 ResultCodeResultMessage ISalesReceiptRet.CreditCardTxnInfo.CreditCardTxnResultInfo 上的属性.

请记住,修改包含信用卡付款的销售收据有一些限制。来自Programmer's Guide :

If the payment method used in the original SalesReceipt is a credit card, with the credit card transaction data provided by QBMS via the qbmsXML requests and responses, you cannot change the customer, payment method, or the total transaction amount, including any line item changes that would change the total amount of the transaction.


更新:在我的测试中,您在清算销售收据时似乎不需要 TxnLineID。从您的代码继续,一旦您填充了 ret ,以下应该做你想做的:

msr.ClearRequests();

IClearedStatusMod csm = msr.AppendClearedStatusModRq();
csm.TxnID.SetValue(ret.TxnID.GetValue());
// Leave TxnLineID null
csm.ClearedStatus.SetValue(ENClearedStatus.csCleared);

resp = sm.DoRequests(msr);
// Confirm status here

关于c# - 如果它是销售收据的一部分,您如何从 Quickbooks 交易中找到付款行的 TxnLineID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14649072/

相关文章:

c# - 显示桌面/最小化所有/所有窗口最小化时如何通知我的应用程序?

C# - 真的需要 "volatile"作为关键字吗?

c# - Entity Framework CreateObjectset 附加方法不更新

c# - 快速图书与 C# Windows 应用程序集成

intuit-partner-platform - 发票缺少 "TotalAmt"字段

c# - 元数据类与 asp.net MVC 中的 ViewModel 相同吗?

xml - 如何在 InvoiceQueryRq 中使用过滤器选项

ssl - QBWC1048 : QuickBooks Web Connector could not verify the web application server certificate. QBWC1051:未添加新应用程序

ssl - Quickbooks 集成 SSL 本地发行者问题