【5】第八章 七日目

 再び、X社の会議室。
 山上君と松本さんは、PCに向かって、あくせく作業をしている。部屋には、カチャカチャ、カチカチと、キーボードやマウスの音だけが響いている。

 そこに、いきなり狭山さんが「遅くなって申し訳ありません」と言いながら飛び込んできたので、二人はびっくりして飛び上がってしまった。
「うっわ、びっくりした。狭山さん、驚かさないでください」
「すみません。驚かせてしまいましたね。でも、お二人とも、何をされているのですか」
「前回の講義が終わった後で、山上君と復習してたのですが、『フォームの作成方法が分かったのならば、同じ“入出力”である、“レポート”も同様のやり方でできるのではないか』と気づいたんです。そこで、『自分たちで“顧客法人一覧表”とか“名刺一覧表”とかを作ってみよう』ということになって、前者を山上君が、後者を私が作っているんです」
「なるほど。で、いかがでしたか」
「僕の“顧客法人一覧表”は、ほぼ完成です。構成も、次の様に考えました」

顧客法人一覧表_MAINの構成

「後は、クエリを作った後、“レポートウィザード”でレポート・デザインの基本まで作成して、最後に項目を配置して終わりです。フォームを作った時とほとんど変わらないですね。ただ、“グループ”という言葉が出てきたのですが、これだけが分かりませんでした」
「なるほど。では、松本さんはいかがでしたか」
「私の方は、未完成です。イメージはできているのですが、構成が決まらなくて」
「“名刺一覧表”のイメージは、どの様なものですか」

名刺一覧表_MAINのイメージ

「こういったものです。これを、“名刺一覧画面”上のボタンから印刷できるようにしたいのです」
「“名刺一覧画面”で、今現在参照している顧客法人分の名刺だけを、一覧表示するものですね。ただ、この“顧客法人分の”というところは、前回お話ししたフィルタを使用すれば良いので、まずは、『名刺の一覧表を、顧客法人ごとに印刷し、顧客法人が変われば、ページ替えをする』レポートを考えてみましょう」

名刺一覧表_MAINのデザイン

「さて、松本さんも悩まれた通り、フォームでの考え方をそのまま適用すると、このレポートは『顧客法人部分を表示するメインレポートと、名刺部分を表示するサブレポートで作成される』となります。もちろん、この方法で作成することはできるのですが、レポートには、さらに、フォームに無い機能“グループ化”というものがあります。この図の様に、“名刺一覧_SUB1”のクエリに、“顧客法人名”などの項目を含めたものを作成し、『顧客法人IDが等しいもののグループを作成し、このグループ・レベルの“ヘッダー・セクション”と“フッター・セクション”を作成する』ことによって、メインレポートと似たような表示を可能とするものです。前者には、グループ化した“顧客法人ID”と、それと同レベルの項目である“顧客法人名”を配置し、併せて、詳細セクションに表示される項目“名刺担当者名”、“名刺組織名”、“名刺役職名”の項目標題を配置しておきます。後者には、今回、配置はしませんが、例えば、“その(顧客法人)グループごとの名刺数”などを配置することができます。なお、“顧客法人IDヘッダー”のプロパティには、次の指定をしておきます。この指定によって、『名刺の数が多くて、複数ページに渡っても、各ページに同じ顧客法人IDヘッダーの情報を印刷する』や、『顧客法人IDの値が変われば、ページを変える』といったことになります」

顧客法人IDヘッダーのプロパティ

タブ項目
書式セクション繰り返しはい
改ページ改ページカレントセクションの前

