15

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

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

在此处输入图像描述

4

3 回答 3

1

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

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

至少他们可能能够进一步帮助您解决问题。

希望能帮助到你。

于 2013-02-07T22:52:49.327 回答
1

日记账分录和销售收据是 QuickBooks 中两种完全不同的对象类型

所以这:

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

与您发布的代码(完全与日记条目有关)结合起来根本没有任何意义

如果您要查找销售收据,则需要查询销售收据。如果您正在寻找 Journal Entries,那么您需要查询Journal Entries。你不能查询一个,并期望得到另一个。

于 2013-02-11T12:31:59.477 回答
1

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

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

查看返回的PaymentMethodRefCheckNumber和属性;我能找到的最接近的可链接文档是添加销售收据,但这足以列出可用属性(他们的OSR 工具更漂亮,但无法链接到特定的一组结果)。DepositToAccountRefCreditCardTxnInfoISalesReceiptRet

您可能还会发现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
于 2013-02-19T18:53:24.687 回答