- 締切済み
Accessで在庫管理する時の在庫数の出し方
在庫管理をaccessで行おうとしています。 在庫数の出し方が分かりません。 =DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量]) とすると、それらしい数は表示されるのですが、次のレコードで同じ商品(助成物コード)を指定すると、前のレコードの在庫と同じ数になってしまいます。 =DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量]) した結果を次の『=DLookUp("[在庫数]"』の在庫数に引き継いでもらいたいのですが、どうすれば良いか分かりません。 上記で『助成物コード』が商品コードで、 『数量』が受注数です。 他にどんな情報があれば良いか分かりませんので、不足している情報があればご指摘下さい。
- みんなの回答 (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、質問されている件そのものは、更新クエリーを各行で走らせれば解決します。
- nda23
- ベストアンサー率54% (777/1415)
>次のレコードで同じ商品 データは商品コードで特定されるのです。 助成物コードが同じなら「次のレコード」 ではありません。次には「次」の助成物 コードがあるはずです。この辺りの感覚は DB慣れしていないと間違うかも知れません。 もし、レコードを特定するために助成物 コード以外のもの(例えば日付)などが あるなら、それを提示してください。
補足
回答ありがとうございます! まぎらわしい表現をしてしまって申し訳ありません。 「助成物コード」と言うのは商品の種類を表しているコードで、種類が同じなら同じコードになります。 レコードを特定するにはオートナンバーで「ID」と言うのを作っています。 日付もあるのですが、同じ日に同じ「助成物コード」の品が登場することもあるので、使えないですよね?
- root_16
- ベストアンサー率32% (674/2096)
最初の数量をA それ以降の日付の納品(入荷)数をB 納品数の累計をΣB 出荷数をC 出荷数の累計をΣC 累計は別途クエリを作成 さて、今日の在庫数は A+ΣB-ΣC 要するに毎回累計を計算して在庫数を計算して出す (応用すれば、ある特定の日付けの在庫数も計算できる) レコード移動の時に再クエリ(Requery)すれば いいと思います。
補足
回答ありがとうございます! >レコード移動の時に再クエリ(Requery)すれば >いいと思います。 済みません、初心者で更新クエリを使ったことがありませんでした。 チャレンジしているのですが、うまく動かない状況です。 もう少し格闘してみます。
- ShowMeHow
- ベストアンサー率28% (1424/5027)
テーブル構造など定義にかかわることと、 抽出条件などを書いていただけると良いと思います。 どのようにデータをどういうテーブルに入れているのか、 を推測して書くのはつらいものがあります。 あと、Dlookupを使いたがっているということは、 excelの感覚で、accessを使っておられるのではないかと 推測しますが、テーブルの作り方自体(データのいれかた)を 考え直したほうが良い場合もありますので、、、
補足
回答ありがとうございます! テーブルは下記のような感じになります(一部省略しています)。 T_助成物マスタ ID 助成物コード 品名 在庫数 T_発注 ID 注文番号 出荷先 助成物コード 数量 助成物コードは、ユニーク値ではなくて、品名のような感じです。 "Excelの感覚で"と言うのは耳が痛いです(^^; なんか、バレバレですね。。。
補足
丁寧な回答ありがとうございます! root_16さんの所にも書きましたが、更新クエリに手こずっているレベルなので、どうしてこんなに詳しい回答が書けるのかビックリです。 検討1~3で困難になる事は分かりました。 >一日2000行程度の入出庫履歴ですと0.1秒以内に計算できる筈。 1日に20~30件なので、これは問題ないですね。 「月次棚卸表」は必要だと言われてないので頭にありませんでした。 ご指摘ありがとうございます。 月次棚卸表も含めて、もう一度検討させて頂きます。 ありがとうございました。