過去の桐井戸端BBS (桐ver.8)
10952 入力されたデータにより表引きする表の切り替えを行いたい 吉田 2001/04/20-15:33
初めて投稿させていただきます。

職場にて桐8を使用しておりまして、見積表を作成しております。
この表の定義において"表引き条件"の項目がありますが、この項目の定義画面に
 比較項目、表引き表、使用索引、検索項目、値項目、チェックボックスがあり、
この画面の”表引き表”を指定する項目にファイル名を文字で入力しております。

ここの”表引き表”に入力する文字を関数や項目名またはその他の方法で、
表引きする表のファイル名を変化させる方法はあるのでしょうか?
とりあえず、関数や項目名を入力したのですが、エラーが出ました。

と、言いますのもある種別(数種類の決まった文字)という項目において、
入力されたデーターにより表引きする表の切り替えを行いたいのです。
項目計算式に
#条件選択([種別]="1",#表引き([XXX],=,"表1",[XX],[X]),
     [種別]="2",#表引き([XXX],=,"表2",[XX],[X])...)等
と入力すれば出来ますが、あえて、表引きする項目にカーソルが来た時に
表引き画面が出て表引きする値を選択する方法を取りたいのです。
それも、一括処理を使用せずに、表のみの操作で行いたいのです。

どなたかご存じの方がおられましたら、ご教授願います。
それとも、私の行おうとすることが、やはり間違っているのでしょうか?

それでは、失礼いたします。
10953 Re:表引き条件について natsu 2001/04/20-15:47
記事番号10952へのコメント
これは、私も困った経験があります
#表引きのヘルプにありますが 引数 file は、

file#タ検索する表ファイル名を指定します。
     この引数に計算式は指定できません。
     文字列型の定数または変数で指定してください。
     自身の表を指定することはできません。

ですから、表の中だけでは難しいです

一括処理なら 「コマンド」を使用することになるでしょう
もしくは、一覧表フォームでイベント処理でしょうか

10954 Re:表引き条件について 吉田 2001/04/20-15:57
記事番号10953へのコメント
>natsuさん
早速の回答有り難うございます。

>これは、私も困った経験があります
>#表引きのヘルプにありますが 引数 file は、
>
>file#タ検索する表ファイル名を指定します。
>     この引数に計算式は指定できません。
>     文字列型の定数または変数で指定してください。
>     自身の表を指定することはできません。
>ですから、表の中だけでは難しいです
やはりそうですか・・・

>一括処理なら 「コマンド」を使用することになるでしょう
>もしくは、一覧表フォームでイベント処理でしょうか
私自信がまだフォームのイベントを理解していないと言うか初心者ですのでどのようにすればよいかが全く解らないのです。
簡単に出来ればいいのですが。
このようにすれば出来るよって、教えてもらえませんでしょうか?
10957 Re:表引き条件について ONnoji 2001/04/20-17:11
記事番号10954へのコメント

>ある種別(数種類の決まった文字)という項目において、
>入力されたデーターにより表引きする表の切り替えを行いたいのです。
>項目計算式に
>#条件選択([種別]="1",#表引き([XXX],=,"表1",[XX],[X]),
>     [種別]="2",#表引き([XXX],=,"表2",[XX],[X])...)等
>と入力すれば出来ますが、あえて、表引きする項目にカーソルが来た時に
>表引き画面が出て表引きする値を選択する方法を取りたいのです。
>それも、一括処理を使用せずに、表のみの操作で行いたいのです。

>簡単に出来ればいいのですが。
>このようにすれば出来るよって、教えてもらえませんでしょうか?

吉田さん こんにちは。ONnojiです。

実験の結果です。参考にしてください。

項目属性の[表引き]タブの[表引き表]に、組み込み変数の&STRを設定したら見事に出来たかに見えましたが、
残念ながら表を開く前の&STRの値で固定されてしまいました。
もちろん&STRの値が未定義だったりするとエラーでして、表引きできなくなってしまいました。

どうやら、項目属性の[表引き]の[表引き表]は表が開く時点で固定されてしまうようです。

