過去の桐井戸端BBS (桐ver.9)
18468 イベントでサブフォームの合計値を変数に代入しメインの項目値に入れたい 山本 2003/01/11-19:22
桐9です。
今回の戦いはサブフォーム合計値をメインに変数代入するというもので、
以前に何度も井戸端で取り上げられておりましたが、
一括処理やイベントやそれぞれの方法が入り乱れ記載されており、
ある程度理解できましたが、いまいちうまくいきません
私は一括処理は無理ですからイベントで行いたいので、
その点だけでまとめて欲しいのですがお願いいたします。

以下に現在状況と問題点を記述します。
@サブ合計値を変数に受けることは成功、合計値ソースのイベントで「ソース値更新」にチェックも入れ、
これにより変数&合計値は明細の一行完了ごとに更新されています。

Aメイン項目値代入のため、サブの合計ソース値更新イベントに対して
項目値代入[合計]=&合計値と入れたいのですが、イベントをどこで作るのかわかりません。
オブジェクト属性のイベントファイル名は開けなく、どこで作るのでしょうか。

宜しくお願いします。
18472 サブwfmの合計値をメインwfmに反映させる一例(1) 悲しげ 2003/01/11-23:59
記事番号18468へのコメント
どもっ、山本さん、
先ずタイトルについてですが、「変数代入イベント」なるイベントは存在しません。(^^;)
次、「オブジェクト属性のイベントファイル名は開けなく、どこで作るのでしょうか。」とは、う〜ん、文意が判りません。(?_?)

http://www.fuku3.com/~habata/kbbs/kakov8/08089.htm

のことでしょうか? あるいは、イベントファイル名を手入力した後でイベントファイルを開くには、
例えば何からのイベントをダブルクリックするとか、上部ツールバー/書式/イベントの定義とかのことでしょうか?

それと「私は一括処理は無理ですからイベントで行いたいので」とのことですが、
そのような認識方法はいささか疑問に思いますし、またこの手の処理(タイトル参照)は
「古典一括」では難しいのでイベントに頼るのがそもそも妥当だろうと思います。

と云う訳で、似たようなことを私は次のように実現させていますので、
一例として参考にしてみて下さい。(v8sp6で作成/稼動)

構成ですが、掛売上1.wfm(tbl)がメインでヘッダ部・フッタ部相当、
掛売上2.wfm(tbl)がサブで明細部相当と云ったメイン&サブの例です。
ついでに云えば、明細部の項目は、品名・数量・単価等となっていて、
数量or単価を決めた時点でメイン部の合計に反映されるようにしています。
サブwfmにはグループ項目として#合計([税抜額])等が存在しているものとします。
「合計値取得」手続き定義では、メソッド呼び出しで、
これら「グループソース値取得」をさせています。
その上で、メイン表の方の合計値相当項目に「行訂正」で書き込んでいます。
以下は、サブのkevの記述から関係部分を抜粋したものです。
「項目値代入」コマンドを使わずに表示モードでの「行訂正」を優先使用したのは、
処理の結果を明示したかったからだと記憶します、多分。

※英表記説明
 var=変数宣言、call=手続き実行、proc=手続き定義開始、
 return=手続き終了、method=メソッド呼び出し

(kevの記述は次稿とします)

18473 サブwfmの合計値をメインwfmに反映させる一例(2) 悲しげ 2003/01/12-00:01
記事番号18472へのコメント
(続きです)
手続き定義開始 フォーム::行訂正終了(長整数 &明細番号,長整数 &モード)
 call 合計値取得()
手続き定義終了

手続き定義開始 フォーム::行挿入終了(長整数 &明細番号,長整数 &モード)
 call 合計値取得()
手続き定義終了

手続き定義開始 t数量::ソース値更新()
 var 自動,長整数{&更も}
 method @フォーム.更新モード取得(&更も)
 if(&更も=2)
  method @フォーム.更新モード設定(0)
  /*↑これだけで自動的に行訂正終了イベント(合計値取得手続き)が発生*/
  method @フォーム.更新モード設定(2)
 end
手続き定義終了

手続き定義開始 t単価::ソース値更新()
 var 自動,長整数{&更も}
 method @フォーム.更新モード取得(&更も)
 if(&更も=2)
  method @フォーム.更新モード設定(0)
  /*↑これだけで自動的に行訂正終了イベント(合計値取得手続き)が発生*/
  method @フォーム.更新モード設定(2)
 end
手続き定義終了

