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

15

我可以查询销售收据对象:

    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对象中获取付款明细的TxnLineID(至少我没找到)。

我的目的是要找到特定的TxnLineID以标记它已清算。当我进行搜索时,我可以看到有一笔交易明细(如下所示Credit Card Batches:Visa/MC account)。如何查找该特定明细的TxnLineID?

qb transaction

以下是屏幕截图,显示通过单击清算列中的框,在UI上将交易标记为已清算。

enter image description here

3个回答

1
日记账和销售收据是QuickBooks中两种完全不同的对象类型。
因此,这个:
Unfortunately, if the transaction I'm querying for is part of a SalesReceipt,

与您发布的代码(完全关于日记帐条目)相结合,这完全没有意义。
如果您要查找销售收据,则需要查询“销售收据”。如果您要查找日记帐条目,则需要查询“日记帐条目”。您不能查询一个,并期望得到另一个返回。

我在我的问题底部添加了一些信息来解决您的担忧。我知道销售收据不是日记帐条目。但我不知道如何从销售收据中找到交易行的TxnLineID。 - Michael Pryor
如果你想要找到销售收据的TxnLineID,那么为什么在你的代码中查询日记账分录呢?为什么不更新你的代码,这样你就可以查询销售收据了呢? - Keith Palmer Jr.
更新代码片段以展示我尝试过的替代代码。仍然无法找到与销售收据关联的付款交易编号。 - Michael Pryor

1

谢谢您的回答,但不幸的是它与我的情况无关。 - Michael Pryor
1
祝你好运,希望你能找到答案并在这里发布它。 - Rusty Nail

1
据我所知,销售收据没有单独的付款行。对于发票,您在稍后的某个时间点收到带有行的付款,但是对于销售收据,付款已经完成,因此该信息作为销售收据本身的一部分捕获。您在截图中看到的付款行是从存储在销售收据上的信息生成的。这也解释了为什么销售收据只允许单一付款方式以及为什么不支持拆分付款 - 销售收据的全额被视为已收到,因此仅存储有关付款方式本身的信息。
请查看返回的ISalesReceiptRet中的PaymentMethodRefCheckNumberDepositToAccountRefCreditCardTxnInfo属性;我能找到的最接近的可链接文档是添加销售收据,但这应该足以列出可用的属性(他们的OSR工具更漂亮,但没有提供链接到特定结果集的方法)。
您还可以使用Reflector(或您喜欢的等效工具)检查Interop.QBFC5Lib.dll。对我来说,这通常比尝试查询官方文档更快。

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

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

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

如果原销售收据中使用的付款方式是信用卡,则无法更改客户、付款方式或总交易金额,包括任何会更改交易总金额的行项目更改,但可以通过QBMS通过qbmsXML请求和响应提供的信用卡交易数据来进行操作。请注意保留HTML标签。

更新:在我的测试中,似乎在清除销售收据时不需要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的任何交易,我都可以这样做。问题是找到销售收据付款的txnLineID。 - Michael Pryor
最后一张截图是指由ISalesReceiptRet.DepositToAccountRef引用的账户,对吗?ISalesReceiptRet.CreditCardTxnInfo.CreditCardTxnResultInfo.PaymentStatus属性是否与支票有任何关联? - Ashley Ross
是的,最后一张截图是由ISalesReceipt.DepositToAccountRef引用的帐户。在我的情况下,销售收据也是以编程方式输入的,因此CreditCardTxnInfo实际上为NULL。 - Michael Pryor
由于销售收据创建时没有信用卡付款,那么它是如何进入系统的?通过QBMS吗? - Ashley Ross
通过SDK和AppendSalesReceiptAddRq调用。DepositToAccountRef已设置。 - Michael Pryor
太好了!这很有希望是我第一次也是最后一次涉足QuickBooks。;) - Ashley Ross

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接