過去の桐井戸端BBS (桐ver.8)
5974 レポートで変数による項目名を使いたい bakutatu 2000/05/10-20:11
一括処理を使って一覧表形式レポートの印刷をしています。
複数あったレポートを一つにまとめようとして、
TBLにある項目名[国語T]を、
一括処理で文字列変数に組み込み、
代入 &科目="国語T"
それを一覧表形式レポートの項目名として使いたいのですが、
[&科目]では「未定義の項目名があります」となってしまいます。

説明不足の点があれば、おっしゃって下さい
5976 Re:レポートで変数による項目名を使いたい 宮城 2000/05/10-20:34
記事番号5974へのコメント
bakutatuさん、こんにちは。

固有変数で宣言されているんですね? (でないと代入時に落ちてるはず。)

気になるのはここ。

>[&科目]では「未定義の項目名があります」となってしまいます。

[]がついてる意味なのですが。テキストボックスのテキストタブ→ソースに

&科目

ではなくて、

[&科目]

とされているのですか? なら[]が犯人と思われますが。

5978 Re:レポートで変数による項目名を使いたい 悲しげ 2000/05/10-20:44
記事番号5974へのコメント
どもっ、bakutatuさん、
もしかしてこういうことでしょうか?

国語.TBLでは[国語][点数]……のような項目構成、
英語.TBLでは[英語][点数]……のような項目構成、
数学.TBLでは[数学][点数]……のような項目構成、

これらを今までは個々のrptで印刷させていたが、今度はこれらをひとつのrptで印刷させてしまいたい。
ついては、rptの定義において、項目テキストオブジェクトの項目名ソースを変数で指定できたらいい。
こう云う状況だと仮定してコメントします。
外していたら以下は無視して下さい。

う〜ん、これは多分無理だと思いますし、baktaruさんが実際にお試してになって駄目だったのなら、
きっとできないんでしょう。
v8では、rptはwfmと違ってオブジェクト操作とかは使えませんですしね(v10とかで使えるようになるかどうかは不明)。
とすれば、私なら、このような場合、次のように試してみると思います。
まず共用できる作業表を用意します。
各科目名のところは[科目]と仮称しておきます。
この表に印刷させたい表を読み込ませます。
対応項目は[科目]vs[国語]等とさせます。
rptは、この作業表を印刷対象表とします。
で、一覧表rptの項目名に相当する行(項目行ではありません)、
つまりヘッダ部は変数のテキストで設定することができますから、
ここを&科目とかすれば、印刷時には(&科目="国語"であれば)項目名も「国語」
と出力されるはずです。
5980 変数で項目名を指定するには 佐田 守弘 2000/05/10-22:49
記事番号5974へのコメント
bakutatuさん

まず始めに概論です。
●項目名の様々な指定方法
項目名は、次の3つの記述方法があります。
@項目名を直接文字列で記述する方法(例:[国語T])
 これは一般的な方法で、どの様な場面でも使えます。
A文字列型変数で指定する方法(例:&科目)
 例えば&科目="国語T"と項目名を表す文字列を変数に代入しておき、
 上記のように変数名だけで指定します。[]は付けません。
B項目番号で指定する方法(例:10)
 番号で指定すると、表定義画面で上から数えてその順位の項目を指定できます。
この場合も数字だけを記述します。整数型変数が使えるかは確認していません。

ただし、AとBが使える場所は限られています。
例えば、行訂正コマンドの左辺、読み込み、書き出しコマンドなど、
「そこに記述した文字列や番号が、項目名以外にあり得ない」
といった場合に限定されます。
行訂正コマンドでも、右辺に書けば、単なる文字列や数値であると解釈できるので、
この様な場所では、変数や項目番号で項目値を指定することはできません。
レポートのオブジェクトのソースにつても同様で、変数あるいは番号を記述しても、
単なる文字列あるいは数値として解釈されてしまいますから、この方法での指定はできません。

●項目番号や項目値を帰す関数を使えば
試してないのですが、「#項目番号」関数と「#項目属性」関数を使う方法があると思います。
試してみて下さい。
仮に[国語T]が10番目の項目だとします。そして&科目="国語T"が代入されているとします。
#項目番号(&科目)→ [国語T]の項目番号10を返す
#項目属性(#項目番号(&科目),0) → 現在行の[国語T]の値を返す
になります。

5981 レポートで変数による項目名を使いたい tomo 2000/05/10-22:59
記事番号5974へのコメント
bakutatuさん、こん**は 高校で成績処理をしています。
レポート出力の目的は何でしょうか?
また、どの程度そのデータを蓄積しますか?

