過去の桐井戸端BBS (桐ver.9)
25514 フォームでオブジェクト単位でグループ化できますでしょうか kochin 2004/03/19-22:08
井戸端会議の皆さん初めまして。kochinと申します。
桐8を3年程前から、桐9-2004をつい最近使い始めました。

めちゃめちゃ不細工ではあるけれど、自分なりの方法でとりあえず解決?はしているのですが。
どうも腑に落ちないと言うか・・。
のどに魚の骨が刺さったまんまというか・・・。
そんな感じのことを質問させてください。

やりたかったことを、具体的に書きますと、例えば

[年][月][日][請求先ID][請求先名][商品ID][商品名][数量][単価][金額]
というような9項目あるテーブルを編集対象表に、一覧表フォームから
日々の売上入力として、使用しているとしまして。
このフォームのヘッダにあらかじめ5個ぐらいグループ項目オブジェクトを設置しておいて

1.昨日の売上を見たければ、[年]と[月]と[日]をグループ化する。

2.続いて、先月の○×商事への売上を見たければ、[日]だけ
 グループ解除して[請求先ID]をグループ化する。
 結果、[年][月][請求先ID]の3項目をグループ化。

3.続いて、去年の商品Aの年間売上を見たければ、[月]と[請求先ID]を
 グループ解除して[商品ID]をグループ化する。
 結果、[年][商品ID]の2項目をグループ化。
と、こんなことが、やりたかったことなんですが。

最初、オブジェクト操作-設定コマンドで、うまくできるんじゃないかと
軽く考えていたのですが、一括処理&インベントリファレンスには
グループソースはメイン処理でのみ変更可能と書いてありますし
また、グループ指定−解除コマンドは、全部のグループ項目を解除されてしまいますよね?。
「こりゃー、できないんだわ。やりたきゃ絞り込みを使うしかないか」
とすっぱりあきらめていたのですが・・・。

フォームのヘッダに、複数配置してあるグループ項目に対して
そのグループ化を、個別に解除することってできるんでしょうか?
結構頑張って過去ログ探してみたんですが、見つけられないんです。

25515 グループ化でなくて絞り込みですね 佐田 守弘 2004/03/20-00:15
記事番号25514へのコメント
kochinさん
やりたい事は良く解りました。

これをグループかの機能で実現されようとしておりますが、これは難しいと思います。
不可能と断言はできなくても、限りなく不可能に近いでしょう。
私の記憶でも、過去に関連する議論はなかったと思います。

機能としては絞り込みを使うべきでしょうね。絞り込みで、
やりたい事はほとんど実現できると思います。ここではその考え方を提示させて頂きます。

●一覧表の上に絞り込み用のオブジェクトを作る
グループ化と書かれている部分を絞り込みと読み替えさせてもらうとして、
絞り込みを行いたいオブジェクト、例えば[年][月]や[請求先名]などの
ラベルの上の当たりに、絞り込み値を入力するテキストオブジェクトを作って下さい。
このソース値は、項目ではなくて、変数を設定します。変数名は解りやすい様に項目と同じ名前にしておきましょう。
そしてこれらのオブジェクトにソース値更新イベントを設定し、値が入力されたら、その値で項目の絞り込みを行います。
絞り込みの記述は文字列や年、月などの整数値で工夫した方が良いかと思います。例えば
 [年]の場合: 絞り込み [年]{=&年}
 [請求先名]の場合: 絞り込み [請求先名]{=&請求先名*:E}
  (前方一致で拡張辞書順比較)
つまり、グループ化したいと思っている項目について、ここにその値を入力すれば、
入力する毎に絞り込まれて行き、目的とするグループ化と同じ状態になります。

解除については解除ボタンを作って解除します。解除した時には、
上記の絞り込み用のテキストボックスのソース値になっている変数の値もクリアします。
全解除だけなら簡単ですが、1段階ずつ解除する必要もあるかと思います。
解除だけなら簡単ですが、この変数値を1つずつクリアするには、どの順で
絞り込む値を入力したかを別の変数に記録しておく必要があります。

●一覧表に表示されている値で絞り込めないか
上記の方法は、いちいち絞り込みの検索値をキー入力する手間が掛ります。
特に請求先名の様な漢字入力するオブジェクトは、何か工夫が必要でしょう。

