dポイントプレゼントキャンペーン実施中!

在庫管理をaccessで行おうとしています。
在庫数の出し方が分かりません。
=DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量])
とすると、それらしい数は表示されるのですが、次のレコードで同じ商品(助成物コード)を指定すると、前のレコードの在庫と同じ数になってしまいます。

=DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量])
した結果を次の『=DLookUp("[在庫数]"』の在庫数に引き継いでもらいたいのですが、どうすれば良いか分かりません。

上記で『助成物コード』が商品コードで、
『数量』が受注数です。

他にどんな情報があれば良いか分かりませんので、不足している情報があればご指摘下さい。

A 回答 (4件)

Q、Accessで在庫管理する時の在庫数の出し方?


A、[現在庫数]は、通常は入出庫履歴から計算します。

そこで、現行のアイデアの問題点を少し検討してみます。

検討1、入出庫の都度に[現在庫数]を表示する意義とは?

[現在庫数]が20と仮定します。
1行目で1の出庫が確定・・・・20-1=19 ---> [現在庫数]を19に更新。
2行目で2の出庫が確定・・・・19-2=17 ---> [現在庫数]を17に更新。

1行目が入力ミスだったと気付いて訂正!

1行目を2の出庫に訂正・・・・17-1=16 ---> [現在庫数]を16に更新。

この時、入力フォームに表示される [現在庫数]は1行目が16に、2行目が19になります。
仮に入力ミスが発生しなかった場合には、1行目が18に、2行目が16になります。
こうして、入力フォームに表示される [現在庫数]はどれが最終かが判らなくなります。
つまり、入出庫の都度に[現在庫数]を表示する意義があるのか否か?
それが、一つ目の問題です。

検討2、[現在庫数]の更新ミスをどのようにカバーするのか?

入出庫の都度に[現在庫数]を計算しているのだから、一度、ミスが発生すればそれまで。
誤まった[現在庫数]は、それ以降の全ての入出庫に反映します。

検討3、実際に要求される月次棚卸表とは?

[商品名][月初在庫数][当月仕入数][当月出庫数][当月調節数][月末在庫数]
[AAA][___10][____1][____0][___-1][___10]
[BBB][____2][____1][____1][____0][____2]
[CCC][____0][____1][____1][____0][____0]

在庫管理するとなれば、当然に月次棚卸表も作成することになろうかと思います。
問題は、入出庫の都度に[現在庫数]を更新する仕組みでは、この月次棚卸表の作成が困難。

Q、Accessで在庫管理する時の在庫数の出し方?
A、[現在庫数]は、通常は入出庫履歴から計算します。

1、出庫伝票の商品入力欄で<0>と入力する。
2、<0>入力で商品検索フォームを開く。
3、商品の綴り等を入力。
4、該当する商品リスト一覧を表示。
5、商品リストからの該当する商品を選択。
6、商品の動態情報を表示。
7、現在庫を確認し[OK]を押す。
8、出庫伝票の商品入力欄に該当する商品が入力される。

通常、各商品毎の現在庫は、商品コードの入力時に表示し確認します。(6)
この場合、VBAで[月初在庫数]以後の動態を計算して表示します。
一日2000行程度の入出庫履歴ですと0.1秒以内に計算できる筈。
出庫伝票の各行には、検討1の問題があるので表示しません。
各商品の現在庫を確認したいというユーザーの要求には1~7を独立させればOK。
[現在庫の確認]というアイコンを出庫入力フォームの下部にでも配置していればOK。
これで、[現在庫数]の更新ミスとは無縁の仕組みができます。
これで、月次棚卸表を作成する計算モジュールも完成です。

PS、質問されている件そのものは、更新クエリーを各行で走らせれば解決します。

この回答への補足

丁寧な回答ありがとうございます!

root_16さんの所にも書きましたが、更新クエリに手こずっているレベルなので、どうしてこんなに詳しい回答が書けるのかビックリです。

検討1~3で困難になる事は分かりました。

>一日2000行程度の入出庫履歴ですと0.1秒以内に計算できる筈。
1日に20~30件なので、これは問題ないですね。

「月次棚卸表」は必要だと言われてないので頭にありませんでした。
ご指摘ありがとうございます。
月次棚卸表も含めて、もう一度検討させて頂きます。

ありがとうございました。

補足日時:2011/06/09 14:43
    • good
    • 0

>次のレコードで同じ商品


データは商品コードで特定されるのです。
助成物コードが同じなら「次のレコード」
ではありません。次には「次」の助成物
コードがあるはずです。この辺りの感覚は
DB慣れしていないと間違うかも知れません。
もし、レコードを特定するために助成物
コード以外のもの(例えば日付)などが
あるなら、それを提示してください。

この回答への補足

回答ありがとうございます!

まぎらわしい表現をしてしまって申し訳ありません。

「助成物コード」と言うのは商品の種類を表しているコードで、種類が同じなら同じコードになります。
レコードを特定するにはオートナンバーで「ID」と言うのを作っています。
日付もあるのですが、同じ日に同じ「助成物コード」の品が登場することもあるので、使えないですよね?

補足日時:2011/06/09 14:36
    • good
    • 0

最初の数量をA


それ以降の日付の納品(入荷)数をB
納品数の累計をΣB
出荷数をC
出荷数の累計をΣC
累計は別途クエリを作成

さて、今日の在庫数は
A+ΣB-ΣC
要するに毎回累計を計算して在庫数を計算して出す
(応用すれば、ある特定の日付けの在庫数も計算できる)

レコード移動の時に再クエリ(Requery)すれば
いいと思います。

この回答への補足

回答ありがとうございます!

>レコード移動の時に再クエリ(Requery)すれば
>いいと思います。
済みません、初心者で更新クエリを使ったことがありませんでした。
チャレンジしているのですが、うまく動かない状況です。
もう少し格闘してみます。

補足日時:2011/06/09 14:31
    • good
    • 0

テーブル構造など定義にかかわることと、


抽出条件などを書いていただけると良いと思います。

どのようにデータをどういうテーブルに入れているのか、
を推測して書くのはつらいものがあります。

あと、Dlookupを使いたがっているということは、
excelの感覚で、accessを使っておられるのではないかと
推測しますが、テーブルの作り方自体(データのいれかた)を
考え直したほうが良い場合もありますので、、、

この回答への補足

回答ありがとうございます!

テーブルは下記のような感じになります(一部省略しています)。
T_助成物マスタ
ID
助成物コード
品名
在庫数
T_発注
ID
注文番号
出荷先
助成物コード
数量

助成物コードは、ユニーク値ではなくて、品名のような感じです。
"Excelの感覚で"と言うのは耳が痛いです(^^;
なんか、バレバレですね。。。

補足日時:2011/06/09 14:28
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A