「あれ、レポートのデザインで、顧客法人IDのグループ化がされるってことは、クエリの並べ替えとの関係はどうなってしまうんだろう」
「山上さん、良いところに気づかれました。レポートでは、グループ化のために、クエリで指定した並びが無視されてしまいます。このため、レポート用のクエリには、“並べ替え”欄の指定は不要です。さらに、グループ化以外の、例えば、詳細セクションにある“名刺部分”の並び順を指定できないとまずいので、レポートのデザインには、“グループ化と並べ替え”という名前のメニューが用意されています。松本さん、こういった情報で、“名刺一覧表”を作成できますか」
「大丈夫だと思います。ただ、先程『メインレポートと似た』と言われたのが、気になったのですが」
「鋭いですね。実は、『メインレポートとサブレポートを使用したレポート』と『グループ化を使用したレポート』では、印刷した結果が同じにならない場合があります。どの様な場合に、両者の印刷結果が異なると思いますか」
「う~ん(と、しばらく考え込んでいたが、突然)あっ、分かった。『名刺が一件も登録されていない顧客法人があった』場合ですね。この場合、前者のレポートでは『その顧客法人のIDや名称は印刷されるが、名刺の情報は印刷されない』となって、後者のレポートでは『その顧客法人の情報すら印刷されない』となりますね。元となるクエリを考えたら、分かりました」
「その通りです。このため、『帳票そのものを、業務でどのように利用するのか』を良く考えて、どちらがより合っているかを検討することは忘れないで下さい」
「ハイ。ありがとうございました」

「さて、今回の講義、最初のテーマは『あくアク流での“ローカル・テーブル” 』です。今までお話ししてきた“テーブル”は、あくアク流では“データベース・テーブル”と言って、すべてAccessデータベース・ファイルに実装され、様々なプログラム・ファイルから共有されるものでした。ただ、Accessのテーブル管理機能は、その様な配置や利用に限定はしていません。そこで、あくアク流でも、その観点から、別の利用や配置も考えられています。まとめてみましょう」

あくアク流のテーブルの種類

テーブル利用配置
データベース・テーブルプログラム・ファイル間で、データを共有する。データベース・ファイル
ローカル・テーブル1つのプログラム・ファイル内の保管データ。
当該ファイル内の各クエリで共有する。
あくアク流では、テーブル名の頭に“Local”を付けること。
プログラム・ファイル
作業用テーブル1つのプログラム・ファイル内の一時データ。
当該ファイル内の一連の処理過程でデータが一時的に保管・共有される。
一連の処理が終了したところで、中のデータは全件削除される。
あくアク流では、テーブル名の頭に“Wk”を付けること。

「ローカル・テーブルと作業用テーブルは、共に各プログラム・ファイル内に実装されます。両者の違いは、ただ一つ、『プログラム・ファイルを閉じた時でも、テーブル内のデータを保存し続けなければならないか』という点です。保存しなければならなければ、ローカル・テーブル、そうでなければ、作業用テーブルとなります。まず、ローカル・テーブルの例を見てみましょう。松本さん、前回作成した“要員一覧2”画面を開いてください。(松本さんが開くのを見て、)この画面の“検索文字列”欄は“フォーム上の一時的なもの”となっているので、一度画面を閉じてしまえば保管がされません。ただ、業務の性格によっては、こうしたデータを保管しておきたい場合があります。そこで、このデータ保管場所として、ローカル・テーブルを作成するのです。“要員一覧2”画面で、ローカル・テーブルを使用した場合は、次の構成になります」

要員一覧2_MAINの構成

「そうか。“検索文字列”の値は、他の人と共有する必要がないから、プログラム・ファイル内に実装しても良いんだ」
「じゃ、早速変更してみますね。え~と。まずは、テーブルを作成して。あれ、狭山さん、テーブルの主キーはどうするんですか。このテーブルのレコードって、たった一行しかありませんよ」
「でも、あくアク流のお作法では『必ず、テーブルの主キーは作成すること』になっています。さぁ、どうすれば良いと思いますか」
「う~ん(と、今までのノートをめくりながら悩んでいたが、)あぁ、分かりました。DummyIDです。そうか、一行しかないテーブルの主キーはDummyIDにすれば良いんですね。(狭山さんが頷くのを見て)では、テーブルを作成しますね」

