Quickbooks QBFC ПокупкаЗаказДобавить

Я работал над проектом quickbooks и добился успеха во многих аспектах, пока не уперся в стену при попытке добавить заказ на покупку.

как указано в заголовке, я использую QBFC - кто-нибудь успешно добился этого и может указать мне правильное направление?

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

Он работает нормально, но в настоящее время ничего не добавляет к поставщику Quickbooks?

заранее спасибо

` Общедоступная подписка writePO_ToQB()

    Dim sessManager As QBSessionManager
    Dim msgSetRs As IMsgSetResponse

    sessManager = New QBSessionManagerClass()
    Dim msgSetRq As IMsgSetRequest = sessManager.CreateMsgSetRequest("US", 13, 0)
    msgSetRq.Attributes.OnError = ENRqOnError.roeContinue

    MessageBox.Show("calling write command")
    writeActualQBMSG(msgSetRq)

    'step3: begin QB session and send the request
    sessManager.OpenConnection("App", "DataBridge JBOOKS")
    sessManager.BeginSession("", ENOpenMode.omDontCare)
    msgSetRs = sessManager.DoRequests(msgSetRq)



End Sub

Public Sub writeActualQBMSG(requestMsgSet As IMsgSetRequest)

    '   Dim requestMsgSet As IMsgSetRequest
    Dim PurchaseOrderAddRq As IPurchaseOrderAdd
    PurchaseOrderAddRq = requestMsgSet.AppendPurchaseOrderAddRq()

    'add all the elements of a PO to the request - need to determine what is required!!

    '  PurchaseOrderAddRq.VendorRef.FullName.SetValue("Test Vendor")
    PurchaseOrderAddRq.VendorRef.ListID.SetValue("80000094-1512152428")






    '------------------- CODE FROM QBS --------
    Dim ORInventorySiteORShipToEntityElementType162 As String
    ORInventorySiteORShipToEntityElementType162 = "InventorySiteRef"
    If (ORInventorySiteORShipToEntityElementType162 = "InventorySiteRef") Then
        'Set field value for ListID
        PurchaseOrderAddRq.ORInventorySiteORShipToEntity.InventorySiteRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        PurchaseOrderAddRq.ORInventorySiteORShipToEntity.InventorySiteRef.FullName.SetValue("ab")
    End If
    If (ORInventorySiteORShipToEntityElementType162 = "ShipToEntityRef") Then
        'Set field value for ListID
        PurchaseOrderAddRq.ORInventorySiteORShipToEntity.ShipToEntityRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        PurchaseOrderAddRq.ORInventorySiteORShipToEntity.ShipToEntityRef.FullName.SetValue("ab")
    End If
    ' ----------------- END OF CODE FROM QBS --------------------------------------------

    '------------ MOR QBS CODE ------------

    Dim ORPurchaseOrderLineAddListElement324 As IORPurchaseOrderLineAdd
    ORPurchaseOrderLineAddListElement324 = PurchaseOrderAddRq.ORPurchaseOrderLineAddList.Append()
    Dim ORPurchaseOrderLineAddListElementType325 As String
    ORPurchaseOrderLineAddListElementType325 = "PurchaseOrderLineAdd"
    If (ORPurchaseOrderLineAddListElementType325 = "PurchaseOrderLineAdd") Then
        'Set field value for ListID
        '  ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.ItemRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.ItemRef.FullName.SetValue("granite")
        'Set field value for ManufacturerPartNumber
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.ManufacturerPartNumber.SetValue("123456789")
        'Set field value for Desc
        '   ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.Desc.SetValue("ab")
        'Set field value for Quantity
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.Quantity.SetValue(2)

        Dim DataExt326 As IDataExt
        DataExt326 = ORPurchaseOrderLineAddListElement324.PurchaseOrderLineAdd.DataExtList.Append()
        'Set field value for OwnerID
        ' DataExt326.OwnerID.SetValue(System.Guid.NewGuid().ToString())
        DataExt326.OwnerID.SetValue(0)
        'Set field value for DataExtName
        DataExt326.DataExtName.SetValue("ab")
        'Set field value for DataExtValue
        DataExt326.DataExtValue.SetValue("ab")
    End If
    If (ORPurchaseOrderLineAddListElementType325 = "PurchaseOrderLineGroupAdd") Then
        'Set field value for ListID
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.ItemGroupRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.ItemGroupRef.FullName.SetValue("ab")
        'Set field value for Quantity
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.Quantity.SetValue(2)
        'Set field value for UnitOfMeasure
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.UnitOfMeasure.SetValue("ab")
        'Set field value for ListID
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.InventorySiteLocationRef.ListID.SetValue("200000-1011023419")
        'Set field value for FullName
        ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.InventorySiteLocationRef.FullName.SetValue("ab")
        Dim DataExt327 As IDataExt
        DataExt327 = ORPurchaseOrderLineAddListElement324.PurchaseOrderLineGroupAdd.DataExtList.Append()
        'Set field value for OwnerID
        DataExt327.OwnerID.SetValue(System.Guid.NewGuid().ToString())
        'Set field value for DataExtName
        DataExt327.DataExtName.SetValue("ab")
        'Set field value for DataExtValue
        DataExt327.DataExtValue.SetValue("ab")
    End If

    ' ----- END OF MORE QBS CODE ----------

End Sub`

