過去の桐井戸端BBS (桐ver.7)
1205 行制約式について su 1999/2/1-11:16
行制約式がどうしても分かりません。
[制作]に"委託"と"自己"の値集合にしています。
[種別]に"モノクロ"と"カラー"の値集合にしています。
[委託種別]に"モノクロ"と"ネガカラー""RPプリント""RPクリスタル""ネガカラークリスタル"の値集合に
しています。
そこで、[制作]で、"委託"を選んだ場合のみ、なおかつ、[種別]が"モノクロ"であるならば、
[委託種別]は"モノクロ"のみ選択可能。
[種別]が"カラー"であるならば、[委託種別]は"モノクロ"以外を選択可能。
もちろん、[制作]で"自己"を選んだ場合は[委託種別]は未定義値で入力をしようとするとエラーとなる。
以上のことを[委託種別]の行制約式としたいのです。

[委託種別]="" .or [制作]="委託"
ちなみにここまではできたのですが、これ以上がどうにもなりません。
少しややっこしくて、解りづらいかもしれませんがよろしくお願いします。
桐はVer7.1です。
1208 Re: 宮城 1999/2/1-20:59
記事番号1205へのコメント
 suさんこんばんは。
 まず、

>もちろん、[制作]で"自己"を選んだ場合は[委託種別]は未定義値で入力をしようと

ですが、未定義値入力でなく、コンボを開きたいだと理解しました。
未定義値を入力させるためには、値集合にも未定義値を設定する必要があります。

 それで[委託種別]の行制約式を次のようにしてみてください。

([委託種別]="モノクロ" .AND [制作]="委託".AND [種別]="モノクロ")¥
.OR ([委託種別]<>"モノクロ" .AND [制作]="委託" .AND [種別] <> "モノクロ")¥
.OR (([委託種別]="モノクロ" \
.OR [委託種別]="ネガカラー"\
.OR [委託種別]="RPプリント"\
.OR [委託種別]="RPクリスタル"\
.OR [委託種別]="ネガカラークリスタル" ).AND [制作]="自己")

 これでいかがでしょうか。

 ついでながら、個人的趣味ですが、¥でどんどん切っちゃうのがお勧めです。
¥の後ろにスペースをいれると桐におこられちゃうという弱点がありますが、見やすいと思います。
1210 Re: ikjun 1999/2/1-21:48
記事番号1206へのコメント
>行制約式がどうしても分かりません。

 ふむふむ・・・・・

>[制作]に"委託"と"自己"の値集合にしています。

 [制作]{"委託","自己"}

>[種別]に"モノクロ"と"カラー"の値集合にしています。

 [種別]{"モノクロ","カラー"}

>[委託種別]に"モノクロ"と"ネガカラー""RPプリント""RPクリスタル""ネガカラークリスタル"の値集合にし
>ています。

 [委託種別]{"モノクロ","ネガカラー","RPプリント","RPクリスタル","ネガカラークリスタル"}

>そこで、[制作]で、"委託"を選んだ場合のみ、なおかつ、[種別]が"モノクロ"であるな
>らば、[委託種別]は"モノクロ"のみ選択可能。

 if [制作]="委託" .and [種別]="モノクロ" then
[委託種別]="モノクロ"
 endif

>[種別]が"カラー"であるならば、[委託種別]は"モノクロ"以外を選択可能。

 if [種別]="カラー" then
[委託種別]<>"モノクロ"
 endif

>もちろん、[制作]で"自己"を選んだ場合は[委託種別]は未定義値で入力をしようと
>するとエラーとなる。

 if [制作]="自己" then
[委託種別]<>#未定義値
 endif

>以上のことを[委託種別]の行制約式としたいのです。

ふむ、VB風にすると

 selectcase
  case [制作]="委託" .and [種別]="モノクロ"
[委託種別]="モノクロ"
case [種別]="カラー"
[委託種別]<>"モノクロ"
case [制作]="自己"
[委託種別]<>#未定義値
 selectend

