• ベストアンサー

Access2002でレポート(納品書)に連番を打ち出したい

色々検索したのですが、なかなかヒットせず、質問させていただくことにしました。 要望は単純です。でも、私に回答を導くことはできませんでした。 一般的な「納品書」をレポートで印刷する際、連番(ユニークであればなんでもかまいませんが)を振って、印刷したいのです。 裏にあるテーブルやクエリには連番フィールドがないので、困っています。と申しますか、フィールドをどこかに作ろうと思っても、リレーションをつなぐ相手がいないのです。 「注文」に紐付けるにも、納品書は複数の「注文」から成り立っているので、相手が複数になりますし、「顧客」に紐付けると、今度はユニークにならず。。。 「連番テーブル」みたいなものを独立させ、クエリを実行するたびに[番号+1]のような処理をさせようかとも考えましたが、独立したテーブルを作ってクエリに紐付けると、Accessから怒られまして。。。 文房具店に売っているような納品書には最初から連番が振ってあるものがありますよね?あのイメージです。 どなたか解決策をお持ちの方がいらっしゃれば、是非ご教授お願いいたします。

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

  • ベストアンサー
noname#182251
noname#182251
回答No.7

#6です >>新規作成→オートナンバーで連番が自動作成される >これはどういう操作でしょうか? 新規作成は、「納品書新規作成」のつもりでした。#6に書いたような構造を持つ、「納品書テーブル」の存在が前提です。このテーブルに「納品書ID:オートナンバー」が存在しなければならないですが、「その作り方も判らない」ようであれば、入門書などで勉強してください。 >>新規レコード追加→親子の関連づけにより「注文テーブル」の「納品書ID」に親フォームの「納品書ID」が記載される >この「関連付け」はどこでなされているのでしょうか? 「親子の関連づけ」が正しくされていれば、アクセスが面倒を見てくれます(自動的に記入してくれる)。

camo-tech
質問者

お礼

ネットで検索しておりましたところ、似たような悩みを持たれているかたがいらっしゃったようで、自己解決できました。 ・氏名でグルーピング>フッタを「はい」>できたフッタで「セクションの後で改ページ」 で、できました。 どうも色々ありがとうございました。

camo-tech
質問者

補足

ご回答、ありがとうございます。 テーブル作成、関連付け、フォームの作成、レポートの作成、まで順調にきました。 あとは、(これは極めて初歩的なのでしょうけれど)改ページです。 社員ごとに納品書を打ち出したいのですが、ツールボックスの「改ページ」をどこに入れてもうまくいきません。 タイトル ---------------------------------- 納品書番号 社員番号(顧客番号)、名前 ---------------------------------- 注文(納品)明細 というくくりにしておりますが、普通に印刷しようとすると、 タイトル ---------------------------------- 納品書番号 社員番号(顧客番号)、名前 ---------------------------------- 注文(納品)明細 ::::::::::::::::: 納品書番号 社員番号(顧客番号)、名前 ---------------------------------- 注文(納品)明細 : : :(続く) となり、顧客ごとのレポートになってくれません。 (タイトル「納品書」が最初に1つしか表示されない) 本題からは外れますが、どういう処理をすれば、望みどおりのレポートになりますでしょうか? ヘルプで検索しても、「ForceNewPage」関数?のトピックしか出てこないのです。 すみませんが教えてください。

その他の回答 (6)

noname#182251
noname#182251
回答No.6

#1、#3です。補足された内容が良く理解できません。なので >という流れでしょうか? にまともな回答はできないのですが、どうも誤解されているようです。どこが?と云う前に順を追って 1.テーブル設計 「納品書テーブル」 納品書ID:オートナンバー 納品日付:日付時刻 顧客ID:整数 「顧客テーブル」 顧客ID:オートナンバー 顧客名:テキスト 「注文テーブル」 注文ID:オートナンバー 納品書ID:数値型 商品ID:数値型 数量:数値型 摘要:テキスト 2.処理の流れ 予め、顧客データや商品データは登録済みだとして 「納品書作成」 親(メイン)フォームで ・新規作成→オートナンバーで連番が自動作成される ・日付や、納品先(顧客ID)選択 子(サブ)フォームで ・新規レコード追加→親子の関連づけにより「注文テーブル」の「納品書ID」に親フォームの「納品書ID」が記載される ・納品する商品(ID)選択 ・数量、摘要記入 ・必要に応じて複数回繰り返す 「納品書印刷」 前記「納品書作成」で入力したデータや自動作成(記入)されたデータに基づき、親子レポートで#3の回答で示したような納品書が印刷される

camo-tech
質問者

お礼

