過去の桐井戸端BBS (桐ver.9)
20641 グループ化をしている伝票形式フォームで終端行のみが表示されることがある 沼田政治 2003/06/03-11:08
いつもお世話になります。
グループ化を指定している伝票形式フォームを表示し、グループ指定で「次」を指定していくと終端行のみが表示されることがあります。
グループ化に問題があるのか、絞り込み等に問題があるのか分かりませんので、教えていただきたいと思います。

伝票フォームに2つのグループ項目を置いています。
編集対象表のデータを1つの条件で絞り込み、その結果を、グループ項目2つの条件を共に満たす場合を
1つのグループとして表示させたいのです。

困っている症状は、グループ指定で「次」を機能として割り当てたボタンを使ってグループを切り替えていくと、
終端行のみの画面が表示されてしまうことです。

絞り込みの条件は、グループ項目としてはフォーム上には置いていません。
表の開始条件でフォーム編集に入る前に絞り込んだ状態にしておきたいと思っています。
ただ、どの状態の絞り込みなのかを明らかにするため、項目値の表示としてテキストボックスとしてヘッダ部に表示させています。
これは単なる項目値の表示ですから問題ないのではないかと思います。
コマンドボタンでグループ指定の「次」指定の段階での問題ではないかと思いましたので、
コマンドボタンの機能に3段階の指定をしました。

並べ替えと絞り込みとグループ指定です。フォームの表示が切り替わると並べ替え状態や絞り込み状態がリセットされるようですので、
コマンドボタンで表示が切り替わるような使い方の場合は、その都度、並べ替え等をしなければならないと思っています。
この3つの働きの順序がよく分かりませんでしたので、それぞれ順番を入れ替えて指定してみましたが、症状は変わりません。
問題の画面表示では、絞り込みが正しければ表示されるはずのないグループ項目値の組み合わせが表示されています。
絞り込みによって処理対象になっていないはずのデータです。
ただし、もし絞り込みがされていなければこのデータ自体は存在しています。
最初は絞り込みができていないと思いましたが、終端行が表示される画面以外でのデータの絞り込み状態は正常のようですし、
何より、絞り込み前のデータが表示されていなければいけないと思いますが、
それが終端行のみになっているのが理解できずに困っています。
よろしくお願いします。
20648 Re:グループ化で終端行のみが表示される うにん 2003/06/03-16:09
記事番号20641へのコメント
>絞り込みの条件は、グループ項目としてはフォーム上には置いていません。表の開

>始条件でフォーム編集に入る前に絞り込んだ状態にしておきたいと思っています。

であれば、最初にグループ選択解除してから絞り込まないとだめでは?

20650 Re:グループ化で終端行のみが表示される 沼田政治 2003/06/03-16:46
記事番号20648へのコメント
うにんさん、ありがとうございます。

>であれば、最初にグループ選択解除してから絞り込まないとだめでは?

グループ選択解除を実行すると最初のグループに戻ります。
グループ項目Aは数値を昇順に並べていますが数字は不連続です。グループ項目Bは文字列を辞書逆順に並べています。
コマンドボタンに割り付けた「グループ指定−次」で、グループ項目Aを「5」の次に「6」を表示させたいのです。
この時、「6」にデータがなければ「7」を表示させたいのですが、「6」が表示されてしまうのです。

「6」のデータはグループ化する前に絞り込みで処理対象から外したいデータです。
グループ化する前に絞り込んでおけば、後は残ったデータの中でグループ分けをすることができると思っていたのですが、
そうではないようですね。
基本的には、画面が変わるたびに、並べ替えや絞り込みはしなければならないと理解しているのですが、
それでよろしいでしょうか。
そのため、「グループ指定−次」ボタンにも、機能に絞り込みまで含めたのですが、うまくいかないのです。

20654 Re:グループ化で終端行のみが表示される うにん 2003/06/03-20:06
記事番号20650へのコメント
>コマンドボタンに割り付けた「グループ指定−次」で、グループ項目Aを「5」の次に「6」を
>表示させたいのです。この時、「6」にデータがなければ「7」を表示させたいのですが、
>「6」が表示されてしまうのです。
>「6」のデータはグループ化する前に絞り込みで処理対象から外したいデータです。

