過去の桐井戸端BBS (桐ver.9)
18680 ある項目に取消と入れた場合、他の項目もそれぞれ他の値に自動的に変更されるようにしたい 2003/01/22-10:30
現在桐ver9で売上の管理を行っております。
ある項目に、取消と入れた場合、他の項目もそれぞれ他の値に変更するのを
今は手作業で行っておりますが、これを自動で行えないかと思います。

例えば・・・

項目名  データ
<状態> 未確定
<売上月>07
<納品月>07
<金額> 10,000

上記の項目<状態>のデータを「取消」にした場合、
自動で<売上月>、<納品月>、<金額>をそれぞれハイフン、¥0の値へ自動でしたいのです。(↓このように)

項目名  データ
<状態> 取消
<売上月>−
<納品月>−
<金額> 0

<売上月>、<納品月>、<金額>のデータは手入力で入れています。
それを<状態>の値を「取消」にした場合のみ、自動で値を変えることは可能でしょうか?
どなたか教えて下さい。
18682 Re:項目の自動変更について 悲しげ 2003/01/22-13:28
記事番号18680へのコメント
どもっ、夏さん
一番安直な方法は、入力用の項目と表示印刷用の項目を分けてしまうことでしょうか。

入力用の項目(つまり非計算項目)としては
[状態]  文字列
[売上月] 文字列?(数値系の方が楽な気がします)
[納品月] 同上
 (↑編集初期値式として[売上月]を指定しておくと便利かも?)
[金額]  数値系

表示印刷用の項目を計算項目として増設し、その項目計算式は
[売上月_] #条件選択([状態]="取消","−",1,[売上月])
[納品月_] #条件選択([状態]="取消","−",1,[納品月])
[金額_]  #条件選択([状態]="取消",0,1,[金額])

もし[売上月]等が数値系だとすれば、文字列たる[売上月_]の項目
計算式は
  #条件選択([状態]="取消","−",1,#文字列([売上月],2))
となります。

18684 イベントで処理するのが良いでしょう 佐田 守弘 2003/01/22-23:24
記事番号18680へのコメント
夏さん
悲しげさんが書かれている通り、項目計算式で処理する方法もあるのかも知れませんが、
主旨から考えると、イベントを使って取り消しの場合に項目値を自動で書き替える手続きを
組み込むのが良いのではないかと考えます。
ただし、イベントで処理するには、フォーム上で編集する必要があります。
表だけで行うとしたら、同じ内容の小さな一括処理を呼び出す必要が有ります。

●イベントでの処理
[状態]の項目を表示するオブジェクトのソース値更新イベントを使います。
ソース値更新イベントとは、この項目の値が変更された時に発生するイベントです。
そしてそのイベントの中に次の様なコマンドを記述すれば良いでしょう。
 ケース開始
  ケース ([状態]="取消")
   メソッド呼び出し @フォーム.更新モード設定(0)
   行訂正 [売上月]=#未定義,[納入月]=#未定義
 ケース終了

●売上月、納入月の扱い
 これらにハイフォンを入れようとすると、どうしても文字列型になってしまいます。
しかし月数に文字列型を使うのは適切ではありません。
やはり整数型にしておくべきでしょう。
しかし整数型の項目にハイフォンは入力できません。ですから
ハイフォンでなく値は未定義とする必要が有ります。

題意の「ハイフォンを入力したい」は、
印刷などの時にハイフォン印刷すればよいと考えれば、
例えば「#未定義値変換」関数などで取り消した行にハイフォンなどを印刷する事は可能です。

佐田守弘(KS-00119)
18695 Re:イベントで処理するのが良いでしょう うにん 2003/01/23-15:55
記事番号18684へのコメント
>●売上月、納入月の扱い
> これらにハイフォンを入れようとすると、どうしても文字列型に
>なってしまいます。しかし月数に文字列型を使うのは適切ではあり
>ません。やはり整数型にしておくべきでしょう。
>しかし整数型の項目にハイフォンは入力できません。ですから
>ハイフォンでなく値は未定義とする必要が有ります。
>
>題意の「ハイフォンを入力したい」は、印刷などの時にハイフォン
>印刷すればよいと考えれば、例えば「#未定義値変換」関数などで
>取り消した行にハイフォンなどを印刷する事は可能です。