person user2266878    schedule 11.02.2018    source источник


Ответы (1)


Проблема здесь в том, что вы не включили код обработки ошибок и ответов. Вам нужно иметь что-то эквивалентное WalkPurchaseOrderAddRs(responseMsgSet). В частности, внутри этой функции проверяется наличие ошибок. У меня есть модифицированная версия их образца.

For j=0 To responseList.Count - 1
   Dim response As IResponse
   response = responseList.GetAt(i)
   'check the status code of the response
   If response.StatusCode = 0 Then
      '  response is ok, handle results as usual... 

   ElseIf response.StatusCode = 1 Then 
      '  Used when search results return nothing...

   Else '  > 1  Is an error      
      '  Is an error or warning condition...  
      '   Capture code and message from QuickBooks

      Dim code As String = response.StatusCode
      Dim severity As String = response.StatusSeverity '  ERROR or WARNING
      Dim message As String = response.StatusMessage

   End If
Next j

В качестве примечания: пример кода OSR предназначен только для иллюстрации. Этот и подобный код бессмысленны.

Dim ORInventorySiteORShipToEntityElementType162 As String
ORInventorySiteORShipToEntityElementType162 = "InventorySiteRef"
If (ORInventorySiteORShipToEntityElementType162 = "InventorySiteRef") Then

Еще один намек. Когда вы устанавливаете значения из таких списков, как Vendor или ItemRef, вы можете выбрать ListID или FullName. Если вы используете оба, как показано в примере, то ListID используется QuickBooks. Я рекомендую использовать FullName и отказаться от ListID. Причина в том, что QuickBooks будет повторять все, что вы используете, в сообщении об ошибке. Поэтому, если ваш поставщик не существует, вы увидите что-то вроде «отсутствует элемент 80000094-1512152428» или «отсутствует элемент TheFullName», что загадочно, но читабельно.

Хорошо, еще один... Образец кода, который появляется для установки данных настраиваемого поля DataExt..., не будет работать. Вместо этого вам нужно использовать запрос DataExtAdd.

person GMan80013    schedule 12.02.2018
comment
спасибо - Да, я знаю, что пример кода в большинстве случаев практически бесполезен (я уже работал с успешным добавлением/изменением/запросом поставщиков, клиентов (на нескольких уровнях, поскольку я интегрирую клиента и задание из другой системы) и т. д.) эта часть PO по какой-то причине просто бросает меня на поиски!Единственное, что все еще вешает меня (надеюсь), это последнее, что вы упомянули ... часть DataEXT, я, кажется, не могу понять, что вы имели в виду там, и не могу заставить это работать, я продолжаю получать сообщение об ошибке, которое невозможно найти - - person user2266878; 12.02.2018
comment
забыл предыдущий комментарий - разобрался - Большое спасибо! Раньше у меня были поставщики и многоуровневые клиенты, работающие над предыдущей работой по целочислению, поэтому я знал, что пример кода довольно бесполезен, а что нет - PO по какой-то причине просто заставляли меня зацикливаться! - отличный намек на ценности, я понял это раньше, но определенно потратил много времени на этот вопрос в какой-то момент! Я действительно считаю, что хотя большая часть функций изменения вам нужна, чтобы фактически использовать ListID, по крайней мере, это требовалось от меня для чего-то предыдущего. - person user2266878; 12.02.2018
comment
Пожалуйста, реализуйте обработку ошибок. Это стоит ваших усилий. QuickBooks скажет вам, что не так. Вам не нужно терять время. Раз уж ты понял, что было не так? - person GMan80013; 12.02.2018
comment
Я добавил проверку ошибок - как к этой проблеме, так и к остальной части моего кода для QB на случай, если у меня возникнут проблемы! спасибо за подсказку - проблема заключалась просто в том, что в некоторых обязательных полях не было действительных данных, поступающих в Qbs - person user2266878; 13.02.2018