QuickBooks API发票<duedate>标记</duedate>

时间:2014-02-12 04:16:11

标签: api quickbooks

多年前,我在基于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创建发票时指定截止日期。任何想法?

感谢。

2 个答案:

答案 0 :(得分: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字段,因此有点难以分辨出实际上是错误的,但是......

  4. 请注意,qbXML 中的代码顺序非常重要。因此,如果OSRDueDate之后显示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>
            ...
    

答案 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>

再次感谢你!