過去の桐井戸端BBS (桐ver.9)
28960 データを入力した後、項目によってShift+Tabを効かなくさせたりソース値更新イベントを働かせたりしたい つねにうつ 2005/02/07-10:43
お世話になります。初心者です。Ver9です。
在庫管理もどきを作っています。同時に多部署で入力するため共有で使用します。
表で在庫表と出庫依頼があります。
在庫表には、商品番号、在庫数、仮在庫数があります。
出庫依頼には、商品番号、出庫依頼数、備考等があり項目の最後は備考です。
仮在庫数は、各部署での出庫依頼の時点でリアルタイムに在庫数を把握するために
出庫依頼入力終了時("備考"入力終了時)に仮在庫数を減算する目的で作っています。
在庫数は実際に出庫したときに出庫数を減算します。

各部署での出庫依頼時に一覧表形式の出庫依頼フォームを作って、フォーム項目の
最後のデータ(この場合は「備考」です)が入力された時に、ソース値更新イベントで
在庫表の仮在庫数を減算してその目的を得ています。ちなみにタブオーダーでは
最後のデータ項目(「備考」)のタブストップは"ON"で改行方向は"次行"です。

ここまでは良かったのですが、"備考"項目で[Shift+Tab]キーを押し前項目を修正しようとすると、
ソース値更新イベントがはたらき仮在庫数が減算されます。
"備考"項目で[Enter]キーを押して次行に移るときにも本来の目的のイベントが働き仮在庫数が減算されます。
この場合は仮在庫数が2回減算される事になります。

ここでお教え頂きたいのですが、これを防ぐ方法はないでしょうか。
1.最後の備考項目にフォーカスが移動した場合のみ、[Shift+Tab]キーが働かない。
2.最後の項目で[Enter]キーを押したときのみ、ソース値更新イベントが働く。
3.その他の方法を採用する。
  ・・・と考えているのですが、1,2の方法も関数やコマンド、イベント、メソッドなどを調べたのですが分かりません。
  是非ご教示頂きたくよろしくお願い致します。


28962 Re:データ入力後のキーの判定 ONnoji 2005/02/07-13:31
記事番号28960へのコメント
つねにうつさん、こんにちは。

いろいろな方法があると思いますが、
そのうちのひとつということで、サンプルをアップしました。

よろしければご参考にしてください。

------------------------------------------
sample.wfm を開いてください。

ファイルは桐ver.8 です。

桐ver.9 でも使えます。

------------------------------------------

28963 Re:データ入力後のキーの判定 今村 誠 2005/02/07-13:50
記事番号28960へのコメント
つねにうつさんこんにちはボツかもしれませんが一案
>在庫管理もどきを作っています。同時に多部署で入力するため共有で使用します。
>表で在庫表と出庫依頼があります。

>在庫表には、商品番号、在庫数、仮在庫数があります。

在庫表.tblに日時型[訂正日時]を追加することはできないのでしょうか

>出庫依頼には、商品番号、出庫依頼数、備考等があり項目の最後は備考です。

[備考]のソース値更新で出庫依頼.tblの日時型[訂正日時]を未定義の場合訂正する
未定義でない場合そのままにするとすることは無理でしょうか。
(私は最後の項目でなく最初の必ず入力する項目で訂正がいいと思います。)

>仮在庫数は、各部署での出庫依頼の時点でリアルタイムに在庫数を把握するために
>出庫依頼入力終了時("備考"入力終了時)に仮在庫数を減算する目的で作っていま
>す。在庫数は実際に出庫したときに出庫数を減算します。

A)在庫数の更新するタイミングがこの文章ではわからないので
どのような時にどのPCで更新するのでしょうか。

>3.その他の方法を採用する。

使用PC毎に違う「秒」或いは「ミリ秒」を設定して在庫表の[訂正日時]を
検索して存在していない場合追加する。
存在していた場合、その出庫数と現在の入力中の個数が違う場合訂正する。
使用イベントはソース値更新でなく、行挿入終了と行訂正終了行追加終了の
各イベントで手続き実行にして、同じ記述の更新処理をする。

在庫表が各PCの追加毎に行が増えていくのであればできそうですが、
カードの場合は別の方法を考えた方がいいと思います。

実際のデータあるわけではないので、共有状態の表を検索してリアルタイムに
行追加や行訂正がストレスなくできるのか非常に興味があります。
28966 Re:データ入力後のキーの判定 尾形 2005/02/07-14:41
記事番号28960へのコメント
どうも、こんにちは

訂正時は対応するのでしょうか?
1行入力して次行を入力している最中に
「前の行の数値入力間違えてる」と気づいて訂正
した場合もおかしくなりませんか?


28968 Re:データ入力後のキーの判定? bonito 2005/02/07-17:26
記事番号28960へのコメント
つねにうつさん

>3.その他の方法を採用する。

普通に考えたら、行訂正開始、行訂正終了、行挿入終了のイベントを使うと思いますが...
なんでソース値更新を使おうと思い立ったのでしょうか?

# というのも行**終了イベントは処理によっては多重的に発生する場合も
# あって、なかなかやっかいな代物でもあったりして...

普通は(私のような単純な考え方では)