表やフォームでも、未定義値(の)表示文字列を指定できます。

18694 18680と同じような質問(項目値の自動更新) katsuyoshi 2003/01/23-14:30
度々お世話になります。
18680 項目値の自動変更について
ちょうど私も同じことで悩んでいましたので
早速佐田さんの回答を使わせていただきました。
メインサブフォームでサブフォームでのことです。
トグルボタンのイベントで
手続き定義開始 発注区分::ソース値更新() */発注区分はトグルBで[発注区分]のオン・オフをしています。(オンの値=1 オフの値=0)
 ケース開始
  ケース([発注区分]=0)
   メソッド呼び出し @フォーム.更新モード設定(0)
   行訂正 [発注日時]=#未定義
 ケース終了

しかし実行すると 詳細 行訂正
KU1068:対象表が更新中またはグループ操作中のためこのコマンドは使用できません
のエラーになります。
[発注区分]=1で現在日時 [発注区分]=0で未定義としたいのです。
[発注日時]は値を変更できるよう編集初期値式に #COND([発注区分]=1,#日時値,1,"")としています。
ご指導お願いします。
18696 Re:18680と同じような質問(項目値の自動更新) bonito 2003/01/23-16:00
記事番号18694へのコメント
仕事したくないつ〜か、気分が乗らないので
逃避としての投稿です、済みません (^^;

> ケース開始
>  ケース([発注区分]=0)
>   メソッド呼び出し @フォーム.更新モード設定(0)
>   行訂正 [発注日時]=#未定義
> ケース終了
>
>しかし実行すると 詳細 行訂正
>KU1068:対象表が更新中またはグループ操作中のため
>このコマンドは使用できません
>のエラーになります。

エラーの原因は
サブフォームの更新モード=メインフォームの更新モード
ではないって事っすかね(未確認)

普通KEVでは「行訂正」よりも「項目値代入」を使う事の方が
多いし一般的なような気がします。(入力中の処理が多いので)

 ケース開始
  ケース([発注区分]=0)
   項目値代入 [発注日時]=#未定義
 ケース終了

更新モードを取得して「行訂正」と「項目値代入」を使い
分けるといった場合もあるかも知れませんね。

18697 バッチリでした katsuyoshi 2003/01/23-18:42
記事番号18696へのコメント
bonitoさん ありがとうございました。
>仕事したくないつ〜か、気分が乗らないので
>逃避としての投稿です、済みません (^^;
>エラーの原因は
>サブフォームの更新モード=メインフォームの更新モード
>ではないって事っすかね(未確認)
>普通KEVでは「行訂正」よりも「項目値代入」を使う事の方が
>多いし一般的なような気がします。(入力中の処理が多いので)
>
> ケース開始
>  ケース([発注区分]=0)
>   項目値代入 [発注日時]=#未定義
> ケース終了
>
>更新モードを取得して「行訂正」と「項目値代入」を使い
>分けるといった場合もあるかも知れませんね。

上記に訂正したらバッチリ動きました。
これからもどんどん質問しますので仕事に気分が乗らなくなったら
ご指導お願いします。


18700 行訂正と項目値代入 佐田 守弘 2003/01/23-23:18
記事番号18697へのコメント
katsuyoshiさん
答えはbonitoさんから出ておりますが、多少補足します。
フォーム上で表示モードであるか、編集モードになっているか
によって、項目値の変更の仕方が違います。

表示モードであれば行訂正コマンドで処理しますが、編集モード
(行追加や、行訂正など)の時には、行訂正コマンドが使えず、
代りに項目値代入コマンドを使います。

そして、一般にどちらであるかが決められないのが普通です。
このため、題意の項目値の変更に際しては、2通りのやり方があります。

1)モードを調べてコマンドを使い分ける。
更新モード取得のメソッド呼び出しを使えば、現在どのモードで
あるかの判定ができます。
ケースコマンドを使って、取得したモード値が0であれば表示モード
ですから行訂正を、それ以外は編集中のモードですから項目値代入を使います。

2)表示モードに戻す
表示モードに戻して差し支えない場合には、更新モード設定の
メソッドを使って、モードを変更してから、行訂正を行います。
なお、18680の件では、既にデータが入力されているらしいので、
こちらの方法でコメントしました。

