過去の桐井戸端BBS (桐ver.9)
23346 メイン&サブフォームで明細行の項目でマイナスになったとき、その項目名部分に「取消」の文字を表示させたい 桐の初心者 2003/11/13-21:00
先輩諸氏にご教示をお願いします。

メイン&サブフォームで伝票処理をしてるのですが、
サブフォームは一覧形式で、メインはカード形式で使用してます。
サブフォームの明細行と項目を配置してます。
悩んでいるのは「明細行」でマイナスが発生した時は「取消」の表示を
出すよう条件設定してるのですが・・・項目部分にも、表示させたいというのが目的です。
通常はないが、条件次第で表示という具合です。
 但しグループ解除した状態(全一覧)で

                    この個所 →  <A>
-----------------------------------------------------------
以下明細                        取消
23347 Re:ヒントをお願いします。 悲しげ 2003/11/13-23:53
記事番号23346へのコメント
どもっ、桐の初心者さん
「この個所 →  <A>」ってのがどの箇所なのか(<A>が何なのか)、
この記述からだとサッパリ判りませんが(^^;)、
それと「グループ解除した状態(全一覧)で」の意図するところも
想像し難いものがありますが、それはさておいて(^^;)、
要するに、本来は数値系項目なのだが、値がマイナスとなった場合は
文字列として「取消」なる表示をさせたいと云うことでしょうか?
ならば、幾つか苦肉な方法はありそうです。

一例をあげれば、当該項目に直接値を入力しなくてもよいのなら、
テキストソースを
  #条件選択([当該項目]<0,"取消",1,#通貨文字列([当該項目],""))
のような計算式とするとか。

23349 Re:ヒントをお願いします。 アックン 2003/11/14-09:58
記事番号23346へのコメント
桐の初心者さん、こんにちは。こんなふうにしてみてはどうでしょう。
メインサブフォームのグループ状態をうまく解除できるか、ちょっと気にかかるのですが。
それと、グループ状態を解除した状態で明細行のデータを変更しても、
ヘッダの取消表示に反映されません。
グループ状態でないと、フッタを自動計算しないからなんですが。
それではまずいというときは、さらに工夫が必要です。
(実際の運用時には、組み込み変数 &時 を使わないで、変数宣言してください。)

サブフォームの編集対象表(tbl)
・項目[取消]
 項目計算式:#cond([数量]<0,"取消",1,"")

サブフォーム(wfm)
・ヘッダのテキストボックス(取消表示)
 ソース:#cond(#グループ選択状態=0 .and&時>0,"取消",1,"")

・明細行のテキストボックス(取消表示)
 ソース:[取消] (←項目です)

・フッタのグループ項目
 ソース:#set(時,#件数([取消]))
23350 Re:ヒントをお願いします。 アックン 2003/11/14-10:29
記事番号23349へのコメント
> 項目計算式:#cond([数量]<0,"取消",1,"")
 項目[数量]の値がマイナスのときの例です。

>・ヘッダのテキストボックス(取消表示)
 ここはラベルでなくて、テキストオブジェクトにします。

>・明細行のテキストボックス(取消表示)
> ソース:[取消] (←項目です)
 ソースを項目にする理由は、フッタで集計するためです。
もしソースを計算式にすると、たとえば、明細行の取消表示の有無によって、
&時を”増減”すると、イベントか一括が必要になり、複雑になりそうです。
ただそうすれば、グループを解除して明細行を変更してもヘッダに表示が反映されると思います。
23352 Re:ヒントをお願いします。 悲しげ 2003/11/14-12:09
記事番号23346へのコメント
う〜ん、もしかして、こういう意味でしょうか?

「この個所 → <A>」とはメインフォームのオブジェクトであり、
つまりは、サブフォームの明細データの項目値の中に、ひとつでもマイナスのレコードがあれば
(またはサブのある項目値の合計がマイナスであれば)、メインフォームの<A>欄に「取消」と表示させたい?

しかし、だとすれば「グループ解除した状態(全一覧)で」と云う点がまたまた疑問を惹起します。
メイン&サブフォームは、通常はグループ項目値でもってリンクしているので、
グループ選択解除状態ということはちょっと想像が困難です。

と云う訳で、この辺り、それこそもう少し「ヒントをお願いします」。(^^;)

23353 Re:ヒントをお願いします。 アックン 2003/11/14-12:48
記事番号23352へのコメント
悲しげさん>

>「この個所 → <A>」とはメインフォームのオブジェクトであり、
 ぼくはサブフォームだと思ったんですが。

>ープ項目値でもってリンクしているので、グループ選択解除状態とい
>うことはちょっと想像が困難です。

 その点、桐の初心者さん本人がどうやって解除しているか気がかりだったので、
