HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■14350 / inTopicNo.1)  期間絞込でのエラー時対応について
  
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 09:54:05)
    2024/05/20(Mon) 17:48:46 編集(投稿者)

    桐10s Windows10を使用しています。


    日付絞り込み.TBXの項目名 日付 には ランダムに24/4/1〜24/4/30まで入力されいます。


    日付絞り込み.WFX から コマンドボタンで 期間指定絞込.WFXをモーダルフォームで開き、
    絞り込み開始日 と 絞り込み終了日 を入力して 日付絞り込み.WFXの日付を絞り込みたいと考えています。


    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]


    手続き定義開始 cmd絞込開始Click()
     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     表 "日付絞り込み.TBX"
     解除 *
     if( .not #eof )
      &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
      &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

      if( &ans = 1 )
      絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate }
      &msg = "絞り込み完了しました"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
      メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
      else
      &msg = "キャンセルしました"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
      end

     else
     &msg = "該当日が見当たりません"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
     end

    手続き定義終了


    この手続きですと、絞り込み開始日 と 絞り込み終了日 が正しく入力出来ていれば思った通りの動きになります。

    しかし、 24/4/1 〜 24/3/1 の様に間違えた入力でも絞り込めてしまいます。
    (絞り込みの結果は、絞り込んだ状態で全て未定義状態です)


    良く考えてみると

    else
     &msg = "該当日が見当たりません"
      メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
     end

    このプログラムは書いているだけで、エラー判断が無いので意味をなしてない気がします・・・


    絞り込み期間入力を間違えた時 処理を止める方法が分かる方 お時間がある時教えて頂けたら幸いですm(__)m


引用返信 [メール受信/OFF] 削除キー/
■14351 / inTopicNo.2)  Re[1]: 期間絞込でのエラー時対応について
□投稿者/ まさやん -(2024/05/20(Mon) 11:46:00)
    2024/05/20(Mon) 12:06:56 編集(投稿者)
    2024/05/20(Mon) 11:47:45 編集(投稿者)
    2024/05/20(Mon) 11:47:12 編集(投稿者)

    >
    > しかし、 24/4/1 〜 24/3/1 の様に間違えた入力でも絞り込めてしまいます。
    > (絞り込みの結果は、絞り込んだ状態で全て未定義状態です)
    >

    > 絞り込み期間入力を間違えた時 処理を止める方法が分かる方 お時間がある時教えて頂けたら幸いですm(__)m


    上記の場合

    関数で  #日数というのがあります。

    詳しくは ヘルプを

    絞り込み始まる前に

    #日数で 求められた結果が  0以下の時の
    メッセージ が出るように したらどうかな?

     #日数(24/4/1,24/3/1) の結果は  マイナスの結果になります
引用返信 [メール受信/OFF] 削除キー/
■14352 / inTopicNo.3)  Re[1]: 期間絞込でのエラー時対応について
□投稿者/ AK -(2024/05/20(Mon) 15:33:19)
    2024/05/23(Thu) 08:38:45 編集(投稿者)


    > 良く考えてみると
    >
    > else
    >  &msg = "該当日が見当たりません"
    >   メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    >  end

    > このプログラムは書いているだけで、エラー判断が無いので意味をなしてない気がします・・・
    > 絞り込み期間入力を間違えた時 処理を止める方法が分かる方 お時間がある時教えて頂けたら幸いですm(__)m

    これは、「絞り込み開始日 と 絞り込み終了日 が正しく入力出来ていれば思った通りの動き」をしますが、

    「該当するレコードが無い場合」メッセージを表示させるためのものです。

    例えばモーダルフォームで
    絞り込み開始日 → 令和6年4月 1日
    絞り込み終了日 → 令和6年4月19日

    と入力して実行したとしても、主フォーム側の該当する日(レコードが)がない場合に表示するするというものです。

    試しに、主フォーム側のレコードの4/20〜4/30をわざと削除して、上記の日で絞り込みを実行するとわかるはずです。

    > このプログラムは書いているだけで、エラー判断が無いので意味をなしてない気がします・・・

    そのためこの考えは誤りになります。
    また、そもそも意味をなさないコードはそもそも書く必要がありませんので当然書きません。
    これは後にコードを修正する場面で余計な作業や誤解を招くのを避けるためです。

    今回のジェダイの桐さんの意図する質問を少し読み替えると、

    ユーザが間違った入力をした場合に、コマンドボタンを実行させないという風に読み替えた方がスマートかな?と感じました。

    私がいつも職場で使用している例をお伝えします。

    入力した日付の情報を変数で比較させます。

    今回の場合、イベントコードを書かない方法です。

    これはイベントコードでも対応できますが後々のコードの回収作業が発生するとと、ふぉーむがわで出来ることをわざわざコードにしなくてもよくて非常にシンプルです。

    コマンドボタンの機能名とパラメータリストを修正します。

      機能名  機能名パラメータリスト

    1 実行条件  &mRefinementStartDate≦&mRefinementEndDate

    2 表示 

    3 手続き実行 cmd絞込開始Click

    これだけでそもそもコマンドボタンが実行できなります。
    視覚的にすぐにユーザが自分の間違いに気づくはずです。
    またフォーム側のテキストボックスを工夫(例えば背景色を赤にするとか・・・)とさらにユーザに親切なフォームになると思います。

    最後に掲載されているコードは、メッセーボックスを押しただけで必ず絞り込みを実行するコマンドなっていて制御構文の条件の順番が間違っていましたので以下のように修正すると、思うように動くと思います。
    また、コードを拝見しましたが適切な空行の挿入、それとif文の入れ子はしっかり字下げ(私の場合は2文字基準)しないと今後コードを修正する時に読みづらくなるので実践された方が良いと思います。


    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

     if( &ans = 1 )
          
       表 "日付絞り込み.TBX"
         解除 *
         絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate } 

         if( .not #eof )
             
           &msg = "絞り込み完了しました"
           メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
           メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
           
         else
           
           &msg = "該当日が見当たりません"
           メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
           
         end
       
     else

       &msg = "キャンセルしました"
       メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない

     end


    手続き定義終了

    追伸

    私も十数年前にONnojiさんに指導を受けて今に至ります。
    今回のジェダイの桐さんの質問を拝見すると当時の自分に似ていると思いながらコメントしました・・・(^^;

引用返信 [メール受信/OFF] 削除キー/
■14353 / inTopicNo.4)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 17:39:37)
    まさやんさん

    > 関数で  #日数というのがあります。
    >
    > #日数で 求められた結果が  0以下の時の
    > メッセージ が出るように したらどうかな?
    >
    >  #日数(24/4/1,24/3/1) の結果は  マイナスの結果になります


    日数と言う関数知りませんでした。
    教えて頂いた関数を使用しイメージ通りの結果を求める事が出来ました。

    回答ありがとうございましたm(__)m
