過去の桐井戸端BBS (桐ver.8)
5855 入力したデータによって表示させるフォームを変えたい くるみ 井上 2000/05/03-12:35
またまた質問させていただきます。
データ項目が例えば
[お客][区分][A][B][C][D][E][F][G][単価][数量]
[金額]
としまして伝票形式フォームで [区分][単価][数量][金額]のみを明細行に配置し、
[区分]に”ふくざつ”と入力した場合はカード形式の入力フォーム”ふくざつ”を表示させ
[A][B][C][D][E][F][G][単価]の項目を入力し、入力後はまた明細行の[単価]に
データを渡し[数量]以降の入力へ移る。

また、[区分]に”かんたん”と入力した場合はカード形式の入力フォーム”かんたん”を表示させ
[A][C][単価]の項目を入力し、入力後はまた明細行の[単価]にデータを渡し[数量]以降の入力へ移る。
実際に考えておりますのは、項目数が30ぐらいあり、[区分]の種類によっては
5項目程度の入力しか必要ないものもあり、別の種類ではすべての項目の入力の
必要があるというもので、また[お客]をグループ項目にして伝票形式フォームで作成したいと
思っておりましたが、明細行に30もの項目を置くと実用上は使いにくくあきらめておりました。
先日のイベント処理でこういうことも可能なのだろうかと思い、
質問させていただきます。桐はV8です。 

5857 Re: 悲しげ 2000/05/03-13:41
記事番号5855へのコメント
どもっ、くるみ 井上さん
イベントでの考え方のひとつを大ざっぱに書きます。
これは、メイン&サブフォームを使った方がいいと思います。
と云うことは、メイン用の表(伝番・日付・お客・区分?等)と、
サブ用の明細表(A・B・C…単価・数量・金額、そして伝番)が必要になります。
リンク項目はふつうは伝番あたりだと思います。
この表に「参照整合性」を設定することも可能ですが、その話はおいといて。(^^;)

メインwfmはカードでヘッダ部の項目オブジェクトを設定します。
サブ1wfmとして、[A][B][C][D]…[単価]等を入れた伝票wfmを作ります。
サブ2wfmとして、[A][C][単価]を入れた伝票wfmを作ります。
サイズはサブ1と同じがいいでしょう。
メインwfmの適当な場所に、サブフォームオブジェクトを置きます。
ソースをサブ1wfmにしますから、サイズはサブ1と同じ(ちょっとだけ大きめ)にします。
次にサブ1を設定した同じ場所に、もうひとつサブフォームオブジェクトをぴったり重ねます。
ソースをサブ2wfmとします。そし
てこの時、画面表示を「しない」にしておきます。

動かす時は、最初はサブ1のみが表示されます。あと、イベントの記述で、
[区分]="かんたん"であれば、オブジェクト操作で、サブ2の「.画面表示="1"」、
サブ1を「.画面表示="0"」とします。
こうすると、サブ1が画面表示されずサブ2が画面表示されます。
[区分]="ふくざつ"だとその逆です。

他にも、サブ部の合計金額をメイン部にどうやって反映させるか等の
ごちゃごちゃした問題はありますが、ま、基本的な考え方のひとつとして、
このようなやり方もあると云うことで、結論は「できます」です。(^^;)

5866 Re: くるみ 井上 2000/05/04-07:04
記事番号5857へのコメント
悲しげさんありがとうございます。
お蔭様でイベント処理につきましても、やっとすこし概要がつかめてきました。
サブフォームの切り換えにも挑戦してみたいと思います。
サブフォームのリンク項目に設定するグループ項目に計算項目が使えると便利なのですが・・・
ありがとうございました。

5890 Re: bonito 2000/05/05-12:05
記事番号5866へのコメント
井上さん、こんにちは。 ちょっと留守にしてました。 <(_ _)>

>サブフォームのリンク項目に設定するグループ項目に計算項目が使えると便利なのですが

