初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2016-02-18 16:59:36

FMビギナー
Guest

宛名印刷の際の顧客の抽出

いつもお世話になっております。

当方、FMP14、Windows7にてファイルメーカーをいじっております。
現在、顧客管理をしていまして、宛名印刷をする際、特定の条件の下に抽出した顧客のみ印刷したいのですが、
イメージはわくのですが、やってみるとファイルメーカーが無反応で、どうやっていいかわかりません。
ご教授いただけないでしょうか。

「顧客テーブル」
(氏名)(フリガナ)(ランク)(郵便番号)(都道府県)(市町村)(町名)(番地)(AM名)(電話番号)・・・「宛名(チェックボックス)」
リレーションはなく、シンプルなテーブルです。
当方、顧客はほとんどが1県(東京都のみといういみです)です。

抽出したいのは、
「市町村」と「ランク」なんですが、
本来なら「宛名」フィールドをチェックボックスなどで作成し、抽出すればいいのでしょうが、
データが6万件ほどあるのと、宛名印刷の抽出条件が変わるため、
イメージとしては「検索用レイアウト」に
□ すべて       □ すべて
□ ○○市       □ AA
□ △△市       □ A
□ ☆☆市       □ BB
□ ※※市       □ B
     ・            □ C
     ・
といれると、該当の検索を行い、「宛名」にチェックを入れ、
それを検索して宛名印刷できるようにしたいのですが、スクリプトでいろいろ試すんですが、まったく反応してくれません。
また、「検索_レイアウト」の「□すべて」をどう処理するかも含めてつまづいています。
「□すべて」をなくして、各市町村チェック、各ランクチェックでもつまづいています。
どうか、よろしくお願いいたします。

#2 2016-02-18 17:11:58

チポ
Member

Re: 宛名印刷の際の顧客の抽出

すべて
は、検索値を入れなければいいだけでは。

Offline

#3 2016-02-18 17:14:42

チポ
Member

Re: 宛名印刷の際の顧客の抽出

ああ
> □すべて」をなくして、各市町村チェック、各ランクチェックでもつまづいています。
こういうことなんですね。

検索用のレイアウトで
市町村とランクフィールドをチェックボックスとして、
すべて
はなくしてしまえばいいのでは。

Offline

#4 2016-02-18 17:46:11

FMビギナー
Guest

Re: 宛名印刷の際の顧客の抽出

チポ様

ご回答ありがとうございます。
この場合、AND検索になるのか、or検索になるのか(たぶんor検索だと思いますが・・・)
検索条件の挿入場所なんですが、
「検索モードに切り替え」の「検索条件の指定」で新規に検索条件を入れるんだと思うんですが、
1つ1つ検索条件を入れるんでしょうか、そうすると検索結果もおかしくなりそうですし、
かといって、1つの検索条件に全て入れると、全パターン必要な気が・・・
自分のイメージでは「検索用レイアウト」にチェックボックスを作り、各チェックに対して
変数を設定し、検索でor検索すればいいと思ったんですが、スクリプトでのor検索の設定方法が
わかりません。メニューバーで「対象レコードの絞込み」や「対象レコードの拡大」を発見し、
これかなと思ってやってみても条件の順番によっては対象レコードが増えたりします・・・

#5 2016-02-18 22:17:36

Shin
Member

Re: 宛名印刷の際の顧客の抽出

全てを無くして、ラジオボタンで選択させれば良いかも。

○○市 or △△市 で検索したいのならば、チェックボックスで入力した後に、それを検索条件で or の形に変えないと検索できません。
また、すべて を検索するには、そのフィールドに入力をしなければ抽出は行われません。または、その選択肢の全て、ということでしたら、その選択肢のすべてで検索条件を作っていけば良いでしょうね。そのスクリプトを、条件を入れた後のスクリプト等で実行すれば良いでしょう。

Offline

#6 2016-02-19 09:13:37

チポ
Member

Re: 宛名印刷の際の顧客の抽出

or検索ですか?

普通に考えて、
◯◯市の人 または Aランクの人
というような
市町村とランクで or 検索はしないでしょう。

◯◯市でAランクの人
または
◯○市でBランクの人
というようなor検索は有るかもしれませんね。

このようなor検索をご希望ですと、
スクリプトが複雑になってきますよ。

ご希望の検索方法を書かれた方がいいでしょう。

Offline

#7 2016-02-19 17:01:03

Shin
Member

Re: 宛名印刷の際の顧客の抽出

