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

■14218 / 親記事)  レポート印刷
  
□投稿者/ maru -(2024/03/18(Mon) 06:57:54)
    windows10
    桐10sを使用しています。

    項目名 [番号]に 1から100 までの番号が振られた行データがあります。
    例えば、 1番、5番、25番の行データを 表形式でなく、1番のレポートデータ、5番のレポートデータ、25番のレポートデータを出力したいとき

     キー入力 (15,10),プロンプト=”何番を印刷しますか  ”モード=確定,上書き=する,&印刷数 ,終了状態=&終了状態

    上記のようにコマンド表示させ、入力を  1,5,25 と コンマで区切って入力した後、エンターキーを押すことによって、レポート出力したいのです。

    ヒントをご教授お願いいたします。
引用返信 [メール受信/OFF] 削除キー/
■14219 / ResNo.1)  Re[1]: レポート印刷
□投稿者/ ONnoji -(2024/03/18(Mon) 10:59:51)
    2024/03/18(Mon) 15:45:48 編集(投稿者)

    > 項目名 [番号]に 1から100 までの番号が振られた行データがあります。
    > 例えば、 1番、5番、25番の行データを 表形式でなく、1番のレポートデータ、5番のレポートデータ、25番のレポートデータを出力したいとき
    >
    >  キー入力 (15,10),プロンプト=”何番を印刷しますか  ”モード=確定,上書き=する,&印刷数 ,終了状態=&終了状態
    >
    > 上記のようにコマンド表示させ、入力を  1,5,25 と コンマで区切って入力した後、エンターキーを押すことによって、レポート出力したいのです。

    当方は一括処理(履歴を含む)は一切使っていないので、

    [キー入力]コマンドの替わりにフォームのテキストボックスに入力してコマンドボタンを実行する例をご案内します。
    ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    これは単に入力の方法が異なるだけす。

    入力された文字列型データ(例:"1,5,25")を元にして、レポート印刷をする処理(流れ)は一括処理でも[フォーム+イベント処理]でも同じです。
                              ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    コンマで区切られた文字列を左から順番に移動して、
    ・・・・・・・・・・・・・・・・・・・・・・・

    該当するレコードを探索(絞り込み)して、レポート印刷するというロジックなので繰り返し処理が必要になります。

    この繰り返しのロジックは、一括処理(履歴を含む)でも、[フォーム+イベント処理]でも同じです。

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

    コンマ区切りの.kex
    コンマ区切りの.WFX ← これを開いてください
    コンマ区切りの.TBX
    コンマ区切りの.RPX

    なお、添付ファイルは数日を目途に削除しますので、ダウンロードはお早めに願います。

    p.s.

    <参考>

    名札  メイン
     変数宣言 局所,文字列{ &m印刷レコードList }



    手続き定義開始 cmdレポート印刷Click( )
     変数宣言 自動,文字列{ &icon, &title = "cmdレポート印刷Click( ))", &msg }
     変数宣言 自動,文字列{ &stringList }
     変数宣言 自動,整数 { &ans }

     &stringList = #trim( &m印刷レコードList, 4 )
    ┌if ( &stringList <> #u )

    │ &msg =    "コンマで区切った番号のレコードをレポート印刷しますか?"
    │ &msg = &msg + "\n\n"+ &stringList
    │ メッセージボックス  &title, &msg, アイコン = ?, ボタン指定 = 2, 制御文字展開 = する, &ans

    │┌if ( &ans = 1 ) /* OK:1 キャンセル:2 */
    ││
    ││ 手続き実行 prcレポート印刷( &stringList )
    │└end
    ├else

    │ &msg =      "レポート印刷できません"
    │ &msg = &msg + "\n\n<ヒント>"
    │ &msg = &msg + "\n\nコンマで区切った番号を入力してから実行してください"
    │ メッセージボックス  &title, &msg, アイコン = !, ボタン指定 = 1, 制御文字展開 = する
    └end

    手続き定義終了

    手続き定義開始 prcレポート印刷( 文字列 &stringList )
     変数宣言 自動,文字列{ &icon, &title = "prcレポート印刷( )", &msg }
     変数宣言 自動,文字列{ &string }
     変数宣言 自動,文字列{ &expression }
     変数宣言 自動,文字列{ &comma = #jis( #hex("2C") ) } /* これはコンマ( , ) */
     変数宣言 自動,整数 { &tblNum, &multiTblNum }
     変数宣言 自動,整数 { &i, &loop, &step = 1 }

     &tblNum = #is表
     多重化
     &multiTblNum = #is表

     &stringList = #半角( &stringList )
     &loop = 1 + #文字数( &stringList ) - #文字数( #文字置換( &stringList, &comma, #u ) )
    ┌繰り返し &i = 1, &loop, &step

    │ &string = #対応文字列( &stringList, &i )
    │ トレース出力 _&i, " ", _&string

    │ 解除 *
    │ &expression = &string
    │ 絞り込み [番号]_&expression
    │ トレース出力 _&expression, " ", _( .not #eof )

    │┌if ( .not #eof )
    ││
    ││ レポート印刷  "コンマ区切りの.rpx",プレビュー = する
    │├else
    ││
    ││ &msg =      "レポート印刷できません"
    ││ &msg = &msg + "\n\n<ヒント>"
    ││ &msg = &msg + "\n\n[番号]が " + &string + " のレコードが見つかりません"
    ││ メッセージボックス  &title, &msg, アイコン = !, ボタン指定 = 1, 制御文字展開 = する
    │└end
    └繰り返し終了

     終了 表 &multiTblNum
     編集表 &tblNum /* 必要ならば */

    手続き定義終了

    p.p.s.

    なお、絞り込み [番号]_&expression は、[比較式自身を変数:&expression に代入]して[絞り込み]コマンドを実行しています。

    しかし、慣れていない人が多いと思いますので、ご自身が慣れていらっしゃる方法で[絞り込み]コマンドを実行してください。

    例えば、

     &expression = &string
     絞り込み [番号]_&expression

    は、

     絞り込み [番号]{ #num( &string ) } /* [番号]が数値型なので、数値型に変換して比較します */

    と同じです。

    ※21.5 [絞り込み(検索):比較式]コマンドの高度な使い方|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
     http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section21-5

引用返信 [メール受信/OFF] 削除キー/
■14220 / ResNo.2)  Re[2]: レポート印刷
□投稿者/ maru -(2024/03/18(Mon) 18:45:43)
    早速のアドバイスありがとうございます。
    参考の手続きの流れ、研究させていただきます。
引用返信 [メール受信/OFF] 削除キー/
■14221 / ResNo.3)  Re[3]: レポート印刷
□投稿者/ ONnoji -(2024/03/18(Mon) 23:07:07)
    2024/03/18(Mon) 23:37:22 編集(投稿者)

    老婆心ながら、補足を・・・(^^ゞ

    サンプルでは、絞り込みを

     &expression = &string
     絞り込み [番号]_&expression

    または

     絞り込み [番号]{ #num( &string ) } /* [番号]が数値型なので、数値型に変換して比較します */

    のように、1件ずつ行っています。

    これって、超面倒臭く感じたかもしれませんね。(^^ゞ

    もちろん、やり方によっては "1,5,25" を元にして一発で絞り込むことも可能です。
         ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    しかし、なぜそうしなかったのかというと、

    例えば、もしも、"1,5,25,999" のように、該当しない値 "999"が含まれている場合、

    4レコード絞り込まれずに、3レコード絞り込まれますが、

    その場合に絞り込みに失敗した値 "999"の失敗情報はフィードバックされません。
         ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    ということで、面倒ながら、"1" → "5" → "25" → "999" とコンマで区切られた文字列を左から1件ずつ調べている次第です。

    なお、サンプルでは多重化していますが、レコード移動が見苦しくなければ、多重化はしなくてもOKですよ。
                       ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    p.s.

    今回の "1,5,25" のようにコンマで区切って指定するという印刷の場合のUI(ユーザインターフェース)は普通に見受けられますが、

    桐のフォームならば、フォーム上でチェックボックスのオンで指定するというUI(ユーザインターフェース)も可能かと思いますよ。

    おそらく、チェックボックスのオンで指定するUI(ユーザインターフェース)の方が直感的だと思います。

    しかし、もちろん、個人個人の好みがあるので、最終的にはどちらとも決められませんが・・・

引用返信 [メール受信/OFF] 削除キー/
■14222 / ResNo.4)  Re[4]: レポート印刷
□投稿者/ ONnoji -(2024/03/19(Tue) 14:34:19)
    2024/03/19(Tue) 15:29:21 編集(投稿者)

    > サンプルでは、絞り込みを
    >
    >  &expression = &string
    >  絞り込み [番号]_&expression
    >
    > または
    >
    >  絞り込み [番号]{ #num( &string ) } /* [番号]が数値型なので、数値型に変換して比較します */
    >
    > のように、1件ずつ行っています。
    >
    > これって、超面倒臭く感じたかもしれませんね。(^^ゞ
    >
    > もちろん、やり方によっては "1,5,25" を元にして一発で絞り込むことも可能です。
    >      ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    もしも、簡易的で良しというのであれば、※元々の質問の趣旨だったかな?

    次のように "1,5,25" を元にして一発で絞り込むことも可能です。※おススメはしませんけれど(^^ゞ

    手続き定義開始 cmdTestClick( )
     変数宣言 自動,文字列{ &icon, &title = "cmdTestClick( )", &msg }
     変数宣言 自動,文字列{ &stringList }
     変数宣言 自動,文字列{ &expression }

     &stringList = #trim( &m印刷レコードList, 4 )
     &stringList = #半角( &stringList )

     &expression = "#対応番号( &stringList, #str( [番号] ) ) > 0"
     解除 *
     絞り込み [番号]_&expression

     if ( .not #eof )
      レポート印刷  "コンマ区切りの.rpx",プレビュー = する
     end 

    手続き定義終了

    p.s.

    詳しくは次のwebページを参考にしてください。

     21.6 比較式の左辺と右辺の両方に計算式を指定する|桐の釣魚大全のトップ > フォームアプリケーション教書 第2部
     http://silicon7565.html.xdomain.jp/guide/guide_Part2.htm#section21-6


    p.p.s.

    もちろん、

     &expression = "#対応番号( &stringList, #str( [番号] ) ) > 0"
     解除 *
     絞り込み [番号]_&expression

    は、

     解除 *
     絞り込み [番号]{ #対応番号( &stringList, #str( [番号] ) ) > 0 }

    と同じです。

    &expression に関しては、単純に私( ONnoji )の習慣でして[比較式をリテラルに書かない]というだけですよ。(^^ゞ


引用返信 [メール受信/OFF] 削除キー/
■14226 / ResNo.5)  Re[1]: レポート印刷
□投稿者/ natsu -(2024/03/21(Thu) 00:39:31)
    > 上記のようにコマンド表示させ、入力を  1,5,25 と コンマで区切って入力した後、エンターキーを押すことによって、レポート出力したいのです。

    [番号]が定義されている表を"元表.tbl"として、この"元表.tbl"に文字列項目[ダミー]を追加してください。

    次に、キー入力で得られたコンマ区切りの文字列をCSVファイル変換を経由して、桐のテーブル"tenchi.tbl"に変換します。

    "元表.tbl"の[ダミー]に対し、置換(#表引き)で該当行にフラグを付与します。 こあとは、[ダミー]をフラグあり行で絞り込んでレポート印刷実行です。
    "元表.tbl"の[ダミー]フラグの初期化や絞り込み解除、中間ファイルの削除などはお好みでどうぞ。

    最近はエクセルVBAばっかりで桐のコマンドをすっかり忘れてしまいましたが、桐はデータベースだけあってスクリプトの行数が少なくてすみますね。

    変数宣言 固有,文字列{ &印刷数 }
    変数宣言 固有,数値{ &終了状態 }
    キー入力 (15,10),プロンプト=”何番を印刷しますか  ”モード=確定,上書き=する,&印刷数 ,終了状態=&終了状態

    印字開始 "INSATSU.csv"
    印字 "X," + &印刷数
    印字終了
    ファイル変換 CSV,"INSATSU.csv","INSATSU.tbl",項目名行=あり,自動設定=する,データ開始行=1
    書き出し 転置,"tenchi.tbl",データ型=文字列,*
    表 "tenchi.tbl"
    項目属性変更 変更, [X],{,"整数"}
    項目属性変更 追加, {"Y","文字列"}
    置換 [Y]="●"
    表 "元表.tbl"
    置換 [ダミー]=#表引き([番号],=,"tenchi.tbl",[X],[Y])


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



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/

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

- Child Tree -
- Antispam Version -