アプリ版:「スタンプのみでお礼する」機能のリリースについて

ACCESSで明細を印刷する方法を教えて下さい。

利用環境はWindowsXP、ACCESSは2002 SP3です。

5000人程の利用者名データと、
利用者毎の利用履歴データ(1人あたり1~200件)が入ったテーブルがあります。

この度、各利用者宛てに明細を送ることになりました。

印刷する用紙と内容が決められていて、
A4縦の用紙の左上に送付先宛名と総ページ数を印刷する欄、
中段に明細行(15行まで)、
下段に中段と全く同じ明細行(お客様控え用)を印刷する欄を設けることになっています。

レポートやフォーム、サブレポート等を使えば実現できるのではないかと思っていますが、
Accessはテーブルと選択クエリーしか触ったことがなかく、方法が分からずに困っています。

実現したいことは上記の通り、
・用紙の左上には「宛名」を表示。明細が15行を超える人の場合、「現ページ/総ページ」も表示したい
・1件しか利用履歴が無い場合でも、人が変わればページを変えたい
・利用明細行は15行までとして、同じ人でも16行目以降は次ページにしたい(次ページで再び「宛名」を印字)
・明細行は全く同じものを上下に2個(最大15行×2になります)配置したい

です。

人ごとにページを変える方法は何とかできましたが、明細行の改ページが上手くいきません。
明細行のあるサブレポートの表示枠を小さくすると、表示を15行に抑えることはできますが、
16行目以降は印刷されず、次の人になってしまいます。
枠のサイズを変える以外にページを変える方法はありますか?

うまく説明できずに申し訳ありませんが、急に指示されたため、困っているところです。
なにとぞよろしくお願いいたします。

A 回答 (5件)

前回メニュー画面の添付が出来ていなかったのであらためて添付します。


この現象はたまに発生します。 何故なんでしょうね

前回説明が足らなかったようなのであらためて
>15行分の高さのサブレポートを(2段分)用意するということでしょうか。
>下段に中段と全く同じ明細行(お客様控え用)を印刷する欄を設けることになっています。

顧客抽出TBLを基に主レポート(利用履歴RPT)
利用履歴抽出TBLを基に副レポート(利用履歴RPTSUB、利用履歴RPTSUB副)
・利用履歴RPTSUB副は利用履歴RPTSUB をコピーします。

利用履歴RPT
・ページヘッダーに送付先宛名とページ/総ページ数
ここでのページは15行単位で分割するためブロック単位でリセットされます。
最初のブロックの総ページ数は送付対象の顧客数になります
詳細欄に
・利用明細の見出しとメニューのform!メニュー!ページNo.
・利用履歴RPTSUB
・お客様控えの見出しとメニューのform!メニュー!ページNo.
・利用履歴RPTSUB副
お客様単位の総ページ数を印刷するには
顧客TBLにご利用回数フィールドを追加しこれの1/15(切上げ)を印字
「ACCESSで明細を印刷する方法を教えて」の回答画像5
    • good
    • 0

お待たせしました。


サイトのご紹介有難うございます。これから見させていただきます。

>15行分の高さのサブレポートを(2段分)用意するということでしょうか。
>>下段に中段と全く同じ明細行(お客様控え用)を印刷する欄を設けることになっています。
中段の御社用と下段のお客様控え用です

> 明細に行No.が付いていれば印字対象を15以下と15超にする
> 明細に行No.が付いていなければ明細テーブルに印刷コントロールのフィールドを追加する
利用テーブルに「ご利用回数」といったフィールドを増やして
1.今までのデータはエクセルにエキスポートして、メンテして履歴IDとご利用回数だけの
テーブルにインポートし、これで利用履歴テーブルをUPDATEする
2.新しいデータは履歴登録の仕組みに組み込む

さて本題ですが
少し仕掛けをして何とかなりそうです。
ただデータを分割処理するので後で名寄せが必要です。