かな?

 これを、行制約式にするとこうなるのでは

(([制作]="委託" .and [種別]="モノクロ") .and [委託種別]="モノクロ") .or
([種別]="カラー" .and [委託種別]<>"モノクロ") .or ([制作]="自
己" .and [委託種別]<>#未定義値)

 こういう一見やっかいなものはこんな風に分解するとできるものです。

 エッ、間違っている?すんまへん!ちょっと酔っているもので!
1211 Re: 宮城 1999/2/2-00:31
記事番号1208へのコメント
 すみません。私は勘違いしちゃってますね。ikjunさんの書き込みみて気がつきました。

> .OR (([委託種別]="モノクロ" \
> .OR [委託種別]="ネガカラー"\
> .OR [委託種別]="RPプリント"\
> .OR [委託種別]="RPクリスタル"\
> .OR [委託種別]="ネガカラークリスタル" ).AND [制作]="自己")



 .OR ([委託種別]<>"" .AND [制作]="自己")

でいいと思います。あいかわらずですみません。
でも、プログラムはこうやって直すものですよ(苦しい開き直り)。

 ついでに、BBSでの表示で左に詰まってしまってますが、適当にスペースを入れ揃えたつもりだったんです。
記述から左には全角・半角スペースがあっても大丈夫です。

 私の趣味というのも、自分のオリジナルではなく、私の先生(岡山県唯一のVARファミリー会会員 田原さん)から教ったノウハウですというのも申し添えます。

 ¥の右に全角スペース入れちゃった場合も"¥_"(空白表示にして、¥+全角スペースにしたつもり)で含むで検索すればわかります。

 ついでにもう一言。
コンボ制御なら行制約式を記述すべきでしょうが、こういう便利な機能を使えば使うほど
(項目計算式なんかもそう)、一括処理をみてもプログラムの挙動がわからなくなり、
遅くなるようです。
お節介ですが、こっちにかくか、一括側で書くかは自己責任で判断して下さいませ。

 私も行制約は初めてで勉強させていただきました。ありがとうございました。
1212 Re: ikjun 1999/2/2-06:07
記事番号1211へのコメント
 おはようございます。除雪のために早起きしてしまいました。

>でも、プログラムはこうやって直すものですよ(苦しい開き直り)。

 そうです!この質問が他とちょっと違うのは、知識がないのではなくて、論理をうまく組み立てられないと言うこと、だと思います。
(別に馬鹿にしているわけではありません。それにはコツがいるのです。)

本来であれば、フローチャートで記述するのが、一般的なのですが、BBSでは記述できませんので、
VB風に記述しました。
こういった込み入った論理は、簡単な論理に分解しないと理解不能に陥ります。
複雑な論理は簡単な論理の組み合わせにすぎないという、とてもいい例だと思います。

この辺は基礎的なプログラムとかシステム設計の本とかも読むべきなんでしょうね。
桐は簡単だからといって、基礎の知識をおろそかにすると、すぐにつまってしまう。

そんなわけで、結果があっているかどうか、ちょっと怪しいとは思ったのですが、
考え方を示してみました。
これは論理の道筋が大事なので、結果はそれほど大事ではありません。
(間違いが見つかったときの伏線!?)

> ついでに、BBSでの表示で左に詰まってしまってますが、適当にスペースを入れ揃えたつもりだったんです。記述から
>左には全角・半角スペースがあっても大丈夫です。

 わたしも間違えた。適当にスペースをいれて読んで下さい。
タグを使えば良いのだろうけど?面倒だ!

> 私の趣味というのも、自分のオリジナルではなく、私の先生(岡山県唯一のVARファミリー会会員 田原さん)から教
>ったノウハウですというのも申し添えます。

 このVARファミリー会というのはどういうものですか?主催は管理工学社?

> ついでにもう一言。コンボ制御なら行制約式を記述すべきでしょうが、こういう便利な機能を使えば使うほど(項目計
>算式なんかもそう)、一括処理をみてもプログラムの挙動がわからなくなり、遅くなるようです。お節介ですが、こっち
>にかくか、一括側で書くかは自己責任で判断して下さいませ。

 その通りです。わたしなら、一括処理で書いて入力の最後にチェックさせます。
(行制約式ではエラーメッセージを自分で書けないのが気にいらない。もしかして書ける?)
でもこれを突き詰めていくと、プログラムですべて記述すればいいということになります。
それが出来るとしも、それなら桐以外のソフトでも良いわけで、下手をすると桐不用論になりそう?
まあ、この辺が桐というソフトのよくも悪くも特徴です。
初心者にやさしく、ベテランもそれなりに便利に使える。
でも、論理的一貫性にはちょっと欠けるかもしれない。

> 私も行制約は初めてで勉強させていただきました。ありがとうございました。

 私もそうです。(というより、今後とも使うつもりはあまり無い。)
1215 Re: 宮城 1999/2/2-11:58
記事番号1212へのコメント
> そうです!この質問が他とちょっと違うのは、知識がないのではなくて、論理をうまく組み立てられないと言うこと、
>だと思います。(別に馬鹿にしているわけではありません。それにはコツがいるのです。)
>
> 本来であれば、フローチャートで記述するのが、一般的なのですが、BBSでは記述できませんので、VB風に記述し
>ました。こういった込み入った論理は、簡単な論理に分解しないと理解不能に陥ります。複雑な論理は簡単な論理の組み
>合わせにすぎないという、とてもいい例だと思います。

 そうですね。私も何となくデシジョンテーブル(専門家が書いてるのを横目でみて覚えた
半分自己流)をイメージしてました。整理するとこうかな?

          +−−−−−−−+−−−−−−−+
制約=委託?    |   Y   |   N   |
          +−−−+−−−+−−−+−−−+
種別=モノクロ?  | Y | N | Y | N |
          +−+−+−+−+−+−+−+−+
委託種別=モノクロ?|Y|N|Y|N|Y|N|Y|N|
          =================
OK1       |×| | | | | | | |
          +−+−+−+−+−+−+−+−+
OK2       | | | |×| | | | |
          +−+−+−+−+−+−+−+−+
OK3       | | | | | | | |×|
          +−+−+−+−+−+−+−+−+
OK4       | | | | |×| | | |
          +−+−+−+−+−+−+−+−+
NG        | |×|×| | |×|×| |
          +−+−+−+−+−+−+−+−+

 OK3とOK4とはsuさんは明示的に書かれていませんので適当に考えました。
ちなみに値集合に未定義を設定していなければ、設定以外は未定義も含めて入力できません。
未定義が設定されていれば、なんでも受付ます。

 ちょっと変ですが、×がヒットです。時代遅れでしょうが、こういうのとかフローチャートとかが
ケース分けには有効なテクニックでしょうか。本当ならOKは1行でいいです。

> このVARファミリー会というのはどういうものですか?主催は管理工学社?

 そうです。管理工学のHP->フォーラムK->桐VARファミリー会でリストを参照できます。
私は「桐って知ってますか」を知るまで全国で桐のプロはこれだけかと悲観しておりました。
使い込んでるユーザーまで含めたら本当はなんと一杯いることか!
 デシジョンテーブル崩れないといいけど。
1216 Re: 宮城 1999/2/2-12:02
記事番号1215へのコメント
 やっぱりだめでした。イベント文の右側の+と|を合わせてからごらんになってください。
1230 Re: ITO 1999/2/3-13:11
記事番号1216へのコメント
> やっぱりだめでした。イベント文の右側の+と|を合わせてからごらんになってください。
>
 私は、プラウザ(IE)の使用フォントを固定ピッチのフォントにしておりますので、
ずれないで見られます。MSPゴシックでは、ずれますね。このことと思いますが。
1235 Re: 宮城 1999/2/3-19:19
記事番号1230へのコメント
 ITOさん、こんばんは。

> 私は、プラウザ(IE)の使用フォントを固定ピッチのフォントにしておりますので、
>ずれないで見られます。MSPゴシックでは、ずれますね。このことと思いますが。

 私は、NS4.5を使っています。プロポーショナルフォント=MSPゴシック、固定
ピッチフォント=MSゴシックになっていたのを両方MSPゴシックにしたらずれなくな
りました。ありがとうございました。
1220 Re: アックン 1999/2/2-16:35
記事番号1205へのコメント
suさん、こんばんは。こんなふうにしてみてください。

[制作]の項目属性「未定義禁止」にチェック。
行制約式ではなく項目制約式を
([]="委託")+([]="自己")

[種別]の行制約式を
#COND([制作]="委託",([]="モノクロ")+([]="カラー"),1,[]="")

[委託種別]の行制約式を
#COND([種別]="モノクロ",[]="モノクロ",[種別]="カラー",([]="ネガカラー")+([]="RPプリント")+([]="RPクリスタル")+([]="ネガカラークリスタル"),1,[]="")

 上記設定では、[制作]が自己のときは[種別][委託種別]共に未定義値としています。
質問には書かれてないようでしたので、よーわからんかったもんで。

 さて、行制約式を用いるとちょっと困ったことが生じるケースがあります。
たとえば[種別]を誤って入力、[委託種別]を正しく入力したという場合、
[種別]を訂正したいと思っても、[委託種別]が訂正モードになって身動きがとれなくなるんです。
で、ここでほとんどのオペレーターがパニックに陥ります。
優しいメッセージを添えてごまかしましょう・(笑)。

[制作]は値集合のままで、[種別]と[委託種別]に表引きを用いると、
入力ミスが若干少なくなります。
あるいは組み合わせのパターンがさほど多くないようでしたら、いっそのことこれら3項目を
1,2項目にまとめてしまえば、入力もシンプルになるしミスも少なくなります。

       や、またしてもオオボケか?! (=^・^=)アックン
1229 みなさん、ありがとうございます su 1999/2/3-11:03
記事番号1220へのコメント
ikjunさん、宮城さん、アックンさん、本当にありがとうございます。
大変ややっこしい質問にもかかわらず、丁寧な回答をいただき大変感謝しております。
馴れればそれほどでもないのかもしれませんが、今一つ行制約式の記述はすっきりと理解していないのが現状です。
でもみなさんのおかげで光が見えてきた思いです。

それと一つお詫びをしなければなりません。
質問の中で『もちろん、[制作]で"自己"を選んだ場合は[委託種別]は未定義値で入力をしようと
するとエラーとなる。』と言う下りがありますが、これは間違いでした。
"自己"を選んだときには[委託種別]は未定義値でないとエラーになる。
が正しかったのです。
自分ではこう書いたつもりだったのですが、まったく逆さまのことを書いてしまっていることを、
あらためて見てあわてているところです。
どうもすみませんでした。

それでも、みなさんのアドバイスの元、いろいろ試した結果、以下のような式で達成することができました。

( [種別]="モノクロ" .AND [制作] = "委託" .AND [委託種別]="モノクロ" .or []="" ).OR ( [種別] <> "モノクロ" .AND [制作]="委託" .AND [委託種別]<>"モノクロ" .or []="") .or ([制作]="自己" .and []="") .or ([制作]="" .and []="")

そこで、『.or []=""』の式がポイントになりました。
と言いますのは、入力の作業上[種別]まで入力し、後日[制作][委託種別]を訂正する手順で
したので、[種別]を入力した時点では、他の項目は未定義値となっています。
こういうことも式を作る上で関係してくるのだと、驚きと共に、どこに落とし穴が隠されているか、
戦々恐々としているところです。(でも、ちゃんと動いてくれると快感ですね。)
早くみなさんのように、自由に計算式や、一括処理を書きたいものです。
今後ともよろしくお願いします。

戻る