Проверка проблем IPP QuickBooks Intuit

Я пытаюсь выдать чек поставщику через API Intuit.IPP (Interop.QBFC12), используя следующий код:

    IMsgSetRequest messageSet = session.CreateMsgSetRequest("US", 7, 0);
    ICheckAdd cheque = messageSet.AppendCheckAddRq();
    cheque.AccountRef.ListID.SetValue(vendor.ListID.GetValue());
    cheque.AccountRef.FullName.SetValue("myAccountName");
    cheque.TxnDate.SetValue(DateTime.Today);

    IMsgSetResponse responseSet = session.DoRequests(messageSet);
    IResponse response = responseSet.ResponseList.GetAt(0);
    responseType = (ENResponseType)response.Type.GetValue();
    if (responseType == ENResponseType.rtCheckAddRq)
        returnMessage = response.StatusMessage;

Полученный ответ response.StatusMessage = «Объект 80000005-1374598713, указанный в запросе, не может быть найден». Указанный идентификатор объекта — это ListID, который я вытащил для поставщика.

Я кодирую практически вслепую, так как не нахожу документацию IPP очень полезной или актуальной для версии 12.

Что мне не хватает?


person sreimer    schedule 23.07.2013    source источник


Ответы (1)


Этот:

cheque.AccountRef.ListID.SetValue(vendor.ListID.GetValue());
cheque.AccountRef.FullName.SetValue("myAccountName");

Это то, что вызывает у вас проблемы.

Узел AccountRef предназначен для указания Учетной записи, а не Поставщика. Учетная запись — это что-то из Плана счетов QuickBooks (объект «Учетная запись»). Поставщик — это что-то из списка поставщиков (объект «Продавец»), и они не являются взаимозаменяемыми объектами.

Поскольку вы уже устанавливаете AccountRef/FullName:

cheque.AccountRef.FullName.SetValue("myAccountName");

Вам не нужно задавать AccountRef/ListID.

Вы всегда должны устанавливать ListID или FullName — нет причин устанавливать оба (это просто альтернативные способы ссылки на один и тот же объект — оба являются своего рода «внешними ключами» для QuickBooks).

Что вы, вероятно, хотели сделать, так это установить AccountRef, как вы хотели, но также установить PayeeEntityRef. Например:

cheque.PayeeEntityRef.ListID.SetValue(vendor.ListID.GetValue());

Также по этому поводу:

Я кодирую почти вслепую, так как не нахожу документацию IPP очень полезной или актуальной для версии 12.

IPP — это совершенно другой API, чем тот, который вы используете. Документы IPP не будут вам полезны, потому что они далеки от API, который вы используете.

Что вы должны использовать для справки, так это QuickBooks OSR:

А также загружаемый .EXE-файл QuickBooks SDK, в котором есть куча соответствующей документации в формате PDF.

person Keith Palmer Jr.    schedule 24.07.2013