過去の桐井戸端BBS (桐ver.5)
16853 一括処理で変数に代入する方法で簡素な方法があれば教えてください 藤田輝幸 2002/08/04-11:48
みなさんこんにちは
桐5で一括処理を手がけ始めたばかり藤田といいます。

メニュー2コマンドから指定する店を選択して、その店名を&店名変数に代入したいのです。
以下のような感じで、代入する事は出来たのですが、店名が増えると「名札 n店」の
記述をずっと繰り返して書く必要があります。
自分で書いていても、もっと簡素な方法があるのではと思うのですが思い浮かびません。

皆さんのお知恵をお願いします。

以下に一括処理の一部を記載します。
宜しくお願いします。



名札 印刷選択
 メニュー2 &処理,6,(4,28)," 印刷対象店舗選択 ","A店,B店,C店,D店,その
他,全 件,中 止"
  分岐(&処理=1) A店
  分岐(&処理=2) B店
  分岐(&処理=3) C店
  分岐(&処理=4) D店
  分岐(&処理=5) その他
  分岐(&処理=6) 全件
  分岐(&処理=7) 処理終了
 分岐 印刷選択

名札 A店
代入 &店名=”A店"
分岐 個別支所

名札 B店
代入 &支所=”B店"
分岐 個別支所

名札 C店
代入 &支所=”C店"
分岐 個別支所

名札 D店
代入 &支所=”D店"
分岐 個別支所




以上です宜しくお願いします。

16856 Re:一括処理・変数の代入方法で? KH 2002/08/04-12:45
記事番号16856へのコメント
藤田輝幸さん、こんにちわ。

 店の名前だけが違って、処理する事(この場合印刷?)はすべて同じなので
それを簡単にという意味なのか、店の名前が違えば処理内容も違うのを簡単にしたいということですか。

16862 Re:一括処理・変数の代入方法で? 藤田輝幸 2002/08/04-16:41
記事番号16853へのコメント
KHさんこんにちは
藤田です

内容が中途半端でしたね。失礼しました。(ちなみに、桐5です)
店の名前で抽出をしたいんです。
その為に店名を変数で持たせれば楽かなと思ったんです。

店舗名で抽出後、印刷の設定や確認メッセージや何かで、10行ぐらい使うんですが、
当初、それを店舗数だけ書いていたんです。
メッセージなどが変われば、その都度、店舗分全部を変えなきゃいけないし、
不便だと思い、とりあえず、店舗名を変数にしてみました。

店舗を変数として持つことで、多少楽になったので、
もう一つつっこんで、変数の設定も楽を出来ないかと思ったのです。

よろしくお願いします。
16864 Re:一括処理・変数の代入方法で? KH 2002/08/04-18:42
記事番号16862へのコメント
藤田輝幸、こんばんわ

>店舗を変数として持つことで、多少楽になったので、もう一つつっこんで、変数の設定も
>楽を出来ないかと思ったのです。


メニュー2後に次の1行で変数の店名には代入されますが・・・こんな事ではない?

&店名=#CASE(&処理,"A店","B店","C店","D店",・・・)
16873 Re:一括処理・変数の代入方法で? 幅田 2002/08/05-09:16
記事番号16864へのコメント
KHさん
藤田さん
こんにちは。

KHさんの#CASEを使うやりかたはスマートですね。
私は今まであんまりこの関数は使わなかったのですが、
これから利用させていただきます。

KHさんのコメントをヒントに藤田さんの最初の一括処理を書き直してみました。

なお、できるだけ「分岐」コマンドは使わないで
「繰り返し」コマンドや「手続き実行」コマンドなどを
使われた方が後々のためにいいと思います。

分岐コマンドだと、行ったっきりでどこへ帰るのかわかりにくくなります。
帰り道を確かめずもせずに山林の原野に入り込んで、道に迷ってしまうようなもの。
戻ってくるところがはっきりしていれば、後のメンテナンスも楽ですし、
別の人が見てもわかりやすくなりますから。
(作った本人でさえ、時間がたつとわかりにくくなることもあります。)