No.23349 で触れたのですが、サブフォームの方を解除できます。
設定方法は、メインフォーム上に配置したサブフォームオブジェクトの、
オブジェクトの属性>サブフォーム(タブ)>グループ操作を許可にしておく。
サブフォームに配置したコマンドボタンに、機能名:グループ解除 とすれば、いいようです。
ただこれだと困ったことがあって、直前のグループ状態において、
明細行に取消表示があった場合は、解除後にヘッダに取消表示が出るのですが、
明細行に取消表示がない場合ば、解除後にヘッダに取消表示が出ないです。
つーわけで、さらに工夫しないといけないようです。
ま、桐の初心者さんからの回答待ちってことで、今から昼ごはんにします。
23355 Re:ヒントをお願いします。 アックン 2003/11/14-13:47
記事番号23350へのコメント
あ、わかりました。こうすればいいや。

・フッタのグループ項目
#cond(#グループ選択状態=0,#set(時,#件数([取消])))

これで、グループ解除したときに、ヘッダに取消表示できます。
そりゃそうと、題名をなんとかせんかい? 誰かヒントください。
昼にパン食い過ぎて、くくるちい...アックン(^∞^)

23356 Re:ヒントをお願いします。 アックン 2003/11/14-13:49
記事番号23355へのコメント
あり、やっぱこれじゃだめだ。
23357 Re:ヒントをお願いします。 アックン 2003/11/14-14:34
記事番号23356へのコメント
しかたないから、最後の手段。ほんとは項目集計は時間とるからしたくないんだけど。
こうしてみました。
グループ選択を解除するきっかけにするのが、コマンドボタンの場合とすると、
機能名には何も入れないで、マウス左クリックイベントを使用。

