プロが教えるわが家の防犯対策術!

教えてアクセス2007!「在庫管理を求める方法」

アクセス2007を扱うのは初心者ですが在庫管理のデーターを作っていて
フォームを開いた時に商品の在庫だけが表示される方法を教えて下さい

たとえば

入荷              出荷

商品  日付 入荷数      商品   日付  出荷数

りんご 5/1  10     りんご  5/10  10

いちご 5/5  10     ばなな  5/15  10

ばなな 5/10 10     みかん  5/16  10

みかん 5/11 10

メロン 5/13 10



この場合、いちごとメロンが残ってます

フォームを開いた時、残ってる商品だけを表示させたいのですが

どうしたら良いでしょうか?教えて下さい。  

A 回答 (5件)

在庫の確認フォームはできましたか。


もしまだならば、以下の方法を試してみてください。
テーブル名はT入荷、T出荷とします。
質問のテーブルです。
クエリを二つ作ります。長いSQL文があります。
コピーし、張り付けるときに気をつけてください。


(1)
本来は商品リストというものがあるのでしょうが、
この場合は入荷したものを元に商品名の名寄せ
をします。Q入荷商品リスト、という名前にします。

Q入荷商品リスト:

SELECT T入荷.商品
FROM T入荷
GROUP BY T入荷.商品;

(2)
在庫数が0以上のものを取り出すクエリです。
少し長いSQL文です。Q在庫、という名前にします。

Q在庫:

SELECT Q入荷商品リスト.商品, Sum(T入荷.入荷数) AS 入荷数の合計, Sum(T出荷.出荷数) AS 出荷数の合計, Sum(Nz([T入荷]![入荷数]))-Sum(Nz([T出荷]![出荷数])) AS 在庫数
FROM (Q入荷商品リスト LEFT JOIN T入荷 ON Q入荷商品リスト.商品 = T入荷.商品) LEFT JOIN T出荷 ON Q入荷商品リスト.商品 = T出荷.商品
GROUP BY Q入荷商品リスト.商品
HAVING (((Sum(Nz([T入荷]![入荷数]))-Sum(Nz([T出荷]![出荷数])))>0));


以上、二つのクエリのSQL文を新しいクエリの
SQLビューに貼り付けそれぞれの名前で登録し、
保存してください。Q在庫は長いので画面上
で途中で改行されているものがあるかも
しれません。

次に、フォームの新規作成をクリックし、
もとになるテーブルまたはクエリの選択で、
Q在庫を選択し、オートフォーム表形式を
選択し、OKとしてください。
これでできあがりです。SQL文の貼り付けと保存、
フォームの作成は慣れてこられたと思います
ので、少し簡略しています。

なお、フォームの標題はこのままではQ在庫と
表示されるので、フォームをデザインビュー
で開き、フォームのプロパティシートを
表示し、すべてを選択し、その中の標題の
項を在庫とし、保存すればフォームを開いた
ときフォームの標題が在庫と表示されます。
また、クエリのQ在庫をデザインビューで
表示し、Q入荷商品リスト、T入荷、T出荷
のテーブルがどのように結合されているか
デザインビューのテーブルを少し動かして
確認してみてください。閉じるときに
保存しますか、という表示がでますが、
「はい」でも「いいえ」でもどちらでも
かまいません。


話が少しずれますが、本来は、商品名を直接、入荷テーブルや
出荷テーブルに書き込むのではなく、商品テーブルに
すべての商品を一旦登録し、それぞれに
登録番号(商品ID)をつけ管理します。
その番号で入荷、出荷、その他の業務において
一意に商品を指定します。そのためには
フォームで番号だけで商品を特定する
仕組みを作る必要があります。商品名が、

「北海道生まれで宮崎育ちの完熟メロン」

というような商品名ばかりだとどうしようも
ありませんからね。間違う可能性もあり、
上記のクエリでも間違った記入には対応できません。
商品番号での対応ができれば、誤記入を防ぐ
方策を講じておくことでいらない心配がなくなります。
上記のクエリも商品番号で対応できます。


