みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になります。
Mac FMP14adv です。
給与計算の仕組みを作っています。
関連するテーブルは
・月次シフト(従業員1人1ヶ月で1レコード)
・従業員マスタ
のふたつで、従業員マスタのIDでリレーションしています。
従業員マスタには、交通費・時給(月給)などの給与のフィールドがあります。
それを、月次シフトの対応するフィールド、交通費・時給(月給)などに、
計算値自動入力で、ルックアップ(従業員マスタ::交通費)しています。
給与を別テーブルにせず、使用しているのですが、
昇給や転居などで、交通費や時給などが変更する事に対応をするため、
それぞれを繰り返しフィールドにし、
その繰り返し位置に対応する適用開始日の繰り返しフィールドを作りました。
・従業員マスタのフィールド
・交通費[100] [1] ¥130 [2] ¥260 [3] [4]
・交通費変更日[100] [1] 2015/8/1 [2] 2015/1/18 [3] [4]
・月次シフトのフィールド
・交通費
・月末日 (例:2015/9/30)
これを変更日のフィールドの日付がで判定して、繰り返し位置の1番か2番のどちらを使うかを選択する
カスタム関数を作りたいのですが、
カスタム関数を作り慣れておらずゆきずまっています。
カスタム関数の引数は、
金額(交通費や時給のフィールド)
変更日
基準日(月末の日付フィールド)
の三つでできるのではないかと思っています。
よろしくお願いいたします
Offline
交通費や時給などが変更する事に対応をするため、
それぞれを繰り返しフィールドにし
繰り返しではなく、
変更ごとに1レコードとする別テーブルにすべきでしょう。
Offline
交通費や時給などが変更する事に対応をするため、
それぞれを繰り返しフィールドにし繰り返しではなく、
変更ごとに1レコードとする別テーブルにすべきでしょう。
データベースとしては、おっしゃる通りなのですが、
給与は過去の物を取っておく必要はなく、
シフトを今月と来月と作っていて、
その途中で参照する給与や交通費が変わったり、
数ヶ月後の昇給の記録を、その月の給与計算のタイミングではなく事前に入力しておく、
くらいなので、繰り返しで処理できるのなら、構造をいじらなくて済むのでいいなと思っています。
Offline
繰り返しフィールドを使っていると、普通は、
・交通費[100] [1] ¥ 260[2] ¥130 [3] [4]
・交通費変更日[100] [1]2015/1/18 [2] 2015/8/1 [3] [4]
となりませんか。
これなら、もう一つ
Case ( 基準日[1] < 基準日 ; 交通費 )
という計算式を設定した計算式繰り返しフィールドを作り、Last (繰り返しフィールド) で該当する交通費が得られます。
まあ、お薦めの構造ではないのは、チポさんと同じ意見です。別テーブルで管理すれば、リレーションのみで得られます。
Offline
ありがとうございます。
別テーブルでというのは自分でもそう思います。
Lastというのは久しく使っていなかったのですっかり忘れていました。
ありがとうございます。
Offline
カスタム関数も作ってみたのですが、
うまく計算ができません。
スクリプトのようにデバッグできないので、
どこがおかしいかを検証しきれずにいます。
アドバイスいただけると嬉しいです。
Payroll(金額 変更日 基準日 回数) 金額と変更日は繰り返しフィールド 回数は1もしくは入力せず
Let (
回数 =Case ( IsEmpty ( 回数 ) ; 1 ;
Count( 適用開始日 ) ≥ 回数 ; 回数 ;
0
)
;
Case(
回数 > 0 and
基準日 ≥ GetRepetition ( 適用開始日 ; 回数 ); GetRepetition ( 金額 ; 回数 ) ;
Payroll ( 金額 ; 適用開始日 ;基準日 ; 回数 + 1 )
)
)
//回数は入力しないか1
その前に考えたのは、これですが、これは、繰り返し2番目以降のデータが取れませんでした。
Let (
回数 = Get ( 計算式繰り返し位置番号 )
;
Case(
基準日 ≥ GetRepetition ( 変更日 ; 回数 ); GetRepetition ( 金額 ; 回数 )
)
)
Offline
筋の悪い処理だと思いますが、
うまくいかないカスタム関数のどこがだめなのか、
どう考えたらいいのか、アドバイスをいただければと思います。
よろしくお願いいたします。
NK
Offline
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 519.7 KiB (Peak: 524.23 KiB) ]