多分、複数の市で、ランクも複数が選択されるのだと思いますので、結構面倒かも。
チェックを逆転させて、除外していった方が早いパターンだと思いますよ。

Offline

#8 2016-02-20 09:21:58

FMビギナー
Guest

Re: 宛名印刷の際の顧客の抽出

Shin様、チポ様

ご回答ありがとうございます。
Shin様のおっしゃるとおり、
「○○市」と「△△市」と「☆☆市」の顧客(つまり「○○市」or「△△市」or「☆☆市」の顧客)
                で                                                 (and)
「AA」と「A」と「BB」の顧客                 (つまり「AA」or「A」or「BB」の顧客)
となる(と思います)の条件を(抽出するたびに条件が変わりますので)、自由に選択して1回で抽出できないか
ということです。
スクリプトでどうしたらいいかをかんがえていまして、「スクリプトは自分の操作するままに作成できる」みたいなことを
なにかで聞いた記憶があり、ならばと思い、検索操作を実際にやってみると、
「市町村」のみのor検索、「ランク」のみのor検索はできたので、そのとおりにスクリプトを組んであげればいいと思ったんですが、
「市町村」のor検索実行後の「ランク」とのand検索がどうやってもうまくいかなかった状況です。

Shin様が最後におっしゃった

チェックを逆転させて、除外していった方が早いパターン

は、(私の理解が合っているかわかりませんが、)
例えば、
「○○市」、「△△市」、「☆☆市」をチェック入れたとして、「逆転」→つまり「○○市」、「△△市」、「☆☆市」以外を検索
検索された「○○市」、「△△市」、「☆☆市」以外を「除外」にする、「○○市」、「△△市」、「☆☆市」が残る・・・
「AA」、「A」、「BB」をチェック入れたとして、「逆転」→つまり「AA」、「A」、「BB」以外を検索
検索された「AA」、「A」、「BB」以外を「除外」にする、「AA」、「A」、「BB」が残る・・・

少し混乱してきましたが、逆の考え方だと思いますので、少しがんばってみます。

#9 2016-02-20 12:32:59

チポ
Member

Re: 宛名印刷の際の顧客の抽出

そのような要望でしたら、リレーションを使った方がいいでしょう。

検索用にグローバルフィールド、
市町村_gと
ランク_g
をつくり、
チェックボックス設定します。

適当な「X」の自己リレーションで、そのポータルを配置、
ポータルフィルタの条件式
   ( IsEmpty ( 市町村_g ) or PatternCount ( 市町村_g ; 自己リレーション::市町村 ) )
  and
   ( IsEmpty ( ランク_g ) or PatternCount ( ランク_g ; 自己リレーション::ランク ) )

として、
検索用レイアウト(ヘッダだけでもいいでしょう)に、
チェックボックスと、このポータルを配置します。

チェックボックスに何もチェックしていないときと、
チェックをした場合とでポータルの表示を確認してみます。


6万レコード有ると表示がもたつくかな?
もしそれが我慢できない場合は、
リレーションの照合自体で表示するようにする方法も有ります。。

Offline

#10 2016-02-20 17:20:44

Hiro
Member

Re: 宛名印刷の際の顧客の抽出

FMの動的複合条件での検索は、条件設定が非常に面倒、
そこで条件の設定を計算式で求めるのが吉。
その有力な方法の一つは、条件計算式で検索フラグを立てるやり方です。
フラグを立てる方法は、「索引」が取れる「フィールド内容の全置換」が良いでしょう。
多量データの検索には、「索引」の有無が重要です。
また、その置き換え値は、下式で、

