みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっています。
Win7 FMPro13を使用しています。
フィールドA(計算フィールド)→今月なら”1”違う月なら”0” 自動計算
フィールドB(集計フィールド)→フィールドAの合計 自動計算
フィールドC(GF)→ =フィールドB 自動計算
というフィールドを作成。
月が替わるとフィールドAとフィールドBは変わるのですがフィールドCは自動で変わりません。
自動で変えられる方法はあるのでしょうか?
宜しくお願いします。
onFirstWindowOpenのトリガスクリプトでフィールド設定するなど。
tim様
回答ありがとうございます。
大変申し訳ないのですが正直フィールド設定がよくわかっておりません。
どのように設定すればいいのか教えていただいてもよろしいでしょうか?
なぜ
フィールドC(GF)→ =フィールドB 自動計算
これが必要なのですか?
フィールドBでいいのでは。
値の更新は
ウインド内容の再表示
でできるでしょう。
それもいやなら、
自己リレーションでできます。
これなら更新も自動ですね。
Offline
>フィールドB(集計フィールド)→フィールドAの合計 自動計算
集計フィールドで問題無いのかな。
皆様回答ありがとうございます。
少しつけ加えさせていただきますとフィールドCは他のテーブルのレイアウトに表示させるために作成しました。
テーブルa
フィールドA(計算フィールド)→今月なら”1”違う月なら”0” 自動計算
フィールドB(集計フィールド)→フィールドAの合計 自動計算
フィールドC(GF)→ =フィールドB 自動計算
テーブルb
フィールドD(計算フィールド)→今月なら”1”違う月なら”0” 自動計算
フィールドE(集計フィールド)→フィールドDの合計 自動計算
フィールドF(GF)→ =フィールドE 自動計算
テーブルc
フィールドG(計算フィールド)→=テーブルa フィールドC
フィールドH(計算フィールド)→=テーブルb フィールドF
となっています。
テーブルcに値を表示させたかったためにフィールドC(F)を作成しました。
他にいいやり方等ありましたら合わせてご教授願います。
テーブルCとテーブルA,Bとで「今月」でリレーションして、
テーブルCでその関連レコードをカウント。
これが常套手段では。
Offline
チポ様
回答ありがとうございます。
関連レコードのカウントはどのようにして行えばいいのでしょうか?
統計関数
Count
で関連レコード数を数えられます。
Offline
チポ様
ありがとうございます。
countって繰り返しフィールドだけだと思っていました。
Count(テーブルA::今月)
という式で大丈夫でしょうか?
>テーブルCとテーブルA,Bとで「今月」でリレーションして、
計算元の日付があるだろうからそれをつかってもいいけど、書いてる情報だけなら
Cに数字グローバルフィールドを作って1を入れればリレーションできる。
ABの今月フィールドが非保存だとだめか。やっぱり日付から年*12+月を使ったりした方がいいか。
tim様
回答ありがとうございます。
テーブルcにグローバルフィールドを作成し、テーブルaのフィールドAとリレーションさせました。
テーブルcにテーブルaの値取得用フィールドIを作成しCount(テーブルa::フィールドA)としましたがうまくいきません。
間違い等指摘をお願いします。
全ての統計関数は関連レコードを集計できますヨ
Count(テーブルA::今月)
フィールドのテーブル名はリレーションシップグラフでのテーブル名で、
そのフィールドは正しい値が入っているフィールドなら何でも可です。
リレーションキーは
テーブルCは本日の年月
テーブルA、Bはその日付の年月
ですね。
値は
年*12+月
もちろんこれでもいいのですが、視覚的に意味を持たせるのなら、
年*100 + 月
の様にすればいいでしょう。
Offline
>今月なら”1”違う月なら”0” 自動計算
この式をここに書いてみた方がいいのでは?
皆様ご回答ありがとうございます。
トピックのタイトルにあるものはかなり簡略に書いてしまったので今一度詳しく書こうと思います。
皆様からするとめんどくさいやり方をしているかもしれませんがアドバイス等お願いします。
テーブルaは10個作成
テーブルa(業務内容入力用テーブル)
フィールドA =Get(日付)
フィールドB =MonthNameJ(フィールドA)
フィールドC =year(フィールドA)
フィールドD 業務対応日
フィールドE =MonthNameJ(フィールドD)
フィールドF =year(フィールドD)
フィールドG =if(フィールドB=フィールドE;"1";"0") 今月かどうか判定
フィールドH =if(フィールドC=フィールドF;"1";"0") 今年かどうか判定
フィールドI =if(フィールドG="1" and フィールドH="1";"1";"0") 今月かつ今年なら "1"
フィールドJ =フィールドIの合計 (集計フィールド)
フィールドK =フィールドJ (GF) テーブルbに表示させるためのGF
テーブルb(メニュー用テーブル)
フィールドJ =テーブルaフィールドJ
のような形で作成しています。
リレーションはここに表示させていないですが、仕事IDフィールドを作成してリレーションを組んでおります
行いたいことは月が替わった時(例:2月→3月)に自動で フィールドK を再計算させたいということです。
新規レコード作成か日付の再入力を行えば変わるのですが、できれば自動で再計算を行うようにしたいです。
長くなりましたがアドバイス等宜しくお願い致します。
今回の問題で、私の提案では
フィールドA =Get(日付)
フィールドB =MonthNameJ(フィールドA)
フィールドC =year(フィールドA)
これらと
フィールドG =if(フィールドB=フィールドE;"1";"0") 今月かどうか判定
フィールドH =if(フィールドC=フィールドF;"1";"0") 今年かどうか判定
フィールドI =if(フィールドG="1" and フィールドH="1";"1";"0") 今月かつ今年なら "1"
フィールドJ =フィールドIの合計 (集計フィールド)
フィールドK =フィールドJ (GF) テーブルbに表示させるためのGF
これらは不要です。
テーブルaではその業務対応日から「年月」を求め、このフィールドと、
テーブルCで、本日の「年月」フィールドとでリレーション
すればいいです。
それと、
気になったのですが
テーブルaは10個作成
なぜこのようなことになったのでしょう?
同じテーブルを複数作るのは面倒にするだけかと。。
Offline
チポ様
回答ありがとうございます。
そんなに簡単でよかったのですね。
やってみます。
テーブルaは10個作成
こちらはテーブルaと同じようなテーブルを作成したという意味で、全く同じテーブルではありません。
テーブルaは業務内容を入力するテーブルにしているのですが業務がかなり幅広くあり、1種類の業務に1テーブル作成しました。
書き方が悪くて申し訳ありません。
連投申し訳ありません。
テーブルa
フィールドA 業務対応日
フィールドB =MonthNameJ(フィールドA)
フィールドC =year(フィールドA)
テーブルb
フィールドD =Get(日付)
フィールドE =MonthNameJ(フィールドD)
フィールドF =year(フィールドD)
リレーション
テーブルa テーブルb
フィールドB = フィールドE
フィールドC = フィールドF
と組みなおしました。
初歩的なことで申し訳ありませんが、この後どのようにすればいいのでしょうか。
宜しくお願いします。
照合フィールドは、
今月 = Year ( Get (日付) ) * 100 + Month ( Get (日付) )
このような値を持つフィールドですよ。
業務対応日も同様に考えてください。
テーブルA,b,c
の説明が混同しています。
統一してくださいネ・・混乱します・・
Offline
チポ様
回答ありがとうございます。
テーブルaなどの記載は#15の記事に合わせたつもりだったのですが、わかりにくければ申し訳ありません。
わかりました。
ありがとうございます。
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 607.34 KiB (Peak: 623.88 KiB) ]