過去の桐井戸端BBS (桐ver.9)
31018 表引き関数の設定方法 桐で一生 2006/02/01-19:47
表定義の際に、普通は項目属性の表引きタブから設定していけば、簡単に設定していけます。
ところが、ある条件の場合に別のデータを表引きしたいような場合には、ここの場面では表引き設定できません。
 たとえば、元の表(A表)に「住所」、「変更後住所」のデータがあるような場合、
新表(B表)には通常は「住所」を表引き関数により、引いてくればよいのですが、
A表に「変更後住所」欄に記載がある場合は、B表には「変更後住所」を使用したいのです。
 このような場合、どのように表定義をしたらよいのか。
お教えください。

31020 Re:表引き関数の設定方法 今村 誠 2006/02/02-01:13
記事番号31018へのコメント
桐で一生さんこんにちは「表引き関数の設定方法」は
住所の変更だと思うのでサンプルをアップしました。

たとえば、元の表(電話.tbl)に「住所」、「変更後住所」のデータがあるとします
新表(住所訂正.tbl)には通常は「住所」を表引き関数により置換します。
電話.tbl表の「変更後住所」欄に記載がある場合は、B表には
「変更後住所」を使用します。
住所訂正.tblは作業用になります。
訂正したい元表に併合置換するための作業用の数値項目を作り
#連番で住所と郵便番号を一緒に書き出します。

他にももっとスマートな方法があるかもしれません。
一度で訂正できるようにしたかったので、一括処理で作ってみました。
住所は都道府県はなくても変換してくれますが、郡や島から町村
或いは市から区が入っていないと正常に変換できません。
31022 Re:表引き関数の設定方法 アックン 2006/02/02-09:40
記事番号31018へのコメント
桐で一生さん、こんにちは。
たとえば[郵便番号]で[住所]または[変更後住所]を表引きするときの
項目計算式または編集初期値式の例です。

#cond(#set(STR,#tlu([郵便番号],=,"郵便番号.tbl",[郵便番号],[変更後住所])),&STR,1,#tlu([郵便番号],=,"郵便番号.tbl",[郵便番号],[住所]))

#cond は #条件選択
#TLU は #表引き のことです。

A表の[変更後住所]を表引きして、組み込み変数 &STR に代入します。
&STRの値が未定義でなければ、&STR を項目値にします。
&STRの値が未定義であれば、A表の[住所]を表引きします。

アックン(=^・^=)

31023 Re:表引き関数の設定方法 桐で一生 2006/02/02-10:44
記事番号31022へのコメント
今村さん、アックンさん早速のご回答ありがとうございました。
お二人のご解答を参考にこれからじっくり考えて対処したいと思います。
桐を使って業務処理を始めてから20年以上になりますが、ほとんどの業務を会話処理で
こなしてきました。このため一括処理やイベントについてはほとんどわかりません。
 業務もこれまでの時間よりこれから終着点までの時間を計ったほうが短い歳になりまし
たが、良いソフトに出会ったものだと思っています。おかげで私のこれまでの職業人生は
誠に充実したものになったと思っています。
 これからも桐を使って最終コーナーを全力で走行したいと思っています。
 お二方、本当にありがとうございました。


31025 Re:表引き関数の設定方法 宮城 2006/02/02-11:06
記事番号31023へのコメント
桐で一生さん、こんにちは。

念のため。本件に関しては「一括処理やイベント」、何の関係もありませんよ。
もっともシンプルなのはこんなのかな?

Keyは何なのか記述がありませんが、とりあえず[氏名](ダブったら困るけど)
とさせていただいて・・・、それから、B.TBLに[住所]しか持たないのがそもそ
もの間違い。[住所][A住所][A変更後住所]ぐらい持つべき。

これなら、[A住所][A変更後住所]は簡単に表引きできますよね?

しかして、[住所]の項目計算式に次のように記述します。

#条件選択([A変更後住所]<>"",[A変更後住所],1,[A住所])

