Accessで販売管理システムを構築し、受注に転記機能を実装したい
- Accessにて販売管理システムを構築し、T_見積伝票&T_見積明細に入力された内容を受注に転記する機能を実装したいです。
- T_見積伝票とT_見積明細がリレーションしており、対応するフィールドの内容のみをT_受注伝票&T_受注明細にコピーしたいです。
- 追加クエリを使用して実現する方法があるようですが、具体的な方法がわからず困っています。
- ベストアンサー
Access:サブフォームのレコードのコピー(複数)
Accessにて販売管理システムを構築しています。 以下の構成にてテーブルがあります。 ------------------------------ T_見積伝票(メイン) ・見積ID(主キー) ・顧客名 ・見積日 ------------------------------ T_見積明細(サブ) ・明細ID(主キー) ・見積ID ・商品名 ・数量 ・単価 ------------------------------ T_受注伝票(メイン) ・受注ID(主キー) ・顧客名 ・受注日 ------------------------------ T_受注明細(サブ) ・明細ID(主キー) ・受注ID ・商品名 ・数量 ・単価 ------------------------------ *主キーはすべてオートナンバーにて採番されるようにしています。 T_見積伝票とT_見積明細がリレーション T_受注伝票とT_受注明細がリレーション 実現したいことは、T_見積伝票&T_見積明細に入力された内容が 実際に受注となった場合、「受注に転記」のようなボタンを設置し クリックすることで、T_受注伝票&T_受注明細に複製できればと思っています。 T_見積伝票とT_受注伝票にはいくつか異なるフィールドがあるので、(見積日と受注日) 対応するフィールドの内容のみコピーしたいです。 逆にT_見積明細とT_受注明細は主キーとなってるIDのみ違うだけで それ以外は全て同じフィールドにて構成されていますので 全部コピーしたいです。 色々と調べた結果、追加クエリを使うといいみたいですが 追加クエリ自体がよく分からず質問させて頂きました。 宜しくお願い致します。
- SOU48
- お礼率35% (51/144)
- オフィス系ソフト
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>この記述で複数の明細をコピーできるのでしょうか? 出来ますよ。条件を満たすレコードを自動的に全て追加できます。 例えば、見積伝票(見積ID=1)に複数の明細がある場合、 SELECT * FROM T_見積明細 WHERE T_見積明細.見積ID = 1; 上記の【選択】クエリで、複数のレコードが【選択】できますよね。これと同様に【追加】クエリなら、複数のレコードが【追加】されます。SQL(クエリ)の便利なところです。こういう言語を非手続き型言語と言います。 今回のプログラムでは、受注IDの問題があったので、前半はDAOのRecordsetを使って、手続き型の処理をしています。後半はSQLを使って非手続き型の処理をしています。
その他の回答 (1)
- venzou
- ベストアンサー率71% (311/435)
>逆にT_見積明細とT_受注明細は主キーとなってるIDのみ違うだけで 見積IDと受注IDも異なりますよね。 追加クエリでは、T_受注伝票に追加した時に振られるオートナンバーが取得できないので、追加したレコードの受注IDが分からなくなります。 スタンドアロンで使用すると言う前提なら、Max(受注ID)で取得可能かな。 ---------------------------------------- VBAを使ってよいなら。 見積伝票の入力フォームに、「受注に転記」ボタンを追加して、クリック時のイベントプロシージャに下記を記述。 Private Sub コマンド0_Click() Dim rs As DAO.Recordset Dim SQL As String Dim ID As Long '受注伝票に追加(DAOを利用) Set rs = CurrentDb.OpenRecordset("T_受注伝票", dbOpenDynaset) rs.AddNew ID = rs![受注ID] '受注IDを取得 rs![顧客名] = Me![顧客名] rs![受注日] = Date '受注日には今日の日付を入れてます。 rs.Update rs.Close Set rs = Nothing '受注明細に追加(追加クエリを利用) SQL = "INSERT INTO T_受注明細 ( 受注ID, 商品名, 数量, 単価 ) " SQL = SQL & "SELECT " & ID & " as 受注ID, T_見積明細.商品名, T_見積明細.数量, T_見積明細.単価 " SQL = SQL & "FROM T_見積明細 " SQL = SQL & "WHERE T_見積明細.見積ID=" & Me![見積ID] & ";" CurrentDb.Execute SQL DoCmd.OpenForm "受注伝票フォーム", , , "[受注ID]=" & ID End Sub これで、受注伝票、受注明細に追加して、ついでに受注伝票フォームを開きます。
補足
コードを含めた詳しい説明有り難うございます! >>逆にT_見積明細とT_受注明細は主キーとなってるIDのみ違うだけで >見積IDと受注IDも異なりますよね。 すみません、主キーは同じで、仰る通り見積IDと受注IDが異なります。 -------------------------------------------------------------- '受注明細に追加(追加クエリを利用) SQL = "INSERT INTO T_受注明細 ( 受注ID, 商品名, 数量, 単価 ) " SQL = SQL & "SELECT " & ID & " as 受注ID, T_見積明細.商品名, T_見積明細.数量, T_見積明細.単価 " SQL = SQL & "FROM T_見積明細 " SQL = SQL & "WHERE T_見積明細.見積ID=" & Me![見積ID] & ";" CurrentDb.Execute SQL -------------------------------------------------------------- すみません、この記述で複数の明細をコピーできるのでしょうか? (疑っているとかいうわけではなく、While等の繰り返し処理って 必要なくとも可能なのでしょうか?)
関連するQ&A
- 削除クエリをすると、必要なレコードが消えてしまう
店のサンプル商品を発注し、返却される一連の作業をAccessで作っています。 T顧客名‥‥フィールド:「ID」「顧客」 Tサンプル品‥‥フィールド:「CD」「商品」 T発注‥‥フィールド:「ID」「CD」「発注日」「数量」←規定値1 T返却‥‥フィールド:「ID」「CD」「返却日」「数量」←規定値1 テーブルは以上です。 クエリは、 Q発注伝票‥‥フィールド 「T顧客:ID」「T顧客:顧客」「Tサンプル品:商品」「T発注:日付」「T発注:数量」 Q返却伝票‥‥フィールドは「T発注」の部分が「T返却」に変わります。 発注されたサンプル商品が返却されたら、 クエリの発注と返却を照合し、「T顧客:ID」と「Tサンプル品:商品のサンプル商品が一致した場合、 Q発注伝票のレコードだけ削除したいと思っています。 数量は規定1で、2以上発注しないので、無視でOKなのです。 削除クエリを用いましたが、なぜか、発注伝票だけでなく、返却伝票のレコードごと無くなってしまいました。 式を変えればエラーになり、また変えれば明後日の場所が消えたり‥‥。 何度やってもうまくいきません。 どのような解決策をすればよいか、煮詰まっています。 なお、クエリの更新が自動で出来れば良いとも思っていますが、出来ますでしょうか?
- ベストアンサー
- オフィス系ソフト
- accessのレポートで困ってます。
受注伝票を印刷するためのレポートを作っていますが 複数商品を購入した際に購入商品を全て表示させる方法が分かりません。 Access2002で受注管理のテンプレートを 自分なりにカスタマイズして使っています。 受注に関するテーブルは3つあります。 関連するフィールドは下記の通りになっています。 【受注】 受注ID … key 【商品】 商品ID … key 商品名 単価 【受注明細】 受注明細ID … key 受注ID … 受注テーブルの受注IDと一対多 商品ID … 商品テーブルの商品IDと一対多 数量 単価 レポートには、複数商品を購入した場合に 全ての商品名と購入数、価格を表示させたいと思います。 どうぞよろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- ACCESS2007でレコードの条件付き削除
よろしくおねがいします。 テーブル [仕訳伝票]、[仕訳明細]に 仕訳IDで 前者が1、後者がN のリレーション設定しています。 [仕訳伝票]の仕訳日のフィールドが削除日以前のデータを削除するのに次のようにしました。 「仕訳明細クエリ」作成 ※添付画像を見てください DoCmd.RunSQL ("delete FROM 仕訳明細クエリ;")で 「 実行時エラー'3086' 指定したテーブルから削除できませんでした 」 因みに 「仕訳明細クエリ」を開いてDeleteキーで手動削除すると仕訳明細のレコードは削除できましたが仕訳伝票のレコードは残っています。
- ベストアンサー
- オフィス系ソフト
- メイン・サブフォームの内容を更新クエリで更新したい
お世話になります。 現在、 tb受注日報(親)、tb受注伝票(子)で、受注伝票をサブフォームという形で組み込んだ【受注日報フォーム】と tb作業表(親)、tb作業表明細(子)で、作業表明細をサブフォームという形で組み込んだ【作業表フォーム】 があります。 【受注日報フォーム】上にあるコマンドボタンのマクロに、親同士、子同士での追加クエリを設定し、ボタンを押せば【受注日報フォーム】に入力した内容を【作業表フォーム】に反映させられるようにしています。 この要領でコマンドボタンを押せば以前に入力した【受注日報フォーム】の更新内容を【作業表フォーム】に反映させられるようにしたいと考えています。 そこで、親同士、子同士で更新クエリを作ってみた結果、親同士の更新は大丈夫でしたが、子同士の更新が一番目のレコードしか更新されませんでした。 更新クエリの抽出条件 親 フィールド 「識別番号」(オートナンバーです) テーブル 「作業表」 抽出条件 [forms]![受注日報]![識別番号] 子 フィールド 「受注伝票番号」 テーブル 「作業表明細」 抽出条件 [forms]![受注日報]![受注伝票Sub].[form]![受注伝票番号] ちなみに親同士の追加クエリの抽出条件に使用した主キーは「識別番号」とは別の番号で、オートナンバーではなく、最大値に+1するやり方で振っている番号を使用していて、子同士の主キーは追加クエリも更新クエリもおなじ[受注伝票番号]を使用しています。 抽出条件かこの主キーの設定が問題なのかなあと思いますが、わからないのでどなたかご回答宜しくお願い致します。
- ベストアンサー
- その他MS Office製品
- アクセスで見積書作成
アクセスで見積書を作成していますが、レポートで経費の計算が上手くいきません。 作成したい見積のレイアウトは以下の通りです。 (1)○○費 (1)○○○ 単価 × 数量 = 金額 (2)○○○ 単価 × 数量 = 金額 (3)○○○ 単価 × 数量 = 金額 (2)××費 (4)××× 単価 × 数量 = 金額 (5)××× 単価 × 数量 = 金額 (6)××× 単価 × 数量 = 金額 以下同じように(5)まであります。 (6) 経費A (1)~(3)の合計 × 1% (7) 経費B (4)~(5)の合計 × 2% (8) 経費C (1)~(5)の合計 × 3% (9) 端数処理 (1)~(8)の合計の千円以下の部分 (10) 合計 (1)~(8)の合計-(9) テーブルは次の4つを作成しました。 ・大項目Tとして(1)~(5)の値 ・小項目Tとして(1)~(15)の値、大項目名(リレーション) ・見積Tとして見積No、相手先名等 ・見積明細Tとして見積No(リレーション)、小項目(リレーション)、数量等 レポートで経費の計算がどうしても上手くいきません。クエリーも色々作成してみましたが、レポートでどう参照すればいいのかわかりません。完全に行き詰まっています。 どなたかお知恵を貸してください!レポートでのグループヘッダ・フッタの設定の仕方なども教えていただけると大変ありがたいです。
- ベストアンサー
- その他(データベース)
- Accessのフォームでの合計欄を二つにわけたい
テーブル1;売上明細T フィールド名;売上明細番号、商品コード、数量、摘要 テーブル2;商品T フィールド名;商品コード、商品名、単価 クエリで売上明細と商品Tをつなぎ、下記のように表示します。 商品コード 商品名 摘要 数量 単価 明細計 (数量*販売単価) 001 物件1 作業代 1 500 500 002 物件2 作業代 2 400 800 051 物件51 作業代 1 500 500 051 物件51 交通費 1 350 350 上記クエリを元にフォームを作成(帳票形式)して、 テキストボックスで課税対象計(作業代計)と、非課税対象計(交通費計) のボックスをもちたいのですが可能でしょうか? 最終的には、売上伝票フォームに売上明細フォームをサブフォームで 取り込み、売上伝票上で合計金額を表示させたいと思っています。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 【Accessクエリ】存在しないデータを0として計算させるには?
手数料テーブル(注文番号→手数料) ─────── 1 500 3 500 11 500 受注テーブル(注文番号→単価、数量) ────── 1 64,000 3 2 248,000 1 3 82,000 1 4 110,000 4 クエリ 総額: 単価 * 数量 + 手数料 とすると、注文番号2,4の総額は表示されません。 この場合、受注テーブル内に手数料フィールドをつくり、全レコードに手数料フィールドをもたせるしかないのでしょうか? 手数料=0として、正しく計算してほしいところなのですが...
- ベストアンサー
- Access(アクセス)
- ★Access★2つのサブフォームの計算
受注管理として、注文書の作成入力をしています。 『メインフォーム』で、顧客先などを入力し、『サブフォームA』で受注明細を入力しています。そして受注種類が2つあるので、フィールドの違う受注明細の『サブフォームB』もあるんです。各サブフォームには数量・単価・金額が入っています。 『サブフォームA』『サブフォームB』の両方に注文がある場合は、各サブフォームの合計(=[Form]!サブフォームA!金額合計)を出し、その合計同士を足して総合計金額(A+B)が『メインフォーム』にちゃんと表示されます。しかし、『サブフォームA』にだけ注文がある場合、『A』合計は表示されますが、『B』合計が空欄になってしまって、A+Bの合計が計算されないのです。さらにレポート印刷もできないのです。 どうすればいいのでしょうか?合計プロパティの既定値を0にしてもだめなんです。誰か教えて下さい。
- ベストアンサー
- その他(データベース)
- Access サブフォームについて
いつもお世話になっております。 例に沿って質問します。 請求フォームがあり、 そこに請求明細サブフォームがあります。 明細のほうには、商品マスタと紐付いて、 商品ID、商品名、単価が表示されます。 明細.商品IDと商品マスタ.商品IDを紐付けることは できたのですが、(リレーションによって) 単価を商品マスタからひろうことができません。 (明細テーブルにも、単価欄があります) 明細.単価にupdateしたいのです。 ご教授宜しくお願いします。
- ベストアンサー
- その他(データベース)
- Access 一対一リレーションの編集
こんにちは 現在、Accessと他のソフトとの連携をするために奮闘しています。。。知恵をお貸下さい。 Accessには元々受注テーブルがあります。 主キーID:オートナンバー 受注日:日付型 納期:日付型 図番:テキスト型 数量:数値 単価:数値 とあり、データがすでに存在しています。他のソフトへエクスポートを継続的に行うにあたって 新規にテーブルを作成し、一対一リレーションをしようとしています。 新規テーブルは 主キーID:オートナンバー 取引先コード:テキスト型 担当者コート:テキスト型 区分コード:テキスト型 実出荷日:日付型 エクスポート状況:数値 そして、受注テーブルと新規テーブルのIDを一対一でリレーションしクエリを作成し、エクスポートしようと思っています。 その際、新規テーブルの方はデータが空なのでクエリ結果が得られないと思うのですが。。。 どうやって既存の受注テーブルと一つ一つのレコードを繋げる事が出来ますか❓ 編集方法をどなたか教えて下さい。 素人ですみません。
- ベストアンサー
- オフィス系ソフト
お礼
有り難うございます! SELECTの例、すごくよく分かりました。 ネットで調べていても、同じように記述するとは書いていましたが なぜ、これだけで複数のレコードが追加されるのか、までは 書いておらず、四苦八苦していたところでした。 このレスを頂いたことで、悩んでいた問題が一気に解決しました。 で、本題のメインフォームとサブフォーム内の複数レコードのコピーですが 先のレスと合わせて試したところ、希望した動作になりました! (受注IDはMAXで取得できました。) 本当に有り難うございますm(_ _)m