過去の桐井戸端BBS (桐ver.8)
9421 サブフォーム付のフォームで行訂正ができない ながい 2001/01/21-21:55
一括処理でサブフォーム付のフォームを用いて行訂正をしたいのですが,
「サブフォーム付きでは実行できません」 のエラーになってしまいます。
解決方法を教えてください。

9433 Re:サブフォーム付のフォームで行訂正ができない 佐田 守弘 2001/01/22-17:20
記事番号9421へのコメント
ながいさん
基本的にこの様なエラーが出る事は考えられない事です。
とは言え、エラーになるにはそれなりの原因があるはずです。
そして、その原因は、書かれている事からは推定ができません。

何かその原因になりそうな特殊な設定をしておりませんでしょうか。
例えばサブフォームの対象表の開き方が更新禁止になっているなどです。

佐田守弘(KS-00119)
9435 Re:サブフォーム付のフォームで行訂正ができない 悲しげ 2001/01/22-19:37
記事番号9433へのコメント
え〜、これはですね、

■構文
行訂正  会話|フォーム|表,\
     *|*,<項目名> |<項目名> ,\
     終了キー = <変数名> ,\
     ボタン = <文字列型の変数名> ,\
     終了状態 = <変数名>

すなわち「行訂正 フォーム」コマンドが、サブフォーム部の入力に使えないことを意味するのだと思います。
単なる「行訂正」コマンドは使えますが。

この点については、私もv7当時にはひどく苦しみました。
v8になってからはイベントでやるようになりましたから、「行訂正 フォーム」を使う必要は私の場合はなくなりました。
と云うか、使えないので使わないっつうか。

と云う訳で、ながいさん、「行訂正 フォーム」と同様のことを、イベントで別な切り口からやることが可能です。
モデルは、例えば【多遊】さんのHP等で幾つか出ていたと思いますので、お勉強して下さい。
かなりの発想の転換を要するかもしれませんけど。
9438 Re:サブフォーム付のフォームで行訂正ができない ながい 2001/01/22-21:20
記事番号9435へのコメント
悲しげさん ご教示ありがとうございます。

勉強してみたいと思いますので,「多遊」さんのHPのアドレスをご紹介ください。

9440 一括処理の中からのフォームの呼び出しは 佐田 守弘 2001/01/22-21:32
記事番号9438へのコメント
ながいさん
悲しげさんが指摘されたような方法でしたか。
(思いも寄りませんでした)
一括処理の中からフォームを呼び出す場合には、ウィンドウ作成コマンドでフォームウィンドウを開き、
ウィンドウ会話コマンドで会話処理を行う方法を使って下さい。

佐田守弘(KS-00119)
9447 【多遊】さんとこのurl 悲しげ 2001/01/23-12:17
記事番号9438へのコメント
どもっ、ながいさん
標記はここのトップページの「リンク」にもあります。
9455 Re:サブフォーム付のフォームで行訂正ができない mudagami 2001/01/23-22:30
記事番号9438へのコメント
 あまり自信はないのですが、一括処理からサブフォーム付きのフォームで行訂正を行う場合、

@ フォーム形式編集 コマンド=行訂正,許可作業=行訂正   ←行訂正の場合
A フォーム形式編集 コマンド=行挿入,許可作業=行挿入   ←行挿入の場合
B フォーム形式編集 コマンド=行追加,許可作業=行挿入   ←行追加の場合

以上のコマンドが使えるようです。ただコマンドが終わった状態では会話処理のままですので、
イベントで"表示状態"になったとき一括処理に戻してやらなければなりません。
一括処理に戻るコマンドボタンを作り、タイマーイベントでタイマー値を0.3ほどに設定し、

