2014-02-12 3 views
0

Много лет назад я написал пользовательскую интеграцию между системой на базе SQL Server и QuickBooks, которая автоматически создает счета в QuickBooks из данных на SQL Server. XML строка для создания счетов-фактур довольно проста: система, основаннаяQuickBooks API Invoice <DueDate> tag

<QBXML> 
    <QBXMLMsgsRq newMessageSetID="10025027" onError="continueOnError"> 
     <InvoiceAddRq requestID="10025027"> 
      <InvoiceAdd> 
       <CustomerRef> 
        <FullName>Acme Corporation, Inc.</FullName> 
       </CustomerRef> 
       <TxnDate>2014-02-05</TxnDate> 
       <RefNumber>124</RefNumber> 
       <ShipAddress> 
        <Addr1>16-01 16th Avenue, Dock 3</Addr1> 
        <Addr2/> 
        <Addr3/> 
        <Addr4/> 
        <City>Astoria</City> 
        <State>NY</State> 
        <PostalCode>11105</PostalCode> 
       </ShipAddress> 
       <PONumber> 6028019</PONumber> 
       <SalesRepRef> 
        <FullName>H</FullName> 
       </SalesRepRef> 
       <Memo>1401106</Memo> 
       <InvoiceLineAdd> 
        <ItemRef> 
         <FullName>SALES</FullName> 
        </ItemRef> 
        <Desc> Semi Annual Sampling - M1; Day 1</Desc> 
        <Rate>5580</Rate> 
       </InvoiceLineAdd> 
      </InvoiceAdd> 
     </InvoiceAddRq> 
    </QBXMLMsgsRq> 
</QBXML> 

SQL Server фактически печатает подробные счета-фактуры, которые доставляются заказчику, QuickBooks используется только для отслеживания остатков по счетам и платежам. Я сейчас пытаюсь добавить DueDate к фактуре, добавив следующий XML-тег:

<DueDate>2014-03-07</DueDate> 

Я попытался поместить этот тег в нескольких местах в строке XML, но QuickBooks отклоняет запрос со следующей ошибкой:

«QuickBooks обнаружил ошибку при анализе предоставленного текстового потока XML».

Бухгалтер может вручную изменить срок оплаты счетов-фактур после их создания, но по какой-то причине я не могу указать дату выполнения при создании счетов-фактур с помощью API QuickBooks. Есть идеи?

Спасибо.

+0

Возможно, вам следует отправить свой XML-запрос *, фактически показывающий, где вы пытаетесь поместить тег DueDate *? –

ответ

0

Несколько вещей, чтобы отметить здесь:

  1. Это запрос неполный QBXML. Должен быть тег заголовка XML и qbXML как самые первые две строки, и вы их пропускаете. Они должны выглядеть следующим образом:

    <?xml version="1.0" encoding="utf-8"?>

    <?qbxml version="13.0"?>

  2. Это version="..." бит должен быть установлен на что-то свою версию QuickBooks опоры (как правило, ваша версия QuickBooks - 1, например, QuickBooks 2012 поддерживает QBXML версии 11.0, QuickBooks 2013 поддерживает qbXML-версию 12.0, QuickBooks 2014 поддерживает qbXML-версию 13.0 и т. Д.)

  3. Ваше сообщение даже не показывает поле DueDate в XML, так что это немного сложно сделать ell, что на самом деле не так, но ...

  4. Имейте в виду, что порядок тегов в qbXML -. Поэтому, если OSR показывает поле DueDate после PONumber, вы можете сделать все, чтобы положить его после поля PONumber. Если вы поместите его перед собой, вы получите именно ту ошибку, которую вы описали.

  5. Вы использовали OSR, чтобы найти нужное место? Здесь не должно быть никаких угадываний - он подскажет вам, куда его поместить.

     ... 
           <State>NY</State> 
           <PostalCode>11105</PostalCode> 
          </ShipAddress> 
          <PONumber> 6028019</PONumber> 
    
          <DueDate>2014-02-12</DueDate 
    
          <SalesRepRef> 
           <FullName>H</FullName> 
          </SalesRepRef> 
          <Memo>1401106</Memo> 
         ... 
    
+0

Спасибо, что ответили. Ваш ответ был очень полезен. Я думаю, что недостающие заголовки заголовков были проблемой. – user3299915

0

Я думаю, что недостающие теги заголовков были проблемы. (Я также добавил <TermsRef> тега)

Вот XML, который сделал трюк:

<?xml version="1.0" encoding="utf-8"?> 
<?qbxml version="11.0"?> 
<QBXML> 
    <QBXMLMsgsRq newMessageSetID="10025079" onError="continueOnError"> 
     <InvoiceAddRq requestID="10025079"> 
     <InvoiceAdd> 
      <CustomerRef> 
       <FullName>Acme Corporation</FullName> 
      </CustomerRef> 
      <TxnDate>2014-02-13</TxnDate> 
      <RefNumber>168</RefNumber> 
      <ShipAddress> 
       <Addr1>Acme Corporation</Addr1> 
       <Addr2>1587-43 Veteran's Highway</Addr2> 
       <Addr3/> 
       <Addr4/> 
       <City>Islandia</City> 
       <State>NY</State> 
       <PostalCode>11749</PostalCode> 
      </ShipAddress> 
      <PONumber>5A873929B</PONumber> 
      <TermsRef> 
       <FullName>30 Days</FullName> 
      </TermsRef> 
      <DueDate>2014-03-15</DueDate> 
      <SalesRepRef> 
       <FullName>H</FullName> 
      </SalesRepRef> 
      <Memo>1402016</Memo> 
      <InvoiceLineAdd> 
       <ItemRef> 
        <FullName>SALES</FullName> 
       </ItemRef> 
       <Desc> OBAR Auto Parts, 279 South Street, Oyster Bay, NY 11771</Desc> 
       <Rate>1760</Rate> 
      </InvoiceLineAdd> 
     </InvoiceAdd> 
    </InvoiceAddRq> 
</QBXMLMsgsRq> 
</QBXML> 

Еще раз спасибо!

Смежные вопросы