グループそのものを表示しないためには、グループ化の前に絞り込む必要があります。

>グループ化する前に絞り込んでおけば、後は残ったデータの中でグループ分けをすることができ
>ると思っていたのですが、そうではないようですね。

いえ、できます。例えばフォーム開始イベントで
グループ選択解除
絞り込み [A]{<>6}
グループ選択
とやれば、「6」のグループは表示されません。

>基本的には、画面が変わるたびに、並べ替えや絞り込みはしなければならないと理解しているの
>ですが、それでよろしいでしょうか。

グループ化する前に、グループ内のレコード順も希望の通りに並べ替えておけば、
グループ移動のたびに並べ替えなくてもいいと思います。

>そのため、「グループ指定−次」ボタンにも、機能に絞り込みまで含めたのですが、うまくいか
>ないのです。

グループ選択解除しないで、グループ移動する前やあとに絞り込みを含めても、
移動前か移動後のグループ内のレコードに対して絞り込まれるだけです。

20663 Re:解決しました 沼田政治 2003/06/04-09:47
記事番号20654へのコメント
うにんさん、ありがとうございました。解決しました。

原因は、「グループ選択」コマンドを記述していなかったためだと思います。

フォーム上でグループ項目を置くだけで、表示の動作をするときにいわゆるグループ毎に選択したデータを表示してくれるものと
思っていたからです。
「グループ選択」というコマンドは、このような動作を許可するためのスイッチと理解すれば良いんでしょうか。
この一行を追加するだけで問題は解決しました。グループ選択解除コマンドは、それ以降の表示関係を整理するために必要なようで、
今回の問題はグループ選択コマンドの記述だけで良かったようです。

ただ、これを記述していなかった時にも、ほぼ狙い通りの動きをしていました。不必要なグループが表示されることに我慢さえできれば、
この一行はなかっても使えていたのではないかと思えます。
あれやこれやと試している中で、コマンドボタンの機能の中にも絞り込みなどを記述していたためかとも思いますが、
偶然にも同じような動作をさせることができていたのかもしれません。
なぜこのようなことになっていたのか理解ができないのですが、また機会がありましたらお教えください。
ありがとうございました。
最後に確認ですが、
グループ項目を持つフォームを使う場合はフォーム開始イベントにグループ選択コマンドを書くべきだ、
という理解の仕方でよろしいんでしょうか。

20664 Re:解決しました うにん 2003/06/04-10:35
記事番号20663へのコメント
>グループ項目を持つフォームを使う場合はフォーム開始イベントにグループ選択コマンドを書くべきだ、とい
>う理解の仕方でよろしいんでしょうか。

一括処理&イベントリファレンスの「フォーム開始」イベントを見るとわかりますが、グループ選択
(グループ化)は自動的に行なわれるので普通は書く必要ありません。

前回、絞り込みを「フォーム開始」イベントでやるように言いましたが、この説明を見るとむしろ
[開始条件種別1]の[開始条件名1]で指定したほうが無駄がなくすっきりしそうですね。
グループ化の前に実行されるので、単に絞込み条件を定義しておいて指定すればいいはずです。

20669 Re:開始条件種別1の動作 沼田政治 2003/06/04-12:22
記事番号20664へのコメント
うにんさん、ありがとうございます。

単純に、フォーム開始イベントに書いていた「グループ選択」コマンドに*を付け(注釈行にしました)、
フォームの[開始条件種別1]に[絞り込み]を指定し、条件名1に絞り込み条件を入れてみましたが、
フォームのコマンドボタン(「グループ指定−次」などの機能を割り当てているボタンです)が使用できなくなりました。
絞り込み条件がきちんと定義できているかを確認してみましたが、作成済み条件名に登録されており、
その定義内容も正しいと思います。

[PageDown]キーなどで確かめてみますと、絞り込み状態にはなっているようですが、グループ化されていないようです。
ヘルプを読んでみても、グループ化にはグループ項目を設定するだけで十分なように思えますが、他にも要件があるということでしょうか。