1.利用履歴を行No.で分割保存する利用履歴抽出TBL 追加
  項目は利用履歴IDを外して他は同じ項目で主キー無し
2.利用履歴抽出TBLに対応する顧客抽出TBL
  項目は顧客TBLで顧客IDの主キー設定を外し
  、顧客IDのデーター型を長整数型 インデックスに重複なし
3.メインレポートの基になるテーブルを顧客抽出TBL
  サブレポート1、サブレポート2の元になるテーブルを利用履歴抽出TBL
4.レポートの起動はメニューフォーム上のレポート名のクリックイベントで
 データーを分割抽出してから起動する
5.その他 テーブルの項目名は適当に考えました。

*メインフォームに配置するボックス
・起動レポート名 ラベル
・ページNo.、開始No.、終了No. テキストボックス
これで起動レポート名をクリックする都度15行単位で分割してレポートして
ページNo.がカウントアップし次のクリックを待ちます。

*メインフォームのコード
Option Compare Database
Option Explicit
Private Sub Form_Load()
ページNo. = 1
End Sub
Private Sub 利用履歴発行_Click()
利用履歴発行RTN
ページNo. = ページNo. + 1
End Sub

Private Sub 利用履歴発行RTN()
終了No. = ページNo. * 15
開始No. = 終了No. - 14
DoCmd.SetWarnings False
DoCmd.RunSQL ("delete from 履歴抽出TBL ;")
DoCmd.RunSQL ("insert into 履歴抽出TBL(顧客ID,行No.,利用日,利用内容) " _
& " select 顧客ID,行No.,利用日,利用内容 from 履歴TBL where 行No. >= 開始No. and 行No. <= 終了No.; ")

DoCmd.RunSQL ("delete from 顧客抽出TBL ;")
DoCmd.RunSQL ("insert into 顧客抽出TBL(顧客ID) select 顧客ID from 履歴抽出TBL ; ")
DoCmd.RunSQL ("Update 顧客抽出TBL Inner Join 顧客TBL On 顧客抽出TBL.顧客ID = 顧客TBL.顧客ID " _
& "set 顧客抽出TBL.顧客名=顧客TBL.顧客名,顧客抽出TBL.郵便番号=顧客TBL.郵便番号 " _
& " ,顧客抽出TBL.都道府県=顧客TBL.都道府県,顧客抽出TBL.市区町村=顧客TBL.市区町村; ")
DoCmd.SetWarnings True
DoCmd.OpenReport "利用履歴RPT", acViewPreview
End Sub

動作確認しました。
ここの説明はきりがありませんので省かせていただきます。
ある程度ご理解いただけたらこのURLを付けて新規に質問されると
他の人の別のアドバイスも頂けるのでは
    • good
    • 0

こんばんは、色々勉強させてもらってます。



>「任意の行で改ページをしたい」
この意味が理解できなくて飛ばしました。 何か条件があるだろうと
15行を越えると次ページと理解してよろしいですね

サブレポート(主レポート内)のプロパティーの書式タグの下の方に
印刷時拡張、印刷時縮小があります。 規定値は両方とも「はい」
このときは行数によってフレームが伸縮します。

今回は印刷時縮小は「いいえ」ですね

1)印刷時拡張「はい」のままにするとフレームが伸びて全ての明細が印字されます。
控えのサブレポートがページ内に収まらないときはサブレポート単位で次ページへ移ります。

2)印刷時拡張「いいえ」にするとフレームに入らない明細は無視されます。
サブレポートのフレーム高さを15行分にして
明細の印字対象を二つに分けて印刷しては
明細に行No.が付いていれば印字対象を15以下と15超にする

明細に行No.が付いていなければ明細テーブルに印刷コントロールのフィールドを追加する
「ACCESSで明細を印刷する方法を教えて」の回答画像3
    • good
    • 0
この回答へのお礼

shinkamiさん、こんばんは。

何度もありがとうございます。

> この意味が理解できなくて飛ばしました。

すみません、私の説明が下手でした。