DummyIDが主キーのローカル・テーブル

フィールド名データ型他の設定
DummyID数値型フィールドサイズ:長整数型
規定値:1
値要求:はい
検索文字列テキスト型値要求:はい
空文字の許可:いいえ

「松下さん、お見事です。このテーブルには、ご自分で『主キーが“1”のレコード』を登録しておいてください。後は、クエリとフォームのデザイン変更だけです」
「分かりました。クエリ“要員一覧2_MAIN”を作成して、フォーム“要員一覧2_MAIN”のプロパティ“レコードソース”に、“要員一覧2_MAIN”を指定して。ハイ、できました」
「では、応用問題です。山上さん、あくアク流では、本格的な業務システム・ツール環境のため、“ログイン画面”や“メニュー画面”といった“共通の部品”を用意しています。この部品を利用して、ログイン画面を経由すると、そのプログラム・ファイルのローカル・テーブル“Local_共通情報”に、ログイン者名やログイン日時が保管されます。テーブル・レイアウトは次の様になります」

ローカル・テーブル“Local_共通情報”

フィールド名データ型他の設定
DummyID数値型フィールドサイズ:長整数型
ユーザーIDテキスト型
ユーザー名テキスト型
ログイン日時日付/時刻型書式:日付(標準)
主キー:DummyID(“1”)

「さて、このテーブルを利用して、フォーム“顧客法人一覧_MAIN”と、フォーム“名刺一覧_MAIN”に、ログイン時のユーザー名を表示させたいのですが、どうすれば良いかお分かりになりますか」

顧客法人一覧_MAINの構成

「“顧客法人一覧_MAIN”は、こういった構成にすれば良いと思います。問題は“名刺一覧_MAIN”ですね」

名刺一覧_MAINの構成

「構成は、たぶんこうなるとは思うのだけれど、クエリ・デザインが良く分からないんだよな」
「何言ってんのよ。ここまでいけば、分かるじゃないの。こうよ」

クエリ“名刺一覧_MAIN”

「ああ、そうか。だから、『Local_共通情報の主キーはDummyID』であり、『データベース・テーブルにはDummyIDがある』んだ。なるほど、これなら『あくアク流のお作法通り』だ」
「お分かりいただけましたか。では、次は作業用テーブルです。松本さん、一回目の講義の時に、ExcelとAccessとの違いをお話ししましたが、その際に、例を二つ出させていただきました。憶えていらっしゃるでしょうか」
「ええ、(ノートを見ながら)例1は“売上額の前月比”、例2は“売上額の構成比”でしたね」
「その例2のStep1で、『年月が同じもののグループを作り、その売上額の総額を取得する。(別のテーブルとして作成する)』とありました。この“別のテーブル”が、データベース・テーブルとして作成されない場合は、作業用テーブルとして作成されます」
「そうか。“年月”を主キーとした作業用テーブルを作成するんですね」
「そうです。ただ、この部分は、あくアク流でも上級者向けのものですので、今回の講義では対象としません。皆さんが、もっと習熟したころに、改めてお話しします」
「分かりました。あくアク流、奥が深いですね」
「さて、今回の二つ目のテーマは『要員管理システムの作成』です」
「え、それって、僕たちが使うんですか」
「いいえ。利用するのは、山本部長率いる、総務部の方たちです。将来的には、総務部の方たちにもあくアク流を習得して、ご自分たちで改良していただくことになりますが、今回は営業部側で作成し、提供します。とはいえ、今回作成するのは、“要員一覧”画面だけですが」
「あ、そうか。要員テーブルの中身は、僕たちが更新する必要は無いのでした。いつも、『他からもらってきた資料を見ながら、再度入力する』ってことばかりだったので、すっかり忘れていたよ。狭山さん、『要員テーブルのデータを、追加、変更、削除できる画面を作る』だけですよね。だったら、今日中に僕の方で作っておきます」
「山上さん、頼もしいですね。では、お願いします」