手続き定義開始 フォーム::タイマー1()
  条件(#変数("一括処理の中で使っている変数")<>"" .and #編集状態(1)=0) \
    メソッド呼び出し @一括処理に戻るボタン名.実行()
手続き定義終了

などと設定すれば一括処理に戻ります。タイマー値の値によって微妙にタイミングがずれるときがあります。
(…あまり使い物にならないですかね?)

 管理工学の掲示板の中で、「サブフォーム」付きではなく、「入力支援モーダルフォーム」付きフォームを
一括処理から呼び出し、行訂正や行追加などを行った場合その状態から抜け出せず強制終了せざるを得ない件で
書き込みましたが、なかなかアドバイスが得られず見よう見まねで色々試してみました。
サブフォームの付かないカード形の場合は、タイマーイベントを使わず、
行訂正終了・行挿入終了イベントから「一括処理に戻るコマンドボタン」を実行するだけで直接戻れます。
ただし、行訂正や行挿入中「Page Up」・「Page Down」を押すと「一括処理終了」のメッセージが出るため、
キーダウンイベントなどで「処理中止=1」などと設定しなければなりません。
「Page Up」・「Page Down」を押したとき一括処理に戻りたい場合は、コマンドボタンに、
「一括処理に戻る」の前に「表示」を付け加えボタンを実行すれば戻ります。
サブフォーム付きの場合は、行訂正終了イベントなどから戻ろうとするとサブフォームの方へ移動できません。

 以上未熟な経験ですが、この件で大変苦労しましたので書かせて頂きました。
もし間違っていましたら申し訳ありません。

9461 Re:一括処理の中からのフォームの呼び出しは ながい 2001/01/24-22:06
記事番号9440へのコメント
悲しげさんが指摘されたような方法ではなく,
一括処理のなかで通常の「行訂正コマンド」で動作をさせたいと考えております。

特別な設定はしていないつもりですが,うまく動作してくれません。
動作させるための条件等があったらご指摘ねがいます。

9462 Re:一括処理の中からのフォームの呼び出しは 悲しげ 2001/01/24-22:47
記事番号9461へのコメント
どもっ、ながいさん

>悲しげさんが指摘されたような方法ではなく,
>一括処理のなかで通常の「行訂正コマンド」で動作をさせたいと考えております。

では、具体的にどう云うことなのでしょう?
記述の具体例を出すことをお勧めします。
ながいさんのご発言は、1回目が3行、2回目は2行、3回目が4行です。
これで中味を推察せよと云うのはあまりに無理難題かと……。(^^;)
次回は30行以上書きましょう!
ってのは例えばの話で(^^;)、要はそれだけ具体的にって趣旨です。
9483 訂正 mudagami 2001/01/25-21:16
記事番号9455へのコメント

 勉強不足でした!!
「サブフォーム」を使ったフォームの場合、「フォーム形式編集 コマンド=行訂正,許可作業=行訂正」から
一括処理に戻る場合、「タイマーイベント」でなく「キーダウンイベント」から、

@ 「一括処理から呼び出した時」 かつ
A 「表示中でない時」 かつ
B 「F4キーかEscが単独で押された時」 → 「一括処理に戻るコマンドボタン実行」 で戻ります。

手続き定義開始 フォーム::キーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,\
               長整数 &フラグ,参照 長整数 &処理中止)
   条件(#変数("一括処理で使っている変数")<>"" .and \
         #編集状態(1)<>0 .and \
         (&仮想キーコード=115 .or &仮想キーコード=27) .and \
         (&フラグ<>4 .and &フラグ<>8))\
         メソッド呼び出し @一括処理に戻るコマンドボタン名.実行()
手続き定義終了

タイマーイベントを使うと行訂正などに入る場合不安定ですが、キーイベントでは不安定な動きはありません。
 「行訂正コマンド」を使い最も単純な形式の"サブフォーム"を使った一括処理を試してみました。
項目は1項目だけ、サブフォームは表はおろか何も入っていない"サブフォーム"です。
しかしやはり、一括処理から「行訂正コマンド」では入れません。
 最初、「フォーム形式編集」コマンドを見たとき、どうしてこの様なコマンドを作ったのか不思議でなりませんでした。
しかし「サブフォーム」や「入力支援のモーダルフォーム」を使った場合、
一括処理からは「行訂正コマンド」が使えないためではないかと思うようになりました。
一括処理を中心にした作業を進めたいとき、「行訂正コマンド」が使えないのは大変残念です。
何か回避方法があればと思いますが、管理工学に直接伺わないかぎりは無理なのでしょうか?