従って表引き表を動的に変更するのは無理かと思います。


10958 Re:表引き条件について natsu 2001/04/20-17:16
記事番号10954へのコメント
これだけの情報だと、イメージがわきにくいのですが...

自分でイベント処理を組むとすれば

1)目的の項目にフォーカス取得されたときに
  別の項目値によって決定される表をフォームで開く

2)新しく開かれた表の何行目にカーソルを持っていくか決める

3)新しく開かれた表で、この値を選択したいという行があればその行の行セレクターをクリックする

4)その行をクリックすることによって、目的の項目値を変数へ代入する

5)その変数を元のフォームの該当項目へ行訂正コマンドで戻す


このような所でしょうか
ただ、イベント処理や一括処理について知識がないと、上記の手続きも理解してもらうのは難しいと思います

自分の所でも、このような一括処理・イベントを自作しましたが
VAR業者さんに頼んだらいくらかかるかなー というぐらいのものになってしまいました

#条件選択で表を切り替えられるのであれば、それが一番だと思います
10959 Re:表引き条件について 吉田 2001/04/20-17:23
記事番号10957へのコメント
>吉田さん こんにちは。ONnojiです。
はじめましてONnojiさん、回答有り難うございます。
>
>実験の結果です。参考にしてください。
>
>項目属性の[表引き]タブの[表引き表]に、
>組み込み変数の&STRを設定したら見事に出来たかに見えましたが、
>残念ながら表を開く前の&STRの値で固定されてしまいました。
>もちろん&STRの値が未定義だったりするとエラーでして、
>表引きできなくなってしまいました。
>
>どうやら、項目属性の[表引き]の[表引き表]は
>表が開く時点で固定されてしまうようです。
>
>従って表引き表を動的に変更するのは無理かと思います。
色々と実験を行って頂き有り難うございます。
やはり、表のみで行うのは無理みたいですね。
何とかイベントを使えるように勉強してみます。

10961 Re:表引き条件について 吉田 2001/04/20-17:33
記事番号10958へのコメント
natsuさん
ご返答有り難うございます。

>ただ、イベント処理や一括処理について知識がないと、上記の手続きも
>理解してもらうのは難しいと思います
一括処理はv5で少しかじっているので何とかなると思うのですが、
なにぶん簡単な表ですので、極力表操作のみで行えたらいいな〜と思いまして。

natsuさんが教えて頂いた情報で大まかなイメージが理解出来ました。
あとは格闘あるのみですので、マニュアル等を見ながら頑張ってみます。
10965 Re:表引き条件について 佐田 守弘 2001/04/20-20:56
記事番号10961へのコメント
吉田さん

「表だけで処理したい」は、きわめて正しい考え方で、
何も無理やり一括処理などを組まなければならないという事ではありません。
とは言え、表だけでの処理では限界がありますから、
それを助けるのがフォームとフォーム上で使われるイベントです。
イベントはあたかも難しいかの様に思われがちですが、元来は「素人の素人による素人のためのシステム」を
組むためのツールであって、憶えてしまえばこれほど便利で簡単なものはありません。
イベントの作り方は私のサイトにも掲載しておりますので、参考にしてみて下さい。
桐ver.5で一括を作った事があるなら、必ずや分かるはずです。

イベントそのものの作り方はここでは割愛しますが、ポイントのみを伝えます。

ここでは、[種別]の値で表引き表を切り換えるとの前提で話を進めます。
使用するイベントですが、[種別]の値を入力するオブジェクトに対して、「ソース値更新」イベントを使うのが良いでしょう。
また最初にフォームを開いた時、およびレコードポインタを移動した時にも、
その時の対象行の[種別]の値を調べる必要があります。
そこで、「フォーム開始」イベントと、「レコード移動」イベントも使う事にします。

これらのイベントに対するイベントハンドラ(イベントで動くプログラムの部分)には、
 代入 &表引き表=#条件選択([種別]=1,"なんとか",[種別]=2,"かんとか")
の様な代入コマンドを記述します。プログラムはこの1行だけです。
(3つのイベントハンドラを作りますから、同じものを3回書きますが)

また、変数「&表引き表」は、イベントファイルの先頭の部分に宣言しておきます。
これは、一括処理と同じです。

後は、表定義で、表引き表に「&表引き表」と設定して下さい。

多分これだけで目的の事ができると思います。
そして、これが初めてのイベントの作成記念になる事でしょう。

佐田守弘(KS-00119)
10966 Re:表引き条件について ONnoji 2001/04/21-10:51
記事番号10954へのコメント
>私自信がまだフォームのイベントを理解していないと言うか初心者ですので
>どのようにすればよいかが全く解らないのです。
>簡単に出来ればいいのですが。

吉田さん こんにちは。ONnojiです。

イベントを全く使わなくても出来ました。
フォームの機能だけで出来ます。
v8マニュアル「フォーム」のp427を参照してください。

以下は実験結果です。参考にしてください。

<表の設定>

項目名__ データ型
材質_____ 文字列__
品名_____ 文字列__
価格_____ 数値_____________比較項目_表引き表____検索項目_値項目
表引き1 数値_____ 表引き__ 品名_____price1.tbl_品名_____価格
表引き2 数値_____ 表引き__ 品名_____price2.tbl_品名_____価格

*[価格]には表引きを設定しません。
*フォームの入力支援ボタンで[表引き1]と[表引き2]の表引き機能を使い分
けます。

<表引きの入力支援ボタンを作る>
フォームの形式は何でもよいと思います。
*フォームの編集対象表は必須です。

フォームの テキストボックス(t価格)の [テキスト]タブの[入力時の操作]を実行して、
[入力支援ボタン]をONにします。
こうするとテキストボックス(t価格)の内側に小さな[入力支援ボタン_n]が作成されます。

[入力支援ボタン_n]のオブジェクトの属性を次のようにします。

選択値リスト:#条件選択([材質]="鉄","表引き1",[材質]="ステンレ","表引き2")
リストの種別:表引き項目
自動表示:未定義時 または 常に表示 ←自動的に表引きが表示されます。

*選択値リストで表引きする項目名の前後に角カッコ([ ])を付けると失敗します。
注意してください。
(誤)#条件選択([材質]="鉄","[表引き1]",[材質]="ステンレス","[表引き2]")
(正)#条件選択([材質]="鉄","表引き1",[材質]="ステンレス","表引き2")

10967 Re:表引き条件について Rockey 2001/04/21-10:55
記事番号10961へのコメント
>なにぶん簡単な表ですので、極力表操作のみで行えたらいいな〜と思いまして。

たとえば、こういうのはどうでしょうか?
表引き表を3つと仮定させていただきます。
表引表はA表.tbl、B表.tbl、C表.tblとします。
コードなどを入力する項目を1つ作成します。
表引きさせる項目を3つ用意して
[表引きA][表引きB][表引きC]とします。
それぞれに、
#表引き([コード]="A表.tbl",[コード],[商品名])
#表引き([コード]="B表.tbl",[コード],[商品名])
#表引き([コード]="C表.tbl",[コード],[商品名])
と計算式を定義します。
さらに、表引きした結果を返す項目を1つ用意します。
[結果]としますが、そこに次の計算式を定義します。
#条件選択([表引きA],[表引きA],[表引きB],[表引きB],[表引きC],[表引きC],1,"")
これで、どれかの表にある物を[結果]に表示します。
A,B,Cに同じコードがあってはうまくいきません。
どれにも該当しない物は[結果]は未定義になります。

これだと、表定義だけでできますが、いかがでしょうか?
はずしてるかもしれません。そしたらごめんなさい。

また、表引きする表の数だけ項目を作る必要があります。
ご参考までに......
10996 Re:表引き条件について 吉田 2001/04/23-08:19
記事番号10952へのコメント
佐田さん、ONnojiさん、Rockyさん
色々な手法をお教え頂き有り難うございます。
皆さんから教えて頂いた方法を試し、他の職員の意見を聞き最終的に決定したいと思います。

この度は本当に有り難う御座いました。

戻る