みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
ポータルを配置してその上に自己リレーション(キーは日付)で金額合計を表示させています
単価を計算式で定義しているので、各レコードの金額フィールドの計算式には
Evaluate ( 単価表::単価 ) をいれています
ポータルにレコードを追加してポータル以外をクリックすると、上記の金額合計が更新されます
ポータルでレコードを修正すると、その金額合計フィールドをクリックするまで更新されません
いずれもポータルに入力したら即時再計算させるにはどうしたらよいですか?
Offline
Evaluate関数
を使わなければいいと思いますが。
必然なんでしょうか?
対症療法としては、
スクリプトでレコード確定として、
適当なフィールドのスクリプトトリガで実行させればいいかもしれません。
Offline
リレーションしている単価表に格納する単価が
( 個数 × 100 ) + ( 金額 × 0.7 )
金額 × 0.9
とかそういったものばかりなので、Evaluate関数が必要だと思ったのですが
他の方法ありますか?
ポータルのフィールドに入力するたびにレコード確定のスクリプトをうごかす
ということですか?
Last edited by UDAS (2017-06-30 16:51:27)
Offline
> ( 個数 × 100 ) + ( 金額 × 0.7 )
> 金額 × 0.9
これが単価なんですか?
> ポータルのフィールドに入力するたびにレコード確定のスクリプトをうごかす
それでは連続で入力ができなくなってしまいますから、、
例えば、
ポータル行で最後に入力するフィールドで確定をして、
次のポータル行へ移る。
様な感じではいかがでしょうか。
Offline
そうです。単価というには語弊があるかもしれません
請求金額の算出方法です
式は例として書いたので実際のものとは違いますが
下請けなもので元請けの金額に対して、いくら、というものを計算する必要がありますので
このように変なものになっています
要するに、取引先または取引先ごとの業務内容によって
計算種別が複数あるので、それをマスタに登録しておき、呼び出して計算させるために
Evaluate関数をつかっています
もっと良い方法があったら教えてください
一般的にはどうやるものでしょうか?
取引先によっては単価が100円で単純にかけけるだけ、というものもあります
そもそもEvaluate関数だとポータル入力後に即時確定されないのでしょうか?
Offline
Evaluate() 関数の2番目の引数を設定すれば良いのでは。そのポータル内の変更されるフィールドにしておくと良いかと。
Offline
Evaluate ( 単価表::単価 )
とある場合どうやればいいのですか?
Evaluate ( 単価表::単価 ; 個数 ; 金額 )
とすると、個数と金額フィールドが変更されたときに
自己リレーションの合計も再計算されるということなのでしょうか?
やってみましたが、動作はかわりませんでした
新規レコード作成時はポータルを出る
レコード修整時には合計フィールドに入る
ということをしないと更新反映されません
Offline
現場で確認しないとなんとも言えないかも。
取りあえず逃げるには、その場では更新を無視しておくか、チポさんの提案のようにトリガーで再評価させるか、Evaluate() の第2引数を利用するか、でしょう。
> ( 個数 × 100 ) + ( 金額 × 0.7 )
> 金額 × 0.9
> 単価が100円で単純にかけけるだけ
このような形でしたら、
( 個数 × 100 ) + ( 金額 × 0.7 )
( 個数 × 0 ) + ( 金額 × 0.9 )
( 個数 × 100 ) + ( 金額 × 0 )
という形に統一できますよ。
Last edited by Shin (2017-07-01 15:56:12)
Offline
アドバイスいただきましたがうまくできません
うまく伝えきれていないかもしれないので、もう一度質問させてください
【伝票テーブル】
【明細テーブル】
があり、【明細テーブル】の【金額フィールド】はEvaluate ( 単価表::単価 )としています
【明細テーブル】の【日付フィールド】で自己リレーションして、
上記【金額フィールド】の合計を計算する【合計金額フィールド】があります
【伝票テーブル】に【明細テーブル】のポータルと、上記の【合計金額フィールド】を配置します
ポータルに入力したとき、修整したとき、削除したときに、その【合計金額フィールド】が更新されません
一度【合計金額フィールド】をクリックすると更新されます
即時に【合計金額フィールド】が更新されるようにしたいです
ちなみに、ポータルではなく【明細テーブル】のレコードを直接編集すると、
即時【合計金額フィールド】は更新されています
Offline
説明が足りません。
それらのテーブルと、単価表の関係は。
また、金額合計を、伝票側ではなく、日付の自己リレーションで行なっているのも、少し特異かも。
Offline
日付で自己リレーションしているのは間違いでした売上IDでやるように修正しました
伝票側で金額合計を出すにはどうやったらいいのですか?
一応、画像をアップしました
間違っているところがあったらよろしくお願いします
Offline
単価表はどこにどう関連付けられていますか。
私の上の提案を使うと、Evaluate() を使う必要はなくなりますが、計算させるタイミングは変わらないかもしれまsん。
Offline
チポさんのトリガでやる、というのをなんとか
やってみましたがこれであってますか?
フィールドへ移動[金額日計]
レコード/検索条件確定
を個数フィールドのトリガEXITにしたら一応やりたいことはできてるように見えます
ひとつ疑問なんですが
金額日計フィールドへ移動を実行しているのに
日付フィールドに入力後TABキーを押すと
ポータルの次の行の個数フィールドがアクティブになるのはなぜでしょうか?
動作的にはこちらのほうがよいので問題ないのですが、本来なら金額日計かその次のTAB順のフィールドが
選択されるのではないですか?
手動で金額日計フィールドを選択してTABキーを押すとポータルの1行目に移動するようです
Shinさん、
単価表は明細テーブルと単価IDでリレーションしています
ちなみに画像の場合の単価は
IF ( 個数 > 0 ; ( 個数 * 50 ) + ( 250 ) ; 0 )
としています
これが単価?という指摘を受けて気がついたのですが、単価といういいかたは間違っているかもしれませんね
計算種別とでもいいましょうか。
これは、取引先やその業務によってバラバラ(今後増えたりする)なので計算式などで分岐させるのではなく単価表からひっぱってくる形にしています
例えば、個数ではなく、重量*5円 や歩合制 などというものもあったり、複雑なのでそうしています
Offline
合計金額は明細テーブルではなく、
伝票テーブルに作るのが普通でしょう。
即時表示されないのはこれが原因かもしれませんよ。
Offline
金額合計を伝票テーブルに作成すると、新規作成時には更新されましたが
既存レコードの変更時には更新されませんでした
>日付フィールドに入力後TABキーを押すと
>ポータルの次の行の個数フィールドがアクティブになるのはなぜでしょうか?
これについてはなぜでしょうか?
Offline
> フィールドへ移動[金額日計]
> レコード/検索条件確定
これでは狙った動きにはなりませんよ。
トリガ
OnObjectExit
はイベントが処理される前にスクリプトが動きます。
例えば、
tabキーをそのフィールドで押した場合、
そのキーでトリガされ、スクリプトを実行、
その後、キーの動きをします。
ですから、
tab順で次のフィールドへ移動しちゃいますね。
スクリプトの最後に
スクリプト終了[結果; 0 ]
を入れるとイベントはキャンセルされます。
トリガのヘルプです、ご一読を
http://www.filemaker.com/help/16/fmp/ja … it.html%23
> 日付フィールドに入力後TABキーを押すと
> ポータルの次の行の個数フィールドがアクティブになるのはなぜでしょうか
日付フィールドにトリガは付いていないでしょう?
よく分かりません。。
Offline
チポさんにご指摘頂きましたが
なぜか先述の方法で問題なく動作しているようです
検証していただきたく、サンプルをアップしましたのでよろしかったら
お願い致します。
http://fast-uploader.com/file/7054623289955/
(アップローダーで検索してはじめにでたところにアップしました)
Offline
ごめんなさい、
ここではファイルのアップダウンはできないのです。
スレ主さんの書かれたスクリプトでは、結果的に
最後にtab順次のフィールドへ移動して終わっているはずです。
そのスクリプトを、
トリガではなく、手動で動かしてみると結果の違いが分かると思いますよ。
Offline
みなさんサンプルなどアップされますので、良いのかと思っていましたが
だめだったんですね
>最後にtab順次のフィールドへ移動して終わっているはずです。
トリガではそのようになりますが、
手動でやると、ポータルの1行目に移動してしまいます
なぜトリガではポータルの、トリガ発動フィールドの次のレコードのフィールドになり
手動では1行目に移動するのですか?
動作的には次フィールドに移動することで問題ないのですが
原理がわかりません
Offline
ああ、違います。
「私」がファイルのアップダウンができないのです。
> 手動でやると、ポータルの1行目に移動してしまいます
??書かれたスクリプトを手動で実行したら、そうはならないはずですが??
動きについては、
私の#16をもう一度お読みください。
Offline
むしろスクリプトは
フィールドへ移動[金額日計]
だけでも動作(数値変更時に更新される)するようです
>tabキーをそのフィールドで押した場合、
>そのキーでトリガされ、スクリプトを実行、
>その後、キーの動きをします。
とのことですが、この場合だと、
動きとしては
個数フィールド→トリガ→金額合計フィールド に移動(クリックしたのと同じですよね?)→TABキーの動作→ポータル1行目
となるはずじゃないんですかね?
なぜ次のフィールドに移動できるんでしょうか?
Offline
伝票側の合計の計算式を、Evaluate ( "Sum(詳細T::金額)" ; 詳細T::個数 ) に変更すれば、トリガー無しでもいいはずです。
タブ順移動は、繰り返しフィールドやポータル行の中では、次の繰り返し位置や次のポータル行へ移動する動きになるようです。
繰り返しフィールドでは、複数並んでいると、同じ繰り返し位置の別フィールドへ移動していき、最後に次の繰り返し位置に進む、という動きと、同じフィールドの繰り返し位置を進んでいき、最後に次のフィールドの最初に動く、という動きを作れます。
Offline
> 個数フィールド→トリガ→金額合計フィールド に移動(クリックしたのと同じですよね?)→TABキーの動作→ポータル1行目
tab順が書かれていませんが、、
最後の
ポータル1行名
これが、個数フィールドの次ならその動きでいいんです。
> なぜ次のフィールドに移動できるんでしょうか?
ご質問が理解出来ません。
Offline
Shinさん、
スクリプトで、一度金額合計フィールドに移動しているので、次のタブ順はポータルの1行目になるのではないですか?
マウスで金額合計フィールドをクリックした後にTABキーを押すとポータルの1行目になります
しかし、スクリプトで
フィールドへ移動[金額日計]
をやると、ポータルの次のフィールドに移動するのがなぜかわかりません
Evaluate ( "Sum(詳細T::金額)" ; 詳細T::個数 )
とすれば、個数が訂正されたときに更新されるからたしかにトリガいりませんね
どちらを使ったほうがよいか、ということなら
計算式でやったほうがいいのでしょうか?
Offline
> スクリプトで、一度金額合計フィールドに移動しているので、次のタブ順はポータルの1行目になるのではないですか
ではなくて、
トリガされたフィールドの次のフィールドに移動します。
tab順は自由に変更出来ますから、
その説明がないとこちらにその順が分かりませんよ。
Offline
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 624.92 KiB (Peak: 657.83 KiB) ]