対策として1つには表引きもどきの方法でリスト入力する事も考えられます。
しかしフォームの対象表を表引き表には使えないので、同じ表をコピーした
ものを作って、表引きするか、別のフォームで開いて、選択入力するといった
方法も考えられます。

しかし、一覧表は今そこに表示されているので、ここから選んで入力する
インタフェースを考えるのが良いかも知れません。
具体的には、項目の上に単一化ボタンを設け、これを押したらその項目に
ついて単一化して表示し、マウスクリックした値を変数に取り込むといった方法が考えられます。

更に、五十音ボタンを表示して、読みの頭文字で絞り込んで対象行を少なくするといった工夫も考えられます。

この場合には、テキストオブジェクトのソース値更新で絞り込みを行うのではなく、
必要な検索値の入力を終えた後に絞り込みボタンを押して絞り込む操作になります。

これがうまくできれば、多分目的を充分に実現するものになるかと思います。

佐田守弘(KS-00119)



25516 続き>絞り込み値が複数の時 佐田 守弘 2004/03/20-00:28
記事番号25514へのコメント
続きです。

質問では、グループ化で処理しようとしているので、絞り込みの検索値は1つだけを
想定していると思いますが、実際には複数で絞り込みたい場合もあるのではないかと思います。

つまり請求先が○×商事と□△物産の2社を同時に表示したいとか、
1月から3月までの四半期分を表示したいといったケースです。
更に○×商事は1月分、□△物産は2月分という組み合わせまで考えるのかどうか。

全ての場合まで拡張して考えるのはかなり複雑になりますが、請求先か商品か
どちらかだけを10個以内で複数指定したいという程度なら、できるかも知れません。

実際に行うには、前回コメントの後の方法を使う事になるでしょうね。
つまり、請求先や商品を単一化して表示し、複数選ばせて、それらの値を配列変数に代入します。
そしてそれらの変数値で検索条件名を組み立てて、絞り込む方法になります。

●本当は...
やりたい事に正にぴったりの方法は、DataNatureというソフトを利用するのがふさわしいのではとも思います。
ただしこのソフトはデータの入力機能は弱いですから、
桐で基本的なデータを持っておき、必要な加工を桐の方で行ってからCSVで出力します。
これをDataNatureに読み込んで、データの閲覧を行うのが良いかとも思います。

佐田守弘(KS-00119)
25518 Re:オブジェクト単位でグループ化できますでしょうか たゆー 2004/03/20-10:24
記事番号25514へのコメント
kochinさんこんにちは

>やりたかったことを、具体的に書きますと、例えば
>1.[年]と[月]と[日]をグループ化する。
>2.[年][月][請求先ID]の3項目をグループ化。
>3.[年][商品ID]の2項目をグループ化。
>と、こんなことが、やりたかったことなんですが。

コマンドボタンを利用して紹介します。

1番目の例
b年月日・・・このマウス左クリックイベントに

手続き定義開始 b年月日::マウス左クリック(長整数
 ・・・・・・・・・・・・・)
 グループ選択解除
  オブジェクト操作 @グループ1.グループソース = "[年]"
  オブジェクト操作 @グループ2.グループソース = "[月]"
  オブジェクト操作 @グループ3.グループソース = "[日]"
 グループ選択
手続き定義終了

3番目の例
b年商品・・・このマウス左クリックイベントに

手続き定義開始 b年月商品::マウス左クリック(長整数 ・・・・・・・・・・)
 グループ選択解除
   オブジェクト操作 @グループ1.グループソース = "[年]"
   オブジェクト操作 @グループ2.グループソース = "[商品ID]"
   オブジェクト操作 @グループ3.グループソース = #u
 グループ選択
手続き定義終了

一度おためしください(カナ半角ご注意ください)

25519 Re:オブジェクト単位でグループ化できますでしょうか たゆー 2004/03/20-10:39
記事番号25518へのコメント
補足と訂正
>オブジェクト操作 @グループ1.グループソース = "[年]"
>オブジェクト操作 @グループ2.グループソース = "[月]"
>オブジェクト操作 @グループ3.グループソース = "[日]"

