【问题标题】:How do you find the TxnLineID of a payment line from a Quickbooks transaction if it is part of a Sales Receipt?如果它是销售收据的一部分,如何从 Quickbooks 交易中找到付款行的 TxnLineID?
【发布时间】:2013-02-01 15:00:48
【问题描述】:

我可以查询 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?

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

【问题讨论】:

    标签: c# quickbooks intuit-partner-platform


    【解决方案1】:

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

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

    看看返回的ISalesReceiptRetPaymentMethodRefCheckNumberDepositToAccountRefCreditCardTxnInfo属性;我能找到的最接近的可链接文档是adding a Sales Receipt,但这足以列出可用属性(它们的OSR tool 更漂亮,但无法链接到特定的一组结果)。

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


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

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

    请注意,修改使用信用卡付款的销售收据存在一些限制。来自Programmer's Guide

    如果原始销售收据中使用的付款方式是信用卡 卡,以及 QBMS 通过 qbmsXML 请求和响应,您不能更改客户, 付款方式,或总交易金额,包括任何行 项目的变化会改变交易的总金额。


    更新:在我的测试中,您在清除销售收据时似乎不需要 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
    

    【讨论】:

    • 我在问题的末尾上传了一个屏幕截图,显示了我所说的通过 UI “标记为已清除”的交易。我正在尝试通过 SDK 执行此操作,并且我可以为我拥有 txnLineID 的任何 txn 执行此操作。问题是发现支付销售收据。
    • 最后一张截图是ISalesReceiptRet.DepositToAccountRef引用的帐户,对吗? ISalesReceiptRet.CreditCardTxnInfo.CreditCardTxnResultInfo.PaymentStatus 属性是否与支票有任何关联?
    • 是的,最后一张截图是ISalesReceipt.DepositToAccountRef引用的账户。在我的例子中,salesreceipt 也是以编程方式输入的,所以 CreditCardTxnInfo 实际上是 NULL。
    • 由于在创建销售收据时信用卡付款不存在,如何将其引入系统?通过 QBMS?
    • 通过 SDK 和 AppendSalesReceiptAddRq 调用。 DepositToAccountRef 已设置。
    【解决方案2】:

    根据我看到的研究,这可能是你的答案:

    https://idnforums.intuit.com/messageview.aspx?catid=7&threadid=12760&highlight_key=y&keyword1=TxnLineID

    “使用旧版本引用 ("US",1,1) 恢复了一些调用 SDK 的旧代码,而我应该一直使用 ("US",7,0)。"

    https://idnforums.intuit.com/messageview.aspx?catid=7&threadid=10776

    至少他们可以帮助你进一步解决你的问题。

    希望对你有帮助。

    【讨论】:

    • 感谢您的回答,但不幸的是它与我的情况无关。
    • 祝你好运,希望你能找到答案并在这里发布。
    【解决方案3】:

    Journal Entries 和 Sales Receipts 是 QuickBooks 中的两种完全不同的对象类型

    所以这个:

    Unfortunately, if the transaction I'm querying for is part of a SalesReceipt,
    

    结合您发布的代码(完全与日记条目有关),毫无意义

    如果您要查找销售收据,则需要查询销售收据。如果您正在寻找日记条目,那么您需要查询日记条目。你不能查询一个,然后期望得到另一个。

    【讨论】:

    • 我在问题的底部添加了一些信息来解决您的问题。我知道销售收据不是日记帐。我只是不知道如何从销售收据中找到交易行的 TxnLineID。
    • 如果您尝试查找销售收据的 TxnLineID,那么为什么要在代码中查询日记帐分录...?为什么不更新代码以便查询销售收据?
    • 更新了代码 sn-p 以显示我尝试过的替代代码。仍然找不到与销售收据关联的付款的 txnlineid。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多