過去の桐井戸端BBS (桐ver.9)
27573 複数の行のデータを1つのレポートに印刷したい 悩み太郎 2004/09/06-15:52
こんにちは。一週間悩みましたが、答えが出せないのでよろしくお願い致します。
使用しているのは桐ver.9 2004年版です。

テスト結果の表から調査書のレポートを出したいのです。

テストは前期、後期の年2回行い、2年制の生徒は4回テストを行うことになります。
成績データtbl.にテスト結果を入力してあります。

項目   氏名   個人番号 試験番号  科目1 科目2 科目3 ...
    北島三郎   1001   1前    90   80  50 ...
    北島三郎   1001   1後    80   60  70 ...
    北島三郎   1001   2前    60   60  30 ...
    北島三郎   1001   2後    60   50  30 ...

このように一人につき、卒業までに一人4行が入力されます。

複合レポートで、成績データtbl.と生徒名簿tbl.(住所などの基本情報)を組み合わせて印刷しようとしています。

リンクは個人番号で合わせ
単一化条件を 成績データTBL.の一覧表に設定しました。

テキスト1に以下の式を入れました。
#条件選択([試験番号]="1前" .and 80≦[科目1]≦100,"優",[試験番号]="1前" .and 60≦[科目1]≦79,"良",[試験番号]="1前" .and 0≦[科目1]≦59,"可",[試験番号]="1前" .and "","")

↑表したい式は試験番号が"1前"で、且つ、"科目1"が80点から100点だったら"優"を表示しなさい。
60〜79点は"良"、それ以下は"可"と入力。何も表示していなければそのままで。

としたいのです。

テキスト2は
#条件選択([試験番号]="1後" .and 80≦[科目1]≦100,"優",[試験番号]="1後" .and 60≦[科目1]≦79,"良",[試験番号]="1後" .and 0≦[科目1]≦59,"可",[試験番号]="1後" .and "","")

テキスト1の値は出ますがテキスト2の結果がプレビューに出ません。


NO24495やNO13261を参考にしました。
入力した式が間違っているのでしょうか?
27574 Re:複数の行のテスト結果を1つのレポートに出したい うにん 2004/09/06-19:47
記事番号27573へのコメント
>#条件選択([試験番号]="1前" .and 80≦[科目1]≦100,"優",[試験番号]="1
>前" .and 60≦[科目1]≦79,"良",[試験番号]="1前" .and 0≦[科目1]≦5
>9,"可",[試験番号]="1前" .and "","")

こういう書き方は間違いです。
80≦[科目1] .and [科目1]≦100,
のようにしてください。

27575 Re:複数の行のテスト結果を1つのレポートに出したい 悲しげ 2004/09/06-19:53
記事番号27573へのコメント
>9,"可",[試験番号]="1前" .and "","")

ここんところも正しくは

>9,"可",[試験番号]="1前" .and [科目1]="","")

のような気がしますが、条件選択関数では該当しない場合は自動的に未定義を返すので、

>9,"可")

のように後ろを切ってもよいような気がしますし、あるいは

#cond([試験番号]="1前"
   ,#cond(80≦[科目1],"優",60≦[科目1],"良",0≦[科目1],"可")
   )

でもよさそうに思えます。

>テキスト1の値は出ますがテキスト2の結果がプレビューに出ません。

これは個人番号につき「単一化」しているようなので、それで1行
(最初に現れた1行)しか出ないのだと思われます。
単一化判定項目に[試験番号]を加味するとか、あるいは[試験番号]が"1前"と"1後"であるような行
(もしかすると "1"* でも?)を絞り込みするようなやり方なんかも検討してみてはどうでしょう?


27578 Re:複数の行のテスト結果を1つのレポートに出したい 悩み太郎 2004/09/07-09:04
記事番号27574へのコメント
>こういう書き方は間違いです。
>80≦[科目1] .and [科目1]≦100,
>のようにしてください。
>
はい、わかりました。ありがとうございました。
27579 Re:複数の行のテスト結果を1つのレポートに出したい 悩み太郎 2004/09/07-09:48
記事番号27575へのコメント
>#cond([試験番号]="1前"
>   ,#cond(80≦[科目1],"優",60≦[科目1],"良",0≦[科目1],"可")
>   )
>
>でもよさそうに思えます。

これで試したところ、OKでした。
>

しかし....
やはりページは一人につき4枚出ます(1ページは1年の前期、次ページは1年後期の結果、次は2年前期、最後は2年後期)。
単一化判定についてもう少し伺ってよろしいですか?
どうして4枚出るかについては理解しているつもりです。データが一人につき4回出て来るので、そのデータ分が印刷されるのですよね。
それを1枚のレポートにまとめるには

ファイル属性のリンク表 成績データTBL.「表の操作」の設定の単一化条件に個人番号だけの抽出を設定。
成績結果が載っている一覧表(成績データTBL.) 「表の操作」の設定−何もしない

上記のように変えてみたのですが、上手くいきません。
この設定ではいけないのでしょうか?

以前佐田さんが書かれた
●リンク表を単一化する意味
レポートのリンク表とオブジェクトの対象表は、必ずしも同じ表である必要はありません。
しかし同じ表にする事もできます。
売上明細の様な表をレポートのリンク表と一覧表オブジェクトの対象表に設定するケースを考えてみます。
この売上明細は、同じ顧客のデータが複数含まれています。
従って、この表をそのままレポートのリンク表に設定すると、
顧客Aのデータが複数回出て来るので、同じものが出現数だけ印刷されてしまいます。
売上明細から顧客名だけを抽出して単一化した表をリンク表に設定すれば目的通りになるわけですが、
同じ操作を行うのが、「表の操作」の設定です。
この場合で言えば、レポートのリンク表の操作には、単一化条件を設定しておく事で、
リンク表が顧客名で単一化されます。
これで、顧客1件あたり1枚の印刷ができるわけです。