すみません。 まだはまっております。 テストDBでうまくいったので、本番DBに構造を移してみたのですが、うまくいきません。 新たに質問をアップしましたので、申し訳ないですが、もうしばらくお付き合い願えませんか? 質問のURLは下記のとおりです。 http://oshiete1.goo.ne.jp/qa5257035.html よろしくお願いします。

camo-tech
質問者

補足

ありがとうございます。 ようやく、見えてきました。 ご教授いただいたとおり、やっているのですが、いくつか不明な点がございます。 >・新規作成→オートナンバーで連番が自動作成される これはどういう操作でしょうか? ウィザードでしかフォームを作成したことがないものでして。。。 >・新規レコード追加→親子の関連づけにより「注文テーブル」の「納品書ID」に親フォームの「納品書ID」が記載される この「関連付け」はどこでなされているのでしょうか? なんか。。。手取り足取りみたいになってまいりましたが、ご教授願えれば幸いです。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

同じテーブルで結合するという意味です。 図で示すと、上の表は左側の注文IDが1です。右側で注文IDが1より 小さいレコードは無いので、COUNT関数の結果は0になります。 下表は左側の注文IDが2です。右側で注文IDが2より小さいレコードは 1件あるので、COUNT関数の結果は1になります。このようにして順位を 生成しているのです。「同じテーブル同士を結合する」「不等号の結合 条件」という発想が盲点になり易い所です。また、不等号なのでクエリ ビルダーでは作成できず、SQLを直接書く必要があります。 >Int(COUNT(B.注文ID)/10)+1 AS 連番 1帳票あたり10行という単純な括りであると仮定した話です。 「COUNT(B.注文ID)」これが「IDが小さいレコードの数」です。 単に10で割って1を足すのだから、0~9は1、10~19は2となります。 未だ説明がありませんが、どの納品書に何と言う注文が記載されるか という紐付けの方法が分かりません。よって、正解のSQLはここでは 記載できません。あくまで、考え方や、仮想の記述になります。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

仮定:納品書Xには注文A、注文B、注文Cがある。 >注文IDはありますが、納品書IDはありません。 どうやって仮定に示した納品書を形成するんですか? 単に帳票みたいな作りで、1ページ10行(注文)になってるとか・・・ 上記想定だと次のようになります。 SELECT A.注文ID,(品名、数量、金額など), Int(COUNT(B.注文ID)/10)+1 AS 連番 FROM 注文 AS A LEFT JOIN 注文 AS B ON A.顧客ID=B.顧客ID AND A.注文ID>B.注文ID WHERE 条件 GROUP BY 顧客ID,その他 要点:注文テーブル同士を結合します。自分の注文IDより小さい 注文IDを持つレコードを数えます。最も小さいIDなら、自分より 小さいIDのレコード数は0、2番目なら1、3番目なら2、・・・ このようにして順位を付けます。抽出条件やグループ化項目は適当に 設定してください。但し、レポートに出力する並べ替え基準と同じ であることが条件です。クエリは顧客ごとのIDを基準にしています。

camo-tech
質問者

補足

ごめんなさい。 簡単なSQLすら全く経験がないので、ご説明の内容が理解できず。。。 撃沈しております。

noname#182251
noname#182251
回答No.3

#1です。何か誤解されているようですね。 >1つの注文に納品書IDを振るということは、本意から外れて 違います。複数の注文に同じ「納品書ID」を割り付けるのです。親子フォームなどを利用すれば、割付はAccessが自動的にやってくれます。これで「1つの納品書で、複数注文」が関連づけられます。納品書印刷も、親子レポートを使えば簡単にできるでしょう。

camo-tech
質問者

補足

お返事おそくなりました。 親子=サブ、でよろしいでしょうか? 1.「注文」テーブルに「納品書番号」フィールドを追加 2.クエリでメインのヘッダに「納品書番号」フィールドを作成し、オートナンバーで番号を振らせる。 3.そのクエリを背景にしたレポートを作成し、サブフォーム(レポート?)で注文明細の一覧を表示 4.印刷時に納品書番号が振られ、かつその番号が各注文に振られる という流れでしょうか?

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>注文:納品書、=、多:1 注文テーブルには「納品書ID」、「注文ID」(一意キー)、がありますか? あれば簡単です。

camo-tech
質問者

補足

遅くなり、すみません。 注文IDはありますが、納品書IDはありません。 理由としては、上記「多:1」のせいで、 1つの納品書に複数の注文を掲載するため、 もし「納品書ID」フィールドを作ったとしても、どのIDを納品書に 記載するか、という判断ができないためです。 しかたがないので、担当者に納品書を打ち出すとき、納品書IDを 入力してもらおうか・・・と思っています。 ん~~~。 これではシステマティックではないですよね。。。