この「@グループ1〜3」は、グループ項目のオブジェクト名です


>手続き定義開始 b年月商品::マウス左クリック(長整数
 ・・・・・・・・・・)
> グループ選択解除
イベントの最初に「グループ選択解除」コマンドを行いますので、
とりあえず、日常使用する[年][月][日]を、指定しておいてください


>3番目の例
>b年商品・・・このマウス左クリックイベントに
>
>手続き定義開始 b年月商品::マウス左クリック(長整数
 ・・・・・・・・・・)
> グループ選択解除

「b年月商品」→「b年商品」ですね。
自動作成すれば正しい内容がはいりますが・・・

以上

25521 Re:オブジェクト単位でグループ化できますでしょうか 悲しげ 2004/03/20-12:44
記事番号25518へのコメント
どもっ、たゆーさん

>   オブジェクト操作 @グループ3.グループソース = #u

ソースを敢えて未定義にするとは思いつかなかったです。これは便利ですね。

(割り込み失礼ながら一言お礼まで)<(_ _)>

25570 Re:続き>絞り込み値が複数の時 kochin 2004/03/23-21:42
記事番号25516へのコメント
kochinです。
佐田さん丁寧に教えて頂きまして、ありがとうございます。
大変わかりやすい説明で、私でも理解できました。
表示されている一覧表を直接単一化して、変数に取り込む発想は
私には新鮮でした、(すぐ別表に書き出して、表引きしてしまいます)
データネイチャーも、ずーと気になっているソフトの一つです
実際、普段レポートを作るのをめんどくさがって「ピタッとフォーム」を使っていたりします。
たゆーさんに教えて頂いた直接的な方法と共に、参考にさせて頂いて今から作り直そうと思っています。

実は、前回最初の投稿を行うとき、会議室へ登録時に「記事が長すぎます」と蹴られてしまい、
最初の投稿は元々書いた文章の前段部分でした。
その後段部分を、悪い例として書かせて頂きますと。
*****以下前回の続きの部分、質問ではありません***
現在使用している方法は
フォームのヘッダに、グループ項目、テキストボックス
コマンドボタンの3つのオブジェクトを1セットとして
計5セット配置してあります。

グループ項目オブジェクトそれぞれのソースとして、編集対象表には
項目番号1〜5に[作業1][作業2]・・・[作業5]と
全レコード未定義のダミー項目を非表示で作ってあります。

テキストボックスオブジェクトそれぞれのソースは
&グルーピング[1]、&グルーピング[2]・・・&グルーピング[5]と
配列変数になっています。
このテキストボックスで、別表に書き出した編集対照表の項目名を
項目属性の表引きで入力して、ソースの変数に取り込んでいます。

コマンドボタン1〜5の手続き定義に
1.項目名変更 [作業1]=&グルーピング[1],&グルーピング[1]=[作業1]
2.項目名変更 [作業2]=&グルーピング[2],&グルーピング[2]=[作業2]
・                 ・
・                 ・
5.項目名変更 [作業5]=&グルーピング[5],&グルーピング[5]=[作業5]

やっていることは
1.フォーム開始時点では5個のグループ項目は、全て全レコード未定義の
  項目をグループ化しているので、グループ化していないのと同じ。
2.任意の項目名をテキストボックスで表引きして、コマンドボタンを
  押せばその項目をグループ化したのと同じ。
3.同じグループ項目に対し、もう1回コマンドボタンを押せば、再び
  1.の状態に戻るのでグループ解除されたのと同じ。
おおよその仕組みはこんな感じで、「やりたいこと」を実現しております。
***********ここまで************

ただし以上の方法は以下の点でちからわざです
1.他項目で項目計算式に使われている項目名を変えてしまうと
  計算式の中の項目名まで変わってしまう?。
2.フォーム終了イベント等で何らかのフォローをしておかないと
  フォーム定義画面に移動するたびに項目名が変わったままになってしまう(変数の種類と持ち方によって)。
3.重ねて変更しないようにチェックの処理を入れないと表が
  めちゃめちゃになってしまう可能性がある。
4.フォーム上で表示している項目であれば、項目名を変更したとたん
  表示が全レコード未定義になってしまう。
