過去の桐井戸端BBS (桐ver.8)
8091 フォームの明細行で行挿入したあと元の行に戻る方法は 桐野港 2000/10/16-01:41
V8の伝票形式フォームの明細部で行挿入をしたあと元の位置で表示させる方法を教えてください。

伝票形式は メイン&サブフォームで行挿入はサブフォームの明細行です。

次の方法で行挿入をしております。
明細部の訂正モードから コマンドボタンを押し Kevにて
更新モード設定で 表示モードに変え
明細の枝番を振り
挿入位置の枝番と行番号を変数に保存して
枝番-0.1 で行追加をして
枝番で整列をさせ
ジャンプにて元の行番号にカーソルを移して
更新モード設定で 訂正モードに戻しております。
ところが挿入された行の表示位置が常に画面の1行目に変更されてしまいます。

たとえば画面表示の4行目に挿入した場合 4行目に挿入行が来るようにしたいのですが。
V5の時は行訂正 帳票 から一括に戻り上記の処理をしてまた行訂正 帳票復帰して簡単に実現出来たのですが、
V8のイベントではなかなかいまいちできません。
良い方法があればお教えをお願い致します。

8094 Re:フォームの明細行で行挿入したあと元の行に戻る方法は 桐野港 2000/10/16-11:01
記事番号8091へのコメント
前の書込みで少し勘違いがありましたので訂正します。

>V5の時は行訂正 帳票 から一括に戻り上記の処理をして
>また行訂正 帳票復帰して簡単に実現出来たのですが、

V5の場合もやはり元の位置には戻っていませんでした。
しかし挿入された対照行が画面の一番下の行に表示されていましたので、上の行のデータを参考にしながら入力できたので、
あまり気になりませんでした。
V8のイベントの場合は一行目に表示されるので、前行のデータがまったく見れない状態で流れがつかみにくいのです。
せめて 画面の中央行にでも表示できる方法はありますでしょうか。
元の行位置に表示されればなおありがたいのですが。

8103 Re:フォームの明細行で行挿入したあと元の行に戻る方法は 佐田 守弘 2000/10/17-01:47
記事番号8094へのコメント
桐野港さん
状況が今一つ把握し切れないところがありますが、分かる範囲でコメントします。
どうやらこれはイベントの問題ではないと思います。

枝番を振り、枝番で整列(桐ver.8では並べ替えと呼び名が変わりました)すると先頭行に挿入した行が移動してしまうとの事ですが、
これは並べ替えを行ったためです。
そして、並べ替えを行った値である枝番が、意図に反した値になっているのではないかと思います。

おそらくこの枝番は、前回コメントした方法で行われているのだと思います。
確認して頂きたいのは、枝番の振り直しは意図した通りになっておりますか?
これがポイントだと思います。
多分これがうまくできてないのではと思います。
その原因として、どうやら画面伝票で表示している状態で、前回コメントの枝番振りをされている様で、ここに原因があると考えます。
あの枝番を付けるには、グループ化する項目の順位で並べ替えた状態で行う必要があります。
フォーム編集中はフォームで定義してあるグループ化項目でグループ整列が掛っていますから、
これが原因で正しい枝番が振られていないものと考えます。

●行挿入に関して
桐は、並べ替えや絞り込みなどを行ってない状態であれば、行挿入が行えます。
しかし並べ替え、絞り込みが行われていると、元の表の挿入場所が指定できませんから、行挿入を行っても行追加になります。
行追加が行われると、追加された行は表の最終行に位置します。

●並べ替えが行われている場合
表編集での並べ替え状態以外に、フォームでの並べ替えでも同じです。
行追加した直後は、最終行に追加されますが、値を確定して表示状態に戻すと、この段階で並べ替えが行われます。
この結果、最終行にあったはずのレコードがどこかに移動してしまう事になります。
これは、並べ替えを行ったためですから、致し方ありません。
移動させないようにするには、並べ替えを行わない方法しかありません。
その様な状態で、枝番が振れるかどうか、そこが次の課題になります。

●五衛門のお血脈
私は上記の現象をこの様に呼んでおります。
閻魔大王の命を受けて、長野の善光寺にお血脈を盗みに行った五衛門が、お血脈を受けてしまったため、
地獄に戻れず極楽に行ってしまったという話です。

佐田守弘(KS-00119)
8120 Re:フォームの明細行で行挿入したあと元の行に戻る方法は 桐野港 2000/10/17-23:39
記事番号8103へのコメント
佐田先生 またまたコメントありがとうございます。
桐の本を出版されるそうで期待しております。

さっそくですが
質問の文章での表現がいまいち説明不足で申しわけありません。
うまく表現できるかどうか追加説明させていただきます。

まず、この前の枝番の質問の件とは別件の枝番で(同じ語句ですみませんでした)
まったく関係のないファイル操作ですのでよろしくお願い致します。

伝票の入力画面でフォームは伝票形式のメイン&サブフォームで出来ています。

フォームの明細行は5レコード表示になっています。入力できる明細行数は最大99行までできます。
実際には50行位までは入力します。

たとえば仮に売上入力サブ.TBLに 売上入力.wfm を使用してフォーム画面で入力しているとします。

売上入力サブ.TBL

品名  枝番   その他項目
A    1
B    2
C    3
D    4
E    5
F    6  * 画面上に表示されているデータ
G    7  *
H    8  *
I    9  *
J    10  *
ここまで入力したと仮定して画面上のフォームの明細行には次の5レコードが表示されているものとします。

