過去の桐井戸端BBS (桐ver.9)
29474 ウィンドウを新たに開いたとき固有もしくは共通変数を削除したい 大野達郎 2005/03/23-12:24
いつもお世話になっております。今回もよろしくお願いします。
桐9-2004です。宣言後、ウィンドウを新たに開いた場合に
宣言した固有もしくは共通変数を削除したいのですが、
それは不可能なのでしょうか?
以下、状況です。

-----ファイル状況-----
最初から開いている表:"data.tbl"
一括より開くテンポラリ表:"temp01.tbl", "temp02.tbl", "temp03.tbl"
一括にて使用するレポートファイル:"reportA.rpt", "reportB.rpt"
一括ファイル:"集計A.cmd", "集計B.cmd"

"集計A.cmd" の宣言及び初期化
 変数宣言 文字列{ &datatbl, &temptbl[2], &report }
 &datatbl  = "data.tbl"
 &temptbl[1] = "temp01.tbl"
 &temptbl[2] = "temp02.tbl"
 &report   = "reportA.rpt"

"集計B.cmd" の宣言及び初期化
 変数宣言 文字列{ &datatbl, &temptbl[3], &report }
 &datatbl  = "data.tbl"
 &temptbl[1] = "temp01.tbl"
 &temptbl[2] = "temp02.tbl"
 &temptbl[3] = "temp03.tbl"
 &report   = "reportB.rpt"
-----ファイル状況-----


一括ファイルはテンポラリ等を利用してそれぞれ別の集計を行うものです。
Aは週の集計レポート、Bは月の集計レポートといった感じで、
内容はパラメータでまとめてしまえる程、似てません。別モノです。

"data.tbl" を開いた状態(手による絞り込みあり)で集計A, 集計B を任意に行い、
レポート印刷して"data.tbl" の元の状態に戻りたいわけです。
集計A, 集計B は常に両方行うとも限らず、
どちらか一方のみの場合もあれば両方行うこともあります。

これで両方の一括をそれぞれ順番に実行すると
変数宣言でエラーが発生してしまいます。
この場合は&temptbl[] の配列要素数がひっかかるようです。
このような問題を避ける為、
一括が終了した時点で一括に関わった変数を全て削除してしまいたいのですが、
一括で"tempXX.tbl" を開くと変数削除ができなくなってしまいます。

集計がA, B くらいならいいのですが、実際はもっとたくさんのパターンが有り、
尚且つ参照ファイル、作業ファイル等も集計ごとにかなりの数に及びます。
しかも今後も集計パターンが増える見込みなので、
できれば、一括毎に変数を削除して、"立つ一括後を濁さず" としたいのです。
何か方法はないでしょうか?

29476 Re:固有もしくは共通変数の削除 うにん 2005/03/23-13:26
記事番号29474へのコメント

>このような問題を避ける為、
>一括が終了した時点で一括に関わった変数を全て削除してしまいたいのですが、

呼び出す一括は手続きにして自動変数を使うのが一番簡単そうです。

29477 Re:固有もしくは共通変数の削除 アックン 2005/03/23-13:42
記事番号29474へのコメント
大野達郎さん、こんにちは。
こういうときは、
集計A.cmd と 集計B.cmd の配列要素数を同じにすればいいです。
配列要素数の多い方の &temptbl[3] に統一します。

>"集計A.cmd" の宣言及び初期化
> 変数宣言 文字列{ &datatbl, &temptbl[2], &report }
                   ↓
 変数宣言 文字列{ &datatbl, &temptbl[3], &report }

>"集計B.cmd" の宣言及び初期化
> 変数宣言 文字列{ &datatbl, &temptbl[3], &report }

アックン(=^・^=)
29478 Re:固有もしくは共通変数の削除 アックン 2005/03/23-14:23
記事番号29477へのコメント
言葉足らずだったので、誤解無きよう補足しますと、
配列要素数を統一しても、変数削除できるわけではなく、
変数宣言時のエラーが出なくなるだけです。
date.tbl を閉じたときに、固有変数がまとめて削除されます。

アックン(=^・^=)

29479 Re:固有もしくは共通変数の削除 大野達郎 2005/03/23-16:40
記事番号29474へのコメント
うにんさん、アックンさん、こんにちは。
いつもお世話になっております。
レス、感謝感謝です。

> うにんさんのレスより
> 呼び出す一括は手続きにして自動変数を使うのが一番簡単そうです。
この場合なのですが、変数に印刷用タイトルを格納する &タイトル があるとします。
"reportA.rpt" で &タイトル を参照できなかったような気がするのですが、
解決方法はあるのでしょうか?

> アックンさんのレスより
> 配列要素数の多い方の &temptbl[3] に統一します。
このやり方でエラー回避できました。
今後は、先を見越して多めに変数宣言しておくこととします。

一括も複数が絡み始めると大変ですね。
今後は先を見通した一括設計、手続き定義等が必要になりそうです。
いい機会なので、ここで設計思想を確立させておくこととします。
29480 Re:固有もしくは共通変数の削除 うにん 2005/03/24-11:42
記事番号29479へのコメント

>この場合なのですが、変数に印刷用タイトルを格納する &タイトル があるとします。
>"reportA.rpt" で &タイトル を参照できなかったような気がするのですが、
>解決方法はあるのでしょうか?

自動と局所変数は使えませんね。レポート変数というのが無いので私自身は
レポートでは組み込み変数しか使いません。(定義時に面倒なので)

レポートには結合表を使うようにして、パラメタ変数と同名の自動変数を使うと
自動変数の代りに結合表の項目値を使えますが、そこまでするのも^^;;

何かいい手は無いのかな?

29511 Re:固有もしくは共通変数の削除 大野達郎 2005/03/29-09:09
記事番号29480へのコメント
レスが遅くなりました。すみません。
あれから色々試してみたのですが、やはり変数を完全に削除するのは厳しそうです。
テンポラリでテーブルを使用している以上開き直って
文字列格納用項目を作ると変数は不要となりますが、ちょっと気持ち悪いですね。

今後は、極力手続き内の自動変数を使うようにして固有変数を減らしていこうと思います。
どうしても必要な変数は宣言チェックをしてから宣言を行うようにし、
頻繁に使用する配列は要素数をあらかじめ余分にとって、同数になるようにしようと思います。

アドバイス、どうもありがとうございました。

戻る