31026 Re:表引き関数の設定方法 桐で一生 2006/02/02-16:46
記事番号31025へのコメント
宮城さんどうもありがとうございます。
>
>Keyは何なのか記述がありませんが、とりあえず[氏名](ダブったら困るけど)
Keyは「氏名]です。

>とさせていただいて・・・、それから、B.TBLに[住所]しか持たないのがそもそ
>もの間違い。[住所][A住所][A変更後住所]ぐらい持つべき。
B.TBL(元表)には、「住所]と「新住所]の設定があります。
それで、元表に新住所の記載がある人については、新表では、新住所を使いたいのです。
>これなら、[A住所][A変更後住所]は簡単に表引きできますよね?
できます。

>しかして、[住所]の項目計算式に次のように記述します。
>#条件選択([A変更後住所]<>"",[A変更後住所],1,[A住所])
わかりましたが、A.WFM上では、表引きした「住所」と「新住所」をともに画面上に表示し、上の計算式を書くのでしょうか。

新表(A.TBL)のA.WFMは、カード式の帳票で、必要に応じて人のレコードを1件づつ追加していくのです。
それで、追加する段階で住所を入力する場面があって、今まででは、常に「住所」を表引きしていたため、
印刷後に「新住所」になっていないのに気づき、しばしばやり直していたのです。
 これでは能率も悪いし、いけないので、常に新しい住所を表示(印刷)できないかと質問したしだいです。

長くてわかりにくい文章をお許しください。


31027 Re:表引き関数の設定方法 宮城 2006/02/02-19:11
記事番号31026へのコメント
>わかりましたが、A.WFM上では、表引きした「住所」と「新住所」をともに画面上に表
>示し、上の計算式を書くのでしょうか。

私は人に見せる項目と表に持つ項目は別物と割り切っています。項目数の
制限が厳しかった頃ならいざしらず、人に見せない項目が山ほどあったとして何か問題がありますか?

極端な話、表形式編集で、表示幅ゼロにしても表示のチェックはずしても
いっこうにかまいません。
31028 Re:表引き関数の設定方法 桐で一生 2006/02/03-08:59
記事番号31027へのコメント
宮城さんへ

>極端な話、表形式編集で、表示幅ゼロにしても表示のチェックはずしても
>いっこうにかまいません。
そのようにやって見たいと思います。
どうもありがとうございました。

31030 Re:表引き関数の設定方法 宮城 2006/02/03-10:59
記事番号31028へのコメント
見てくれを気にせずどんどん項目追加するべき、そのほうが絶対に楽です。

ところで、本件、落ち着いて考えてみますと、

> 元の表(A表)に「住所」、「変更後住所」

これ、元の表(A表)に[住所][変更前住所]を持たせ、住所変更時
は、[住所]の内容を[変更前住所]に転記してから[住所]に新住所を
入力するとすれば、いつも単純に[住所]を表引きすればすんじゃうような・・・。

注意。B表側で一旦表引きしてしまった[住所]は、いかにA表側で
修正があろうが、それだけでは引き直してくれません。常に最新データにするためには、
B表を開いた直後に「置換」するようにしてください。
31031 Re:表引き関数の設定方法 桐で一生 2006/02/03-16:32
記事番号31030へのコメント
宮城さんこんにちわ

>これ、元の表(A表)に[住所][変更前住所]を持たせ、住所変更時
>は、[住所]の内容を[変更前住所]に転記してから[住所]に新住所を
>入力するとすれば、いつも単純に[住所]を表引きすればすんじゃう
>ような・・・。
そうなんですが、、[住所]及び[変更前住所]を後で使用することがあり、新旧の住所を残しておく必要があるのです。


>ータにするためには、B表を開いた直後に「置換」するようにして
>ください。
したがって、「置換」はしないのです。
前に宮城さんに教えていただいた方法でやってみようと思っています。
31032 Re:表引き関数の設定方法 宮城 2006/02/03-17:00
記事番号31031へのコメント
桐で一生さん、こんにちは。

>そうなんですが、、[住所]及び[変更前住所]を後で使用することがあり、新旧
>の住所を残しておく必要があるのです。

あのお、残っておりますが。

ついでに、もう一回変更になったらどうしますか?
31033 Re:表引き関数の設定方法 桐で一生 2006/02/05-15:26
記事番号31032へのコメント
宮城さんこんにちわ

>あのお、残っておりますが。
>
>ついでに、もう一回変更になったらどうしますか?
このときに到ってはじめて新新住所を新住所欄へ入力し、新住所を住所欄(当初の住
所欄)へ手動で書き換えています。
それほど数は多くありませんので、カットアンドペーストでやっています。
つまり、常に最新の住所と、その前の住所を残しておくようにしているわけで、
それ以上は必要ないし、それ以下も困るわけです。

事情でコメント遅れて申し訳ありません。


31034 Re:表引き関数の設定方法 宮城 2006/02/05-23:56
記事番号31033へのコメント
Give up! 私めには理解できませぬ。
31042 Re:表引き関数の設定方法 アックン 2006/02/07-17:02
記事番号31023へのコメント
桐で一生さん
まだ解決してないようなので、再度書き込みます。
現住所を表示するだけなら、先に回答した表引き関数のやり方でできますから、実際にやってみてくださいね。

もし下記のやり方で支障があったり、うまくいかないときは、
表とフォームの定義を簡単に書いてもらえると、理解しやすいです。

----------------------
例1:A.wfmのテキストオブジェクトのソースがA.tblの項目[住所]の場合

・A.tblの項目[住所]の編集初期値式または項目計算式
#cond(#set(STR,#tlu([氏名],=,"B.tbl",[氏名],[変更後住所])),&STR,1,#tlu([氏名],=,"B.tbl",[氏名],[住所]))

例2:A.wfmのテキストオブジェクトのソースが計算式の場合
・ソース
上記の式

アックン(=^・^=)
31048 Re:表引き関数の設定方法 アックン 2006/02/07-19:05
記事番号31042へのコメント
誤)例1:A.wfmのテキストオブジェクトのソースがA.tblの項目[住所]の場合
正)例1:A.wfmのテキストオブジェクトのソースがA.tblの項目の場合
ソースになるA.tblの項目名はなんでもいいです。式に記述しませんから。

ついでに式中の項目名がわかりにくいと思うので、説明を書いておきます。

B.tbl
[氏名][住所][変更後住所]

A.tbl
[氏名][住所]
または
[氏名]

これだとわかりにくいので、
B.tbl
[B氏名][B住所][B変更後住所]

A.tbl
[A氏名][A住所]
または
[A氏名]

とすると、
#cond(#set(STR,#tlu([A氏名],=,"B.tbl",[B氏名],[B変更後住所])),&STR,1,#tlu([A氏名],=,
"B.tbl",[B氏名],[B住所]))
となります。

実際には同姓同名がいることを考慮して、氏名にコードを使います。

31058 Re:表引き関数の設定方法 桐で一生 2006/02/08-13:32
記事番号31048へのコメント
アックンさん、宮城さんこんにちわ

いろいろご親切にありがとうございます。
さて、いろいろサジェスチョンをいただく中で、今回の問題点については以下のような方法でしのいでいます。

その前に、今回の問題意識は次のようなものでした。
処理する業務に、住所を処理する業務があるが、しばしば住所移転をしている者があり、
チェックなしに処理すると、移転前の住所で処理していまい、やり直しが発生していたこと。

当面の回避策

今は、次のような対策でしのいでいます。
A.TBLには、「住所」、「変更後住所」の項目があり、「住所」には基本的に全員の住所が入れてあります。
「変更後住所」には、住所を変更した者のみ変更後住所が入れてあります。

そこで、変更後住所が必要なのは、主にB.TBLの処理ですので、B.WFM上に、従来の住所と変更後住所の両方を
表引き処理により表示させて、目視によって住所変更の有無をチェックすることとし、印刷する場合は、
#未定義値変換(変更後住所、住所)の関数で新住所がない場合は、住所を、変更後住所がある場合は、変更後
住所を印刷させるようにしています。

                                                以上

戻る