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

Mic*_*yor 15 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

我要做的是从SalesReceipt中找到一个特定的TxnLineID,这样我就可以将其标记为已清除.当我进行搜索时,我可以看到有一个交易行(信用卡批次中的一个:Visa/MC帐户).如何找到该特定线路的TxnLineID?

qb交易

这是一个屏幕截图,显示标记为已清除的事务,我通过单击清除列中的框通过UI完成.

在此输入图像描述

Ash*_*oss 1

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

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

查看返回的PaymentMethodRefCheckNumberDepositToAccountRef和属性;我能找到的最接近的可链接文档是添加 Sales Receipt,但这应该足以列出可用属性(他们的OSR 工具更漂亮,但无法链接到特定结果集)。CreditCardTxnInfoISalesReceiptRet

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


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

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

请记住,修改信用卡付款的销售收据存在一些限制。来自程序员指南

如果原始 SalesReceipt 中使用的付款方式是信用卡,且信用卡交易数据由 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
Run Code Online (Sandbox Code Playgroud)