解決済み!
引用返信 [メール受信/OFF] 削除キー/
■14354 / inTopicNo.5)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/20(Mon) 17:48:12)
    AKさん


    > ユーザが間違った入力をした場合に、コマンドボタンを実行させないという風に読み替えた方がスマートかな?と感じました。
    >
    > 私がいつも職場で使用している例をお伝えします。
    >
    > 入力した日付の情報を変数で比較させます。
    >
    > 今回の場合、イベントコードを書かない方法です。
    >
    > これはイベントコードを書くと改修作業が不要になるため、見通しもよくて非常にシンプルです。
    >
    > コマンドボタンの機能名とパラメータリストを修正します。
    >
    >   機能名  機能名パラメータリスト
    >
    > 1 実行条件  &mRefinementStartDate≦&mRefinementEndDate
    >
    > 2 表示 
    >
    > 3 手続き実行 cmd絞込開始Click
    >
    > これだけでそもそもコマンドボタンが実行できなります。
    > 視覚的にすぐにユーザが自分の間違いに気づくはずです。
    > またフォーム側のテキストボックスを工夫(例えば背景色を赤にするとか・・・)とさらにユーザに親切なフォームになると思います。


    こういうやり方もあるんですね!
    分かりやすいし、効果テキメンでした(^^♪

    この方式を取り入れようと思います!


    > 最後に掲載されているコードは、メッセーボックスを押しただけで必ず絞り込みを実行するコマンドなっていて制御構文の条件の順番が間違っていましたので以下のように修正すると、思うように動くと思います。
    > また、コードを拝見しましたが適切な空行の挿入、それとif文の入れ子はしっかり字下げ(私の場合は2文字基準)しないと今後コードを修正する時に読みづらくなるので実践された方が良いと思います。


    アドバイスありがとうございます!
    意識して読みやすいプログラムを書くようにしているのですが、
    まだまだですね(^^;

    if else が入ってくると、途端に書き方や構文が難しくなります・・・
    解説ありがとうございました!


    > 追伸
    >
    > 私も十数年前にONnojiさんに指導を受けて今に至ります。
    > 今回のジェダイの桐さんの質問を拝見すると当時の自分の似ていると思いながらコメントしました・・・(^^;


    p.s.


    まさか AKさん からコメントが着くとは思いもよりませんでした!
    嬉しい限りです(^^)/


    桐のレベルはまだまだですが、今プログラムを考えるのが楽しくなってきました!


    ONnojiさんや掲示板で回答を下さる方々に教えて貰いながら、少しづつですが
    プログラムが上達してきました!


    皆さんの対応が有難いですm(__)m


引用返信 [メール受信/OFF] 削除キー/
■14355 / inTopicNo.6)  Re[3]: 期間絞込でのエラー時対応について
□投稿者/ AK -(2024/05/20(Mon) 19:36:28)
    2024/05/23(Thu) 08:45:27 編集(投稿者)


    > 桐のレベルはまだまだですが、今プログラムを考えるのが楽しくなってきました!
    > ONnojiさんや掲示板で回答を下さる方々に教えて貰いながら、少しづつですが
    > プログラムが上達してきました!

    ジェダイの桐さん

    余計なお世話ですが参考までに私の経験上良かったと思えるイベント勉強方法お伝えします。^^

    1 少ないコードでもよいですが、毎日実際にコードを書いてたくさんエラーコードを学ぶとよい
     
     これは初心者、初級者のうちは非常に大事なことだと思います。
     特に勉強と一緒で人が書いたコードを読んで理解している「つもり」は一番ダメです。
     どんなに短いコードでも実際に自分で書いて、どういう結果や挙動になるか経験して失敗をいっぱい重ねることが上達への近道だと思います。

    2 トレース出力ウィンドウを上手に使う。

     桐にはトレース出力ウィンドウがありますのでこれを上手に使うことも上達の近道だと思います。
     設定方法はヘルプを参照してください。
     これを使用する理由はシンプルで、変数の値の変化を目視で確認できるからです。
     最初のうちは変数値の変化が頭の中でよく理解できていないことが多いと思います。
     そしてコードを書くことに慣れてくると、何れループ処理を勉強すると思いますがここが初級者にとって結構高いハードルになると思います。
     その際、トレース出力ウィンドウを利用するとループ処理のインクリメントなど変数の値の変化を確認できるので非常に便利です。
     また、上達していけばいくほどプログラムのコード量が増えて、プログラム自体が肥大化していくのでシステムを改修する場合などトレース出力ウィンドウは必須になると思います。

     私はイベントを勉強し始めて長い間ループ処理が苦手で悩まされましたので是非活用してみてください。

     以下は先ほどのイベントコードで変数を確認するためのサンプルです。

    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }
     変数宣言 自動, 整数  { &TraceON = 1 } ← この変数を追加

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

     条件(&TraceON) トレース出力_&ans

     ↑ この1行で何がわかるのか?というと、メッセージボックスで「はい」を押したときの戻り値【 1 】 が変数&ansに代入されたことがトレース出力ウィンドウで確認できます。
     
     今度は試しに「いいえ」を押下するとどうなるか?是非実際にコードを書いて試してみて下さい。

     そうすると、if( &ans = 1 )の制御文の意味がわかるはずです。


    3 最後に私の苦い経験を踏まえて・・・

     私もイベントコードを書き始めの頃コードを書くことで色々できることが増えて楽しくてしかたがありませんでした。(^^;
     しかし、ここに罠が潜んでいます。
     コマンドボタンの設定で済む単純なことも含め、なんでもかんでもコードを書いてしまっていした。
     ONnoijさんの言葉を借用させていただくと、「イベント過多症候群」です。
     最近私は10年ほど前に所属していた部署で作成した桐アプリを改修する作業をチョコチョコしています。
     そこで目にした10年前の自分が書いた基本ができていない汚いコードと、コマンドボタンで対応できる無駄コードの多さに我ながらうんざりしています。(^^;
     
     この経験を振り返るとイベントコードはどうしても自分がしたいことが実現できな時にだけ使用するということだと思います。
     当たり前といえば当たり前ですが、私はこれが出来ていなくて10年前の自分自身にうんざりしています。(^^;

     桐はそもそもそんなにイベントコードを書かなくてもたいていのことはコマンドボタンの機能で何とかなる場合が多いです。
     今回の質問もそれで対応できましたので、なんとなく理解していただけるのではないでしょうか?
     
     なので、もちろん経験や慣れの問題もありますのでその見極めは難しいかもしれませんが、私のようにならないように気に留めておいていただくといいかなと思います。

     今後のジェダイの桐さんの質問を私も楽しみにしております。

     長文、駄文失礼しました。<(_ _)>
引用返信 [メール受信/OFF] 削除キー/
■14356 / inTopicNo.7)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ まさやん -(2024/05/20(Mon) 19:39:54)

    >
    >   機能名  機能名パラメータリスト
    >
    > 1 実行条件  &mRefinementStartDate≦&mRefinementEndDate
    >


    実行条件の使い方 

    私も 勉強になりました。
    一括処理で組んでた 仕事用のプログラムを
    イベントに移行中です。

    実に コマンドが 約半分くらいになるかもです。

    if else end
    この使い方すれば 実に明解そのものですね
    ありがとうございました。
引用返信 [メール受信/OFF] 削除キー/
■14358 / inTopicNo.8)  Re[1]: 期間絞込でのエラー時対応について
□投稿者/ ONnoji -(2024/05/20(Mon) 23:34:32)
    2024/05/21(Tue) 13:18:51 編集(投稿者)
    2024/05/21(Tue) 07:58:02 編集(投稿者)
    2024/05/20(Mon) 23:54:01 編集(投稿者)

    当方は土日月とPCの前に居ませんでしたので詳細はよく理解していません。

    すでに解決済みになってとのこと慶祝です。

    なので余計なことは言わないように致しますが・・・

    ちなみに、実に気になったことがあったので、老婆心ながら投稿させていただきます。

     ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

    このツリーを読んで居る時、

    > if( .not #eof )
    >  if( &ans = 1 )

    というコマンドの記述を発見しました。

    これは私( ONnoji )の感想ではありますが、

    なぜ "if" と 丸括弧"(" の間に半角または全角の空白が無いのだろうか?????

    DOS桐もWin桐もコマンドの文法(シンタックス)は同じです。

    しかし、なぜか?Win桐では[if]コマンドと条件式の間に半角または全角の空白を挿入しない例を多々見受けます。

    これは、DOS桐/Win桐の言語仕様ではアウトです。

     【転載】[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方
      一括処理コマンドを記述するときは、コマンド名と最初のパラメータのあいだを、1文字以上の空白文字で区切ります。
                       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    しかし、実際にはエラーしないので、「まぁ、いいっか!」となっちゃう開発者が多いと思いますね。

    ********************************
    桐の if コマンドは、関数ではないので、エクセルの関数のような記述は誤りですゾ。動くか動かないかは別として・・・
    ********************************

    開発者は一度でも[桐 - ヘルプ]を読むべきですね。

    Win桐という製品の仕様を説明しているヘルプを読まずに、単純にエラーが出ないという理由でスルーするという態度は当然良くないですよ。

    交通規則を守りましょう!と同じですよ。これは事故に遭遇するかしないかとは別問題でモラルの問題です。柔らかな機械でも同じです。

    p.s.

    転載【[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方】

    ひとつの一括処理コマンドは、コマンド名といくつかのパラメータで構成されています。
    たとえばつぎの例では、最初の「表」がコマンド名、そのうしろの下線部分がパラメータです。

      表 "Jusho.tbx",表番号=1,モード=共有更新

    ・一括処理コマンドを記述するときは、コマンド名と最初のパラメータのあいだを、1文字以上の空白文字で区切ります。空白文字は半角でも全角でもかまいません。
     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    ・パラメータとパラメータのあいだは、半角または全角のコンマ(,)で区切ります。

引用返信 [メール受信/OFF] 削除キー/
■14360 / inTopicNo.9)  Re[4]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/21(Tue) 14:50:56)
    AKさん


    こんにちは(^^)/


    > 1 少ないコードでもよいですが、毎日実際にコードを書いてたくさんエラーコードと学ぶとよい
    >  


    これは本当にそう思います。
    実際にやってみるから、自分の経験に繋がり力となるんですよね。


    > 2 トレース出力ウィンドウを上手に使う。


    >  以下は先ほどのイベントコードで変数を確認するためのサンプルです。
    >
    > 手続き定義開始 cmd絞込開始Click()
    >
    >  変数宣言 自動, 数値  { &ans }
    >  変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }
    >  変数宣言 自動, 整数  { &TraceON = 1 } ← この変数を追加
    >
    >  &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
    >  &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
    >  メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans
    >
    >  条件(&TraceON) トレース出力_&ans
    >
    >  ↑ この1行で何がわかるのか?というと、メッセージボックスで「はい」を押したときの戻り値【 1 】 が変数&ansに代入されたことがトレース出力ウィンドウで確認できます。
    >  
    >  今度は試しに「いいえ」を押下するとどうなるか?是非実際にコードを書いて試してみて下さい。
    >
    >  そうすると、if( &ans = 1 )の制御文がわかるはずです。


    書き方教えて頂きありがとうございますm(__)m


    トレース出力の結果です。


    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 1
    一括実行:手続きを実行終了しました
    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 2
    一括実行:手続きを実行終了しました


    はい を選択した時  → &ans : 1

    いいえ を選択した時 → &ans : 2


    が 変数に入っていました!
    こうやって確認するんですね!


    (そういえば以前、ONnojiさんに教えて頂いたプログラムの中にもトレース出力がありました。)



    >
    > 3 最後に私の苦い経験を踏まえて・・・
    >

    >  イベントコードはどうしても自分がしたいことが実現できな時にだけ使用するということだと思います。
    >  当たり前といえば当たり前ですが、私はこれが出来ていなくて現在10年前の自分にうんざりしています。(^^;
    >
    >  桐はそもそもそんなにイベントコードを書かなくてもたいていのことはコマンドボタンの機能で何とかなる場合が多いです。
    >  今回の質問もそれで解決できましたので、なんとなく理解していただけるのではないでしょうか?
    >  


    本当にびっくりしました。
    実行条件 初めて使いました。
    この機能名すごく便利ですね(^^♪
    まず、プログラムを考える前に機能名で解決出来る方法がないかしっかり考えた方が良いと言う事が本当の意味で理解出来ました!


    今回は本当にありがとうございましたm(__)m
引用返信 [メール受信/OFF] 削除キー/
■14361 / inTopicNo.10)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ ジェダイの桐 -(2024/05/21(Tue) 14:58:55)
    2024/05/21(Tue) 14:59:27 編集(投稿者)

    ONnojiさん


    こんにちは!


    > > if( .not #eof )
    > >  if( &ans = 1 )
    >
    > というコマンドの記述を発見しました。
    >
    > これは私( ONnoji )の感想ではありますが、
    >
    > なぜ "if" と 丸括弧"(" の間に半角または全角の空白が無いのだろうか?????
    >
    >
    >  【転載】[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方
    >   一括処理コマンドを記述するときは、コマンド名と最初のパラメータのあいだを、1文字以上の空白文字で区切ります。
    >                    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    >
    > ********************************
    > 桐の if コマンドは、関数ではないので、エクセルの関数のような記述は誤りですゾ。動くか動かないかは別として・・・
    > ********************************
    >
    > p.s.
    >
    > 転載【[桐 - ヘルプ]→ 一括処理・イベント処理 → 入門 → 一括処理の実行 → 一括処理の書き方】
    >
    > ひとつの一括処理コマンドは、コマンド名といくつかのパラメータで構成されています。
    > たとえばつぎの例では、最初の「表」がコマンド名、そのうしろの下線部分がパラメータです。
    >
    >   表 "Jusho.tbx",表番号=1,モード=共有更新
    >
    > ・一括処理コマンドを記述するときは、コマンド名と最初のパラメータのあいだを、1文字以上の空白文字で区切ります。空白文字は半角でも全角でもかまいません。


    こう言うルール(所作)があったのですね・・・
    今後気を付けて、プログラム作成していきます。


    プログラムを作る上で、変なクセ で覚えてしまう前に教えて頂けたので
    助かりました!


    ありがとうございますm(__)m

引用返信 [メール受信/OFF] 削除キー/
■14362 / inTopicNo.11)  Re[5]: 期間絞込でのエラー時対応について
□投稿者/ ONnoji -(2024/05/21(Tue) 15:21:33)
    2024/05/21(Tue) 15:30:56 編集(投稿者)

    横レスで失礼します。m(__)m

    初級者の人にたくさんの情報をお届けすると消化不良になるかもしれませんが・・・(^^ゞ

    トレース出力コマンドの表示内容って読み難いですよねぇ〜。

    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 1
    一括実行:手続きを実行終了しました
    一括実行:メイン処理を実行開始しました
    一括実行:メイン処理を実行終了しました
    一括実行:手続き"cmd絞込開始Click( )"を実行開始しました
        :&ans : 2
    一括実行:手続きを実行終了しました

    ↑この程度ならばなんとか判読可能です。

    しかし、もっと手続きの入れ子が深くなると・・・ほぼ解読不能です。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・

    そこで、拙作:整形ユーティリティ utx_list3 を利用すると、次のように読み易くしてくれます。

    ※【多遊】さんのダウンロードコーナー #206 イベント処理の整形ユーティリティ 第 3.91 版  for 桐10 / 桐10s / 桐sSL でダウンロード出来ます。

    ┌when メイン処理を実行開始しました
    └end

    ┌when 手続き"cmd絞込開始Click( )"を実行開始しました

    │ :&ans : 1

    └end

    ┌when メイン処理を実行開始しました
    └end

    ┌when 手続き"cmd絞込開始Click( )"を実行開始しました

    │ :&ans : 2

    └end

    とね。(*^^)v

    もちろん、これは必須ではありませんので、こんなことも出来るんだなぁ〜と思っていただければ十分ですよ。

    こちら
     ↓
    桐の釣魚大全のトップ > 整形ユーティリティ教書 基本編
    整形ユーティリティ教書 基本編 ― 桐のアプリケーション開発を支援するユーティリティ
    http://silicon7565.html.xdomain.jp/guide/guide_ReformUtility_Part1.htm

    40 [トレース出力]ウィンドウと[トレース出力]コマンド
    http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section40

    40.3 整形ユーティリティでトレース出力結果を整形する
    http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section40


引用返信 [メール受信/OFF] 削除キー/
■14363 / inTopicNo.12)  Re[1]: 期間絞込でのエラー時対応について
□投稿者/ ONnoji -(2024/05/21(Tue) 18:47:00)
    2024/05/21(Tue) 18:52:49 編集(投稿者)

    やはり変なので確認させてください。

    ■期間指定絞込.kex 

    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]



    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

    ┌if( &ans = 1 )

    │ 表 "日付絞り込み.TBX"
    │ 解除 *
    │ 絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate }

    │┌if( .not #eof )
    ││
    ││ &msg = "絞り込み完了しました"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││ メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
    ││
    │├else
    ││
    ││ &msg = "該当日が見当たりません"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││
    │└end

    │ 編集表 "日付絞り込み.TBX"
    │ 終了 表 編集対象表

    ├else

    │ &msg = "キャンセルしました"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない


    └end


    手続き定義終了


    "日付絞り込み.wfx(編集対象表:日付絞り込み.tbx)"から"期間指定絞込.wfx"をモーダルフォームで開き

      名札 メイン
       変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

       表 "日付絞り込み.TBX"
       &mRefinementStartDate = [日付]
       &mRefinementEndDate = [日付]
      *

    ですから、次のような

    日付絞り込み.WFX

      機能名      機能パラメータリスト
     1 表示
     2 モーダルフォーム 期間指定絞込.wfx
     3 なし
     4 なし

      主ウィンドウ                モーダルフォーム(ダイアログボックス)
     ┌──────────────────┐   ┌──────────────────┐
     │日付絞り込み.wfx          │   │期間指定絞込.wfx          │
     │                  │   │                  │
     │                  │   │ 期間指定絞込.kex         │
     │機能名      機能パラメータリスト   │   │ 表 "日付絞り込み.TBX"      │
     │1 表示               │   │  :               │
     │2 モーダルフォーム 期間指定絞込.wfm┝━━━┥  :               │
     │                  ┝━━━┥  :               │
     │                  │   │ 編集表 "日付絞り込み.TBX"    │
     │                  │   │ 終了 表 編集対象表 ← エラー │
     └───────┬──────────┘   └──────────────────┘
             │
           編集対象表
             │
     ┌───────┴─────────┐
     │日付絞り込み.TBX         │ 
     │                 │
     │                 │
     │                 │
     │                 │
     │                 │
     └─────────────────┘

    こういう構成なわけです。

    でも

     編集表 "日付絞り込み.TBX"
     終了 表 編集対象表

    なんてやるとエラーでしょ。

     KU1066:イベントハンドラでは表示中の表を閉じることはできません

       ※お前は既に日付絞り込み.wfxで開いている。

    そちらでは、エラーになりませんでしたか???


引用返信 [メール受信/OFF] 削除キー/
■14364 / inTopicNo.13)  Re[2]: 期間絞込でのエラー時対応について
□投稿者/ AK -(2024/05/21(Tue) 19:12:34)
    >  編集表 "日付絞り込み.TBX"
    >  終了 表 編集対象表
    >
    > なんてやるとエラーでしょ。
    >
    >  KU1066:イベントハンドラでは表示中の表を閉じることはできません
    >
    >    ※お前は既に日付絞り込み.wfxで開いている。
    >
    > そちらでは、エラーになりませんでしたか???

    ONnojiさん
    ジェダイの桐 さん

    大変失礼しました。
    私の確認ミスで余計混乱させるコードを掲載してしまいました。
    ジェダイの桐さんの質問をよくよく読んでいないままコードを修正してしまい、かつ、実行していませんでした。

    ONnojiさんのおっしゃる通りです。
    上記のコードはもちろん不要であり、私の誤りです。

    訂正してお詫びいたします。

    正しくは、以下のとおりです。

    ※ ONnojiさんすいません、コードをコピーして使わせていただきます。


    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]



    手続き定義開始 cmd絞込開始Click()

     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     &msg = "絞り込み開始日 と 絞り込み終了日 が選択されました。"
     &msg = &msg + "\n日付 " + #文字列( &mRefinementStartDate ) + " 〜 " + #文字列( &mRefinementEndDate ) + "を絞り込みますか?"
     メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 2, 制御文字展開 = する, &ans

    ┌if( &ans = 1 )

    │ 表 "日付絞り込み.TBX"
    │ 解除 *
    │ 絞り込み [日付] { &mRefinementStartDate<=[]<=&mRefinementEndDate }

    │┌if( .not #eof )
    ││
    ││ &msg = "絞り込み完了しました"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││ メソッド呼び出し 戻り値= &実行リターン, @cmd閉じる. 実行()
    ││
    │├else
    ││
    ││ &msg = "該当日が見当たりません"
    ││ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない
    ││
    │└end


    ├else

    │ &msg = "キャンセルしました"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = しない

    └end


    手続き定義終了



引用返信 [メール受信/OFF] 削除キー/
■14365 / inTopicNo.14)  Re[2]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/21(Tue) 19:15:37)
    2024/05/22(Wed) 15:32:55 編集(投稿者)
    2024/05/22(Wed) 02:39:48 編集(投稿者)

    これは個人( ONnoji )の感想です。

    以下のようにモーダル側で、

     表 "日付絞り込み.TBX"

    なんてコマンドを実行するのは一番駄目なアプローチだと思いますよ。


      主ウィンドウ                 モーダルフォーム(ダイアログボックス)
     ┌──────────────────┐   ┌──────────────────┐
     │日付絞り込み.wfx          │   │期間指定絞込.wfx          │
     │                  │   │                  │
     │                  │   │ 期間指定絞込.kex         │
     │機能名      機能パラメータリスト   │   │ 表 "日付絞り込み.TBX"      │
     │1 表示               │   │  :               │
     │2 モーダルフォーム 期間指定絞込.wfm┝━━━┥  :               │
     │                  ┝━━━┥  :               │
     │                  │   │ 編集表 "日付絞り込み.TBX"    │
     │                  │   │ 終了 表 編集対象表 ← エラー │
     └───────┬──────────┘   └──────────────────┘
             │
           編集対象表
             │
     ┌───────┴─────────┐
     │日付絞り込み.TBX         │ 
     │                 │
     │                 │
     │                 │
     │                 │
     │                 │
     └─────────────────┘

    だって、"日付絞り込み.TBX"は、すでに開いているのですから、余計なチョッカイを出しちゃ面倒なんですよ。
                   ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ここは、主ウィンドウ側の"日付絞り込み.kex"で

     変数宣言 固有,整数{ &gAnswer }
     変数宣言 固有,日時{ &gRefinementStartDate, &gRefinementEndDate }

    として、

     &gRefinementStartDate = [日付]
     &gRefinementEndDate  = [日付]

    と値を代入して(代入しなくてもいいけれど・・・)

    1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    3.もし、終了状態( &gAnser )がOK(1)なら実行

    ですね。

    例えば、

     オブジェクト名: cmd期間指定絞込
     標題     : 期間指定絞込

      機能名      機能パラメータリスト
     1 なし       #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
     2 モーダルフォーム 期間指定絞込.wfx
     3 実行条件     ( &gAnswer = 1 )
     4 手続き実行    cmd期間指定絞込Click

    とかね。(^^ゞ ※あくまでもアバウトな例示です。詳細を含んだ例示ではありませんよ。

    こうすると、モーダルフォーム(ダイアログボックス)は、変数を操作するだけに専念できるでしょう。
          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    そして、主ウィンドウでは、絞り込みに専念できるというわけです。
        ・・・・・・・・・・・・・・・・・・・

     ※そもそも、絞り込む機能は編集対象があるフォームの機能であって、NULLフォームが絞り込む機能を持つ必要はありません。
           ・・・・・・・・・・・・・・・・・・・・・     ・・・・・・・・・・・・・・・・・・

     ※NULLフォームは、編集対象があるフォームへ情報を伝えて、編集対象があるフォームが自ら実行すればよいのです。
      ・・・・・・・・・・・・・・・・・・・・・・・・・・             ・・・・・・・・・

    キモは、モーダル側で主ウィンドウの編集対象表の面倒を見ないことですよ。

    モーダルは単に変数の値を編集するだけ。※固有変数・共通変数・組み込み変数を編集します。

    そして、モーダルで編集された変数の値を参照して絞り込みを実行するのは、主ウィンドウ側のの手続きということです。

    こうすれば、機能分担がハッキリして、保守が楽になるということですよ。(^^ok

    モーダルフォームは補助ウィンドウなのですから、主役の仕事を横取りしてはいけないんですゾッ!。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    モジュール化は手続きのレベルだけでなく、フォームのレベルでも必要なんですよ。

    そう考えれば、自然に気が付きますよ。

    p.s.

    > モジュール化は手続きのレベルだけでなく、フォームのレベルでも必要なんですよ。

    モジュールとは交換可能な構成部分という意味ですね。

    だから、僭越にもモーダルフォームが主ウィンドウの範囲を対象にした機能を有していると、一体化しちゃって交換可能じゃなくなっちゃうでしょう。
                                              ・・・・・・・・・・・・・・・・・・・・・
    なので、モーダルフォームは主ウィンドウに対して余計なチョッカイを出してはいけないのですよ。

     <参考>

      桐の釣魚大全のトップ > フォームアプリケーション教書 第1部
      19.5 それぞれのフォームアプリケーションは独立しているので直接的な干渉をしない
      http://silicon7565.html.xdomain.jp/guide/guide_Part1.htm#section19-5

    p.s.

    今回のように、NULLフォーム側で主人であるフォームの編集対象表を直接ハンドルするという発想は「フロー駆動型」です。

    「目からウロコのデータベース桐プログラミング入門」の「3 イベント駆動型のプログラミング」で論じたように、「フロー駆動型」は一括処理の考え方です。

    実は、過去の掲示板には「フォーム+イベント処理」のアプローチでありながら、心の中では「フロー駆動型」の例が非常に多いのです。
               ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    「フロー駆動型」とは、プログラムの作者がすべてを支配するということです。
               ・・・・・・・・・・・・・・・・・

    今回の件は、心の中では「フロー駆動型」の典型的な例だと思いますよ。

    例えが分り難いでしょうが、『ホビットの冒険』や『指輪物語』の一つの指輪(ひとつのゆびわ、One Ring)の持ち主のようになってはいけないのです。

    心の中に「フロー駆動型」の誘惑があると、「イベント駆動(イベントドリブン)」としての「フォーム+イベント処理」のアプローチが出来なくなります。

      【指輪の銘】 一つの指輪 出典: フリー百科事典『ウィキペディア(Wikipedia)』
      一つの指輪は全てを統べ、
      一つの指輪は全てを見つけ、
      一つの指輪は全てを捕らえて、暗闇の中に繋ぎとめる。
      (One Ring to rule them all, One Ring to find them, One Ring to bring them all, and in the darkness bind them)

    「イベント駆動(イベントドリブン)」のためには、一つの指輪を滅びの山に捨ててください。

    と、『指輪物語』を読んだことが無い人にはワカラナイことを書きましたが・・・(^^ゞ

    改めて、今回の件は、心の中では「フロー駆動型」の典型的な例だと思いますよ。

    「イベント駆動型」では、複数のフォームが存在しても、それらは独立していなければならないのです。

    そして、プログラムの作者がすべてを支配するというアプローチは放棄することです。
        ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    これが「制御主体の反転」という意味です。

    そして、それこそが「イベント駆動型」の極意・真髄だと思いますよ。


引用返信 [メール受信/OFF] 削除キー/
■14366 / inTopicNo.15)  Re[3]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 10:52:26)
    2024/05/22(Wed) 11:26:00 編集(投稿者)
    2024/05/22(Wed) 11:09:16 編集(投稿者)

    > 「イベント駆動型」では、複数のフォームが存在しても、それらは独立していなければならないのです。
    > そして、プログラムの作者がすべてを支配するというアプローチは放棄することです。
    >     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    > これが「制御主体の反転」という意味です。
    > そして、それこそが「イベント駆動型」の極意・真髄だと思いますよ。

    なかなか意味が伝わらないと思われるので、「制御主体の反転」を具体的に示そうと思います。

    まず、二種類の制御の主体を考えます。

    1.制御主体がプログラムの作者であるケース

    2.制御主体がソフトウェアの仕掛けであるケース

    1のケースは、プログラムの作者がすべてを支配するということです。

    これは「フロー駆動型」です。

    「フロー駆動型」の典型は、まさしく一括処理です。

    一括処理では、プログラムの作者がプログラムの流れをすべて記述しますね。

    一括処理では、プログラムのスタートから、プログラムのフィニッシュまでの全て記述しなければなりません。

    つまり、プログラムの作者がすべてを支配しているわけで、制御権はプログラムの作者が握っているのです。

    2のケースは、ピタゴラスイッチやドミノ倒しのようにソフトウェアを作るということです。

    ご存じのように、ピタゴラスイッチやドミノ倒しでは、あるきっかけによって、連続的に動作が継続するという仕掛けです。

    「イベント駆動型(イベントドリブン)」では、これらの仕掛けを必要な数だけ用意するということになります。

    従って制御の主体は、ソフトウェアの仕掛けということになります。

    「フォーム+イベント処理」では、ソフトウェアの仕掛けとして次のものがあります。

    ・コマンドボタンの機能
    ・イベント発生の設定とイベントハンドラ

    これらを駆使して個々の操作に対応する仕掛けを複数個作りあげて、

    フォームが開いた時点で待機(アイドリング)するというのが「イベント駆動型(イベントドリブン)」です。

    ということで、この状態を「制御主体がソフトウェアの仕掛けである」と呼ぶことにしましょう。

    以上の説明を読んでいただければ、「制御の主体」が1と2では異なっていると理解できるでしょう。

    私( ONnoj )は、この事を「制御主体の反転」と呼んでいるのでした。

    p.s.

    > 実は、過去の掲示板には「フォーム+イベント処理」のアプローチでありながら、心の中では「フロー駆動型」の例が非常に多いのです。

    DOS桐や桐ver.7で一括処理でアプリケーションを作っていた人達の多くが「制御主体の反転」に気が付いていないと思います。

    だから、過去の掲示板には、外見が「フォーム+イベント処理」でありながら、中身が一括処理のような例が非常に多く見つかると思います。

    それを、心の中では「フロー駆動型」と表現した次第です。

    p.p.s.

    > ご存じのように、ピタゴラスイッチやドミノ倒しでは、あるきっかけによって、連続的に動作が継続するという仕掛けです。
    > 「イベント駆動型(イベントドリブン)」では、これらの仕掛けを必要な数だけ用意するということになります。

    「イベント駆動型(イベントドリブン)」の場合には、フォームに用意されている機能に精通している必要があります。

    しかし、プログラムの作者がすべてを支配するというアプローチに慣れている人達はコマンドに精通しているんですね。

    そう、まさしくコマンド命ですから、フォームに用意されている機能には無知で、まるで一括処理のようなアプローチをしてしまうのです。
                     ・・・・・・・・・・・・・・・・・・

    つまり、「制御主体の反転」に気付いていないために、余計に泥沼にハマって抜け出せない状態に陥るのですよ。

引用返信 [メール受信/OFF] 削除キー/
■14367 / inTopicNo.16)  Re[3]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/22(Wed) 16:28:16)
    ONnojiさん


    こんにちは!



    >  表 "日付絞り込み.TBX"
    >
    > なんてコマンドを実行するのは一番駄目なアプローチだと思いますよ。


    これは、


    名札 メイン
     変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }

     表 "日付絞り込み.TBX"
     &mRefinementStartDate = [日付]
     &mRefinementEndDate = [日付]


    ここの 表 "日付絞り込み.TBX" の事でしょうか?


    それとも、

    手続き定義開始 cmd絞込開始Click()
     変数宣言 自動, 数値  { &ans }
     変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }

     表 "日付絞り込み.TBX"


    この 表 "日付絞り込み.TBX" の事でしょうか??


    はたまた、両方でしょうか???


    確かに 日付絞り込み.TBX は開いているのにな・・・っとは思っていたんです。
    但し、これは漠然とした 違和感でしかありませんでした。


    やっぱり、考え方としておかしいですよね(^^;


    そこで、準備段階として


    > ここは、主ウィンドウ側の"日付絞り込み.kex"で
    >
    >  変数宣言 固有,整数{ &gAnswer }
    >  変数宣言 固有,日時{ &gRefinementStartDate, &gRefinementEndDate }

    この部分と

    >  オブジェクト名: cmd期間指定絞込
    >  標題     : 期間指定絞込
    >
    >   機能名      機能パラメータリスト
    >  1 なし       #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
    >  2 モーダルフォーム 期間指定絞込.wfx
    >  3 実行条件     ( &gAnswer = 1 )
    >  4 手続き実行    cmd期間指定絞込Click


    この部分を作成しました。


    しかし、


    > ↑これらの変数は、フォーム定義の変数管理で宣言する方が[オブジェクトの属性]で参照できるのでベターです。
    >          ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・


    ここで ちょっと躓き中です。
    固有変数はフォーム定義の変数管理で保存出来ないのですかね??
    初めて知ったのですが、変数ファイル(.vax)と言うものがあるのですね(^^♪

    そのフォームを初めて立ち上げる時に読み込んで使用する感じなのでしょうか??


    ここは直ぐに分からない(理解出来ない)ので一旦置いていて、


    > 1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    > 2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    > 3.もし、終了状態( &gAnser )がOK(1)なら実行


    今日は ここを ずっと考えています!


    1.これは理解が間違っていなければ → #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])

    で対応出来ていると思います。


    だから

    >&gRefinementStartDate = [日付]
    >&gRefinementEndDate  = [日付]

    >と値を代入して(代入しなくてもいいけれど・・・)


    代入しなくても良いと言われているのだろうと理解しています。
    (違う意味なのかも知れませんが・・・(^^;)


    2.固有変数(または共通変数)で終了状態( &gAnser )も受取る


    これが 本日最大のテーマ です(^^)/


    これは

    日付絞り込み.wfx ←→ 期間指定絞込.wfx 間で 変数の受け渡しをすれば
    解決するのではと考え

    フォームアプリケーション教書 第2部 36 フォームとフォーム間での変数受け渡しを熟読しております(^^ゞ


    変数の受け渡しを理解出来れば
    3.もし、終了状態( &gAnser )がOK(1)なら実行

    が 日付絞り込み.wfx 側の cmd期間指定絞込 で絞り込みが出来るのだろうと思っています。

    ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇


    日付絞り込み.wfx で cmd期間指定絞込 をクリックする

    期間指定絞込.wfx で 絞り込み期間を入力して cmd絞込開始 をクリックする
    期間指定絞込.kex で メッセージボックスで &gAnswer = 1 にする(つまり はい を押す)

    日付絞り込み.wfx に戻って 期間指定絞込.wfx での &gAnswer = 1 を引き取り 日付絞り込み.kex で cmd期間指定絞込Click の手続き実行を行う


    ◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇

    流れは 恐らくこうなのでしょうが、実現方法(プログラムの書き方)が分かりません・・・


    だけど、変数の受け渡し方法をまず考え理解します!


    これは、私の中で結構なターニングポイントだと考えていて、これが理解出来れば

    >モーダルフォーム(ダイアログボックス)は、変数を操作するだけに専念できる
    >主ウィンドウでは、絞り込みに専念できる

    これが実現出来る訳で、この考え方はかなり応用範囲が広いのじゃないかと、直感的に思っています(^^)/


    上記の状況でしたので、返信が遅くなりました。
    もうちょっと、粘ってみます!


    どうしても答えが導き出せそうにない時は、SOSを出させてくださいm(__)m



引用返信 [メール受信/OFF] 削除キー/
■14368 / inTopicNo.17)  Re[4]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 16:34:27)
    2024/05/22(Wed) 16:55:49 編集(投稿者)

    > 上記の状況でしたので、返信が遅くなりました。
    > もうちょっと、粘ってみます!
    > どうしても答えが導き出せそうにない時は、SOSを出させてくださいm(__)m

    ジェダイの桐さんの最初のお試しは、全然お話にならないです。悪しからず。

    これ以上時間を費やしても時間の無駄になるだけです。

    当方でサンプルを用意しましたので、30分以内にアップします。


    p.s.

    >> ↑これらの変数は、フォーム定義の変数管理で宣言する方が[オブジェクトの属性]で参照できるのでベターです。

    ↑この文言は当方の誤りでした。

    サンプルを作っている時に気が付きました。

    > 例えば、
    >  オブジェクト名: cmd期間指定絞込
    >  標題     : 期間指定絞込
    >   機能名      機能パラメータリスト
    >  1 なし       #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
    >  2 モーダルフォーム 期間指定絞込.wfx
    >  3 実行条件     ( &gAnswer = 1 )
    >  4 手続き実行    cmd期間指定絞込Click
    > とかね。(^^ゞ ※あくまでもアバウトな例示です。詳細を含んだ例示ではありませんよ。

    ↑これはアバウトなイメージです。あくまでもイメージです。




引用返信 [メール受信/OFF] 削除キー/
■14369 / inTopicNo.18)  Re[5]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 16:48:38)
    2024/05/22(Wed) 18:13:16 編集(投稿者)

    添付ファイルを解凍すると次のファイルがあります。

    期間指定絞込.kex
    期間指定絞込.wfx
    日付絞り込み.kex
    日付絞り込み.tbx
    日付絞り込み.wfx


    ■日付絞り込み.wfx

     フォーム
     ├ ファミリ
     ├ ワークスペース
     ├ フォームヘッダ部
     │ ├ a
     │ ├ lbl日付
     │ └ cmd期間指定絞込
     └ フォーム明細部
       ├ 行セレクタ
       └ txt日付

     オブジェクト名: cmd期間指定絞込
     標題     : 期間指定絞込

      機能名      機能パラメータリスト
     1 表示
     2 なし       #代入( &gRefinementStartDate, [日付] ), #代入( &gRefinementEndDate, [日付] )
     3 モーダルフォーム "期間指定絞込.wfx"
     4 手続き実行    cmd期間指定絞込Click



    ■日付絞り込み.kex

    名札  メイン
     変数宣言 固有,整数{ &gAnswer }
     変数宣言 固有,日時{ &gRefinementStartDate, &gRefinementEndDate }



    手続き定義開始 cmd期間指定絞込Click( )
     変数宣言 自動,文字列{ &title = "cmd期間指定絞込Click( )", &msg }
     変数宣言 自動,整数 { &traceON }

     &traceON = 1
     条件 ( &traceON ) トレース出力 &title + "を実行開始しました"

    ┌if ( &gAnswer = 1 )

    │ &msg =       "debug モーダルフォームから戻りました"
    │ &msg = &msg + "\n\n&gAnswer = " + #str( &gAnswer )
    │ &msg = &msg + "\n\n&gRefinementStartDate = " + #日時文字列( &gRefinementStartDate, 0, 4, 0 )
    │ &msg = &msg + "\n\n&gRefinementEndDate  = " + #日時文字列( &gRefinementEndDate,  0, 4, 0 )
    │ &msg = &msg + "\n\n変数の値は以上です"
    │ &msg = &msg + "\n\n変数の値を利用して絞り込む部分はご自身で作成してください (^^ok"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する

    ├else

    │ &msg =       "debug モーダルフォームから戻りました"
    │ &msg = &msg + "\n\n&gAnswer = " + #str( &gAnswer )
    │ &msg = &msg + "\n\n&gRefinementStartDate = " + #日時文字列( &gRefinementStartDate, 0, 4, 0 )
    │ &msg = &msg + "\n\n&gRefinementEndDate  = " + #日時文字列( &gRefinementEndDate,  0, 4, 0 )
    │ &msg = &msg + "\n\n変数の値は以上です"
    │ メッセージボックス  &title, &msg, アイコン = i, ボタン指定 = 1, 制御文字展開 = する
    └end

     条件 ( &traceON ) トレース出力 &title + "を実行終了しました"
    手続き定義終了


    ■期間指定絞込.wfx

     フォーム
     ├ ファミリ
     ├ ワークスペース
     │ └ cmdStartup
     ├ フォームヘッダ部
     │ └ tタイトル
     ├ フォーム明細部
     │ ├ txtgRefinementStartDate
     │ │ └ lblgRefinementStartDate
     │ └ txtgRefinementEndDate
     │   └ lblgRefinementEndDate
     └ フォームフッタ部
       ├ cmdOK
       └ cmdキャンセル


     オブジェクト名: cmdStartup
     標題     : 開始時実行コマンド:cmdStartup

      機能名   機能パラメータリスト
     1 訂正
     2 なし
     3 なし
     4 なし

     オブジェクト名: cmdOK
     標題     : OK

      機能名   機能パラメータリスト
     1 実行条件  ( &gRefinementStartDate <= &gRefinementEndDate )
     2 なし    #代入( &gAnswer, 1 )
     3 閉じる
     4 なし

     オブジェクト名: cmdキャンセル
     標題     : キャンセル

      機能名   機能パラメータリスト
     1 閉じる
     2 なし
     3 なし
     4 なし


    ■期間指定絞込.kex

    名札 メイン

     **---- 変数が宣言されていなければ変数を宣言する ------**
     条件 ( #配列要素数( "gAnswer" )       <> 0 ) 変数宣言 固有,整数{ &gAnswer }
     条件 ( #配列要素数( "gRefinementStartDate" ) <> 0 ) 変数宣言 固有,日時{ &gRefinementStartDate }
     条件 ( #配列要素数( "gRefinementEndDate" )  <> 0 ) 変数宣言 固有,日時{ &gRefinementEndDate }
     **---- 変数が宣言されていなければ変数を宣言する ------**

     &gAnswer = 0 /* 初期値は0:キャンセル */


836×523 => 250×156

1716386255.jpg
/65KB
引用返信 [メール受信/OFF] 削除キー/
■14370 / inTopicNo.19)  Re[6]: モジュール化はフォームのレベルでも必要
□投稿者/ ジェダイの桐 -(2024/05/22(Wed) 17:12:53)
    ONnojiさん


    >  オブジェクト名: cmdOK
    >  標題     : OK
    >
    >   機能名   機能パラメータリスト
    >  1 実行条件  ( &gRefinementStartDate <= &gRefinementEndDate )
    >  2 なし    #代入( &gAnswer, 1 )
    >  3 閉じる
    >  4 なし
    >
    >  オブジェクト名: cmdキャンセル
    >  標題     : キャンセル
    >
    >   機能名   機能パラメータリスト
    >  1 閉じる
    >  2 なし
    >  3 なし
    >  4 なし


    ありがとうございます。

    cmdOK と cmdキャンセル でしたか・・・
    #代入( &gAnswer, 1 ) 確かに &gAnswer = 1 ですね。


    分かってしまえは、こういう考え方かとあっけないですね(T_T)


    かなり勉強になりました!


    ありがとうございましたm(__)m
引用返信 [メール受信/OFF] 削除キー/
■14371 / inTopicNo.20)  Re[7]: モジュール化はフォームのレベルでも必要
□投稿者/ ONnoji -(2024/05/22(Wed) 17:26:11)
    2024/05/22(Wed) 18:07:04 編集(投稿者)

    > cmdOK と cmdキャンセル でしたか・・・
    > #代入( &gAnswer, 1 ) 確かに &gAnswer = 1 ですね。
    > 分かってしまえは、こういう考え方かとあっけないですね(T_T)

    ウィンドウにはある程度のパターンがあるんですよ。

    これは主ウィンドウvs補助ウィンドウ(モーダル)のパターンです。

    パターンは多くないですからすぐに覚えてしまいますよ。

    それにしても、そちらが提示した内容ですが、どこの掲示板を参考にしたのでしょうかね。

    まあ、つまらない詮索は止めにしますが、

    昔の掲示板には、格好は「フォーム+イベント処理」であっても、気持ちは一括処理の例が非常に多いのでよくよく吟味してくださいね。


    p.s.

    >>なんてコマンドを実行するのは一番駄目なアプローチだと思いますよ。
    > これは、
    > 名札 メイン
    >  変数宣言 局所, 日時 { &mRefinementStartDate, &mRefinementEndDate }
    >
    >  表 "日付絞り込み.TBX"
    >  &mRefinementStartDate = [日付]
    >  &mRefinementEndDate = [日付]
    > ここの 表 "日付絞り込み.TBX" の事でしょうか?
    > それとも、
    > 手続き定義開始 cmd絞込開始Click()
    >  変数宣言 自動, 数値  { &ans }
    >  変数宣言 自動, 文字列 { &title = "cmd絞込開始Click()", &msg }
    >
    >  表 "日付絞り込み.TBX"
    > この 表 "日付絞り込み.TBX" の事でしょうか??
    > はたまた、両方でしょうか???

    両方です。

    > 確かに 日付絞り込み.TBX は開いているのにな・・・っとは思っていたんです。
    > 但し、これは漠然とした 違和感でしかありませんでした。
    > やっぱり、考え方としておかしいですよね(^^;

    これはほぼ一括処理と同じアプローチです。

    「フォーム+イベント処理」では、ピタゴラスイッチやドミノ倒しのようにプロクラムを作ってください。


    >>↑これらの変数は、フォーム定義の変数管理で宣言する方が[オブジェクトの属性]で参照できるのでベターです。

    この部分は当方の誤りでした。

    何故ならば、当方はグローバル変数(固有・共通)をほぼ100%使わないからです。

    だから、タラレバを書いてしまいました。m(__)m

    > そのフォームを初めて立ち上げる時に読み込んで使用する感じなのでしょうか??
    > ここは直ぐに分からない(理解出来ない)ので一旦置いていて、
    >>1.固有変数(または共通変数)でモーダル側でも値が参照できるようにして
    >>2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    >>3.もし、終了状態( &gAnser )がOK(1)なら実行

    百聞は一見にしかずですからサンプルを動かしてください。


    > 今日は ここを ずっと考えています!
    > 1.これは理解が間違っていなければ → #代入( &gRefinementStartDate, [日付]), #代入( &gRefinementEndDate, [日付])
    > で対応出来ていると思います。
    > だから
    > >&gRefinementStartDate = [日付]
    > >&gRefinementEndDate  = [日付]
    > >と値を代入して(代入しなくてもいいけれど・・・)
    > 代入しなくても良いと言われているのだろうと理解しています。
    > (違う意味なのかも知れませんが・・・(^^;)

    そうですが、初期値が入っていた方が入力する人には親切だろうと思いますよ。

    > 2.固有変数(または共通変数)で終了状態( &gAnser )も受取る
    > これが 本日最大のテーマ です(^^)/
    > これは
    > 日付絞り込み.wfx ←→ 期間指定絞込.wfx 間で 変数の受け渡しをすれば
    > 解決するのではと考え
    > フォームアプリケーション教書 第2部 36 フォームとフォーム間での変数受け渡しを熟読しております(^^ゞ

    第2部 36で扱っている内容は、グローバル変数(固有・共通)ではなく、局所変数の受け渡しです。

    今回のサンプルは、グローバル変数(固有)を使っていますので、受け渡しではなく、参照です。
             ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    受け渡しと参照とは違う意味です。

    局所変数の受け渡しは、ウィンドウのハンドル番号が必要ですので、初級者のレベルでは難易度が最大です。

    ちなみに、形の上では「受け渡し」ですが、実際には局所変数から局所変数への値の転送(代入)ですよ。

    > だけど、変数の受け渡し方法をまず考え理解します!
    > これは、私の中で結構なターニングポイントだと考えていて、これが理解出来れば
    > >モーダルフォーム(ダイアログボックス)は、変数を操作するだけに専念できる
    > >主ウィンドウでは、絞り込みに専念できる
    > これが実現出来る訳で、この考え方はかなり応用範囲が広いのじゃないかと、直感的に思っています(^^)/

    本当の意味での変数の値の受け渡しには、局所変数(または自動変数)を使います。

    これには、ウィンドウのハンドル番号が必要ですので、初級者のレベルでは難易度が最大です。

    しかし、どうしても試したいというのであれば、INF_Framework をフォームに導入してください。

    そして、あこめの桐のプログラミング入門のトップページから

      INF_Framework:局所変数の受け渡し

    を読んでください。

    そうすれば、局所変数を使った本当に変数の値の受け渡しが試せますよ。しかも超簡単に(^^♪

    > 上記の状況でしたので、返信が遅くなりました。
    > もうちょっと、粘ってみます!
    > どうしても答えが導き出せそうにない時は、SOSを出させてくださいm(__)m

    掲示板のやり取りには行き違いも生じます。

    論より証拠で、百聞は一見にしかずです。

    まず、当方のサンプルを動かしてみてください。

引用返信 [メール受信/OFF] 削除キー/

次の20件>

トピック内ページ移動 / << 0 | 1 >>

[このトピックに返信]
Mode/  Pass/

HOME HELP 新規作成 新着記事 ツリー表示 スレッド表示 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -