当店は通信販売をしており、お歳暮用の定形外宛名ラベルを作成したいです
通常の注文の場合は差出人欄に当店の住所氏名、受取人欄に発注者の住所氏名を印字しますが、お歳暮の注文の場合、差出人欄には発注者の住所氏名、受取人欄には発注者の顧客の住所氏名を印字します
まず発注者と、発注者の顧客、の住所氏名が含まれる一つの住所氏名テーブルを作ったら失敗しました。そこで発注者の住所氏名テーブルと、発注者の顧客の住所氏名テーブル、の2つの住所氏名テーブルを作ってみましたがこの先が分かりません
目標は
定形外ラベルをイメージしたフォームで、差出人欄にあるコンボボックスで発注者を選択し、その後受取人欄に配置したコンボボックスにできれば「当該発注者の顧客」のみが表示されるようにしたいです。(別の発注者の顧客に発送されることを防ぎたい)この場合、発注者の顧客の住所氏名テーブルに発注者IDフィールドを追加して・・・この先が分かりません。
できれば通常の注文(当店が差出人、発注者が受取人)にも対応したいですが当方アクセスの初心者につき難易度の低さを最優先したいです
また参考になるページがありましたら教えてください
宜しくお願いします
下記のような感じのテーブル設計になると思います。(一例です)
T_発注者
発注者ID 主キー
発注者氏名
発注者住所
T_発注者の顧客
発注者の顧客ID 主キー
発注者ID
発注者の顧客
発注者の顧客氏名
発注者の顧客
発注者の顧客住所
T_受注
受注ID 主キー オートナンバー型
受注日
発注者ID (T_発注者 の外部キー)
歳暮用 Yes/No型
受取人欄ID (T_発注者の顧客 の外部キー)
入力フォームは T_受注 をレコードソースとして作成します。
発注者選択用のコンボボックスを下記のように設定します。
名前 cb発注者ID
コントロールソース 発注者ID
値集合ソース T_発注者
列数 2
列幅 0
これで 氏名 で選択できます。
ちなみに下記の方法を使えば、ID でも 氏名 でも選択できるようにできます。
コードでも名称でも入力できるコンボボックス - hatena chips
「歳暮用」フィールドを配置すると自動でチェックボックスになります。
歳暮用の場合は、「歳暮用」にチェックをいれて、受取人選択用のコンボボックスで受取人を選択します。
受取人選択用のコンボボックスの設定は下記のようにします。
名前 cb受取人ID
コントロールソース 受取人ID
値集合ソース SELECT * FROM T_発注者の顧客 WHERE 発注者ID=cb発注者ID;
列数 2
列幅 0
これも氏名での選択でので、IDでも入力したい場合は上記のリンクを参考にしてください。
cb受取人ID のフォーカス取得時のイベントプロシージャを下記のように記述します。
以上が入力フォームです。
レポートの設定は下記のようになります。
まず、レコードソース用のクエリを作成します。
クエリで、T_受注、T_発注者、T_発注者の顧客 を追加して、
T_受注の外部キーと他のテーブルの主キーとを結合します。
レポートに必要なフィールドを追加します。
これをレポートのレコードソースにします。
レポート上の差出人欄の氏名テキストボックスのコントロールソースを下記のように設定します。
=IIf([歳暮用]=True,[発注者氏名],"当店の名前")
住所テキストボックスは、
=IIf([歳暮用]=True,[発注者住所],"当店の住所")
差出人欄の氏名テキストボックスのコントロールソースを
=IIf([歳暮用]=True,[発注者の顧客氏名],[発注者氏名])
住所テキストボックスは、
=IIf([歳暮用]=True,[[発注者の顧客住所],[発注者住所])
以上です。
ありがとうございます。難しそうですがチャレンジしてみます
細かく説明していただきありがとうございました
レポートがうまくいかなかったので見ていただけませんでしょうか
ただし誤植と思われる個所◆は以下のように変更しています
T_発注者の顧客
発注者の顧客ID 主キー
発注者ID
発注者の顧客 ◆削除
発注者の顧客氏名
発注者の顧客 ◆削除
発注者の顧客住所
T_受注
受注ID 主キー オートナンバー型
受注日 ◆削除
発注者ID (T_発注者 の外部キー)
歳暮用 Yes/No型
受取人欄ID (T_発注者の顧客 の外部キー) ◆欄を削除
受取人選択用のコンボボックス
名前 cb受取人ID
コントロールソース 受取人ID
値集合ソース SELECT * FROM T_発注者の顧客 WHERE 発注者ID=cb発注者ID;
列数 3 ◆変更
列幅 0cm;0cm;1cm ◆変更
差出人欄(受取人欄の誤植ですよね)の氏名テキストボックスのコントロールソースを
=IIf([歳暮用]=True,[発注者の顧客氏名],[発注者氏名])
住所テキストボックスは、
=IIf([歳暮用]=True,[[発注者の顧客住所],[発注者住所]) ◆[が多い
いろいろ間違いでご迷惑をおかけしました。
修正部分はそれで問題ないと思います。
レポートのレコードソース用のクエリの結合が間違ってます。
T_発注者 と T_発注者の顧客 は結合しませんのて、結合線を削除してください。
T_受注.受取人ID と T_発注者の顧客.発注者の顧客ID を結合してください。
結合線をダブルクリックして、結合プロパティを表示させて、「T_受注のすべてのレコードと・・・・」というオプションを選択します。結合線が T_受注.受取人ID → T_発注者の顧客.発注者の顧客ID という向きの矢印になります。
同様に、T_受注とT_発注者の結合線も 同じ向きに矢印になるように設定してください。
全体としては結構複雑なものになりますので、もし、差支えなければ右カラムの「ファイル送信フォーム」から現状のファイルを送信してもらえると、ファイルを見ながら具体的におかしいところを指摘できるとおもいます。
御親切にありがとうございます。ファイルを送信しました。よろしくおねがいします
送付していただいたファイルを改良しました。
下記のリンクからダウンロードできます。
定形外宛名ラベル作成.zip
いろいろ変更しましたので、自身のファイルと比べてどこが変更されたか確認してください。
主な変更点は、
レポートは、
レコードソースのクエリの結合を変更してます(前回の回答の内容)。
テキストボックスの名前がフィールド名と同じものになっていたので、それが原因でエラーとなってましたので、
テキストボックスの名前を変更してます。
フォームでは、VBAを変更しました。
最初の回答の cb受取人ID のフォーカス取得時のイベントプロシージャで再クエリする方法だと、一回のクリックでリストが開かないので、
レコード移動時と、cb発注者IDの更新後処理で再クエリするようにしました。
素晴らしいです。
同じ宛名印刷システムでもお歳暮用になると上級編なのですね。自力では挫折していたと思います。
まだ半分位しか理解出来ていないので勉強します。
1から10までありがとうございました。
m(_ _)m