![](/img/trans.png)
[英]How to find txnLineID from a transaction in QuickBooks using QBFC/qbXML SDK?
[英]How do you find the TxnLineID of a payment line from a Quickbooks transaction if it is part of a Sales Receipt?
我可以查詢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完成。
從我所看到的研究中,這可能是你的答案:
“恢復了一些舊的代碼,它使用舊的版本引用(”US“,1,1)調用SDK,而我本應該使用(”US“,7,0)。”
要么
https://idnforums.intuit.com/messageview.aspx?catid=7&threadid=10776
至少他們可以幫助你進一步解決你的問題。
希望能幫助到你。
日記帳分錄和銷售收據是QuickBooks中兩種完全不同的對象類型 。
所以這:
Unfortunately, if the transaction I'm querying for is part of a SalesReceipt,
與您發布的代碼(完全與Journal Entries相關)一起完全沒有任何意義 。
如果您要查找銷售收據,則需要查詢銷售收據 。 如果您正在查找日記帳分錄,則需要查詢日記帳分錄 。 你不能查詢一個,並希望得到另一個。
據我了解,銷售收據沒有單獨的支付線。 對於發票,您會在稍后的某個時間點收到帶有行的付款,但是通過銷售收據,付款已經發生,因此信息將作為銷售收據本身的一部分被捕獲。 然后,您在屏幕截圖中看到的支付行將根據銷售收據上存儲的信息生成。
這也可以解釋為什么銷售收據僅允許單一付款方式以及無法進行拆分付款的原因 - 銷售收據的全部金額被視為已收到,因此僅存儲有關付款方式本身的信息。
查看返回的ISalesReceiptRet
的PaymentMethodRef
, CheckNumber
, DepositToAccountRef
和CreditCardTxnInfo
屬性; 我能找到的最接近的可鏈接文檔是添加銷售收據 ,但這應該足以列出可用的屬性(他們的OSR工具更漂亮,但無法鏈接到特定的結果集)。
您可能還會發現在Reflector中檢查Interop.QBFC5Lib.dll
(或您的首選等效項)會很有幫助。 對我來說,它通常比試圖查閱官方文檔更快。
當您說要使用TxnLineID將付款行標記為已清除時,我不確定您的意思。
如果您的意思是銷售收據顯示未結余額,那么這似乎是一個
已知問題 。
另外,如果您想確認信用卡交易的狀態,你可以看看ResultCode
和ResultMessage
的性能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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.