0

複数の値(請求書番号、日付、場所)といくつかの値(製品、価格、税)を含む請求書行が不明な請求書ヘッダがある場合は、インボイス・ラインの数量が請求書によって異なる場合に、このデータを1行にまとめます。請求書ヘッダをケトルに入れて整理した請求書ヘッダ


{"InvoiceRecords": [{ 
    "InvoiceDate": "8/9/2017 12:00:00 AM", 
    "InvoiceLocation": "002", 
    "InvoiceNumber": "2004085", 
    "InvoiceRecordHeaderDetails": [{ 
     "InvNum": "2004085", 
     "Location": "002", 
     "InvDate": "8/9/2017 12:00:00 AM" 
    }], 
    "InvoiceRecordLineItemDetails": [{ 
     "UniqueID": "3939934", 
     "InvNum": "2004085", 
     "LINEITEM": "1", 
     "CUSTID": "PREAA", 
     "DEPTID": "320306", 
     "PRODID": "088856", 
     "ProdDesc": "STATE UST", 
     "Unitprice": "0.003", 
     "QuantShare": "237.5", 
     "TaxRate": "7.25", 
     "taxamount": "0.05" 
    }], 
    "InvoiceTaxCodeDetails": [{ 
     "InvNum": "2004085", 
     "LineItem": "1", 
     "UniqueID": "34", 
     "taxCode": "SALES TAX", 
     "taxrate": "7.25", 
     "maxtax": "0" 
    }] 
}]} 

例 - 入力Iが存在するため、所与の請求書上に複数のラインアイテム及び/又は複数の税コードの項目であることを可能にする(同じ行のすべての項目が必要。録音


出力例(注:可能な請求書のラインと税行の未定量を参照して以下「_n」):

{"InvoiceRecords": [{ 
    "InvoiceDate": "8/9/2017 12:00:00 AM", 
    "InvoiceLocation": "002", 
    "InvoiceNumber": "2004085", 
    "InvoiceRecordHeaderDetailsInvNum": "2004085", 
    "InvoiceRecordHeaderDetailsInvNumLocation": "002", 
    "InvoiceRecordHeaderDetailsInvNumInvDate": "8/9/2017 12:00:00 AM", 
    "InvoiceRecordLineItemDetailsUniqueID_1": "3939934", 
    "InvoiceRecordLineItemDetailsInvNum_1": "2004085", 
    "InvoiceRecordLineItemDetailsLINEITEM_1": "1", 
    "InvoiceRecordLineItemDetailsCUSTID_1": "PREAA", 
    "InvoiceRecordLineItemDetailsDEPTID_1": "320306", 
    "InvoiceRecordLineItemDetailsPRODID_1": "088856", 
    "InvoiceRecordLineItemDetailsProdDesc_1": "STATE UST", 
    "InvoiceRecordLineItemDetailsUnitprice_1": "0.003", 
    "InvoiceRecordLineItemDetailsQuantShare_1": "237.5", 
    "InvoiceRecordLineItemDetailsTaxRate_1": "7.25", 
    "InvoiceRecordLineItemDetailstaxamount_1": "0.05", 
    "InvoiceTaxCodeDetailsInvNum_1": "2004085", 
    "InvoiceTaxCodeDetailsLineItem_1": "1", 
    "InvoiceTaxCodeDetailsUniqueID_1": "34", 
    "InvoiceTaxCodeDetailstaxCode_1": "SALES TAX", 
    "InvoiceTaxCodeDetailstaxrate_1": "7.25", 
    "InvoiceTaxCodeDetailsmaxtax_1": "0", 
    "InvoiceRecordLineItemDetailsUniqueID_n": "3939934", 
    "InvoiceRecordLineItemDetailsInvNum_n": "2004085", 
    "InvoiceRecordLineItemDetailsLINEITEM_n": "1", 
    "InvoiceRecordLineItemDetailsCUSTID_n": "PREAA", 
    "InvoiceRecordLineItemDetailsDEPTID_n": "320306", 
    "InvoiceRecordLineItemDetailsPRODID_n": "088856", 
    "InvoiceRecordLineItemDetailsProdDesc_n": "STATE UST", 
    "InvoiceRecordLineItemDetailsUnitprice_n": "0.003", 
    "InvoiceRecordLineItemDetailsQuantShare_n": "237.5", 
    "InvoiceRecordLineItemDetailsTaxRate_n": "7.25", 
    "InvoiceRecordLineItemDetailstaxamount_n": "0.05", 
    "InvoiceTaxCodeDetailsInvNum_n": "2004085", 
    "InvoiceTaxCodeDetailsLineItem_n": "1", 
    "InvoiceTaxCodeDetailsUniqueID_n": "34", 
    "InvoiceTaxCodeDetailstaxCode_n": "SALES TAX", 
    "InvoiceTaxCodeDetailstaxrate_n": "7.25", 
    "InvoiceTaxCodeDetailsmaxtax_n": "0" 
}]} 

ありがとうございます!

+0

3つの例が大歓迎です! – AlainD

+0

もちろんあります。問題は、あなたのデータの形にもよりますが、それらの多くがあります。入力の場合は、1つの行とそれに続く任意の数の行があります。また、出力のために請求書ごとに1つの行が必要です。どのタイプのデータにラインアイテムデータが必要ですか?文字列ですか?配列? XML? JSON? – AlainD

+0

@ AlainD、私は例を挙げました。ありがとう! – jag959

答えて

0

samplesディレクトリにspoon.batの近くに同様の質問の例があります。 samples/transformation/XML Addを見て、最初のチャックから生き残ってください。可能なことをすべて表示するために、もっと複雑な作業を行います。

あなたのケースでは、Switch/Caseで分割し、ヘッダー、アイテムの入力ストリームを管理し、それぞれにInvoiceNumberを保持します(詳細は後で説明します)。 3つのストリームをJSONに変換します(JSON出力、またはもっと簡単にはJavascript)。次に、InvoiceNumberで項目Group byを返します。 InvoiceNumberによって3つのフローに参加してください。私はlookup streamをヘッダーストリームに、次にlookup streamをフッターストリームに含めることをお勧めします。 javascriptを使用し、データを文字列として扱う場合は、{header、[item]、footer}の形式でJSON行を作成できます。Group byには1行のみの連結を設定できます。

流れから姿を消したアイテムやフッタのInvoiceNumberを取得するのは難しい部分を除いて、いくつかの作業ですが、むしろ標準です。そのため、javascriptは再定義されない限り値を保持するという事実を利用することができます。新しいスタートスクリプトを追加する[タブトップのScript1を右クリックしてコピーを追加し、作成したScript1_0を右クリックして、[スタートスクリプト]として定義します。その後

if(InvoiceNumber && PrevInvoiceNumber!=InvoiceNumber) 
    PrevInvoiceNumber = InvoiceNumber 

あなたは、各請求書の予想InvoiceNumberに等しいPrevInvoiceNumber行にしてデータが表示されます。メインスクリプトで

var PrevInvoiceNumber = -1; 

:この起動スクリプトで

enter image description here

+0

私は思いますそれは間違った質問に対する正解です。そして、私はあなたが質問を修正する答えを修正することを私が好むと思います。しかし、それは私の時間が遅れている、あなたは明日待つ必要があります。基本的には、3つのJSON入力(ヘッダー、項目、フッター)でデータを読み取り、InvoiceNr(JSON入力で可能)を保持する以外は同じです。シーケンス番号で_nを生成し、key:valueペアを作成し、フィールドを行に分割し、並べ替えて、単一の出力にグループ化します。 – AlainD

関連する問題