みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になります。
条件つき計算式について、教えていただきたく投稿いたしました。
<環境>
PC=Win7
FMバージョン=8Pro Ad
<構成>
顧客マスタ
商品マスタ
受注テーブル
受注明細テーブル
受注テーブルに受注明細をポータルで表示
<入力の流れ>
1.[受注入力画面] 顧客マスタより顧客名を入力
2.[受注入力画面] 受注明細に商品マスタより商品を入力(ポータル行に追加されます)
3.[受注入力画面] 商品の入力をする際に、その顧客に対して過去1カ月までに入力(受注があった商品)があった場合、ポータル行に色をつける。
<できないところ>
◎入力の流れの3番目で、その顧客に対して過去1カ月までに入力がされたものに対して検索をかける計算式がわかりません。
◎過去1カ月までの間に商品の入力があったものに対して、ポータル行に色をつけたいのですが、方法がわかりません。
どなたか分かる方おられましたら、何卒宜しくお願い致します。
◎入力の流れの3番目で、その顧客に対して過去1カ月までに入力がされたものに対して検索をかける計算式がわかりません。
・検索は計算式では掛けられません。検索でなく、関連レコード参照ポータル?
◎過去1カ月までの間に商品の入力があったものに対して、ポータル行に色をつけたいのですが、方法がわかりません
・条件付書式はv9、ポータル行色付けは確かv12以降へバージョンアップが必要かな。
Offline
3.[受注入力画面] 商品の入力をする際に、その顧客に対して過去1カ月までに入力(受注があった商品)があった場合、ポータル行に色をつける。
一ヶ月以降と照合する自己リレーションで、
一ヶ月以降の受注の有無が分ります。
計算フィールド・オブジェクトタイプで、
上記のリレーションの関連レコードの有無でフィールドの色を変えることができます。
このフィールドをポータル行の各フィールドの背面に置くことで表示色を変えられますね。
Offline
Hiroさん、ご返信有難うございます。
◎入力の流れの3番目で、その顧客に対して過去1カ月までに入力がされたものに対して検索をかける計算式がわかりません。
・検索は計算式では掛けられません。検索でなく、関連レコード参照ポータル?
はい、関連レコードのポータルになっています。
受注明細ポータルに「受注日」フィールドをもっていますので、そこで入力日の日付より1カ月以内のものがあるかないかの
検索をかけたいのですが、「入力日の日付より1カ月以内のもの」という条件で検索をしたいです。
◎過去1カ月までの間に商品の入力があったものに対して、ポータル行に色をつけたいのですが、方法がわかりません
・条件付書式はv9、ポータル行色付けは確かv12以降へバージョンアップが必要かな。
そうなんですね、、、例えば、ポータル内のフィールドにどれか色をつけるもしくは、フィールド内の文字の色をつけるなど、代用できるような方法はないでしょうか?
お手数お掛け致しますが、宜しくお願い致します。
チポさん、ご返信有難うございます。
3.[受注入力画面] 商品の入力をする際に、その顧客に対して過去1カ月までに入力(受注があった商品)があった場合、ポータル行に色をつける。
一ヶ月以降と照合する自己リレーションで、
一ヶ月以降の受注の有無が分ります。
すみません、「一ヶ月以降と照合する自己リレーション」とは、どのような設定になりますでしょうか?
計算フィールド・オブジェクトタイプで、
上記のリレーションの関連レコードの有無でフィールドの色を変えることができます。
このフィールドをポータル行の各フィールドの背面に置くことで表示色を変えられますね。
この方法を試してみたいです。計算フィールドにはどのような設定になりますでしょうか?
ご質問ばかりですみません。何卒、宜しくお願い致します。
条件付書式以前のポータル行の色付けの定石は、チポさんの方法で、何とか実現していました。
条件付書式のように気軽には使えない、テク技でした。
Offline
計算フィールドを三つ、
年月フィールド
年 * 12 + 月
前年月フィールド
年月フィールド - 1
レコード番号
Get(レコードID) [シリアル番号等、時系列順でユニークな値なら何でも可]
自己リレーション
商品 = 商品
and
レコード番号 > レコード番号
and
前年月 <= 年月
これで、
同商品・前月以降・自身以前
と照合します。
さらに
オブジェクトフィールド・グローバルを作り、
付けたい色を格納します。
その方法は、
レイアウトモードで色をつけた長方形を描き、それをカット。
ブラウズモードで、オブジェクトフィールドにペースト。
計算フィールド・オブジェクトタイプを作り、
Case ( IsValid ( 自己リレーション::レコードID ) ; オブジェクトフィールド )
これで、
上記のリレーションの関連レコードが有れば、このフィールドに色がつきます。
これをポータルの行いっぱいに、各フィールドの背面に配置します。
フーッ、バージョンアップが簡単ですね ^^;;;
Offline
チポさん、ご返信いただきまして有難うございます。
計算フィールドを三つ、
年月フィールド
年 * 12 + 月
計算フィールドとして、3つ作りました。
そこで年月フィールドの計算フィールドについて
「年 * 12 + 月」これはどうなっている式でしょうか?
すみません、理解不足です。もう少し、詳しく教えて頂いても宜しいでしょうか?
宜しくお願い致します。
年 * 12 + 月 は、仮想西暦0年1月からの通し月数です。年月は12進数ですので歳跨ぎの扱いが厄介なので、この形式にすると単純な計算が可能です。
Offline
Shinさん、ご返信いただきまして有難うございます。
年 * 12 + 月 は、仮想西暦0年1月からの通し月数です。年月は12進数ですので歳跨ぎの扱いが厄介なので、この形式にすると単純な計算が可能です。
年=受注日の年のフィールド(受注日から年をGetしたもの?)
*=掛け算?
12=数字
+=足し算
月=受注日の月フィールド(受注日から月をGetしたもの?)
「年月フィールド」を作るのに、つまづいております。
上記のような式を組むのでしょうか?
すみません、宜しくお願い致します。
計算フィールドの計算式です。
Year ( 受注日 ) * 12 + Month ( 受注日 )
FM14の関数のヘルプです。
8では、無いのも有りますが、
「起点」として初めて使えるバージョンが載っています。
http://www.filemaker.com/help/14/fmp/ja … tml#423136
計算式の演算子のヘルプです
http://www.filemaker.com/help/14/fmp/ja … tml#413246
勉強しましょう。
Offline
チポさん、ご返信いただきまして有難うございます。
大変、勉強不足でした。頑張りたいと思います!
計算フィールドを三つ、
年月フィールド
年 * 12 + 月前年月フィールド
年月フィールド - 1レコード番号
Get(レコードID) [シリアル番号等、時系列順でユニークな値なら何でも可]自己リレーション
商品 = 商品
and
レコード番号 > レコード番号
and
前年月 <= 年月これで、
同商品・前月以降・自身以前
と照合します。
上記の自己リレーションでは、顧客別に検索を行っていることに
なりますでしょうか?
例えば、
「レコード番号」を「顧客コード」に変えて
Get(顧客コード)とすると、
同商品・前月以降・顧客別
というのが、成り立ちますでしょうか?
何卒、宜しくお願い致します。
流れは読んでいませんが、 Get ( 顧客コード ) という関数はありません。
Get ( 引数 ) は取得関数です。
Get ( レコード ID ) はレコード固有のIDを返し
Get ( レコード番号 ) は対象レコードのなかで現在のレコードが何番目かを返します。
たまたまフィールド名と同じ引数だったというだけで関連性はないと考えたほうがよいでしょう。
チポさんも書かれていますが計算式の理解を深めるためには関数の知識が必須です。
計算式のどこかを変えたら動くといったやり方ではかえって答えまで遠くなってしまいます。
取得関数(8ではないものもありますが起点を参照ください)
https://www.filemaker.com/help/14/fmp/j … 32.63.html
Offline
Mozさん、ご返信いただきまして有難うございます。
また、ご指摘いただき有難うございます。
関数について、いろいろと勉強をしてまいります。
チポさんより、教えて頂きました下記の計算フィールドですが、
どうしても、つまずいています。
レコード番号
Get ( レコード ID )[シリアル番号等、時系列順でユニークな値なら何でも可]
上記をふまえ、計算フィールドにレコードIDとしてシリアル番号フィールドを設定しようとしたら、
Get ( シリアル番号 )←こんな感じです。
「この引数は、Get関数の無効な引数です。」と出てしまい、設定することができません。
お手数ですが、何卒よろしくお願い致します。
ヘルプの URL を付けましたが参照されましたか?
Get というのは取得関数なので用意された引数と組み合わせて利用するものです。
Get ( シリアル番号 ) のような使い方はできません。
チポさんはユニークな値の一例として Get ( レコード ID ) を書いてくれていると思いますよ。
厳密には重複する可能性がありますが、お使いのバージョンで手っ取り早くユニークな値を作るために使えるでしょう。
繰り返しになりますが関数についての知識を深めるべきです。
Offline
Mozさん、ご返信いただきまして有難うございます。
Get というのは取得関数なので用意された引数と組み合わせて利用するものです。
Get ( シリアル番号 ) のような使い方はできません。
シリアル番号は、1レコードに対して入力値の自動化でつけられているかぶらない番号をもっているフィールドなのですが
これでは、ダメでしょうか??
チポさんのおっしゃっている下記の計算フィールドは、
レコード番号
Get(レコードID) [シリアル番号等、時系列順でユニークな値なら何でも可]
どのような計算フィールドになるのでしょうか??
すでに、ユニークになっているシリアル番号フィールドがある場合は、レコード番号(計算フィールド)が
必要ないということでしょうか?
なかなか理解ができず、質問が多くなりすみません。
宜しくお願い致します。
Get(レコードID) [シリアル番号等、時系列順でユニークな値なら何でも可]
「シリアル番号」というフィールドが既に作られていて上記の条件を満たしているなら新たに作る必要はありません。
チポさんの提案の中身をしっかり理解しましょう。
書かれたとおりに操作すればできあがりというものではありません。
演算子・関数への理解を深めること、
何のために計算式を作るように提案されているのか考えることが大切です。
Get ( シリアル番号 ) といった計算式を作ってしまうようでは失礼ですが見通しが悪いです。
Offline
ああ、ごめんなさい
顧客の照合が抜けていましたね。
前記のリレーションに
顧客 = 顧客
この照合を加えてください。
> Get(レコードID) [シリアル番号等、時系列順でユニークな値なら何でも可]
これは自身のレコードより、時間的に前のレコードのみと照合させるものです。
レコード作成が、時間順ならば、
レコードIDとか、レコード番号とかでいいでしょう。
もしそうでない場合が有るのなら、その対策を考えなければなりませんね。
Offline
チポさん、ご返信いただきまして有難うございます。
分かりやすいご説明で理解することができました。
お陰様で、顧客別かつ1カ月前のレコードのポータル行に色がつくところまで
完成することができました。
あとは、商品数が何十万件とデータがある為、計算フィールドだと
かなり時間がかかってしまう問題点につきまして、回避できるように
ボタンを作成してスクリプト制御でできないかを考えてみようと思います。
この度は、いろいろと教えて頂きまして感謝いたします。
有難うございました。
Pages: 1
[ Generated in 0.006 seconds, 10 queries executed - Memory usage: 569.63 KiB (Peak: 590.53 KiB) ]