過去の桐井戸端BBS (桐ver.9)
30542 レポート印刷でレコード追い出しをしたい しぼうかん 2005/07/18-21:47
またお知恵をお貸し下さい。

「長文の説明を読むのはちょっとかんべん」という場合は
ファイルをDLして説明3だけを読んで下さい。


説明1
売上台帳をメイン&サブフォーム(伝票形式)で作っています。
得意先名などをメインフォーム(売上台帳ヘッダ.wfm)、
締月・商品・金額などをサブフォーム(売上台帳明細.wfm)
に書く様にしました。

売上台帳明細.wfmに[締月]=4の行が12、[締月]=5の行が10,
[締月]=6の行が6,[締月]=7の行が4,合計32行の明細行が
あるとします。

このデータを明細の繰り返し数が10行のレポートファイル
(売上台帳.rpt)で印刷すると

1頁目には[締月]=4の行が10行印刷され,
2頁目には[締月]=4の行が2行と[締月]=5の行が8行が印刷され、
3頁目には[締月]=5の行が2行と[締月]=6の行が6行が印刷され、
[締月]=7の行が2行印刷され、
4頁目には[締月]=7の行が2行印刷されます。

これを
1頁目には[締月]=4の行が10行印刷され、
2頁目には[締月]=4の行が2行のみ印刷され
3頁目には[締月]=5の行が10行印刷され、
4頁目には[締月]=6の行が6行と[締月]=7の行が4行印刷される
ようにしたいのです。

同じ締月のレコードが明細の繰り返し数を超える場合を
除いて、[締月]が同じ行は頁をまたがずに印刷したいのです。

つまり一覧表印刷でいうと行グループのあふれ改頁に
チェックを入れた場合のような印刷です。

レポート定義にはそういう設定がなさそうなので表に[頁]という項目を作り、
フォームに作った印刷用のコマンドボタンを押した時のイベントで[頁]にその行を印刷したい頁を書き込んで
その[頁]を使って印刷する方法しか考えつきませんでした。

ただそのイベントに書くコマンド文の書き方がよくわかりません。
どういうコマンド文を書けば良いのでしょうか?

サンプルを補完BBSにUPしました。以下の文はUPファイルの説明です。

説明2
投稿文は[得意先]がNECの場合を例に書きました。
[頁]に入力したい値を[希望頁]に手入力してあります。
やりたいことは売上台帳ヘッダ.wfmの"印刷"ボタンを押した時に
[希望頁]の値を自動的に作り出して[頁]に入力出来るイベントの
コマンド文の書き方を教えて頂きたいのです。

説明3
上記の説明で分からない場合は売上台帳明細.tblの一覧印刷に"希望の印刷"という条件名でレポート印刷でやりたい印刷を
登録しておきました。
直接台帳明細.tblを開いて"台帳明細整列"という条件名の整列を掛けた後に"希望の印刷"の印刷プレビューを見てください。
このプレビュー画面のような印刷をレポート印刷でしたいのです。
30543 Re:レポート印刷でレコード追い出し 悲しげ 2005/07/18-23:55
記事番号30542へのコメント
v9で試した結果では、伝票レポートではなく一覧表レポートにすれば
(v9ではレポートで一覧表・伝票の相互変換が可能)お望みのことは難なく可能です。
具体的には、一覧表オブジェクトの「グループの設定」画面から、
例えば小計を[頁]から[締月]に変更し([頁]項目自体が不要となります)、
チェックを「改頁」ではなく「あふれ改頁」に入れます。
これでプレビューした限りでは、全くお望みどおりになっているように見えました。
レポートの種類が一覧表でも可であるならばこれでもよいことになりますが、
どうしても伝票タイプでなければならないと云うのであれば、
それこそ改頁フラグ用作業項目である[頁]項目に、置換または繰り返し処理で、
算定した値を入力して行く方法くらいしか思いつきません。
この値の算定は、結構面倒そう。(^^;)


30551 Re:レポート印刷でレコード追い出し しぼうかん 2005/07/19-18:22
記事番号30543へのコメント
どもっ、悲しげさん、いつもお世話になっています。

以前何かの理由で一覧表形式のレポートを使わなくなっていました。
ですので一覧表レポートで作るという考えはすっぽり抜けていました。
しかし教えて頂いた通りにやってみると非常に簡単に出来ました。

一覧表形式レポートを使わなくなった理由はリファレンスに書かれている
伝票形式レポートとの大きな違い以外の小さな違いだったと思いますが思い出せません。
ただ、今のところ問題は起きていないのでこの方法でやってみます。

どうもありがとうございました。

30562 Re:レポート印刷でレコード追い出し しぼうかん 2005/07/20-14:02
記事番号30551へのコメント
表に[頁]データを持って印刷する場合は可能で、[頁]データを持たないで
一覧表レポートを使って印刷する場合には不可能?な事が見つかりました。

印刷前にフォーム上に表示されている印刷しようとしているレコードが
"何頁に印刷されるのか?"を確認したいのですが・・・

なぜ印刷前に頁を確認したいか、というと見開き印刷をするので奇数頁か
偶数頁かが分からないとプリンターに用紙(市販の穴あき)を差し込む時の
向きが分からないからです。



30587 Re:レポート印刷でレコード追い出し(力技) 悲しげ 2005/07/22-23:44
記事番号30562へのコメント
最近は週末にしか投稿しません(できません)。_| ̄|○