佐田守弘(KS-00119)

18721 バッチリと思ったら実は・・・・・ katsuyoshi 2003/01/25-11:29
記事番号18700へのコメント
佐田さんありがとうございました。
まさしくその通りです。
バッチリと決まったかに思われましたが実はその
表示モードと編集モードで引っかかりました。
私の場合はどちらにも対応できるようにしたいのですが
思うようにいきません。
どちらにも対応できるイベントの記述を教えてください。
お願いします。


18730 行訂正と項目値代入の使い分け 佐田 守弘 2003/01/26-00:42
記事番号18721へのコメント
katsuyoshiさん

考え方は全コメントに書いておいた通りです。
イベントハンドラ全体は作れないので、
御質問の主要部分のコマンドのみをお伝えします。
以下を、実際のイベントの中に組み込んで下さい。
=====================================================
 メソッド呼び出し @フォーム.更新モード取得(&更新モード)
 ケース開始
  ケース (&更新モード=0)
   行訂正 [発注日時]=#未定義
  ケース その他
   項目値代入 [発注日時]=#未定義
 ケース終了
=====================================================

佐田守弘(KS-00119)
18736 Re:行訂正と項目値代入の使い分け katsuyoshi 2003/01/27-01:22
記事番号18730へのコメント
佐田さんありがとうございました

下記のような記述をしましたが
  KU1150:未定義の変数名があります のエラーになります。
 
手続き定義開始 発注区分::ソース値更新()
 ケース開始
  ケース([発注区分]=0)
    メソッド呼び出し @フォーム.更新モード取得(&更新モード)
    ケース (&更新モード=0)
     行訂正 [発注日時]=#未定義
    ケース その他
     項目値代入 [発注日時]=#未定義
 ケース終了

 ケース開始
  ケース([発注区分]=1)
    メソッド呼び出し @フォーム.更新モード取得(&更新モード)
    ケース (&更新モード=2)
     行訂正 [発注日時]=#日時値
    ケース その他
     項目値代入 [発注日時]=#日時値
 ケース終了

手続き定義終了

 イベントをまだまだ理解できていないためご指導お願い致します。


18739 Re:行訂正と項目値代入の使い分け 悲しげ 2003/01/27-13:30
記事番号18736へのコメント
どもっ、katsuyoshiさん、取り急ぎ横から失礼します。

「未定義の変数名」エラーが出ると云うことは、文字どおり
使っている変数が未定義(未宣言)なのだと思います。
で、記述を見るに、使われている変数はひとつだけなので、
例えば次のように変数宣言を入れるとよいように思えます。

-----------------------------------------
手続き定義開始 発注区分::ソース値更新()
 変数宣言 自動,長整数{&更新モード}
 ケース開始
  ケース([発注区分]=0)
  ・・・・・以下略
-----------------------------------------

でも、通して書けば次のようにした方が効率的でしょう。

-----------------------------------------
手続き定義開始 発注区分::ソース値更新()
 変数宣言 自動,長整数{&更新モード}
 メソッド呼び出し @フォーム.更新モード取得(&更新モード)
 ケース開始
 ケース(&更新モード=0)
  行訂正 [発注日時]=#条件選択([発注区分]=1,#日時値)
  *行訂正 [発注日時]=#条件選択([発注区分]=1,#日時値,1,"") と同義
 ケース その他
  項目値代入 [発注日時]=#条件選択([発注区分]=1,#日時値)
 ケース終了
手続き定義終了
----------------------------------------

戻る