• ベストアンサー

access2000について

在庫管理から売上(社内)管理のシステムを構築し、使っているのですが、売り単価が変更になった場合、過去の売上データが変わってしまいます。 商品コードは変更しないで単価を変えることは出来ませんか? access暦は長いのですが、独学なので解からないことだらけです。どうぞよろしくお願いいたします。

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

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

>売り単価が変更になった場合過去の売上データが変わってしまいます。 原因は2通りあります。 1.リレーションで参照整合性のフィールドの連鎖更新が設定されている。そのため商品のマスタの売り単価が変更されると過去の売上のレコードまで変更されてしまう。 2.過去の売上データに売り単価のフィールドがなく保存されていない。そのため商品のマスタの売り単価を参照するので変更されれば変更後の金額でしか計算できない。 1の場合は売り単価が変更されると自動的に過去の売り単価も変更されてしまいます。連鎖更新が設定されていればチェックをはずし売り単価が変更になっても更新されないようにすれば大丈夫です。 2の場合は他の方が書いてありますが商品のマスタの売り単価のみで売り単価をクエリ等で演算している場合は売り単価が変更になれば変更後の金額でしか過去の売り単価も計算できません。 売上時の売り単価で過去のレコードも計算したいのであれば売上時の売り単価を保存するフィールドをそのテーブルに作り売上時の売り単価を保存するしかありません。 売り単価がいつ変更になったかが分かるテーブルでもあれば売上のレコードの売上日と売り単価変更日を参照してその時点での売り単価で計算することはでいますが。

nyuki0603_june
質問者

お礼

何か設定があるはず!って思っておりました。 たぶん「連鎖更新」で回避できると思うので、がんばってみます。 貴重なお時間とアドバイスありがとうございました。

その他の回答 (3)

noname#79209
noname#79209
回答No.3

私の場合、将来内容が変更になる可能性のあるものは、冗長になってもテーブルにそのデータ(この場合は売上テーブルの単価フィールドとして)を入れてしまいます。 どうしてもルックアップ系で使いたいのなら、 単価マスターの履歴管理をしなければならないでしょう。 単価マスターにサブコードなどを追加し、商品コードとそのサブコードを売上テーブルに保存するしかないでしょう。 でもコードが複雑になるのであまりお勧めしませんが...

nyuki0603_june
質問者

お礼

単価マスターにサブコード。方法として大変参考になりました。ありがとうございました。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

過去の売上データが変わってしまうとのことですが、売上を選択クエリ上で演算結果として表示させている、ということでしょうか? もしそうではなく、テーブル上に売上データを記録するフィールドがあって、アクションクエリ(更新/追加)で記録しているのだとすれば、そのクエリにWhere条件を追加することで対処できる気がするのですが・・・。 (例えば、fuuten_no_nekoさんがいわれているような「出庫日時」など) 私も独学なので、見当違いでしたら済みません。

nyuki0603_june
質問者

お礼

すみません。説明が不足していまして。。。 リレーションを組んでいて、売上データには、ID・日付・数量の情報。商品マスタには、ID・品名・単価の情報。でクエリで売上金額を算出してるんです。 #04、O_cyanさんの参照整合性フィールドの連鎖更新・・・が、まずは簡単そうなのでトライしてみます。 ありがとうございました。

noname#182251
noname#182251
回答No.1

データ構造を変更しなければならないでしょう。 例えば現在 商品マスタ 商品コード(PKey)、商品名、単価、. . . . を二つのテーブルに分け 商品マスタ 商品コード(PKey)、商品名、. . . . 単価リスト 単価ID(Pkey)、商品コード、単価、開始日時、終了日時、. . . . みたいにすれば、これでリレーションが取れます。出庫時の日時が記録されていなければ駄目ですが、もしそうならばそこから直さなければ。 とにかく基本的な部分の変更なので、かなりしんどいでしょう。ご健闘を祈ります

nyuki0603_june
質問者

お礼

早速ありがとうございました。 こんな方法もあるのか・・・と感心しております。 大変参考になりました。ありがとうございました。

関連するQ&A