<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000超入門部屋--見積書を作る
   1 > 2 > 3 > 4 > 5 > 6 > 7 > 8 > 9 > 10 > 11 > 12 > 13 > 14 > 15 > 16 



ええと、そしたら、非連結のテキストボックスをふたつこしらえて、片方を「税額」にしましょうか。モウ片方の名前は「見積合計」にします。
ラベルもわかりやすいものに書き換えて、大きさや位置を整えておいてください。

で、「税額」のコントロールソースに

  =([W_見積明細テーブル].Form![合計金額]-[値引き額])*0.05

「見積合計」のコントロールソースに

  =([W_見積明細テーブル].Form![合計金額]-[値引き額])*1.05

とします。

これで要所要所で計算された値がつかめるはず。。。。


後は、顧客番号とか担当営業とかも、コンボボックスにしましょうかね。

この辺はもう少し工夫の余地があるかもわかんないですが、とりあえず・・・。

コンボの値集合ソースや書式プロパティの変更など、挑戦してみてください。


じゃあ、1 件入力してみましょう。

フォームを保存し、できればいったん閉じて、「見積入力フォーム」の方を開きましょう。
上の図でいくところの、赤いところは必須入力 / 選択項目です。

見積番号はなんでもいいので、001 とか入れてください。顧客番号、適当に選んだら、顧客名や郵便番号が出てきますか?[Q_ 見積]がちゃんとなってれば出てくるはずです。担当営業も、社員番号を選べば社員名が出てくるはず。

明細の方は、行番号はとりあえず1,2….. と適当に数字を入力してください。商品番号を選び、個数を入力します。
最後に、値引き額を何かしら入力して、完了です。値引かないならゼロのままでよいと思いますが。。。

必須項目をきちんと入力していれば、エラーなどは出ないはずなんですが、いかがでしょう?

なんかエラーが出る場合は、とりあえずこのフォームを閉じ、基にしているふたつのクエリでのテーブル同士の結合などをもう一度確認してみてください。多分、その辺にカギがあると思います。まあ、とりあえずテストの入力なんで、雰囲気掴んでいただければオッケーです。

とにかく、テーブルの中に必要なフィールドが存在していないとお話になりませんけれど、テーブルにどんなフィールドが必要なのか細かく考えるためには、まずこのような「入力のためのフォームのデザイン」が頭に浮かばないとなりませんよね。こういうのがね、難しいところです。フォームのデザインからテーブルのデザインへ結びついてくれば、 Access の操作自体はたいして難しいことじゃないんですけどね。

え?値引き額を入力した後、トータル金額から値引き額を引いた金額を表示させたい?

なるほど。んじゃ、非連結のテキストボックスを追加作成して、コントロールソース欄にこんな感じで式を入れましょう。

  =[W_ 見積明細テーブル ].[Form]![ 合計金額]-[ 値引き額]


いちおう、このあたりまでが、見積入力の基本部分になります。

このあたりまでの作成の段取りがだいたいつかめてくれば、あとはさらに入力項目が増えた場合とかもイメージが湧きやすいと思いますよ。

今回、多少「クライアントサーバー型」のアプリケーションを意識して作ってます。
といっても、最初にお話しましたけども、 MS-Access 自体、あまり「クライアント・サーバー型のシステム」に適してはいません。
どっちかというとパーソナルユース的なデータベースですんで、同時に使用するユーザー数が 20 とか30 とかあるような場合は、Access をやめて、SQLServer とか Oralce とかの導入を検討なさった方がいいのかもしれません。こういうのははっきりとした数値では測ることはできませんよね。
車だって、何 km 走ったら壊れるかなんて、誰もわかんないですよ。 100m 走ったとこで溝に落ちちゃうかもしれないし、 100 万km 以上走れるかもしれない。ほんとにわかんないんです。
だから、予算と、マンパワーと、いろいろな面から、会社の中で相談してしかるべく決めることであって、「人数が何人以上だったらダメなんですか?」とか「データ件数が何件以上だったらダメなんですか?」とか「どういう使い方をしたら壊れるんですか?」とか、そんな考え方はなさらないでくださいね。
そんな線引き、ほんとに、どこにもないんです。
多少もったいないかなぁと思っても、しっかりしたデータベース環境を作っておいた方がよいだろう、と決断したのであれば、 Oracle などの導入をなさるのがよいし、そこまで技術もないし・・・みんなで気をつけて使っていこうよ、というスタイルをとることができるのであれば、 MS-Access で簡単な入力/ 照会の仕組みを作って動かすのでもよいでしょう。