以上です。何かあれば書き込んでください。
    • good
    • 0
この回答へのお礼

いつもありがとうございます

大変参考になりました!

土日が仕事休みの為、今確認したところ出来ました!!!
お礼、遅くなって申し訳ありません

これからも宜しくお願いしす。

お礼日時:2010/06/28 10:18

入荷数の合計、出荷数の合計


を出す必要がないなら、以下のクエリ
を追加作成し、このクエリでフォームを
作成してください。

Q在庫確認:

SELECT Q在庫.商品, Q在庫.在庫数
FROM Q在庫;

でフォームを作ってください。

追加ですが、この方式はあくまでもこの場合
に即しています。というのも、入荷数の合計、
出荷数の合計はそれぞれ長い間に膨大な
数になります。したがって、本来はどこかで
区切りをいれなければなりません。一つの
商品が100万個、1000万個の単位で入ってくると
そのうちにコンピュータが正確な数値を
出せなくなる可能性があります。

少し例が極端でしたが、そのために棚卸を行い、
期首在庫数などの形で在庫数を一定の期間で
特定し、その数値を商品テーブルの各品目に
データとして持たせ、その数値を起点に現在
の在庫数を計算します。これだと入荷数の
合計、出荷数の合計を小さい数値で出せます。
つまり、

在庫数=期首在庫数+期間入荷数-期間出荷数

で出します。期首在庫の数値を持たせる理由は
保守、税務、経営その他の重要なことが本来の
理由です。

以上です。
    • good
    • 0
この回答へのお礼

ありがとうございます

とても参考になりました!

また宜しくお願いしす

お礼日時:2010/06/28 10:21

↓こんなクエリを作って、URLを参考にしながら、Formを作ってみるといいのでは?



SELECT Q_在庫_0あり.商品, Q_在庫_0あり.入荷日, Q_在庫_0あり.入荷, Q_在庫_0あり.出荷日, Q_在庫_0あり.出荷, Q_在庫_0あり.在庫
FROM [SELECT T_入荷.商品, T_入荷.日付 AS 入荷日, T_入荷.入荷数 AS 入荷, T_出荷.日付 AS 出荷日, IIf([出荷数] Is Null,0,[出荷数]) AS 出荷, [入荷]-[出荷] AS 在庫
FROM T_入荷 LEFT JOIN T_出荷 ON T_入荷.商品 = T_出荷.商品]. AS Q_在庫_0あり
WHERE (((Q_在庫_0あり.在庫)>0));

参考URL:http://jsajax.com/AccessTech2/Chapter4/118.aspx
    • good
    • 0
この回答へのお礼

ありがとうございます。

とても参考になりました!

お礼日時:2010/06/19 14:59

Sheet1に、以下のような入荷データを記載し、D2セルに、


=C2-VLOOKUP(A2,Sheet2!A:C,3,FALSE)
と記載して、D2セルを、D6セルまで、下にドラッグコピーし、
未出荷数の列で、オートフィルタ機能を使って、0以外を表示させて下さい。

入荷商品入荷日付入荷数未出荷数
りんご2010/05/01100
いちご2010/05/0510#N/A
ばなな2010/05/10100
みかん2010/05/11100
メロン2010/05/1310#N/A

Sheet2に、以下のような出荷データを記載して下さい。
出荷商品出荷日付出荷数
りんご2010/05/1010
ばなな2010/05/1510
みかん2010/05/1610
    • good
    • 0
この回答へのお礼

ありがとうございます。

とても参考になりました!

お礼日時:2010/06/19 14:58

商品テーブルに、商品ごとの期初数量


(前期最後の棚卸数量)を作って
入荷数量を足し、出荷数量を引いて
数量を出すクエリを作り、抽出条件で
0より大きいとして適当に作ったフォームに
表示させればいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。

とても参考になりました!

お礼日時:2010/06/19 14:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!