インポートを動作させるには、データが固定フィールド、コンマ区切りのデータでなければいけません。
ダウンロードした注文を変換するPython
スクリプト例を次に示します。
import sys import csv VENDOR_ID="000013" INFILE=sys.argv[1] INV_ID=sys.argv[2] try: ACCOUNT=sys.argv[3] except: ACCOUNT="Expenses:Materials General" Reader = csv.reader(open(INFILE), delimiter=',') # Need to ignore 1st and last rows for row in Reader: if row[0].isdigit(): # We only use numbered lines outline=(INV_ID + ",," + VENDOR_ID + ",,,," + row[1] + " > " + row[4] + ",ea," + ACCOUNT + "," + row[2] + "," + row[5].replace("GBP", "") + ",,,,no,,,,,,,,") print outline
Rapid Electronics (UK) からダウンロードした仕入先注文の例は次のようになります。
line number,product code,quantity,availability,product description,unit price,discounts,line total,delivery,sub total,vat,grand total 1,47-3524,100,100 Available,BC848C SOT-23 NPN TRANSISTOR (INF) (RC),GBP0.03,GBP0.00,GBP0.03 2,47-3278,30,30 Available,L78L05ACZ 0.1A +5V VOLTAGE REG (ST) (RC),GBP0.18,GBP0.00,GBP0.18 3,22-0120,1,1 Available,Tube 34 14pin DIL socket, narrow7.62mm, without central support,GBP1.05,GBP0.00,GBP1.05 4,22-0127,1,0 Available<br />1 on Back Order,Tube 17 28pin DIL socket, wide15.24mm, without central support,GBP1.22,GBP0.00,GBP1.22 5,62-0368,1,1 Available,820R CR25 0.25W CF Resistor Pk 100,GBP0.50,GBP0.00,GBP0.50 6,47-3130,100,100 Available,1N4001 1A 50V SILICON RECTIFIER DIODE RC,GBP0.01,GBP0.00,GBP0.01 7,17-0310,1,1 Available,PROFESSIONAL MINATURE PROBE HOOK RED RC,GBP0.90,GBP0.00,GBP0.90 8,17-0312,1,1 Available,PROFESSIONAL MINATURE PROBE HOOK BLACKRC,GBP0.90,GBP0.00,GBP0.90 9,34-0655,1,1 Available,PROTOBLOC 2 BREADBOARD,GBP4.39,GBP0.00,GBP4.39 10,18-0200,1,1 Available,PP3 9V ALKALINE BATTERY "Not For Retail Sale",GBP1.37,GBP0.00,GBP1.37 ,,,,,,,,GBP4.95,GBP24.93,GBP4.35,GBP29.28
Python
スクリプトで処理した後の同じファイルは次のようになります。
MEC-0071,,000013,,,,34-0655 > PROTOBLOC 2 BREADBOARD,ea,Expenses:Materials General,1,4.39,,,,no,,,,,,,, MEC-0071,,000013,,,,18-0105 > PP3 / PP6 BATTERY CLIP 150MM (RC),ea,Expenses:Materials General,10,0.06,,,,no,,,,,,,, MEC-0071,,000013,,,,62-0370 > 1k CR25 0.25W CF Resistor Pk 100,ea,Expenses:Materials General,1,0.50,,,,no,,,,,,,, MEC-0071,,000013,,,,62-0354 > 220R CR25 0.25W CF Resistor Pk 100,ea,Expenses:Materials General,1,0.50,,,,no,,,,,,,, MEC-0071,,000013,,,,34-5548 > PLAIN DOCUMENT WALLET ASSORTED PK 50 RE,ea,Expenses:Materials General,1,6.95,,,,no,,,,,,,, MEC-0071,,000013,,,,62-0386 > 4k7 CR25 0.25W CF Resistor Pk 100,ea,Expenses:Materials General,1,0.50,,,,no,,,,,,,, MEC-0071,,000013,,,,34-0860 > COPPER CLAD SRBP SS 100 X 160 (RC),ea,Expenses:Materials General,5,0.50,,,,no,,,,,,,, MEC-0071,,000013,,,,18-0163 > PP3 BATTERY HOLDER WITH FLYING LEADS RC,ea,Expenses:Materials General,5,0.23,,,,no,,,,,,,, MEC-0071,,000013,,,,73-4290 > ATMEGA8-16PU 8-BIT MICRO 8K DIL-28 (RC),ea,Expenses:Materials General,3,1.99,,,,no,,,,,,,, MEC-0071,,000013,,,,81-0014 > BC108 NPN GP TRANSISTOR RC,ea,Expenses:Materials General,20,0.16,,,,no,,,,,,,, MEC-0071,,000013,,,,DELIVERY,ea,Expenses:Postage,1,4.95,,,,no,,,,,,,, MEC-0071,,000013,,,,VAT,tax,Expenses:VAT,1,4.35,,,,no,,,,,,,,
見て分かる通りいくつかのフィールドは空白で、いくつかのフィールドはインポートには必要ありません。
最初の行は不要です。また、GnuCash
が注文金額を合計するので最後の行も余計です。
必要なのは、欲しい項目を選択してGnuCash
にインポートできる正しい形式で出力ファイルを生成することです。
この場合、パーツ番号と説明文列を連結してGnuCash
得意先請求書/仕入先請求書の説明欄に入力します。
また、数量と単価の列も必要です。
反対にVAT(付加価値税)列は含まれず、常に0になっています。VATは最後の行で注文の合計金額に対して計算しています。
注記 | |
---|---|
これは後々問題の原因となります。 |
スクリプトは次のコマンドで呼び出します。
python importer.py file_to_import
,
invoice_id
>
file_to_save_as.csv
この短いスクリプトはダウンロード形式に合わせて容易に変更できます。 今のところ残っている唯一の制限はフィールド数が固定ということです。 インポートツールはフィールド数に誤りがある行を無視します。 (将来のバージョンでは修正されます) VENDOR_IDは仕入先を特定するために割り当てるIDです。 raw[N] 項は行内のデータがあるフィールド位置を表します。 最初のフィールドがraw[1]ではなくraw[0]であることに注意が必要です。
ファイルの変換が完了したら、 仕入先請求書または得意先請求書を選択します。そしてコンマ(,)区切り形式を選択します。 この時点でデータを確認するウィンドウが表示されます。 を選択する前に、正しい列にフィールドデータがあることを確認します。 いったんインポートしたら、請求書は通常通編集し、記帳することができます。
→ を選択し、新規インポートウィンドウを開きます。 作成したファイルを選択し、VAT(付加価値税)、その他の購入時にかかる税金
(日本の場合は消費税) に関して注意が必要です。
前に説明したRapid
Electronicsは仕入先請求書総額に対してVATを計算しています。
一方、GnuCash
では、行の合計ごとにVATを計算し、VATの金額を合計しています。
これにより、VATの金額に数セントの不整合が生じ、購入に使用した銀行またはクレジットカード勘定科目を照合する時に問題が発生する場合があります。
差し当たり、それをどう克服するかについては、個人の良心と会計方法に依存します。
VATを別の行に、配送料と併せて手動で入力する人もいます。
利用者にとっていくつかの作業が残りますが、すべての行を入力するつまらない作業は省くことができます。
今後の課題:
現在、インポート形式は非常に制限されており、多くの利用者にとって変換方法に課題があります。
すべての業者のCSV形式に関するテンプレートを加えることは大きすぎて不可能な作業です。また、業者はGnuCash
チームに連絡しないで形式を変更します。
今後のインポート機能拡張は利用者からのフィードバックに基づきます。うまくいけば、処理をより簡単であるか、または、より柔軟にすることができます。
しばしば、「簡単」と「柔軟」は両立しないことに注意します。
注記 | |
---|---|
|
インポートを成功させるには、フィールド数を守らなければいけません。よって行末にあるコンマの数も重要です。
必須フィールドの全リストは次の通りです。
id, date_opened, owner_id, billingid, notes, date, desc, action, account, quantity, price, disc_type, disc_how, discount, taxable, taxincluded, tax_table, date_posted, due_date, account_posted, memo_posted, accu_splits,
注記 | |
---|---|
行末のコンマに注意してください。 |
id - 得意先/仕入先請求書番号です。 すべての行がこれを含まなければいけません。さもなければ、行は拒絶されます。
date_opened - 空欄の場合、今日の日付が使用されます。
owner_id - 得意先または仕入先のID番号です。 すべての行がこれを含まなければいけません。さもなければ、行は拒絶されます。
billingid - 請求IDです。
notes - 請求書の備考です。
date - 項目行の日付です。 空欄の場合、今日の日付が使用されます。
desc - 通常の得意先/仕入先請求書の説明です。
action - 仕入先請求書では、通常「ea」にします。
account - 商品の資金移動勘定科目です。
quantity - 商品の数量です。 すべての行がこれを含まなければいけません。さもなければ、行は拒絶されます。
price - 商品の単価です。 すべての行がこれを含まなければいけません。さもなければ、行は拒絶されます。
disc_type - 値引のタイプです。「%」または「TODO」で指定します。得意先請求書にのみ当てはまります。 実験では、通貨によってはこのフィールドが必要になります。
disc_how - 得意先請求書にのみ適用されます。
discount - 適用する割引の量です。得意先請求書にのみ適用されます。
taxable - 商品に税金を適用するかどうかを指定します。「y」または空欄にします。
taxincluded - 商品価格に税金が含まれているかどうかを指定します。「y」または空欄にします。
tax_table - 商品に適用する税額表を指定します。
date_posted - 記帳する場合、記帳日を指定します。 通常は空欄のままにし、請求書を編集した後に手動で記帳します。
due_date - 支払期日を指定します。
account_posted - 記帳先勘定科目を指定します。
memo_posted - 記帳する場合には、説明を指定します。
accu_splits - スプリットを累計するかどうかを指定します。「y」または空欄にします。