以下
「名札 印刷選択」もメインメニューなどから手続き実行コマンドで呼び出されているという前提です。


===
名札 印刷選択

 繰り返し
 メニュー2 &処理,6,(4,28)," 印刷対象店舗選択 ","A店,B店,C店,D店,その
他,全 件,中 止"

  &店名=#CASE(&処理,"A店","B店","C店","D店","その他","全 件","中 止")

   条件 (&店名="A店") 手続き実行 個別支所
   条件 (&店名="B店") 手続き実行 個別支所
   条件 (&店名="C店") 手続き実行 個別支所
   条件 (&店名="D店") 手続き実行 個別支所
   条件 (&店名="その他") 手続き実行 その他
   条件 (&店名="全 件") 手続き実行 全件
   条件 (&店名="中 止") 繰り返し中止

 繰り返し終了

手続き終了



名札 個別支所
*支所の印刷など・・
手続き終了

名札 その他
*その他の印刷など・・・
手続き終了

名札 全件
*全件の印刷など・・・
手続き終了
===


個別支所もその他も全件も&店名の違いだけで
同じ処理ですむようならもっと簡単に書くことができます。


===
名札 印刷選択

 繰り返し
 メニュー2 &処理,6,(4,28)," 印刷対象店舗選択 ","A店,B店,C店,D店,その
他,全 件,中 止"

  &店名=#CASE(&処理,"A店","B店","C店","D店","その他","全 件","中 止")

   条件 (&店名<>"中 止") 手続き実行 個別支所
   条件 (&店名="中 止") 繰り返し中止

 繰り返し終了

手続き終了

名札 個別支所
*支所の印刷など・・
手続き終了


16874 Re:一括処理・変数の代入方法で? KH 2002/08/05-11:02
記事番号16873へのコメント
幅田さんいつもお世話になっています

>KHさんの#CASEを使うやりかたはスマートですね。
>私は今まであんまりこの関数は使わなかったのですが、
>これから利用させていただきます。

 幅田さんにそう言って頂けるのは大変光栄です。

 お気付きのこととは思いますが、メニュー2を抜けようとして、
ESCキーを押した場合、&処理にはゼロが代入されてしまいますが、
#CASEでは、A店をセットしてしまいます。
条件(&処理=0) ・・・ で処理が必要です。
口幅ったいことを申して済みませんでした。
16875 Re:一括処理・変数の代入方法で? 藤田輝幸 2002/08/05-12:33
記事番号16874へのコメント
幅田さん、KHさんはこんにちは

お二人のアドバイスでずいぶんスマートになり、また、いい勉強になります。

>個別支所もその他も全件も&店名の違いだけで
ここでは出てきてないのですが、選択コマンドで[店舗名]で選択させてるんです。
ですから、"全 件"は、その選択コマンドを使わないで処理しており、
"その他"は
選択[店舗名]{#未定義}
で求めているので、すべてが&店名に入らないのです。
あ、というか、&店名=#未定義 &店名=定義 と入れればいいのでしょうか?
今晩にでも試してみます。


すみませんKHさんの"条件(&処理=0) ・・・"という記述は

条件 (&店名=”全 件”)手続き実行 全体
条件 (&店名=”中 止”)繰り返し中止
の次の行に
条件(&処理=0) 繰り返し中止
と入れればいいのでしょうか?(すみません、夜まで試すことかできないので)


よろしくお願いします。
藤田
16879 別の手法例です MIT 2002/08/05-17:55
記事番号16853へのコメント
藤田輝幸さん

ご質問の趣旨から外れますが、「店名が増えると・・」とおっしゃるように
一括処理中に固有の記述があると後々面倒ですね。
例えば
[店名]文字列型
[並び順]整数
の2項目を持つ表を別に作成して(仮に店名表とします)
メニュー2コマンドの代わりに処理行指定コマンドを使うのは如何でしょうか?
具体的にはメニュー2コマンドで店名を指定する個所を

表 ”店名表”
整列 {[並び順]昇順}
処理行指定 &変数、表
代入 &店名=[店名]

とします。

実際には
ESCを押した時(&変数=0)どうするか?
終端行を指定した時にどうするか?
なども考慮する必要があると思います。
なお、候補の並び順は[並び順]に並んでほしい順番の数字を入力します。

この方法だと代入される&店名の値をうまく使えば、今後店名が増減した時でも
店名表を編集するだけで対応できる一括処理を作成する事もできると思います。

繰り返し、ご質問の趣旨から外れて申し訳ありませんが
ご参考まで。MIT

16880 Re:一括処理・変数の代入方法で? 悲しげ 2002/08/05-18:03
記事番号16874へのコメント
どもっ、KHさん
重箱モードですが(^^;)

>&店名=#CASE(&処理,"A店","B店","C店","D店"\
         ,"その他","全 件","中 止")