メインフォーム側は(グループ化しないなら)計算項目でも(計算式でも)OKです。
それを受けるサブ側の項目はグループ項目に限るみたいなのでXですけど (^^; 

計算項目がグループ項目として使えないのは(止むを得ないとは思うものの)、私も不便を感じます。
ただ対処する方法は幾つかあると思います。 
っでその場合のキーワードは矢張り、表の多重化につきると思います。
計算の結果を項目に代入する方法はいろいろありますから、是非トライしてみて下さい。

5897 Re:フォームの作成について その2 くるみ 井上 2000/05/05-21:34
記事番号5890へのコメント
bonitoさんこんばんは。先日からありがとうございました。
PoorPimmは ショートカットをデスクトップに造り利用させていただいております。
イベント処理の勉強は連休後に・・・・・

ところで、計算項目をグループ項目として使うために、一度別の表に書き出し、
その表を使うとか考えてみたのですが・・・。
計算項目を使用したい理由の1つが、他のデータとの明確な区別のためです。
例えば、氏名・住所・電話番号等ですと同じ人を入力する可能性がありますので、
ダミーとして氏名と入力年月日を連結させて、これをクループ項目として使えれば
その可能性がなくなるので助かるのですが。
計算の結果を項目に代入する方法とは、具体的にはどのような方法があるのでしょうか、
不勉強で申し訳有りませんが、ヒントでもお教え頂ければと思います。

PS(まないた板とはどういう意味ですか?)

5906 Re:計算項目をグループ項目に bonito 2000/05/06-01:07
記事番号5897へのコメント
井上さん、ご質問の件は#5892で悲しげさんがちょと触れていますので
あとで詳しいご説明が頂けるものと思います。 (^_^;

とりあえず、前振りと言う事で・・・、
先ず、WIN桐ではDOS時代と違って別表(作業表)に書き出す事は余りしません。
(でも時々どうしてもって時もありますが)
それは表を多重化できるからです。
(同じ表をすっぴんで複数、制限内なら何個でも開けます)

えーっと、計算項目を計算項目でなくする古典的な方法としては「編集初期値」に
計算式を設定するというのがありますね。

私は現在、請求書の顧客別の締切日を多重化した表で置換(顧客マスタから表引き)して求めています。
請求締切日でグループ化して発行先を表示選択印刷する為です。
 参考1.イベント内では、&締切=#表引き(…)のような直接表引きは出来ません。
 参考2.多重化した表を変更後保存終了しても多くの場合もともとのフォームには
    反映されません。 ウインドウ更新コマンドとかが必要です。

あと例えば井上さんの例ですと、[氏名]のソース値更新イベントを使って
項目値代入 [氏名ID]=[氏名]+&年月日 とかすれば、[氏名ID]は画面表示
されていなくても計算式の値が自動的に代入されます。

ps
まないた版とは「俎上の鯉」?のつもりで自分の名前とかけて、まぁ皆さまの批判や
冷笑の矢面に立つも辞さない、心構えであると言う… (^_^;
詳しくは同一フォルダ中の「_読んでね.CMD」をご覧下さい。

5912 Re:計算項目をグループ項目に 悲しげ 2000/05/06-13:49
記事番号5906へのコメント
え〜、本件について、詳しい説明をするほど使い込んでいる訳では
ないので、あくまで1例と云うことで。

私も、メ&サ(メイン&サブフォームの略)において、計算項目をリンク項目として試しています。
もちろん、計算項目はサブの方のグループ項目にはできませんから、
メインのリンク項目を正確には非計算項目としています。
つまり、何らかの形で計算項目の値を非計算項目たるリンク項目に置き換えていることになります。
このやり方は幾つかあるでしょうけど、私が試しているやり方を(しぶしぶ)報告させていただきます。
なお、このやり方がモアベターであるかどうかは判りません。
もっとうまい方法があれば、ぜひ皆様にご教示いただきたいと思います。
(関係ないけど、よく「ご教授」なる云い方がなされます。
この云い方には何だか上下関係が入ってて嫌なんですが、日本語として見ても、
「授ける」と云う敬語が入っていてその上さらに「ご」を付けると二重敬語に見えて、
要するに何か違和感があります。)

まずメインの方で新規レコードが発生した場合、一般的にはbonitoさんがおっしゃるとおり、
またパイオニアであるIka Spaghetti氏が例示したように、
編集初期値に計算式を設定する方法がいいと思います。
私の場合は、ちょいと訳あって、メインデータを別の作業表(件の項目はモロに項目計算式で設定)で処理し、
そのデータをメ&サに読み込ませているんですけど。
メイン部対象表が"メ.TBL"だとします。
項目構成は[あ],[い],[う],[え],[お],[か],[き],[く],[こ],[リンクclc],[リンク]とします。
サブ部対象表は"サ.TBL"として、項目構成は[リンク],[商品code],[品名],[単価],[数量],[金額],[備考]くらいだとします。
この場合、メ&サを繋ぐリンク項目は[リンク]です。
サブの方ではこの[リンク]項目をグループ項目にしています。
さて、メインの方の[リンク]と[リンクclc]の関係ですが、[リンク]と云うのは、非計算項目です。
次、[リンクclc]の方は、計算項目でして、実はちょっと恥ずかしいんですが(^^;)、
以下のような変な項目計算式が設定してあります。
  [あ]+"α"+[い]+"β"+[う]+"γ"+・・・・・・+"ψ"+[こ]
これはDOS桐の「画面伝票」データからの互換性の保持その他の事情でこうなっておます。(^^;)
で、初期は[リンク]=[リンクclc]であるはずですし、一括処理等で[あ]〜[こ]の項目値が変更になる場合は、
当然、行訂正または置換で[リンク]=[リンクclc]と置き換えるようにします。
問題となるのは会話処理的に[あ]〜[こ]の項目値を変更する場合です。
この場合は、[あ]〜[こ]の全てのテキストオブジェクトに次のように「ソース値更新」イベントを発生させて、
[リンク]<>[リンクclc]となった場合には、値を同一にさせるようにしています。
でも、ちょっとダサイでしょ? 何だか恥ずかしいなぁ(^^;)

////////////////////////////////////////////////////////////
*-----メとサで参照整合性を設定してあるため、値の整合性保持のために
手続き定義開始 tあ::ソース値更新()
 cond([リンク]<>[リンクclc]) 項目値代入 [リンク]=[リンクclc]
手続き定義終了

手続き定義開始 tい::ソース値更新()
 cond([リンク]<>[リンクclc]) 項目値代入 [リンク]=[リンクclc]
手続き定義終了

・・・・・・・・・・・

手続き定義開始 tこ::ソース値更新()
 cond([リンク]<>[リンクclc]) 項目値代入 [リンク]=[リンクclc]
手続き定義終了
//////////////////////////////////////////////////////////////

「ソース値更新」イベントの発生時点及び「項目値代入」コマンドの説明は、
既に何度も書いて来ましたから、ここでは略します。
留意点としては、メ.TBLの表定義の方で、該当項目について、項目属性は
編集タブにて「入力後再計算(L)」にチェックを入れておくことです。
こうしておかないと、項目値代入がリアルタイムに実行されないからです(これには少々悩みました)。
同様のことは、フォームの当該テキストオブジェクト属性/編集タブにおいて「入力後再計算(R)」の
チェックでも可能かと思います
(「入力後再計算」は私は表定義の方でやっていて試してないんですが、フォームでの定義と
どちらが先に実行されるのか、もしご存知の方いらっしゃったら教えて下さい)。
まずは、こんなとこで。後はbonitoさんから「後振り」があると思います。(^^;)
5913 Re:計算項目をグループ項目に(続) 悲しげ 2000/05/06-13:51
記事番号5912へのコメント
No.5912が長くて分断されました。続きです。

えっ? メインのリンク項目を訂正した場合に、サブのグループ項目値はどうするのか、ですか?
すいません、ここは手抜きで「参照整合性」を設定して逃げてます。
参照整合性の設定に伴う問題点は、bonitoさんの方からコメントがあると思います。
で、私は参照整合性の方にお任せしきっていて、試していないのですけど、
次のようにすればいいんでしょうかね?(未確認)

手続き定義開始 tあ::ソース値更新()
 if([リンク]<>[リンクclc])
  項目値代入 [リンク]=[リンクclc]
  &リンク=[リンクclc]
  編集表 "サ.TBL"
  グループ値訂正 {[リンク]=&リンク},終了状態=&OK
  編集表 "メ.TBL"
 end
手続き定義終了

ps:おっと、今、うっかり逮捕状の発行抜きでwfmをいぢってしまい
したが、今日は「幽ザー」は出ない日みたい。(^^;)
5914 Re:計算項目をグループ項目に くるみ 井上 2000/05/06-14:32
記事番号5906へのコメント
bonitoさんありがとうございます。
「編集初期値」に計算式を設定するというのを早速やってみました。
グループ項目に設定できました。
この「編集初期値」というものは、表引きと項目計算式での表引きの合体したような?こともできるし、
まことに便利なものですね。
表定義の画面でももっと大きく扱ってくれると、このような私でも気付いたかもと思うしだいです。
今後おおいに利用させていただきます。
ps
昨夜仕事も一段落して、まないた版に3000人ほどの顧客データを読込んで、
またリポートにハガキや封筒を追加してなど考え、
csvでなくても直接表から読込もうなどとやっておりました。
ら・・・・なんと我が顧客データにはふりがな項目がないのに途中で気付きました。
GWでやはり少し疲れているようです。”#ふりがな”という関数はどこかにありませんか?

5918 Re:後振り(エピローグ) bonito 2000/05/06-18:44
記事番号5913へのコメント
悲しげさん、お呼びたてして誠に申し訳ありませんでした。
しぶしぶのお出ましにもかかわらず、詳しい説明を頂き、
たいへん「お勉強」になりました、心から感謝申し上げます。

/*------「後振り」その1----------*/

「ソース値更新」イベントで「項目値代入」というのは、ほぼ定番の感がありますが、
悲しげさんの例のようにトリガー項目が沢山ある場合には、
データ変更後に発生するイベントハンドル・・・、通常は
「行挿入終了」と「行訂正終了」と「行削除終了」!の3つしかない
筈ですので(グループ値…は置いといて)・・・、そこで「項目値代入」
したら駄目でしょうか。
但し上記「行削除終了」なるイベントハンドルは実在しません。
( 苦情は宮城さんところに寄せて下さい(^_^; )

「行挿入終了」時は処理対象行がどこにあるか、の問題が若干残りますが…
(行追加:マニュアルちゃんとしてね > K3)

/*------「後振り」その2----------*/

>えっ? メインのリンク項目を訂正した場合に、サブのグループ項
>目値はどうするのか、ですか?
>すいません、ここは手抜きで「参照整合性」を設定して逃げてます。

はぁ〜なるほど、「参照整合性」で自動更新かぁ、頭いい!ですね。
そのうち借用致します。

「参照整合性」その他については、又別の機会があれば、という事に致しましょう。
とりとめのないツリーになってきたようなので(^_^;

5920 Re:後振り(エピローグ) 悲しげ 2000/05/06-19:35
記事番号5918へのコメント
どもっ、bonitoさん、これで止めます。(^^;)

>/*------「後振り」その1----------*/
>
>「ソース値更新」イベントで「項目値代入」というのは、ほぼ定番の
>感がありますが、悲しげさんの例のようにトリガー項目が沢山ある
>場合には、データ変更後に発生するイベントハンドル・・・、通常は
>「行挿入終了」と「行訂正終了」と「行削除終了」!の3つしかない
>筈ですので(グループ値…は置いといて)・・・、そこで「項目値代入」
>したら駄目でしょうか。 但し上記「行削除終了」なるイベントハンドル
>は実在しません。( 苦情は宮城さんところに寄せて下さい(^_^; )

はぁ、なるほど。ぢつは私、「行訂正終了」イベントって使ったことないんです。(^^;)(^^;)
ただですね、本件の場合、実はヘッダ部項目は20ほどありましてですね、
その内、リンクに関係する項目は半分以下なんです。それで個々のオブジェクト毎の「ソース値更新」を使いました。
そのうち「行*終了」イベントも使ってみようとは思います。
                       うかんむりに元

戻る