営業部と総務部のシステム運用構成

「さて、今回の三つ目のテーマは『Accessファイルへのオプション指定』です。あくアク流では、Accessファイルを新しく作成した場合は、“カレントデータベースへのオプション”画面を開き、“アプリケーションオプション”部分に、次の様に設定しておきます」

アプリケーションオプション

オプション
フォームの表示あくアク流共通部品“ログイン_MAIN”が基本。
ドキュメントウィンドウオプション“ウィンドウを重ねて表示する”を選択。
閉じるときに最適化するチェックを入れる

「この内、ぜひ知っておいていただきたいのが、“フォームの表示”です。これは、『Accessファイルを開く時に、特定のフォームを、自動的に表示させる』指定ですが、皆さんが今まで使われてきた“有償版のAccess”であれば、特に指定する必要はありません。ナビゲーションウィンドウから、開きたいフォームをダブルクリックすれば良いのですから。ところが、“無償版のAccess”即ちAccessランタイムでは、このナビゲーションウィンドウが表示されません。このため、“フォームの表示”への指定が必要になるのです。あくアク流では、ここへ共通部品である“ログイン画面”を指定して、ログインが成功すると、共通部品である“メニュー画面”を表示する様にしています」
「あれ、狭山さん。『Accessランタイムには、ナビゲーションウィンドウが表示されない』って言われましたよね。とすると、僕らが今までテーブルの中のデータを確認する時にやっていた『ナビゲーションウィンドウのテーブルをダブルクリックする』ということができなくなるのじゃありませんか」
「山上さん、良いところに気づかれました。その通りです。このため、Accessランタイムを使ったシステム運用環境では、個々のテーブルの中身を参照できる画面も作成しておく必要があります。さて、次に移りましょう。今回の最後のテーマは『あくアク流の雛型を使った、プログラム・ファイルの作成手順』です。あくアク流の“お作法”では、プログラム・ファイルを新しく作成する場合は、基本的な共通部品が既にある“雛型ファイル”をコピーして、ここに、各業務画面を追加作成していきます」

あくアク流のプログラム・ファイル作成手順

「プログラム・ファイルができたら、これをオリジナルとして、運用環境の各クライアントにコピーをします。なお、データベース・ファイルは、運用環境のデータベース・ファイルに業務データが入っているため、単純にコピーをせず、極力『手作業での反映作業を行う』様にしてください」

あくアク流のプログラム・ファイル移行手順

「ということで、今回で、私の講義は終わりです。後は、皆さんで、業務システム・ツールを作り、改良をしていってください。ただ、私は、まだ、貴社にお伺いする機会が多いですので、何なりとご相談いただければと思います」
「狭山さん、ありがとうございました。本当に、こんな短い間に、僕がAccessを使えるようになるなんて、思いもよりませんでした。本当に、本当に、ありがとうございました(と、再びチワワの眼になりそうになる山上君)」
「狭山さん、ありがとうございました。私も、Excelだけの業務システム・ツール作りに限界を感じていたので、今回の講義は、とてもありがたかったです。今後とも、よろしくお願いします」
「お二人とも、良く頑張りました。私の方こそ、よろしくお願いします」
と、ドタバタと廊下を駆ける足音が聞こえたと思ったら、システム部の佐藤部長が、会議室に飛び込んできた。
「狭山さん、一大事だ。内山さんが、一駅前から歩いてウチに来ようとして、迷子になった。悪いけれど、迎えに行ってやってくれないか」
「え~! またですか! もう! 分かりました(と、二人を見やって)すみません。では、これで」
と、佐藤部長と会議室を飛び出していった狭山さんを見送り、山上君と松本さんは思わずガッツポーズをとっていた。
「がんばれ! 狭山さん」