過去の桐井戸端BBS (桐ver.9)
29127 入力後イベントと同じ効果を表示状態で発生させたい MJK 2005/02/22-10:20
1.任意の期間に土・日が何日あって差引勤務日数が何日あるか、というのを計算させるフォームを作っています。

2.フォーム(編集表1)に次の日付入力テキストがあります。
Y、Y2、Y3
M、M2、M3
D、D2、D3

3.それぞれのテキストオブジェクトには、

(テキストYの場合)
「手続き定義開始 Y::入力後(参照 文字列 &編集文字列,長整数 &モード,参照 長整数 &入力継続)
&ATAI=#数値(&編集文字列)
編集表 2
絞り込み [期間]=1
置換 [年]=&ATAI
絞り込み解除
編集表 1
手続き定義終了」

・・・のように、YならYの項目に値が入ると、編集表2を操作する入力後イベントを9つ(Y〜D3)記述しています。
※日付を年・月・日で分けているのはそれぞれに入力した値に意味を持たせる必要があるので、
例えば"H17/02/22"のようにはしていません。

3.これを編集で入れるときは問題ないのですが、前に入力したデータを読み込んで使うような場合は、
当然入力後イベントが発生しないので、編集表2に反映させることができません。

4.9回キーをたたいて発生させればすむ問題ですが、何か別な方法があるでしょうか?

29128 Re:入力後イベントと同じ効果を表示状態で発生? 宮城 2005/02/22-11:38
記事番号29127へのコメント
MJKさん、こんにちは。

そもそも「入力後」イベントに着目されたのはなぜでしょうか。
この段階ではテキストYのソースは更新されていません。
&編集文字列でむりやり処理なさってますが、どういったらいいのか、
入力が確定していないのに、入力完了を前提とする処理を進めるのはいかにも変に思われます。

「入力後」イベントはもっぱら入力内容のチェック等を行うイベントです。

使うとしたら「ソース値更新」イベントでしょうね。

さらに「Y」入力→年で絞込み、「M」入力→月で絞込み、「D」入力→日で絞込みというのは、
たとえば「M」で13が入力されたらどうするか、「M」2で「D」30が入力されたらどうするか等、いやらしい問題を生じます。

やはり[年月日]項目を追加し、「Y」「M」「D」の入力そろったところで日時値生成させ、
この[年月日]のテキスト領域の「ソース値更新」イベントに 2の表の絞込み処理を記述するのが筋かと思います。

(テキスト[年月日]領域は見えないようにしておくとか。)

29129 Re:入力後イベントと同じ効果を表示状態で発生? うにん 2005/02/22-11:58
記事番号29127へのコメント

>「手続き定義開始 Y::入力後(参照 文字列 &編集文字列,長整数 &モー
>ド,参照 長整数 &入力継続)
>&ATAI=#数値(&編集文字列)
>編集表 2
>絞り込み [期間]=1
>置換 [年]=&ATAI
>絞り込み解除
>編集表 1
>手続き定義終了」

これだけ見ると入力した値はイベントの処理条件に関係ない(項目値として入るだけ)なので、
なんでイベントでやる必要があるのかわかりませんが、

>1.任意の期間に土・日が何日あって差引勤務日数が何日あるか、というの
>を計算させるフォームを作っています。

土日の数を数えるだけなら項目計算式で十分ですよね?

29130 Re:入力後イベントと同じ効果を表示状態で発生? MJK 2005/02/22-13:31
記事番号29128へのコメント
宮城さん、早速のご指摘ありがとうございます。

>そもそも「入力後」イベントに着目されたのはなぜでしょうか。
>また、・・・「Y」入力→年で絞込み、「M」入力→月で絞込み、「D」入力
→日で絞込みというのは、・・・

「・・・・・・
&ATAI=#数値(&編集文字列)
編集表 2
絞り込み [期間]=1
置換 [年]=&ATAI
絞り込み解除
編集表 1
手続き定義終了」

のところをもう少し詳しく説明しますと、

@まず、土日を除いた3種類の勤務期間を計算する必要がありました。

A表2は土日数を計算するtblであり、[期間]=1の行、[期間]=2の行、[期間]=3の行と3の期間の3行で固定されています。

B入力後イベントを使用する目的は、表2で指定した期間を選んだ後、表2の[年][月][終了日]にここで得た値を入れることです。

C[年][月][終了日]がそろってその[年]年[月]月1日から[終了日]までの土日数を除いた勤務日数を計算項目で出すようにしています。

Dさらに表1のフォームの「確定」ボタンで、Cの計算結果を表引きします。

表1のフォームは実は、氏名・給与・諸手当・その他情報を入力する項目が多くあり、
件の土日数の部分については別テーブルで計算させようとしたとき、
このようなまわりくどいことになったというのが実際のところです。

>使うとしたら「ソース値更新」イベントでしょうね。

なるほど。

>・・・「D」30が入力されたらどうするか等・・・

「2月30日」の場合は、表2に、

[月末日]:#数値(#右側文字列(#日付(#月末(#文字列([年]+1988)+"年"+#文字列([月])+"月1日”),1),2))

という計算項目を設けて月の月末日を固定し、"[月末日]<「D」"のときの場合を条件式で入れてあります。


29131 Re:入力後イベントと同じ効果を表示状態で発生? MJK 2005/02/22-13:50
記事番号29129へのコメント
うにんさん、ご指摘ありがとうございます。

>・・・・・・イベントの処理条件に関係ない(項目値として
>入るだけ)なので、なんでイベントでやる必要があるのかわかりませんが、

これについては、宮城さんへのRe:をご覧ください。

>土日の数を数えるだけなら項目計算式で十分ですよね?

これも同Re.にあるとおり、3種類の勤務期間について別表でそれぞれを出す必要があったからです。

29132 Re:入力後イベントと同じ効果を表示状態で発生? うにん 2005/02/22-14:21
記事番号29130へのコメント
>C[年][月][終了日]がそろってその[年]年[月]月1日から[終了日]までの土日数
>を除いた勤務日数を計算項目で出すようにしています。
>
>Dさらに表1のフォームの「確定」ボタンで、Cの計算結果を表引きします。

そろって初めて意味がある計算ができるのであれば、それぞれのテキストオブジェクトのイベントよりも、
確定ボタンを押してから表引きする前に、がいいのでは。

29133 Re:解決できました MJK 2005/02/23-08:28
記事番号29127へのコメント
結局、

1.表1に次の項目を追加し、

[日付1]:#str([Y],2)+#str([M],2)+#str([D],2)

以下、[日付2]、[日付3]も同じように追加。

2.フォームの「確定」コマンドボタンで、

手続き定義開始 確定::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
&日付1=[日付1],&日付2=[日付2],&日付3=[日付3]
編集表 2
繰り返し &RPT=1,3
絞り込み [期間]=&RPT
置換 [日付]=#条件選択(&RPT=1,&日付1,&RPT=2,&日付2,&RPT=3,&日付3)
絞り込み解除
繰り返し終了
編集表 1
手続き定義終了

3.これで完璧に実行されました。

結果をリアルタイムですぐ出したいと思ったとき、すぐ「入力後イベント」というイメージにつながったのですが、
宮城さんの解説とうにんさんの指摘ですっきりすることができました。
どうもありがとうございました。

戻る