回避する方法はいくらでもあるのですが、どう考えても
自分で使うには便利で良いけれど仕事上の処理には・・無理か?
という感じの処理です。というわけで最初の投稿の質問になりました。

佐田さんといえば、2年前ぐらいに?、おっしゃっていた?
「イベントは、素人の素人による素人のための・・・」
(だったと思うのですが。もしかしたら別発言かも・・・。)
というご発言に勇気づけられ、当時会話処理しかできなかった私が
何を思ったか、ONnojiさんのイベント道場へ、のこのこと伺って
勉強させて頂いたのが、私にとってのイベントと一括処理のきっかけ
だったと思います。おかげさまで、リファレンスと首っ引きですが
何とか使えるようになることができました。
初心者のことまで、常に考えに入れてご発言なさっているご様子に
頭が下がるおもいで、読ませて頂いております。
25572 Re:オブジェクト単位でグループ化できますでしょうか kochin 2004/03/23-21:55
記事番号25518へのコメント
kochinです。
たゆーさんありがとうございます。
できるんですね。
フォームを終了してしまうと、元々設定してあるグループソースに
戻ってしまうようですが、・・これがリファレンスにあった
メイン処理でないと変更できないということなのかしらん・・。
そうであっても、全く問題ありません。
大変感謝しております。

実は、前回最初の投稿を行うとき、会議室へ登録時に「記事が長すぎます」
と蹴られてしまい、最初の投稿は元々書いた文章の前段でした。
書かなかった部分は最初にレスをいただいた佐田さんへのレスに書かせて
いただきました(2重に書いてはいけないと思いまして)

結論的に言うと、オブジェクト操作−設定コマンドではできないと
思いこんでいた私は、項目名変更コマンドを使うことによって
グループ化した項目名を変えちゃうという、ちからわざで
「やりたいこと」を実現していたのですが、もっとスマートな方法が
絶対あるはずだと思い、最初の投稿となりました。

実は同じ方法で、項目属性の表引き表の値項目を、別項目の値を
フラグに、切り替える等しているため、私自身はこのちからわざ自体は
結構お気に入りだったのですが、自分で使うには良いのですが
仕事上の処理には、ちょっと無理かと思っていました。
おかげさまで、項目名変更コマンドをオブジェクト操作コマンドに置き換えて、
変数も少なくてすみますし、段階的にチェックを
入れていた部分も大幅にいらなくなるため、90行ぐらいあったkevファイルが30行ぐらいですみそうです。

ちからわざ→普通のわざになるような気がします。
本当にありがとうございました。
25575 Re:オブジェクト単位でグループ化できますでしょうか 悲しげ 2004/03/24-00:06
記事番号25572へのコメント
どもっ、kochinさん。またまた横から失礼します。

>フォームを終了してしまうと、元々設定してあるグループソースに
>戻ってしまうようですが、・・これがリファレンスにあった
>メイン処理でないと変更できないということなのかしらん・・。

と云うことではありません。(^^;)
「オブジェクト操作」コマンドによる諸属性の変更は、あくまで当該
フォームを開いている時だけ(あるいは当該一括処理を動かしている
時だけ)の、あくまで「一時的」なものでして、フォームの定義そのものを
永久的に変更してしまう訳ではありません。
だから、フォームを閉じると元の定義状態に戻る訳です。云ってみれば「戻ってしまう」ではなく「戻ってくれる」っつーか。
グループソースその他の属性を途中で色々変更するにせよ、常に初期状態としておきたいものもあるはずですので、
フォームの定義ではそれで代表させておけばいいのではないでしょうか?



ところで、#25514で曰く

>一括処理&インベントリファレンスには
>グループソースはメイン処理でのみ変更可能と書いてありますし

確かに「名札 メイン」の説明で「つぎのオブジェクト属性は、
この処理を行なっているときのみ変更できます」とされている中に、
今回の「グループソース」が列記されていますね。
変ですねぇ、実際には途中でジャンジャン変更できますから、
これはリファレンスのバグか、あるいはできるのは桐の穴(リファレンスは正しい)なのか?

25579 素人の素人のための... 佐田 守弘 2004/03/24-01:52
記事番号25570へのコメント
kochinさん
 >佐田さんといえば、2年前ぐらいに?、おっしゃっていた?
 >「イベントは、素人の素人による素人のための・・・」
 >(だったと思うのですが。もしかしたら別発言かも・・・。)