その辺を踏まえていただいた上で、今回は、ほんとに小さなクライアントサーバー型のアプリケーションを想定してお話します。
まあ、ひとつのテーブルをいろんな人が開きっぱなしに状態になったりしないよう、 W のテーブルの方でとりあえずいろいろ頭をひねりながら値引き額を考えながら見積を 1 件入力し、お客様に出せるような見積ができたら、その 1 件分のレコードをMaster.mdb の見積テーブル(つまりリンクしてるテーブル)に追加し、続けて別の見積を入力するならW のテーブルの中身は削除しておく、と、いうような動きになるわけです。

下の図を見てください。

W と付けたテーブルは、いわゆる「ワークテーブル」的役割で、「とりあえず 1 件分の見積」がはいるとりあえずテーブルです。
1 件分の入力が完了したら、まず「追加クエリ」を使って W のテーブルからリンクしてきてるテーブルへ、その 1 レコード分を追加します。

このとき、見積番号を自動的に採番してやろうと思います。
あんまり難しいのはわかんなくなっちゃいそうですよね・・・とりあえず、 00000001 とかいう感じで、通し番号をつけるとしましょうか。
こんなふうに数字だけで構成されている番号で、桁数が決まっていればわりと簡単だし問題は少ないですけど、たとえばアルファベットとか入れたい場合は、少々注意が必要ですね。

Wのテーブルからリンクしてるテーブルへレコードを追加した後に、Wのテーブルの中身をうっかり書き換えちゃったりしたらいけませんから、この辺はすこしフォーム上のプロパティとか使って工夫しましょうかね。

次の見積を作成する場合や、このフォームを閉じるときに、Wのテーブルの中身をすべて削除します。これは削除クエリを使えばよいでしょう。


で、真中の「自動採番」の仕組みのとこで、[番号テーブル]を使います。

ここに、「誰かが使った最後の見積伝票番号」を収めておいて、新しい見積書を作成するときは、このテーブルの中の数字に1を足したものを基準にしようと思うわけです。
これなら、ある程度時間差でいろいろな人が見積の作成をしたとしても、ダブった見積番号がつくことはないはずです(見積作ろうと思ったけどやーめたとかいう人がいると、番号飛びますけど、それはそれでありでしょう。常に続き番号で自動採番するしくみは、それなりにリスクも大きいですよね)。

ちょっと作ってみましょうか。まだテスト段階ですんで思ったようにいかないとこも多々あると思いますけど、がんばって作っていってみましょう。

まず、簡単なクエリをひとつ作ります。[番号テーブル]をもとにしたクエリで、「更新クエリ」にしてください。

で、上のように、レコードの更新のところに、足し算の式を入れます。
[ 番号テーブル].[Number]+1  という具合に、客観的に書いてあげてください。テーブル名とフィールド名の間は半角のドットですよ。

なんか適当な名前をつけてクエリを保存し、仮に実行してみましょうか。画面上の「赤いびっくりマークボタン」をクリックしましょう。

こんなメッセージ出てきたら、はいの方のボタンをクリックします。
一旦クエリを閉じて、テーブルの方見てみましょうか。[番号テーブル]。

ゼロだったのが、1 になってます?

この更新クエリを動かした後、この番号テーブルを見れば、まだ誰も使っていない見積番号をゲットすることができるって寸法です。
もちろん、クエリ作っただけじゃだめですよ。タイミングよく動かさないとね。