みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
G日付 = グローバルフィールド(日付)
日付 = 計算フィールド 日付(繰り返し x 31)
上のG日付で値を入力したら、計算フィールドに日付が繰り返し入力されるようにしたいです。
計算式を以下にしてみました。
Let (
[
M = Month ( G日付 ) ;
D = Date ( Month ( G日付 ) ; Get ( 計算式繰り返し位置番号 ) ; Year ( G日付 ) )
]
;
If ( Month ( D ) = M ; D ; "" )
)
一番目のフィールドは表示されるのですが、繰り返しフィールドに反映されません。
どなたかご教授いただけますか?宜しくお願いします。
Offline
繰り返しフィールドと、非繰り返しフィールド(または、繰り返し数1のもの)の演算では、そのままでは繰り返し位置毎での計算になり、非繰り返しフィールドでは、繰り返し1の位置のみでその値が参照されます。これを避けるためには、繰り返しフィールドに拡張するために Extend() を使うか、繰り返し位置を指定して計算させます。非繰り返しフィールドは、位置を1に指定すると良いでしょう。
Let (
[
M = Month ( G日付[1] ) ;
D = Date ( M ; Get ( 計算式繰り返し位置番号 ) ; Year ( G日付[1] ) )
];
If ( Month ( D ) = M ; D ; "" )
)D = G日付[1] - Day ( G日付 [1] ) + Get ( 計算式繰り返し位置番号 )
と書き換えても同等かも。
Last edited by Shin (2016-07-25 22:13:11)
Offline
>Shinさん
ありがとうございます。いろいろ過去の記事を掲載していたところ、 [ ] がポイントになっているかもと思っていましたが、いまいち使い方がわからずでした。
いただいた説明のおかげでイメージが湧いてきました。
繰り返しフィールドの使い方に利点もあると思いますし、今後ポータルと比較しながらどちらの方がパフォーマンスや容量などでメリットがあるかなど考えながら展開したいと思います。
ありがとうございました。
Offline
追加質問です。
日付(計算フィールド:繰り返しx31)があるテーブルAとは別に、日毎のレコード用のテーブルBがあります。
テーブルBには日付フィールド(日付)と出席フィールド(テキスト)があります。
テーブルAの日付(計算フィールド:繰り返しx31)とテーブルBの日付フィールド、テーブルAとテーブルBのIDフィールドで紐付いています。
テーブルAに出席フィールド(テキスト:繰り返し31)を作成しました。
テーブルAの日付フィールドをG日付で確定した後に、テーブルAの出席フィールド(テキスト:繰り返し31)にテーブルBの出席フィールドの値が繰り返し入力できるようにしたいのです。
ルックアップとスクリプト実行を使っています。
スクリプト実行はクライアント内でやればうまくいくのですが、時間がかかるので、サーバーで実行したいと思いますが、少しうまくいきません。
環境: FMP15 adv FMS14 mac
G日付はファイルAにあります。テーブルAとテーブルBはファイルBにあります。
ファイルA, Bともリレーショングラフで関連付いています。
ファイルAからスクリプトを使ってファイルBを使用しています。
サーバーで実行する際に、スクリプト引数にList関数を使ってサーバーに必要な情報を受け渡しています(主にレコード抽出用)
サーバー側ではgetvalueで適切な引数を取り出しています。
サーバーで再度ルックアップを実行する際に、気をつけるべきポイントはありますか?
又、サーバーで実行するスクリプトは、ファイルAに入っていますが、本来だったらルックアップの関連付いているファイルBにスクリプトがあるべきでしょうか?
Offline
テーブルAでテーブルBのポータルを配置でいいのでは。
面倒な繰り返しが不要になります。
ただし、テーブルBで、全日付のレコードが必要になります。
レコード作成はスクリプトで自動化できますね。
Offline
>チポさん
クロス集計を作りたいと思っています。
ファイルBのテーブルAは名簿テーブル、テーブルBは出席テーブルになっています。
テーブルA(リスト表示)で任意の名簿を抽出します(リストなので縦の行)
G日付で日付を指定して繰り返しフィールドに値を取り込みたいと思います(横の列)
一度ポータルでも作ったのですが(ポータルを30個並べて、開始番号を一つづつ増やしていく)レイアウト作成にかなり時間がかかるのと編集するのに効率的ではないと思って、繰り返しフィールドをうまく使えないか検討しています。
Offline
そうですか、
レイアウトは手間がかかっても一回作ってしまえばそれで済みますが。。
で、
繰り返しのルックアップで何が問題になるのでしょう?
テーブルAは名簿と書かれていますから、
一人が1レコードでユニークですよね。
繰り返しは毎月使い回しているのですよね。
> サーバーで再度ルックアップを実行する際に、気をつけるべきポイントはありますか
他のユーザーが編集中のレコードは再ルックアップが効かないのでは。
> 本来だったらルックアップの関連付いているファイルBにスクリプトがあるべきでしょうか?
どこから始めようと、結局、作業するファイルのスクリプトが動かなければなりませんから、
それは問題なさそうかと。。
Offline
>ちぽさん
返信ありがとうございます。
ルックアップの何が問題かわからないです。
スクリプト1(クライアント)だけでスクリプトを実行すると:::
レイアウト切替(レイアウト1:: テーブルA)
検索実行(テーブルAのレコード抽出)検索内容は例えば、検索条件1・検索条件2・・・
フィールド内容の再ルックアップ( テーブルA::ID )
この場合はうまくいきます。
スクリプトを1(クライアント)とスクリプト2(サーバー)と分けると
スクリプト1:
検索実行(テーブルAのレコード抽出)検索内容は例えば、検索条件1・検索条件2・・・
サーバー上のスクリプト実行(引数:: List ( 検索条件1・検索条件2・・・
スクリプト2:
レイアウト切替(レイアウト1:: テーブルA)
変数を設定($検索条件1:: GetValue ( Get ( スクリプト引数); 1 )・・・
検索実行(テーブルAのレコード抽出)検索内容、$検索条件1・$検索条件2・・・
フィールド内容の再ルックアップ( テーブルA::ID )
と設定しています。
検索実行を省いてもルックアップがサーバー上だとうまくいかないです。
もしやと思うのですが、リレーションで紐付いているテーブルAの日付(計算フィールド:繰り返しx31)が非保存でGフィールドを参照している値だからでしょうか?
Offline
よく分かりません。。
サーバーで試すときに、他のユーザはアクセスしていない状態ですか?
> リレーションで紐付いているテーブルAの日付(計算フィールド:繰り返しx31)が非保存でGフィールドを参照
テーブルAは参照する側ですから問題ないでしょう。
関連側だとリレーション自体が成立しませんよね。
Offline
繰り返しフィールドにデータを展開して集計するサンプルです。一覧表示からのデータの編集も可能です。
https://www.dropbox.com/s/6f7i83a8cvzvb … 7.zip?dl=0
Offline
>チポさん
Gフィールドの値をクライアントからサーバーへうまく受け渡しができていないようです。ちなみにスクリプトを使ってサーバー上のファイルのGフィールドにフィールド設定することってできるのでしょうか?
サーバー上ではデバッガで確認できないのでよくわかっていなくてすいません。
>shinさん
いつも参考データをありがとうございます。システム開発者ではない私にはレベルが高いポイントが多くて解析自体に時間がかかりますが、地道にやります。
その他の質問::
ファイルBのテーブルAの日付(計算フィールド:繰り返しx31)を計算フィールドではなく日付フィールドに変更し、G日付フィールドを変更するたびに値を入力できるようにしてみたいと思いました。
スクリプトで「フィールド内容の全置換」で
Let (
[
M = Month ( G日付 ) ;
D = Date ( Month ( G日付 ) ; Get ( 計算式繰り返し位置番号 ) ; Year ( G日付 ) )
]
;
If ( Month ( D ) = M ; D ; "" )
)
の計算式を入れてみると、1番目のフィールド内容は置換されますが、それ以外の繰り返しフィールドは空白になっています。
今の所、スクリプトに繰り返し用の変数を設定し、全置換をLoopさせ(変数を1つづつ増やす)変数が32になったらLoopから抜けるという仕組みを作っています。
計算式ではなく繰り返しフィールドに値を自動入力するためにはどのような設定をするのが良いでしょうか?
Last edited by jose (2016-07-27 15:59:54)
Offline
クライアントのグローバルフィールドの値を他のユーザーはが得ることが出来ませんね。
グロ−バルフィールドがクライアントで、サーバーで実行しようとしていたのですか?
フィールド内容の全置換で、
繰り返しの各回に入力することはできません。
Loopで回す等しないと無理でしょう。
方法を考え直してみた方がいいかも、、
ポータルならとっくにレイアウト作れていましたね ;;;
Offline
集計の機能がわかれば、繰り返しフィールドに設定してある出欠データを繰り返し位置それぞれで集計しているだけですので、表示までは複雑な事はしていません。
それを一覧表示から編集するには、集計フィールドは編集できませんのでその値を編集できるように見せるトリックが必要ですし、そのデータを取得したり、元データへ書き戻したりする手間が居るので、少し複雑な事をしています。非常に応用の広いテクニックですので、自分の物にすると役に立ちますよ。
グローバルフィールドは、サーバー内の値は書き換えが出来ませんので、サンプルで行っているように、ファイルを開いた時の初期設定で必要な値に書き換えを行うと良いでしょうね。
Offline
>チポさん
色々とやってみて、非保存の計算式にグローバル使ってたの見落としました。
計算式内だと引数で渡せないから他の手段を考えてます。
>Shinさん
以前より頂いた繰り返しのサンプルでも大変参考になり勉強させてもらってます。
繰り返しを参照だけでなく編集もできるのは薄々気づいていましたが、スクリプトなど理解の整理に時間がかかりそうです。
とりあえずは参照だけと思ってコツコツやっていきます。
お二方のサポートありがとうございます。
私はまだ初心者ですが、ポータルの良さや繰り返しの良さの理解をもっと深めていきたいです。
この掲示板を通してファイルメーカーの知識が深まることかでき大変感謝しています。
Offline
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 604.34 KiB (Peak: 621.25 KiB) ]