20670 Re:開始条件種別1の動作 沼田政治 2003/06/04-12:34
記事番号20669へのコメント
すいません。訂正です。
絞り込み状態にはなっていないようです。
フォーム開始イベントに「絞り込み」の記述があり、その行を注釈行にするのを忘れていましたので、
この命令が効いていたのだと思います。
この行を注釈行にした上で試してみたところ、全く絞り込まれていない状態でした。
現在のところ、絞り込みの命令は[開始条件種別1]で指定しているだけです。これだけでは絞り込みができていないということです。
また、グループ化もできていませんが、これは絞り込みとは別の問題ではないかと思いますが、どうなのでしょう。
フォームにグループ項目を置いている以上、絞り込みができていてもできていなくても、
対応するグループ化はできていなくてはいけないはずだと、思っています。

20680 Re:開始条件種別1の動作 うにん 2003/06/05-00:12
記事番号20670へのコメント
「開始条件種別1」に絞り込み条件名を指定すれば、絞り込んだ後でグループ化されて表示されます。

>また、グループ化もできていません

フォーム開始イベントに「グループ選択解除」が残ってたりしませんか?

#表編集に切りかえて絞り込みを解除しても、フォーム編集に戻すと開始条件にそって絞り込まれます。
#単に切替えてるだけのようなつもりになりますが、実はフォームを開きなおしてるようですね。

20692 Re:開始条件種別1の動作 沼田政治 2003/06/05-16:29
記事番号20680へのコメント
うにんさん、こんにちは。

>フォーム開始イベントに「グループ選択解除」が残ってたりしませんか?

念のためにと思って、フォーム開始イベントそのものを削除してみました。
結果は変わりません。

このフォームは別のフォームからコマンドボタンの「フォームの選択」機能で呼び出しています。
この機能を使っているので、前のフォームの並び替え条件や絞り込み状態を引き継いでいるのかもしれないと思っています。
しかし、絞り込みは、絞り込みの状態になっていても新たに絞り込めるのではないかと思っていますので、
「開始条件種別1」に絞り込みを指定している限り、これが実行されないことはないと思っているんですが、
実際にはこのようには動作しません。

フォーム開始イベントにグループ選択解除が残っていることが原因という意味は、
一旦開始条件種別1で絞り込まれた状態がグループ選択解除コマンドで解除され、
結果的に絞り込まれていないように見える、ということではないかと思っています。

これから実験してみようと思っています。

ただ、どうしても絞り込みをしなければならない事情から、
これを実行すると絞り込まれたデータの先頭行にカーソルが移動してしまいます。
希望は前のフォームのカーソル行のあるグループを表示したいということですから、
先頭グループが表示されてしまっては不都合ということになります。
そのため、処理前のデータ行にある希望の項目値を変数に取り込んでおき、
絞り込んだ後に[検索]でジャンプさせてからグループ表示したいと思っています。
行数は4行必要ですので、どちらにしてもフォーム開始イベントを書かなければならないと思っています。
ですから、その中に絞り込み命令やグループ選択命令も書いておけば、無駄にもならず、希望の動作も満たすことができます。
当面はこの措置で続けてみようかと思っていますが、
そもそもなぜ[開始条件種別1]の指定が効かないのかについては理解できないままになってしまいますから、
機会を改めて相談させていただこうと思っています。
ありがとうございました。
20694 Re:開始条件種別1の動作 うにん 2003/06/05-17:39
記事番号20692へのコメント
>このフォームは別のフォームからコマンドボタンの「フォームの選択」機能で呼び出しています。この機能を使
>っているので、前のフォームの並び替え条件や絞り込み状態を引き継いでいるのかもしれないと思っています。

なるほど。使用フォームコマンドに「グループ化する使用フォームを変更した場合は、
グループ選択状態も解除されます。」と書いてありますよ。
ヘルプには不明な点がありますが、処理対象行が変わらないとも書いてあるので、
「開始条件種別1」も実行されないような気がします。

20705 Re:開始条件種別1の動作 沼田政治 2003/06/06-12:17
記事番号20694へのコメント
うにんさん、こんにちは。

基本的に、使用するフォームを変えれば、
それにグループ項目が置かれていれば自動的にグループ選択状態になるのではないかと思っています。
これは絞り込み状態になっているという意味だと思いますから、
実際に絞り込まれていない状態になっているのは何故かと考えてみました。

