Как найти TxnLineID платежной линии из транзакции Quickbooks, если она является частью торгового чека?
Я могу запросить объект 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 есть список линий SalesReceipt в ORSalesReceiptLineRetList, но ни одна из этих строк не является платежной линией. Невозможно получить TxnLineID из объекта SalesReceipt для платежной линии (которую я могу найти).
То, что я пытаюсь сделать, это найти конкретный TxnLineID из SalesReceipt, чтобы я мог пометить его как очищенный. Когда я выполняю поиск, я вижу, что есть строка транзакции (та, которая приведена ниже в разделе "Кредитные карты: счет Visa/MC" ). Как найти TxnLineID для этой конкретной строки?
![qb transaction]()
Вот скриншот, показывающий транзакцию, отмеченную как очищенную, которую я выполнил через пользовательский интерфейс, щелкнув поле в столбце "Очистить".
![enter image description here]()
Ответы
Ответ 1
Насколько я понимаю, в платежной квитанции нет отдельной платежной линии. С помощью счета-фактуры вы получаете оплату с линиями в какой-то более поздний момент времени, но с платежной ведомостью платеж уже состоялся, чтобы информация была зафиксирована как часть самой продажи. Платежная линия, которую вы видите на скриншоте, затем генерируется из информации, хранящейся в торговом квитанции.
Это также объясняет, почему Sales Receipts допускают только один способ оплаты и почему сплит-платежи невозможны - полная сумма Sales Receipt считается полученной, поэтому сохраняется только информация о самом способе оплаты.
Посмотрите на свойства PaymentMethodRef
, CheckNumber
, DepositToAccountRef
и CreditCardTxnInfo
возвращаемого ISalesReceiptRet
; ближайшая связующая документация, которую я могу найти, заключается в добавлении Sales Receipt, но этого должно быть достаточно для перечисления доступных свойств (Их Инструмент OSR является более красивым, но не дает возможности ссылаться на определенный набор результатов).
Вам также может быть полезно изучить Interop.QBFC5Lib.dll
в Reflector (или ваш предпочтительный эквивалент). Для меня это часто было быстрее, чем пытаться проконсультироваться с официальной документацией.
Я не уверен, что вы имеете в виду, когда говорите, что хотите использовать TxnLineID, чтобы пометить линию платежа как очищенную. Если вы имеете в виду, что в Sales Receipt отображается открытый баланс, то кажется, что это известная проблема.
В качестве альтернативы, если вы хотите подтвердить статус транзакции кредитной карты, вы можете посмотреть свойства 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
Ответ 2
Из исследования, которое я вижу, это может быть ответ для вас:
https://idnforums.intuit.com/messageview.aspx?catid=7&threadid=12760&highlight_key=y&keyword1=TxnLineID
"Воскресил старый код, который вызывал SDK со старой версией (" US ", 1,1), в то время как я должен был использовать (" US ", 7,0).
или
https://idnforums.intuit.com/messageview.aspx?catid=7&threadid=10776
По крайней мере, они могут помочь вам в решении вашей проблемы.
Надеюсь, что это поможет.
Ответ 3
Записи журнала и квитанции о продажах - это два совершенно разных типа объектов в QuickBooks.
Итак, это:
Unfortunately, if the transaction I'm querying for is part of a SalesReceipt,
В сочетании с кодом, который вы опубликовали (что полностью связано с журнальными записями), не имеет смысла.
Если вы ищете Sales Receipts, вам нужно запросить Sales Sales. Если вы ищете записи в журнале, вам нужно запросить записи журнала. Вы не можете запросить его и ожидаете вернуть другого.