2014-02-12 39 views
0

多年前,我在基于SQL Server的系统和QuickBooks之间编写了一个定制集成,它可以根据SQL Server中的数据在QuickBooks中自动创建发票。该XML字符串创建发票很简单:QuickBooks API发票<DueDate>标签

<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的只用来跟踪账户余额和支付。我现在想通过将下面的XML标签的交货期添加到发票:

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

我试图把这个标签在几个地方的XML字符串中,但QuickBooks的拒绝与以下错误请求:

“QuickBooks解析提供的XML文本流时发现错误。”

簿记员能够在创建发票后手动更改截止日期,但出于某种原因,我无法在使用QuickBooks API创建发票时指定截止日期。有任何想法吗?

谢谢。

+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. 您的帖子甚至没有在XML中显示DueDate字段,所以有点难ell实际上是什么错误,但...

  4. 请记住,qbXML 中的标记顺序是重要。因此,如果OSR显示PONumber之后的DueDate字段,则最好确保将其放在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> 

再次感谢您!