目的1.科目担当者が年間を通した成績を蓄積するもの
 各定期考査の点数や各学期の成績、欠課時間数などを
 クラスごとに記録しておくもの
  例えば1年1組の現代社会について、
  縦に生徒が並び、
  横には各時期ごとの点数、成績、欠課時間数が並ぶ
 これを担任に渡し(手書きならば)転記する
目的2.クラス担任が各学期の成績一覧表として持つもの
 各学期末にクラス担任の通知票記載用に
 そのクラスの全科目・講座の成績等をまとめたもの
  例えば1年1組の1学期末について
  縦に生徒が並び、
  横に全科目・講座の成績や成績の平均、クラス内順位等が並ぶ
 これを教務へ提出(し校長印まで)

レポートは目的1、2両方あると思いますが、
本校では、目的2のイメージでTBLを作っているので、
目的1の方は結合表(参照のみ)を使い、そこで項目名を揃えて
レポートは一つで済ませています。
5982 Re:レポートで変数による項目名を使いたい tomo 2000/05/10-23:13
記事番号5981へのコメント
データ蓄積の時間幅について書くのを忘れました
(タイトルのRe:も付いてません。誤解を生じさせて済みません)

蓄積1.その都度順位をつけたりする
蓄積2.通知票印刷など年度内の流用
蓄積3.入学から卒業まで進学・就職の調査書に流用
蓄積4.卒業後の成績証明書などでも流用

うちは蓄積3段階です。

TBLの項目名の設定方法などは
この時間幅を考えないと後々混乱してきます
(うちは混乱してる最中です)

いかがですか?

5983 Re:レポートで変数による項目名を使いたい bonito 2000/05/11-01:35
記事番号5974へのコメント
え〜、?? みなさん難しく考えすぎじゃないかしら?

>[&科目]では「未定義の項目名があります」となってしまいます。

そこには(どこかは知らねど、レポートのテキストオブジェクト)
#条件選択(&科目="国語T",[国語T],&科目="国語W",[国語W]・・
・・・延々続くので以下略・・・・)と書けばいいんじゃないの?

ついでに項目名相当ラベルもテキストにして
#条件選択(&科目="国語T","現代国語",&科目="国語W","古典"・・
・・・延々続くので以下略・・・・)

こんなんじゃ駄目なの…?

5986 Re:レポートで変数による項目名を使いたい bakutatu 2000/05/11-07:30
記事番号5976へのコメント
コメントありがとうございます。

変数宣言 固有, 文字列{&科目}

としてあります。

確かに
テキストボックスのテキストタブソースに[&科目]と
入れると、前記のエラーメッセージがでてきます。

テキストボックスのテキストタブソースに &科目 とすると
項目のデータではなく、項目名そのものがレコード上に
羅列されてしまうだけですよね。 

一覧表形式レポートのページフッダ部分では、
変数値がちゃんと返されていますが、
明細行だとだめなのです。

5987 Re:変数で項目名を指定するには bakutatu 2000/05/11-07:37
記事番号5980へのコメント
コメントありがとうございます。

>A文字列型変数で指定する方法(例:&科目)
> 例えば&科目="国語T"と項目名を表す文字列を変数に代入しておき、
> 上記のように変数名だけで指定します。[]は付けません。

確かに、ページヘッダ部分では、&科目で科目名が返っています。
また、一括処理でも
表示幅 {&科目,&A}
も返っています。

>●項目番号や項目値を帰す関数を使えば
>試してないのですが、「#項目番号」関数と「#項目属性」関数を使う方法があ
>ると思います。試してみて下さい。
>仮に[国語T]が10番目の項目だとします。そして&科目="国語T"が代入されて
>いるとします。
>#項目番号(&科目)→ [国語T]の項目番号10を返す
>#項目属性(#項目番号(&科目),0) → 現在行の[国語T]の値を返す
>になります。

この方法を試してみようと思います。
後日報告したいと思います。

5988 Re:レポートで変数による項目名を使いたい bakutatu 2000/05/11-07:59
記事番号5981へのコメント
コメントありがとうございます。

私も高校で成績処理をしています。

全学年全学期全科目の成績・出欠を1つのTBLにしてあります。