これを理解したいのですが、自分の例にあてはめると機能しません。

>これは個人番号につき「単一化」しているようなので、それで1行
>(最初に現れた1行)しか出ないのだと思われます。
>単一化判定項目に[試験番号]を加味するとか、

そうすると、一人1枚のレポートは出るのですが、1年後期から先のデータが出ません(テキスト部分)。

あるいは[試験番号]
>が"1前"と"1後"であるような行(もしかすると "1"* でも?)を絞
>り込みするようなやり方なんかも検討してみてはどうでしょう?

これはリンク表と一覧表のどちらに設定すれば良いのでしょう?

相変わらず、つたない表現しかできなくて情けないのですが、よろしくお願い致します。

27582 Re:複数の行のテスト結果を1つのレポートに出したい 佐田 守弘 2004/09/07-18:56
記事番号27579へのコメント
悩み太郎さん

レポートがどの様な形であるかを理解しないと正しい事は言えないのですが、ここでは仮に複合レポート形式になっていて、
レポートのリンク表と個人の4期の成績を印刷する一覧表の対象表とも「成績データ.tbl」に設定されていると仮定します。

レポートのリンク表の方は、個人番号で単一化します。また一覧表オブジェクトとのリンク管径も個人番号で設定します。
これで1枚だけの印刷になるはずだと思うのですが。
(もしならなければ、書かれていないどこかに何らかのミスがあろうかと思います。)

あるいはレポートのリンク表には、生徒名簿.tblを設定する方法も考えられます。この場合には、
予め印刷対象の生徒を絞り込む操作が必要です。

別解

この種の課題は、表データの持ち方から様々な方法があります。
その1つとして期別の成績を1つずつの表にする方法です。

生徒名簿を対象としたレポート(単票でも可能)を作ります。成績や評定は、
個人番号で期別の成績データから表引きする形で印刷できます。

あるいは、生徒名簿と、4期の成績とを結合し、生徒1人について各期の成績やその他の情報を横並べにした表を作り出します。
これを単票レポートで印刷するのも1つの方法です。

佐田守弘(KS-00119)
27584 Re:複数の行のテスト結果を1つのレポートに出したい 悲しげ 2004/09/07-20:57
記事番号27579へのコメント
う〜ん、やろうとしている意図がよく判りませんが、もしかして

>複合レポートで、成績データtbl.と生徒名簿tbl.(住所などの基本情報)
>を組み合わせて印刷しようとしています。

と仰っている割には、ひょっとして生徒名簿.tblと成績データ.tblの複合ではなく、
成績データ.tblと成績データ.tblの複合レポートにしようとしたりはしませんか?
もしそうだとしたら、複合レポートではなく、成績データ.tblだけの
一覧表レポートのみで作る方が、超簡単なような(少なくとも単一化や
リンク指定で悩む必要が減るような)気がしないでもありません。

27586 Re:複数の行のテスト結果を1つのレポートに出したい 今村 誠 2004/09/07-23:30
記事番号27584へのコメント
悲しげさんこんにちは
>もしそうだとしたら、複合レポートではなく、成績データ.tblだけの
>一覧表レポートのみで作る方が、超簡単なような(少なくとも単一化
>やリンク指定で悩む必要が減るような)気がしないでもありません。
↑のサンプルを作ってみました。
桐の成績レポートのままですので不整合な部分もあります。

サンプルをアップしました。
フォームから印刷します。

27595 Re:複数の行のテスト結果を1つのレポートに出したい 悩み太郎 2004/09/08-19:14
記事番号27584へのコメント
みなさん、アドバイスありがとうございました。言うのは恥ずかしいのですが、自分の間違いが判明致しました。
 データ行の横並びに結果を貼り付けようとしておりました。もちろん、一人につき4枚出てきますよね。

 D |科目1(ラベル) | テキスト1 |  テキスト2 | テキスト3
              ↓
            ここに#cond([試験番号]="1前" ,#cond(80≦[公衛値],"優",60≦[公衛値],"良",0≦[公衛値],"可"))

この行の下には他の科目が並ぶ。



今回、質問のために、リンク表も成績データ.tblにしておりましたが、実際はリンク表が生徒名簿.tblで成績データや
他のいくつかの表(出席数など)も複合しております。
今までは試験ごと、クラスごとに担任が表を作ってレポートの中で組み合わせをしていましたが、
共通で、尚且つ、少ない表で生徒情報を管理したいと思ったのです(情報漏れを防ぐためにも)。

佐田先生の別解でやることにしました。

(生徒名簿と、4期の成績とを結合し、生徒1人について各期の成績やその他の情報を横並べにした
表を作り出します。これを単票レポートで)...という解決法。表を大きくすることばかり考え、
項目数が多くなっていやだな〜と思っていましたが結合すればいいのですもんね。相変わらず、考えの視野が狭いのです。

お忙しい中、お付き合い頂き、感謝しています。また寄らせていただくので、
頭の悪さに呆れられないよう、よ〜く考えてから投稿いたします。

戻る