Как найти 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

Вот снимок экрана, показывающий транзакцию, помеченную как очищенную, которую я выполнил через пользовательский интерфейс, щелкнув поле в столбце «Очищено».

введите здесь описание изображения


person Michael Pryor    schedule 01.02.2013    source источник


Ответы (3)


Насколько я понимаю, в товарном чеке нет отдельной платежной строки. Со счетом-фактурой вы получаете платеж со строками в какой-то более поздний момент времени, но с квитанцией о продаже платеж уже произошел, поэтому информация фиксируется как часть самой квитанции о продаже. Строка платежа, которую вы видите на снимке экрана, затем создается на основе информации, хранящейся в квитанции о продаже.

Это также объясняет, почему квитанции о продажах допускают только один способ оплаты и почему разделенные платежи невозможны — вся сумма квитанции о продаже считается полученной, поэтому сохраняется только информация о самом способе оплаты.

Взгляните на свойства PaymentMethodRef, CheckNumber, DepositToAccountRef и CreditCardTxnInfo возвращенного ISalesReceiptRet; самая близкая документация, на которую можно ссылаться, я нашел для добавив товарный чек, но этого должно быть достаточно для перечисления доступных свойств (их инструмент OSR красивее, но не дает возможности сослаться на конкретный набор результатов).

Вам также может быть полезно изучить Interop.QBFC5Lib.dll в Reflector (или предпочитаемом вами эквиваленте). Для меня это часто было быстрее, чем пытаться обратиться к официальной документации.


Я не совсем понимаю, что вы имеете в виду, когда говорите, что хотите использовать 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
person Ashley Ross    schedule 19.02.2013
comment
Я загрузил скриншот в конце своего вопроса, показывающий транзакцию, о которой я говорю, помеченную как очищенную через пользовательский интерфейс. Я пытаюсь сделать это через SDK и могу для любого txn, для которого у меня есть txnLineID. Проблема заключается в том, чтобы найти это для оплаты SalesReceipt. - person Michael Pryor; 21.02.2013
comment
Последний снимок экрана относится к учетной записи, на которую ссылается ISalesReceiptRet.DepositToAccountRef, верно? Имеет ли свойство ISalesReceiptRet.CreditCardTxnInfo.CreditCardTxnResultInfo.PaymentStatus какую-либо связь с проверкой? - person Ashley Ross; 21.02.2013
comment
Да, последний снимок экрана — это учетная запись, на которую ссылается ISalesReceipt.DepositToAccountRef. В моем случае квитанция о продаже также была введена программно, поэтому CreditCardTxnInfo на самом деле имеет значение NULL. - person Michael Pryor; 21.02.2013
comment
Поскольку оплата кредитной картой отсутствует на момент создания квитанции о продаже, как она вводится в систему? Через QBMS? - person Ashley Ross; 21.02.2013
comment
Через SDK и вызов AppendSalesReceiptAddRq. Депозиттоаккаунтреф был установлен. - person Michael Pryor; 21.02.2013
comment
Большой! Надеюсь, это мой первый и последний набег на QuickBooks. ;) - person Ashley Ross; 23.02.2013

Из исследования, которое я вижу, это может быть ответом для вас:

https://idnforums.intuit.com/messageview.aspx?catid=7&threadid=12760&highlight_key=y&keyword1=TxnLineID

«Воскресил некоторый старый код, который вызывал SDK со ссылкой на более старую версию («US», 1,1), в то время как я должен был использовать («US», 7,0)».

or

https://idnforums.intuit.com/messageview.aspx?catid=7&threadid=10776

По крайней мере, они могут помочь вам в решении вашей проблемы.

Надеюсь, поможет.

person Rusty Nail    schedule 07.02.2013
comment
Спасибо за ответ, но, к сожалению, он не имеет отношения к моей ситуации. - person Michael Pryor; 09.02.2013
comment
Удачи с этим, надеюсь, вы найдете ответ и опубликуете его здесь. - person Rusty Nail; 10.02.2013

Записи журнала и квитанции о продажах — это два совершенно разных типа объектов в QuickBooks.

Итак, это:

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

В сочетании с опубликованным вами кодом (который полностью относится к записям журнала) не имеет вообще никакого смысла.

Если вы ищете квитанции о продажах, вам нужно запросить квитанции о продажах. Если вы ищете записи журнала, вам нужно запросить записи журнала. Вы не можете запросить одно и ожидать, что получите другое.

person Keith Palmer Jr.    schedule 11.02.2013
comment
Я добавил некоторую информацию в конец моего вопроса, чтобы решить ваши проблемы. Я понимаю, что товарный чек — это не журнальная запись. Я просто понятия не имею, как найти TxnLineID для строки транзакции из SalesReceipt. - person Michael Pryor; 12.02.2013
comment
Если вы пытаетесь найти TxnLineID для товарного чека, то почему тогда вы запрашиваете записи журнала в своем коде...? Почему бы вам не обновить свой код, чтобы запрашивать товарный чек? - person Keith Palmer Jr.; 12.02.2013
comment
обновлен фрагмент кода, чтобы показать альтернативный код, который я пробовал. По-прежнему не удается найти txnlineid платежа, связанного с квитанцией о продаже. - person Michael Pryor; 12.02.2013