画面上のフォームの明細行(5レコード表示)
−−−−−−−−−−−−−−−
品名
F
G
H    (この行で商品Gとの間に別の商品を挿入したい)
I
J
−−−−−−−−−−−−−−−
と5レコード表示されています。この時に 商品G と Hの間に別の商品を挿入する場合です。
先生のコメントにあるように伝票番号でグループ化されていますので行挿入コマンドは使用できないと思います。
そこでカーソルを Hの商品に移して 行挿入と言う名前のコマンドボタンを押してイベント処理に移ります。
フォームは常に訂正モードにしていますので、この状態ではレコードの操作は出来ないようなので
 method @フォーム.更新モード設定(0) で表示モードにしてから
グループ内の明細行の枝番を 置換 [枝番]=#行番号 で振って
最初の質問で書込みした 行追加の処理をしています。

その結果 売上入力サブ.TBL は行追加ですが枝番で整列させると行挿入したようにならびます。

売上入力サブ.TBL  整列 枝番(昇順)

品名    枝番
A      1
B      2
C      3
D      4
E      5
F      6
G      7
追加した行 7.9   (この行へカーソルを移動させる)
H      8
I      9
J      10

整列処理をした後は処理対照行は 先頭行にありますので
最初の書込みで説明した 保存してある行番号の変数をもとに
ジャンプにて追加した行に処理対照行を移動させます。

ここで method @フォーム.更新モード設定(2)で訂正モードにしてフォームで入力を続けます。

この時の画面上の明細行表示が次のように表示されます。

画面上のフォームの明細行(5レコード表示)
−−−−−−−−−−−−−−−−−−−
品名
追加した行     (処理対照行)
H
I
J
 終端行
−−−−−−−−−−−−−−−−−−−
と処理対照行がフォームの先頭行に表示されてしまいます。
これでは前の行 すなわち商品F G が見えなくなってしまいます。
これを 次のように表示させ入力を続けたいのです。

画面上のフォームの明細行(5レコード表示)
−−−−−−−−−−−−−−−−−−
品名
F
G
追加した行  (処理対照行)
H
I
−−−−−−−−−−−−−−−−−−−

商品J は画面の下にはみでて(かくれて)表示されない。
これで挿入した行(すなわち追加した行)の 前後の商品を参照しながら入力を続けたい。

こんな説明で意図するところがおぼろげながらでも、ご理解いただけますでしょうか。
なにか良い方法があればよろしくお願い致します。

8123 Re:フォームの明細行で行挿入したあと元の行に戻る方法は 佐田 守弘 2000/10/18-01:47
記事番号8120へのコメント
桐野港さん
どうやらフォーム上では枝番の順で並んでいる様ですね。
単に処理対象行がフォームの先頭に来るという事ですね。
イベントの中で、
ジャンプ 行番号=-2
ジャンプ 行番号=+2
を試してみて下さい。

中身は単純な話で、単にカーソルを上に2行上げる事によって表示レコードを2行下にスクロールさせ、
その後カーソルを2行下げる内容です。
先頭から2行目まではうまく行かないので、この部分の対策は必要ですが、これはレコード番号を調べる事によって
対処は可能だと思います。

佐田守弘(KS-00119)
8134 Re:フォームの明細行で行挿入したあと元の行に戻る方法は 桐野港 2000/10/18-16:07
記事番号8123へのコメント
佐田先生 コメントありがとうございます。

>どうやらフォーム上では枝番の順で並んでいる様ですね。単に処理対象行がフォームの先
>頭に来るという事ですね。
>イベントの中で、
>ジャンプ 行番号=-2
>ジャンプ 行番号=+2
>を試してみて下さい。

この方法で処理対象行がフォームの先頭でなく3行目に来るようになりました。
5行表示のフォームだとちょうど中央の行に来ますので、入力がしやすくなりました。

しかし、他のフォームで明細行が15行表示のものがあります。
それで グループ内レコードの件数>フォームの明細行数 であるとします。

この場合、前回の説明ような行挿入方法(実際は行追加ですが一応行挿入と書きます)で
たとえばフォームの先頭から3行目に行挿入した時、あるいは10行目に行挿入した時
処理対象行がフォームの元の行 すなわち 3行目に行挿入した時は3行目に
10行目に行挿入した時は 10行目に来るようにしたいのですが。
又これに関連して フォームの明細行にある処理対象行の位置を取得する方法はあるのでしょうか。
(どうも文章で書くと自分でもわかりにくいのですが、
レコードの行番号取得でなく フォームの明細行の行番号取得の意味です。
ややこしい。たとえば処理対象行がグループ内のレコード行番では20行目であるが、フォームの明細行では
5 行目に表示されている時の 5 の意味)
このフォームの明細行の位置が取得できればフォーム入力からイベントでデータを
加工して ふたたびフォームで入力する時に、色々な応用が出来るのですが。
どうも文章で書くって難しいですね。

8140 メソッド 尾形 2000/10/18-19:52
記事番号8134へのコメント
メソッドに
明細番号設定()
明細番号取得()
というのが有りますがコレではダメですか?
8144 Re:メソッド 桐野港 2000/10/19-16:34
記事番号8140へのコメント
尾形様 はじめまして

>明細番号設定()
>明細番号取得()
>というのが有りますがコレではダメですか?

いやーマイッタなー
こんなメソッドあったかなと思いマニュアル見たがみつからない。
そこで先日(かなり前かな)届いた管理工学からのパンフを探し出したら、ありました。
sp6に追加された機能うんぬん
はずかしながら私昨年インストしてから、思った以上にV5からV8への移行に手間がかかるのでそのままでほっておりました。
最近またさわりだしたのですが、桐本体もそのままでした。
早速アップグレードいたします。
かなり悩みましたが、こういう機能が追加されるということはアプリを組むときには必要な機能なんでしょうね。
やはりソフトと***は新しいほうが良いですね。
佐田様 尾形様 お騒がせいたしました。今後共よろしくお願い致します。

戻る