10. システムの一日・一年
板倉製作所のシステムは、人が意識しない時間帯にも動いている。夜間バックアップ、朝イチの異常検知メール連鎖、出荷担当者の操作そのものがトリガーになる帳票メール——これが「システムの一日」。そして受注・出荷・支払は年間・月内・週内で明確なリズムを持つ——これが「板倉の一年」。どちらも実運用ログとAS/400実データ7年分に基づく。
A1. システムの一日 — 01:30〜23:00タイムテーブル
A2. 夜間バックアップと「情報系の停止帯」
A3. 06:30の19本連鎖 — 朝イチの異常検知
A3b. Soumu7 — 勤怠・お弁当システムの正体
A4. 出勤入力漏れ確認の3連発(08:10/09:10/10:10)
A5. イベント駆動メール — 品番紙・組付指示書
A6. 自動メールの全体像(57プログラム)
A7. 新實さんBcc集中 — 引き継ぎ検討事項
A8. 週次・月次処理(毎週月曜12:10 ほか)
A9. 帳票の物理動線 — プリンタ/保存先マップ
A10. 現場の入口 — メインメニューの起動の仕組み
A11. 共通アドイン — 経理インボイス色分けと汎用マクロ
A12. ITA_PGM — クライアント側エラー通知と実行ログの心臓部
A13. 受注まとめ入力 — 現場が書いたSOPを読む
A14. AS400再編成 — 日次・週次ではなく年次の自動棚卸し
B1. 一年のリズム — 繁忙期・閑散期
B2. 一月のリズム — 月末受注集中と出荷の平準化
B3. 一週間のリズム — 火曜受注・水曜出荷
B4. 年間稼働日と土曜稼働の実態
B5. 7年トレンド — 得意先構成の地殻変動
B6. 「二つのカレンダーの謎」の解消
確認したいこと
出典
- 夜間バッチは01:30〜23:00のタイムテーブルで動き、02:30〜04:05は無メールが仕様(障害ではない)。
- 06:30に19本の異常検知メールが連鎖し、業務エラー通知の多くが新實氏1人のBccに集中している。
- 受注は火曜、出荷は水曜が最多の曜日で、7年でトヨタ紡織が急成長(+120%)し新1位に迫る。
A1. システムの一日 — 01:30〜23:00タイムテーブル
Windowsタスクスケジューラが起動する6本の日次バッチ(SCD_DAILY_*.bat)が、1日の情報系の骨格をなす。加えて、メール送信エンジン自体が「常駐して3分おきに自分を再起動する」独立ループを持つため、バッチの起動時刻=メール到着時刻ではない点に注意(A2節・A6節で詳述)。時刻は(出典: メール本文フォルダの実運用ログ 2026-06-04〜06-11)による観測時刻。
初めて手に入ったSoumu8の実ソース(source/as400-admin/soumu8-scd-job/)を解析した結果、日次6本(0130/0500/0630/0810/1900/2300)はいずれも同一構造の二世代構成だと判明した。Windowsタスクスケジューラが直接呼ぶのはSCD_D_0630.batのような新しいラッパー(modMain_606、作成日はジョブごとに13年〜24年とばらつく)で、中身は共通して①Ping(Environ("SERVER2_IP"))でServer2疎通確認→②(0130/0630/AS400ラッパーのみ)AS400_Check()でAS/400 ICMP疎通確認→③Kyujitu_Judge(Date)で休日ならエラー終了(処理スキップ)→④その場で1行だけの一時バッチを書き出し(start /w [旧ファイル])、WScript.Shellで実行して完了を待つ→⑤成否を自動実行結果記録.xlsxに記録(Rec_Result、0130/0500/0630/0810/1900/2300の6本のみ)、という「監視付き起動ラッパー」パターン。旧来のジョブ本体(SCD_DAILY_0630.xlsm等、2013年作成)は今もそのまま実処理を担っており、19本連鎖などA3節で解明済みの内容そのものに変更はない——手前に後付けで健全性チェック層が足されている、という実装史が判明した。(出典: source/as400-admin/soumu8-scd-job/SCD_D_0130.xlsm〜SCD_D_2300.xlsm VBA modMain_606.Main・modRecoed_603.Rec_Result各参照)
| 時刻 | 何が動く | 何が出る | 根拠 |
|---|---|---|---|
| 01:30 | AS/400マスタファイルの全量バックアップ転送 AS/400Excel/VBAAS400_DATA_TRANSPORT.xlsmがQDDSSRC(ソースリスト)を基に転送定義(.dtf)を作成→CWBTF.EXE(IBM Client Access)で実データを吸い出し→DB_Reform_Local_Only.xlsmで成形→共有フォルダへmove | AS/400物理ファイル52個(BHMP/BJDP/JUDP/SFDP/TKMP等)→\\SERVER2\Kanri\AS_DATA\*.xls。うちMDMP/MJMP/CLMPの3ファイルは別共有にも複製 | (出典: スケジュールタスク/SCD_DAILY_0130.bat、AS400_DATA_TRANSPORT.xlsm VBA modMain_601、DATA_DTF_List.txt 52件) |
| 01:30直後 | AS400へのClient Accessログイン情報キャッシュ Excel/VBA | AS400_Start.bat実行後、120秒Ping待機してから転送本体を起動 | (出典: 起動batのPing -n 120 localhost) |
| 02:30〜02:55の間 | メール自動送信エンジンが自ら終了(意図的な夜間停止) Excel/VBA | 3分毎に自己再起動するループが、この時間帯なら停止する | (出典: 定期実行(メール自動送信)_Backup.xlsm VBA「タスクスケジューラ実行時刻除外」コメント) |
| ~02:40 | 勤怠時刻データ転送(本文作成のみ) Excel/VBA | 本文ファイルを「メール本文」フォルダに作成するが、送信は04:05以降にずれ込む | (出典: 実運用ログ20260604024012_勤怠時刻データ転送.xlsx等) |
| 04:05 | メール送信エンジンの強制再起動 Excel/VBA | タスクスケジューラが定期実行(メール自動送信).xlsmを開き直し、滞留していた本文を一斉送信 | (出典: VBAコメント「4:05:00 タスクスケジューラにより起動」) |
| 05:00 | 管理資料の自動棚卸し3本(各180秒間隔) Excel/VBA | データ転送用ファイルリスト/バッチファイルリスト/VBAソースリスト、いずれも\\Server2\kanri\AS400\へ | (出典: SCD_DAILY_0500.bat) |
| 06:30〜(19ジョブ、15秒間隔) | 朝の一括チェック・通知バッチ連鎖 AS/400Excel/VBA | 試作/号口の納期遅れ、型費重複、在庫過剰引当等の業務エラー検知メールを連鎖起動。実送信は06:32〜07:22頃まで幅がある | (出典: SCD_DAILY_0630.bat19行。詳細はA3節) |
| 08:10/09:10/10:10 | 出勤入力漏れ確認(総務)— 1時間おき3波 Excel/VBA | 本日退勤未処理の社員を検知、督促を再送 | (出典: SCD_DAILY_0810.bat、実運用ログの3波送信。詳細はA4節) 【実VBAで解明】3波とも実体は同一のC:\SCD_JOB\SCD_D_0810.batを指す独立した3本のCalendarTrigger登録(08:10/09:10/10:10)(出典: source/as400-admin/soumu8-scd-job/Task/SCD_D_0810.xml・SCD_D_0910.xml・SCD_D_1010.xml) |
| 10:00/12:00/15:00/17:00(日中4回、休日も実行) | AS/400データの日中リフレッシュ AS/400Excel/VBA 【実VBAで解明】 | SCD_D_AS400.xlsm(ラッパー)がC:\AS400\AS_INI\AS400_COPY_START.xlsmを起動——01:30の全量バックアップ(AS400_DATA_TRANSPORT_Local_Onlyフォルダ、52ファイル)と同じ転送定義(.dtf)一式をAS_INIフォルダ側にも持ち、日中4回追加で同じAS/400テーブル群を再取得している。SCD_D_AS400.xlsmのみKyujitu_Judgeの休日スキップがコメントアウトされており、休日でも実行される唯一のSCD_D_*ジョブ | (出典: source/as400-admin/soumu8-scd-job/Task/AS400_COPY_1000.xml〜1700.xml4本、SCD_D_AS400.xlsm VBA modMain_600.Main) |
| 08:09〜18:16(終日イベント駆動) | 出荷指示書・組付指示書の発行操作に連動した即時メール Excel/VBA | 品番紙データの送信(同日最大31回)、組付指示書発行データメール送付(同日最大9回) | (出典: 実運用ログ。詳細はA5節) |
| 月曜12:10(週次) | 時間外労働集計結果+カレンダー入力確認 Excel/VBA | 36協定超過チェック、業務カレンダー入力確認 | (出典: SCD_WEEKLY_MON_1210.bat。詳細はA8節) |
| 19:00 | AS400ソース一覧の追加作成 AS/400Excel/VBA | \\Server2\kanri\AS400\AS_SRC_List.xlsm | (出典: SCD_DAILY_1900.bat) |
| 23:00 | AS400ソースファイル一覧作成(1900と別プログラム) AS/400Excel/VBA | \\Server2\kanri\AS400\AS400ソースファイルリスト作成.xlsm | (出典: SCD_DAILY_2300.bat) |
01:30 AS400マスタ全量バックアップ(52ファイル)開始 02:30 メール送信エンジン、自己終了(夜間停止帯の開始) 02:40 勤怠時刻データ転送 本文ファイル生成(送信は04:05以降) 04:05 メール送信エンジン強制再起動(滞留分を一斉送信) 05:00 管理資料棚卸し3本 06:30 19ジョブ連鎖(15秒間隔)— 実送信06:32〜07:22頃 08:10 出勤入力漏れ確認 → 09:10 再送 → 10:10 再送(計3波) 08:09〜18:16 品番紙データ送信/組付指示書発行(イベント駆動、1日30回超も) 月曜12:10 週次: 時間外労働集計結果(全社)+カレンダー入力確認 19:00 AS_SRC_List.xlsm(ソース一覧追加) 23:00 AS400ソースファイルリスト作成(1900と別プログラム)
SCD_D_0130.bat(01:30の全量バックアップ)とSCD_D_AS400.bat(上表・日中4回のリフレッシュ)は、どちらも参照先のAS/400物理ファイルにデータが1件も無いと、そこで転送処理が停止してしまう既知の不具合を抱えている。回避策はAS400_DATA_TRANSPORT.xlsmのSelect Case .Cells(List_Line, 1).Valueブロックに該当ファイル名(既知の例: KKRP・TNDP・HRMP)を除外ケースとして追加すること——ただし01:30側(AS400_DATA_TRANSPORT_Local_Onlyフォルダ)と日中側(AS_INIフォルダ)は別ファイルの実体なので、2箇所とも直さないと片方だけ再発する。(出典: source/as400-admin/soumu8-scd-job/000_AS400のデータがないことで転送に失敗する件について.txt、2021-10-18付の社内メモ)
A2. 夜間バックアップと「情報系の停止帯」
01:30の夜間バックアップ〜メール送信エンジン再起動までが「情報系の停止帯」。01:30にAS400マスタの全量バックアップ(52ファイル)が走り、その後メール自動送信エンジンは02:30〜02:55の間に必ず自己終了する。実ソース(定期実行(メール自動送信).xlsm VBA modMain_606.my_Job)で確認できたコードはIf Time > TimeValue("2:30:00") And Time < TimeValue("2:55:00") Then Quit_Or_Close——直前のコメントには「タスクスケジューラ実行時刻除外 (4:05:00 タスクスケジューラにより起動)」とある。
04:05にTask Schedulerが強制的に開き直すまで、この間は一切メールを送らない。 【実VBAで解明】ただし今回入手できたTask SchedulerのエクスポートXML(source/as400-admin/soumu8-scd-job/Task/定期実行(メール自動送信).xml)を確認すると、登録されているトリガーは<CalendarTrigger>1本のみ・StartBoundary 2018-09-01T07:00:00・<Repetition>ブロック無しの日次07:00起動だった——コード中の「4:05:00」というコメントは、現在有効なタスク登録とは一致しない。最も自然な説明は、コメントが過去のスケジュール変更(かつて04:05起動だった時期の名残り)を反映しきれていない歴史的な注釈だという解釈だが、断定はできない推測・要確認。実際にソース上確定しているのは次の仕組み: ①タスクスケジューラは1日1回07:00にだけこのExcelを開く、②開かれた瞬間にAuto_Open→Mainが走り、その場でApplication.OnTime Now+3分, "my_Job"を仕込む、③my_Jobは「メール本文」フォルダを走査して未送信分を送り、処理後に再び自分自身を3分後にOnTime予約する(ただし2:30〜2:55の間に当たった回だけは予約せずQuit_Or_CloseでExcelごと終了)——というVBA内部の自己再スケジュールループが「3分おき」の正体で、Windowsタスクスケジューラ自体に3分間隔の設定は存在しない。つまり同エンジンは07:00に一度起動すると、翌未明の2:30〜2:55の間に自ら止まるまでExcelプロセスとして丸1日以上動き続ける設計であり、タスク側の<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>(72時間で強制終了)もこの「長時間常駐が前提」の設計と整合する。(出典: source/as400-admin/mail-auto-soumu8/定期実行(メール自動送信).xlsm VBA modMain_606.Main・modMain_606.my_Job、source/as400-admin/soumu8-scd-job/Task/定期実行(メール自動送信).xml)
02:40台に生成される「勤怠時刻データ転送」のような超早朝の本文ファイルは、実際にメールボックスへ届くのは04:05以降になる推測 上記の通りエンジンが2:30〜2:55の間に自己終了してから次の07:00起動まで4時間以上のギャップがあるため、実際にメールボックスへ届くのは07:00過ぎ(早くて07:03頃)になると考えられる推測・要確認(実運用ログでの実送信時刻の直接確認はできていない)。「メールが来ない」という問い合わせがこの時間帯絡みなら、まず異常ではなく仕様である。
この2段階の構造(自動実行PCのローカルディスク→サーバーへmove)は、2016年のアーキテクチャ変更が今も効いている結果である。AS400転送設定/使用停止_2016_07_21.txtによれば、当初はサーバーへ直接データ転送していたが速度低下のため現行の2段階方式に変更された(出典: AS400転送設定/使用停止_2016_07_21.txt)。
A3. 06:30の19本連鎖 — 朝イチの異常検知
06:30の19本チェーンが「朝イチの異常検知の本丸」。試作/号口の納期遅れ、型費重複、在庫過剰引当、伝票番号未入力等、ほぼ全ての業務エラー検知メールがここに集中している。15秒間隔で順次起動するため、実際の到着は06:32〜07:22頃まで幅がある(各ジョブの処理時間分だけ後ろにずれるため)。朝一番でこれらのメールを一括確認する運用フローが前提になっていると考えられる推測。
詳細: 19ジョブの全リスト(宛先・内容)
| # | 帳票名(プログラム) | To | Bcc | 内容 |
|---|---|---|---|---|
| 1 | 試作作業指示納期遅れリストメール送付 | 板倉考司,石川慶子 | 新實和敏 | 試作品で指示納期超過も未完了のもの |
| 2 | LogFile再編成実行 | 新實和敏 | — | ログファイル再編成の完了報告 |
| 3 | 型費重複計上チェックリストメール送付 | 板倉考司,石川慶子,内田大助,古橋花奈 | 新實和敏 | 新規・設変受注データの重複検知 |
| 4 | 組付部品過剰引当チェックリストメール送付 | 新實和敏 | — | 組付部品の引当過剰検知 |
| 5 | 納入日入力ミスチェックリストメール送付 | 新實和敏 | — | 納入日入力ミス検知 |
| 6 | 試作品在庫エラーリストメール送付 | 内藤恭英 | 新實和敏 | 試作品在庫のエラー検知 |
| 7 | 金型材料入荷予定リストメール送付(個人名版×5) | 発注者本人1名ずつ | 新實和敏 | 本日入荷予定の金型材料を個別配信 |
| 8 | オネストン入荷予定リストメール送付 | 家田友裕 | 新實和敏 | オネストン(材料)の本日入荷予定 |
| 9 | 作業指示書発行ログ確認結果メール送付 | 新實和敏 | — | 作業指示書発行ログの確認結果 |
| 10 | かんばん品内示と確定の比較メール送付 | 大沼博 | 新實和敏 | かんばん内示数と確定数の差異 |
| 11 | 号口作業指示納期遅れリストメール送付 | 大沼博,三島博之 | 新實和敏 | 号口品で指示納期から1週間経過も未完了 |
| 12 | 伝票№未入力チェックリストメール送付 | 石川慶子,古橋花奈 | 新實和敏 | 伝票番号未入力の検知 |
| 13 | 号口部品指示ロット設定リストメール送付 | 三島博之 | 新實和敏 | 標準在庫・指示ロットの設定情報一覧 |
| 14 | 使用材料確認書メール送付 | 内藤恭英,内田大助 | 新實和敏 | 使用材料確認書 |
| 15 | 棚卸データメール送付 | 古橋花奈 | 新實和敏 | 棚卸データ |
| 16 | 決定単価未入力品番リストメール送付 | 内田大助,板倉考司,石川慶子 | 新實和敏 | 決定単価が未入力の品番一覧 |
| 17 | 届出情報(本日)メール送付 | 新實和敏 | — | 本日の届出情報(総務・労務管理) |
| 18 | BAT0726.xlsm | (不明) | — | 金型管理マスター更新(AS400 ZSBS26相当、DSP65倉庫端末が参照) |
| 19 | 見積単価未入力リストメール送付 | 内田大助,板倉考司,石川慶子 | — | 見積単価未入力品番。NEWマークで初出品番を明示 |
伝票№未入力チェックリストメール送付は、プログラム名に「№」(cp932固有文字)を含み、0630.bat内でこの1件だけがUTF-8として不正なバイト列を作っていた点が異質(出典: 0630.batのバイナリ確認)。
【ヒアリングで判明】#18 BAT0726.xlsmの用途は、新實さんへの確認により判明した:「AS400のZSBS26を実行した状態と同じにする」(=金型管理マスタ更新をAS/400側のZSBS26相当で再現するジョブ)。「立体倉庫のDSP65番台専用端末で金型管理マスタ―のExcel出力ファイルを参照するので、1日一回最新の情報に更新している。」——9章質問1で確認された通りDSP65番台端末は現役稼働中であり、その参照データを毎朝更新する役割。なお同じヒアリングでは勤怠時刻データ転送・お弁当申込み表メールのトリガーについては未回答のままで、これらは依然として未解明だった。【ヒアリングで判明+実VBAで解明】この2件は翌日の追加ヒアリングで新實さんから起動元PCの回答があり、あわせて送られてきたPC本体のVBAソース一式を解析した結果、トリガーの正体とメールが作られる仕組みの両方が判明した——詳細はA3b節(出典: 新實さん、2026-07-21ヒアリングシート回答+2026-07-22回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md・docs/feedback/analysis/2026-07-22-niimi-soumu7-reply.md参照)。
A3b. Soumu7 — 勤怠・お弁当システムの正体 【ヒアリングで判明】【実VBAで解明】
A3節で「未解明」としていた勤怠時刻データ転送(02:40台・08:05台の2回生成)と本日のお弁当申込み表メール送付(08:25台)のトリガーは、新實さんへの追加確認で解けた。新實さん: 「Soumu7(PC) 勤怠の入力用に使用しているPCが起動元です。Soumu7に勤怠のデータおよびお弁当の注文の有無のデータを一時保管し、Server2へデータを転送しています。」——つまりスケジュールタスク/共有フォルダをいくら探しても見つからなかったのは道理で、これらのジョブはServer2側ではなくSoumu7というPC自身のローカルWindowsタスクスケジューラに登録されている、全く別系統のジョブ群だった。新實さんはSoumu7のC:\soumu\フォルダのソース一式(Excel/VBAマクロ13本・起動用bat 5本・Windowsタスクスケジューラのエクスポート)をまるごと送付してくれ、これをsource/labor/勤怠管理-as400settei/に格納・解析した(出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-soumu7-reply.md参照)。
Soumu7のタスクスケジューラのエクスポートXMLを確認すると、勤怠時刻データ転送.bat(中身はstart /w \\soumu7\soumu\勤怠時刻データ転送.xlsmの1行)を呼び出す独立したCalendarTrigger登録が2つ存在する——勤怠時刻データ転送.xml(StartBoundary 2013-11-22T02:40:00、daily)と勤怠時刻データ転送2.xml(同2013-12-20T08:05:00、daily)で、コマンドは両方とも一字一句同じC:\soumu\勤怠時刻データ転送.bat。1日2回生成される謎は、共有バッチの副作用でも不具合でもなく、同一ジョブを指す2本のタスクスケジューラ登録が単純に別々の時刻で存在しているだけだった。「本日のお弁当申込み表メール送付」も本日のお弁当申込み表メール送付.xml(StartBoundary 2020-05-18T08:25:00、daily)が観測値08:25台と完全に一致する。なお勤怠管理マスタ更新.xml(02:20、daily)が02:40の転送より前に登録されており、後述のとおりVBA側も「先にマスタを更新してから転送する」順序と整合する(出典: source/labor/勤怠管理-as400settei/Task_Export/*.xml、UTF-16 XML)。
Task_Export/には他に4本のXMLがあり、Soumu7が勤怠・お弁当以外にも複数の役割を持つことがわかる: 勤怠時刻入力.xmlはLogonTrigger(ユーザーITAKURA\Soumuのログオン時に入力ツールを自動起動する想定だが、エクスポート時点ではSettings>Enabled=falseで無効化されておりデスクトップの勤怠時刻入力 - ショートカット.lnkからの手動起動に置き換わっている可能性がある推測)、勤怠時刻入力自動再起動.xmlは週次(月〜金、10:05、同じくEnabled=false)で入力ツールの保存込み再起動、お弁当発注データ転送.xmlは毎月15日03:30(Enabled=true、12ヶ月すべてに設定)に発注データの月次アーカイブを実行する。最後のIS_Startup.xml(04:00、daily、Command=\\SERVER2\Common\Settei\Startup\IS_Startup.bat)はA13節で既出の全PC一斉設定プッシュ機構がSoumu7にも登録されている確認だが、このSoumu7上の登録はエクスポート時点でEnabled=falseだった(サーバー側や他PCでの稼働まで否定するものではない)。
勤怠時刻データ転送.xlsm — 何をどこへ運ぶか
実VBA(modMain_603、Sub Main)を読むと、このマクロ自体はメールを送らない。処理は次の順序: ①Server2へのPing疎通確認→②入力元の勤怠時刻入力.xlsm「データ」シートを走査し、G列(退勤時刻)が入力済みの行だけを対象に、まずローカルの履歴ファイル勤怠時刻実データ.xlsxへ丸ごとコピー→③同じ行を転送先の勤怠データ.xlsx(File_Path_Masterで解決される共有パス=Server2側)へ移動——B列(社員名)と同名のシートがなければ「原紙」シートを複製して新規作成し、そこへ書き込んでから元データを削除する(=社員1人につき1シートが積み上がっていく設計)。④最後に、その日より前の日付なのにG列が空欄のまま残っている行(=退勤処理を忘れた社員)を拾い出し、「退勤処理を忘れた社員がいます」という本文を組み立てる。ここで実際に送信されるわけではなく、A6節で解説した「メール本文フォルダに書き出すだけ」の間接送信方式と全く同じ形式(1行目=プログラム名、2行目=件名、3行目=本文…)でファイルをFolder_メール定期自動送信\メール本文へ保存して終わる——Soumu7上のこのマクロも、既に解明済みの3分おきメール送信エンジンに乗っかっているだけだったことが確定した(出典: 勤怠時刻データ転送.xlsm VBA modMain_603.Main)。
勤怠管理マスタ更新.xlsm(02:20起動、転送より20分前)は処理概要コメントに「勤怠管理マスタ.xlsxのマスタシートを勤怠時刻入力.xlsmのマスタシートにコピーする。カレンダーを更新する。定時刻変更を反映する。」とあり、当初の推測どおり先にマスタと稼働日カレンダーを最新化してから02:40の転送を走らせる、前工程であることが確認できた(出典: 勤怠管理マスタ更新.xlsm VBA冒頭コメント)。
本日のお弁当申込み表メール送付.xlsm — 出勤簿とお弁当注文の突き合わせ
こちらも同じ間接送信方式で、modMain_603.Mainが本体。①Server2 Ping確認→②Kyujitu_Judge(Date)で会社休日なら即終了(この関数はB6節で既出のCLMP.xlsをローカルにキャッシュしたClmp.xls/コピーClmp.xlsを検索する——サイト内で既に確認済みのclmpカレンダーマスタが、ここでも稼働日判定の一次情報源として使われていることの追加確認)→③勤怠時刻入力.xlsmの「マスタ」シートから在籍者(入社日以前・退職日以後を除外)を拾い、2025-02-19に追加された「社内表記」(長い氏名対策のエイリアス)で表示名を作る→④当日出勤している人は空欄、それ以外は「不在」をデフォルト表示にしつつ、⑤「弁当注文」シートの当日分で○(いる)/×(いらない)が入力されていれば不在表示より注文データを優先して上書きする、という順序で1枚の申込み表(添付ファイル本日のお弁当申込み表.xlsx)を組み立てる。土曜日かつ翌日曜日が稼働日の場合は、同じ実行の中で「明日の分」も追加で作る——日曜稼働日には別途Soumu7上でこのジョブを起動するタスクスケジューラ登録が無いため、前日の土曜にまとめて先読み生成する設計になっている(出典: 本日のお弁当申込み表メール送付.xlsm VBA modMain_603.Main・本日のお弁当申込み表作成)。
実データ本日のお弁当申込み表/本日のお弁当申込み表.xlsx(2018-06-20時点のスナップショット)でも「社員コード/社員名/申込み」の3列構成、○=注文あり/-=不要、34名を超えた分がE〜G列に折り返す様子がVBAロジックどおりに確認できた。
フォルダに同居するお弁当発注データ転送.xlsmは名前が紛らわしいが、「本日のお弁当申込み表メール送付」とは無関係の別プログラム。処理概要コメントは「お弁当の発注データを勤怠時刻入力.xlsmからお弁当発注履歴.xlsxに移動する。毎月15日に先々月までのデータを移動する。」——つまり日次のメール送信ではなく、月次(毎月15日03:30)でお弁当注文データを履歴ファイルへ退避するアーカイブ処理であり、メール本文ファイルは一切作らない。A6節ではMailingList.xlsxに対応キーが無いことを根拠に「お弁当発注データ転送」を使用停止=「プログラム自体が既に削除済み」と分類していたが、今回Soumu7の実ソースとタスクスケジューラ登録(Enabled=true)を確認した限り、ファイルもジョブ登録も現存し月次で稼働中と見られる——そもそもメールを送らないアーカイブ処理なのでMailingList.xlsxに対応キーが無いのは当然であり、「削除済み」の根拠だった不在は誤読だった可能性がある推測・要確認。この食い違いはA6節側の記述の見直し候補として残す。
SCD_D_KINTAI_COPY — Soumu8から勤怠バックアップを中継する仕組み 【実VBAで解明】
Soumu7自身のタスクスケジューラとは別に、Soumu8側にも勤怠関連のジョブが1本登録されていることが判明した。SCD_D_KINTAI_COPY.xlsm(2018-07-27作成)は、Server2とSoumu7の両方へPing疎通確認したうえで、その場で1行だけの一時バッチstart /w \\SERVER2\Soumu_C2\労務管理\勤怠時刻入力バックアップ.xlsmを生成・実行し、完了を待つだけの薄い中継ジョブ。実体(勤怠時刻入力バックアップ.xlsm)はServer2側の労務管理共有フォルダにあり、Soumu7・Soumu8のどちらでもなくServer2上で実行される。呼び出し元のSCD_D_KINTAI_COPY.batはSoumu8のWindowsタスクスケジューラに1日9回(02:00・08:20・09:20・15:40・16:40・17:40・18:40・19:40・20:40)別々に登録されており、休日スキップのKyujitu_Judgeチェックはコメントアウトされている(=休日も含め毎日実行)。A3b冒頭で解明した「勤怠時刻データ転送」(Soumu7ローカル起動、02:40・08:05の1日2回)とは別系統・別目的——あちらは退勤済みデータをServer2の恒久データへ移す処理、こちらは勤怠入力ツール自体の状態を1日9回バックアップする処理と考えられる推測。(出典: source/as400-admin/soumu8-scd-job/SCD_D_KINTAI_COPY.xlsm VBA modMain_600.Main、source/as400-admin/soumu8-scd-job/Task/勤怠時刻入力バックアップ_0200.xmlほか計9本、いずれもCommandはC:\SCD_JOB\SCD_D_KINTAI_COPY.bat)
A4. 出勤入力漏れ確認の3連発(08:10/09:10/10:10)
08:10の「出勤入力漏れ確認」は1回で終わらない。同日08:10/09:10/10:10台の3波で再送されていることが実運用ログから確認できた(例: 081149, 081229, ... 091143, ... 101209, ...)。これは朝礼や始業直後の慌ただしさで見落とされることを見越した「督促の多重化」であり推測、新任者は「1通見て対応済みのつもりでも、次の1時間で再度同じ内容が来る」ことを知っておくべき。件名なしで本文に個人名を直接記載する形式(例:「家田友裕」)(出典: SCD_DAILY_0810.bat、実運用ログ)。
A5. イベント駆動メール — 品番紙・組付指示書
品番紙・組付指示書系メールは「バッチ」ではなく「業務操作のトリガー」。SCD_DAILY_*.batのどれにも出てこないにもかかわらず、1日に30回以上生成される実データがある。つまり出荷指示書/組付指示書を発行する担当者(EIGYOU26/EIGYOU29のPCを使う営業担当)の操作そのものが、直接メール本文ファイルを生成するトリガーになっている。定時バッチの読み方だけでは、この種の帳票運用は見えない。
(出典: 実運用ログ 2026-06-04〜06-11、MailingList.xlsx)
A6. 自動メールの全体像(57プログラム)
各業務プログラム(オフコン連携Excel/VBA)はメールを直接送らず、「メール本文」フォルダにyyyymmddhhmmss_プログラム名.xlsxという本文ファイル(1行目=プログラム名/検索キー、2行目=件名、3行目=本文、4行目=添付ファイルフルパス、5行目=送信PC、6行目=送信ユーザー)を書き出すだけ。別プロセス定期実行(メール自動送信).xlsmが3分おきにこのフォルダを走査し、MailingList.xlsx(プログラム名×宛先マスタ57件)を引いて宛先を解決し実送信する(出典: 自動送信メールのプログラム変更覚書.txt)。【実VBAで解明】3分おきの正体は独立したWindowsタスクスケジューラ登録ではなく、VBA内のApplication.OnTime自己再スケジュールループであることが実ソースで確認できた——詳細な仕組みと「04:05再起動」claimの訂正はA2節参照。
メール送信即時実行.xlsmは定期実行(メール自動送信).xlsmと全く同じmodMain_606モジュールを使い回しているが、2箇所だけ違う: ①Auto_Open内のCall Mainがコメントアウトされており、ファイルを開いただけでは何も起きない(明示的にマクロを実行する必要がある)。②Mainはmy_Jobを1回呼ぶだけで、末尾のApplication.OnTimeによる再予約もコメントアウトされている——3分おきの自己ループには参加せず、1回スキャンして送って、必ずQuit_Or_Closeで終わる単発ツール。用途は、通常のポーリング周期(最大3分の遅延)を待たずに「メール本文」フォルダの内容を即座に送信したい場面(急ぎの帳票など)で手動起動する、間接送信方式のバイパス版と考えられる推測。(出典: source/as400-admin/mail-auto-soumu8/メール送信即時実行.xlsm VBA modMain_606.Main・modMain_606.my_Job、定期実行(メール自動送信).xlsmとの差分比較)
この「本文ファイルを書き出すだけの疎結合な間接送信方式」は、使用停止だった旧メール送信コンポーネントBASP21から、2018年6〜7月にかけて全メールプログラム(30件)が一斉切替した結果である。BASP21がWindows10更新や64bit化で動作しなくなるリスクを見越した、意図的な防御的アーキテクチャ判断だったと設計覚書に明記されている(出典: 切替履歴.xlsx2〜30行、自動送信メールのプログラム変更覚書.txt)。現行の「3分ごとにフォルダを監視して送る」方式は、枯れた技術への依存を減らすための対策である。
送信元PC名から部署が読み取れる推測(フォルダパスとの整合性から):
| PCコード | 観測されたプログラム例 | 推定部署 |
|---|---|---|
SOUMU7 | 勤怠時刻データ転送、本日のお弁当申込み表メール送付 | 総務(Soumu) |
SOUMU8 | 06:30連鎖の大半、出勤入力漏れ確認 | 総務(Soumu)・システム自動処理系 |
EIGYOU26 | 組付指示書発行 | 営業(Eigyou) |
EIGYOU29 | 号口指示計算設定情報、品番紙データの送信 | 営業(Eigyou) |
HINSITU03 | 試作品納期一覧表作成 | 品質(Hinsitu) |
外部宛先(社外)は今回の一次資料からは1件も確認できなかった——自動メールはすべてitakurass.co.jpドメイン内の個人宛。唯一の外部データ往来は逆方向(受信)で、デンソープレステック社から「定期部品発注指示書」「変更部品発注指示書」が毎朝8:30頃、古橋花奈氏1名宛(Cc:デンソー社員2名)に届き、DNKデータ処理配下のExcelマクロで取り込まれるEDI的フロー(出典: DNKデータ処理/_デンソープレステック発信情報_定期部品発注指示書.msgヘッダ)。
【ヒアリングで判明】この受信フローは見かけ上「古橋花奈氏1名宛」だが、単一障害点ではないことが確認された。新實さん: 「古橋以外数名処理はできる。端末は限られるので、Windowsパスワードを数名が知っている状態」——処理できる担当者は複数名おり、対応可能な端末が限られる分をWindowsログインパスワードの共有で補っている、という体制。(出典: 新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
詳細: 廃止・無効化済みのメールプログラム
- 使用停止 見積書削除実行 — 備考「630に記述あり。コメントアウトしている」=現在は動いていない
- 使用停止 届出情報メール送付/お弁当発注データ転送/指示書印刷確認結果メール送付 —
MailingList.xlsx備考「存在しない」=プログラム自体が既に削除済み
A7. 新實さんBcc集中 — 引き継ぎ検討事項
「新實和敏」氏が事実上のシステム監視のCcハブになっている。MailingList.xlsx全57行のうち過半数でBcc/Ccに新實和敏氏が入っており、「AS400_OLD_DATA_TP」「見積書削除実行」「個別振込データメール送付」等、業務エラー系メールの多くはTo自体が新實和敏氏のみ(=一般業務担当者には送られず、システム管理者だけが見る「裏の異常検知チャネル」)になっている。
これは特定個人を批判する意図ではなく、単純に体制上の事実として記録するもの——この人物が退職・異動した場合、引き継ぎが必須な監視対象メールが多数存在することを示す強い証拠であり、新任者研修や引き継ぎ計画の検討材料として扱いたい(出典: MailingList.xlsx全57行の宛先集計)。
A8. 週次・月次処理(毎週月曜12:10 ほか)
| タイミング | 処理内容 | 宛先 |
|---|---|---|
| 毎週月曜12:10 | ①時間外労働集計結果メール送付(総務・労務管理)②カレンダー入力確認メール送付 Excel/VBA | ①小林幸二/猪股康司/内田大助/新家幸広(To)、Bcc新實和敏 ②新實和敏のみ |
| 週次 | ①の本文には「36協定限度時間」の説明があり、月間・年間の残業許容枠を課別(全社/営業課/工機課/試作課/製造課)に分けて管理していた形跡がある。docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照) | — |
| 日次だが週1周期 | メール本文/添付ファイルの7日保管ルール。HOKANKIKAN = 7定数で1週間分を保持し、それ以前を削除 【実VBAで解明】実行主体は定期実行(メール自動送信).xlsm本体ではなく、Task Scheduler日次04:00起動の別プログラム定期削除(送信済メール).xlsm——3分おきループには参加しない単発ジョブで、休日はKyujitu_Judgeでスキップし、送信済み記録の経過日数(HOKANKIKAN < Now - 送信日時)が7日を超えた行から本文ファイルと添付ファイル(4行目に記録されたフルパス)をKillで削除、リストからも1行削除する。(出典: source/as400-admin/mail-auto-soumu8/定期削除(送信済メール).xlsm VBA modMain_606.Main、source/as400-admin/soumu8-scd-job/Task/定期削除(送信済メール).xml daily 04:00:00) | — |
| 月次推測 | (月別)残業時間集計表.xlsxが\\SERVER2\Soumu_C8\労務管理に格納——月次締めの残業集計表が別途存在 | 総務 |
| 号口指示計算実行の都度 | 号口指示計算時の設定情報メール送付 Excel/VBA。無印/_S/_Gの3系統があり、無印=「担当にかかわらずすべて」、_S=「試作部署担当のもの」、_G=「量産部署担当のもの」(A4節ヒアリング済)。【ヒアリングで判明】実際のマクロ→宛先の対応は号口指示計算時の設定情報メール送付.xlsm(無印)→三島博之、_S.xlsm→猪股康司、_G.xlsm→宛先空欄。新實さん: 「_Gを担当するものがいない。現在三島が担当している。三島に送られているものに_Gは含まれる。」——_G系統の宛先が空欄なのは担当者不在を放置しているのではなく、無印(三島博之宛)の送付内容にすでに量産部署(_G)分が含まれているため、別立てで送る意味がないという構造上の重複回避と確定した。(出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-remaining-A-questions-reply.md参照) | 無印:三島博之/_S:猪股康司/_G:(空欄、無印に包含) |
A9. 帳票の物理動線 — プリンタ/保存先マップ
プリンタの物理配置
| プリンタ名 | 設置場所(用途) | 状態 |
|---|---|---|
| IMC5500F | 事務所コピー機 | 稼働中 |
| PC6010M | 事務所伝票専用 | 稼働中 |
| RICOH MP C3004 JPN RPCS | 現場事務所コピー機 | 未使用フラグ |
| RICOH imagio MP W3601 RPCS-K | 検査室幅広コピー機 | 未使用フラグ |
| Bullzip PDF Printer | PDF出力(仮想) | 稼働中 |
| RICOH imagio MP W3601 RPCS | 事務所幅広コピー機 | 未使用フラグ |
| RICOH SP C750M JPN RPCS | 検査室コピー機 | 未使用フラグ |
「事務所伝票専用」機の存在は、出荷指示書・品番紙・組付指示書のような伝票類が汎用コピー機と分離した専用機で常時出力される運用を示唆する推測(出典: Printer_List.xlsx)。
【ヒアリングで判明】新實さん: 「社内で稼働しているプリンタは他にもあるが、AS400からの出力で指定しているプリンタはその2台」——社内には他にも稼働中のプリンタがあるが、AS/400からの出力先として指定されているのはIMC5500F・PC6010Mの2台のみであることが確認された(上表の「未使用フラグ」判定と一致)(出典: 新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)。
帳票アーカイブへのショートカット(印刷のみ・メール化されていない帳票)
印刷記録/フォルダには5つの.lnkショートカットが置かれ、いずれも\\SERVER2\KANRI\AS400\配下の圧縮サブフォルダを指す。ショートカット名がそのまま帳票名になっている:
- 試作作業指示データ修正リスト
- 組付部品引当在庫の引継ぎ指示書
- 組付部品引当在庫の分納引継ぎ指示書
中止・数量変更・納期変更連絡書(新實さんの回答では「受注内容変更連絡書」——ショートカット名からの推定名称と実際の帳票名の食い違いとみられ、同一帳票の別名である可能性が高い。断定はしない)【実業務手順書で解明】同一帳票の別名ではなく、別の2つの文書だった。「中止・数量変更・納期変更連絡書」は、中止・数量変更・納期変更の連絡が現場に届いた際に手作業で回覧される入力側のトリガー文書——作業手順書(E-00)〜(E-13)の各手順は例外なく「この作業は『中止・数量変更・納期変更連絡書』が回ってきた時、常に行ってください」で始まり、末尾に処理済みチェック欄と回覧順の記入欄を持つ紙の連絡票で、これを受けて16.受注データ修正(ITJM38R)や10.試作管理→6.試作作業指示変更(ITTS22R)などのAS/400画面操作を行う。一方、本節のショートカット名「受注内容変更連絡書」(フォルダ作業指示書発行2\受注内容変更連絡書)は、その受注データ修正(JSBS16/ITJM38R)が完了した際にAS/400側が自動的に印刷する出力側の記録(BAT0116/BAT0116A、変更件数KENSU>0で発行)であり、入力トリガーとは別物である。つまり同一ワークフロー上の「入口(紙で回ってくる連絡票)」と「出口(システムが吐く変更記録)」という別役割の2文書。(出典: source/work-procedures/作業手順書/(E) 受注状況の変更/(E-00) オフコン変更処理.doc・(E-02) 単品出荷品の中止処理.doc等参照、order.html JSBS16/ITJM38R節のBAT0116/BAT0116A記述参照)- 部品在庫引当の自動変更結果
5件ともMailingList.xlsxに対応キーがなく(メール化されていない、印刷のみの帳票)、唯一「試作作業指示データ修正リスト印刷」だけ「仮出庫が取り消しになった場合メール」という条件付き送信がMailingList.xlsxにある(出典: 印刷記録/*.lnkバイナリ解析、MailingList.xlsx30行目)。
【ヒアリングで判明】8.3圧縮形式で読み取れなかったサブフォルダの実パスと、確認者の有無が新實さんの回答で判明しました。5帳票は作業指示書発行2と組付指示書発行(いずれもsource/production/配下に実在する部署フォルダ)の2系統に分かれます:
\\Server2\kanri\AS400設定\作業指示書発行2\試作作業指示データ修正リスト\\Server2\kanri\AS400設定\組付指示書発行\組付部品引当在庫の引継ぎ指示書\\Server2\kanri\AS400設定\組付指示書発行\組付部品引当在庫の分納引継ぎ指示書\\Server2\kanri\AS400設定\作業指示書発行2\受注内容変更連絡書\\Server2\kanri\AS400設定\組付指示書発行\部品在庫引当の自動変更結果
確認者については新實さん: 「いずれも保管するのみで、確認者はいません。保管処理と同じタイミングで印刷します。紛失の場合や「もらった、もらっていない」の時のために保管しているだけです。」——5帳票とも能動的な確認者はおらず、紛失・授受トラブル時の証跡として保管されているだけと確定しました。 (出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-remaining-A-questions-reply.md参照)
ファイルサーバー上の帳票保存先(抜粋)
| 帳票/データ | 保存先 |
|---|---|
| 作成済見積書 | \\Server2\kanri\AS400設定\見積書発行\作成済見積書 |
| 旧見積書アーカイブ | \\Server2\Old_Data\見積書 |
| 作成済請求書 | \\Server2\kanri\AS400設定\請求書発行\作成済請求書 |
| 請求書原紙(経理・担当者専用) | \\SERVER2\Soumu_C2\経理\担当者専用\請求業務\請求書原紙 |
| 出荷指示書発行ログ/デンソー機工品番紙 | \\Server2\kanri\AS400設定\出荷指示書発行 |
| 組付指示書ログ(Pt_Log_K/N) | \\Server2\kanri\AS400設定\組付指示書発行 |
見積書は「見積書発行」(現行)と「Old_Data」(旧アーカイブ)の2系統、請求書は「請求書発行」(AS400設定側=出力生成)と「Soumu_C2\経理」(総務経理側=原紙保管・照合結果)の2系統に分離されている。「システムが吐き出す場所」と「経理担当者が受け取って保管照合する場所」が意図的に分けられていると考えられる推測。
すべての自動メール添付ファイルは送信前に\\SERVER2\Kanri\AS400設定\メール定期自動送信\添付ファイル\へ一時生成され、送信後は7日間保管ののち削除される。つまりこのフォルダは「直近1週間分の全自動送信帳票のスナップショット」として機能する、事実上の監査ログ。
A10. 現場の入口 — メインメニューの起動の仕組み 【実VBAで解明】
デスクトップの「メインメニュー」アイコンは、実は本体ではなく2秒で消える中継ファイル。メインメニュー/メインメニュー.xlsm(53.6KB)を実際にVBA解析すると、中身はServer_Path_Setで共有パスを組み立てたあと000_000_000_メインメニュー.xlsm(本体、104.4KB)をマクロ実行つきで開き、自分自身は即座に閉じるだけの薄いスタブだった。デスクトップショートカットが軽量な中継ブックを指しておき、本体は毎回サーバー上の最新版が開かれる——各PCへの配布・更新作業が要らない設計(出典: メインメニュー.xlsm VBA modMain_600: File_Open(Data_Path, DATA_FILE, False, True) → Quit_Or_Close)。
001_000_000_購買管理メニュー.xlsmのような3組の数字は、実際にメニュー階層を表すコード体系だった。000_000_000_メインメニュー.xlsmが最上位ハブで、そこから開く「リスト」シート(No.1〜99の表)にファイル種別(Excel/Word/Folder/PDF/IE)・ファイル名・R/W・部署制限が並び、押したボタン番号でVBAのSelect Case Perm1が対応するExcel_Open/Word_Open/Folder_Open/PDF_Open/IE_Openを呼び分ける。No.99は必ず「一つ上の階層に戻る(最上位ならExcelごと終了)」に予約されている——実際に001_000_000_購買管理メニュー.xlsmのリストNo.99は000_000_000_メインメニュー.xlsmを指していた(出典: 000_000_000_メインメニュー.xlsm リストシート、001_000_000_購買管理メニュー.xlsm リストシート、VBA modMenu_604のSub Main(Opt_No As Long))。
権限もこの中継地点で強制される。リストの「使用制限」欄に部署名(例:「見積担当者」「経理担当者」)があると、ボタンを押した瞬間にPass_Check→Win_User_Powers_GetがSoumu_Admin_List.xlsxをログインユーザー名(Environ("USERNAME"))で検索し、リストに無ければ「このオプションの使用権限がありません。」で処理を止める。開く直前には毎回Zoom_ChangeがSize_To_Zoom.xlsx(解像度→ズーム%の対応表。1024×768〜1920×1080の5解像度に対応)を参照して画面ズームを自動調整する——どのPC・どのモニタ解像度でも同じ見た目でメニューが開くようにする、地味だが徹底した配慮(出典: modMenu_604のPass_Check/Zoom_Change、Size_To_Zoom.xlsx)。
A11. 共通アドイン — 経理インボイス色分けと汎用マクロ 【実VBAで解明】
共通様式/には現品票(A4/A5の2サイズ、品番・入出庫履歴・棚番を記録する現場の物理タグ)が1件のみ。Excel_Addin_Backup/の3アドインをVBA解析すると、AS/400連携用ではなく個人の作業効率化ツールだった。
| アドイン | 作成/更新日 | 内容 |
|---|---|---|
Personal_Macro_値固定.xlam | 2023-11-23作成/2023-12-12更新 | 汎用Excel編集ツール3種(VLOOKUP値固定=数式を値に変換し#N/Aと0を空欄化、先頭行合わせ=複数シートのスクロール位置を一括揃え、数式存在判定)。カスタムツールバーMyTool_1001を自動生成 |
Personal_Macro_塗りつぶし(経理用).xlam | 2023-11-23作成 | セル背景色を切り替えるだけのボタン15個。ツールバーMyTool_1101のボタン群が「適格請求書あり/なし/確認中/要請求」と「仕訳OK/入出OK/資繰OK」という2グループのラベル付きボタンとして並ぶ |
Excel2003ColorPalletKai.xlam | (サードパーティ製) | Excel2007以降で廃止されたExcel2003形式56色パレットをリボンに復活させるOSSツール(作者「fnya」氏、MIT License、2011年公開)。板倉オリジナルではなく既存ツールの導入 |
Personal_Macro_塗りつぶし(経理用).xlamのボタン文言(「適格請求書あり/なし」「要請求」「別途適格請求書相当あり」)は、日本のインボイス制度(適格請求書等保存方式、2023年10月開始)に対応した経理チェックの手作業カンバンそのものである。作成日が2023年11月23日——制度開始の約2ヶ月後——であることも符合する。セルに色を塗るだけの簡素な仕組みだが、請求書突合せ・仕訳入力・資金繰り表確認という3段階の進捗を色で可視化する運用が経理担当者の手元で回っていることが分かる(出典: ToolBat_Name_List.xlsx作成日、アドインVBA Workbook_Openのボタン文言)。finance.htmlで既出の経理業務フローと合わせて読むと理解が深まる。
本ページの各種バッチが呼び出すExcelファイルが軒並み読み取り専用で開かれる(=書き込みロックを取らない)運用には、原因となった具体的な障害事例がある。2010年の開発記録(source/dev-archive/20100305_オフコンからのバッチファイルの呼び出しについての問題点/)によれば、オフコンからバッチ経由でExcelを呼び出す際、呼び出し先のExcelファイルがすでにRead-Writeで開かれていると、Excelが起動せずに(エラー表示も無く)そのまま次のステップへ進んでしまうという無言の失敗パターンが実際に発生した。対処として「呼び出されるExcelファイルは常に読み取り専用で開く」という規約を導入し、複数プログラムが同時に同じファイルを呼び出しても、後続の書き込みが先行プログラムの読み込み中データに影響しないようにした。本ページA3節・A5節などで繰り返し出てくる「メール送信用Excelを読み取り専用で開く」という設計判断は、場当たり的な癖ではなく、この2010年の具体的なインシデントを踏まえた明文化された対処法である。
A12. ITA_PGM — クライアント側エラー通知と実行ログの心臓部 【実VBAで解明】
各クライアントPCのC:\ITA_PGM\は「AS/400↔Excel連携が壊れた時に何が起きるか」を一手に引き受ける場所だった。readme ITA_PGM.txt(2005年作成)によれば、AS/400のCLプログラムがサーバー上のExcelマクロを直接呼ぶと、ネットワーク障害時にエラーも出さず黙って終了してしまう問題があったため、必ずFile_Op.batを経由させる設計にした——CLプログラム側は常に同じバッチファイルを呼べばよく、Excel側のマクロを変更しても各クライアントの設定変更が不要になる、という意図的な間接化である(出典: readme ITA_PGM.txt)。
if not exist %1ここでVBAを追うと、Err_Msg.xlsmのAuto_OpenはErr_Proc_Name.txtを読み取り、Rec_ResultでローカルのC:\ITA_PGM\自動実行結果記録.xlsxに「失敗」を記録し、同時に\\Server2\Kanri\AS400設定\共用\エラー監視\フォルダへタイムスタンプ付きでログをコピーしたあと、「エラーが発生しました。オフコンからの処理を継続できません。このままの状態で社内のコンピュータ管理者に連絡してください。」というダイアログを表示する(出典: Err_Msg.xlsm VBA Sub Main: Err_File = ThisWorkbook.Path & "\Err_Proc_Name.txt"、Rec_Result(Err_Name, False, 1))。「社内のコンピュータ管理者」に連絡させるこの導線は、A7節で確認した「新實さんBcc集中」構造とクライアント側でも一致する——サーバー側の異常検知メールもクライアント側のAS/400接続エラーも、最終的に同じ1人に集約される設計思想が徹底している推測。
自動実行結果記録.xlsx自体はRec_Result共通ルーチン(modRecoed_603、AS400再編成やError_Mail系ツールなど複数のマクロから共有)が呼ばれるたびに1行追記される「実行成功/失敗の飛行記録装置」。今回読み取れたローカルコピーの実データ3行には請求書作成(範囲指定).xlsmと本日のお弁当申込み確認.xlsmに混じってBAT0362.xlsmという正体不明の汎用名の成功ログがあり、A節末尾で既出のBAT0726.xlsm(用途不明)と同じ「意味のない番号名バッチ」パターンがもう1件見つかった(出典: ITA_PGM/自動実行結果記録.xlsx実データ3行、2026-06-11 08:25〜09:10、ユーザーkniinomi/PCSOUMU5)。
【ヒアリングで判明】BAT0362.xlsmの正体は、新實さんへの確認により請求書出力パイプラインの一部であることが判明した。実際の経路はAS400 SSBS62→SSCB62C→ITS001R→BAT0362→BAT0362.xlsm→請求書作成(範囲指定).xlsm——つまりBAT0362.xlsmは正体不明の汎用名バッチではなく、請求書(インボイス)生成パイプラインの中間ステップである。請求書作成(範囲指定).xlsmと同じログに並んで記録されていたのも、同一パイプラインの前後工程だったためと整合する。(出典: 新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
ITA_PGM/WorkSpace/(122ファイル)は、この連携の実データ置き場——60種類以上のAS/400物理ファイル(プレフィックスBHMP/BJDP/JHMP/JUDP/KFDP/KMDP/KSMP/NJDP/SFDP/SHDP/SJDP/SJXP/SNMP/TNDP等)のローカルミラーが、それぞれ.FDF(転送定義)と.xls(実データ)のペアで並ぶ。BHMP.xlsは14.6MB、JHMP.xlsは8.5MB、SNMP.xlsは4.9MBと、単なる作業用一時ファイルにしては大きく、複数の部署別Excel入力ツールが共有する「PC-AS/400間の中間バッファ」として日常的に肥大化しているとみられる推測。構成表入力用ブック.xlsm(と原本の_Base版)はITA_PGM直下の構成データExcel入力.xlsxと対の入力ツールで、BOM(構成表)データの投入もこの仕組みを使っている。
ITA_PGM/shutdown/のSHUTDOWN.EXEはMENISYS製の汎用シャットダウンツール(サードパーティ製フリーソフト、README記載のバージョン情報より2000年代のもの)。Power_Off.batはSHUTDOWN.EXE -h nowを叩くだけの1行バッチで、即時電源断を実行する。01:30の夜間バックアップなど無人実行されるバッチジョブの終了後、担当者が付きっきりでなくてもPCを確実に落とすための仕組みと考えられる推測——A2節の夜間バックアップと合わせて読むと、「無人実行→結果はRec_Resultでログ→電源断」という自動運転PCの一連の生態が見えてくる。
A13. 受注まとめ入力 — 現場が書いたSOPを読む 【実VBAで解明】
以下の節はSOP文書とVBAソースの解析に基づき、受注まとめ入力の技術的な仕組みを詳述している。ただしこの仕組みが実際に現場で今も使われているかどうか自体が不確かであることが、A11カードへの追加ヒアリングで新實さんご本人から申告された。新實さん: 「たぶんですが、受注まとめ入力は使われていないのではなかと思われます。作成依頼をした社員が現在在籍しておらず、その方法が他の社員へ伝わっていないと思われます。」——つまり①このツールの導入を発案・依頼した社員は既に退職しており、②その使い方が他の現職社員へ引き継がれていない可能性がある、という二重の懸念である。以下に記述する5ステップのパイプラインやSOPそのものは実在し、過去には確かに使われていた(B5節でトヨタ紡織向けに作られたことが確認済み)が、移行スコープを判断する際は「現在も使われている前提」で技術移植するのではなく、まず現場での使用実態を追加確認すべき——死んだツールを忠実移植する意味はない。この一連の経緯(属人化した個別対応ツール→回避策の民間伝承化→未検証のエラー連絡経路→依頼者退職による使用実態の不確実化)は、単発の運用トリビアではなく板倉製作所の移行全体に共通する教訓のため、cases.html 代表ケーススタディ⑧としてまとめている。 (出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-remaining-A-questions-reply.md参照)
ITA_PGM/受注まとめ入力の手順と注意点.xlsxは、担当者向けに書かれた5ステップの実務手順書だった。AS/400メニュー番号53〜57が、それぞれ専用のExcelツールを起動する形で1本の処理パイプラインを構成している——これはAS/400の一件ずつ入力するグリーン画面をバイパスし、Excelでまとめて複数件を先に入力してから一括でAS/400へ流し込む「バルク受注登録」の仕組みである。
| メニュー番号 | ツール | やること |
|---|---|---|
| 53 | 受注まとめ入力 Excel | 受注まとめ入力.xlsxが起動。「得意先コード/受注者コード/担当者名(全角5文字)」+4行目から品番・納期・受注日等を空白行なしで入力し、上書き保存 |
| 54 | 受注まとめ入力データ成形 Excel | 53で入力したデータをオフコン取込形式に成形。出力はC:\ITA_PGM\WorkSpace\JUDPT2.xls |
| 55 | 受注まとめ入力データ取込 AS/400 | 54の成形済みデータをオフコンへ取込 |
| 56 | 受注まとめ入力データ確認 AS/400 | 取込データのエラーチェック。F10からITJM69Rを印刷し、チェック欄が全てブランク=エラーなし。*または#があればその箇所がエラーで、53に戻って修正→54→55→56を再実行 |
| 57 | 受注まとめ入力データ変換 AS/400 | 取込データを正式な受注データへ変換。ここで処理完了 |
手順書は太字級の注意点として次を明記している: 「パソコンにログインする都度、保存内容がクリアされる」。つまり受注まとめ入力.xlsxは入力途中の状態を保持しない前提の作業ファイルであり、入力途中で保存し、再開までに電源OFFや再起動が起きる可能性がある場合は、デスクトップ等の別の場所に一旦保存し、再開時にC:\ITA_PGMへ手動で戻すことをSOP自身が指示している。オフコンとは異なる日付形式(yyyy/m/d)や、担当者名を全角5文字ちょうどに満たない分をスペースで埋める必要がある点も、AS/400側の固定長フィールドに合わせるための人手の補正であることが読み取れる(出典: 受注まとめ入力の手順と注意点.xlsx全文)。
新實さんへの確認により、この現象の根本原因が判明した。「セッションをまたぐと消える」という理解自体がやや不正確で、正しくはログイン時に走るタスクスケジューラのジョブがC:\ITA_PGMの中身を配布済みのデフォルト状態へ書き戻していることが原因だった。新實さん: 「各PCは環境変数の設定やC:\ITA_PGMの中身など、どのPCにも共通して変更を加える必要がある場合に備えて、タスクスケジューラを使って、ログイン時に\\Server2\Common\Settei\Startup\IS_Startup.batを実行し、一斉に変更を加える仕組みなっている。」——つまりデスクトップへの退避〜手動復元というSOPの回避策は、バグや設計漏れへの場当たり的な対処ではなく、全PCへ一斉に設定・環境変数を配布するための意図的な仕組みの裏返しとして存在している。利用者にとっての不便さ自体は変わらず現実の課題だが、原因は明確になった。
また受注まとめ入力.xlsxそのものの存在理由も判明した。新實さん: 「客先からデータで注文をもらった際に手入力ではなく、データのコピペで入力できるようにしたもの。トヨタ紡織を前提にしている。」——トヨタ紡織から電子データで注文を受け取った際、AS/400のグリーン画面へ1件ずつ手入力する代わりに、客先データをそのまま貼り付けて一括投入できるようにするために作られたツールである(B5節の得意先構成トレンドで確認した、トヨタ紡織が事実上の新1位顧客へ成長した実態とも符合する)。(出典: 新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
A14. AS400再編成 — 日次・週次ではなく年次の自動棚卸し 【実VBAで解明】【ヒアリングで一部訂正】
AS400再編成/の4ファイルは、スケジュールタスク/配下のSCD_DAILY/SCD_WEEKLYのどの.batからも呼ばれていない——そのためSCD_DAILY/SCD_WEEKLYの自動連鎖には含まれない、手動起動のメンテナンスツール群だと推測していた。【ヒアリングで判明】実際には手動起動ではなく自動化されている。新實さん: 「SCD_Y_07SUN2.bat は同じ方法で年1回7月の第2日曜日に実行」——A3節で解説した06:30の日次連鎖(Windowsタスクスケジューラ起動)と同じ仕組みで、日次ではなく年1回(7月第2日曜日)のスケジュールとして登録されている別系統だった。SCD_Y_07SUN2.batがAS400_OLD_DATA_TP.xlsmを、SCD_Y_07SUN2_0500.batがOLD_JUDP_ADD_ALL_JUDP.xlsmを同様の年次スケジュールで実行する。「タスクスケジューラは現在Soumu8のPCにセット」「実行するバッチファイル、ExcelマクロもSoumu8に保存」——SCD_DAILY/SCD_WEEKLYの連鎖解析にこの2本が出てこなかったのは、手動運用だったからではなく、単に別のPC(Soumu8)上の別のタスクスケジューラ登録(年次)だったため、という説明が正しい(名前が似た「LogFile再編成実行.xlsm」はA3節の06:30連鎖に含まれる別物で、混同注意)。(出典: 新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)
【実VBAで解明】ヒアリング回答と独立に、Soumu8の実ソース(SCD_Y_07SUN2.xlsm・SCD_Y_07SUN2_0500.xlsm)からも同じ結論を裏付けられた。両ファイルとも他のSCD_D_*ラッパーと同型のmodMain_600構造を持ち、それぞれAS400_OLD_DATA_TP.xlsm・OLD_JUDP_ADD_ALL_JUDP.xlsmをJOB_FILEとして起動する——ここまでは新實さんの回答通り。加えて実ソースだけが明かす点として、この2本の休日判定は他のSCD_D_*と逆になっている: 通常はIf Kyujitu_Judge(Date) Then(休日なら中止)だが、年次再編成の2本はIf Not Kyujitu_Judge(Date) Then(休日でなければ中止)——つまり「7月第2日曜日」が万一何らかの理由で稼働日扱いになっていた場合は自動的にスキップされる、休日限定実行のガードが明示的にコードされている。(出典: source/as400-admin/soumu8-scd-job/SCD_Y_07SUN2.xlsm・SCD_Y_07SUN2_0500.xlsm VBA modMain_600.Main)
AS400_OLD_DATA_TP.xlsm(タイトル「AS400データベース再編成」)は、AS/400側で古くなった(=オフコンの物理ファイルから間引かれる)受注データをCWBTF経由でExcelへ転送し、指定列の不要行を削除したうえで処理日を付加したファイル名にリネームし、\\Server2\Kanri\AS_OLD_DATA\yyyymmdd\という日付フォルダへ格納する。エラー時はA12節と同じRec_Result/メール本文書き出しの仕組みで通知される(出典: AS400_OLD_DATA_TP.xlsm VBA modMain_600)。
もう一段面白いのはOLD_JUDP_ADD_ALL_JUDP.xlsmで、コード内コメントの新規作成日が24/07/24(2024年7月24日)——比較的最近に追加されたツールだった。処理概要には「AS400の受注データから再編成された旧データをALL_JUDP.xlsxに追加する」とあり、使用制限として「AS400の再編成と同一日での処理を前提にしているので、違う日の実行はエラーになる」と明記されている。つまり①AS/400側でオフコン管理者が受注データの物理再編成(不要領域の回収)を実行→②同じ日のうちにAS400_OLD_DATA_TP.xlsmで退避データをExcel化→③さらに同日中にOLD_JUDP_ADD_ALL_JUDP.xlsmで恒久アーカイブALL_JUDP.xlsxへ追記という3ステップで「消される前に歴史を保存する」棚卸しが行われている。手動3ステップの「儀式」が今も続いていることが分かる推測——2024年に新規ツールが作られたことは、この儀式が過去の遺物ではなく現役の運用であることの証拠でもある。【ヒアリングで判明】上記の通りこの3ステップは「儀式」的な手動作業ではなく、SCD_Y_07SUN2.bat/SCD_Y_07SUN2_0500.batによる年1回(7月第2日曜日)のタスクスケジューラ自動実行として組み込まれている。ただし「2024年に新規ツールが追加された」という事実そのもの——コード内コメントの新規作成日24/07/24——は今回のヒアリングとは独立に検証済みの根拠であり、この年次自動棚卸しが過去の遺物ではなく現役で運用されていることを裏付ける点は変わらず有効(出典: OLD_JUDP_ADD_ALL_JUDP.xlsm VBA modMain冒頭コメント、新實さん、2026-07-21ヒアリングシート回答、docs/feedback/hearing/2026-07-21-niimi-hearing-sheet-A.md参照)。日付入り旧版AS400データ再編成処理_20100914.xls/_20130711.xlsは、この棚卸し作業が2010年代から続く長期運用であることを示す考古学的な痕跡と考えられる推測。
B1. 一年のリズム — 繁忙期・閑散期
ここからは実データ7年分(judp受注/出荷, sjdp製造指示, shdp支払, clmp/dcmp稼働日カレンダー, tkmp得意先マスタ)の分析。分析窓は2019〜2025年(7完全年)、ガベージ日付は除外(judpで126行・0.28%除外)(出典: SQL Appendix 0節)。
| 月 | 平均稼働日数 | 受注件数/稼働日 | 出荷件数/稼働日 | 区分 |
|---|---|---|---|---|
| 1月 | 18.6日 | 18.9 | 16.7 | 閑散期 |
| 2月 | 20.3日 | 24.2 | 16.8 | |
| 3月 | 22.0日 | 22.1 | 16.4 | |
| 4月 | 20.4日 | 20.6 | 18.3 | |
| 5月 | 18.0日 | 23.7 | 22.6 | GW前駆け込み出荷 |
| 6月 | 21.3日 | 21.0 | 18.8 | |
| 7月 | 22.3日 | 26.4 | 17.0 | 繁忙期 |
| 8月 | 17.0日 | 24.8 | 19.6 | 繁忙期 |
| 9月 | 21.6日 | 25.8 | 17.8 | 繁忙期 |
| 10月 | 21.9日 | 19.5 | 20.8 | 下期立ち上がり出荷 |
| 11月 | 21.3日 | 17.2 | 17.9 | 閑散期 |
| 12月 | 19.6日 | 19.2 | 15.8 | 閑散期 |
繁忙期は7〜9月(受注/稼働日が26.4・24.8・25.8と突出)。閑散期は11月〜1月(17.2〜19.2)。5月は稼働日数自体が少ない(GW影響で18.0日)にもかかわらず出荷/稼働日が22.6と月間トップ級で、GW前の駆け込み出荷が起きていることが読み取れる推測。10月は出荷/稼働日20.8で2位——多くの得意先の上期末(9月)決算後の下期立ち上がり出荷の可能性推測。
7月の受注件数平均は上記の月次テーブルに寄与する前段階の統計では2021-07-28に1日で484件の受注が集中(うち466件が得意先コード5000=トヨタ紡織)しており、実勢の受注ではなく一括データ入力イベントとみられる推測。この1日を除外して再計算しても7月は依然として最も件数が多い月であることは変わらない(出典: SQL Appendix 1a節・7月スパイク検証クエリ)。
支払金額(shdp発生月ベース)は受注量から約1〜2ヶ月遅れて連動しているように見える(7〜9月の受注ピーク→7月・9月・12月の支払ピーク)。12月は最大値が突出(月間2,430万円)しており、年末に大口の支払・仕入決済が集中する年がある推測・要確認。
B2. 一月のリズム — 月末受注集中と出荷の平準化
| 締め日コード | 件数 | 比率 |
|---|---|---|
| 0(=末締め) | 131 | 93.6% |
| 25日締め | 4 | 2.9% |
| 20日締め | 3 | 2.1% |
| 15日締め | 2 | 1.4% |
得意先マスタtk1p140件の94%が月末締め。これと符合し、受注入力日(jujuhi)は25〜28日に明確に集中している——26日が突出して3,391件(全期間中最多、月平均日の約3.4倍)(出典: SQL Appendix 2a節)。
一方、出荷実績日(junohi)は受注ほど極端な集中がなく、月末31日はむしろ少ない。受注は月末に集中するが、出荷は月内に平準化されている——受注の月末集中を生産計画側が緩衝している可能性推測。製造指示書発行日・出荷納期にも大きな偏りはなく、むしろ月末(29〜31日)の出荷納期設定は明確に少ない——納期を月末より前倒しする実務判断とみられる推測。
shdp(支払実績)は発生月のみを保持する月次集計テーブルであり、日次の支払実行日・振込日は記録がない。日次の振込日を持つはずのshdpp1.p1dyfk(振込日)はテーブルが0行(未投入のワークファイル)で、実データからは請求・支払の「月内タイミング」を復元できなかった。締め日は把握できるが、支払実行日そのものは現行の取込データには存在しない(出典: SQL Appendix 2f節)。
B3. 一週間のリズム — 火曜受注・水曜出荷
| 曜日 | 受注 件数/比率 | 出荷 件数/比率 |
|---|---|---|
| 月 | 7,412 / 19.7% | 7,114 / 22.9% |
| 火 | 8,551 / 22.7%(最多) | 4,955 / 15.9% |
| 水 | 8,096 / 21.5% | 7,368 / 23.7%(最多) |
| 木 | 6,745 / 17.9% | 5,267 / 17.0% |
| 金 | 6,686 / 17.8% | 6,278 / 20.2% |
| 土 | 10 / 0.03% | 27 / 0.09% |
| 日 | 1 / 0.00% | 14 / 0.05% |
受注は火曜、出荷は水曜がピーク。木・金にかけて両方とも減少し、週前半(月〜水)に業務が寄っている——週末に向けて出荷を終わらせる/週明けに新規受注をまとめて処理するパターンと考えられる推測。
B4. 年間稼働日と土曜稼働の実態
| 年 | 稼働日数 | 年間日数 | 稼働した土曜 |
|---|---|---|---|
| 2019 | 244 | 365 | 1(52中) |
| 2020 | 245 | 366 | 0 |
| 2021 | 244 | 365 | 0 |
| 2022 | 245 | 365 | 0 |
| 2023 | 244 | 365 | 0 |
| 2024 | 243 | 366 | 0 |
| 2025 | 244 | 365 | 0 |
年間稼働日は毎年243〜245日で安定(週5日勤務+祝日休みのモデルとほぼ一致)。2019年に1回だけ土曜稼働があった以外、7年間で土曜出勤はゼロ、日曜は7年間で1件も稼働日フラグが立っていない——板倉は完全週休二日制で運用されている(カレンダー上は)。なお受注・出荷が非稼働日(土日祝)に計上されているケースが受注4件・出荷48件あり、出荷側が受注側の12倍あるのは「実際の出庫日を週明けにまとめて遡及入力している」可能性を示唆推測・要確認。
B5. 7年トレンド — 得意先構成の地殻変動
受注件数トップ12社の7年推移(2019〜2025年)を見ると、板倉の主要取引先は静的ではない。新任者は「デンソー系がメイン」という旧来の理解のまま業務に入ると、現在の実態とズレる可能性がある。
| 得意先 | 2019 | 2025 | 傾向 |
|---|---|---|---|
| デンソープレステ | 2,371 | 1,605 | ▼-32%(最大顧客だが縮小) |
| トヨタ紡織 | 742 | 1,633 | ▲+120%(急成長、事実上の新1位) |
| 浅賀井製作所 | 898 | 462 | ▼-49% |
| アイシンシロキ | 658 | 234 | ▼-64%(急減) |
| アイシン試作工場 | 65 | 219 | ▲+237%(増加傾向) |
| アイシン新豊 | 167 | 17 | ▼-90%(ほぼ消滅) |
| アイシン新川 | 8 | 68 | ▲+750%(新規立ち上がり) |
| エクセディ | 118 | 0 | 取引消滅(2021年で途絶) |
| 浅野静岡 | — | 132 | 2025年に新規参入 |
最大の構造変化: 従来の最大顧客「デンソープレステ」(コード20、デンソー系)が2019年比-32%で縮小する一方、「トヨタ紡織」(コード5000)が+120%で急成長し、件数ベースでほぼ肩を並べる規模に(2025年は20:1,605件 vs 5000:1,633件で逆転)。主要取引先がデンソー系からトヨタ紡織系へシフトしつつある推測・要確認(商品構成や単価も含めた実質的な売上シフトかは要検証)。
アイシン系グループ内でも明暗が分かれている——アイシンシロキ・アイシン新豊は激減する一方、アイシン試作工場・アイシン新川は急拡大しており、アイシングループ内での発注元の再編が起きている可能性がある推測。エクセディは2022年以降注文ゼロ(取引終了とみられる)、逆に浅野静岡が2025年に突然132件で新規登場——小口取引先の入れ替わりが継続的に起きている(出典: SQL Appendix 4節、judp.jucdtk × tkmp)。
B6. 「二つのカレンダーの謎」の解消
masters.html「1. マスタとコード体系」で触れた「なぜclmpとdcmpという2つのカレンダーマスタが存在するのか」という謎を、実データで定量化した。
| テーブル | 開始 | 終了 | 行数 |
|---|---|---|---|
clmp(カレンダー) | 1988-01-03 | 2028-03-31 | 14,692行 |
dcmp(DNPTカレンダー) | 1996-04-01 | 2028-03-31 | 11,688行 |
clmpの方が8年分(1988〜1996年、3,004行)長く歴史を持つ。dcmpが存在しない期間は単純に「無い」だけで、逆(dcmpにあってclmpにない日)は0件——dcmpはclmpの部分集合的な後発カレンダーという関係。
両テーブルに共通する11,688日のうち、稼働日フラグが食い違う日は92日(0.79%)のみ。かつこの92日はすべて2000-04-15〜2019-10-22の間に集中しており、2020年以降は7年間まるまる差分ゼロ。差分の内訳は曜日別で土曜44件・月曜25件・金曜16件が典型(「clmpでは稼働日とされている土曜がdcmpでは休日」という向きが多い)——2000年代〜2010年代の臨時出勤の反映漏れ・運用ラグとみられる推測。
結論: 「2つのカレンダーの謎」は、実データ上は既に解消済みの過去問題——2020年以降は完全に同期している。差分が残っているのはclmpだけが持つ1988〜1996年の歴史データと、2000〜2019年の92日間の運用ラグのみ。現行運用(2020年〜)ではどちらを見ても同じ結果になる(出典: SQL Appendix 5節)。
以下は【証拠】(一次資料・実データで見つかったパターン)→【質問】(現場への確認事項)の形式でまとめた。これらは今後hearing.html(14. ヒアリングシート)に集約し、実際のヒアリングで解消していく予定。
システムの一日・自動メールについて
- 【証拠】0630.batの18番目のジョブが
BAT0726.xlsmという汎用的なファイル名で、MailingList.xlsxにも対応キーがない。ITA_PGMのローカル実行ログ自動実行結果記録.xlsxにも同種の番号名BAT0362.xlsmの成功ログが別途見つかった。【実VBAで解明(部分的)】BAT0xxxという命名規則自体はindex.html「4.2 AS/400とExcelの二層構造」で既出——AS/400側のCLプログラムがCALL BATCH00で起動する帳票印刷アシスタント系Excelマクロの型番であることは分かっている。
【質問】ただし「BAT0726」「BAT0362」個々が何の帳票かは依然不明。どの帳票(受注票/出荷指示書/組付指示書等)に対応しますか?今も現役で動いていますか? - 【証拠】
「勤怠時刻データ転送」は毎日02:40台と08:05台の2回生成されているが、【ヒアリングで判明+実VBAで解明】Server2側のスケジュールタスク/配下のどの.batにもこのプログラム名が現れない。
【質問】このジョブは0130バッチ・0810バッチにそれぞれ内包された副産物ですか、それとも別立てのタスクスケジューラ登録が存在しますか?スケジュールタスク/を探しても見つからないのは当然だった——このジョブはServer2ではなくSoumu7(勤怠入力用PC)自身のローカルタスクスケジューラに登録されている。しかも「02:40台と08:05台の2回」は副産物ではなく、同一の勤怠時刻データ転送.batを指す独立した2本のCalendarTrigger登録(02:40・08:05)がSoumu7にそのまま存在するため。詳細はA3b節(出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-soumu7-reply.md、source/labor/勤怠管理-as400settei/Task_Export/)。 - 【証拠】
「本日のお弁当申込み表メール送付」は毎日08:25台に安定して送信されているが、対応するトリガーが6本の.batのどれにも見当たらない。【ヒアリングで判明+実VBAで解明】同じくSoumu7ローカルのタスクスケジューラに
【質問】お弁当申込み表メールは何時にどのタスクから起動していますか?本日のお弁当申込み表メール送付.xml(daily、08:25 CalendarTrigger)が登録されており、観測値08:25台と完全に一致した。詳細はA3b節(出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-soumu7-reply.md、source/labor/勤怠管理-as400settei/Task_Export/)。 - 【証拠】「時間外労働集計結果メール送付(全社/営業課/工機課/試作課/製造課)」の5系統のうち、全社以外の4系統は宛先が空欄。
【質問】課別の残業集計メールは将来展開予定で未着手ですか、それとも廃止決定済みで空欄のまま残っているだけですか? - 【証拠】
印刷記録の5つのショートカットはすべて【ヒアリングで判明】実パスは\\SERVER2\KANRI\AS400配下を指すが、圧縮された8.3形式のためサブフォルダ名まで読み取れなかった。
【質問】これら5帳票の印刷履歴(控え)は実際どのフォルダに溜まっていますか?印刷は誰が・どのタイミングで確認していますか?作業指示書発行2・組付指示書発行の2フォルダ配下(詳細はA9節)。確認者はいない——「いずれも保管するのみで、確認者はいません。保管処理と同じタイミングで印刷します。紛失の場合や「もらった、もらっていない」の時のために保管しているだけです。」(出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-remaining-A-questions-reply.md参照) - 【証拠】「存在しない」と明記されたプログラムが3件、「コメントアウトしている」が1件ある。
【質問】これらは完全に廃止済みという理解で正しいですか?復活予定があれば教えてください。 - 【証拠】
号口指示計算時の設定情報メール送付には無印/_G/_Sの3系統があり、_G系統だけ宛先が空欄。【ヒアリングで判明】無印=「担当にかかわらずすべて」(三島博之宛)、
【質問】無印・_S・_Gはそれぞれ何を指しますか(拠点違い?号口区分違い?)。_Gだけ宛先未設定は意図的ですか?_S=試作部署担当(猪股康司宛)、_G=量産部署担当(宛先空欄)。_Gが空欄なのは「_Gを担当するものがいない。現在三島が担当している。三島に送られているものに_Gは含まれる」ため——無印の送付内容に量産分がすでに含まれており、意図的な重複回避と確認された(詳細はA8節)。(出典: 新實さん、2026-07-22回答、docs/feedback/analysis/2026-07-22-niimi-remaining-A-questions-reply.md参照) - 【証拠】Printer_List.xlsxで7台中4台に「未使用」フラグが立っている。
【質問】これらは物理的に撤去済みですか、一時停止だけですか?現在稼働しているのはIMC5500FとPC6010Mの2台のみという理解でよいですか? - 【証拠】デンソープレステック社からの発注指示書メールは古橋花奈氏1名宛で、社内の自動取込トリガーは
DNKデータ処理のExcelマクロに限られる。
【質問】同氏以外もこのメールを監視できる体制ですか?(不在時に取込処理が止まるリスクの有無) - 【証拠】
受注まとめ入力の手順と注意点.xlsxに「パソコンにログインする都度、保存内容がクリアされる」という注意書きがあり、入力途中の保存はデスクトップ等へ一旦逃がして手動でC:\ITA_PGMへ戻す運用になっている。
【質問】これは意図的な仕様(セキュリティ上、入力途中データを残さない設計)ですか、それとも本来直したいが直せていない制約ですか?この手順を知らずに入力内容を失った事例はありますか? - 【証拠】
OLD_JUDP_ADD_ALL_JUDP.xlsmは「AS400の再編成と同一日での処理を前提」と明記され、2024年7月24日に新規作成されていた。AS400再編成一式はスケジュールタスク/のどの.batからも呼ばれていない。
【質問】AS/400側の物理ファイル再編成(RGZPFM等)は誰が・どの頻度で実行していますか?それに合わせてこのExcelツール3点は毎回手動で実行されているという理解で合っていますか? - 【証拠】
ITA_PGMのエラー通知フロー(【ヒアリングで判明】「実際には発生していませんが、手段としてはそのままにして新實を呼びに行く、ことになります。」——記録の残る経路ではなく、その場の状態を保持したまま直接呼びに行く口頭対応が想定されており(かつ実例はこれまで一度もない)。 推測・要確認 あわせて新實さんは、この質問への回答に続けて「たぶんですが、受注まとめ入力は使われていないのではなかと思われます。作成依頼をした社員が現在在籍しておらず、その方法が他の社員へ伝わっていないと思われます。」と証言——受注まとめ入力自体が実際には使われていない可能性が浮上した(詳細はA13節冒頭のcallout)。(出典: 新實さん、2026-07-22回答、File_Op.bat→Err_Msg.xlsm)は「社内のコンピュータ管理者に連絡してください」と表示するのみで、宛先や連絡手段は指定していない。A7節の新實氏Bcc集中と符合する。
【質問】このエラーダイアログが出た場合、現場の実際の連絡フローは電話・チャット・対面のいずれですか?記録には残りますか?docs/feedback/analysis/2026-07-22-niimi-remaining-A-questions-reply.md参照)
一年・一月・一週間のリズムについて
- 【証拠】2021-07-28に受注484件(うち466件がトヨタ紡織)が1日に集中している。
【質問】この一括登録は、システム移行時のデータ一括入力、または年間契約分の一括発注登録など、通常の受注フローとは異なるイベントであっていますか?(分析上この日を外れ値として除外して良いか確認したい) - 【証拠】受注入力は月末25〜28日(特に26日)に集中し、得意先の93.6%が月末締めであることと符合する。一方、出荷実績日にはこの極端な集中が見られない。
【質問】月末の受注集中は「得意先が締め日前にまとめて発注データを送ってくる」ためで合っていますか。それとも板倉側の入力作業自体が月末に偏っているのでしょうか? - 【証拠】
shdpは発生月のみの月次集計テーブルで、日次の振込日を持つはずのshdpp1.p1dyfkは実データが0行だった。
【質問】支払実行日(振込日)は現在どのシステム/台帳で管理されていますか? - 【証拠】最大顧客デンソープレステが2019年比-32%で縮小する一方、トヨタ紡織は+120%で急拡大し、2025年には件数ベースでほぼ同規模になった。
【質問】これは板倉の事業戦略として意図的にトヨタ紡織向けを拡大したものですか、それともデンソー側の発注方針変更による受動的な変化ですか?金額・利益率も同じ方向に動いているか確認したいです。 - 【証拠】アイシングループ内でもアイシンシロキ・アイシン新豊が激減する一方、アイシン試作工場・アイシン新川が急拡大している。
【質問】これはアイシングループ内での発注窓口の統廃合・再編(コード間の付け替え)で、実質的な取引総量は維持されているという理解で合っていますか? - 【証拠】土曜稼働は7年間で2019年の1回のみ、出荷が非稼働日に計上されるケースが48件(受注の12倍)あった。
【質問】この48件は「週明けに前週末発生分をまとめて遡って入力している」運用が正しい理解でしょうか? - 【証拠】5月(GW月)は稼働日数が最少にもかかわらず出荷件数/稼働日が月間2位、10月も出荷/稼働日が月間3位で高い。
【質問】5月はGW前の駆け込み出荷、10月は多くの得意先の下期立ち上がり出荷という理解で合っていますか?現場の実感と一致しますか?
A1〜A9節(システムの一日・自動メール)はsource/as400-admin/スケジュールタスク/・メール定期自動送信/・印刷記録/・各種.xlsxマスタの一次資料と、2026年6月4日〜11日の実運用ログに基づく。A10〜A14節(メインメニュー・共通アドイン・ITA_PGM・受注まとめ入力・AS400再編成)はsource/as400-admin/メインメニュー/(26ファイル)・Excel_Addin_Backup/・AS400再編成/・AS400転送設定/・source/as400-workspace/のVBAソースをoletools.olevbaで復元し、実データ(受注まとめ入力の手順と注意点.xlsx本文、自動実行結果記録.xlsx実行ログ、ToolBat_Name_List.xlsx作成日)と突き合わせて記述した。【実VBAで解明】タグが付いた箇所は2026年7月22日に新實さんから送付された自動実行用PC「Soumu8」の実ソース一式(source/as400-admin/soumu8-scd-job/・メール定期自動送信/・AS400/)をoletools.olevbaで復元し、付随するWindowsタスクスケジューラのエクスポートXML(source/as400-admin/soumu8-scd-job/Task/)と突き合わせて記述したもので、詳細はdocs/feedback/analysis/2026-07-22-niimi-soumu8-vba-analysis.mdを参照。B節(一年・一月・一週間のリズム)の集計SQLは本番DB(itakura-pilot-db、read-only接続)に対して実行したもので、以下に再現用SQLを収録する。
SQL Appendix(再現用、実行環境: docker exec -e PGOPTIONS='-c default_transaction_read_only=on' itakura-pilot-db psql -U pilot -d itakura)
-- ===== 0. データ健全性チェック =====
SELECT count(*) FILTER (WHERE jujuhi IS NULL OR jujuhi=0) AS null_or_zero,
count(*) FILTER (WHERE jujuhi IS NOT NULL AND jujuhi<>0 AND (jujuhi<20180101 OR jujuhi>20261231)) AS out_of_window,
count(*) AS total
FROM judp;
-- ===== 1. 月次リズム =====
-- 1a. 受注 件数/数量 の月別平均(7年)
WITH ym AS (
SELECT extract(year FROM d)::int yr, extract(month FROM d)::int mo, count(*) c, sum(qty) q
FROM (SELECT to_date(jujuhi::text,'YYYYMMDD') d, jujusu qty FROM judp WHERE jujuhi BETWEEN 20190101 AND 20251231) t
GROUP BY 1,2
)
SELECT mo, round(avg(c),1) avg_orders, round(stddev_pop(c),1) sd, min(c), max(c), round(avg(q),0) avg_qty
FROM ym GROUP BY mo ORDER BY mo;
-- 1-2. 稼働日で正規化(受注/出荷 per 稼働日)
SELECT mo,
round(avg(c_orders)/avg(wd),1) orders_per_wd,
round(avg(c_ships)/avg(wd),1) ships_per_wd
FROM (
SELECT o.yr, o.mo, o.c c_orders, s.c c_ships, w.wd
FROM
(SELECT extract(year FROM d)::int yr, extract(month FROM d)::int mo, count(*) c
FROM (SELECT to_date(jujuhi::text,'YYYYMMDD') d FROM judp WHERE jujuhi BETWEEN 20190101 AND 20251231) t GROUP BY 1,2) o
JOIN
(SELECT extract(year FROM d)::int yr, extract(month FROM d)::int mo, count(*) c
FROM (SELECT to_date(junohi::text,'YYYYMMDD') d FROM judp WHERE junohi BETWEEN 20190101 AND 20251231) t GROUP BY 1,2) s
ON o.yr=s.yr AND o.mo=s.mo
JOIN
(SELECT (clymd/10000)::int yr, ((clymd%10000)/100)::int mo, count(*) FILTER (WHERE cld101=0) wd
FROM clmp WHERE clymd BETWEEN 20190101 AND 20251231 GROUP BY 1,2) w
ON w.yr=o.yr AND w.mo=o.mo
) x GROUP BY mo ORDER BY mo;
-- 7月スパイク検証
SELECT jucdtk, count(*) FROM judp WHERE jujuhi=20210728 GROUP BY 1 ORDER BY 2 DESC;
-- ===== 2. 月内リズム =====
-- 2a. 受注日 日別分布
SELECT extract(day FROM d)::int dom, count(*) c
FROM (SELECT to_date(jujuhi::text,'YYYYMMDD') d FROM judp WHERE jujuhi BETWEEN 20190101 AND 20251231) t
GROUP BY 1 ORDER BY 1;
-- 2e. 得意先締め日分布
SELECT distinct t1d301, count(*) FROM tk1p GROUP BY 1 ORDER BY 2 DESC;
-- 2f. shdpp1 が空であることの確認
SELECT count(*) FROM shdpp1;
-- ===== 3. 週内リズム =====
-- 3a. 受注 曜日分布
SELECT to_char(d,'Dy') dow, count(*) c
FROM (SELECT to_date(jujuhi::text,'YYYYMMDD') d FROM judp WHERE jujuhi BETWEEN 20190101 AND 20251231) t
GROUP BY 1, extract(isodow FROM d) ORDER BY extract(isodow FROM d);
-- 3c. 年間稼働日数
SELECT (clymd/10000)::int yr, count(*) FILTER (WHERE cld101=0) worked_days, count(*) total_days
FROM clmp WHERE clymd BETWEEN 20190101 AND 20251231 GROUP BY 1 ORDER BY 1;
-- 3d. 土曜稼働
SELECT (clymd/10000)::int yr, count(*) FILTER (WHERE cld101=0) sat_worked, count(*) sat_total
FROM clmp WHERE clyobi='SAT' AND clymd BETWEEN 20190101 AND 20251231 GROUP BY 1 ORDER BY 1;
-- 3e. 非稼働日への計上
SELECT 'orders' kind, count(*) c FROM judp j JOIN clmp c ON c.clymd = j.jujuhi
WHERE j.jujuhi BETWEEN 20190101 AND 20251231 AND c.cld101=1
UNION ALL
SELECT 'shipments', count(*) FROM judp j JOIN clmp c ON c.clymd = j.junohi
WHERE j.junohi BETWEEN 20190101 AND 20251231 AND c.cld101=1;
-- ===== 4. 得意先別7年トレンド =====
WITH yearly AS (
SELECT jucdtk, extract(year FROM to_date(jujuhi::text,'YYYYMMDD'))::int yr, count(*) c, sum(jujusu) q
FROM judp WHERE jujuhi BETWEEN 20190101 AND 20251231
GROUP BY 1,2
), tot AS (
SELECT jucdtk, sum(c) total_c FROM yearly GROUP BY 1 ORDER BY 2 DESC LIMIT 12
)
SELECT t.jucdtk, tk.tknmrj, y.yr, y.c, y.q
FROM yearly y JOIN tot t ON t.jucdtk = y.jucdtk
LEFT JOIN tkmp tk ON tk.tkcdtk = t.jucdtk
ORDER BY t.total_c DESC, y.yr;
-- ===== 5. カレンダー比較 clmp vs dcmp =====
SELECT 'clmp' t, min(clymd), max(clymd), count(*) FROM clmp
UNION ALL SELECT 'dcmp', min(dcymd), max(dcymd), count(*) FROM dcmp;
SELECT (c.clymd/10000)::int yr, count(*) FILTER (WHERE c.cld101<>d.dcd101) diffs
FROM clmp c JOIN dcmp d ON c.clymd=d.dcymd GROUP BY 1 ORDER BY 1;
SELECT c.clyobi, count(*) FROM clmp c JOIN dcmp d ON c.clymd=d.dcymd
WHERE c.cld101<>d.dcd101 GROUP BY 1 ORDER BY 2 DESC;
-- ===== 参考: リードタイム再確認 (memo記載17日と近似) =====
SELECT percentile_cont(0.5) WITHIN GROUP (ORDER BY (to_date(junohi::text,'YYYYMMDD') - to_date(jujuhi::text,'YYYYMMDD')))
FROM judp WHERE jujuhi BETWEEN 20190101 AND 20251231 AND junohi BETWEEN 20190101 AND 20261231 AND junohi >= jujuhi;
-- => median 16日