9515 Re:一括処理の中からのフォームの呼び出しは ながい 2001/01/27-18:02
記事番号9462へのコメント
悲しげさん 諸事ご指導ありがとうございます。

 当方は,初心者ですが,勉強の材料として,先輩がV5de作成したシステムのV8への乗せ変えをしています。
 質問する際も,何を記載すれば的確なのか良くわからないのが実状です。

 今回の質問は,1つのTBL内のデータを,メインフォームとサブフォームで入力や編集をしたいと考えております。
 表の中身は,キーになる「伝票番号」と,伝票毎のデータ項目が数種あります。
その他に,1つの伝票番号をグループとするデータ項目が数種あります。
 伝票番号をキーに,伝票毎のデータ項目をメインフォームで入力・修正し,同じ画面のサブフォームでで,
伝票番号をグループとするデータを入力・修正しようと考えました。
 伝票番号を変数で入力し,その変数でTBLから伝票番号を検索し,該当する伝票がない場合は行挿入,
該当伝票がある場合には行訂正を実行したい。
 と,思ったのですが,行訂正コマンドを受け付けてくれなかったのです。

 考え方も含めてご指導をいただければうれしいです。

9520 Re:サブフォーム付のフォームで行訂正ができない 悲しげ 2001/01/27-23:34
記事番号9515へのコメント
どもっ、ながいさん

>今回の質問は,1つのTBL内のデータを,メインフォームとサブフォーム
>で入力や編集をしたいと考えております。

う〜ん、これは賛同し難いです。
ひとつの表でメイン&サブフォームには普通はしません。ひとつの表で扱うのなら、
DOS桐で云えば画面伝票、Win桐だとグループ項目のある伝票(または一覧表)フォームを使うことになるはずです。---(A)
ただ、これではヘッダ部等の扱いに窮する場合があると云うことで、メイン&サブフォームを採用したと云うことであれば、
そもそもメイン&サブフォームはふたつの表について設定するのが通常だと思います。
具体的には、メイン部は伝番・顧客名(コード)・日付等、伝票1枚全体に係る表を、
サブフォームでは品名・数量・単価・金額等、いわゆる明細データに係る表を、それぞれ指定します。
このふたつの表を、例えば伝番値においてリンクさせるような使い方とか。    ---(B)

>伝票番号を変数で入力し,その変数でTBLから伝票番号を検索し,該当
>する伝票がない場合は行挿入,該当伝票がある場合には行訂正を実行し
>たい。

これは、(A)ならば、「グループ指定」で検索、存在しなければ「グループ追加」でやります。
しかる後に明細部を(訂正モードにして)会話処理的に扱うことができます。
即「行訂正」コマンドが必要となるかどうかは、やり方次第ですが。
あるいは(B)なら、編集表をメイン部対象表にして検索し、存在すれば編集表をサブ部対象表に移して、
必要な行訂正や行追加等を行います。
検索時に存在しなければ、メイン部対象表で新伝番レコードを行追加します。
サブ部対象表に移った後、「行訂正」コマンドが必要となるかどうかは、こちらもやり方次第でしょうね。

>と,思ったのですが,行訂正コマンドを受け付けてくれなかったのです。

それはそうと、「行訂正 フォーム,…」コマンドでも「フォーム形式編集」コマンドでもない、
単なる「行訂正」コマンドが、メイン&サブフォームであることをもって禁止されたとは、どうにも不思議です。
よろしければ、一括処理のエラーとなる部分(その前後を含めて)を、ここに挙げてみて下さい。
そうしないと、想像の空回りばかりでとても非効率的ですから。
9547 Re:サブフォーム付のフォームで行訂正ができない 永井 2001/01/29-15:14
記事番号9520へのコメント
悲しげさん いつもご指導ありがとうございます。

* ひとつの表でメイン&サブフォームには普通はしません。
    これは小生の不勉強でした。
    2つの表になるようにして,再挑戦してみます。

なお,不具合となったプログラムを下記しますので,何か指導事項がありましたら,お願いします。

