• ベストアンサー

ACCESSで困っています。

ACCESSで在庫管理のDBを作成しています。 クエリで入庫を+、出庫を-する1日の在庫数の表示はすることが出来ました。 ここから広げて、本日の在庫を明日の前日在庫として表示し、入庫数を+、出庫数を-。という形を日々作っていきたいのです。 何かいい方法はありますか? それとこの在庫数を元に何月何日にどの部品を入庫・出庫したかの履歴を作成したいのですが、何か方法ありますか? 説明不足で申し訳ありませんが、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.7

>全てのデータが表示されます 全てのデータとはどの全てなのでしょうか? 商品全て含まれた在庫のテーブルから入庫・出庫の各クエリに結合し前回答の結合をすると全商品が表示されるはずなのですが。 そういう事ではなく入庫・出庫の全データというでしょうか?これはクエリをグループ化して集計すれば商品ごとに出来ますが。 こういう全データという事でしょうか。 >在庫の日付は入出庫どちらの日付を表示させればいいのでしょうか 同じ基準の日付で抽出するので<=Date()-1または<Date()で抽出した分は日付ではなく前日在庫で良いのでは。 今日の分はDate()で求める今日の日付。 こういう事ではないのでしょうか?1質問の中で続いているので混同しているかもしれません。意味が違っていたらゴメンなさい。

noname#89246
質問者

お礼

回答ありがとうございます。 今からこの在庫管理全体の詳細を質問します。 今まで分からないところだけかいつまんで質問させてもらったのですが、全体の流れから考え直したほうがいいのかもしれません。 もしお時間があれば、質問を見ていただいて何かしらの回答をいただければありがたいのですが・・・。 本当に何度もすみません。

その他の回答 (6)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.6

>入庫と出庫別にテーブルを作っています テーブルが2つならそのまま各クエリで日付を抽出しなくてはいけませんが2つのクエリで同じ様に日付の抽出を<=Date()-1または<Date()でします。 Date関数なので条件の問い合わせダイアログも開かないで出来ます。 そして例えば 在庫テーブルを元にしたクエリにテーブル追加で入庫クエリ・出庫クエリを追加し在庫テーブルの商品ID(商品のキー)から各クエリを結合し結合の仕方を在庫テーブルの全レコードと同じフィールドの入庫クエリのレコード、同様に出庫クエリも在庫テーブルの商品IDから結合し入庫・出庫の数量をフィールドに追加すれば良いのではないでしょうか。 それで在庫数:[前日在庫]+Nz([入庫])-Nz([出庫])で現在の在庫数を求めれば。

noname#89246
質問者

補足

すぐ回答いただいて本当に助かります。 早速してみたのですが、デモで作っているので、日付や入出庫・在庫は適当な数を入力しているのが原因なのかもしれませんが、全てのデータが表示されます。 それと在庫の日付は入出庫どちらの日付を表示させればいいのでしょうか? 本当に質問ばかりして申し訳ありません。 お時間があればまたいろいろと教えていただければありがたいです

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.5

>在庫数のプラス・マイナスがクエリ以外でも出来るのでしょうか +-の演算はクエリだけでなくフォームやレポートでも出来ます。 コントロールのソースに式を記述すれば出来ます。クエリと同様の式で演算出来ます。 フォームやレポートでテキストボックスを配置してそのプロパティを開きコントロールソースに式を入れるだけです。 フォームやレポートでも表示のみになります。フォームの場合、演算結果をテーブルに保存するにはフォームを閉じる際などのイベントに保存する記述が別に必要になりますが。

noname#89246
質問者

お礼

O_cyan様いつも回答ありがとうございます。 実はNO2で回答いただいた分で質問があります。 >テーブルが日付・商品ID・入庫・出庫というフィールドで構成とした場合 とあるのですが、今作っているデータは入庫と出庫別にテーブルを作っています。 回答のようにするにはどうすればいいでしょうか? 日付が入庫日・出庫日の2つある状態です。 説明不足と思いますが、宜しくお願いします

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

>前日が休みの場合前日ではなく2日、3日前のデータを表示したい時はなにか方法ありますか 基本的に休みの場合入出庫はないので <Date() か <=Date()-1 Date()以前の日付のレコードとなりますのでで大丈夫なはずですが。 2日前の日付は Date()-2 や DateAdd("d",-2,Date()) で取得できます。

noname#89246
質問者

お礼

本当に何度もありがとうございます。 いつもO_Cyan様からの回答で着実に作成できています。 この在庫数のプラス・マイナスがクエリ以外でも出来るのでしょうか??もしお時間がありましたら、簡単に出来る方法があれば教えていただければありがたいです。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

