我正在编写一个函数来以定义的格式获取发票文件并通过 qbXML 将其导入 QuickBooks。其中一项要求是可以重新导入相同的发票编号,而不是修改现有发票,而不是创建具有相同编号的新发票。
我遇到的问题是 QuickBooks 如何处理地址。我得到的地址可以是任何格式(在 6 种不同的内容中),但不保证遵守该语言环境的正确地址格式。
所以创建发票很简单,我在 xml 标签中指定帐单地址 addr1 到 addr5,QuickBooks 没有问题。但是,它不会将地址存储为原始文本,它会尝试解析出城市、州邮政编码和国家/地区。
发票修改,给定相同的地址信息,不会解析出城市州和邮政编码,而是保持地址行不变,城市国家和邮政编码保持不变,在发票上创建重复行,自由格式文本之一,城市、州和邮政编码的组合。解决方法是明确设置城市国家邮政编码国家并在发票修改时注意空白。然而,这并没有完全解决问题。
有时 QuickBooks 会正确解析地址并在下一行添加一个随机数(内部表示在注释选项卡上)。
有时 QuickBooks 会拒绝该地址,甚至认为它在创建时接受了它。我假设因为它试图解析一个 5 行地址并进行修改,因为城市状态和邮政编码无处可去,它没有地方存储它们。
现在我唯一的解决方案是简单地保持地址不变,并告诉用户由于 QuickBooks 的限制,无法在重新导入发票时修改地址,只能修改发票行。
以前有没有人遇到过这个问题,如果是这样,你有更好的解决方法吗?您是否知道地址解析器可以合理地近似快速手册的功能,以便我可以在创建时以一致的方式发送城市状态和邮政编码?
现在,在某种程度上(除了最后一个)QuickBooks 给了我一个回复,告诉我它在创建时解析了什么,所以我理论上可以存储它以知道我正在处理什么,但没有编写一些耗时的地址解析例程是否有任何解决方案可以让快速手册重新解析新地址。
这是请求和响应。请注意,发票创建是相同的,并且我删除了一些识别信息,但保持字段长度相同。
要求:
<?xml version="1.0" encoding="UTF-8"?> <?qbxml version="7.0"?>
<QBXML>
<QBXMLMsgsRq newMessageSetID="243f42acf4011139b7a" onError="stopOnError">
<InvoiceModRq>
<InvoiceMod>
<TxnID>4E64-1242411202</TxnID>
<EditSequence>1242411202</EditSequence>
<CustomerRef>
<ListID>80000012-1242156814</ListID>
</CustomerRef>
<ARAccountRef>
<FullName>Accounts Receivable</FullName>
</ARAccountRef>
<TxnDate>2009-04-01</TxnDate>
<RefNumber>M-053491</RefNumber>
<BillAddress>
<Addr1>S & S ACME CO., INC.</Addr1>
<Addr2>MR. ABC ABCDEF</Addr2>
<Addr3>981 ABCD 761 ST</Addr3>
<Addr4>ABABC, AA 99999-3584</Addr4>
<Addr5>USA</Addr5>
<City/>
<State/>
<PostalCode/>
<Country/>
<Note/>
</BillAddress>
<TermsRef>
<FullName>NET 30</FullName>
</TermsRef>
<DueDate>2009-05-01</DueDate>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc/>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc>ABCDEFG ABC $3,000.00 *</Desc>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc/>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc>FOR:</Desc>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<ItemRef>
<FullName>ANFEE</FullName>
</ItemRef>
<Desc>1 . #9999 S & S ABCD CO., INC., ABCDE, AA *</Desc>
<Amount>123456.72</Amount>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc/>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc>PLEASE NOTE: Blahh Someone sellificant repeats on July 31st, 2009.</Desc>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc>Sellifcan of your Someone Ssellificant to Jan. 31st, 2011 is contingent upon</Desc>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc>your satisfying all open invoices and all other/different issues.</Desc>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc/>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc/>
</InvoiceLineMod>
<InvoiceLineMod>
<TxnLineID>-1</TxnLineID>
<Desc>* PLUS expenses for some amount of service described here.</Desc>
</InvoiceLineMod>
</InvoiceMod>
</InvoiceModRq>
</QBXMLMsgsRq>
</QBXML>
回复:
<?xml version="1.0" ?> <QBXML>
<QBXMLMsgsRs newMessageSetID="243f42acf4011139b7a">
<InvoiceModRs statusCode="3210" statusSeverity="Error"
statusMessage="The "address" field has an invalid value "". QuickBooks error message: The parameter is incorrect. "/>
</QBXMLMsgsRs>
</QBXML>