> お気付きのこととは思いますが、メニュー2を抜けよ
>うとして、ESCキーを押した場合、&処理にはゼロが
>代入されてしまいますが、#CASEでは、A店をセットし
>てしまいます。

&処理が0の場合は、#caseで&店名が未定義になるのではないでしょうか。
とすれば、例えば次のようにすることもできそうです。

 条件 (&店名="" .or &店名="中 止") 繰り返し中止
あるいは
 条件 (&処理=0 .or &店名="中 止") 繰り返し中止
一寸ひねって
 &店名=#CASE(&処理+1,"中 止","A店","B店","C店","D店"\
           ,"その他","全 件","中 止")

16883 Re:大変失礼致しました。 KH 2002/08/05-19:17
記事番号16880へのコメント
悲しげさん、いつもお世話になっています。

>&処理が0の場合は、#caseで&店名が未定義になるのではないでしょうか。

 大変失礼致しました。誤りごめんなさい。
16885 Re:一括処理・変数の代入方法で? KH 2002/08/05-23:11
記事番号16875へのコメント
藤田輝幸さん、こんばんは。

>すみませんKHさんの"条件(&処理=0) ・・・"という記述は
>
>条件 (&店名=”全 件”)手続き実行 全体
>条件 (&店名=”中 止”)繰り返し中止
>の次の行に
>条件(&処理=0) 繰り返し中止
>と入れればいいのでしょうか?(すみません、夜まで試すことかできないので)

メニュー2コマンドと&店名=#CASE(・・・)の間です。
16894 Re:一括処理・変数の代入方法で? A.I. 2002/08/07-14:36
記事番号16873へのコメント
幅田さん、こんにちは。
この掲示板のお蔭で随分助かっています。ありがとうございます。

>なお、できるだけ「分岐」コマンドは使わないで
>「繰り返し」コマンドや「手続き実行」コマンドなどを
>使われた方が後々のためにいいと思います。
>分岐コマンドだと、行ったっきりでどこへ帰るのかわかりにくく
>なります。
>帰り道を確かめずもせずに山林の原野に入り込んで、道に迷って
>しまうようなもの。
>戻ってくるところがはっきりしていれば、後のメンテナンスも楽ですし、
>別の人が見てもわかりやすくなりますから。
>(作った本人でさえ、時間がたつとわかりにくくなることもあります。)
>
10年前に、この掲示板に出会っておれば良かったと、つくづく思います。
現在、日常業務で使っている一括処理の一部を手直しすれば、
他の箇所が何時の間にか、おかしくなってしまい、全体を作り直すのも複雑すぎて
手におえないという状況で困っています。
それは、さておき・・・・・・・・

   条件 (#右側文字列(&店名,1)="店") 手続き実行 個別支所
>   条件 (&店名="その他") 手続き実行 その他
>   条件 (&店名="全 件") 手続き実行 全件
>   条件 (&店名="中 止") 繰り返し中止
とすれば、より省略出来ますが、その前に、やはり別表で&店名を取り込み
それをメニュー3(メニュー2では、店舗数が制限以上になった時エラーが発生)に
表示して選択するというのが、実用的だと思います。

戻る