もう一つ質問がありましたね >在庫数を元に何月何日にどの部品を入庫・出庫したかの履歴を作成したい これもクエリで日付・商品ID・入庫・出庫でグループ化し日付と商品IDはグループ化、入庫・出庫は合計で1日ごとの商品の入庫・出庫数を求めるようにします。 このクエリを使って応用すれば出来ます。 日付を指定し抽出すればその日付の入出庫があった商品が表示され商品IDで抽出すればその商品の入出庫があった日付が表示される。 このクエリを使ってどのような履歴表示にするか考えれば良いと思います。 蛇足ですが・・ こういう処理の際に月別在庫テーブルのようなテーブルに前月末時点の各商品の在庫数があれば1商品の履歴を照会する際にフォームに商品IDを入力しその商品名や前月在庫数を月別在庫テーブルから参照して表示させ上記で作ったクエリを使いサブフォームとしてメインフォーム上の商品IDで抽出し日付で当月分だけ抽出し表示すればその商品の当月の日付別の入庫・出庫履歴が分かるようなフォームが出来ます。(月別在庫テーブルではなくクエリで全て合計等だすのなら別ですが・・。レコード数が増えればレスポンスが悪くなる事もありますし。Accessではなるべく負荷が掛からないように設計した方が無難です。) サブフォームを帳票フォームにしてその1日の入出庫の合計のレコードが表示されている日付などのフィールドをクリックすると別のフォームが開きその日付のその商品の入庫・出庫の数量や入庫先や出庫先などの詳細が分かるフォームを表示させるようにすればOKじゃないですか。

noname#89246
質問者

お礼

本当にありがとうございます。 がんばって作ってみます。 もう1つ質問なんですが、先ほど回答いただいた、前日の在庫を表示したいという件なのですが、前日が休みの場合前日ではなく2日、3日前のデータを表示したい時はなにか方法ありますか???

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

>本日の在庫を明日の前日在庫として表示し、入庫数を+、出庫数を-。という形を日々作っていきたい クエリでという事で良いのでしょうか。 テーブルが日付・商品ID・入庫・出庫というフィールド構成とした場合 クエリで簡単に処理するなら前日の在庫を表示するクエリを1つ・本日の入出庫を表示し在庫残を出すクエリを1つ作ればできます。 例えば前日在庫クエリとします。 日付・商品ID・入庫・出庫のフィールドでクエリを作りグループ化します。日付の集計欄をWhere条件として抽出条件に <=Date()-1 または <Date() で前日までのレコードを抽出し入庫と出庫を合計にします。新しいフィールドに 前日在庫:[入庫]-[出庫] として前日までの在庫数を求めておきます。 次に本日在庫クエリを作ります。 これは >クエリで入庫を+、出庫を-する1日の在庫数の表示はすることが出来ました。 とあるのでそのクエリを本日在庫クエリとしてコピーすれば使えます。 本日在庫クエリにテーブル追加で前日在庫クエリを追加します。 前日在庫クエリの前日在庫のフィールドをクエリのフィールドに追加します。前日在庫クエリの商品IDと本日在庫クエリの元になっているテーブルの商品IDをドラッグして結合します。結合線の上で右クリックし結合プロパティを開き['前日在庫クエリ'の全レコードと'元になっているテーブル名'の同じ結合フィールドのレコードだけを含める]にします。 本日在庫クエリの日付の抽出条件に=Date()として本日だけのレコードを抽出します。在庫数を表示するフィールドの式を 在庫数:[前日在庫]+Nz([入庫])-Nz([出庫]) とすれば本日の在庫数を全て表示できます。Nz関数を使うのは入庫・出庫に本日発生がない場合にフィールドがNullになってしまうので演算出来なくなってしまうためNullなら0として扱うためです。 これなら簡単に出来ると思います。

noname#89246
質問者

お礼

回答ありがとうございます。 いつも回答いただいて本当に参考になります。 さっそくやってみます。 また質問すると思いますが、宜しくお願いします

回答No.1

日付ごとに分けたいのであれば、 登録日時などの、カラム(フィールド)をつければいいのではないでしょうか? 前日の在庫を抽出するのであれば where FormatDateTime(登録日時,2)= FormatDateTime(dateadd("d", -1, now()),2) の条件を入れれば、前日のデータを抽出します。 これを、表示させるようにすれば良いと思います。 履歴については、登録日時の日付単位でまとめればよいと思います。

noname#89246
質問者

お礼

回答ありがとうございます さっそくやってみます。

関連するQ&A