2. 見積・製品単価
お客様への見積書発行(Excel/VBA)から、AS/400の製品単価マスタPRMPへの登録(SSBS04/05)、そして受注・出荷・請求が単価をどう解決するか(PBTANKR)までを追います。
- 見積書はAS/400管理外のExcel/VBAで発行し、承認金額を人手でPRMPへ転記する二重構造。
- 単価のSSOTはPRMP — JHMPの単価欄(決定/見積/号試)は非ゼロがそれぞれ5%未満とほぼ未使用。
- 決定単価の中央値は約2,065円だが、ゼロ円登録が21.4%、840万円の外れ値もある。
1. 見積の位置づけ — 2つの別システム
「見積書を作る」ことと「単価をシステムに登録する」ことは、別の作業・別のシステムです。見積フェーズは AS/400 の管理対象外で、Excel/VBA だけで完結しています。両者をつなぐのは人手です。
xl/externalLinks)も見積書様式.xlsmには存在しません。
営業担当者が見積確定後に手入力しているというのは、もはや推測ではなく確定した運用です。
さらに、この転記漏れをAS/400自身が日次06:30に検知して営業課へ督促し続けるメール
見積単価未入力リストメール送付.xlsm(2025年10月にも改修され現役で稼働中)が存在し、本文には
「営業課で見積単価を入力してください。リスト内のNEWの表示は今回初めてリストされた品番を示します。
NEWのないものは、前回に引き続き未入力品番です。」という継続的な未入力バックログ追跡の文言があります。
「もし転記が自動化されていれば入力し忘れを検知する必要はない」——この日次督促ジョブの存在自体が、
転記が構造的に手作業であることの決定的な証拠です。転記は完全に人手ですが、転記漏れの検知と督促だけは自動化されている
という運用実態です。ただし「見積書のどの情報がSSBS04のどの入力項目に対応するか」という対応表の有無は
依然として未確認です(未解明事項1)。
(出典: source/estimate/ 全VBAモジュール, 売上関係/見積単価未入力リストメール送付.xlsm本文,
請求書発行/決定単価未入力品番リストメール送付.xlsmヘッダコメント「本プログラムでは、データのみ作成し、
メール送信は別途プログラムにより定期送信される。」)
単価には常に 見積(確定前の参考値) と 決定(確定した契約単価) の2種類が併存します。見積書の
「※決定単価」欄、PRMPのPRKTAN(決定)/PRMTAN(見積)列、単価参照ロジック PBTANKR の
「決定があれば決定優先、なければ見積で代用」という3か所で一貫して現れる設計思想です。
2. 登場人物
| 役割 | 根拠 | 備考 |
|---|---|---|
| 営業課(見積作成・発行) | 見積書テンプレートの文言「営業課」(出典: 見積書様式(略式).xlsm shared strings) | 見積書を作成・発行する主体 |
| 得意先担当者 | 見積書テンプレートの入力欄「得意先担当者」「様」 | 見積書の宛先の実務担当者 |
| 単価入力オペレーター(SSBS04/05操作者) | ITSQ01Rによる端末・ユーザー単位の実行許可制御 (出典: itur01r.md L6-16) | 実際にAS/400へ決定単価を打ち込む人。営業事務 or 生産管理担当と推測 推測 |
| システム管理者(許可設定) | ITSQ01Rの許可テーブルを管理する人(未確認) | どのPC・どのユーザーがSSBS04/05/12を実行できるか設定する |
3. 見積書発行の標準フロー Excel/VBA
根拠: source/estimate/ 配下のExcelブックのシート構成・共有文字列・VBAモジュール名の断片から業務フローを再構成しています(マクロ本体はバイナリのため、計算式そのものは未解読=一部推測)。
得意先ごとにテンプレートが個別ファイルとして存在します: 見積書様式(アイシン精機)、(アイシン精機ホンダ向け)、(アイシン藤岡工場)、(アイシン第2試作=試作専用)、(富士電機)、(略式=得意先を問わない簡易版)など。すべて共通のVBA基盤モジュール(modBase)を内包し、共有設定ファイルをネットワークパス経由で読みに行きます (出典: 見積書様式(略式).xlsm VBAバイナリ strings抽出)。
- テンプレート選択 Excel/VBA
得意先ごとに用意された.xlsmテンプレートを開く。試作品なら専用の「アイシン第2試作」様式を使う。担当: 営業課 - 入力フォームへ数値・条件を入力 Excel/VBA
品番・品名・数量・材質・規格・寸法・重量・得意先コード・納期・試作№・伝票№などを「入力フォーム」シートに入力する。 (出典: 見積書様式(略式).xlsm sharedStrings.xml)担当: 営業課 - 加工比率マスタを参照して自動計算 Excel/VBA 推測
「入力フォーム」の値を元に、加工比率マスタ.xlsx(材料・設計・W/C・M/C・仕上げ・研磨・組付・トライ等の 工程別加工レート表)を参照して製品加工費・型費が算出され、「見積書」シートへ転記されると推測される (VBA計算式本体は本調査では読めていない)。担当: Excelマクロが自動計算 - 見積書を印刷・得意先へ提出 Excel/VBA
「見積書」シート(お客様提出用)を発行。品番/品名/納期/数量・重量/単価/金額の明細、「見積金額」合計、 「※御社査定」欄、「※決定単価」「決定金額」「決定日」欄、税抜き表示の注記、有効期限を印字する。担当: 営業課 - 得意先が査定・決定単価を記入
お客様側が「※御社査定」欄で金額を確認・修正し、承認後に「※決定単価」「決定金額」「決定日」欄へ記入する。 この欄が埋まった時点=見積が確定し、AS/400へ登録すべき決定単価が確定する。担当: 得意先担当者 - 見積書番号の採番・保管 Excel/VBA
見積書管理マスタ.xlsx(年・月・連番の3列台帳)から次の連番を払い出し、見積書№を構成する。 過去の見積書は見積書復元.xlsmで再表示できる (実VBAで解明: データベース参照ではなく、Application.GetOpenFilenameで 過去の見積書xlsxファイルをファイル選択ダイアログから人間が選び、アイシン精機用/略式のテンプレート選択を経て、 得意先コード・品番・品名・数量・納期・試作№・伝票№・明細行をセル単位で最新様式へ転記するだけの単純な 「過去ファイル再利用マクロ」であることを確認。復元元データの実体(作成済見積書フォルダ)は 本リポジトリには含まれず、サーバー共有フォルダ側にのみ存在すると推測される。出典: 見積書復元.xlsm modMain_606.bas)。担当: 営業課
Excel → AS/400 の橋渡し(手作業ギャップ) 【実VBAで解明】
この手作業ギャップが「たまに起きる例外」ではなく日常的に発生し続ける慢性的な運用であることの
決定的な証拠が、日次06:30の自動メールチェーンに見つかりました: 見積単価未入力リストメール送付.xlsmと
決定単価未入力品番リストメール送付.xlsmという「入力し忘れ検知」メールが2本、毎日営業課へ
自動送信されています。後者のヘッダコメントには「本プログラムでは、データのみ作成し、メール送信は別途
プログラムにより定期送信される。」と明記されており、この督促の仕組み自体が業務に定着した恒久ジョブ
(2025年10月にも改修版があり現役稼働中)であることを示しています。もし転記が自動化されていれば、
そもそも「入力し忘れ」を検知する仕組みは不要なはずです — この2ジョブの存在自体が、
Excel見積→AS/400単価転記が完全手動であることの状況証拠になっています。
なお、実際のメール送信もOutlook/MAPI/CDOの直接呼び出しではなく、①マクロが帳票と「メール依頼」レコードを
共有フォルダ(メール定期自動送信)に書き込むだけで終了し、②本リポジトリに含まれない別の
ディスパッチャプログラムがそのフォルダを定期ポーリングして実送信する、という2段階方式です。メール本文には
「本メールは、オフコンからの自動送信です」という一文が入りますが、実際の送信元はオフコン(AS/400)ではなく
この外部ディスパッチャです — 現場向け説明とVBA実装が食い違っている点は移行時の要注意事項です。
4. 製品単価登録(SSBS04/05, PRMP)
見積がお客様に承認され「決定単価」が確定したら、この値をAS/400の製品単価マスタ PRMP に登録します。
ここからは対話型メニュー MENUS1(出荷管理サブシステム)配下の操作です (出典: source/as400-admin/transport-tooling/ITLIBS/MENUS1.txt L40-83)。
PRMPのキー構造
| フィールド | 意味 | 型 |
|---|---|---|
PRCDTK | 得意先コード — 誰向けの単価か | numeric(6,0) |
PRBNHN | 品番 — どの製品か | char(25) |
PRKUSY | 仕様 — 同じ品番でも仕様違いを区別 | char(2) |
PRKUTA | 単価区分 — ' T'=製品単価行 / ' K'=型費行 | char(2) |
PRDYTY | 適用日 — いつから有効な単価か(YYYYMMDD、0=無期限の基本行) | numeric(8,0) |
PRKUTAだけが違う別レコードとして保存されます。
1組の「決定単価+見積単価+型費」を登録すると、内部的にはPRMPに2行(T行1つ、条件付きでK行1つ)が書き込まれます
(出典: pilot/spec/itur01r.md L26-27, 239-285)。実データでもPRMP全12,100行はT行8,929件(73.8%)・K行3,171件(26.2%)に分かれており、K行(型費)は必ずしも全品番に存在するわけではないという「条件付き」の実態と整合します。各行には PRKTAN決定単価/PRMTAN見積単価に加え、
コスト内訳(外注費用・自給品費・支給品費・素材費・加工費・表面処理費・償却費)や寸法・重量・取り数まで保存され、
単価だけでなく見積の積算根拠もPRMPに残るのが特徴です。
SSBS04 製品単価入力(ITUR01R) — 新規登録
- キー入力画面 AS/400
適用日・品番・仕様・得意先を入力する。担当: 単価入力オペレーター - 明細画面 AS/400
現在登録済みの最新単価(参考値、下段表示)を見ながら、決定金額・見積金額・決定型費・見積型費・ コスト内訳を入力する。担当: 単価入力オペレーター - 確認画面でEnter → PRMPに新規追加(INSERT) AS/400
同じキーが既に存在する場合は登録できない(エラー「このデータは既に登録されています。」)。 SSBS04は新しい適用日での価格改定の追加専用で、既存行の書き換えはできない。担当: 単価入力オペレーター
SSBS05 製品単価訂正(ITUR04R) — 既存行の修正
SSBS04と同じキー4項目で既存行を検索し、その場で上書き(UPDATE)します AS/400。
適用日は変更できません(新しい適用日での改定はSSBS04で別行を追加)(出典: pilot/spec/itur04r.md L220-223)。
SSBS04と排他制御を共有(ALCOBJ PRMP *EXCLRD)しており、SSBS04とSSBS05は同時に実行できません
(どちらかが実行中はもう一方が「PRMPファイルのロックができません。」で弾かれる)(出典: itur01r.md L13-16, itur04r.md L13-16)。
詳細: 単価の照会(SSBS17/18, ITUR10R1/R2) — 参照専用
SSBS17(一覧、MENUS1 opt17)は品番・仕様・得意先を指定するとPRMPの該当行を新しい適用日順に一覧表示(最大5行まで)。 SSBS18(明細、MENUS1 opt18)はT行1件ごとの全コスト内訳と対応するK行を1画面で表示(最大2行まで) (出典: pilot/spec/itur10r1.md, pilot/spec/itur10r2.md)。どちらも「表示される明細は対得意先との契約明細で仕入値とは異なります」の注記あり。 なお SSBS18のゲート名がSSBS17と同一という設定ミスが確認されています——新實さんへのヒアリングで「不備です。」と明言され、意図的な設計ではなく修正すべき不具合であることが確定しました(hearing.html B4)。移行版では修正して問題ありません。
単価の読み側解決(PBTANKR)
PBTANKR(製品単価参照サブルーチン、画面なし)です。
優先順位: 受注データJUDP自体に単価(JUTANK/JUKATH)が入っていれば、
それを最優先で使う。入っていない場合だけPBTANKRを呼んでPRMPを参照する、という契約がソースコメントに
明記されています (出典: pbtankr.md L9-16, 原文「受注データの単価が受注品番マスターの単価よりも優先するため」)。
PBTANKRには3つのモードがあります: モード1=決定単価のみ使用/モード2=決定単価優先・なければ見積単価で代用(「見積含む」)/
モード3=得意先・仕様を無視して最新行を返す。決定単価(PRKTAN)は常に見積単価(PRMTAN)より優先されます
(出典: pbtankr.md L120-128)。この参照は請求書作成(ITS001R等)、受注概算表(ITUR41R〜46R等)、単価未入力抽出(ITUR45R)
など多数の下流プログラムから共通で呼ばれています。
5. 伝票別単価・請求月繰越(SSBS12, ITUR05R)
PRMPは「品番×得意先×仕様×日付」単位のマスタ単価ですが、個別の受注(伝票)1件だけ特別な単価にしたい/ 請求のタイミングをずらしたい、というケースに対応するのがSSBS12です AS/400 (出典: pilot/spec/itur05r.md)。
操作: 受注№を1件指定 → その受注データJUDPが持つ3フィールドだけを直接書き換える。
| フィールド | 意味 |
|---|---|
JUTANK | 単価 — この受注だけの特例単価。PBTANKRより優先される |
JUKATH | 型費 — 同上 |
JUSEHI | 請求対象年月 — これが「繰越」の実体。納品が遅れた場合に実際の出荷月へ請求対象月をずらす運用 (出典: itur05r.md L21-24) |
JHMPの並行単価フィールド
JHMP も、PRMPとは別に決定/見積の単価対を持っています:
JHKTAN決定単価 / JHMTAN見積単価、さらに JHDTAN号試単価・JHDKAT号試型費
(号口移行前の試作ロット向けと推測)、JHHTA1〜JHHTA5変更単価1〜5(単価改定履歴を
5世代分JHMP自体にも保持)、JHATAN組付単価もあります (出典: itjm75r.md L162, masters_registry.json jhmp定義)。
新實さんの2026-07-22回答により、JHMPとPRMPの関係が判明しました。PRMPが正です。当初はJHMPのみで対価を保持していましたが、単価改訂の回数が多く固定フィールド数では対応できなくなったため、複数世代を積み重ねられるPRMPへ移行しました。同じ品番でも注文によって単価が変わる場合があるため、個別受注に紐づくJUDPの単価(伝票別単価、SSBS12)がさらに優先されます——つまり優先順位はJUDP>PRMP>(旧世代の名残である)JHMPという構造です。
実データはこの回答と整合する傍証を与えます: jhmp全6,704件のうち、決定単価jhktanが非ゼロなのは332件(5.0%)、見積単価jhmtanが非ゼロなのは183件(2.7%)、号試単価jhdtanが非ゼロなのはわずか3件だけでした。一方、jhmpの品番の85.9%(5,757/6,701)はprmpにも同じ品番で存在します。つまりJHMP側の単価欄はほとんどのレコードで未使用(ゼロ/NULL)であり、実際の単価情報はPRMP側に集約されているという実データの姿は、新實さんの回答どおりPRMPが正・JHMPが旧世代の名残であることをそのまま裏付けています。残り5%前後がいつ・なぜJHMP側にも値を持ち続けているかの個別事情までは未確認ですが、「どちらが正か」という最重要の論点自体は解決済みです。 (出典: 新實さん、2026-07-22ヒアリングシート回答、hearing.html B1、docs/feedback/hearing/2026-07-22-niimi-hearing-sheet-B.md参照)
切替当時の開発担当者が作成した設計書・移行データ一式(PRMP.FDFのPC側パス記載が
C:\Documents and Settings\kniinomi.ITAKURA\...であることから、新實さん自身のPCで作業したことが
確認できる)が残っており、ヒアリング回答の「単価改訂の回数が多く固定フィールド数では対応できなくなったため」
という説明を、数値と実例で裏付ける・かつ超える精度の情報が得られました。
切替の目的は改定回数だけでなく5点の複合改善だったとスプレッドシートに明記されています:
①同一品番でも得意先が異なれば別単価を持てるようにする(従来は品番1件につき単価1つのみ)、
②同一品番でも仕様が異なれば別単価を持てるようにする(従来は仕様による単価選択が不可)、
③定期改定に「回数の制限なく」対応する(従来は最大5回分の単価改定までしか対応できなかった)、
④号口品のコスト構成データを単価決定通知書の項目に準じて残せるようにする(従来は「まったく不明。過去の
見積書、単価決定通知書で見る」しかなかった)、⑤型費を適用日単位で制限なく登録できるようにする(従来は
品番1件につき型費1つのみ)——さらに⑥構成部品にも受注品番と同じように単価を登録できるようにする、という
従来不可能だった新機能も追加されています。③の「最大5回分」という具体的な上限は、JHMPの変更単価1〜5
(JHHTA1〜JHHTA5)フィールド数と正確に一致し、ヒアリング回答の「固定フィールド数」が
具体的に何を指していたかを数値で確定させます。また①②はヒアリング回答には出てこなかった追加の切替理由で、
PRMPのキー構造が得意先コードPRCDTK・仕様PRKUSYを含む理由を裏付けます。
仕様指定ありの品番.xlsには①②が必要になった実例(品番146250-4861が仕様
2T/6Nで別単価、品番047460-0312-2が仕様0J/0T/
2T/6Nの4種で別単価、等)が2008年4-10月の四半期単価とともに実在の品番で記録されています。
移行方式は「現在値だけをコピー」ではなく、複数世代の履歴を遡って再構築する一括移行だったことが
初期投入データPRMP.xls(515行、T行のみ・品番187種)からわかります。適用日の内訳は
2004-08-01・2005-11-01・2006-11-01を含みつつ、2007年4〜10月に65行、2008年4月・7月・10月にそれぞれ145件前後と
集中しており、切替時点で少なくとも直近1年強の四半期ごとの単価改定を複数世代分、遡及的にPRMPへ積み上げてから
本番稼働させたことが確認できます。さらに8件は適用日0(無期限の基本行)として初回投入時から存在しており、
「0=無期限」という設計(第6章)が切替当初からの仕様であったことも確定します。この遡及世代の再構築計算そのものは
Book1.xlsのシート「4」「7」「10」(2008年4月/7月/10月切替の材料費・廃材費再計算表)に品番ごとの
詳細な差額計算として残っており、コスト内訳の「素材費」欄が「素材重量×素材単価−廃材重量×廃材建値」で検算される
という既述の設計(用語集参照)と完全に一致する実例が確認できます。
加えて、コスト内訳のクロスフッティング検証(§4-3参照)が具体的にどの項目の入力で発動するかも判明しました: 「加工費あるいは素材費を入力するとすべての明細の辻褄が合わないとエラーになる」「素材重量を入力すると、重量関係の 明細の辻褄が合わないとエラーになる」——つまり全項目が常時クロスチェックされるわけではなく、加工費/素材費の 入力が金額系全体の整合、素材重量の入力が重量系の整合をそれぞれ個別に発動させるという、既存記述より一段 精密な挙動です。型費についても実務例が明記されています:「2009年1月と2009年2月でそれぞれ600万円と 400万円検収してもらう場合は、それぞれ新規(または設変)の受注を起こし、適用日20090101(スタートは空欄でも可) で600万円、適用日20090201で400万円とすれば売上計算や請求書発行で手修正を回避できる」——SSBS12ではなくSSBS04の 適用日別複数行登録そのものが、検収時期の異なる型費分割払いの標準的な対応方法として設計時から想定されていたことが わかります。最後に、SSBS04/05の入力/訂正の分離、SSBS17(一覧・改定経緯の表示を重視)/SSBS18(明細・適用日別 1画面)という2系統の照会専用プログラムへの分離も、いずれも切替時の設計書に明記された意図的な設計判断であり、 ソースコードからの逆解析ではなく1次資料で設計意図そのものが確認できました。
(出典: source/dev-archive/20090122_製品単価管理システム (20090122切り替え)/製品単価管理システム (20090122切り替え).xls、 同フォルダ/製品単価管理システム20090122切替時の一時ファイル/PRMP.xls・PRMP.FDF・仕様指定ありの品番.xls・Book1.xls参照)
さらに、社内向け作業指示書(受注票)に印字される単価は、JHMPの見積単価JHMTAN/見積型費JHMKAT
であり、決定単価JHKTANではないことがITJM75R(受注票発行データ作成)のソースコメントで明言されています
(出典: itjm75r.md L162-164, 原文「単価/型費は見積値」)。つまり社内の作業指示書には常に見積段階の単価が
印字されるという運用です(決定単価は顧客向け契約情報としてPRMPに保存し、社内スリップには出さない切り分けの
可能性 推測)。
6. 単価改定・訂正のケース
- 通常の価格改定(新しい適用日での値上げ・値下げ): SSBS04で新しい適用日の行を追加登録。過去の行は 残ったまま、PBTANKRが「適用日≦しきい値の中で最新の行」を自動選択するため、システムとしては過去の全履歴が PRMPに蓄積されていく設計です(削除・更新ではなく追加が基本)。実データでは5,884品番のうち347品番(5.9%)が複数の適用日世代を持ち、最大で1品番あたり45世代が積み上がっているケースもあり、この「追加が基本」という設計が実際に長期運用されてきたことを裏付けています。
- 入力ミスの訂正: SSBS05で既存行をその場で上書き(§4-3参照)。
- 遡及改定: 明確な仕組みは確認できません。過去日付で新しい行を追加すれば理屈上は過去分の再計算に 影響しますが、既に確定・請求済みの伝票を自動的に再計算する仕組みはソースから見当たりません(未解明事項5)。
- 単価未登録品番の検知: SSBS45「単価未入力品番抽出」(ITUR45R、MENUS2 opt45)が
バッチで前月以降の受注のうち受注数×単価+型費がゼロ(=PBTANKRで単価が引けなかった)品番を抽出し、
Excel(
BAT0345.XLSM/JUDPS5ステージング)に出力します。「見積は終わったのにAS/400への 単価登録を忘れている」品番を営業事務が定期的に見つけるための仕組みと解釈できます。初出の品番にはNEW区分が付き、履歴ファイルJUDPS5Aで重複検知します (出典: pilot/spec/itur45r.md L39-58)。 実データでもPRMPのT行8,929件のうち1,913件(21.4%)は決定単価がゼロで登録されており、SSBS45のようなチェック機構が実運用上も必要とされる規模感がうかがえます。
7. 特殊ケース
7-1. 試作品の単価 vs 号口の単価
見積書テンプレートに「見積書様式(アイシン第2試作).xlsm」という試作専用の様式があり、入力欄にも
「試作№」という専用フィールドがあります。AS/400側ではJHMPのJHKUGO(号口区分)フィールドで
9=「号口」/1=「試作」を区別します (出典: itjm75r.md L132)。
7-2. 金型費の扱い
見積・単価マスタの両方で「型費」は単価とは別建ての金額として一貫して扱われます(見積書の「型費」欄、
PRMPのK行、JUDPのJUKATH、JHMPのJHKKAT/JHMKAT/JHDKATなど)。
見積書テンプレートの「(機械・治具・型・試作品・設備)」という注記から、型費に類する費用項目として機械・治具・設備も
見積の内訳に含まれる可能性がありますが、これらがPRMPのどのフィールドに対応するかは確認できていません(未解明事項7)。
7-3. 無償支給材の扱い
PRMPのコスト内訳にPRHYSK(支給品費)・PRHYJK(自給品費)というフィールドがあります。
支給=客先支給、自給=自社調達という対比と推測されますが、無償支給材がゼロ計上か評価額計上かの運用ルールは
ソースから確認できません(未解明事項8)推測。
docs/feedback/hearing/2026-07-22-niimi-hearing-sheet-B.md参照)
実データスナップショット
本リポジトリのPostgreSQLには7年分のAS/400実データが取り込まれています。PRMP(製品単価マスタ)は12,100行と件数こそJUDPより小さいものの、PRDYTY(適用日)の実際の範囲は1990年〜2026年と、受注データ(judp、主要期間2018〜2026年)よりはるかに古い価格履歴を保持していました — 「過去の全履歴が蓄積されていく設計」(第6章)が数十年単位で実際に機能していたことになります。以下はprmp・jhmpを実際に集計した結果です(2018〜2026年の実データインポート時点、ただしPRMPの適用日履歴は1990年まで遡ります)。
- 総行数: 12,100件(T行8,929件・73.8% / K行3,171件・26.2%)
- 得意先カバレッジ: 79社(得意先マスタ
tkmp全体は142社、55.6%をカバー)— PRMPに現れる得意先コードはすべてtkmpに実在し、孤立コードはなし - 品番数: 5,884品番(T行ベース)
- 適用日(
prdyty)の範囲: 1990-01-01 〜 2026-04-01(0=無期限の基本行が9,099件・75.2%)
決定単価(T行、prktan)の分布
| 指標 | 値 |
|---|---|
| 最小値(0円超) | 0.01円 |
| 中央値(0円超) | 約2,065円 |
| 最大値 | 8,400,000円 |
| ゼロ円で登録されている行 | 1,913件(T行8,929件中21.4%) |
JHMPとPRMPの重複度(未解明事項6への実データからの手がかり)
| 指標 | 件数 | 構成比 |
|---|---|---|
| JHMP総行数 | 6,704 | — |
決定単価(jhktan)が非ゼロ | 332 | 5.0% |
見積単価(jhmtan)が非ゼロ | 183 | 2.7% |
号試単価(jhdtan)が非ゼロ | 3 | 0.04% |
| JHMP品番のうちPRMPにも存在 | 5,757 / 6,701 | 85.9% |
詳細は上記「JHMPの並行単価フィールド」の項も参照してください。
集計に使ったSQL
-- PRMP基本統計
SELECT prkuta, count(*) FROM prmp GROUP BY prkuta ORDER BY 2 DESC;
SELECT count(*) AS total, count(DISTINCT prcdtk) AS distinct_customers,
count(DISTINCT prbnhn) AS distinct_bnhn
FROM prmp;
SELECT count(*) FROM tkmp;
SELECT count(*) FROM (SELECT DISTINCT prcdtk FROM prmp) p
LEFT JOIN tkmp t ON t.tkcdtk = p.prcdtk WHERE t.tkcdtk IS NULL;
-- 適用日の範囲
SELECT min(prdyty) FILTER (WHERE prdyty > 0), max(prdyty),
count(*) FILTER (WHERE prdyty = 0) AS zero_muki
FROM prmp;
-- 決定単価の分布
SELECT
count(*) AS n_t_rows,
count(*) FILTER (WHERE prktan = 0) AS zero_prktan,
min(prktan) FILTER (WHERE prktan > 0) AS min_pos,
percentile_cont(0.5) WITHIN GROUP (ORDER BY prktan) FILTER (WHERE prktan > 0) AS median_pos,
max(prktan) AS max_prktan,
avg(prktan) FILTER (WHERE prktan > 0) AS avg_pos
FROM prmp WHERE prkuta = ' T';
SELECT prcdtk, prbnhn, prkusy, prdyty, prktan, prmtan
FROM prmp WHERE prkuta = ' T' ORDER BY prktan DESC LIMIT 5;
-- 複数世代を持つ品番
SELECT gen_count, count(*) AS n_bnhn FROM (
SELECT prbnhn, count(DISTINCT prdyty) AS gen_count
FROM prmp WHERE prkuta = ' T' GROUP BY prbnhn
) sub GROUP BY gen_count ORDER BY gen_count;
-- JHMPとPRMPの重複度
SELECT
count(*) AS total_jhmp,
count(*) FILTER (WHERE jhktan IS NOT NULL AND jhktan <> 0) AS jhktan_nonzero,
count(*) FILTER (WHERE jhmtan IS NOT NULL AND jhmtan <> 0) AS jhmtan_nonzero,
count(*) FILTER (WHERE jhdtan IS NOT NULL AND jhdtan <> 0) AS jhdtan_nonzero
FROM jhmp;
SELECT count(*) AS overlap
FROM (SELECT DISTINCT jhbnhn FROM jhmp) a
JOIN (SELECT DISTINCT prbnhn FROM prmp) b ON a.jhbnhn = b.prbnhn;
8. 関連マスタ・帳票一覧
マスタ
| マスタ | テーブル | 役割 |
|---|---|---|
| 製品単価マスタ | PRMP | 得意先×品番×仕様×単価区分×適用日の決定/見積単価とコスト内訳(本ページの中心) |
| 受注品番マスタ | JHMP | 品番マスタ本体。決定/見積/号試単価、変更単価履歴5世代、号口区分等も保持 |
| 受注データ | JUDP | 個々の受注(伝票)。JUTANK/JUKATH/JUSEHI(伝票別単価・繰越)を保持し、PBTANKRより優先 |
| 得意先マスタ | TKMP | 得意先コード・名称 |
| 部品品番マスタ | BHMP | 品番マスタのフォールバック(JHMPに無い場合) |
| 見積書番号管理(Excel) | 見積書管理マスタ.xlsx | 見積書№の年月別連番台帳(AS/400外) |
| 加工比率マスタ(Excel) | 加工比率マスタ.xlsx | 工程別加工レート・型費振分等の既定値(AS/400外、見積計算の元データ) |
主なプログラム/帳票
| ID | 名称 | 種別 | 備考 |
|---|---|---|---|
| (Excel VBA、AS/400外) | 見積書発行(得意先別テンプレート) | 対話+印刷 Excel/VBA | source/estimate/*.xlsm |
| SSBS04 / ITUR01R | 製品単価入力 | 対話(新規追加) AS/400 | MENUS1 opt4 |
| SSBS05 / ITUR04R | 製品単価訂正 | 対話(既存上書き) AS/400 | MENUS1 opt5 |
| SSBS12 / ITUR05R | 伝票別単価入力・繰越処理 | 対話 AS/400 | MENUS1 opt12 |
| SSBS17 / ITUR10R1 | 製品単価情報問合せ(一覧) | 照会専用 AS/400 | MENUS1 opt17、最大5行表示 |
| SSBS18 / ITUR10R2 | 製品単価情報問合せ(明細) | 照会専用 AS/400 | MENUS1 opt18、最大2行表示。ゲート名がSSBS17と同じ設定ミスあり |
| SSBS45 / ITUR45R | 単価未入力品番抽出 | バッチ AS/400 | MENUS2 opt45、単価登録漏れの検出 |
| (ユーティリティ)PBTANKR | 製品単価参照 | サブルーチン AS/400 | 画面なし、多数のプログラムから呼ばれる単価解決ロジック |
| ITJM75R | 受注票発行(印刷データ作成) | バッチ(画面なし) AS/400 | 社内向け受注票にJHMPの見積単価/型費を印字 |
| ITS001R等 | 請求書(範囲指定)FOR EXCEL 等 | バッチ AS/400 | 単価/型費に「見積/決定」区分ラベルを付けて出力 |
9. 用語集
- 見積単価(みつもりたんか)
- 契約成立前の参考単価。PRMPでは
PRMTAN、JHMPではJHMTAN - 決定単価(けっていたんか)
- お客様が承認した確定契約単価。PRMPでは
PRKTAN、JHMPではJHKTAN - 型費(かたひ)
- 金型に関する費用。単価とは別建てでPRMPにK行として登録される
- 号試単価(ごうしたんか)
- 号口移行前の試作ロット向け単価(JHMPの
JHDTAN、推測含む) 推測含む - 単価区分(たんかくぶん)
- PRMPのキー項目
PRKUTA。' T'=単価行、' K'=型費行 - 適用日(てきようび)
- 単価がいつから有効かを示す日付。PRMPのキーの一部で、履歴として複数行を積める
- 伝票別単価(でんぴょうべつたんか)
- マスタ単価とは別に、個別の受注1件だけに設定する特例単価(SSBS12)
- 繰越(くりこし)
- 納品が遅れた場合に請求対象年月をずらす処理(SSBS12の
JUSEHI更新) - 自給品費(じきゅうひんひ)
- 自社側で材料を調達する場合の費用 推測
- 支給品費(しきゅうひんひ)
- お客様から材料が無償支給される場合の費用 推測
- 素材費(そざいひ)
- 材料そのものの費用。素材重量×素材単価−廃材重量×廃材建値で検算される
- 廃材建値(はいざいたてね)
- スクラップ材の単価(
PRTKSK)。廃材は買い取り価格として控除計算に使われる - 単価未入力(たんかみにゅうりょく)
- 受注はあるのにPRMP/JUDPどちらにも単価が登録されていない状態。SSBS45で検出
- 見積含む(みつもりふくむ)
- PBTANKRのモード2。決定単価がなければ見積単価で代用するモード
- 依頼区分(いらいくぶん)
- 受注の種類コード。PBTANKRでは
' A'が型費を抑制する特殊値として扱われる - PBTANKR(製品単価参照)
- 単価マスタPRMPを検索して単価・型費を返す共通サブルーチン。画面はない
- ITSQ01R(実行許可確認)
- どの端末・どのユーザーがそのプログラムを実行してよいか判定する共通ゲート処理
10. 他業務との接続点
上流(見積の前段階)
図面・技術情報からの見積算出は、加工比率マスタ.xlsxのレート表を使ってExcel側で行われます。
図面そのものの管理(図面整理業務、source/engineering/)との接続は今回未調査です(未解明事項9)。
下流(見積・単価確定後)
- 受注入力(MENUJ1系、itjm系プログラム): 受注データ
JUDP作成時、単価が入っていなければ PBTANKR経由でPRMPを自動参照。JHMPの見積単価は受注票(社内作業指示)に印字される。 - 出荷・請求(本ページと同じMENUS1サブシステム内):
ITS001R請求書作成等が単価を 「見積/決定」ラベル付きで転記。SSBS12の伝票別単価上書きがあればそちらが優先。 - 受注概算表(
ITUR41R〜ITUR46R): PBTANKRを使って未確定受注の概算金額を算出。 単価未確定案件はゼロ円として現れ、SSBS45の抽出対象になる。
未解明事項 — 現場担当者への質問リスト
見積書(Excel)で決定した単価を、誰がどうやってAS/400のSSBS04に転記しているか(自動連携は見当たらない。 手入力だとすれば、見積書のどの情報がSSBS04のどの入力項目に対応するかの対応表がほしい)。
【実VBAで解明】 見積書発行フォルダの全VBAモジュール(100本超)を実際に読んだ結果、自動連携は 皆無であることを確定。加えて日次自動メール(見積単価未入力リストメール送付.xlsm宛先: 営業課、決定単価未入力品番リストメール送付.xlsm)が「AS/400自身が転記漏れを継続的に検知して人間に 督促する」仕組みとして存在することを確認し、「手入力だとすれば」という仮定を事実として確定させた (Excel → AS/400 の橋渡し参照)。ただし対応表(見積書のどの情報がSSBS04の どの項目に対応するか)自体はVBA側には存在せず、現場ヒアリングが必要な部分は未解決のまま残る。見積書発行(Excel操作)とSSBS04/05操作(AS/400入力)は同一人物か、部門をまたぐ引き継ぎがあるか。
【ヒアリングで解明】 新實さんにより、対象製品を担当した営業課の人が見積を行い、SSBS04も基本的に 同じ人が入力する(入力量が多い場合は営業課の他の人が担当することもある)ことが確認された。部門をまたぐ 引き継ぎはなく、営業課内で完結する運用。(出典: hearing.html B1、 docs/feedback/hearing/2026-07-22-niimi-hearing-sheet-B.md)- 加工比率マスタのレート表から見積書の金額がどう計算されるか
【部分的に実VBAで解明】 VBA/Excel数式レベルでの参照が一切ないことを確認済み(外部ブックリンクなし、 VBA内「加工比率」grep 0件)。つまり「計算式本体」はそもそも存在せず、人間が加工比率マスタを見ながら 電卓的に手計算し、結果だけを見積書に手入力しているという運用実態が強く示唆される (推測、ただし確度高い)。マスタの構造(材料/設計/W・C/M・C/仕上げ/研磨/ 組付・トライ/レーザー/段取調整費等の工程別時間単価表)は判明したが、担当者の頭の中の計算手順そのものは 依然としてVBA調査の範囲外で未解明。
【ヒアリングでさらに判明、部分的】 新實さんにより、加工比率マスタが工程時間から金額を積算する 順方向の表ではなく、先に決めた見積金額に工程時間配分を逆算して合わせた表であること、判で押した 値にならないよう乱数で変化させる仕組み(アイシン向け専用、現在は使われていない可能性)が組み込まれて いたことが確認された。ただし現在の実際の見積計算方法自体は「営業課に問い合わせてください」とのことで、 依然未解明のまま残る。(出典: hearing.html B2) 見積書復元.xlsmの具体的な使い方・復元元データの場所。
【実VBAで解明】modMain_606.basのSub Mainを全文確認。処理内容は 「ファイル選択ダイアログ(初期フォルダ作成済見積書、本リポジトリ未収録)→アイシン精機用/略式の テンプレート選択→過去の見積書xlsxから得意先コード・品番・品名・数量・納期・試作№・伝票№・明細行をセル単位で 転記」という完全な処理内容を確認。データベース参照ではなく単純な過去ファイル再利用ツールであることを確定。 復元元データ(作成済見積書フォルダ)の保存場所自体は未確認のまま(下記新規質問参照)。単価を遡及改定した場合、既に確定・請求済みの伝票を再計算する運用はあるか、それとも次回受注から 新単価が適用されるだけか。
【ヒアリングで解明】 「改定時の取り決めによります。PRMPの適用日を指定して対応します。」—— 一律のルールではなく、改定ごとに合意した適用日をPRMPへ個別設定する運用であることが確認された。 (出典: hearing.html B3)JHMP(決定単価/見積単価/号試単価/変更単価1〜5)とPRMP(決定単価/見積単価、日付別複数行)の関係。 片方が正でもう片方がコピー/表示用なのか、独立して更新される別の値なのか。データの整合性はどう保たれて いるか。(最重要・要確認)
【ヒアリングで解明・最重要】 PRMPが正。当初はJHMPのみで対価を保持していたが、単価改訂の回数が 多く固定フィールド数では対応できなくなったためPRMPへ移行した。同じ品番でも注文によって単価が変わる 場合があるため、個別受注のJUDP単価(伝票別単価、SSBS12)がさらに優先される——優先順位はJUDP>PRMP> (旧世代の名残である)JHMP。(出典: hearing.html B1、 docs/feedback/hearing/2026-07-22-niimi-hearing-sheet-B.md)見積書の「(機械・治具・型・試作品・設備)」という内訳区分と、PRMPのコスト内訳フィールド(外注費用・ 自給品費・支給品費・表面処理費・償却費・加工費等)の対応関係。
【ヒアリングで解明】 「特に関連はありません。前者は使っていた見積書にその表示があったのを そのまま再現しただけで特に意味はありません。後者は、デンソープレステックとの価格決定に関してその 項目で決めていたので、後の価格改定時にわかるように入力できるようにしました。」——両者に設計上の 対応関係は最初から存在しない。(出典: hearing.html B3)支給品費・自給品費の実際の運用(無償支給材はゼロ計上か、評価額を入れるか)。
【ヒアリングで解明、ただし要最終確認】 「0円と思っています。正確には営業課に確認ください。」—— 新實さんの認識ではゼロ計上だが、確定した運用ルールとしては営業課への最終確認が推奨される。 (出典: hearing.html B3)- 図面整理業務・技術情報と見積算出の接続方法(今回は未調査)。
SSBS18のゲート名がSSBS17と同一という設定ミスは既知の不具合として認識されているか、意図的か。
【ヒアリングで解明】 「不備です。」——意図的な設計ではなく修正すべき不具合と確定。移行版では 修正してよい。(出典: hearing.html B4)- 【新規】 見積単価未入力リストの日次メールを受け取る「営業課」の中で、実際にAS/400のSSBS04へ 入力する担当者は誰か(見積書作成者と同一人物か、専任の入力担当者が別にいるか)。 (出典: 売上関係/見積単価未入力リストメール送付.xlsm 本文「営業課で見積単価を入力してください」)
- 【新規】
見積書復元.xlsmの初期フォルダ作成済見積書(本リポジトリに未収録)は どのサーバー共有フォルダに実在するか。追加取得の対象に含めるべきか。 (出典: 見積書発行/見積書復元.xlsm modMain_606.bas) - 【新規】
File_Path_Master.xlsxにAS400設定\見積書\アイシン精機用見積書という、 本リポジトリの「見積書発行」フォルダとは別パス、および「見積資料作成」「見積書削除品番データ」「見積書データ (アイシン精機)」という本リポジトリ未収録のファイル名が登録されている。この「見積書」フォルダ全体を 追加でリポジトリに取り込んでよいか(見積単価未入力リストが参照する削除品番データ等、JHMP/PRMP整合性の 追加手掛かりがそちら側にある可能性が高い)。 (出典: File_Path_Master.xlsx)