(1)行挿入終了イベントで、在庫数を加算減算する(棚卸しで加算する事もあり)
(2)行訂正終了イベントで、在庫数を加算減算する(棚卸しで加算する事もあり)
(3)行訂正開始イベントで、(2)の処理を正統化する為にカレント行の出庫数を
在庫数に加えるなど、一旦この行で行った在庫数への変更をもとに戻しておく

という道筋だと思いますが...

28969 Re:データ入力後のキーの判定 つねにうつ 2005/02/07-17:32
記事番号28966へのコメント

>訂正時は対応するのでしょうか?
>1行入力して次行を入力している最中に
>「前の行の数値入力間違えてる」と気づいて訂正
>した場合もおかしくなりませんか?
>
尾形さん。ありがとうございます。
おっしゃるとおり、次行以降を入力中に気がついたときは
決め毎として、訂正はしない事になっています。また訂正モードに入れないようにしています。
その場合は、間違っている行を削除しますが、削除の前に既に減算してある仮在庫数をその行の数だけ加算する事にしました。

28971 Re:データ入力後のキーの判定? つねにうつ 2005/02/07-19:14
記事番号28968へのコメント
bonitoさん
ありがとうございます。
おっしゃるとおり行挿入終了イベントを使おうかなと思ったのですが、マニュアルに
「行挿入または行追加が、キャンセルされても発生します。」なんて書かれていたので
素人の私には色々な対応策が浮かばなかったため断念しました。


28972 Re:データ入力後のキーの判定 つねにうつ 2005/02/07-19:24
記事番号28962へのコメント
ONnojiさん
お手数をかけ申し訳ございません。
sampleを見せて頂きました。フォームキーダウンの&仮想キーコードと&フラグにより判定し、
sampleの"&msg=ソース値更新の処理をスキップします。"の部分を実際の
スキップ処理に入れ替えればよいのではないかと理解しました。この方法で試そうと思います。
実際は滅多に「Shift+Tab」を押される事は無いと思うのですがやはり作る以上ちゃんとしたものをと思いお手数かけました。
もし考えが違っていたらお教え下さい。

28974 Re:データ入力後のキーの判定 つねにうつ 2005/02/07-19:39
記事番号28963へのコメント
今村 誠さん。いろいろお考え頂きありがとうございます。
>
>在庫表.tblに日時型[訂正日時]を追加することはできないのでしょうか
出来ない事はないですが、訂正は[Shift+Tab]でバックして訂正する事が主で、出庫依頼書を提出後の
訂正は出庫訂正書をPCで数量をマイナスとして書くようにしています。
従って訂正があるとしたら入力時の訂正で、かつ問題となるのはイベントが設定してある[備考]の項目に
フォーカスが移動してしまってからのみです。


>A)在庫数の更新するタイミングがこの文章ではわからないので
>どのような時にどのPCで更新するのでしょうか。
 これは倉庫担当者が実際に出庫完了したときに出庫数で在庫数を減らします。
 従って、この処理が正しく完了した時点で在庫数と仮在庫数が一致する事になります。

>>3.その他の方法を採用する。

>使用PC毎に違う「秒」或いは「ミリ秒」を設定して在庫表の[訂正日時]を
>検索して存在していない場合追加する。
>存在していた場合、その出庫数と現在の入力中の個数が違う場合訂正する。
>使用イベントはソース値更新でなく、行挿入終了と行訂正終了行追加終了
>の各イベントで手続き実行にして、同じ記述の更新処理をする。
>
>在庫表が各PCの追加毎に行が増えていくのであればできそうですが、
>カードの場合は別の方法を考えた方がいいと思います。
>
>実際のデータあるわけではないので、共有状態の表を検索してリアルタイムに
>行追加や行訂正がストレスなくできるのか非常に興味があります。

この方法はどうも実際的でないように思います。また初心者の私には手に負えそうにありません。
ありがとうございました。またいろいろお教え下さい。お願い致します。

28975 チェッカーを作ってみた次第です。 ONnoji 2005/02/07-19:40
記事番号28972へのコメント
つねにうつさん、こんにちは。

[ソース値更新]イベントは、便利なイベントでありますが、
反面、あまりにも強力すぎて手に余る場合がありますね。

私もしばしば困っていたので、今回はチェッカーを作ってみた次第です。

>スキップ処理に入れ替えればよいのではないかと理解しました。

その通りです。ピンポン。(^^v

それでは失礼いたします。(@^^)/~~~


28981 Re:データ入力後のキーの判定? bonito 2005/02/07-22:42
記事番号28971へのコメント
つねにうつさん
>おっしゃるとおり行挿入終了イベントを使おうかなと思ったのですが、マニュアルに
>「行挿入または行追加が、キャンセルされても発生します。」なんて書かれていたので
>素人の私には色々な対応策が浮かばなかったため断念しました。

これは

手続き定義開始 フォーム::行挿入終了(長整数 &明細番号,長整数 &モード)
 if (&モード=1)
   --------処理コマンド(複数行?)--------
 end
手続き定義終了

で回避するのが一般的だと思います。

桐のHELPより引用
>&モード/長整数
>入力したデータが確定されたか、キャンセルされたかを示す番号が格納されます。
>値を変更せずにレコードを移動した場合は、0(キャンセル)が格納されます。
>値 説明
>1 確定
>0 キャンセル



戻る