<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 Access97データベース工作室>在庫のザの字はどう書くの〜♪
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20



ちょっとわかりにくいですが・・・。

まず[注文数の合計]欄に、IIf関数を使って、「[注文数の合計]がNullだったらゼロ、Nullじゃなかったら[注文数の合計]って出しなさい」という命令文を書きます。
式1っていうフィールド名になっちゃうのがやだなーという場合は、なんか適当なフィールド名(もとのテーブルに同じ名前があったらかち合っちゃうから、どっちのテーブルでも使ってない名前ね)

注文数:IIf(IsNull([注文数の合計]),0,[注文数の合計])

で、このフィールドの名前は[注文数の合計]から[注文数]にかわったことになるんで、右側の式も書き換えます。

現在庫:[期初在庫]-[注文数]

で、実行してみると???

空欄じゃなくなったことによって数式がちゃんと成り立ち、計算結果が[現在庫]欄に出てくるようになりましたよね。

で、このクエリーをあければ、いつでもどこでもちゃんと在庫数を確認することができるんですね。

ぜんぜんわからん・・という方いらっしゃいますでしょうか。。。
ちょっとややこしいですがひとつひとつ意味のある操作なので、ゆっくり見直してみてくださいね。


ちょっと整理してみますと

[商品マスター]の[期初在庫]を
[Q_現在庫]の[現在庫]の値に
書き換え

[出庫テーブル]レコード削除
(いわゆる棚卸ってやつかな)
しょっちゅう
「出庫処理」
ときどき
「入庫処理」
[商品マスター]の[期初在庫]を
[Q_現在庫]の[現在庫]の値に
書き換え

[出庫テーブル]レコード削除
(ふたたび棚卸の時期かしら)
「出庫処理・・」 繰り返す

こんな風になるといいんじゃないですかねぇ。
つまり、半年に一回とか、一年に一回とか、倉庫の中の在庫数を実際にチェックして、棚卸みたいなことをして、そのタイミングで[出庫テーブル][入庫テーブル]のレコードを全部削除して新たに集計できるようにする・・・。

削除するのが忍びないのであれば、そうですねぇ。
[Q_注文数集計]クエリーで、集計するレコードを日付かなんかで範囲指定すればいいかもしれないですね。
最期に棚卸した日から今日までの分を集計して在庫数を計算しなさい
。。。みたいな感じで。

え?ぜんぜん意味がわかんない???・・・そうですよね。。。あたしもそうじゃないかなーと思ってました。

まあ、とにかく、そこそこいけると思いますんで、やってみましょう。

出庫処理 クエリーで出庫総数を計算し、期初在庫から引いて現在庫を算出。
定期的に「棚卸業務」を実行して、期初在庫数を書き換える。
入庫処理: 入庫時に直接[期初在庫]に足し込む。

入庫も出庫と同じような仕組みでやってもいいんですけど、直接足し算引き算するやり方もチャレンジしようかな・・・と思ったもんで。
そうすると「期初在庫」っていうフィールド名はおかしいかな(笑)。
まあ、いいか。練習ですもんね。ははははは。
気にしない気にしない。

いちまつの不安を残しつつ、とにかくやってみましょう。いつもながら無計画ですが。


【出庫処理】

まずは日々の出庫処理のときに、在庫数を参照できるようにします。
ひとつ確認しておいていただきたいんですけど、[Q_注文数集計]は、新規入力とか数値を書き換えとか、できないタイプのクエリーですよね。

ね、データシートビューで見ても、一番下に「新規入力行」がないですよね。
集計クエリーはなんでもそうなるんですけども、当然「商品コードごとに表示」するクエリーってことで、基にしてる「出庫テーブル」と明細の単位が違うわけですよね。

1行目のAA0010の注文数の合計を15に書き換えようと思ってもできないんです。
あたりまえちゃぁあたりまえですよね。