名札 着荷票情報登録
変数宣言 固有,文字列,{&着荷10,&形名10,&品名10,&区分10}
繰り返し
代入 &パス00=#連結(&DV00,"\修理管理\")
パス名 &パス00

表 着荷台帳,使用フォーム="着荷F11"
絞り込み [製品名称]=#未定義
ケース開始
ケース (#EOF<>1)
置換 [製品名称]
ケース その他
ケース終了
絞り込み解除
ウィンドウ作成 フォーム,ハンドル=&ハンドル00,位置=(10,0)
キー入力 (1,1),プロンプト="着荷番号は? (終了=0)",モード=半角,&着荷
10
条件 (&着荷10="0") 繰り返し中止
ケース開始
ケース (#桁数(&着荷10)<>6)
手続き実行 入力ミス
分岐 着荷票情報登録
ケース (#IS数字(#部分列(&着荷10,1,1),1)<>1)
手続き実行 入力ミス
分岐 着荷票情報登録
ケース (#IS英字(#部分列(&着荷10,2,1),1)<>1)
手続き実行 入力ミス
分岐 着荷票情報登録
ケース (#部分列(&着荷10,3,1)<>"-")
手続き実行 入力ミス
分岐 着荷票情報登録
ケース (#IS数字(#部分列(&着荷10,4,3),1)<>1)
手続き実行 入力ミス
分岐 着荷票情報登録
ケース その他
ケース終了
検索 [着荷番号]=&着荷10
ケース開始
ケース (#EOF=1)
メニュー2 &作業00,1,(1,80),"該当着荷票なし"," 確認中止, 新規登録"
ケース開始
ケース (&作業00=2)
行挿入 [着荷番号]=&着荷10
検索 [着荷番号]=&着荷10
行訂正 フォーム,*,[着荷日]
代入 &区分10=[製品区分],&形名10=[形名部番],&品名10=[製品名称]
ケース開始
ケース (&区分10="自社製品".AND &品名10=#未定義)
メニュー2 &作業00,1,(1,80),"未登録製品です?"," 登録する,
登録しない"
条件 (&作業00=1) 手続き実行 着荷製品登録
ケース その他
ケース終了
ケース その他
ケース終了
ケース その他
行表示
メニュー2 &作業00,1,(1,80),"該当着荷票あり"," 確認中止, 修
正, , 削 除"
ケース開始
ケース (&作業00=2)
行訂正 フォーム,*,[着荷日]
代入 &区分10=[製品区分],&形名10=[形名部番],&品名10=[製品名称]
ケース開始
ケース (&区分10="自社製品".AND &品名10=#未定義)
メニュー2 &作業00,1,(1,80),"未登録製品です?"," 登録する,
登録しない"
条件 (&作業00=1) 手続き実行 着荷製品登録
ケース その他
ケース終了
ケース (&作業00=4)
メニュー2 &作業00,1,(1,80),"削除しますよ?"," 削除中止, 削除実
行"
ケース開始
ケース (&作業00=2)
行削除 1
ケース その他
ケース終了
ケース その他
ケース終了
ケース終了
繰り返し終了
表整理

分岐 スタート

                                以上

9548 Re:サブフォーム付のフォームで行訂正ができない 悲しげ 2001/01/29-16:13
記事番号9547へのコメント
どもっ、永井さん
やはり、#9435で私が想像したとおり、「行訂正」コマンドではなく、
「行訂正 フォーム」コマンドを使おうとしたことが原因でしたね。(^^;)
#9461では、それを否定しているかのようにしか取れませんでしたけど。

と云う訳で、繰り返しになりますが、「行訂正 フォーム」コマンドを使いたければ、
元来ひとつの表のようですから、メイン&サブにしないで、ひとつの伝票フォームで試す。これがひとつの方法。
二つ目の方法は、2表に分けてメイン&サブフォームをイベントで走る。

特に後者では、勉強しなくてはならないところが沢山ありそうです。
頑張って下さい。
9553 Re:サブフォーム付のフォームで行訂正ができない ながい 2001/01/29-21:11
記事番号9548へのコメント
悲しげさん ありがとうございます。

 もう少し勉強し,またご指導を御願いしたいと思います。

戻る