Добавление данных настраиваемого поля в счета-фактуры Quickbooks через QBFC в VB.net

Я работаю над созданием счетов в Quickbooks через QBFC. У меня возникли проблемы с добавлением информации о настраиваемых полях в мой запрос InvoiceAdd. Я использую следующий код:

Dim CountryExt As IDataExtAdd = msgReq.AppendDataExtAddRq
CountryExt.DataExtName.SetValue("Country")
CountryExt.DataExtValue.SetValue("Spain")
CountryExt.OwnerID.SetValue(0)
CountryExt.ORListTxnWithMacro.TxnDataExtWithMacro.TxnDataExtType.SetValue(ENTxnDataExtType.tdetInvoice)                
CountryExt.ORListTxnWithMacro.TxnDataExtWithMacro.TxnID.SetValueUseMacro("TxnID:" & i)

Запрос на добавление отлично работает для настраиваемых полей, для которых не установлены значения по умолчанию, но вызывает ошибку «Индекс вне диапазона» при попытке перезаписать значение, установленное клиентом.

Например, если у клиента Quickbooks в пользовательском поле «Страна» установлено значение «Португалия», код выдаст ошибку счета за пределами допустимого диапазона. Однако, если у Клиента не было «Страны» по умолчанию, код установил бы поле «Страна» в счете-фактуре.

Нужно ли мне добавлять пользовательские данные через второй dataextmodrq после создания счета, или мне не хватает какой-то опции UnSet?


person Ampersand    schedule 19.01.2017    source источник


Ответы (2)


Догадаться. Вы должны использовать DataExtModRq после создания счета и выполнить второй раунд связи с Quickbooks. Похоже, Quickbooks не позволяет вам устанавливать настраиваемые поля в файле invoiceaddrq. Следующий код использует ответ на InoviceAddRequests для обновления поля страны на Испанию для всех созданных счетов-фактур.

For i = 0 To invoiceAddResp.ResponseList.Count - 1
    If invoiceAddResp.ResponseList.GetAt(i).StatusCode <> 0 Then
    Check for failed entry here.
    Else
                Dim ExtInvoice As IInvoiceRet = invoiceAddResp.ResponseList.GetAt(i).Detail
                sessMgr.BeginSession("", ENOpenMode.omDontCare)
                Dim ExtReq = sessMgr.CreateMsgSetRequest("US", 12, 0)
                ExtReq.Attributes.OnError = ENRqOnError.roeContinue

                Dim DataExt As IDataExtMod = ExtReq.AppendDataExtModRq()
                DataExt.DataExtName.SetValue("Country")
                DataExt.DataExtValue.SetValue("Spain")
                DataExt.OwnerID.SetValue(0)
                DataExt.ORListTxn.TxnDataExt.TxnDataExtType.SetValue(ENTxnDataExtType.tdetInvoice)
                DataExt.ORListTxn.TxnDataExt.TxnID.SetValue(ExtInvoice.TxnID.GetValue)

                sessMgr.DoRequests(ExtReq)
                sessMgr.EndSession()
            End If
        Next
person Ampersand    schedule 19.01.2017

Вы не разместили достаточно кода, чтобы действительно понять, что вы делаете, но я предполагаю, что вы делаете ОБНОВЛЕНИЕ существующего счета.

Если вы пытаетесь ОБНОВИТЬ существующий счет (и настраиваемые поля в нем), вам необходимо:

  1. Чтобы обновить счет, отправьте InvoiceModRq без данных настраиваемого поля.
  2. Отправьте отдельный запрос DataExtModRq для обновления любых значений настраиваемых полей.

Вы не можете обновлять настраиваемые поля непосредственно из файла InvoiceModRq.

Вы можете сослаться на OSR, который иллюстрирует поддерживаемые поля для обновления счетов.

person Keith Palmer Jr.    schedule 19.01.2017
comment
Привет Кит. Я пытаюсь установить настраиваемое поле через InvoiceAddRq, а не изменять существующий счет. - person Ampersand; 19.01.2017