<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 MS-Access97大魔法陳列棚>料金表から料金を割り出す



【仕 様 な ど】MS-Access97で作成。Windows95でのみ動作確認。

【ダウンロード】←Zip形式
            (解凍後、mdb初期状態:およそ142KB)

【主 な 機 能】

リボンを買うとき、1mで150円、2mで300円・・・って、1m単位にしか買えない場合は、料金表と実際に購入した長さを1対1のリレーションシップとして結び付けて料金を算出できますよね。でも、「1mから1.5mまでは150円、1.5mから2mまでは280円・・・」なんていう具合に、一定あるいは不規則な範囲で料金表が定められてる場合、どうやって考えたらいいでしょう。

【作 り 方 等】

まず、こういう料金テーブルがあります。
これは、「5使ったら450円」という意味じゃなく、「使用量が0から5までだったら450円」という意味で考えています。

で、実際の使用量が4.9だったら450円で、5.1だったら850円になるわけですね。

もちろん、テーブルの作り方如何でなんとでもなりますよね。
ちゃんと、範囲の始まりから終わりという具合でテーブルを作っているなら考え様がありますが、使用量と料金のフィールドがひとつずつで、値もひとつずつ、こういうテーブルからどうやって該当する料金をはじき出すべきか、ちょっとした挑戦です。


このサンプルの中では、下のような入力画面から、日々使った量を入力して、月末に顧客ごとに集計してその顧客がどれくらい使ったのか、その量に見合った料金を上記の料金表から拾い出すレポートを作ってみました。
え?なんの使用量かって??・・・えーと、えー・・・ぺ、ペルシャじゅうたんです。

よかったらなんか入力してみてくださいね。これはこれで、いろいろ小技利かせてます。

伝票番号を自動採番したり、利用日に今日の日付がデフォルト表示されるようにしてたり、その程度ではありますが・・。



と、[請求テーブル]という名前のテーブルに、がんがんデータがたまっていきます。

で、このテーブルを基に、下のような集計結果が出るクエリーを作りました。
顧客番号ごとに使用量を合計しただけなんですけど・・・。
で、株式会社くもがくれは、5月の使用量の合計が19.1uなので、料金表に従うと、請求金額は1450円のはずなんです。
でも、このままこのクエリーと料金表を結び付けても、料金表に「19.1」っていう使用量のレコードないですから、該当金額なしってことになっちゃいますよね。

じゃ、下のようなレポートの結果を出すためにはどうしたらいいのか・・・(前置きが長すぎる?は、申し訳ない)

とりあえず、リレーションシップ的な考え方での算出はあきらめました。
力技ですが、このレポートを開くとき、使用量に見合った料金を料金テーブルから拾ってくるようなプロシージャを作ってみました。

このレポートのクラスモジュールです。
一番上に、共通して使う変数をまとめて宣言しておきます。

で、イベント個所は、とりあえず3ヶ所。レポートを開くときと、レポートフッターのフォーマット時と、詳細セクションのフォーマット時です。

レポートを開くときとレポートフッターのフォーマット時のイベントはおまけです。
メイン処理は詳細のフォーマット時。ここで、料金表からレコードを拾っています。

レポートの中には、[料金]という非連結のテキストボックスを作っておきます。
あと、全体の料金の合計を出したいなと思ったんで、レポートフッター部分にも同じように非連結のテキストボックスを作りました。

で、詳細セクションのフォーマット時のイベントで料金表の[使用量]を1件ずつ眺めて、一番最初に見つかった「実際の使用量より少ないか等しい使用量の料金」を獲得するわけです。これが上記のコードの中でいうところのピンク色の印を付けた行。等しいか、は、必要なければ=を削除してください。

書き方はいろいろあると思いますので、工夫なさってみてください。