当然このクエリーを基にして作ったQ_現在庫も、編集できないクエリーです。いちおう、その辺承知しておいてくださいね。

さて、それを踏まえた上で、[Q_現在庫]をこんなふうにしてみました。
[メーカーマスター]テーブルを追加して、メーカー名が参照できるようにし、あとは単価とか、全長とか重量とかを入れてみました。
あんまり意味ないですけど、商品の情報をいっしょに得られるようにと思って・・・。

<選択したらいいかもしれないと思うフィールド>

商品番号 商品名 価格 メーカー メーカー名 全長 重量 期初在庫 注文数 現在庫 必要数

メーカーとメーカー名両方選ぶ必要もなかったかな・・・。まあいいや。おいおい考えましょう。

で、このクエリーを基に、こんな感じのフォームを作ってみました。名前はー・・商品詳細フォームとでもしようかな。
色とかデザインとかはお任せしますので、挑戦してみてください。



どうせ編集できないクエリーを基にしてるんで、数値の書き換えとかできないわけですよね。
このフォームからは。参照目的のフォームとして使います。

一見不便みたいですけど、こういうシステムの場合、あっちからもこっちからもマスターの更新ができちゃうっての、ヤバイんじゃないかと思いますよ。
なので、マスターメンテ画面みたいなのを別に作って、価格の変更とかはそっちからやるようにした方がいいでしょう。

あんまりひとつの画面でいろいろ欲張らず、処理の流れをよく考えて絞って作り込んだほうが、絶対使いやすいもんができますって。



そんなわけでわたしは、各テキストボックスのデータプロパティ欄をいじって、「使用可能:いいえ」「編集ロック:はい」にしてみました。
カーソルも入らない、かたくななフォームになります。

で、後は、[全長]とか[重量]のテキストボックスの「書式」プロパティをちょっと細工すればいいんじゃないですかね。
あ、あと[価格]もかな。

書式欄に例えば

#,##0.0m

と書くと

10.0m

と表示されます。
小数点以下の入力をしている場合は、

10.5m

となります。



ここで指定した桁数分、小数点以下の桁数が考慮されることになります。
数値の書式についてはすこしヘルプなどを見ておくとよいでしょう。
書式欄にカーソルがある状態で[F1]キーを押せばヘルプ出てきますので、みなさんが扱おうとしている数値の場合はどういう書式が一番いいのか、ひも解いていってみてください。

とりあえず[PageUp][PageDown]キーを使えばレコード移動はできますので、2レコード目、3レコード目と表示させてみて、テキストボックスの幅や位置、大きさなど、調節してみてくださいね。


次に、先に作った[出庫フォーム]に手を入れます。
どうしようかな・・・。スタンダードなやり方で、コマンドボタンを作って、それクリックしたら上の緑色のフォームが出てきて在庫の状況とか分かる、って感じにしましょうかね。

フォームを開くときに使う「フォームを開く」っていうマクロのアクションで、特定のレコードを表示した状態で開くことができるっていうのは、前にどっかでお話しましたよね・・・え?してない?そ、そうでしたか。では・・・

このコマンドボタンのクリック時のイベントに、コードかマクロを作ります。

あたしのコマンドボタンは[コマンド75]っていう名前がついてたんで、
このまま使おうと思います。



【マクロの場合】

フォームを開く フォーム名:商品詳細フォーム Where条件式:[商品番号]=[Forms]![出庫フォーム]![商品]

【コードの場合】

Private Sub コマンド75_Click()

DoCmd.OpenForm "商品詳細フォーム", , , "[商品番号]='" & Me![商品] & "'"

End Sub

どっちも同じことです。条件式の書き方が若干違いますよね。
コンボボックスの中身は「商品名」が表示されてますけど、このコンボボックスの「連結列」は1列目。
1列目のフィールドは商品番号なんで、番号でちゃんと結びついてくれます。その辺もじっくり観察しておいてくださいね。