proc 合計値取得()
 編集表 "掛売上2.tbl"
 method ハンドル=&hwindow,@フォーム.再描画(1)
 /*サブkevからメインwfmを操作する場合は「ハンドル=&hwindow」と記述*/
 method @u税抜計.グループソース値取得(&sub計,0)
 method @u税額計.グループソース値取得(&sub税,0)
 /*&sub計などの変数は共通変数として別途宣言済*/
 編集表 "掛売上1.tbl"
 if(#EOF)
  確認 "EOFでは実行不能"
  return
 end
 行訂正 終了状態=&終了,[sub計]=&sub計,[sub税]=&sub税
 method ハンドル=&hwindow,@フォーム.描画更新()
 編集表 "掛売上2.tbl"
end

18483 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 山本 2003/01/14-19:29
記事番号18472へのコメント
悲しげさん、ありがとうございます。山本です。

説明不足すいませんでした。
>作るのでしょうか。」とは、う〜ん、文意が判りません。(?_?)
>http://www.fuku3.com/~habata/kbbs/kakov8/08089.htm
>のことでしょうか? 

フォーム定義内の項目オブシェクトが以下のようになっていますね、
このイベントの中にイベントファイル名というフォルダを指定する場所がありますが、
操作できないように白くなっています。管理工学にはお金は払ったのに
なんで使えないのでしょうか?
表示|罫線|背景|フォント|編集|イベント|テキスト

>それと「私は一括処理は無理ですからイベントで行いたいので」と
>のことですが、そのような認識方法はいささか疑問に思いますし、
>またこの手の処理(タイトル参照)は「古典一括」では難しいので
>イベントに頼るのがそもそも妥当だろうと思います。
そうなんですか?。イベントと一括処理は異なるものと思っていました。
では考え方は、項目毎に指定した一括処理と思っていればいいのでしょうか?

kevについて説明していただきました。
この作成はファイルパレットから新規kevとして作成すればいいのですね。
また、作成後にどこの項目定義でイベントとして設定すればよいのでしょうか?
宜しくお願いします。
18485 Re:サブwfmの合計値をメインwfmに反映させる一例(1) うにん 2003/01/14-19:54
記事番号18483へのコメント
山本さん

>フォーム定義内の項目オブシェクトが以下のようになっていますね、このイベント
>の中にイベントファイル名というフォルダを指定する場所がありますが、
>操作できないように白くなっています。管理工学にはお金は払ったのに
>なんで使えないのでしょうか?
>表示|罫線|背景|フォント|編集|イベント|テキスト

イベントファイル名を指定できるのはフォームオブジェクトだけです。
個別のオブジェクトに別々のkevファイルを指定はできないので、白くなります。

18486 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 山本 2003/01/14-20:26
記事番号18485へのコメント
うにんさん。
なるほどわかりました。
つまり、フォームのオブジェクトでイベントがありますね、
そこで作成したkevを指定するのですね。

>イベントファイル名を指定できるのはフォームオブジェクトだけです。
>個別のオブジェクトに別々のkevファイルを指定はできないので、白くなります。
>

悲しげさん
指導されたようにkevを作りやってみました。
まだうまくはいきませんが確認させてください。
u税抜とはサブの合計値のことですね。また&sub計とは合計値を変数にしたものですね。

18494 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 悲しげ 2003/01/14-22:33
記事番号18486へのコメント
どもっ、山本さん

#18483
>管理工学にはお金は払ったのになんで使えないのでしょうか?

管理工学にお金を払わないで、「体験版」だけでもイベントファイル名を指定することはできます(^^;)。
なんてことはともかく、うにんさんのコメントで、「フォーム」のオブジェクト属性の「イベント」タブから
入力することがご理解いただけたようでよかったです。

>そうなんですか?。イベントと一括処理は異なるものと思っていました。
>では考え方は、項目毎に指定した一括処理と思っていればいいのでしょうか

これまたどちらかと云うと余談に流れてしまいますが、そう云うことで
はなくて、「私は一括処理は無理ですからイベントで行いたいので」の
文面を
    一括処理=難解
    イベント=簡単
のように解釈することもできたので、どちらが難解・簡単と云う問題でもなく、
結局はどっちもどっち、適材適所で使い分けるべきものと考えた方がよいだろう、と云う程度の趣旨でありました。
私は「イベント」の定義付けに挑戦するつもりは全くありませんが、
少なくとも「項目毎に指定した一括処理」ではないと思います。

さて本題、#18486
>u税抜とはサブの合計値のことですね。

書き忘れてましたが(^^;)、あの抜粋はサブのkevの記述です。
で、「@u税抜計」は(メソッドに「ハンドル=&hwindow」と付けていないから)サブwfmのオブジェクトです。
頭に「u」が付いているのは、桐のデフォルトではグループ項目オブジェクトでして、#18472で書いた

>サブwfmにはグループ項目として#合計([税抜額])等が存在しているも
>のとします。

に対応しています。

>また&sub計とは合計値を変数にしたものですね。

と云うより、#18473で書いた

  method @u税抜計.グループソース値取得(&sub計,0)

とは、変数「&sub計」に、グループ項目「u税抜計」オブジェクトのソース、
即ち#合計([税抜額])の値を代入するメソッドです。
話が前後してしまいますが、このメソッドを行う前に、念のために編集表を
サブの対象表たる「掛売上2.tbl」に移しています。
で、サブ表の合計値をメソッドで変数に取得したからには、今度は編集表を
メイン表である「掛売上1.tbl」に移して、こちらの表に「行訂正」でもっ
て書き込んでいる、と云う訳です。

18508 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 山本 2003/01/15-08:35
記事番号18494へのコメント
山本です。
うーん、なんだかとても難しいですね。
一応、悲しげさんのサンプルを何度も読み返しkevを作成してサブフォームのオブジェクトで指定してみました。
案の定うまくはいきません。
仮に悲しげさんのを真似たとしても、理解できないで行ってしまうとその後の
テーブル等の変更時に困ってしまうとも思います。

やはり僕にはフォームでデータを扱うことのほうが理解しやすいのですが。
例えばもっと単純にサブフォームの合計値を変数に落として、メインの
合計で変数を代入するなどないのでしょうか。
18511 Re:サブwfmの合計値をメインwfmに反映させる一例(1) うにん 2003/01/15-13:02
記事番号18508へのコメント
失礼します。

>例えばもっと単純にサブフォームの合計値を変数に落として、メインの
>合計で変数を代入するなどないのでしょうか。

まず代入というのは本来変数にするもので、「項目値代入」なんて変な名前の
コマンドを作るから混乱するのではないかと>K3さん

説明には「項目値を設定または変更します。」となってるんだから、「項目値変更」

にすればよかったのに。で、これは「入力中の項目値を」なので、今のように
サブの表に入力中に使うとしたら、サブの表の項目値を変更したい場合です。

実際にはメインの表(入力中でない=表示状態)の項目値を変更したいわけなので、
「行訂正」を使った方が簡単です。

合計値を変数に取得するところまではできたようですので、あとは悲しげさんのように

編集表 「メインの表」
行訂正 [合計値の項目]=&変数 /*これが「メインの合計で変数を代入」です*/
編集表 「サブの表」

という流れでできると思いますが。

18512 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 悲しげ 2003/01/15-14:14
記事番号18508へのコメント
どもっ、山本さん、難しいことは否定しませんが(^^;)

>やはり僕にはフォームでデータを扱うことのほうが理解しやすいのですが。

はて? 私が書いたのもまさしくフォームで扱っていますが?
このセンテンスはどういう意味かな?

>例えばもっと単純にサブフォームの合計値を変数に落として、メインの
>合計で変数を代入するなどないのでしょうか。

はて2? 私が書いたのは(単純ではないかもしれませんが)
まさしく「サブフォームの合計値を変数に」取得して「メインの合計」相当の項目に「変数を代入」しているのですが?
このセンテンスもどういう意味かな?

メイン部で合計を示すオブジェクトのソースを項目ではなく
変数にしたいと云うことなら、これは駄目です。
実は、私もその線で試したことがあります。
例えば、簡単にはメインの合計のソースを組込変数の&合計値とし、
会話処理でサブの[金額]項目とかにフォーカスを置いて「項目集計」をするとか。
でも、たちまち別伝票に移動した時に困ることに気がついて
ボツにしました。(^^;)
あるいは上記センテンスの意図するところは、後段は単なる
修辞であって、「もっと単純に」だけにあると云うことでしょうか?
とすれば、それは私も知りたいところです。(^^;)

18513 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 山本 2003/01/15-14:14
記事番号18511へのコメント
山本です。うにんさんありがとうございます。
早速やってみます。
なんたって、僕はサブフォーム合計をかれこれ一年以上もメインフォームに手入力していたのです。
その分、泣くに泣けないトラブルもありました。
まずやってみます。
>
>
>行訂正 [合計値の項目]=&変数 /*これが「メインの合計で変数を代入」です*/
>編集表 「サブの表」
>
>という流れでできると思いますが。


18514 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 山本 2003/01/15-14:27
記事番号18512へのコメント
山本です。はて、を2つもらいました。
確かに悲しげさんのもフォーム上での操作ではありますが、難しく感じます。
では実際の項目をお伝えして、悲しげさんのサンプルを使わせていただいたイベントを記述します。
それぞれの項目名は、サブG110.TBL合計は「金額」でメインU110.TBLは「原価計」です。

手続き定義開始 フォーム::行訂正終了(長整数 &明細番号,長整数 &モード)
 call 合計値取得()
手続き定義終了

手続き定義開始 フォーム::行挿入終了(長整数 &明細番号,長整数 &モード)
 call 合計値取得()
手続き定義終了

手続き定義開始 t数量::ソース値更新()
 var 自動,長整数{&更も}
 method @フォーム.更新モード取得(&更も)
 if(&更も=2)
  method @フォーム.更新モード設定(0)
  method @フォーム.更新モード設定(2)
 end
手続き定義終了

手続き定義開始 t単価::ソース値更新()
 var 自動,長整数{&更も}
 method @フォーム.更新モード取得(&更も)
 if(&更も=2)
  method @フォーム.更新モード設定(0)
  /*↑これだけで自動的に行訂正終了イベント(合計値取得手続き)が発生*/
  method @フォーム.更新モード設定(2)
 end
手続き定義終了

proc 合計値取得()
 編集表 "TBL_G100.tbl"
 method ハンドル=&hwindow,@フォーム.再描画(1)
 method @u金額.グループソース値取得(&sub計,0)
 /*&sub計などの変数は共通変数として別途宣言済*/
 編集表 "u110.tbl"
 if(#EOF)
  確認 "EOFでは実行不能"
  return
 end
 行訂正 終了状態=&終了,[原価計]=&sub計
 method ハンドル=&hwindow,@フォーム.描画更新()
 編集表 "G100.tbl"
end


18516 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 悲しげ 2003/01/15-16:26
記事番号18514へのコメント
すいません、山本さんの No.18514 の投稿意図が全く判りません。
問題点は、端的に云えば、いったい何なのでしょう?
18518 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 山本 2003/01/15-17:26
記事番号18516へのコメント
山本です。
僕がしたいのはタイトルどおりです、その他の目的はありません。
悲しげさんのアドバイス。
桐を充分に分かっている人にはとても分かりやすいのとは思いますが、
教えて頂いている解説ではわかりますが、実際技術的なことになると専門用語があり過ぎて理解できません。
少なくともここの掲示板で「こまった!」とこられる方は、マニュアルだけでは理解できない方もいると思います。

また熟知している上でのテクニック組み合わせる方ならいいでしょう、
しかし初歩段階の僕レベルでは、何度も失敗して体得する方法しかないのです。

僕のしたいことは一つで、サブフォーム合計値をメイン項目値に入れたいだけなのです。
また教えていただきたい方法についても一つで充分なのです。
しかもそれは完璧でなくていいんです。メインの項目値に数字が入れば第1段階は満足なのです。
しかし次に必ず不満を持ち、再度質問し教えていただく時は理解も早いのではないでしょうか。

>すいません、山本さんの No.18514 の投稿意図が全く判りません。
>問題点は、端的に云えば、いったい何なのでしょう?
たしかに、不可解に思えるかもしれません。
しかし、僕には悲しげさんが、kevの羅列を見せてくれて、全体的には進行がわかるものの、
その一行一行でなにがどうなってどうしろというのか、わからないのです。

気分を害されたら深くお詫びいたします。
また、時期を改めて皆さんの記事を見ようと思います。
この度はお手数をおかけして申し訳ありませんでした。
18524 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 悲しげ 2003/01/15-20:46
記事番号18518へのコメント
どもっ、山本さん、
山本さんが、このツリーのトップ#18468で、「一括処理ではなくイベントでやりたい」的な発言をなさっていたので、
イベントについてはある程度の技量があるだろうとの前提でコメントして来たところです。
事情は大体諒解できましたので、本件は一旦中断としましょう。
これを機に、イベントについて色々勉強したアカツキには、先の拙文なども改めて参考にしていただければ幸いです。

最後に、イベントに挑戦するなら、先ずは桐のhtmlヘルプで
◎【イベント処理】の中の諸々の記述、
◎特に今回の関連では「定義してみましょう」
あたりはじっくりと読んでみるとよいでしょう。

18558 Re:サブwfmの合計値をメインwfmに反映させる一例(1) 山本 2003/01/16-19:59
記事番号18524へのコメント
山本です。色々、ありがとうございます。

今回のご指導で、まず一括処理とイベントについて少々ですが理解できました。
これは僕にとって大きな収穫です。
会話処理専門の僕には、DOS時代にはなかったコマンドボタン等が重宝して
これでなんでもできると安心していましたが、誰でも使えるシステムとなるとその限界にぶつかります。

やっぱり桐を使う以上、一括やイベントは避けられないのですね。
今回は自分の知識の無さに、イライラもしましたが、悲しげさんから頂いた
イベントのサンプルをじっくり勉強しようと思います。
これでもあの後、サンプルに手を加えて、エラーは出なくなったのですよ。
でも、どうしてもそれ以後はすすみません。
また、そのときお世話になると思いますので宜しくお願いします。

戻る