入力には、学期ごとの一括処理で、教科担当が学年→科目→組をメニューで
引っ張り出して入力します。
入力が終わると、そのまま一括処理でレポート印刷されます。
これを成績原票という形でレポート出力していますが、
昨年までは、各科目ごとにレポートを作ってありました。
国語Tは国語T.RPTというように。
こちらは作業は大変でしたが、ほとんど問題なくできました。

でも、年度が替わるごとに選択科目が変わったり、
選択科目の組み合わせが変わったりするので、
修正するレポートの数が馬鹿になりません。

そこで、必修科目については1つのレポート「原票.RPT」にまとめようと
いうことになったのです。

前述したように、メニューで科目を選んだ時点で、
レポート印刷 原票.RPT として
項目名を &科目 と代入して、
明細行に項目データ、集計行に合計、件数、平均を出力させたいのです。

ページヘッダ部分の科目名には &科目 でちゃんと返っていますが、
明細行は &科目 を項目名として認識?してもらえないのです。

余談ですが、成績原票とクラスの出欠原票
クラスの成績一覧表、成績会議資料、通知票の出力まで
一括処理を組んであります。

5989 Re:レポートで変数による項目名を使いたい 宮城 2000/05/11-09:54
記事番号5986へのコメント
>テキストボックスのテキストタブソースに &科目 とすると
>項目のデータではなく、項目名そのものがレコード上に
>羅列されてしまうだけですよね。 

ありゃ? そんなことはないはずなんですが。ちゃんと値がでるはずですよ。

bonitoさんも書いてますが、バージョンはなんなのでしょう?
Win桐と思ってますが、なんか変ですね。

5991 Re:レポートで変数による項目名を使いたい bakutatu 2000/05/11-11:13
記事番号5989へのコメント
説明不足でした。

一覧表形式レポートの明細行のテキストボックスの
テキストタブソースに &科目 とすると
項目のデータではなく、項目名そのものがレコード上に
羅列されてしまうのです。

&科目に国語Tが代入されていますので、
一覧表のレコードの国語Tの成績が出力されるべき所に
国語T
国語T
国語T
国語T
国語T
となってしまうのです。

テキストタブソースに [国語T] とすれば
成績が出力されます。

バージョンはWIN桐V8です。

5996 Re:レポートで変数による項目名を使いたい 悲しげ 2000/05/11-13:27
記事番号5983へのコメント
#5991の記述によると、どうやら#5978での私の読みが当たったよう
ですね。#5978にだけコメントがついてないのは、おそらく読んで
ないからと思われますが、ちょっと淋しいです。
お名前を「baktaru」と間違ったからかな?(^^;)

と云う訳で、結論はbonitoさんの#5893の方法でグーだと思います。
確かに難しく考え過ぎていました。(^^;)
ついでに、念のためちょっとだけ補足。

>そこには(どこかは知らねど、レポートのテキストオブジェクト)
>#条件選択(&科目="国語T",[国語T],&科目="国語W",[国語W]・・
>・・・延々続くので以下略・・・・)と書けばいいんじゃないの?

ここで云うテキストオブジェクトとは、一覧表オブジェクト内の、
項目値に相当するテキストオブジェクトの「ソース」です。

>ついでに項目名相当ラベルもテキストにして
>#条件選択(&科目="国語T","現代国語",&科目="国語W","古典"・・
>・・・延々続くので以下略・・・・)

この時、私は時々やってしまうのですが、ラベルオブジェクトをテキストオブジェクトに
変更するのを忘れると、計算式がそのまんま印刷されてしまったりしますので、ご注意を。(^^;)

5997 Re:レポートで変数による項目名を使いたい bakutatu 2000/05/11-13:52
記事番号5996へのコメント
コメントありがとうございます。

#5978を読ませてもらったのですが、ちょっと私には難しくて
なんと返事をしたらよいのか分からなかったのです。

一覧表レポートのページヘッダ部分ではちゃんと変数が返されています。
科目名のところに &科目 で 国語T と出力されています。

ところが、明細行ではうまくできなかったのです。

そこで、佐田さんの#5980の

>#項目番号(&科目)→ [国語T]の項目番号10を返す
>#項目属性(#項目番号(&科目),0) → 現在行の[国語T]の値を返す

で試したところ、明細行は出力することができました。

でも、集計行(グループフッタ)での合計、件数、平均は
やはりだめなようです。


5998 Re:変数で項目名を指定するには bakutatu 2000/05/11-13:57
記事番号5980へのコメント
佐田 守弘さん ありがとうございました。

>#項目番号(&科目)→ [国語T]の項目番号10を返す
>#項目属性(#項目番号(&科目),0) → 現在行の[国語T]の値を返す
>になります。