Let([
   #cty=市町村フィールド;
   #rnk=ランクフィールド;
   #vl_cty=g_市町村チェックボックスフィールド;  //g_ はグローバルフィールド
   #vl_rnk=g_ランクチェックボックスフィールド;
   #flg_cty=FilterValues(#cty;#vl_cty)<>"";
   #flg_rnk=FilterValues(#rnk;#vl_rnk)<>"";
   #res=Case(IsEmpty(#vl_cty);1;#flg_cty) and Case(IsEmpty(#vl_rnk);1;#flg_rnk)
];
   Case(#res; #res)
)

これで条件に合うレコードの検索フラグフィールドに「1」が入りますから、「1」をキーに検索してお終いです。
なお、「すべて」項目は無くして、代わりに何もチェックしない場合は全件ヒットします。

Offline

#11 2016-02-20 17:54:44

FMビギナー
Guest

Re: 宛名印刷の際の顧客の抽出

チポ様

リレーションを使用する方法、誠にありがとうございました。
教えていただいた方法で、できるようになりました。
設定し、チェックを入れて待っててもなんとも動かなく(理由は不明です)、設定をミスったと思ったんですが、
「ウインドウ内容の再表示」を実行しますと実行されました。
約6万件のデータなんですが、表示も数秒で表示できます。
しかしながら、これはチェックボックスにスクリプトトリガを設定すればいいので問題ありません。
ながらく悩んでいたので大変、感謝しております。

しかしながら1点だけ、ランクの「AA」をチェックして「ウインドウの再表示」をしますと、
なぜか「AA」「A」の両方が検索されてしまいます。「BB」をチェックしても「BB」「B」の両方が検索されます。
現在、フォームで検索した件数と、ポータルで検索した件数を確認中ですが理由が不明です。
でも、これはランクを変更(上司の判断になりますが)すればいいと思いますので、問題視しておりません。
まずは、かなり問題が前進しました。誠にありがとうございました。
とりあえず、現状報告いたします。

#12 2016-02-20 17:58:30

FMビギナー
Guest

Re: 宛名印刷の際の顧客の抽出

Hiro様

ご回答ありがとうございます。
そのような方法もあるのですね。
フラグを立てる方法ですね、なるほど。
早速教えていただいた方法を試してみます。
すみません。先ほどレスをあげたらHiro様の書き込みがありまして、気づきませんでした。
まずはお礼まで。

#13 2016-02-20 18:47:56

Shin
Member

Re: 宛名印刷の際の顧客の抽出

ちょっと回りくどいスクリプトですが、

変数を設定 [ $city; 値:ValueListItems ( Get ( ファイル名 ) ; "市町村一覧" ) ]
変数を設定 [ $rank; 値:ValueListItems ( Get ( ファイル名 ) ; "ランク一覧" ) ]
全レコードを表示
#
変数を設定 [ $n; 値:ValueCount ( $city ) + 1 ]
If [ $n > 1 ]
 検索モードに切り替え [ ]
 Loop
  Exit Loop If [ Let ( $n = $n - 1 ; $n = 0 ) ]
  If [ IsEmpty ( FilterValues ( 顧客テーブル::g_市町村 ; GetValue ( $city ; $n ) ) ) ]
   新規レコード/検索条件
   フィールド設定 [ 顧客テーブル::市町村; "==" & GetValue ( $city ; $n ) ]
   レコードを対象外に
  End If
 End Loop
 エラー処理 [ オン ]
 対象レコードの絞り込み [ ]
End If
#
変数を設定 [ $n; 値:ValueCount ( $rank ) + 1 ]
If [ $n > 1 ]
 検索モードに切り替え [ ]
 Loop
  Exit Loop If [ Let ( $n = $n - 1 ; $n = 0 ) ]
  If [ IsEmpty ( FilterValues ( 顧客テーブル::g_ランク ; GetValue ( $rank ; $n ) ) ) ]
   新規レコード/検索条件
   フィールド設定 [ 顧客テーブル::ランク; "==" & GetValue ( $rank ; $n ) ]
   レコードを対象外に
  End If
 End Loop
 エラー処理 [ オン ]
 対象レコードの絞り込み [ ]
End If

サンプルファイルでは、「すべて」が動く様にトリックを入れてあります。(全てにチェックは入りませんが)
https://www.dropbox.com/s/2ckxs65oqcbo3 … 7.zip?dl=0

Offline

#14 2016-02-20 18:51:35

Shin
Member

Re: 宛名印刷の際の顧客の抽出

FMビギナー wrote:

しかしながら1点だけ、ランクの「AA」をチェックして「ウインドウの再表示」をしますと、
なぜか「AA」「A」の両方が検索されてしまいます。「BB」をチェックしても「BB」「B」の両方が検索されます。

PatternCount ( ¶ & 市町村_g & ¶ ; ¶ & 自己リレーション::市町村 & ¶ )
という風に、2カ所修正すれば良いはずです。

Offline

#15 2016-02-22 08:54:21

チポ
Member

Re: 宛名印刷の際の顧客の抽出

ああ、ごめんなさい
AAとA
BBとB
の値を考えていませんでした。

回答はShinさんの式でいいですね。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.021 seconds, 9 queries executed - Memory usage: 564.61 KiB (Peak: 585.52 KiB) ]