初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2019-03-30 19:38:54

HKH
Guest

時間で変わる時給計算の方法はありますか?Part2

https://fm-aid.com/bbs2/viewtopic.php?id=8932

で質問させていただいたもので、更に複雑なことがしたいのですが、やってみると長くなり過ぎ且つうまくいきません。
やりたい事を文章にすると

勤務時間を1部2部に分けて給与計算したい。
<使用フィールド>
クラス
出勤時間
退勤時間
基本給 これを計算フィールドにして金額が出るようにしたいです。

<やりたい事>(10円単位切捨て)
もし退勤時間が空じゃない且つ、
クラスが掃除スタッフであるなら21時までは1000円で21時以降は1200円 (第2部時間の方を15分単位切捨て(*1))
クラスがバイドであるなら20時までは1000円で20時以降は1200円  (第2部時間の方を15分単位切捨て(*1))
退勤時間が空なら0

*1)第2部時間の方を15分切捨て
(例)掃除スタッフが20時20分に出勤して22時に退勤した場合
40分第1部時給=666円
1時間40分=(15分単位切捨てで)1時間30分-40分=50分は(15分単位切捨てで)45分第2部時給=900円
666円+900円=1566円=(10円単位切捨て)1500円 が基本給

というようにしたいです。
かなり複雑なのですが、計算式を教えていただければと思います。宜しくお願いします。
次のレスでは自分なりにトライしてみた式を投稿します。

#2 2019-03-30 19:41:13

HKH
Guest

Re: 時間で変わる時給計算の方法はありますか?Part2

自分でやってみたのが以下ですが、うまく行かず、無駄が多い気がします・・・。

If ( not IsEmpty ( 退勤時間 ) ;
Case (
クラス="掃除スタッフ" ;
Truncate (
Let(
[
   #仮2部勤務時間=Max(退勤時間-Time(21;0;0); 0);
   #1部勤務時間=If ( Div ( 退勤時間-出勤時間-#仮2部勤務時間 ; 15 * 60 ) * 15 * 60 < Time(1;0;0) ; 0 ; 退勤時間-出勤時間-#仮2部勤務時間);
   #2部勤務時間=If ( Div ( 退勤時間-Time(21;0;0) ; 15 * 60 ) * 15 * 60 < 0 ; 0 ; Div ( 退勤時間-Time(21;0;0) ; 15 * 60 ) * 15 * 60) - #1部勤務時間
];
   Int(#1部勤務時間*(1000/3600)+#2部勤務時間*(1200/3600))
)
; -2);

クラス ≠ "アルバイト" ;
Truncate (
Let(
[
   #仮2部勤務時間=Max(退勤時間-Time(20;0;0); 0);
   #1部勤務時間=退勤時間-出勤時間-#仮2部勤務時間;
   #2部勤務時間=If ( Div ( 退勤時間-Time(20;0;0) ; 15 * 60 ) * 15 * 60 < 0 ; 0 ; Div ( 退勤時間-Time(20;0;0) ; 15 * 60 ) * 15 * 60)
];
   Int(#1部勤務時間*(1000/3600)+#2部勤務時間*(1200/3600))
)
; -2)
;0
))

#3 2019-03-30 22:21:33

Hiro
Member

Re: 時間で変わる時給計算の方法はありますか?Part2


Let(
[
   #クラス=PatternCount(クラス; "掃除スタッフ") + PatternCount(クラス; "バイト")*2;   //#クラスは、掃除スタッフ=1、バイト=2
   #2部切替時刻=Choose(#クラス; ""; Time(21;0;0); Time(20;0;0));
   #勤務時間=退勤時間 - 出勤時間;
   #仮2部勤務時間=Max(退勤時間 - #2部切替時刻; 0);
   #2部勤務時間=Div(#仮2部勤務時間; (15*60))*(15*60);
   #1部勤務時間=#勤務時間 - #仮2部勤務時間;
   #仮基本給=Int(#1部勤務時間*(1000/3600)+#2部勤務時間*(1200/3600))
];
   Choose(IsEmpty(退勤時間); Div(#仮基本給; 10)*10)
)

Offline

#4 2019-03-30 23:12:29

HKH
Guest

Re: 時間で変わる時給計算の方法はありますか?Part2

Hiroさん大変スマートな式をありがとうございます。
試したところ、出勤と退勤の時間が同じ時、基本給が 0 にならず、70だったり値が出てきてしまいます。
これはなぜでしょうか?

#5 2019-03-30 23:46:00

HKH
Guest

Re: 時間で変わる時給計算の方法はありますか?Part2

また 23:00出勤 24:00退勤 で2部時給が1200円ですと 基本給が1490円になったりします。
1部2部の時間をまたぐとうまく行きますが、2部だけの時間帯で出退勤するとおかしくなるようです。

#6 2019-03-31 00:39:53

Hiro
Member

Re: 時間で変わる時給計算の方法はありますか?Part2

【 修正式 】
>#4と>#5の指摘誤算を修正しました。(修正箇所は、赤字で明示)

Let(
[
   #クラス=PatternCount(クラス; "掃除スタッフ") + PatternCount(クラス; "バイト")*2;   //#クラスは、掃除スタッフ=1、バイト=2
   #2部切替時刻=Choose(#クラス; ""; Time(21;0;0); Time(20;0;0));
   #勤務時間=退勤時間 - 出勤時間;
   #仮2部勤務時間=Max(退勤時間 - Max(出勤時間; #2部切替時刻); 0);
   #2部勤務時間=Div(#仮2部勤務時間; (15*60))*(15*60);
   #1部勤務時間=#勤務時間 - #仮2部勤務時間;
   #仮基本給=Int(#1部勤務時間*1000/3600 + #2部勤務時間*1200/3600)
];
   Choose(IsEmpty(退勤時間); Div(#仮基本給; 10) * 10)
)

Last edited by Hiro (2019-03-31 00:58:06)

Offline

#7 2019-03-31 00:59:27

HKH
Guest

Re: 時間で変わる時給計算の方法はありますか?Part2

完璧です!
全ての状況で思った通り計算できるようになりました。
Hiroさんありがとうございました!!

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 560.35 KiB (Peak: 579.02 KiB) ]