改ページは「顧客別」「行数別」に発生させようと思っています。


同じ「顧客」でも15行を超える利用履歴をお持ちのお客様は、
1行目から15行目はでは1ページ目に印字。
16行目から30行目までを2ページ目に印字。
31行目からは3ページ目に。といった具合です。

顧客が「Aさん」から「Bさん」に変わったら、そのタイミングでまた改ページ。


「Aさん」が35行、「Bさん」が24行の明細を持っていたとしたら、
「Aさん」は4ページ(4ページ目は5行のみ)、「Bさん」は3ページ(3ページ目は4行のみ)
としたいと考えています。

社名やロゴの入った用紙が既に印刷されていて、15行分の罫線が2段分(発送用と返送用)用意されている用紙なのです。
15行分の「空の罫線」が引かれた用紙に、うまく位置を合わせて印字したいのです。


このご回答を頂いたあと、「なるほど」と思い、
http://office.microsoft.com/ja-jp/access-help/HA …
を見てみました。

確かに、「印刷時縮小」は関係がなさそうですね。
無駄な動き(行の削除)を避けるためにも、「いいえ」にしておいたほうがよさそうです。

ただ、「印刷時拡張」が知識不足のため、うまく把握できません。

「印刷時拡張」プロパティを「いいえ」にして、
15行分の高さのサブレポートを(2段分)用意するということでしょうか。


拙いながらも試してみたところ、確かに15行目までの印字になりますが、
次ページは16行目からの印字ではなく、Bさんの1行目から印刷されてしまいます。
(つまり、16行目から35行目が無視される)

もう少しお付き合い頂ければ幸いです。

特に、

> 明細に行No.が付いていれば印字対象を15以下と15超にする
> 明細に行No.が付いていなければ明細テーブルに印刷コントロールのフィールドを追加する

の部分をどう実現したらよいのかがわかりません。
明細テーブルに、顧客ごとの明細に連番を付与して、VBAで制御するということでしょうか?

お時間があるときで結構ですので、
詳しく方法を教えて頂ければ幸甚に存じます。

宜しくお願い致します。

お礼日時:2010/09/20 23:37

こんなの初めてです。


苦し紛れでやりましたので、他にもっとよい方法があるかと思いますが

仕訳伝票テーブルと仕訳明細テーブルで試してみました。

1.仕訳伝票テーブルで単票形式の仕訳伝票レポートを作ります。
2.仕訳明細テーブルで帳票形式の仕訳明細レポートサブを作ります。
3.仕訳伝票レポートの必要な項目を詳細枠に移動します。
4.仕訳明細レポートサブを仕訳伝票レポートのサブとしてサブレポートツールを用いて
  仕訳伝票レポートに2度縦に並べて配置します。
5.サブレポートの項目見出しは表示されませんので、仕訳伝票レポートにラベルを追加します。

※仕訳伝票テーブルと仕訳明細テーブル1:n のリレーション設定し照ります。
色々勉強させていただきました。
「ACCESSで明細を印刷する方法を教えて」の回答画像2
    • good
    • 0
この回答へのお礼

shinkamiさん、ありがとうございます。

大変申し訳ありませんが、ご回答頂いた方法は私でも最初から試しています。
ただしサブレポートでは改ページが制御できません。

「任意の行で改ページをしたい」と言う点については、
「わからない」というご回答ということですね。

お時間を割いて頂きありがとうございました。

お礼日時:2010/09/20 09:29

レポートに関してはトップクラスの実力者 hatena さんのスーパーテクニックです。



明細を持つ伝票とその複写を同じページに2分割して表示する
http://hatenachips.blog34.fc2.com/blog-entry-233 …

ちょこっと修正すれば使えるでしょう。
    • good
    • 0
この回答へのお礼

bonaronさん、こんばんは。ありがとうございます。

現在の知識ではちょっと内容が難しいですが、
今日明日で頑張って理解してみます。

お礼日時:2010/09/19 00:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!