過去の桐井戸端BBS (桐ver.8)
10297 一覧表フォームで行挿入するとき、最終行ではなく途中に挿入したい 藤野 2001/03/14-23:38
イベントの勉強をしようと過去のBBSも参考にしてやってみたのですが上手くいきません。ご指導お願いします
 概略
一覧表フォームで行挿入したいのですが、いずれも最終行にカーソルがジャンプしてしまいます。
何とか途中に挿入できないでしょうか。
なおフォームは支店名でグループにしています。
            
  支店名 007     ◎行挿入ボタン
   得意先  売上  支払  残
    A    10   10   0
    B    20   10  10
とあるとAとBの間に挿入したいのです。
練習のつもりで書いたものを下記に記載します。これでは行挿入のところでエラーになりました。

ヘッダーに行挿入のボタンがあります

手続き定義開始 コマンドボタン_16::マウス左クリック(長整数 &マウス位置[2],長整数
 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
編集表 ”壱号表.tbl”
&明細番号= &明細番号−1
ジャンプ 行番号=&明細番号
行挿入
行訂正
手続き定義終了

よろしくお願いします。
10298 Re:一覧表(伝票)wfmでの疑似行挿入 悲しげ 2001/03/15-01:14
記事番号10297へのコメント
どもっ、藤野さん
タイトルを変更させていただきました(あの手のタイトルはペケです)。

一覧表wfmや伝票wfmと云った、グールプ項目のあるwfmでは、そもそも「行挿入」はできません。
できるのは「行追加」だけです。
ただ、イベント(一括処理)を駆使して、「疑似行挿入」のようなことは可能です。
過去ログを試しに「行挿入」で検索してみたら
  http://www.fuku3.com/~habata/kbbs/kakov8/08091.htm
の冒頭の記述が参考になろうかと思います(最終的には尻切れトンボになってはいるみたいですが)。
表には仮称[枝番]項目が必要で、枝番を含む索引(並べ替え)指定が必要になります。
10321 Re:一覧表(伝票)wfmでの疑似行挿入 藤野 2001/03/15-21:21
記事番号10298へのコメント
悲しげさん、早速のコメントありがとうございます。
 タイトルも私のではわかりにくいですね、この点も
ご指摘のとおりと恐縮しております。
 過去のBBSもう一度さがしたらありました。
でも書き方がよくわからないので、2.3日実験してみます。
そうしたら、このツリーにもう一度書き込みます
そのときは、よろしくお願いします。
10326 Re:一覧表(伝票)wfmでの疑似行挿入 桐野港 2001/03/16-02:01
記事番号10321へのコメント
藤野さん 悲しげさん こんばんは
過去ログを参考にして頂いてありがとうございます。
悲しげさんおっしゃるように何か尻切れとんぼで終わっていましたので
ここで結果報告させていただきます。

行挿入まえに
method @フォーム.明細番号取得(&明細番号)
疑似行挿入処理うんぬん
疑似行挿入処理後に
method @フォーム.明細番号設定(&明細番号)

で表示すると挿入しょうとした行に正確に挿入して表示できました。
疑似行挿入ですが見た目には表形式編集で行挿入するのと同じになります。

10340 Re:一覧表(伝票)wfmでの疑似行挿入 悲しげ 2001/03/16-22:23
記事番号10326へのコメント
どもっ、どうやら「桐野港呼び出し」コマンドを発令してしまったみたいですね、失礼しました。(^^;)
でも、桐野港さん。せっかく呼び出されてしまったからには、ここでついでに藤野さんのために、改めて本手続きの記述を、
通して挙げていただくってのはどうでしょう?

10354 Re:一覧表(伝票)wfmでの疑似行挿入 藤野 2001/03/17-16:54
記事番号10340へのコメント
悲しげさん、桐野港さんありがとうございます。
アドバイスを元に少しやってみたのですが、やはり上手くいきません。
私がコマンドに不慣れなのですが・・・(^_^;)
今、現在の書き方は
手続き定義開始 コマンドボタン_16::マウス左クリック(長整数 &マウス位置[2],
長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)

method @フォーム.更新モード設定(0)

置換 [枝番]=[連番]-0.1

method @フォーム.明細番号取得(&明細番号)

&明細番号=&明細番号-1
行追加

ジャンプ 行番号=&明細番号
ジャンプ 行番号=-2


method @フォーム.明細番号設定(&明細番号)
method @フォーム.更新モード設定(2)

手続き定義終了

です。
これでは行挿入したとき、最終行に行挿入するだけで、枝番も新しく挿入した行にはふらっていませんでした。
もう一度、立ち上げると今度は行の一番先に移動していました。
この方法が上手くいくといろいろの処理に使えるので、なんとかものにしたいのです。
再度ご指導お願い申し上げます。
10357 Re:一覧表(伝票)wfmでの疑似行挿入 今村 誠 2001/03/17-21:15
記事番号10354へのコメント
全部書くのは良くないと思いますが参考に出来るところがあれば実験してみてください

手続き定義開始 行挿入()
     条件 (#グループ選択状態=#u .NOT #グループ選択状態<>0) 手続き終了
 メソッド呼び出し @フォーム.描画禁止( 1 )
 メソッド呼び出し @フォーム.明細番号取得( &行位置)
     行マーク定義 2
     置換 [枝番]=#n
     ジャンプ 行マーク=2
     代入 &MAX2=[枝番]-0.5
     行追加 [分類]="",[分類C]="",[品C]="",[品名]="",[数量]="",[単位]="",\
[単価]="",[掛率]="",[仕入単価]="",[備考]="",[枝番]=&MAX2
並べ替え {[枝番]昇順}
     置換 [枝番]=#n
並べ替え {[枝番]昇順}
     ジャンプ 行マーク=2
     ジャンプ 行番号=前行
行マーク解除 2
 メソッド呼び出し ハンドル= &hwindow,戻り値 = &合計値,@フォーム.明細番号設定(&行位置)
 メソッド呼び出し @フォーム.描画禁止( 0 )
手続き定義終了

1 置換の前に現在の明細行を取得しないと移動が発生します
2 行マークを使うと現在行が取得できます
3 現在行にジャンプした後明細番号設定で意図する場所に移動します。

10360 Re:一覧表(伝票)wfmでの疑似行挿入 桐野港 2001/03/17-23:29
記事番号10340へのコメント
私の使用している手続き定義を参考までに書いてみました。
ただし私はメイン&サブフォームの伝票入力画面で使用しておりますので
1枚の伝票で明細行数が多くても30行位(30レコード)までですので問題なく使用しておりますが、
藤野さんのご質問の一覧表フォームでの使用だとかなりのレコード数になると思います。
レコード数が多くなると処理スピードの問題ありで実用にむかない場合があります。
またLANで共有更新での使用は、索引のインデックスが使用できないのでレコード数によっては問題ありです。
この部分の解決方法があれば何方か教えてください。
(今のところ悩んでおります)

使用方法ですが、ライブラリに手続き定義を置きフォームに行挿入のコマンドボタンを作りそこから呼び出して使用しております。

肝心な部分のみの抜粋です。変数宣言済みとします。

手続き定義開始 行挿入する()
  method @フォーム.更新モード設定(0) 
    *フォームを常に更新モードで使用してますので表示に変更
  method @フォーム.明細番号取得(&明細番号)
  行番号 &行番

  ジャンプ 行番号=先頭
  繰り返し(#EOF=0)
    行訂正 [枝番]=#行番号
    ジャンプ 行番号=次行
  繰り返し終了

  行追加 [枝番]=&行番-0.1
  並べ替え{[枝番]昇順}
  ジャンプ 行番号=&行番
  method @フォーム.明細番号設定(&明細番号)
*ここで目的の項目にフォーカスを設定する
  method @フォーム.更新モード設定(2)
手続き定義終了

これで目的のレコード位置に行挿入されます。
枝番号を振る部分で 置換コマンドで#連番または#行番号とすると共有更新で使用した場合に問題ありだったような記憶があります。
最終的に 行訂正コマンドに落ち着いたようです。(記憶があいまいすみません)参考にしてください。

10365 Re:一覧表(伝票)wfmでの疑似行挿入 桐野港 2001/03/18-13:19
記事番号10360へのコメント
前の手続き定義で最初にmethod @フォーム.描画禁止(1)
        最後にmethod @フォーム.描画禁止(0)
が抜けておりました。
なくても動作しますが、画面に処理経過が表示されます。

10370 皆さん上手くいきまいた。(感謝、感謝です) 藤野 2001/03/18-20:38
記事番号10365へのコメント
◎悲しげさん、ありがとうございました。
またいろいろのイベントを見せてださい。

◎桐野港さん、情報の公開ありがとうございます。
やって見たら、描画禁止(1)と描画禁止(2)やこれを記載しなかったときの違いがはっきりとわかりました。
このまま使わせていただきたいと思います。
データー量の少ないのと多いので使用して見ました、おっしゃるように少ないときはすごく早いのですが
1000行のでやると少し遅いようです。
でもいちいち表に切り替えてることを思うと、私には十分でした。

◎今村さん、 丁寧な記述ありがとうございます。
私にはこのように書いてもらったほうがよかったと思います、
なんせろくにマニュアルも読まないではじめたものですから。
これだと処理を追いかけられます別のことで同じようことをしたいと思っているのがあるので一度実験してみます。

皆さんへ苦労して勉強をされた記述を公開していただき、初心者としては本当に助かりました、
これを機会にヘルプファイルから一括のマニュアルを全部プリントアウトし記載されているコマンドを一行ずつ追いかけてみました。
いかにマニュアルを読んでいないかを、思い知らされました、ミスタイプやコマンドを飛ばしてみたり、
でもそのおかげで、そのコマンドの役目がわかりました。
やる気だけはあるので、また質問させてください。

本当にありがとうございました。感謝申し上げます。

戻る