noname#182251
noname#182251
回答No.1

ご要望をまとめれば、ずばり「納品書テーブル」を作成し、「納品書ID」をオートナンバー型にすればよいでしょう。その他フィールドとしては、納品先として顧客IDが入るようなフィールドでしょうか。複数の「注文」を処理するならば、逆に個々の注文に納品書IDを入れられるようにするなど。

camo-tech
質問者

補足

ご回答ありがとうございます。 お答えの中では、後半の、「複数の注文に納品書IDを」という 事案に相当しますが、ちょっと厳しい感じです。 と申しますのは、1つの納品書で、複数注文を扱いますので、 1つの注文に納品書IDを振るということは、本意から外れて しまうのです。 注文:納品書、=、多:1の関係にあります。 唯一、顧客IDのみ、顧客ID:納品書=1:1ですが、 これをやってしまうと、同じ顧客に納品書を出す際、 いつも同じ納品書番号になってしまうことになります。 ん~。 やはり難しいのでしょうか?

関連するQ&A

  • 【続続】Access2002で連番のついた納品書を出力したい

    1. http://oshiete1.goo.ne.jp/qa5243829.html 2. http://oshiete1.goo.ne.jp/qa5257035.html 上記のように、質問してまいりまして、後一歩まで参りました。 これまでの経緯は下記のとおりです。 1.複数の注文をまとめ、それにユニークな連番を振って納品書を作りたい(これが大元の要望でした) 2.上記質問の中でいただいた回答で、フォームを使って納品書番号をオートナンバーで振ることは成功(私の理解不足で回答者様を振り回してしまいましたが、思うような連番(納品書番号)を自動的に振ることに成功しました) 3.フォームのサブウィンドウ(?)を用いて、納品対象の注文を選択したい(ここでとまっています) テーブルは下記のとおりです。(計4つ) 1.従業員マスタ(データ投入済み) ・従業員コード(テキスト) ・従業員名(テキスト) ・従業員名カナ(テキスト) 2.納品書番号(データはフォームから自動生成) ・納品書番号(オートナンバー) ・納品日付(日付) ・従業員コード(テキスト) 3.注文情報(データ投入済み) ・注文番号(テキスト) ・従業員コード(テキスト) ・商品ID(テキスト) ・数量(数値) ・納品書番号(数値) 4.商品マスタ(データ投入済み) ・商品ID(テキスト) ・商品名(テキスト) ・単価(数値) 以上の4つのテーブルでテストDBを作っています。 上述したとおり、フォームで、 1.新規レコードの作製 2.納品日付入力 3.コンボボックス(従業員名、カナ)をコンボボックスで選択 という手順を踏み、納品書番号が自動的に振られるフォームまで作成できました。(画像添付) 次の段階ですが、フォームの中にサブフォーム(?)を作成し、「どの注文で発生した商品を」納品するのか、注文情報テーブルから選択し、レポートにして打ち出したいのです。 納品書の基本単位は従業員ごとですが、納品がバラバラに行なわれることが多く(例:Aさんが1、2、3と注文したとしても、2、だけ先に納品され、1、3が別の日に納品される)、注文情報から「注文番号」で選択できれば。。。と思っています。 前の質問でもお答えはいただいたのですが、私の知識不足でうまく実現できませんでした。 他に、必要な情報がございましたら提示いたしますので、よろしくお願いします。 何卒よろしくお願いします。

  • ACCESS 宛名ラベル(レポート)の連番の書式を設定したい

    ACCESS初心者です。 「符号」-「連番」順の住所一覧テーブルから、 クエリで「符号」別にわけ、「符号」別に分けたクエリから 「符号」別に宛名ラベルを作っています。(符号は10種類) 2000件ほどの連続番号を振っているので、連番のラベル表記を 『A-0001』のように4桁で統一したいのですが、 テーブルやクエリでは4桁で表示されるのに、 ラベルではうまく表示されません。(1ならA-1となってしまいます) フィールドは、符号と連番は別フィールドで、 連番の書式は、書式設定で4桁の0を入力して設定しています(『0000』) レポートを作成する際に、「符号」と「連番」を連結して 表示させています。 できれば、レポートの設定で上記を実現したいのですが、 どうすればいいのでしょうか? よろしくお願いしますm(_)m

  • Accessのクエリによる集計が出来ない

    Accessのクエリによる集計が出来ない kamuycikapです。 OKWaveで様々な方のアドバイスを頂きながら、慣れないAccessと悪戦苦闘しております。 一昨日、計算したい表を作成する為にOKWaveに質問を載せました。 http://okwave.jp/qa/q5549286.html 無事に上記のアドバイスでリレーションのオプション設定を行い、集計計算したいクエリの結果を表示することが出来ました。 その表を元にして 下記の質問でアドバイス頂いた方法による集計を行おうとしたのですが、集計出来なくて困っています。 http://okwave.jp/qa/q5544785.html データベースの構成とキーは以下のとおりです。 --ここから <データベース構造:リレーションシップ> リレーションシップとテーブルの構成は下記の通りです。 -->がリレーションシップです。 Kがキーになります。 ■テーブルA      ■テーブルB    ■テーブルC    ■テーブルD K納品書コード --> K納品書コード --> K納品書コード  --> K納品書コード 仕入数          K商品コード  --> K商品コード   --> K商品コード                             K商品連番    --> K商品連番                             出品数量        K出品連番                             商品名           発送個数                             色             発送日付                             サイズ                             売値 ※テーブルCからテーブルDへのリレーションオプションを「’テーブルC’の全レコードと’テーブルD’の同じ 結合フィールドのレコードだけを含める。」としています。 <作りたいデータ> 納品書コード、商品コード、商品連番、商品名、色、サイズ、売値、仕入数、出品数量、発送個数、出品在庫数、倉庫在庫 <クエリ> ○グループ  納品書コード、商品コード、商品連番、商品名、色、サイズ、売値、仕入数、出品数量 ○合計(集計)  発送個数 ○出品在庫数(演算)  [出品数量]-[発送個数] ○倉庫在庫(演算)  [仕入数]-[発送個数] <データ状況> テーブルCのデータは約300レコードありますが、そのうち20件ほどしか商品が発送されていない為、テーブルDのデータは20件しかありません。 <望む結果> テーブルCのデータが全て表示され、紐つけられたテーブルDのデータがが存在する場合は、発送個数を表示し出品在個数を演算する。 演算した出品在個数を利用して、倉庫在庫も演算する。 <クエリの実行結果> テーブルCのデータが全て表示され、テーブルDに紐つけられたレコードも表示されるが、テーブルDに入力されている20件のデータが商品連番(テーブルCのフィールド)ごとに集計されない。 --ここまで <目的> お店に出品された商品は、日を分けて少しずつ売れていきます。(一日で全部売れることもありますが....) 従って、出品された商品(テーブルCのデータ)に対して売れていく数(テーブルDの複数のレコード)のデータがぶら下がっている形になります。 このようなデータベースですので、出品した商品が何個売れたかを計算する為には、商品に対する売れた個数を集計(合計)しなければなりません。 <結果> テーブルCの商品連番ごとの発送個数を集計したいのですが、テーブルDの出品連番ごとの集計になっている様子です。 <頂きたいアドバイス> 上記のデータベースとクエリで、テーブルCの商品連番に紐ついたテーブルDに格納されている発送個数の合計値を集計するための方法 以上、識者の方のアドバイスをお願い致します。

  • テーブル作成クエリで作成したテーブルに連番をふりたい

    こんにちは。 ACCESS97を利用しているのですが(OSはWin2000)、 クエリーで作成したテーブルに連番を振ることは出来ますか? テーブル作成クエリーで5フィールドのテーブルを作成するようにしているのですが、できあがったテーブルの先頭フィールドに1から連番をふりたいのです(計6フィールドのテーブルをクエリーから作成したい)。 イメージとしては、デザインビューでテーブルを作成したときに、1フィールド目にオートナンバー型を利用するのと同じ感じで。。 方法が思いつきません。。 よい方法がありましたらご協力をお願い致します

  • クエリで自動連番のふり方

     次のようなテーブル(T_連番)が元となったクエリ(Q_連番)があります。 テーブル:T_連番  氏名  あああ あああ  いいい いいい  ううう ううう  えええ えええ  いうえ いうえ  あかさ あかさ  えおか えおか クエリ:Q_連番  氏名  あああ あああ  いいい いいい  ううう ううう  えええ えええ  いうえ いうえ  あかさ あかさ  えおか えおか  Q_連番では、T_連番をそのままフィールドに入れていますので、 同じ並びで表示となります。この同じ並びとなったものに、下記のように自動で連番を ふりたいと考えています。 クエリ:Q_連番  氏名        連番  あああ あああ   1  いいい いいい   2  ううう ううう   3  えええ えええ   4  いうえ いうえ   5  あかさ あかさ   6  えおか えおか   7  インターネットで色々検索しましたが分かりませんでしたので、ご教示をお願いいたします。

  • 特定条件での連番の振り方を教えて下さい

    以下のようなテーブルがあります。 納品データ 注文番号 売上番号 連番 商品名 11111    2      1   さしすせそ 11111    2      2   たちつてと  11111    3      1   なにぬねの 11111    4      1   はひふへほ 売上データ(既存データ) 注文番号 売上番号 連番 商品名 11111    1       1   あいうえお 11111    1       2   かきくけこ 注文番号は注文毎に付与される番号 売上番号は発送毎に付与される番号 連番は売上番号毎に付与される連番 毎回 納品データを売上データに取り込みます。 連番に関しては、 納品データと売上データで連番は連動しておらず、 売上データに納品データと同等の注文番号があれば、 注文番号の最大連番数を+1した番号で取り込みます。 更新後、売上データは、 注文番号 売上番号 連番 商品名 11111    1       1   あいうえお(既存データ) 11111    1       2   かきくけこ(既存データ) 11111    2       3   さしすせそ 11111    2       4   たちつてと 11111    4       5   なにぬねの 11111    5       6   はひふへほ としたいのです。 SELECT (SELECT 納品データ.連番+(SELECT NVL(MAX(売上データ.連番),0) FROM 売上データ WHERE 売上データ.注文番号 = 納品データ.注文番号) AS 連番) FROM 納品データ で売上データの連番+1はできたのですが、 売上番号が違う場合は、連番が1になるパターンとなり、 納品データ 注文番号 売上番号 連番 商品名 11111    2       1   さしすせそ 11111    2       2   たちつてと  11111    3       1   なにぬねの ← 11111    4       1   はひふへほ ← 上記SQLですと、 更新後、売上データは、 注文番号 売上番号 連番 商品名 11111    1       1   あいうえお(既存データ) 11111    1       2   かきくけこ(既存データ) 11111    2       3   さしすせそ 11111    2       4   たちつてと 11111    4       3   なにぬねの ← 5にしたい 11111    5       3   はひふへほ ← 6にしたい となり、連番となりません。 どのようにSQLを書けばよいのか、困っています。 どうか、ご教示お願い致します。

  • Accessでレポートを作成したい

    Access2000を使っています。 ウィザードを使ってレポートを作成しようとしています。 レポート作成用に新規クエリを作り、レポート作成ウィザードの「フィールドの選択」で新しく作ったクエリを指定し、そこからすべてのフィールドを選択しましたが、印刷形式を選択したところで、「アプリケーション定義またはオブジェクト定義のエラーです」というメッセージが出ます。 クエリの作り方が間違っているのでしょうか。それともクエリの中のテーブル間の結合がうまくいっていないとか…。 「フィールドの選択」では、レポートで表示させたいフィールドだけを選択すればいいんですよね? そのためのクエリも、同じくレポートで表示するフィールドだけを入れればいいんですよね。 そもそも「アプリケーション定義またはオブジェクト定義のエラー」って何なんでしょう…。 初心者ですがよろしくお願いします。

  • accessのクエリで入力が不可能…

    【テーブルA】 フィールド1〔数値型〕 フィールド2〔テキスト型〕 フィールド3〔テキスト型〕 フィールド4〔数値型〕 【テーブルB】 フィールド1〔数値型〕 フィールド2〔テキスト型〕 フィールド3〔数値型〕 フィールド4〔テキスト型〕 となっています。 両方のテーブルを使い、クエリを作成しました。 リレーションが、テーブルAのフィールド1と、テーブルBのフィールド3に設定してあります。 このようにして作成したクエリでデータの入力ができません。 なぜでしょうか? Access2000です。

  • access2003 レポートで教えてください。

    従業員管理のデータベースを作っています。クエリからレポートを作成しました。 フィールド1は従業員番号欄になっており正社員は1から連番で番号が入力され、パートさんは空欄になっています。フィールド2は退職欄になっており正社員パート問わず、退職者は退職年月日が入力され、在籍者は空欄になっています。レポートで印刷するとき、正社員の在籍者、パートの在籍者、正社員の退職者、パートの退職者の4グループに分けて印刷したいのです。いろいろ試してみましたが、うまくいきません。あまり専門用語もわかりませんので。どなたかわかりやすく教えてくだされば、助かります。

  • SQLSERVER 連番更新について

    <環境>SQLSERVER 一時ワークテーブルのフィールドに指定した番号以降の連番を更新したいのですが、 クエリーで更新する方法はありますか? 例) <更新前のテーブル> コード 名前  連番  001  AAA  null 002  BBB  null 003  CCC  null <更新後のテーブル> 15以降の連番を更新する コード 名前  連番  001  AAA   15 002  BBB   16 003  CCC   17