QuickBooks の請求書の変更では、アドレスの動作が作成とは異なります。補正するにはどうすればよいですか?
-
22-08-2019 - |
質問
定義された形式で請求書ファイルを取得し、それを qbXML 経由で QuickBooks にインポートする関数を作成しています。要件の 1 つは、同じ番号を持つ新しい請求書を作成するのではなく、既存の請求書を変更して同じ請求書番号を再インポートできることです。
私が抱えている問題は、QuickBooks がアドレスを処理する方法にあります。取得するアドレスは (6 つの異なるコンテンツで) 任意の形式にすることができますが、そのロケールの適切なアドレス形式に準拠しているという保証はありません。
したがって、請求書の作成は非常に簡単です。xml タグで請求先住所 addr1 から addr5 を指定します。QuickBooks は問題なく処理します。 しかし 住所を生のテキストとして保存するのではなく、都市、州の郵便番号、および国を解析しようとします。
同じ住所情報が与えられた場合、請求書を変更すると、都市の州と郵便番号は解析されず、住所行はそのまま残り、都市の州と郵便番号も変更されず、請求書に自由形式のテキストの 1 つである重複行が作成されます。もう 1 つは都市、州、郵便番号を組み合わせたものです。この問題の回避策は、請求書の変更時に都市の州の郵便番号の国とメモを空白に明示的に設定することでした。しかし、それで問題が完全に解決されたわけではありません。
場合によっては、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>
解決
ここで考えられるもう 1 つの回避策は、請求書を二重更新することです。まずアドレスを空白にします。2 番目は、作成時に行ったように、都市州の郵便番号などについては何も言及せずに 5 行を送信します。
私はこれをテストしませんでした (ユーザーはアドレスが変更されないことを受け入れたので、試すつもりはありません) が、誰かが同様の問題を抱えている場合は試してみることができるように、これをアイデアとしてここに載せておきます。それが機能する場合は、ここにコメントしてください。