・イベント:
手続き定義開始 コマンドボタン_1::マウス左クリック(長整数 &マウス位置[2],長整数
 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
 グループ選択解除
 項目集計 [取消]
手続き定義終了

・ヘッダのテキスト
#cond(#グループ選択状態=0 .and&有効件数>0,"取消",1,"")

・明細行のテキストボックス(取消表示)
 ソース:[取消]

・フッタでの集計は不要になります。


23358 Re:ヒントをお願いします。 うにん 2003/11/14-16:34
記事番号23352へのコメント

>「この個所 → <A>」とはメインフォームのオブジェクトであり、
>つまりは、サブフォームの明細データの項目値の中に、ひとつでもマ
>イナスのレコードがあれば(またはサブのある項目値の合計がマイナ
>スであれば)、メインフォームの<A>欄に「取消」と表示させたい?

なるほど。「項目」といってるのは実は「項目名を表示するラベル」のようです。

>しかし、だとすれば「グループ解除した状態(全一覧)で」と云う点
>がまたまた疑問を惹起します。メイン&サブフォームは、通常はグル
>ープ項目値でもってリンクしているので、グループ選択解除状態とい
>うことはちょっと想像が困難です。

解除したいのではなくて、「警告の表示なのでグループと無関係に」
ということなのではないかな?

23359 Re:ヒントをお願いします。 桐の初心者 2003/11/14-20:03
記事番号23346へのコメント
先輩諸氏のアドバイスありがとうございます。
説明が下手ですいません!<A>は「取消」を表示するテキストソースで、
明細部分が多くなっても、1件以上のマイナス処理が発生したら表示させることをしたいのです。
グループ指定でも、グループ解除でも、マイナス処理が発生したら、
この<A>の部分に表示をさせたいのが目的です。通常はなにも表示しない。
全一覧というのは、明細行が多くなっても1件以上はマイナス処理があることを認知するためです。
条件選択や、直前値、変数やら色々と試してもうまく出来ないので、アドバイスをお願いしました。
23366 Re:ヒントをお願いします。 アックン 2003/11/15-16:09
記事番号23359へのコメント
桐の初心者さん> 見本をアップしました。V9sp1版です。

ダウンロード後、ダブルクリックで自動解凍フォルダ生成。
起動ファイル:20031114Aメイン.wfm

説明は後ほど。

23367 Re:ヒントをお願いします。 アックン 2003/11/15-18:42
記事番号23366へのコメント
桐の初心者さん> こういう方法しか思いつかなくて、とにかくやってみました。
一応簡単な説明と、表やフォームの設定を書いておきますが、正確に知るには実際の各ファイルをご覧になってください。

サブフォームの明細行の取消表示は、項目[取消]の項目計算式でおこなっています。
明細行はこれだけでオーケーです。
次ぎに、メインフォームなりサブフォームのテキストオブジェクトに取消表示する方法を考えてみます。
項目[取消]に取消の文字があるかどうかは、#件数([取消]) で正確にキャッチできます。

サブフォームをもう1個メインフォーム上に配置して、元からあるサブフォームと同じ編集対象表を設定します。
こうすると表が多重化します。
元からあるサブフォームのグループの有無に左右されずに、新たなサブフォームで別のグループ化をすることが可能になります。
グループ化する理由は、集計関数を使いたいからです。

全行を1個のグループにできれば、[取消]の件数を数えられます。
そこで、未定義値しか入ってない[dummy]をグループ項目に設定します。
(未定義値のグループも許可する設定がどこかにあったような気がしますが、今思い出せません。)
こうして、取消の件数を数えて、1件でもあれば、組み込み変数 &時 に代入しておきます。

元からあるサブフォームのテキストボックスや、メインフォームのテキストボックスでは、
&時 の値が 1 以上なら取消を表示し、0 なら何も表示しないようにします。
これをオブジェクト操作でおこないます。
このとき、メインフォーム上や元からあるサブフォーム上での取消表示のタイミングをとりますが、
どこをどう操作するか予測できないこともあって、タイマーイベントを使うことにしました。
ここまで、およその仕組みをだいたい理解できますか。

新たなサブフォームを必ず画面の目で見える位置に出しておいてください。
画面から隠れていると、表示が更新されませんから。

新たなサブフォームは、どうも見た目じゃまですね。(^^;
これを隠していても、サブフォームやメインフォームの表示を更新するにはどうすればいいですか?>ALL
23368 Re:ヒントをお願いします。 アックン 2003/11/15-18:45
記事番号23367へのコメント
No.23367の説明に続いて、設定の記録です。
以下、掲示板に掲載すると、半角カナが全角カナになるので、オブジェクト名などに注意なさってください。(長くなって、すみません。)

1.表:20031114Aメイン.tbl
  [伝票No][顧客名]
2.表:20031114Bサブ.tbl [数量]がマイナス値のときの例
  [伝票No][品名][単価][数量][合計]
  [取消] 項目計算式: #cond([数量]<0,"取消",1,"")
  [dummy] 項目計算式:設定なし
3.メインフォーム:20031114Aメイン.wfm
・編集対象表:20031114Aメイン.tbl
・オブジェクト
 テキスト:t1 /ソース:設定なし/ヘッダに配置/取消表示用
 サブフォーム:サブフォーム_1 /サブフォーム名:20031114Bサブ.wfm
 サブフォーム:サブフォーム_2 /サブフォーム名:20031114Cサブ多重化.wfm
・イベントファイル:20031114Aメイン.kev
  タイマー値:0.3 (任意) /設定方法:フォームのオブジェクトの属性→イベント(タブ)→「タイマー値1」
(↓)掲示板に掲載すると半角カナが全角カナになるので、注意を。
  手続き定義開始 フォーム::タイマー1()
   if( &時>0 )
     オブジェクト操作 @サブフォーム_1.@t1.ソース = "取消"
     オブジェクト操作 ハンドル=&hwindow, @t1.ソース = "取消"
   else
     オブジェクト操作 @サブフォーム_1.@t1.ソース = ""
     オブジェクト操作 ハンドル=&hwindow, @t1.ソース = ""
   end
  手続き定義終了
--------------------------------------------------
4.サブフォーム:20031114Bサブ.wfm
・編集対象表:20031114Bサブ.tbl
・オブジェクト
 グループ項目:u伝票No  /ソース:[伝票No]/ヘッダに配置
 テキスト:t1 /ソース:設定なし/ヘッダに配置/取消表示用
 テキスト:t合計_1 /ソース:[取消]/明細行に配置/取消表示用
 ( 隣の t合計 をコピーしたせいで変な名のままですが、気にしないで。)
 コマンドボタン:コマンドボタン_13 /機能名:グループ解除
 (解除を元に戻すには、メインフォーム左上のグループ操作アイコン「グループ再抽  
出」をクリックする。)
・イベントファイル:20031114Bサブ.kev /使用イベントなし
--------------------------------------------------
5.サブフォーム:"20031114Cサブ多重化.wfm"
・編集対象表:20031114Bサブ.tbl
・オブジェクト
 グループ項目:u取消  /ソース:[dummy]
 テキスト:t取消  /ソース:[取消]  /明細行に配置
 テキスト:テキスト_16 /ソース:#set(時,#件数([取消]))  /ヘッダに配置
・イベントファイル:20031114Bサブ多重化.kev /使用イベントなし
23369 Re:ヒントをお願いします。 桐の初心者 2003/11/16-09:46
記事番号23368へのコメント
アックンさん

親切なご教示ありがとうございます。早速試してみます。
私のまずいやり方はともかく、日常業務では似たことが結構でます。見出しで常に「表示」させるのは簡単でも、
間違いのある処理もしくは入力ミスの警告メッセージを発生させることで処理を円滑にすることは、大切だと思います・・・・
23370 Re:ヒントをお願いします。 うにん 2003/11/16-10:17
記事番号23369へのコメント

>は簡単でも、間違いのある処理もしくは入力ミスの警告メッセージを発生させることで
>処理を円滑にすることは、大切だと思います・・・・

こういう行単位で入力ミスが判別できるケースは普通もっと簡単にすますと思うんですが。
「1件以上のマイナス処理」が入力ミスなら、行制約で「マイナス」な行を入力できなくすれば十分だと思います。
今回の要望は「どこかに入力ミスがあります」と表示させてるんでわざわざ難しくしているような。
「2件以上のマイナス処理」とか「全体の合計がマイナス」を警告するような場合に必要になる処理ですよね。

戻る