Я пишу функцию, чтобы взять файл счета в определенном формате и импортировать его в QuickBooks через qbXML. Один из требований заключается в том, что можно reimport указать тот же номер счета-фактуры, что и существующий счет-фактура, а не создать новый с тем же номером.
Проблема заключается в том, как QuickBooks обрабатывает адреса. Адреса, которые я получаю, могут быть в любом формате (в 6 разных конкурсах), без каких-либо гарантий соблюдения надлежащего формата адреса для этой локали.
Таким образом, создание счета-фактуры достаточно просто, я указываю в теге xml адрес фактурирования addr1 через addr5, а QuickBooks не представляет проблемы. ОДНАКО он не сохраняет адрес в виде исходного текста, он пытается разобрать город, почтовый индекс и страну.
Изменение счета, учитывая ту же информацию о адресе, не будет анализировать состояние города и почтовый индекс, а скорее оставить строку адреса неповрежденной и оставить городское состояние и не зацикливаться, создав дублирующую строку в счете-фактуре, один из бесплатных текст формы, другой составной части города, состояния и почтового кода. Обходной путь для этого заключался в том, чтобы указать страну, в которой установлена страна, и указать примечание на пустое изменение счета. Однако это не полностью решило проблему.
Иногда QuickBooks правильно анализирует адрес и добавляет случайный номер на следующей строке (внутренне представленной на вкладке заметки).
И иногда QuickBooks отвергает адрес, даже думал, что он принял его при создании. Я предполагаю, потому что он пытается разобрать 5-строчный адрес и изменить его, поскольку городское и почтовое коды не имеют места, и им некуда их хранить.
Сейчас мое единственное решение состоит в том, чтобы просто оставить адрес нетронутым и сообщить пользователю, что из-за ограничений QuickBooks нет способа изменить адрес на reimport счета-фактуры, только строки счета-фактуры.
Кто-нибудь сталкивался с этим раньше, и если да, то у вас есть лучшая работа? Знаете ли вы о парсере адресов, который может обоснованно приближать то, что делают быстрые книги, поэтому я могу отправить его состояние города и почтовый код для создания в согласованном порядке?
Теперь, в некоторой степени (за исключением последнего) 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>