これで明細行に項目データが出力されました。
一歩前進です。

今度は、そのグループフッタ部分の集計オブジェクトでの
#合計、#件数、#平均の引数としては使えないようです。
良い方法があったらご伝授下さい。
6000 Re:レポートで変数による項目名を使いたい bonito 2000/05/11-14:51
記事番号5997へのコメント
悲しげさんいつも慰めの言葉をかけていただき恐縮です。
bakutatuさん、こんにちは。

ちょっと面倒かもしれませんが
>#条件選択(&科目="国語T",[国語T],・・・・・・)
も試してみて下さい。

この方法なら集計も
#条件選択(&科目="国語T",#合計([国語T])\
     ,&科目="国語W",#合計([国語W])・・・・)
と記述出来る筈です。
6003 Re:レポートで変数による項目名を使いたい bakutatu 2000/05/11-18:45
記事番号6000へのコメント
bonitoさん
コメントありがとうございます。

>>#条件選択(&科目="国語T",[国語T],・・・・・・)
>
>#条件選択(&科目="国語T",#合計([国語T])\
>     ,&科目="国語W",#合計([国語W])・・・・)

2つの方法とも試させていただきます。

6013 Re:レポートで変数による項目名を使いたい 佐田 守弘 2000/05/12-00:20
記事番号5997へのコメント
bakutatuさん
グループフッタがあったんですね。
明細行であれば、処理対象行がありますから、#項目属性関数で項目値を参照
することが可能ですが、グループフッタでは不可能です。従って、この方法は
使えません。

●ヘッダ部
まずヘッダ部に、以下の計算式を設定したテキストオブジェクトを作って下さい。
印刷するつもりはないので、どこの場所でもよく、また小さくても構いません。
 #計算(#代入(&件数,0),#代入(&合計,0),"")
この計算式の意味は、組込変数&件数と&合計に0を入れてリセットさせます。

●明細部
前回伝えた計算式の代りに、
 #計算(#代入(&秒,#項目属性(#項目番号(&科目),0))
    ,#代入(&合計,&合計+&秒)
    ,#代入(&件数,&件数+1)
    ,&秒)
として下さい。
これで、明細部の印刷が終わったところで、&件数には、明細部のレコード数、&合計には、
&科目で指定した科目の得点の合計が代入されているはずです。

意味は、#項目属性関数で求めた得点をまず&秒に代入しておきます。
次いで、&件数は1を加え、&合計は&秒に代入しておいた得点を加えます。
そして最後に書いてある&秒が#計算関数の戻り値になり、この値を印刷します。

●フッタ部
後は分かると思いますが、&件数、&合計で件数と合計点数、&合計/件数で平均値が印刷されます。

●複数科目を印刷するなら
今の話は1科目だけの場合です。複数の科目について同時に点数や合計などを印刷するのであれば、
同じ変数は使えません。
この場合には、予め「&国語T合計」といった変数を定義しておき、それらの変数に合計値や件数を
代入して行く必要があります。

佐田守弘(KS-00119)

■本質的には根本的に見直す必要がありそうな気がします。
以上、力技で処理する方法を紹介しましたが、あまりお薦めできる方法ではない様な気もします。
おそらく、悲しげさんやbonitoさんは気がついておられる様に思うのですが、
もっと簡単に処理する方法がありそうで、それをを採用すべきでしょう。
そのためには、表データの持ち方なども考え直す必要がありそうです。
ただし、私は表の形が良く分からなかったので、どの様に改善すべきかのアドバイスができずにおります。

■思い出してしまった...
久々ぶりに複雑な計算式を書いてみたら、ふと思い出してしまいました。
かつてNIFTY-Serveには、変数と&計算、&代入関数を操る超人がおられました。
そう、皆から「関数の達人」、「師匠」、「雲上人」と崇め奉られたお方です。

6018 Re:レポートで変数による項目名を使いたい bakutatu 2000/05/12-07:37
記事番号6013へのコメント
佐田 守弘さん
たびたびのコメントありがとうございます。
どうも、いま自分が困っている状況を、性格に他の人に伝えるのは難しいなってよくわかりました。
計算式をよく理解した上で、悲しげさんやbonitoさんのご意見も参考にしながらやってみます。

表は、きわめて単純かつ膨大なものになっています。
全学年の1年分(全学期)の教科の成績と欠席、クラスの出欠が並んでいるだけです。
もっと工夫が必要なのでしょうね。
またご教授下さい。

戻る