本件、試作してみました。え〜、けっこう力技ふうですが下記の一括処理で何とかお望みの結果は得られると思います。
一部腑に落ちない部分もあるのですが、あとはご自分でチューニングして下さい。
あ、事前に当該表に文字列型項目[フラグ]と数値系項目[件数][tmp1]を
増設しておくことを前提とします。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
var 長整数{&頁=0,&得意先ID="",&締月="",&行番=1,&明細行数=10}
表 "売上台帳明細.tbl"
並べ替え 条件名="台帳明細整列"
置換 [頁]="",[フラグ]="",[件数]="",[tmp1]="" /*これはテスト用*/
置換 [フラグ]=#str([得意先ID])+"_"+#str([締月],2)
行集計 データ行=無効,並べ替え=する \
    ,小計[フラグ]{[フラグ]#項目値,[件数]#件数([締月])}
書き出し 表,"件数$.tbl",{[フラグ],[件数]}
行集計解除
置換 [件数]=#表引き([フラグ],=,"件数$.tbl",[フラグ],[件数])
ファイル削除 "件数$.tbl"
繰り返し( .not #EOF)
 if([得意先ID]<>&得意先ID)
  *&頁=&頁+1,&得意先ID=[得意先ID],&締月=[締月],&行番=1
  &頁=1,&得意先ID=[得意先ID],&締月=[締月],&行番=1
 else
  if([締月]<>&締月)
   &締月=[締月]
   if(&行番+[件数]>&明細行数)
    &頁=&頁+1,&行番=1
   else
    &行番=&行番+1
   end
  else
   *if(&行番>&明細行数) /*←(?_?)*/
   if(&行番=&明細行数)
    &頁=&頁+1,&行番=1
   else
    &行番=&行番+1
   end
  end
 end
 行訂正 [頁]=&頁,[tmp1]=&行番 /*[tmp1]はテスト用*/
 ジャンプ 行番号=+1
繰り返し終了
ジャンプ 行番号=1
表形式編集 ガイド="結果確認"
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

なお、しぼうさんさんが今回、テスト用のデータ込みで質問されているのは、
回答者諸氏への礼儀としてベリーグッドだと思いました。

30591 Re:レポート印刷でレコード追い出し(力技) しぼうかん 2005/07/23-21:37
記事番号30587へのコメント
悲しげさん、返答ありがとうございます。

実は今回はダメだろうと思って"売上台帳ヘッダ.tblと売上台帳明細.tblに
[得意先ID]と[頁]を持つ売上台帳頁.wfm(編集表=売上台帳明細頁.tbl)を追加する。

売上台帳ヘッダ.wfmのサブである売上台帳頁.wfmは[得意先ID]でグループ化、
売上台帳頁.wfmのサブである売上台帳明細.wfmは[頁]でグループ化する。

こういう別方法で問題解決をしている途中でした。

※この方法では自動的に[頁]を入力する事は出来ませんが、
頁ごとに表示される為に現在どの頁に入力中だとか、印刷ボタンを押した時に
どの頁が印刷されるのか?ということは非常に簡単にわかる利点もあります。

※欠点としては他の表とのデータのやりとりが複雑になる事です。


しかし、悲しげさんから思いもよらず回答がありましたので早速試してみました。
しかしまだうまくいっていません。
という訳でテスト結果の報告は月曜ぐらいに出来たらと思っています。

>なお、しぼうさんさんが今回、テスト用のデータ込みで質問されている
>のは、回答者諸氏への礼儀としてベリーグッドだと思いました。

もし自分の説明手法が向上したのなら、これは悲しげさんの厳しいけれど的確な指導の賜です。
百聞は一見にしかずという諺がありますが、下手な文章で説明するより
実際のデータがあった方がわかりやすいだろうし、そして回答者の方が
回答の為のテストをするにも都合が良いだろうと思いファイルUPをしています。

余談
orzとか○| ̄|_とか普及しましたね〜数年後には大辞林とかに乗っていたりしてw←これも
http://www.yomiuri.co.jp/net/column/yougo/
30594 解決しました。 しぼうかん 2005/07/25-20:02
記事番号30591へのコメント
悲しげさんに書いていただいたコマンド文の

>表 "売上台帳明細.tbl"

この次行に

多重化

を追加してうまくいきました。有り難うございました。(^^)v

30627 Re:解決しました。 悲しげ 2005/07/30-09:35
記事番号30594へのコメント
またまた週末のみのコメントです。orz
既に解決済のようですから、殆ど蛇足ですが、

>この次行に
>多重化
>を追加してうまくいきました。

つーことは、ひょっとしてグループ項目の有るフォーム上
でのことだとすれば、
  グループ選択解除
を使ってもうまく行ったかもしれません?

30642 Re:解決しました。 しぼうかん 2005/08/01-18:30
記事番号30627へのコメント
悲しげさんの蛇足には有益な情報がある事が多いので蛇足大歓迎です。

>つーことは、ひょっとしてグループ項目の有るフォーム上
>でのことだとすれば、
>  グループ選択解除
>を使ってもうまく行ったかもしれません?

補完BBSにup済みのフォームでチェックしてみました。
グループ選択解除+グループ選択でもうまくいきましたが、
処理時間がかなり遅かったので今回の処理には多重化の方が
向いているようです。
30646 Re:解決しました。 悲しげ 2005/08/01-20:35
記事番号30642へのコメント
多重化表の方が速いと云うことは、多分に描画系の問題なんでしょうね。

戻る