多年前,我在基于SQL Server的系统和QuickBooks之间编写了一个自定义集成,它可以自动从SQL Server中的数据创建QuickBooks中的发票。用于创建发票的XML字符串非常简单:
<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添加到发票中:
<DueDate>2014-03-07</DueDate>
我曾尝试将此标记放在XML字符串中的多个位置,但QuickBooks拒绝该请求时出现以下错误:
“QuickBooks在解析提供的XML文本流时发现错误。”
簿记员可以在创建发票后手动更改发票上的截止日期,但出于某种原因,我无法在使用QuickBooks API创建发票时指定截止日期。任何想法?
感谢。
答案 0 :(得分:0)
这里需要注意的一些事项:
这是一个不完整的qbXML请求。应该有一个XML和qbXML标头标签作为前两行,你就错过了它们。他们应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="13.0"?>
version="..."
位应设置为您的QuickBooks版本支持的内容(通常是您的QuickBooks版本 - 1,例如QuickBooks 2012支持qbXML版本11.0,QuickBooks 2013支持qbXML版本12.0,QuickBooks 2014支持qbXML版本13.0等。)
您的帖子甚至没有在XML中显示DueDate
字段,因此有点难以分辨出实际上是错误的,但是......
请注意,qbXML 中的代码顺序非常重要。因此,如果OSR在DueDate
之后显示PONumber
字段,则最好确保将其放在PONumber
字段之后。如果你把它放在它之前,你将得到你所描述的错误。
您是否使用OSR找到了正确的位置?这里不应该有任何猜测 - 它会告诉你确切的位置。
...
<State>NY</State>
<PostalCode>11105</PostalCode>
</ShipAddress>
<PONumber> 6028019</PONumber>
<DueDate>2014-02-12</DueDate
<SalesRepRef>
<FullName>H</FullName>
</SalesRepRef>
<Memo>1401106</Memo>
...
答案 1 :(得分: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>
再次感谢你!