公休登録 | スケジュール登録 | 走行実績登録 | データ確認画面 | 印刷用データ作成 | 走行実績出力 |
部門登録 | 社員登録 | 銀行登録 | メーカー登録 | 所有者登録 | 車種登録 |
車輌登録 | ルート登録 | 顧客登録 | 案件登録 | コース登録 | カレンダー (EXCEL) |
<概要>
本システムは、データベースの保守が、主な機能である。
もちろん、保存したデータをカレンダー形式で表示したり、集計して表に加工するが、重要なのは、計画と実績を、多忙な中で、いかに容易に正確に入力し保存できるか、ということ。
従来のエクセルによるカレンダー形式のデータ管理から、データベースを中心としたデータ管理に全面的に書き換えた。
基本的なコンセプトは、業務で「コース」と呼ばれている概念の定義にある。
基本的なモデルとして、以下のように仮定する。
☆
佐藤運送は配送ルート(便)を持つ。(業務管理)
☆ 顧客は佐藤運送に案件を提示する。(営業管理)
☆
佐藤運送は顧客の案件を分解し、配送ルートに割り振る。(コース)
(必要であれば、新たにルートを設ける。また、それぞれに単価を定める)
全てがこのモデルの通りではないが、このモデルに当てはめて運用することにする。
メリットとして、
★
ルート毎の売上が把握しやすくなる。(担当者別・車輌別など)
★ 請求書の作成に必要なデータを得ることができる。
★
予定表の入力が簡素化できる。
ことが考えられる。そして、なにより第三者的に把握しやすくなることを目標とする。
そのため、従来管理していなかった下記のデータの登録を行うこととなる。
顧客データ、顧客案件、ルート、そして顧客案件とルートからなるコース
<業務手順>
従来は対象とする月を指定してエクセルによるカレンダーを起動して、視覚的に優れた操作性でデータの登録を行っていた。
本システムでは、「スケジュール登録画面」で、ルート毎に登録していく。ルートに集約される複数のコースがある場合は入力が簡素化されるが、全体を見渡すことができないので、担当者変更時の業務の重複が見つけにくいなど視覚的には従来より劣った操作性といえる。(車輌や追加金額の登録など複数の機能を持たせているためやむを得ない)
また、コースも従来は台帳シートのコース名を変更するだけでよかった。
しかしながらこれは、従来はコースの名称とその単価のみしか管理していなかったからできたことで、本システムではコース毎に顧客からの案件やルートを管理するので「コース登録画面」できちんと登録するほかない。特に並べ替え機能など操作性がはるかに劣ることは事実である。(エクセルは自由度が非常に高くコース名が安易に変更できるため、コース名が変わっただけなのか、コースが廃止になって別のコースが設定されたのかわからないなど、データ管理上問題が多かったのも事実)
本システムは日別にルートの担当者を登録して、その下の階層のコースを自動登録する構造としている。
これは、登録を簡素化するためのしくみ。
対して、従来は日別にコースだけを指定する。
試用の結果、一覧性に優れた従来の操作でないととても入力できないとのことであった。
そのため、「スケジュール登録画面」で、週ごとに既定値で自動登録する機能を設けた。
さらに、車輌や追加金額もメンテナンスできるエクセルを追加した。(2004/12)
その結果、本システムによる業務手順は次のようになると考えられる。
コースやその他の登録がきちんとできていることが前提です。
1.「スケジュール登録画面」で対象とする月を選択。
2.「デフォルト」ボタンをクリックして、対象とする週のデータを自動作成。
3.公休の担当者は色が変わるので、予め決まっているルートについて修正。
4.「スケジュール登録画面」のXL作成ボタンで対象月のカレンダー(エクセル)を新規作成。
5.従来同様の操作性で担当者および車輌・追加金額を修正。
6.必要があれば、「データ確認画面」の「担当者別カレンダー」などで、重複をチェック。
7.「スケジュール登録画面」で修正確認。(カレンダーでの修正も可。注意事項参照のこと)
8.「印刷用データ作成」で、対象月のカレンダー(エクセル)を新規作成。
9.内容がOKであれば、印刷。
<注意事項>
エクセルによるカレンダーで修正したのち、「スケジュール登録画面」で修正した場合、
たとえ、エクセルカレンダーに元の担当者が表示されていても、「スケジュール登録画面」の登録が有効です。
エクセルによるカレンダーはコースの担当者しか変更しません。そのため、「スケジュール登録画面」でルートの既定の担当者をクリックした場合、そのコースは全て既定の担当者に戻ってしまいます。
<仕様>
データベースは、マシンが限定されていること、メンテナンスが容易であることから、MSアクセスを使用した。(STMileage.mdb)
言語は従来の流れを受けて、実績のあるVB6.0を使用した。
今回クラスを使用してデータベースとのやりとりを行う仕様に全面的に書き換えた。
その方が、今後の拡張要求に応じやすいと考えたからであるが、技術の未熟さもあり、不完全で、複雑となってしまった感は否めない。
基本的に、データベースの各テーブルに対応してクラスを設けた。
各クラスにはデータベースに対し、自分自身の挿入・更新・削除のメソッドを持たせた。
クラスの集合として各クラスのコレクションを設定した。コレクションはクラスの集合体を返すのみでなく、DataGridのソースとしてADOレコードセットを返したり、検索値により特定のクラスを返すメソッドを持つ。
ルートであるクラス(MainMaint)を作成し、すべてのコレクションはルートのプロパティとした。ルートクラスはデータベース接続クラスも同時にインスタンス化するので、ルート
→ コレクションでコレクションのデータ検索機能はデータベースを意識しなくとも使える。同様に、ルート → コレクション →
クラスでクラスのデータベース更新機能も使用できる。
1対多の関係にあるテーブルの場合、(ex. 部門 →
社員 など)
対応するクラスの1側に多側のコレクションをプロパティとして実装した。多側にも親であるクラスを返すプロパティを実装すべきだったが、現状では実装していない。
これらクラスやコレクションはDLL(SrvSTExpress.dll)として作成し、画面インタフェースのアプリケーションに参照設定して使用する。そのため、エクセルのVBAでも参照設定して同様に使用できる。
印刷のため、エクセルへの出力を行うケースでは、エクセルのインスタンスが安定しないため、別プロセスとして、個別にアプリケーションを作成した。それぞれDLLを参照するので問題はない。これらすべてをプロジェクトグループ(prjStExpress.vbg)として開発した。プロジェクトグループとして全てコンパイルしないと実行時エラーが発生する。
<操作>