📋 概要
Tera計算2_2データ作成.vbは、配送センター規模計算システムにおけるデータ準備・加工フォームの実装ファイルです。 このフォームは、後続の規模計算処理で必要となる各種集計テーブルおよびEIQ分析データを生成する中核的な役割を果たします。
🎯 主要機能
- データ作成パイプライン: 20以上のAccessテーブルを段階的に生成
- EIQ分析データ生成: 日別・全体・平均の各レベルでケース/バラのEIQマトリクスを構築
- データ状態管理: 既存データの有無を判定し、重複作成を防止
- 削除・リセット機能: 生成済みデータの一括削除と再作成準備
- データ表示・選択: 生成されたEIQデータの確認と出荷日別選択
⚠️ 重要な注意事項
本フォームはAccess データベース(MyDB)に対して大量のSQL操作を実行します。 データ作成処理はデータが存在しない場合のみ実行され、既存データがある場合は保護されます。 削除操作はT7*、T8*、T9*、TA*テーブルを一括削除するため、実行前の確認が重要です。
| 項目 | 内容 |
|---|---|
| ファイル名 | Tera計算2_2データ作成.vb |
| フォームクラス名 | Tera計算2用データ作成F |
| 総行数 | 845行 |
| 言語 | Visual Basic .NET (Windows Forms) |
| 主要依存 | System.Data.OleDb、Tera計算k1.vb(共有モジュール) |
🎯 目的と役割
システム内での位置づけ
本フォームは、Tera計算2システムにおける第2段階に位置します:
- メニュー画面 (Tera計算2_1メニュー画面.vb) - システム起動とワークフロー選択
- データ作成画面 (本フォーム) - 分析用データの生成と準備
- 規模計算画面 (配送センター規模計算_改5From) - 実際の計算処理
データフロー全体像
EIQ分析とは
EIQ分析は物流センターの設計・分析において広く使われる手法です:
- E (Entry): 出荷先数、伝票数
- I (Item): アイテム数、品目数
- Q (Quantity): 数量、ケース数、バラ数
これらの指標を組み合わせることで、出荷パターン、ピッキング効率、保管レイアウトなどの最適化に必要な情報を得ることができます。
🏗️ 構造
クラス階層
主要プロシージャ一覧
| 分類 | プロシージャ名 | 概要 |
|---|---|---|
| 初期化 | Tera計算2データ作成F_Load | フォーム読み込み時の初期化処理 |
| 出荷日ConB作成 | 出荷日コンボボックスの生成 | |
| メイン処理 | Tera計算2データ作成Bt_Click | データ作成パイプライン全体の実行 |
| 全データ削除ChkB_CheckedChanged | データ削除・リセット処理 | |
| 表示Bt_Click / 表示開始 | 生成データの表示 | |
| 計算・条件設定 | 全データ日数 | データ期間の日数計算 |
| EIQ計算条件 | 出荷単位に応じたテーブル名決定 | |
| T610系集計 | T610_全出荷集計作成 | 全出荷データ集計 |
| T612_全出荷日別集計作成 | 日別出荷集計 | |
| T614_ケース出荷日別集計作成 | ケース出荷日別集計 | |
| T615_バラ出荷日別集計作成 | バラ出荷日別集計 | |
| T620_稼働時間日別集計作成 | 稼働時間集計 | |
| T700系EIQ | T700_雛形EIQ | EIQマトリクスの雛形生成 |
| T710_日別ケースバラデータEIQ作成 | 日別ケースバラEIQ | |
| T720_日別ケースデータEIQ作成 | 日別ケースEIQ | |
| T730_日別バラデータEIQ作成 | 日別バラEIQ | |
| T810系EIQ | T810_全ケースバラデータEIQ作成 | 全ケースバラEIQ |
| T820_全ケースデータEIQ作成 | 全ケースEIQ | |
| T830_全バラデータEIQ作成 | 全バラEIQ | |
| T910系EIQ | T910_全平均ケースバラデータEIQ作成 | 全平均ケースバラEIQ |
| T920_全平均ケースデータEIQ作成 | 全平均ケースEIQ | |
| T930_全平均バラデータEIQ作成 | 全平均バラEIQ | |
| 結合・修正 | EIQテーブル結合 | 最終EIQテーブル(TA10)の生成 |
| Null修正 | NULL値の補正処理 | |
| ナビゲーション | メニュー画面へBt_Click | メニュー画面への戻り |
🔧 初期化処理
フォームロード処理
初期化の仕組み
- データ状態判定: T830_全バラデータEIQテーブルの存在を確認し、
データ有無chk1フラグを設定 - 目的: データ作成済みの場合は重複実行を防止し、「データ作成 完了してます」メッセージを表示
- 理由: T830は最終段階近くで生成されるため、存在すれば全パイプラインが完了している判断材料となる
出荷日コンボボックス作成
このプロシージャは、T050_日別仮集計テーブルから出荷日の一覧を取得し、コンボボックスに追加します。 特別な集計オプション「全データ平均」と「全データ」を先頭に配置し、その後に個別の日付が続きます。
| 選択肢 | 意味 |
|---|---|
| 全データ平均 | 全期間の平均値を使用した計算(デフォルト) |
| 全データ | 全期間の合計値を使用した計算 |
| 個別日付 | 特定日のデータを使用した計算(例: 2024/01/15) |
⚙️ データ作成処理
メイン実行フロー
パイプラインの6ステージ
ステージ1: 基礎集計テーブル生成 (T610系)
目的: 元データ(T050_日別仮集計)から各種出荷集計を作成
全データ日数()- データ期間の日数を計算T610_全出荷集計作成()- 全体の出荷集計T612_全出荷日別集計作成()- 日別出荷集計T614_ケース出荷日別集計作成()- ケース出荷の日別集計T615_バラ出荷日別集計作成()- バラ出荷の日別集計T620_稼働時間日別集計作成()- 稼働時間の日別集計
ステージ2: EIQ雛形と日別EIQマトリクス生成 (T700系)
目的: EIQ分析の基礎となるマトリクス構造を構築
T700_雛形EIQ()- EIQマトリクスの雛形(行列構造)T710_日別ケースバラデータEIQ作成()- 日別のケース+バラ混在EIQT720_日別ケースデータEIQ作成()- 日別のケースのみEIQT730_日別バラデータEIQ作成()- 日別のバラのみEIQ
特徴: 各出荷日ごとのEIQ特性を捉えるため、日次変動分析が可能
ステージ3: NULL値補正
目的: EIQ計算で発生したNULL値を補正
Null修正()- EIQテーブル内のNULL値を0または適切な値に変換
重要性: 後続の集計・平均計算でNULLがエラーを引き起こさないようにする
ステージ4: 全データEIQマトリクス生成 (T810系)
目的: 全期間を対象としたEIQ合計値を算出
T810_全ケースバラデータEIQ作成()- 全期間ケース+バラEIQT820_全ケースデータEIQ作成()- 全期間ケースのみEIQT830_全バラデータEIQ作成()- 全期間バラのみEIQ
用途: 全体傾向の把握、ピーク分析
ステージ5: 全平均EIQマトリクス生成 (T910系)
目的: 日平均値を算出し、標準的な1日あたりの作業量を推定
T910_全平均ケースバラデータEIQ作成()- 平均ケース+バラEIQT920_全平均ケースデータEIQ作成()- 平均ケースのみEIQT930_全平均バラデータEIQ作成()- 平均バラのみEIQ
計算式: 平均値 = 全データ合計 ÷ 営業日数
用途: 標準作業量の設定、人員計画
ステージ6: 最終テーブル結合 (TA10)
目的: 各段階のEIQデータを統合し、規模計算用の最終テーブルを生成
EIQテーブル結合()- TA10_ケースバラデータEIQ を作成
成果物: TA10テーブルには日別/全体/平均のすべてのEIQ情報が含まれ、後続の規模計算フォームで参照されます
処理時間と進捗表示
⏱️ パフォーマンス特性
データ作成パイプラインは20以上のテーブル生成と複数のSQL集計を実行するため、 データ量に応じて数秒~数分の処理時間を要します。
- ステータス表示: 処理経過Tbに「データ作成中!!」が表示され、各段階でチェックボックスが順次チェックされます
- ユーザー待機: 完了まで画面操作は待機状態となります
- 完了メッセージ: 「データ作成 完了」が表示され、すべてのチェックボックスがチェック済みになります
代表的なテーブル生成ロジック例
T610_全出荷集計作成の実装パターン
各テーブル生成関数は以下の共通パターンに従います:
この3ステップパターン(削除→SQL構築→実行)が全テーブル生成で共通して使われています。
🗑️ 削除処理
全データ削除チェックボックス
削除範囲
| 範囲 | テーブル | 内容 |
|---|---|---|
| T700~T799 | 100個 | 日別EIQ関連 (雛形、日別ケースバラ、日別ケース、日別バラ) |
| T800~T899 | 100個 | 全データEIQ関連 (全ケースバラ、全ケース、全バラ) |
| T900~T999 | 100個 | 全平均EIQ関連 (平均ケースバラ、平均ケース、平均バラ) |
| TA10~TA99 | 90個 | 最終結合テーブル (TA10_ケースバラデータEIQ等) |
⚠️ 削除時の注意
削除チェックボックスはチェック時に即座に削除を実行します。 確認ダイアログは表示されないため、誤操作に注意が必要です。
- 削除対象は最大390個のテーブルに及ぶ可能性があります
- T610系集計テーブルは削除されず保護されます
- 削除後は
データ有無chk1が0にリセットされ、再作成が可能になります
削除処理の目的
- データ再作成: 元データ(T050)が更新された場合、再計算が必要
- エラー修正: 途中でエラーが発生した場合、中途半端な状態をクリーンアップ
- テスト・検証: 開発・検証時のデータリセット
- ディスク容量確保: 大量のテーブルを削除して容量を解放
📊 表示処理
表示ボタンクリック
EIQ計算条件によるテーブル選択
表示される情報
メインEIQマトリクス (Tera計算2_EIQGV1)
E(出荷先)を行、I(品目)を列とする2次元マトリクスで、各セルにQ(数量)情報が格納されます。 このマトリクスにより、「どの得意先に」「どの商品を」「どれだけ」出荷したかが一目で把握できます。
EQ総計 (Tera計算2_EQ総計GV)
E × Q: 出荷先ごとの数量集計。各得意先への出荷ボリュームを比較し、主要顧客を識別します。
EI総計 (Tera計算2_EI総計GV)
E × I: 出荷先ごとの品目数。各得意先が何種類の商品を注文しているかを示し、ピッキング複雑度の指標となります。
IQ総計 (Tera計算2_IQ総計GV)
I × Q: 品目ごとの数量集計。ABC分析の基礎データとなり、在庫配置や保管戦略に活用されます。
従来計算 (Tera計算2_従来計算GV)
T620_稼働時間日別集計の内容を表示。従来の計算方法との比較検証に使用されます。
💡 表示機能の活用
表示機能は、生成されたデータの妥当性検証に不可欠です:
- データ確認: 作成直後にデータ内容を目視確認
- 異常値検出: 極端に大きい/小さい値、NULLの残存などをチェック
- 日別比較: 出荷日を切り替えて日次変動を確認
- ケース/バラ比較: 出荷形態による特性差を分析
🔗 依存関係
外部依存
共有モジュール: Tera計算k1.vb
| 依存項目 | 用途 |
|---|---|
| MyDB | Accessデータベースファイルのフルパス |
| Table有無(テーブル名) | 指定テーブルの存在確認 |
| DEL_table(テーブル名) | 指定テーブルの削除 |
| DEL_Query(クエリ名) | 指定クエリの削除 |
| Sqlcommands_Add(SQL文) | SQL文の実行 (テーブル作成、データ挿入等) |
.NETフレームワーク
- System.Data.OleDb: Access データベースへの接続・操作
- System.Windows.Forms: フォーム、コントロール、イベント処理
- System.Data: DataTable、DataAdapter などのデータ管理
データベース依存
入力テーブル
| テーブル名 | 内容 |
|---|---|
| T050_日別仮集計 | 元データ。出荷日、得意先名、商品ID、出荷単位、ケース数、バラ数などを含む |
生成テーブル (主要なもの)
| テーブルグループ | テーブル例 | 内容 |
|---|---|---|
| T610系 | T610, T612, T614, T615, T620 | 基礎集計 (全出荷、日別、ケース/バラ、稼働時間) |
| T700系 | T700, T710, T720, T730 | EIQ雛形と日別EIQ (ケースバラ/ケース/バラ) |
| T810系 | T810, T820, T830 | 全データEIQ (ケースバラ/ケース/バラ) |
| T910系 | T910, T920, T930 | 全平均EIQ (ケースバラ/ケース/バラ) |
| TA10系 | TA10_ケースバラデータEIQ | 最終統合EIQテーブル (規模計算で使用) |
依存関係図
設計上の特徴
✅ 疎結合アーキテクチャ
- データベース仲介: フォーム間で直接オブジェクトを受け渡さず、データベースを介して連携
- 共有モジュール: DB操作や起動処理を共有モジュールに集約し、重複を排除
- 状態フラグ:
データ有無chk1により重複実行を防止し、データ整合性を保護 - 段階的処理: パイプラインを明確に分割し、各段階でチェックボックスによる完了確認を実施
⚙️ 技術的注意点
パフォーマンス考慮事項
⚡ 処理時間最適化
- 大量SQL実行: 20段階のパイプラインで複数回のSELECT INTO、GROUP BY、JOINを実行するため、データ量に比例して処理時間が増加
- インデックス: T050_日別仮集計に適切なインデックス(出荷日、得意先名、商品ID)がない場合、極端に遅くなる可能性
- メモリ使用量: DataGridViewへの大量行バインドはメモリを消費するため、100万行を超えるデータでは注意が必要
- Access制約: Access データベースは2GB制限があり、テーブル数が増えるとファイルサイズが肥大化
エラーハンドリングの不足
⚠️ エラー処理の補強が推奨される箇所
- SQL実行失敗: テーブル作成中にSQL構文エラーやデータ型不一致が発生しても、現状ではエラーメッセージが不明瞭
- データベース接続切断: ネットワークドライブ上のAccessファイルが切断された場合の対処がない
- ディスク容量不足: テーブル生成中に容量不足になった場合、不完全な状態になる可能性
- NULL値問題:
Null修正()があるものの、すべてのケースをカバーしているか要検証
推奨対策: Try-Catchブロック、トランザクション、ロールバック機能の追加
保守性に関する観察
📝 コード構造の特徴
- プロシージャの命名: テーブル名をそのまま関数名に使っているため、対応関係が明確
- 段階的実行: 各段階が独立したプロシージャになっており、テスト・デバッグが容易
- チェックボックス同期: 処理進捗が視覚的に確認できる設計
- SQL文のハードコード: SQL文がVBコード内に直接記述されており、テーブル構造変更時に多くの箇所を修正する必要がある
改善案: SQL文を外部ファイル(XML、JSON)や設定テーブルに分離すると、保守性が向上
テスト戦略
| テスト種別 | テストケース |
|---|---|
| 単体テスト |
- 各T610/T700/T810/T910系プロシージャが正しいテーブルを生成するか - Null修正が欠損値を適切に補正するか - 出荷日ConB作成が正しい日付リストを返すか |
| 統合テスト |
- データ作成パイプライン全体が正常に完了するか - 削除→再作成が正しく動作するか - 表示機能が各テーブルを正しく表示するか |
| 性能テスト |
- 10万行、100万行のT050データでの実行時間測定 - メモリ使用量のモニタリング - Access ファイルサイズの肥大化度合い確認 |
| エラーテスト |
- T050が存在しない場合の挙動 - 途中でデータベース接続が切断された場合 - ディスク容量不足時の挙動 |
将来の拡張可能性
- 並列処理: 独立した集計(T710/T720/T730など)を並列実行して高速化
- クラウドDB移行: AccessからSQL Server、PostgreSQLへの移行で大容量データ対応
- バッチ処理化: GUIフォームではなく、コマンドラインバッチとして自動実行
- ログ出力: 各段階の実行時間、レコード数をログファイルに記録
- 差分更新: 全件再作成ではなく、増分データのみを追加する仕組み
📌 まとめ
Tera計算2_2データ作成.vbは、配送センター規模計算システムのデータ準備段階を担う重要なフォームです。 EIQ分析に必要な20以上のテーブルを段階的に生成し、日別・全体・平均の各レベルでケース/バラのデータを整備します。
主要機能の再確認
| 機能 | 概要 | 対応プロシージャ |
|---|---|---|
| 初期化 | データ有無確認、出荷日リスト作成 | Tera計算2データ作成F_Load、出荷日ConB作成 |
| データ作成 | 6ステージ・20段階のパイプライン実行 | Tera計算2データ作成Bt_Click、T610~TA10系プロシージャ |
| 削除・リセット | T7*/T8*/T9*/TA*テーブルの一括削除 | 全データ削除ChkB_CheckedChanged |
| 表示・確認 | EIQマトリクスと集計ビューの表示 | 表示Bt_Click、表示開始、EIQ計算条件 |
| ナビゲーション | メニュー画面への戻り | メニュー画面へBt_Click |
システム全体での位置づけ
本フォームはデータ変換レイヤーとして機能し、元データ(T050)を規模計算に適した形式(TA10)に変換します。
- 入力: T050_日別仮集計 (生の出荷データ)
- 出力: TA10_ケースバラデータEIQ (EIQ統合テーブル)
- 役割: 複雑な集計・分析を事前に実行し、規模計算フォームの負荷を軽減
開発者への推奨事項
🔧 保守・拡張時のポイント
- テーブル構造変更: T050の列追加・削除時は、すべてのT610~TA10系プロシージャを確認
- エラーハンドリング追加: Try-Catch、トランザクション、ロールバックを実装
- ログ出力: 各段階の実行時間とレコード数をログに記録し、性能分析を可能にする
- SQL外部化: ハードコードされたSQL文を設定ファイルに分離し、保守性向上
- 単体テスト作成: 各プロシージャが期待通りのテーブルを生成するかをテスト
- データベース移行検討: データ量増加に備え、SQL ServerやPostgreSQLへの移行を計画
関連ドキュメント
- Tera計算2_総合マニュアル・仕様書.html - システム全体の仕様と概要
- Tera計算2_1メニュー画面_詳細説明.html - メニュー画面の詳細
- Tera計算k1.vb - 共有モジュールのソースコード
- 配送センター規模計算_改5From - 後続の規模計算フォーム (ドキュメント未作成の場合は要作成)