思い当たることがあります。
狙っている絞り込み状態にするための項目をグループ項目としていない、ということです。
グループ化のための項目は全部で4つありますが、その内3つまでしかグループ項目としていません。
最初の1つは、予め絞り込んでおき、残る3つの要素でグループ表示しようとしていたのです。
理由は、グループ指定をする時に最初の1つから指定しないと切り替わらないからです。
これを面倒と感じて、このフォームを使う時にはまずこの選択はしないと思っている項目を、
フォームに入る前に絞り込んだ状態にしておこうと思ったのです。
絞り込みがうまく行かない状態を確認してみますと、確かに最初の1つ目の絞り込み状態ができていません。
[開始条件種別1]に指定している条件も、正にこの1つ目の条件です。

ヘルプには、[開始条件種別1]はフォームのグループ化を行う時に実行されるとも書いてあります。
ここで指定している条件がフォームのグループ項目に指定されていない、
この辺りがうまく行かない原因かもしれないと感じています。
このことから考えると、フォーム開始イベント内で記述した時には動作しているのに
[開始条件種別1]で指定した時には動作しない、という現象も説明できるような気がします。

20721 横レス失礼、トレースウィンドウ ONnoji 2003/06/07-11:49
記事番号20705へのコメント
沼田政治さん、こんにちは。

うにんさん、横レスでスイマセン。m(__)m

失礼ながら…
私は本件に関して、流し読みなのでまったく理解していないのでありますが。(^^ゞ

[表示]メニュー → [トレース出力ウィンドウの設定]を選び、
[トレース出力ウィンドウの設定]ウィンドウで、
[表・結合表・外部DBのアクセス状況をトレース出力する]にチェックを付けると、

並べ替え等の実行がトレースできますから一度お試しされたらいかがでしょうか。

トレースしてみれば、具体的にどのような動作をしているか、分かるような気がするのですが…

皆様トレースした上での議論だったら、本当に蛇足ですね。(^^ゞ

20735 いいこと教わりました:-) うにん 2003/06/07-17:59
記事番号20721へのコメント
コマンドボタンの「フォームの選択」では、開始条件1が実行されていますね…
グループ化については表示してくれませんが、こちらでやってる単純なテストでは
ちゃんとグループ化されています。いろいろ条件があるようです。

「使用フォーム」コマンドは実質同じ処理内容と思ったのですが、イベントでは
使用できないので、この際あんまり関係ないようです。

20741 Re:横レス失礼、トレースウィンドウ 沼田政治 2003/06/07-23:49
記事番号20721へのコメント
ONnojiさん、こんばんは。

トレースってこういうことまでできるのですね。ありがとうございます。
イベントの中で表を表示させるようにしてみたり、変数をいちいち表示させるようにしてみたり...、
その内ぐちゃぐちゃになってしまって....、あわてて元にも戻そうと行を削除したら、
消してはいけないものまで消してしまって勝手にパニックになったり....。
ちょっとこの辺で落ち着いてトレースしてみようと思います。確かに、自分でもちょっとややこしいことをしてるなって気もしていますから...。

最もパニクっているのは、同じような設定項目が複数ある、ということかもしれません。
フォームを使う時には絞り込み後にしたい、それだけの要求としても、[開始条件種別1]に書くことも出来るし、
フォーム開始イベントに書いても良いし、オプションの開始条件コマンドに割り当てておいてもいいし、
今回のようにその前に別のフォームを使っててそこからコマンドボタンで切り替えるのなら、
そのボタンに機能を割り当てておいてもいいだろうし。
これらの使い方がよく分かっていないままで、めくら滅法に設定してしまっていますから、
この辺りも問題かもしれません。
フォームのオブジェクト属性にさえ、オプションと編集対象表の2カ所に開始時に実行される設定項目が用意されていると言うことは、
それぞれに用意しておかなければならない理由があるんでしょうね。
僕の場合は両方に設定してしまっているなど、そんなパニクってる状態ですから。
実験してみようにも、順列組み合わせの原理で、恐ろしい数のパターンを試してみることになってしまってますから。

落ち着いて、もう一度、トレースしながらやってみることにします。

戻る