納品書を自動作成するには、受注CSVを商品マスター・在庫CSVと照合し、確認を通った注文を帳票に転記します。この記事では、在庫不足や未登録コードを確認一覧に出し、問題のない注文だけ印刷用の納品書案HTMLを作るPythonスクリプトと実行手順を紹介します。在庫更新・顧客への送信は行わず、最後は人が確認する運用です。
納品書の自動作成でできること
添付の order_documents.py は、商品コードをキーに商品名・単価・利用可能在庫を照合します。注文番号ごとに明細と商品合計をまとめ、review.csv と注文別のHTMLを新しいフォルダへ出力します。元のCSVは読み取るだけです。
人が受注を確認して商品表を探し、納品書に転記していた部分をスクリプトへ渡せます。担当者は、要確認注文の修正と生成された帳票案の照合を行います。AIは実行支援やエラーの説明に使い、金額の計算はスクリプトが行います。
これは出荷判断や正式帳票の発行までを完了する仕組みではありません。税・送料・値引き・顧客別価格・在庫引当には対応しません。日本円の整数単価で商品合計を作る、確認用の納品書案です。
用意するもの:Pythonと3つのCSV
- Python 3.10以降を実行できる環境。外部ライブラリの追加は不要です。
- 添付スクリプト
order_documents.py。 - 同じ時点・同じ商品コード体系で用意した受注、商品、利用可能在庫のCSV。
- HTMLを開くブラウザ。印刷・PDF保存は、その環境で利用できる機能を使います。
まず架空データで試してください。実データをAIへ渡す場合は、会社が認めたサービスと利用条件を確認します。ローカルのPythonだけで実行する場合、AIへのファイル送信は必要ありません。
CSVの列名と入力ルール
ファイル名、見出し、列の順番は次のとおり固定です。UTF-8で保存します。BOM付きUTF-8も読めます。
orders.csv:受注。1行が1明細、同じ注文番号の複数商品は1枚にまとまります。
order_id,customer,product_code,quantity O001,A社,001,2 O002,B社,002,1
products.csv:商品マスター。
product_code,product_name,unit_price_jpy 001,練習商品A,500 002,練習商品B,1200
stock.csv:処理時点の利用可能在庫です。
product_code,available 001,10 002,2
数量は1以上、単価と在庫は0以上の半角整数で、それぞれ9桁までです。カンマ区切りの数値、少数、小数、単位付き文字列は使わず、数量なら 2 と入力します。商品コードは 001 と 1 を区別し、前後の空白も自動では取り除きません。
注文番号は半角英数字と _・- の1〜40文字です。Windowsの予約名や、大文字小文字だけが異なる注文番号は要確認になります。顧客名・商品名は空にできません。価格は商品マスターの単価を使うため、受注時価格と一致するか事前に確認してください。
手順1:架空の受注CSVから納品書案を作る
スクリプトを置いたフォルダでターミナルを開き、次の2行を順に実行します。以下は python3 が利用できる環境で確認したコマンドです。
python3 order_documents.py --demo python3 order_documents.py demo_orders --output practice_output
1行目で demo_orders に上記3つのCSVを作り、2行目で処理します。正常に終わると、次のメッセージが出ます。
practice_output: 案 2件 / 要確認 0件。在庫更新・送信はしていません。
出力は practice_output/review.csv、O001.html、O002.html です。確認CSVの内容は次のとおりです。
order_id,customer,status,detail O001,A社,案を作成,1000 O002,B社,案を作成,1200
HTMLには、O001なら練習商品Aが2点、単価500円、商品合計1,000円と表示する内容が入ります。O002は1点で1,200円です。いずれも税・送料の計算は含みません。
--demo は既存の demo_orders を上書きしません。出力先も新しいフォルダが必要です。同じコマンドを再実行して停止したら、確認済みの練習データを別の場所へ移すか、出力先を未使用の名前に変更してください。
手順2:在庫不足・未登録コードの止まり方を確認する
在庫は注文ごとに単独で比較せず、今回読み込んだ全注文の商品別必要数と比較します。合計が在庫を超えた商品を含む注文は、すべて要確認です。先着順に割り当てる仕組みはありません。
demo_orders をコピーして check_orders を作り、その中の orders.csv だけを次の内容へ差し替えます。商品と在庫のCSVは変更しません。
order_id,customer,product_code,quantity O001,A社,001,6 O003,A社,001,5 O004,A社,999,1 O002,B社,002,1
python3 order_documents.py check_orders --output check_output
商品001は必要数11に対して在庫10、999は未登録です。実行結果は「案 1件 / 要確認 3件」で、確認一覧は次のようになります。
order_id,customer,status,detail O001,A社,要確認,同時処理する全注文の必要数が在庫超過: 001 O003,A社,要確認,同時処理する全注文の必要数が在庫超過: 001 O004,A社,要確認,商品または在庫マスターが未登録 O002,B社,案を作成,1200
作られるHTMLは O002.html だけです。注文内の1明細に問題があれば、その注文全体のHTMLを作りません。同一注文・同一商品の重複や、注文番号内の顧客名不一致も確認へ回します。
顧客名などに不備がある行や重複行でも、読める数量は必要数に含めます。数量が不正で必要数を確定できない商品は、その商品を含む注文すべてを要確認にします。重複を勝手に削除したり、数量を推測したりせず、担当者が入力のコピーを修正して再実行してください。
手順3:実データに置き換え、人が確認して印刷する
少数の実注文から始めます。業務原本のコピーを所定の3ファイル名で input_orders に保存し、最新の利用可能在庫を用意します。出力先には未使用の名前を指定します。
python3 order_documents.py input_orders --output output_20261021
このコマンドの動作は、実データの代わりに架空CSVを置いて確認しています。処理後は、次の順で確認します。
review.csvの注文番号が、入力の重複を除いた注文番号一覧と一致するか確認します。- 「要確認」の理由を読み、注文を処理済みにしないよう業務側で管理します。
- 「案を作成」のHTMLを開き、宛名・商品コード・商品名・数量・単価・商品合計を原本と照合します。
- 発行者、納品日、必要な税・送料などを自社の正式帳票の運用に従って整えます。
- ブラウザの印刷プレビューで改ページ・明細の欠落を確認し、印刷またはPDF保存します。
HTMLの生成だけでは正式帳票として完成しません。必要な記載の追記や体裁調整、複数ページの確認も作業に含めてください。このスクリプトはPDFを直接生成しません。
AIに実行・確認を頼むプロンプト
コード実行とファイル受け渡しに対応した承認済みAIには、スクリプトと3つのCSVを添付して次を渡せます。最初は架空データを使います。
添付のorder_documents.pyを読み、3つのCSVのファイル名・見出しを確認して実行してください。 既存ファイルを上書きしない新しい出力先を使ってください。 原本・在庫は変更せず、出荷処理や外部送信はしないでください。 review.csvと生成された納品書案HTMLを取得できる形で返してください。 案の件数、要確認の注文番号と理由、各案の商品合計を実行結果から説明してください。 数量・単価・顧客名を推測して補正しないでください。 実行できなければ未実行と明示し、エラーが出たら内容と修正候補を説明してください。 税・送料を含む正式帳票として完成したとは扱わないでください。
AIの説明だけで成功と判断せず、実際の出力ファイルを確認します。実行機能がない場合はローカルで処理してください。
うまくいかないとき
- CSVの見出し・列数で停止する:列名と順番を上記に合わせます。セル内のカンマはCSVの引用符で囲み、UTF-8で保存し直します。
- 商品が未登録になる:受注・商品・在庫の3ファイルでコードを比較します。エクセルで開いて保存した際の先頭ゼロ欠落や空白も確認します。
- 複数の注文がまとめて要確認になる:商品別の合計数量を確認します。数量不正や重複のある行も含め、原因を直して再実行します。
- マスターの不備で処理が止まる:商品コードの重複、空の商品名、不正な単価・在庫、在庫表の不明コードを修正します。この場合は注文別の確認一覧も作りません。
- 途中でエラーになった:出力途中のファイルが残る場合があります。そのフォルダを完成扱いせず、原因を解決して新しい出力先でやり直します。
注意点:機密情報と正式発行の判断
受注CSVには顧客名などの機密情報・個人情報が含まれます。AIへ渡すなら必要最小限にし、匿名化、保存・学習設定、社内規程を確認してください。出力HTML・CSV・PDFにも同じ情報が残るため、保存先と共有権限を管理します。
HTML内の入力文字はエスケープし、確認CSVでは数式として扱われやすい文字で始まる値に保護用の ' を付けます。確認CSVを業務原本へそのまま戻す用途は想定していません。保護処理があっても、外部由来ファイルの安全を保証するものではありません。
在庫照合は実行時のCSV内だけで完結し、別処理との競合や実在庫の変化は追跡しません。実行後の出荷可能数は担当者が再確認します。インボイス制度などの法的記載事項や、納品書と請求書の役割は自社の要件を確認し、必要に応じて経理担当者・専門家に相談してください。
よくある質問
エクセルだけで納品書を自動作成できますか?
この記事の方法は、エクセルで管理する表をCSVへ書き出し、Pythonで処理する流れです。xlsxの直接読み込みやExcel帳票への転記には対応していません。商品コードは文字列として扱い、CSV保存後にも先頭ゼロを確認してください。
在庫不足でも一部だけ納品書を作れますか?
添付版には部分出荷や優先順位付けの機能はありません。不足商品を含む注文全体を止めます。出荷対象を人が決めたうえで、対象注文と利用可能在庫のコピーを準備し直してください。
自動実行や顧客への送信まで任せられますか?
添付版は手動実行と人の確認を前提にしています。在庫更新、出荷登録、メール送信、二重発行の管理は行いません。同じ受注を再実行すると別フォルダに同じ案を作れるため、発行済み管理は業務側で行ってください。
検証範囲
添付版をローカルのPythonで実行し、架空データ2注文のHTML生成と商品合計、複数明細の合算、累積在庫不足、未登録コード、在庫未登録、重複、顧客名不一致、数量不正、注文番号の制約、マスター不備、CSVの見出し・列数不正、既存出力先での停止を確認しました。
不備行の数量を含めた在庫判定、数量不正時の関連注文の停止、HTML文字列のエスケープ、確認CSVの数式対策、テスト対象の入力CSVが処理前後で変わらないことも確認済みです。
ブラウザでの表示・実印刷・PDF保存、Windowsでの実行、大量データ、AIサービス内での実行、実務での所要時間は未検証です。導入時は帳票内容と印刷結果を確認し、入力準備・修正・最終確認まで含めて作業時間を測ってください。
添付ファイル CC0 ・ 自由に持ち帰れます
- スクリプト ・ 6.7 KB
会社のデータをAIに入れる前に、社内ルールを確認しましょう。
コメント 0
まだコメントはありません。質問や、試してみた感想を書いてみませんか?