7. 出荷
完成品在庫(または生産完了した受注)を、実際にお客様(トヨタ紡織・アイシン・デンソーなど)へ送り出すまでの一連の処理。受注データ(JUDP)1行=1受注明細という構造が出荷まで貫かれ、出荷専用の別ファイルは存在しない。
1. 業務の目的と位置づけ
2. 出荷指示のフロー(JSBS08/09)
3. 出荷準備(JSBS10 + Excelジョブ)
4. 出荷実績 — SSBS01 出荷入力(ITND50R)
5. 在庫展開 — SSBS02(ITND01R)
6. 納入形態
7. 特殊ケース(再発行・分納・直送・訂正)
8. 実データスナップショット
9. 関連マスタ・帳票一覧
10. 用語集
11. 他業務との接続点
未解明事項(現場担当者への質問リスト)
- 受注データJUDP1行=1受注明細の構造が出荷まで貫かれ、出荷専用の別ファイルは存在しない。
- JUDP全45,545行中80.2%が出荷済みで、年間出荷件数は概ね4,000〜4,800件で安定。
- 中止区分JUKUSTは82.4%がNULL(空欄)で、これは異常でなく「キャンセルされていない」正常値。
1. 業務の目的と位置づけ
出荷業務は、生産完了した受注をお客様の工場へ届けるまでの最終工程。大きく4段階で進む。
- 出荷指示 JSBS08 / JSBS09
どの受注をいつまでに出荷するか、社内向けに指示書を発行する。担当: 出荷担当 - 出荷準備 JSBS10
現場が現品をピッキング・梱包し、生産完了=出荷準備完了をシステムに記録する。担当: 生産ライン - 出荷実績入力 SSBS01(ITND50R)
実際に出荷した日・数量・伝票№を受注データ(JUDP)に記録する。担当: 出荷担当 - 在庫展開 SSBS02(ITND01R)
出荷が確定した分だけ、完成品・部品の現在庫数を一括で減算する。担当: 出荷担当(別実行)
このあと下流の売上計上(請求書発行、ITS000R/001R/002R系)へ引き継がれる。売上計上は財務エージェントの領域だが、JUDPレコードの JUNOHI(納入日)・JUSEHI(請求対象年月)が橋渡しキーとなる。(出典: itnd50r.md #UPDATセクション)
2. 出荷指示のフロー
JSBS08 出荷・組付指示書発行(オーケストレーター)
エントリ: MENUJ1(受注管理)オプション8 → CL JSBS08 → JSBS08C 本体。JSBS08Cはそれ自体はデータ処理を一切行わない、純粋なオーケストレーター。画面(JSBS08D)は確認のみ・入力項目なしで、実行キーを押すと最大6回までExcelが自動起動する旨が画面に明記される。(出典: jsbs08c.md「Purpose」節)
パイプラインは6フェーズ・22の子プログラムから成る固定シーケンス:
| フェーズ | 何をするか | 出荷業務上の意味 |
|---|---|---|
| 1. まとめ指示作成 | ITKM11R(W6未実装スタブ)→条件付きでBAT0108C印刷 | 複数受注をまとめた組付指示(まとめ指示)を作る。現状W6未実装のため常に0件でスキップ |
| 2. まとめ振戻・再引当 | ITKM12R/13R(同W6スタブ)→BAT1001印刷 | フェーズ1が動いていれば在庫再引当。現状ドーマント |
| 3. 単品区分照合 | ITSS05R | 単品出荷品かどうかの整合チェック |
| 4. 出荷指示書発行 | ITSJ07R → 条件付きBAT0109印刷 | 本フェーズが「出荷指示書」を作る中核。単品出荷品(JUD605=11〜19)を対象に在庫引当し、JUDP側にJUKUED=8/JUD104=9/JUHAHI=TODAYを立てる |
| 5. 組付指示書発行 | ITSS01R構成展開→ITSS06R引継→ITSS03R分納再引当→ITSS08R在庫引当→ITTS44R支給品数量反映→ITSS02R発行→条件付きBAT0108印刷 | 「組付品」(部品を組み立てて出荷する製品)向けの組付指示書を作る |
| 6. 構成チェックリスト | ITKS06R | QPRINT(プリンタ)へ構成の累積チェックリストを出力 |
「何を印刷するか」=6種類のBATプログラム(すべて Excel/VBA):
| プログラム | 発行条件 | 帳票名 |
|---|---|---|
| BAT0108C Excel | まとめ指示>0件 | まとめ指示書(組付) |
| BAT1001 Excel | まとめ再引当>0件 | まとめ再引当後帳票 |
| BAT0109 Excel | 出荷指示>0件 | 出荷指示書 |
| BAT0108A Excel | 常時 | 組付部品引当在庫の引継ぎ指示書(引継分) |
| BAT0108B Excel | 常時 | 同上(分納分) |
| BAT0108 Excel | 組付指示>0件 | 組付指示書 |
「何を決めるか(引当)」は出荷指示書発行(ITSJ07R)が担う。在庫確認 PBZKCKR(読み取り専用)と在庫マスタ処理 PBZKUPR(実際にZKDPの引当数・現在庫数を増減する在庫引当エンジン)を呼び出し、その日出荷できる分の在庫を実際に押さえてから受注データにスタンプを打つ。これはRPGの実物コールで、Excel帳票のBAT0109はあくまで印刷担当(ITSJ07Rは印刷を持たず、印刷はJUDPP1ステージングテーブル経由でBAT0109のExcelマクロが担う)。(出典: itsj07r.md「Purpose」節)
【ヒアリングで判明】フェーズ5のITSS08R(部品展開・在庫引当)は、新實さんの確認では試作品(受注区分2)の受注経路における「肝」の処理にあたります。試作品はMENUT→MENUA(前段階)を経てMENUJ1のJSBS08へ進み、ここで部品展開と在庫引当が行われます。受注区分の全体像は3. 受注 §7を参照。(出典: 新實さん、2026-07-20メール、docs/feedback/analysis/2026-07-20-niimi-shijikeitai.md参照)
各BATプログラムの実体は「サーバー2台目 \\SERVER2\KANRI\BATCH\<name>.XLSM を開いてマクロを実行するだけ」の薄いCLラッパー。現行の移行版TypeScriptではこのステップを「ログを出してスキップ(PRINT-SEAM defer-loud)」として実装している。(出典: jsbs08-seam-and-stubs.md §B)
source/shipping/出荷指示書発行/出荷指示書発行.xlsmのVBAを解析したところ、ファイル名こそBAT0109.XLSMではないが、内部定数DATA_FILE = "JUDPP1.xls"・KANRI_PATH & "\batch\CA\Batch"という展開パス・JUDPP1行区分コード("Z"=ITSJ07R/"G"=ITSJ05R/"S"or"G"=ITSJ51R/"K"=ITTS13R)がjsbs08-seam-and-stubs.mdのBAT0109契約と完全一致し、同一ロジックの実体マクロと判断できる。BAT0108/BAT0108A/BAT0108B/BAT0108C/BAT1001の5本(組付指示書・まとめ指示系)は今回出荷指示書発行/・出荷準備/の2フォルダを精査しても見つからず、この5本については「マクロ本体はリポジトリ外」という従来の記述のままでよい。
(出典: 出荷指示書発行.xlsm VBA実測; jsbs08-seam-and-stubs.md §B)
source/shipping/出荷指示書発行/品番紙印刷(ロット№付).xlsmはDATA_FILE = "SJDPP3.xls"を読む。pilot/spec/itts15r.mdによれば、SJDPP3を消費するのはBAT0811(CL、品番紙データ転送、\\SERVER2\KANRI\BATCH\...\BAT0811.XLSM)という、本ページが従来まったく把握していなかったBATプログラムで、MENUW1(号口管理サブシステム)オプション11「作業指示完成入力」(WSBS11 → ITTS15R)から呼ばれる——JSBS08パイプラインとは別系統。ITTS15Rは号口の生産完了入力(完成日/出来高/半加工数等を記録し、SJDP/BHMP/JHMPの現在庫数を更新)で、対象品番のJHMP.JHD033=100(品番紙要・ロット№印刷)のときだけSJDPP3に1行書き、セッション終了時に1件以上あれば&KENSU>0でBAT0811を起動する。マクロ内のエラーメール本文が\\Server2\kanri\AS400設定\出荷指示書発行\デンソー機工品番紙(ロット№付).xlsという実サーバーパスをそのまま記載しており、本リポジトリのsource/shipping/出荷指示書発行/フォルダがそのミラーであることも確認できる。
(出典: 品番紙印刷(ロット№付).xlsm VBA実測; itts15r.md「BAT0811 / BATCH00 chain」節; pilot_MENUW1.md)
JSBS09 出荷指示書発行(号口)との違い
JSBS09 はJSBS08と別の独立CLで、ITSJ05R を呼ぶ。JSBS08が「出荷・組付指示書発行」という全パイプライン(単品出荷品も組付品も両方処理)であるのに対し、JSBS09(ITSJ05R)は「号口」区分専用にITSJ01R をPMKBN='G'で呼び、日付判定にCLMPではなくDCMP(DKカレンダー)を使う点が異なる。(出典: itsj05r.md; menuj1-open-questions.md #84)
3. 出荷準備
JSBS10 号口出荷準備完了入力(ITJM79R)
MENUJ1オプション10。号口(JUD605=51〜69)の受注1件について、「生産ラインが出荷準備を完了した」ことを記録するだけの小さな画面。サブファイルなし、作業者コードサインオンなし、証跡プリントなし、在庫演算も一切なし — 4節のITND50R(出荷入力)と比べてはるかに単純。(出典: itjm79r.md「Purpose」節)
記録する内容:
| フィールド | 内容 |
|---|---|
JUKUED(打切区分) | = 8(生産完了)にスタンプ |
JUKNHI / JUKNSU | 完成日 / 完成数 |
JURNO1/2/3 | ロット№を3つまで、操作者が手入力 |
対象条件: JUKUED=0(未完了)、JUKUST=blank(中止でない)、JUD605が51〜69(号口)のみ。この画面は号口専用で、それ以外の区分は「この受注№はこのプログラムでは消し込みできません」というエラーで弾かれる。(出典: itjm79r.md #CHECK)
出荷準備Excelジョブ Excel/VBA
ディレクトリ source/shipping/出荷準備/ には品番ごとに個別のExcelファイル(例: 047460-0580.xls, 146250-4861.xls など、品番№がファイル名)が大量に格納されている。内容は現物のピッキング・梱包手順書(写真付き、PHOTOサブフォルダあり)、荷姿の説明、納品書の作成手順(「納品書の処理手順(デンソー機工).xls」「同(ヒサダ).xls」「同(浅賀井製作所).xls」「同(アイシン機工).xls」等、取引先ごとに個別の納品書作成マニュアルが存在)、完成ストア入庫前検査(完成ストア入庫前検査/A-様式.xls)、表面処理準備作業(表面処理準備作業/B-様式.xls)のチェックリスト、および全体の「出荷作業手順書」が含まれる。
「出荷準備データ検索.xlsx」もVBAなしの静的ファイルで、中身はAS/400への問い合わせではなく、得意先/品番/品名の一覧表から同フォルダ内の各品番手順書ファイル(および完成ストア入庫前検査/A-*.xls・表面処理準備作業/B-*.xls)へのハイパーリンク集(外部リンク約40件、ExcelのTargetMode="External")だった。いわば「どの品番の手順書がどこにあるか」を引くための手作業インデックスであり、検索エンジンやAS/400クエリではない。(出典: 出荷準備データ検索.xlsx sharedStrings.xml/rels実測)
出荷準備/の各ドキュメントは、JSBS10(ITJM79R)が記録する「生産ラインが出荷準備を完了した」という事実の裏側で実際に行われる手作業(ピッキング・梱包・検査・表面処理準備)を支えるデスクリファレンスであり、JSBS10からもJSBS10へも自動的な読み書きは無い——JSBS10はJUKUED=8等のスタンプを打つだけの小さな画面(3節冒頭参照)で、実際の作業手順はこれらのExcel文書に完全にオフシステムで存在する。
品番紙・現品票 — 出荷指示書発行/のExcel/VBA実測
JHMP(受注品番マスター)のJHD033(品番紙要不要)フラグで、品番ごとに「品番紙(品番ラベル/かんばんラベルに相当)」を印刷するかどうかを制御する。(出典: itjm59r.md)
| 値 | 意味 |
|---|---|
| 0 | 作成しない |
| 1 | 作成する |
| 2 | 作成し、確認者の欄を追加 |
| 100 | 作成し、ロット№の印刷 |
この設定は JSBS45(ITJM59R 品番紙情報入力)画面で保守する。実際の品番紙印刷そのものはAS/400側ではなくPC(Excel)側で行われる(原文コメント引用: 「09/11/03 変更 デンソー機工向けのすべての号口品に品番紙が要るようになったため、デンソー機工の製品についてはAS400側が作成しない設定になっていてもPC側で要るように変更するようにした」)。この引用は品番紙印刷(ロット№付).xlsm内の09/10/30付変更履歴コメントとほぼ同一文面で、VBA側の記述として直接確認できる。
- 品番紙は号口製品につける品番ラベル。生成経路が2つある:
- 出荷指示発行時(BAT0109 =
出荷指示書発行.xlsm): JUDPP1の号口(G)行から「品番紙データ」xlsを作成しメール添付するだけ(後述、印刷はしない)。 - 生産完了時(BAT0811 =
品番紙印刷(ロット№付).xlsm): ITTS15R(号口の作業指示完成入力、MENUW1オプション11、JSBS08系とは別サブシステム)がJHD033=100の品番についてSJDPP3へ1行書き、セッション終了時にBAT0811がロット№入りラベルをA4に7列でレイアウトしてその場で印刷する。原紙が無い品番は印刷せず、担当者へエラーメールを送る(デンソー機工品番紙エラー通知)。
- 出荷指示発行時(BAT0109 =
- 現品票は
出荷指示書発行.xlsm(BAT0109)が出荷指示書と同じJUDPP1データから生成する別の帳票。JUDPP1の1列目が"A"(在庫情報)の行だけを対象に、得意先/区分("単品製品"固定)/指示品番/指示品名/入出庫日/入庫数/出庫数/棚番を転記して印刷する——出荷指示書(客先向け)ではなく、倉庫の棚での入出庫を示す社内タグという性格が読み取れる。出力先の様式ファイル現品票.xlsxは出荷指示書.xlsxと並んでマクロから参照されるが、本リポジトリの出荷指示書発行/フォルダには現品票.xlsxの実体が存在しない(データギャップとして未解明事項に追加)。
source/shipping/出荷指示書発行/配下には他に「デンソー機工品番紙.xlsx」(マスタ原紙一覧、マクロ無し)・「品番紙個別印刷.xlsm」がある。後者はBAT系とは無関係の手動ツール: 操作者が「入力画面」シートに品番と必要枚数を最大8件手入力し、ボタンでマスタ原紙から品番紙をA4に割付印刷するだけで、AS/400ファイルもメールも一切扱わない(原本が見つからない品番はメッセージボックスで警告するのみ)。既存の1回限りの追加印刷・再発行に使われるとみられる。デンソー機工品番紙_<受注№>[_軍次].xlsという日付・受注№付きファイルはこのツールまたはマスタ原紙の出力スナップショットで、いずれもVBAを含まない。(出典: 品番紙個別印刷.xlsm VBA実測 Sub Main)
実業務手順書で解明 — デンソー機工向け品番紙の現場運用を記した2008年作成の社内手順書「デンソー機工 品番紙にロット№記入」(作成者: 新実、現ヒアリング回答者の新實さんと同一人物と見られる)には、実際のタグ書式が図示されている: 品番:B8021-57602/ロットNO:(作業指示書のロット№を転記)/梱口 個/仕入先名 ㈱板倉製作所。手順は「メッキ完了後、東工場2Fへ移動→作業指示書のロット№を品番紙に手書きで転記し箱数分すべてに添付→出荷専用の指定箱(2008-01-17時点は緑1号箱・200個入り、変更の可能性ありと注記)に移し替えて品番紙を付け替える」という2段階。この2008年時点の手順は手書きでロット№を記入する運用であり、本節前段のVBAコメント引用「09/11/03変更 デンソー機工向けのすべての号口品に品番紙が要るようになった」による自動化(BAT0811によるロット№印刷)は、この手書き運用より後に導入されたものと見られる。(出典: source/work-procedures/作業手順書/デンソー機工 品番紙にロット№記入.doc参照)
品番紙データは「メール定期自動送信」ジョブでも定期的に添付ファイルとして送信されている(添付ファイル/*_品番紙データ.xls、6節参照)——これは出荷指示書発行.xlsmのSub JOB_Hinbansi/Hinbansi_Data_Sendが生成するもので、BAT0109(出荷指示発行)が走るたびに号口(G)かつ入り数に対して端数のある品番だけを対象に作成される(6節で詳述)。
4. 出荷実績 — SSBS01 出荷入力(ITND50R)
いつ・誰が記録するか
MENUS1(出荷管理サブシステム)オプション1「出荷入力」。生産完了した受注(JUKUED=8、つまり出荷準備が済んだ状態)に対して、実際に出荷したという事実を記録する画面。操作者コード(SGMPマスタ)のサインオンが必須。(出典: itnd50r.md「Purpose」節、画面フローGMRD)
何を記録するか(GM2詳細画面の入力項目)
| 項目 | フィールド | 備考 |
|---|---|---|
| 出荷数 | WSNOSU→JUNOSU | 受注残数を超える入力は不可(MSG,7) |
| 伝票区分 | WSKUDE→JUKUDE | 1桁目=得意先/板倉どちらが品番記入か、2桁目=区別無/試作/号口 |
| 伝票№ | WSNOTD→JUNOTD | 客先伝票№。操作者が手入力(システムによる自動採番は無い) |
| 出荷日 | WSNOHI→JUNOHI | 稼働20日以内、カレンダーマスタ(CLMP)に存在する日付のみ、締め済み月以前は不可(SIMEBIガード、下記callout参照) |
| 打切区分 | WSKUED→JUKUED | 0=継続(分納継続)/9=打切(出荷完了) |
| 完成度 | WSKNDO→JUKNDO | 追加モードでは自動100固定 |
上表「出荷日」の「締め済み月以前は不可」という検証は、NOHIXX IFLE SIMEBI(作業変数SIMEBI=得意先のTK1P.T1DYSM=締日)による日付比較で実現されている。この検証の設計意図はこれまで文書化されていなかったが、新實さんの回答で判明した——「基本的に請求済みの期間では入力できないようにするためのもの」。つまり単なる日付妥当性チェックではなく、締切済み会計期間への遡及出荷入力を防ぐためのガードである。
これに関連し、ITND50Rには既知の潜在バグがあった: TK1Pレコードの無い得意先の受注を処理すると、直前に処理した別の受注の締日が誤って引き継がれる可能性がある(SIMEBIは#CLEARで一度だけ0初期化されるのみで、CHAINT1MR失敗時にELSEでのリセットが行われないため。source/as400-admin/transport-tooling/ITLIBS/ITND50R.txt 458-463行目)。新實さんはバグの実在を明示的に確認したうえで、「TKMPとTK1Pは毎月レコードが一致するようになっており、JUDPの得意先コードはTKMPを参照して入力するため、その現象は起こりにくい」(運用による回避)としつつ、「発生の可能性はゼロではないので、修正できれば修正したほうが良い」と回答した。
当方の対応状況: 既に修正済み。移植版pilot/app/src/menus1/shipmentEntry.ts:309-320は得意先ごとにTK1Pを都度SELECTし、ヒットしなければガード自体を掛けない実装になっている(pilot/DEVIATIONS.md #36として逸脱登録済み)。持ち越しは構造的に不可能(値がリクエストスコープのローカル変数)。回帰テストpilot/app/test/menus1/itnd50.test.ts:485-506が、TK1Pのある受注でブロックされた後にTK1Pの無い受注が通ることを固定している。
機械的スイープ: TK1P(T1MR)をCHAINする全9本(ITND50R/ITS995R/ITS994R×2/ITS996R/ITJM38R/ITJM38RA/ITS001R/ITS001RX1)を点検し、ELSEリセット漏れはITND50Rのみと確認——他はすべてZ-ADD*ZEROで作業フィールドを明示的にリセットしている(ITS995Rは自レコード更新パスのため対象外)。同種の潜在バグは他に存在しない。
docs/feedback/hearing/2026-07-29-niimi-hearing-sheet.md参照)
source/shipping/出荷指示書発行/伝票№未入力チェックリストメール送付.xlsmはJUDPQ7.xls(RPG ITND06Rが書き出す「受注データTO PC FOR 伝票№未入力チェック」ステージング)を読み、「出荷入力が終了しているが伝票№が入力されていないもの」を当月+前月分だけ抽出して一覧化し、メール添付で担当者へ送付する。analysis/out/edges.csvが示すとおりBACKUP02(BACKUP02CPも同一)から呼ばれるCLバッチの一部であり、BACKUP02自体はhearing.html A3で確定済みの日次06:30チェーン(LSTPRT01→SCD02→SCDCK02→BACKUP02)の末端。このExcel側の受け皿こそ本節のメール自体であり、daily-rhythm.html A3(19本連鎖表・12番目「伝票№未入力チェックリストメール送付」)で送信時刻06:32〜07:22頃・送付先まで既に確定している——「実行頻度・時刻不明」ではなく、AS/400側(BACKUP02経由のITND06R)とWindows側(本メール)が同一の06:30チェーンの両端だったというだけ。
(出典: 伝票№未入力チェックリストメール送付.xlsm VBA実測 Sub Main; analysis/out/schema.sql「JUDPQ7」コメント; analysis/out/edges.csv「BACKUP02,call,ITND06R」; hearing.html A3; daily-rhythm.html A3)
4つのモード(機能キーで切替):
- 追加
生産完了済み受注に対して初めて出荷を記録する。前提条件: JUKUST≠'D'(中止でない)・JUNOHI=0(未出荷)・JUKUED=8(生産完了済)・JUD104≠9(在庫引落未完了は不可)。 - 修正
既に入力済みの出荷内容を訂正する。プルーフリストに前/後2行で印字される。 - 中止補償
中止(キャンセル)済み受注に対する補償出荷を記録する。 - 削除
出荷入力を取り消し、受注を未出荷状態に戻す。
各モードで受付前提条件が異なる。詳細は pilot/spec/itnd50r.md「Validations」節を参照。トランザクションごとにQPRINT(出荷入力プルーフリスト)へ証跡が印字される(作業内容/受注№/出荷日/出荷数/打切区分/伝票№/伝票区分/受注品番/得意先/注残数の列)。
納品書・受領書の印刷について
ITND50R自体はプルーフリスト(内部証跡)のみを印刷し、得意先向けの納品書・受領書は発行しない(仕様書に明記された事実)。推測 得意先向け納品書は前述の「出荷準備」Excelジョブ側(取引先別の納品書作成手順書、3節参照)で別途作成されると見られるが、具体的なタイミング・ツールは特定できず未解明事項5。
【ヒアリングで判明】「出荷準備Excelジョブ側で別途作成」という上記の推測は誤りだったと確定した——新實さんの回答: 「基本的に納品書は客先指定納品書が中心。受注後客先より印刷されたものを渡されるか、データで受け取って印刷するものが多い。手書き伝票だが客先指定のもの、当社の手書き伝票と混在しているが、納品書をAS400から発行することはない。製品が完成し(在庫含む)納期が一定期間内になったら、出荷指示書がAS400より発行され、それを元に納品書を手書きで記入、出荷指示書が営業課に回収され、営業課で出荷入力される」。つまり得意先向け納品書はAS/400からもExcelジョブからも発行されず、客先支給または当社手書きのいずれかであり、AS/400が発行する出荷指示書は納品書そのものではなく、営業課が手書き納品書へ転記するための社内トリガーに過ぎない。(出典: 新實さん、2026-07-23ヒアリングシート回答C、docs/feedback/hearing/2026-07-23-niimi-hearing-sheet-C.md参照、hearing.html C9)
5. 在庫展開 — SSBS02 出荷データ在庫展開(ITND01R)
【ヒアリングで判明】SSBS02の実行頻度・タイミングについて、新實さんの確認により運用ルールが判明した: 「SSBS01を実行した後に、SSBS01実行者がSSBS02を実行することになっています。基本的に1人が1日1回実行します。」——つまり自動化された日次バッチではなく、SSBS01を実行した本人がその都度続けて手動でSSBS02を実行するという担当者ベースの運用ルールであり、実務上は1日1回のペースで回されている。(出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-remaining-A-questions-reply.md参照)
実業務手順書で解明 — 2001年作成の社内手順書「データフロー(出荷処理)」の図には、出荷入力(3-1)と出荷データ在庫展開(3-2)の間に「15:00〜17:00の間、データの不整合発生中」という注記が明記されている。当時から出荷入力と在庫展開の間に日次の時間差ウィンドウが存在し、その間は出荷済みでも在庫が未反映という状態が業務上想定されていたことがわかる——上記のヒアリングで判明した「1人が1日1回実行する」運用の、より具体的な歴史的裏付けと見られる。(出典: source/work-procedures/作業手順書/データフロー(出荷処理).doc参照)
「展開」とは何をしているか
「出荷が確定した受注」を一括でスキャンし、完成品在庫(JHMP)と部品在庫(BHMP)をまとめて減算するバッチ処理。画面上の説明文をそのまま引用(ITND01D.txt):
現在庫数から出荷した製品数を減らします。
組付する製品は、部品に直して部品の現在庫数を修正します。
「部品に直して」の部分が「展開=BOM展開」に相当する処理で、構成マスタ(KSMP)をたどって組付製品を構成部品に分解し、各部品の現在庫数(BHZASU)を消費数量(=構成数量×出荷数量)だけ減算する。(出典: itnd01r.md「#KSMP — BOM component walk」節)
対象の選び方
処理対象は「JUDL31」という論理ファイル(JUDPをキーJUNOJUで見たビュー)で、あらかじめ「JUNOHI>0(納入日あり)かつJUKBWN=blank(未処理)」の行だけに絞り込まれている。さらにRPGコード側で下記3条件すべてを満たす行だけが対象:
JUKBWN = blank(未処理、二重チェック)JUKUED = 9(打切区分=9。値9の業務的な意味はソースにコメントが無く、「出荷確定/完了」という意味だと推測されるが未解明 — 未解明事項1)JUKUST ≠ 'D'(中止でない)
処理後はJUKBWN(出荷処理区分)に'E'をスタンプし、二重処理を防ぐ(同じ受注が2回展開されることはない)。
在庫減算の対象・条件
- 完成品在庫(JHZASU)とS/A在庫(JHD091)の減算は、
JHD062(指示形態)が51〜69の範囲のときのみ行われる(この範囲の業務的な意味も未文書化 — 未解明事項2)。範囲外の受注は最終出荷日(JHEDSH)だけ更新され、在庫数は変わらない。 - 組付製品は構成マスタ(KSMP)を辿って部品ごとにBHZASU(部品現在庫数)を減算する。
- 特殊な「S/A状態で出荷される製品」用の例外テーブル(SHN/AHN配列、ハードコードされた品番2件のみ)がある — 拡張時は配列サイズも同時に直す必要がある注意書きがソースコメントに残っている。
実行方法とバックアップ
SSBS02は確認画面1枚だけの一括バッチ(対話的な項目入力は無し、実行キーで開始 or F3で中止のみ)。実行前に自動的に3ファイルのバックアップコピーが取られる(JUDP→JUDPSV, JHMP→JHMPSV, BHMP→BHMPSV)。これが唯一のロールバック手段であり、失敗時は手動でCPYFにより復元する必要がある。実行完了後は「"出荷データ在庫展開"処理が終了しました。」というメッセージが表示されるのみで、エラー時の個別通知は無い(欠品などは静かにスキップされる)。(出典: itnd01r.md「SSBS02C backup copies」節、「Validations」節)
6. 納入形態
出荷準備のExcelジョブ群のファイル名や納品書手順書(3節)から、取引先(デンソー機工、ヒサダ、浅賀井製作所など)ごとに異なる納品書フォーマット・処理手順が存在することが確認できる。推測 各得意先の受入形態(かんばん納入方式か通常納入方式か等)が異なるためと推測されるが、本調査で読んだソース内には「かんばん納入」と「通常納入」を明示的に区別する業務ロジック(フラグや分岐)は見つからなかった(未解明事項6)。
【ヒアリングで判明】「かんばん納入」と「通常納入」を区別する業務ロジックが出荷フロー内に見つからなかったのは正しかった——そもそも板倉側では区別しておらず、システムレベルの分岐ではないことが新實さんの回答で確定した。「客先からのかんばんを納品書として扱っている。通常の納入と同じ。客先から板倉へ一方通行。その指定日にいるだけのかんばんが発行される」「かんばんがあるのは、浅賀井製作所、ヒサダ、アイシンぐらい。デンソープレステックは納品書」。つまり客先が発行するかんばん自体をそのまま納品書として扱っているだけ(客先→板倉の一方通行)であり、それ以外の得意先(デンソープレステック等)は通常の納品書を使うという運用の違いにすぎない。(出典: 新實さん、2026-07-23ヒアリングシート回答C、docs/feedback/hearing/2026-07-23-niimi-hearing-sheet-C.md参照、hearing.html C3)
かんばんという語自体は複数のspec(itgo40r.md, itjm56r.md/57r.md/58r.md, itjm81r.md, itsj81r.md/82r.md/84r.md等)に登場するが、これらは主に受注入力(内示/確定のかんばん情報取り込み)側の話であり、出荷業務そのものの中でかんばんが果たす役割は本ブリーフのソース調査範囲では確認できなかった。
メール定期自動送信ジョブに見える出荷案内らしきもの
source/as400-admin/mail-auto-settei/は出荷業務専用ではなく全社共通のメール自動送信基盤(設計書: 各業務プログラムが「メール本文Excelファイル」を所定フォルダに書き出すと、別プログラムが定期的にフォルダを監視しMailingList.xlsxから宛先を引いて送信する仕組み)。
出荷指示書発行/配下の3本のxlsmマクロを解析し、「メール本文」「添付ファイル」フォルダへ何が書き出されるか実測した。いずれもCells(1,1)=プログラム名(MailingList.xlsx検索キー)/Cells(2,1)=件名/Cells(3,1)=本文/Cells(4,1)=添付フルパス/Cells(5,1)=送信PC/Cells(6,1)=送信ユーザーという共通フォーマットのメール本文ワークブックを作り、実際の送信は別プログラム(本ページの調査範囲外)に委ねる、という同一アーキテクチャだった。
- 品番紙データ(
*_品番紙データ.xls) —出荷指示書発行.xlsm(BAT0109)のSubJOB_Hinbansiが、JUDPP1の号口(G)行のうち入り数に対して端数が出る品番だけを抽出して作成。件名固定「品番紙データの送信」。BAT0109(出荷指示書発行)が走るたびに作成される、つまり号口の出荷指示発行イベント駆動——固定の日次スケジュールではない。 - 伝票№未入力チェックリスト(
伝票№未入力チェックリスト.xlsx) —伝票№未入力チェックリストメール送付.xlsmがJUDPQ7(ITND06R書き出し)から当月+前月の「出荷済みだが伝票№未入力」行を抽出。件名固定「伝票№未入力チェックリストメール送付」。ITND06Rはメニューには現れないがBACKUP02経由で日次06:30チェーン(hearing.html A3)の一部と確定済み——本メール自身がdaily-rhythm.html A3の19本連鎖表12番目。 - 型費重複計上チェックリスト(
型費重複計上チェックリスト.xlsx) —型費重複計上チェックリストメール送付.xlsmがJUDPS7(ITUR08R書き出し)から型費(金型費用)の重複計上らしき行を抽出。出荷業務というより型費・財務側の関心事だが、同じ出荷指示書発行/フォルダに同居しており、同じメール基盤・同じ受注データ(JUDP派生)を使っている。ITUR08Rも同じくBACKUP02経由で日次06:30チェーン入り——本メール自身がdaily-rhythm.html A3の19本連鎖表3番目。
号口指示納期修正リスト送付.xlsm(SJDPP7を読み材料担当へメール送付、フォルダは作業指示書発行2/)が見つかっており、2001年作成の社内手順書「データフロー(号口品)」にも同種の帳票「号口部品作業指示納期修正リスト」(*変更内容は納期の早出しのみ、との注記付き)が描かれている。つまり本節が精査した出荷指示書発行/・出荷準備/の2フォルダには痕跡が無かっただけで、レポート自体はその外(作業指示書発行2/)に現役で存在する、というのが正確な位置づけ。
(出典: 出荷指示書発行.xlsm/伝票№未入力チェックリストメール送付.xlsm/型費重複計上チェックリストメール送付.xlsm VBA実測 各Sub Main; source/work-procedures/作業手順書/データフロー(号口品).doc参照)
これらは出荷案内メール(得意先向け)ではなく、社内向けの業務連絡メールと見られる(メールの宛先がMailingList.xlsx=社内配布リストであることから)。得意先向けの出荷案内(ASN等)に相当する仕組みは本調査では発見できなかった(未解明事項12)。トラック便・納入時間に関する具体的な設定・マスタも本調査範囲では見つからなかった(未解明事項)。
7. 特殊ケース
再発行(JSBS14/24/25/26)
出荷・組付指示書の再発行は目的別に4種類のCLに分かれている:
| CL | 対象プログラム | 対象データ | 用途 |
|---|---|---|---|
| JSBS14 | (受注票再発行、本ページ範囲外) | JUDP | 受注票の再発行(受注担当領域) |
| JSBS24 | ITKM18R | KMDP | 組付指示書再発行(まとめ指示専用) |
| JSBS25 | ITSJ51R | JUDP→JUDPP1 | 出荷指示書の再発行 |
| JSBS26 | ITSS04R | JUDP/BJDP | 組付指示書の再発行(通常受注) |
JSBS25 出荷指示書再発行: 受注№を1件入力すると、既存の出荷指示内容(指示品番/品名/納期/指示数)を確認表示してから、ITSJ01R経由でJUDPP1に1件ステージングし、&KENSU>0ならBAT0109(Excel印刷)を起動する。JSBS08の全パイプラインを回さず1受注だけをピンポイントで再印刷できる小さな対話プログラム。(出典: itsj51r.md)
JSBS26 組付指示書再発行: 受注№を入力すると、既発行か未発行かをBJDP(組付部品状況)のBJKBWKから判定し、未発行ならBJD101=9/BJKBWK='S'(新規発行として在庫引当からやり直し)、既発行ならBJD101=1/BJKBWK='F'(既存引当のまま再発行)にスタンプし直すだけ。印刷そのものはこのプログラムでは行わず、次回のJSBS08C(オプション1-8)実行時に初めてBAT0108が呼ばれる — つまり「再発行フラグを立てるだけ」で即座には印刷されない設計。まとめ指示(BJD601=31)の受注はJSBS26では拒否されJSBS24(ITKM18R)に誘導される。(出典: itss04r.md「No &KENSU output」節)
分納出荷
打切区分(JUKUED)が「0=継続(未打切)」の状態で出荷入力すると、受注は分納継続扱いとなり、同じ受注に対して複数回出荷入力ができる。組付側の分納再引当はJSBS08Cフェーズ5b(ITSS03R)が担当し、BJDPQ4という専用の作業キューテーブルで前回までの分納引当状況を管理する。(出典: itnd50r.md #UPDAT; jsbs08-seam-and-stubs.md §A.7)
直送
推測・未解明 直送(得意先から板倉を経由せず直接第三者へ出荷する形態)に相当する明示的なフラグ・分岐は今回読んだソース内には見当たらなかった(未解明事項8)。
【ヒアリングで判明・部分的】明示的なフラグ・分岐が見つからなかったのは正しいと確定した——新實さんの回答: 「直送は少ないがある。いずれも客先指定伝票と記憶している(営業課に確認要)。特に通常納品と区別することはしていない(納める先が違うだけ)」。つまり直送はまれだが実在し、システム上は通常出荷と同一のフロー(客先指定伝票)で処理され、単に届け先が違うだけで特別な分岐・フラグは設けられていない。ただし新實さん自身「記憶している」という留保付きの回答であり、確定には営業課への追加確認が必要と明言された(100%確定ではない)。(出典: 新實さん、2026-07-23ヒアリングシート回答C、docs/feedback/hearing/2026-07-23-niimi-hearing-sheet-C.md参照、hearing.html C9)
出荷訂正(間違えた場合の是正)
SSBS01(ITND50R)の「修正」「削除」「中止補償」の3モードがそのまま訂正手段になっている(4節参照)。ただし以下の制約に注意:
- 修正・削除は「累積処理」(月次締め)が完了すると一切できなくなる(
JUKBWN≠blank→ MSG,14)。締め後の訂正は別ルート(社外/経理との調整)が必要と推測される。 - 在庫が既にSSBS02(在庫展開)で減算済みの場合、SSBS01側の削除・修正では在庫は自動的に戻らない(ITND50Rは在庫演算をしないため)。出荷を取り消したい場合、在庫の復元は別途手動対応が必要と見られる推測。【実資料で判明】 2008年のAS/400開発者自身のフロー分析に「在庫の増減は、在庫の入庫出庫では行われず、完成、出荷を基準に行われる。したがって不良等の通常以外の入出庫があった場合の連絡がないと確実に差異が発生してしまう」という明記があり、この手動対応の必要性は推測ではなく設計時からの既知の前提だったことが確認できた。当時から実地棚卸と理論在庫の差異を計算する専用パイプライン(ITGZ07R〜ITGZ11R)が運用されている。詳細はproduction.html §6.6参照。(出典: source/dev-archive/20081030_号口品棚卸在庫合わせフロー/号口品棚卸在庫合わせフロー 20081030 .xls参照)
- 修正モードのプルーフリストには前後(前/後)2行が印字され、変更内容の監査証跡が残る。
8. 実データスナップショット
ここまでの記述は仕様書に基づく。ここでは実際の7年分のAS/400実データ(PostgreSQL、587,000行)にSELECTクエリを実行し、出荷業務が実運用でどう現れているかを確認する。JUDP全体は45,545行。実運用データの主要な時期は2018年〜2026年(記載時点で7月)——2001〜2017年分は年数件〜十数件と極めて少なく、システム移行前後のテスト/サンプルデータと見られる。
8.1 年別出荷実績(JUNOHI基準)
| 年 | 出荷件数 | 出荷数量計 |
|---|---|---|
| 2018 | 3,550 | 90,842 |
| 2019 | 4,567 | 223,234 |
| 2020 | 4,711 | 178,064 |
| 2021 | 4,831 | 200,143 |
| 2022 | 4,576 | 210,383 |
| 2023 | 3,912 | 177,128 |
| 2024 | 4,412 | 200,743 |
| 2025 | 4,014 | 177,336 |
| 2026(7月時点) | 1,964 | 56,394 |
JUDP全45,545行のうち36,537行(80.2%)が出荷済み(JUNOHI>0)で、残り9,008行は未出荷・進行中の受注明細。年間出荷件数は概ね4,000〜4,800件/年で安定しており、2020〜2021年がピーク。
8.2 打切区分(JUKUED)の実分布
| JUKUED | 用語集の意味 | 件数 | 割合 |
|---|---|---|---|
| 9 | 出荷確定・打切 | 36,536 | 80.2% |
| 0 | 継続(分納可) | 8,904 | 19.5% |
| 8 | 生産完了(未出荷) | 105 | 0.2% |
8.3 中止区分(JUKUST)のNULL率
8.4 分納の実態
受注データ1行=1受注明細という構造上、同一受注が複数回に分けて出荷される「分納」がJUDP上でどう現れるかを、親受注№(JUNOJO)でグルーピングして確認した。JUNOJOが自分自身の受注№(JUNOJU)と異なる——つまり明示的に別の親を持つ「分割された子行」——は45,545行中175行(0.4%)のみで、複数行を持つ親グループは151件(129件が2行、17件が3行、1件が5行)にとどまる。JUKUED=0(継続)が19.5%を占める一方で、実際に複数のJUDP行に分かれる分納は稀——大半の「継続」状態の受注は、同一行のまま出荷入力(SSBS01)を繰り返すことで分納を処理しており、行を分割する分納は例外的なケースにとどまると見られる。
参考: 未解明事項§9(まとめ指示の実運用影響範囲)に関連して、KMDP(まとめ指示データ)の実件数を確認したところ378行存在した。まとめ指示は実運用で実際に使われている実態があり、移行版でこの経路が未実装(W6スコープ)であることの潜在的な影響範囲は少なくとも378件規模ということになる(0件ではない)。
8.5 リードタイム(受注日→出荷日)
JUJUHI(受注日)からJUNOHI(出荷日)までの日数を、明らかな日付異常値(365日超、61件・0.17%、AS/400側の不正な日付起因と見られる)を除いた36,343件で集計:
| 指標 | 値 |
|---|---|
| 中央値(p50) | 17日 |
| 90パーセンタイル(p90) | 47日 |
| 平均 | 27.4日 |
中央値17日は号口の標準的な補充サイクルとしては妥当な範囲。ただしJUJUHIは号口の自動採番受注(生産ページ§3.1で述べた99xxxxxx受注№)も含む可能性があり、厳密な「顧客が発注した日〜出荷日」ではなく「JUDP行作成〜出荷」に近い可能性がある点は留意(要現場確認)。
8.6 出荷先の実データ(JUCDTK上位)
| 得意先コード | 得意先名 | 出荷件数 |
|---|---|---|
| 20 | 株式会社デンソープレステック | 12,394 |
| 5000 | トヨタ紡織株式会社 | 11,234 |
| 30 | 株式会社浅賀井製作所 | 4,340 |
| 6000 | アイシンシロキ株式会社 | 2,804 |
| 16 | 株式会社アイシン 試作工場 | 1,399 |
件数トップは冒頭リード文で名前が挙がる3社(トヨタ紡織・アイシン・デンソー)のうちデンソー系(デンソープレステック)で、僅差でトヨタ紡織が続く。3位以下は浅賀井製作所・ヒサダ・佐藤工業・山崎工業・鈴木鈑金工業所・エクセディ・コデラダイナックスといった板金加工の協力会社群が並び、実際の出荷先はリード文が示唆する大手3社だけでなく裾野の広いサプライチェーンであることが実データから確認できる。
集計に使ったSQL
-- 8.1 年別出荷実績
SELECT (junohi/10000)::int AS year, count(*), sum(junosu) FROM judp WHERE junohi>0 GROUP BY 1 ORDER BY 1;
SELECT count(*), count(*) FILTER (WHERE junohi>0) FROM judp;
-- 8.2 打切区分
SELECT jukued, count(*) FROM judp GROUP BY jukued ORDER BY count(*) DESC;
-- 8.3 中止区分NULL率
SELECT jukust, count(*) FROM judp GROUP BY jukust ORDER BY count(*) DESC;
-- 8.4 分納・まとめ指示
SELECT count(*) FILTER (WHERE junojo = junoju), count(*) FILTER (WHERE junojo <> junoju AND junojo>0)
FROM judp;
SELECT count(*) FROM kmdp;
-- 8.5 リードタイム
WITH d AS (
SELECT to_date(jujuhi::text,'YYYYMMDD') od, to_date(junohi::text,'YYYYMMDD') sd
FROM judp WHERE jujuhi>20000101 AND junohi>20000101 AND junohi>=jujuhi
)
SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY sd-od) FILTER (WHERE sd-od<=365),
percentile_cont(0.9) WITHIN GROUP (ORDER BY sd-od) FILTER (WHERE sd-od<=365),
avg(sd-od) FILTER (WHERE sd-od<=365)
FROM d;
-- 8.6 出荷先
SELECT jucdtk, count(*), sum(junosu) FROM judp WHERE junohi>0 GROUP BY jucdtk ORDER BY count(*) DESC LIMIT 10;
SELECT tkcdtk, trim(tknmkj) FROM tkmp WHERE tkcdtk IN (20,5000,30,6000,16);
9. 関連マスタ・帳票一覧
主要テーブル
すべて analysis/out/schema.sql に定義済み。
| テーブル | 役割 |
|---|---|
judp | 受注データ。出荷情報(納入日junohi/納入数junosu/打切区分jukued等)も同一レコードに同居 |
jhmp | 受注品番マスター。完成品の現在庫数(jhzasu)、S/A在庫(jhd091)、品番紙設定(jhd033)、最終出荷日(jhedsh)等 |
bhmp | 部品品番マスター。部品の現在庫数(bhzasu) |
ksmp | 構成マスター(BOM)。組付製品→部品の展開に使用 |
zkdp | 試作品在庫データ。在庫引当エンジン(PBZKUPR/PBZKCKR)が操作 |
bjdp | 組付部品状況。組付指示書再発行のスタンプ対象 |
judpp1 | 出荷指示書印刷用ステージングテーブル(BAT0109が読む) |
bjdpp2 | 組付指示書印刷用ステージングテーブル(BAT0108が読む) |
bjdpq2/q3/q4 | まとめ指示・引継ぎ・分納再引当それぞれの作業キュー(処理回数管理) |
kmdp/kmdpp1 | まとめ指示データおよびその印刷ステージング(現状W6未実装) |
帳票一覧
| 帳票 | 発行プログラム | 内容 |
|---|---|---|
| 出荷指示書 | BAT0109=出荷指示書発行.xlsm Excel(JSBS08/09/25経由) | 出荷対象受注の指示品番・品名・納期・指示数・得意先名等(JUDPP1の"A"以外の行) |
| 現品票 | BAT0109=出荷指示書発行.xlsm Excel(同上、Sub JOB_Genpinhyou) | 倉庫棚の入出庫タグ(得意先/入庫数/出庫数/棚番、JUDPP1の"A"行のみ) |
| 組付指示書 | BAT0108 Excel(JSBS08/26経由) | 組付対象の指示内容 |
| まとめ指示書(組付) | BAT0108C Excel | まとめ指示分の組付指示 |
| 組付部品引当在庫の引継ぎ指示書 | BAT0108A(常時)/BAT0108B(分納分) Excel | 引当在庫の引継ぎ状況 |
| まとめ再引当後帳票 | BAT1001 Excel | まとめ指示の再引当結果 |
| 出荷入力プルーフリスト | ITND50R(QPRINT直接) AS/400 | 出荷入力の証跡(追加/修正/中止補償/削除) |
| 構成チェックリスト | ITKS06R(QPRINT直接) AS/400 | 構成の累積チェック |
| 品番紙(ロット№付・号口) | BAT0811=品番紙印刷(ロット№付).xlsm Excel(MENUW1オプション11・ITTS15R経由、SJDPP3) | 生産完了時に印刷される現品ラベル(ロット№焼き込み) |
| 品番紙(個別・手動) | 品番紙個別印刷.xlsm Excel(手動ツール、AS/400非連携) | 手入力品番の追加印刷・再発行 |
| 納品書 | 出荷準備Excelジョブ群(取引先別手順書、マクロ無し) Excel | 得意先向け納品書(作成は手作業。【ヒアリングで判明】AS/400からは発行されず客先指定伝票または当社手書き。製品完成(在庫含む)+納期が一定期間内になると出荷指示書がAS/400より発行され、それを元に納品書へ手書きで転記、出荷指示書は営業課が回収して出荷入力する、という社内トリガーの役割。出典: 新實さん、2026-07-23ヒアリングシート回答C、hearing.html C9) |
注: BAT系はすべて \\SERVER2\KANRI\BATCH\<name>.XLSM を呼ぶ薄いCLラッパー。BAT0109とBAT0811の2本はExcelマクロ本体(VBA)が本リポジトリ出荷指示書発行/フォルダに実在することを確認済み(実VBAで解明、上記2節参照)。BAT0108/BAT0108A/BAT0108B/BAT0108C/BAT1001の5本は今回の調査範囲では見つからず、従来通りリポジトリ外(ネットワーク共有上のみ)と扱う。移行版アプリでは「印刷シーム(PRINT-SEAM)」として、ステージングテーブルへのINSERTとログ出力のみを行い、実際のExcel起動は延期している。
10. 用語集
- 出荷指示書
- どの受注をどれだけ・いつまでに出荷するかを現場に示す帳票(単品出荷品向け)
- 組付指示書
- 部品を組み立てて出荷する製品向けの指示書
- まとめ指示
- 複数の号口受注をひとまとめにして1回の組付指示にする仕組み(指示形態=31)
- 号口
- 量産品の受注区分(指示形態51〜69)。試作品と対比される
- 単品出荷品
- 組み立て不要でそのまま出荷する製品(指示形態11〜19)
- 打切区分(JUKUED)
- 0=継続(分納可)、8=生産完了、9=出荷確定・打切
- 中止区分(JUKUST)
- 'D'=受注キャンセル済み
- 出荷処理区分(JUKBWN)
- 在庫展開(SSBS02)が処理済みかどうかのフラグ('E'=処理済)
- 受注処理区分(JUKBWJ)
- 出荷指示発行フローの初回通過フラグ
- 引当(在庫引当)
- 出荷予定分の在庫数量を確保すること。ZKDPで管理、PBZKUPR/PBZKCKRが実処理
- 展開(在庫展開)
- 組付製品を構成部品まで分解(BOM展開)し、完成品/部品それぞれの在庫を減算する処理
- 品番紙
- 現品に貼る品番ラベル(かんばんラベルに相当)。印刷はPC(Excel)側
- 客先伝票№
- 得意先が指定する伝票番号。操作者が手入力、システム自動採番なし
- 分納
- 1受注を複数回に分けて出荷すること
- 直送
- 得意先を介さず第三者へ直接出荷する形態。まれだが実在し、通常出荷と同一のフロー(客先指定伝票)で処理される、届け先が違うだけの扱い。【ヒアリングで判明・部分的】新實さん本人が「記憶している」との留保付きで回答——最終確定には営業課への追加確認が必要(hearing.html C9)
- 印刷シーム(PRINT-SEAM)
- 移行版で「Excel印刷を実行する代わりにログとステージングだけ行う」設計パターン
- ステージングテーブル
- 印刷対象データを一時的に格納し、Excelマクロが読み取るための中間テーブル(JUDPP1, BJDPP2等)
- ALCOBJ/DLCOBJ
- AS/400のファイル排他ロック取得/解放。出荷入力・出荷指示発行等が使用
11. 他業務との接続点
- 受注(納期): 出荷は受注データ(JUDP)そのものに出荷情報を上書きする形で行われるため、受注入力・受注変更(ITJM71R等、受注担当エージェント範囲)が出荷フローの前提データを作っている。受注品番マスター(JHMP)の品番紙設定(JHD033)や入り数(JHD061)も受注担当・出荷担当双方が触るマスタ。
- 生産(完成在庫): 出荷準備(JSBS10)の前提はJUD605指示形態とJUKUED(打切区分)が生産完了を示していること。生産完了処理(生産管理エージェント範囲と推測)が「出荷できる状態」を作る。
- 売上計上(下流): JUDP.JUSEHI(請求対象年月)はSSBS01の出荷入力時にJUNOHI(納入日)から自動生成され、これが請求書発行(ITS000R/001R/002R、財務エージェント範囲)が参照するキーとなる。「請求済」を示す独立フラグはJUDPに存在せず、請求済みかどうかはTK1P.T1DYSM(締日)による日付ガードのみで守られている(出荷入力(ITND50R)の日付検証ロジックがこの締日を参照)。つまり出荷担当が誤って締め済み月の出荷日を入力しようとすると弾かれる、という形で財務側の整合性が担保されている。(出典: menus1-open-questions.md)
- 得意先マスタの納入先情報: 得意先名(TKMP.TKNMKJ/TKNMRJ)は出荷入力画面・出荷指示書に表示されるが、個別の「納入先」を得意先とは別に持つマスタは今回のスキーマ調査(
analysis/out/schema.sqlgrep)では見つからなかった。得意先コード(TKCDTK)=納入先という1:1の運用と推測される推測(未解明事項7)。 - 製品単価・見積(ハンドオフ): SSBS04/05/12/17/18(製品単価)は本ページの範囲外。ただしJUDPP1の
p1nmtk(得意先名)等の表示用フィールドはTKMPを共通参照しており、マスタレベルでは単価担当領域と重複する。
JUKUED=9の正確な業務的意味(打切区分=9が「出荷確定」を意味するのか、他の値との使い分けがあるのか)。【実資料で判明】 2009〜2010年の実際の受注内容変更ログ(ITJM38R)を確認したところ、打切区分=9のレコードは全640件が例外なく完成度=100%と対応しており(打切区分0または8のレコードには完成度100%はほとんど無い)、「JUKUED=9=出荷確定・完了」という解釈が実データから強く裏付けられた。(出典: source/dev-archive/20101020_中止・数減処理に伴う在庫戻し/受注内容変更ログ(ITJM38R).xls「ログ」シート参照)(出典: itnd01r.md Open Questions #1)- JHD062(指示形態)51〜69の範囲の業務定義 — 在庫展開の対象/対象外を分ける唯一の基準だが、範囲の意味そのものが未文書化。(同spec #2)
- シャフト除外(品番先頭5桁=61155)ルールの現況 — 2008年のコメントに反して現行コードに対応するガードが見当たらない。(同spec #3)
- JHMP+BHMP両方の在庫減算漏れ(2020年変更コメントと実装の不一致、S/A新規登録品でBHZASUが減算されないケースがある)。(同spec #4)
正式な得意先向け納品書がどのツール・タイミングで発行されるか— 実VBAで一部解明: 出荷準備/配下の取引先別「納品書の処理手順(〇〇).xls」4本すべてにVBA/XLMマクロが無いことをoletoolsで確認済み。つまり納品書作成に自動化ツールは関与しておらず、完全な手作業。(出典: 出荷準備/配下olevba一括実行) 【ヒアリングで判明】(解決済み)AS/400は納品書を発行せず、常に客先指定伝票または当社手書きで作成される。製品完成+納期一定期間内で出荷指示書がAS/400より発行され、それを元に手書きで納品書へ転記、出荷指示書は営業課が回収して出荷入力する——出荷指示書は納品書そのものではなく社内トリガー。詳細は4節参照。(出典: 新實さん、2026-07-23ヒアリングシート回答C、docs/feedback/hearing/2026-07-23-niimi-hearing-sheet-C.md参照、hearing.html C9)- 【ヒアリングで判明】かんばん納入 vs 通常納入の業務ロジック上の区別が出荷フロー内に見当たらない(受注側の「かんばん情報取り込み」との切り分けが必要)——見つからなかったのは正しく、そもそも板倉側では区別していない。客先発行のかんばん自体を納品書として扱う(客先→板倉一方通行)だけで、対象得意先は浅賀井製作所・ヒサダ・アイシン、デンソープレステックは通常の納品書。詳細は6節参照。(出典: 新實さん、2026-07-23ヒアリングシート回答C、
docs/feedback/hearing/2026-07-23-niimi-hearing-sheet-C.md参照、hearing.html C3) - 得意先ごとの納入先マスタの有無(TKMP以外に納入先を持つ場所が見つからなかった)。
- 【ヒアリングで判明・部分的】直送の有無・仕組み——「直送は少ないがある。いずれも客先指定伝票と記憶している(営業課に確認要)。特に通常納品と区別することはしていない(納める先が違うだけ)」。まれだが実在し、通常出荷と同一フロー(客先指定伝票)、届け先が違うだけで特別な分岐は無い。ただし新實さん自身「記憶している」との留保付きで、営業課への追加確認が必要(未確定)。詳細は7節参照。(出典: 新實さん、2026-07-23ヒアリングシート回答C、
docs/feedback/hearing/2026-07-23-niimi-hearing-sheet-C.md参照、hearing.html C9) SIMEBI(締日)引き継ぎバグ: 出荷入力(ITND50R)で、TK1Pレコードの無い得意先の受注を処理すると、直前に処理した別の受注の締日が誤って引き継がれる可能性がある。忠実移植すべきバグか、修正すべきかは要判断。(出典: itnd50r.md Open Questions #1)
完全クローズ: 2026-07-29のヒアリングで新實さんがバグの実在を明示的に確認した(「ご指摘のバグはその通りです」)。TKMPとTK1Pが毎月レコード一致するよう運用され、JUDPの得意先コードはTKMPを参照して入力されるため実運用では起こりにくいが、「発生の可能性はゼロではないので、修正できれば修正したほうが良い」との回答も得た。当方の対応状況は既に修正済み——移植版pilot/app/src/menus1/shipmentEntry.ts:309-320でTK1P未ヒット時はガード自体を掛けない実装(pilot/DEVIATIONS.md#36)、回帰テストpilot/app/test/menus1/itnd50.test.ts:485-506で固定済み。TK1PをCHAINする全9本の機械的スイープでも同種バグはITND50R以外に無いことを確認した。ガードの設計意図(請求済み期間への遡及入力防止)も含め詳細は4節参照。 (出典: 新實さん、2026-07-29ヒアリングシート回答、hearing.html C9、docs/feedback/hearing/2026-07-29-niimi-hearing-sheet.md参照)- まとめ指示(JSBS08フェーズ1・2、W6スコープ)が移行版で未実装であることの実運用上の影響範囲(まとめ指示を使う受注がどの程度あるか、現状の運用に支障が出ていないか)。
SSBS02(在庫展開)の実行頻度・タイミング(都度手動か、日次バッチかはソースからは不明)。— ヒアリングで判明: 「SSBS01を実行した後に、SSBS01実行者がSSBS02を実行することになっています。基本的に1人が1日1回実行します。」自動日次バッチではなく、SSBS01実行者本人が続けて手動実行する担当者ベースの運用(実務上は1日1回)。(出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-remaining-A-questions-reply.md参照)メール定期自動送信の「号口指示納期修正リスト」「品番紙データ」メールの正確な送信先・トリガー条件— 実VBAで解明: 「品番紙データ」メールはBAT0109(出荷指示書発行.xlsmSub JOB_Hinbansi)が号口出荷指示発行のたびに、入り数に対して端数のある品番だけを抽出して生成する(3・6節参照)——固定スケジュールではなくイベント駆動。「号口指示納期修正リスト」は今回の2フォルダ精査では痕跡が見つからず、代わりに「伝票№未入力チェックリスト」「型費重複計上チェックリスト」という従来未把握だった2種の定期チェックメールを新たに確認した(3・4・6節参照)。(出典: 出荷指示書発行.xlsm/伝票№未入力チェックリストメール送付.xlsm/型費重複計上チェックリストメール送付.xlsm VBA実測)- 現品票.xlsx の実体が本リポジトリの
出荷指示書発行/フォルダに存在しない —出荷指示書発行.xlsmがGP_FILE = "現品票.xlsx"として参照するが、同フォルダには出荷指示書.xlsx(様式)しか無い。サーバー上の別フォルダにあるのか、本リポジトリのスナップショット取得漏れかは未確認。現品票の詳細な様式・レイアウトはVBAのフィールド一覧(得意先/区分/指示品番/指示品名/入出庫日/入庫数/出庫数/棚番)からの推定にとどまる。 JUDPQ7を書くITND06R(伝票№未入力チェック)、JUDPS7を書くITUR08R(型費重複チェック)はいずれもメニューツリーに現れず、実行頻度・時刻が不明。日次/夜間のジョブスケジューラ登録による無人バッチと推測されるが、現場のジョブスケジュール一覧が無いと確定できない。— 解決:analysis/out/edges.csvを見ると両方ともBACKUP02(BACKUP02CPも同一)から呼ばれており、BACKUP02自体はhearing.html A3で確定済みの日次06:30チェーン(LSTPRT01→SCD02→SCDCK02→BACKUP02)の末端。その出力(JUDPQ7/JUDPS7)を読むExcel側メール自体がdaily-rhythm.html A3の19本連鎖表の12番目「伝票№未入力チェックリストメール送付」・3番目「型費重複計上チェックリストメール送付」そのもの——実行頻度・時刻とも既に確定済みだった(毎朝06:32〜07:22頃)。本節の調査時点ではまだedges.csvとhearing.html/daily-rhythm.htmlの該当箇所を突き合わせていなかっただけ。- 型費重複計上チェックリストメール送付.xlsmが「出荷指示書発行」フォルダに同居している理由 — 内容は型費(金型費用)の重複計上チェックで出荷業務そのものではない。単なる共有フォルダの便宜的配置か、出荷担当がこのチェックも実務上担っているのかは未確認。
- 最終出荷日検索(OLD_DATA).xlsm(ALL_JUDP.xlsxという全件抽出への手動検索ツール、2024/7/23作成)が日常的に使われているのか、過去データ調査用の一時ツールなのか未確認。ファイル名の「OLD_DATA」が示す通り、参照データが静的スナップショットである点は判明済み。