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