間違いなく私の書き込みです。

大規模な一括処理を作る自信がない方でも、イベントであれば少しずつ組み立てて行く事は可能かと思います。

今再びイベントのできるだけやさしいガイドブックをオンライン書籍の様な形で作ろうかと思っております。

佐田守弘(KS-00119)
25587 Re:了解です。 kochin 2004/03/24-19:11
記事番号25575へのコメント
kochinです。
悲しげさん、ありがとうございます。

>云ってみれば「戻ってしまう」ではなく「戻ってくれる」っつーか。
>常に初期状態として・・・、フォームの定義ではそれで代表させて
>おけばいいのではないでしょうか?

一時的な扱いというわけですね。
なるほど、よくわかりました。
おっしゃるとおり、これはこれで都合がよろしいと
思っておりました。
横やりしてくださって(他意はございませんよ)
ありがとうございます。

桐の穴・・・淫靡で魅惑的な響き・・・。
25589 Re:素人の素人のための... kochin 2004/03/24-19:47
記事番号25579へのコメント
kochinです。

>今再びイベントのできるだけやさしいガイドブックをオンライン書籍の様な
>形で作ろうかと思っております。

テイクも無しにギブばかりになってはいけませんので。
気長に・・、楽しみにさせて頂きます。
25787 Re:自己レスです kochin 2004/04/06-21:05
記事番号25514へのコメント
kochinです。
もうここを読んでいらっしゃる方はいないと思いますが自己レスです。

>結構頑張って過去ログ探してみたんですが、見つけられないんです。

見つけました。
いつの間にか過去ログが、"ググれる"ようになっていたんですね
全然気がつきませんでした。

桐7に関する過去ログ 1411からのツリーで、置換コマンドで同じようなことをご紹介されていますねー。
正直に言うと、私、自分の好き嫌いだけの理由で、"置換"をさけておりました。
(会話処理の置換で、何度も痛い目に遭っているんです。もちろん自業自得ですが・・。)

この紹介の中でイージーとご謙遜されていますが、読ませて頂いた瞬間
「そうか!置換を使えば、計算項目もグループ化できるじゃない!」
と思い、早速検証してみたら、いいですねー、OKです。

現在、グループ化のために、編集対象表の項目名を、別表に書き出して
表引きしているのですが、この書出の時、繰り返しコマンド内で
#項目属性や#項目種別を使ってダミー項目名や計算項目名やらを判別して
そうでないものだけを書き出しています、この処理がいらなくなる・・。

また新たに表を作成するとき、項目計算式に、チョコチョコっと
書いてしまえばすむことを、わざわざグループ化されて
入力や閲覧することを意識して、変数で計算後、項目値代入コマンドで
入力するようなことをしていますが、計算項目をグループ化できるので
あれば、そのあたりも気にせず表を作れる・・・。
と思った3秒後に、グループ化のメリットの「ソース値を勝手に
入力してくれる」が使えない・・・。だめか・・。と思ったまたまた3秒後
計算項目・・ということは、元々自動入力じゃない・・。
であれば、計算項目だけ置換して、他はオブジェクト操作−設定で
グループソースを変える・・。

というわけで、自動入力がスポイルされず、好きな項目を好きな
タイミングでグループ化したり、解除したり、
また項目名をほぼ全部変数で指定するようにしたのでオブジェクト群を
KEVファイルと共に別フォームにコピーして、チョコチョコっと直せば
使えるようになりました。
私の不満はほぼ全て、解消された感じです。
のどに刺さった骨がとれるのみならず、便秘まで解消してしまったそんな気分です。
ご助言くださった皆さんありがとうございました。置換の方法を
ご紹介されていた宮城さんもありがとうございました。

ちなみに、今回教わった、絞り込み方式も、グループソースを変える方式も
両方作ってみたのですが、私の職場では、絞り込み方式の方が
断然人気でした。
グループ化の概念そのものを、知らない人がほとんどなもので・・。
「やっていることは絞り込みと同じだよ、勝手に入力してくれるだけ楽でしょ」と何度説明しても・・・。


戻る