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

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

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

You are not logged in.

Announcement

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


#1 2017-11-02 12:49:46

しろくろ
Member

勤怠計算について

ファイルメーカー16で勤怠管理をしようとしていますがどうしてもわからないので教えて下さい。

条件
平日 5:00〜22:00 の間の8時間は労働1 8時間を超えた場合 労働2
平日 22:00〜翌日5:00 の間は労働2

日曜 5:00〜22:00 の間の8時間は労働2 8時間を超えた場合 労働3
日曜 22:00〜翌日5:00 の間は労働3


24時間を超えての勤務は無し


作成しているフィールド

日付:日付型
出勤時刻:時刻型
退勤時刻:時刻型
労働1:計算式
労働2:計算式
労働3:計算式


求めたい事

出勤時間から退勤時間までの労働時間を上の条件に合わせて
労働1・労働2・労働3で計算させたい。

例:
日付 11/2
出勤 15:00
退勤 23:00

欲しい結果

11/2は平日なので
日付 11/2
労働1 7:00
労働2 1:00



IF分を使って色々とこねくり回してみましたが上手くいかず、
フィールドの追加なども含め、こうすればうまくいくというのをご教授頂ければと思います。

宜しくお願い致します。

Offline

#2 2017-11-02 13:18:18

チポ
Member

Re: 勤怠計算について

> 平日 22:00〜翌日5:00 の間は労働2
これが、
土曜から日曜に掛かった様な場合はどう考えればいいのでしょうか?

日曜も労働2?
日曜の分だけ労働3?

Offline

#3 2017-11-02 13:25:28

しろくろ
Member

Re: 勤怠計算について

チポ様
曜日は開始時間の時の曜日を起点と考えていますので
土曜から日曜はどこ扱いです
日曜から月曜にまたいだときは日曜扱いです

よろしくお願いします

Offline

#4 2017-11-02 13:26:59

しろくろ
Member

Re: 勤怠計算について

文字がおかしくなりました(汗)
開始時間の時の曜日が起点となりますので
土曜から日曜は土曜扱い
日曜から月曜なら日曜扱いとなります

よろしくお願いします

Offline

#5 2017-11-02 13:36:22

チポ
Member

Re: 勤怠計算について

もう一つあった、

例えば
5〜22に開始して、
翌日の5時を過ぎた場合の分は?

Offline

#6 2017-11-02 13:40:44

mic
Member

Re: 勤怠計算について

条件が複雑な場合はまずそれぞれの条件ごとにフィールドを作ってしまうと良いと思います。

日付:日付型
出勤時刻:時刻型
退勤時刻:時刻型
労働1:_平日時間内
労働2:_平日超過 + _平日時間外 + _日曜時間内
労働3:_日曜超過 + _日曜時間外

_区分1:Let([
#t1 = If(出勤時刻<Time(5;0;0);Time(5;0;0);出勤時刻)
;#t2 = If(退勤時刻>Time(22;0;0);Time(22;0;0);退勤時刻)
];
#t2 - #t1
)

_区分2:Let([
#t1 = If(出勤時刻<Time(5;0;0);Time(5;0;0)-出勤時刻;0)
;#t2 = If(退勤時刻>Time(22;0;0);退勤時刻-Time(22;0;0);0)
];
#t2 + #t1
)

_時間内:If ( Time ( 8;0;0 )<_区分1 ; Time ( 8;0;0 ) ; _区分1 )
_超過:If ( Time ( 8;0;0 )<_区分1 ; _区分1 - Time ( 8;0;0 ) ; "" )
_時間外:_区分2
_平日時間内:If( DayOfWeek( 日付 ) = 1 ; "" ; _時間内 )
_平日超過:If( DayOfWeek( 日付 ) = 1 ; "" ; _超過 )
_平日時間外:If( DayOfWeek( 日付 ) = 1 ; "" ; _時間外 )
_日曜時間内:If( DayOfWeek( 日付 ) = 1 ; _時間内 ; "" )
_日曜超過:If( DayOfWeek( 日付 ) = 1 ; _超過 ; "" )
_日曜時間外:If( DayOfWeek( 日付 ) = 1 ; _時間外 ; "" )
※24時以降は25:00~29:00 のような入力を前提としています。

ここから式を統合する方がわかりやすいですね。

Offline

#7 2017-11-02 14:00:30

しろくろ
Member

Re: 勤怠計算について

チポ様

5時から22時に開始して翌日5時をすぎた場合は一つ前に戻ります

開始 平日1700 から 終了翌日700


労働1  700
労働2 700
となります

Offline

#8 2017-11-02 14:01:50

しろくろ
Member

Re: 勤怠計算について

mic様

ありがとうございます。
こちらも少し試してみたいと思います

Offline

#9 2017-11-02 14:49:15

チポ
Member

Re: 勤怠計算について

退勤時刻は48時間制とします。

時間で書くと面倒なので、
「時間」の数字のみで書きますね(手抜きご容赦)


5〜22の8時間内を求める式

Let ( [ $s = Min ( Max ( 出勤時刻 ; 5 ) ; 22 )
          $t1 = Min ( 22 - $s ; 8 ) ;
          $t2 = Case ( 退勤時刻 > 29 ; 退勤時刻 - 29 ) ] ; //翌日の5時を過ぎた労働時間
          Min ( $t1 + $t2 ; 8 )
)

開始時刻が
日曜以外なら 労働1
日曜なら 労働2

残りの時間が、労働2、労働3になりますね。

Offline

#10 2017-11-02 14:54:08

しろくろ
Member

Re: 勤怠計算について

mic様

今少し試させて頂いていますが、

例えば、平日の出勤時刻が5〜22の間で
退勤時刻が27時時を回る場合は27時以降退勤時刻までの時間は 労働1に入るのですが

例 平日
  出勤時刻:21:00
  退勤時刻:29:00

「1」:21:00〜22:00 労働1
「2」:22:00〜27:00 労働2
「3」:27:00〜29:00 労働1

となりますが、恐らく
_区分1で「1」の計算
_区分2で「2」の計算をしているのだと思うのですが(私が書いた条件の上段が区分1下段が区分2の解釈です)

現状では「3」の処理が無い状態ですので、_区分1 _区分2を下記のようしたのですが合っているでしょうか?



_区分1:Let([
#t1 = If(出勤時刻<Time(5;0;0);Time(5;0;0);出勤時刻); //出勤時刻が5:00より後か前の判断
#t2 = If(退勤時刻>Time(22;0;0);Time(22;0;0);退勤時刻);//退勤時刻が22:00より後か前の判断
#t3 = If(退勤時刻>Time(27;0;0);退勤時刻-Time(27;0;0);"")
];
#t2 - #t1 +#t3
)

_区分2:Let([
#t1 = If(出勤時刻<Time(5;0;0);Time(5;0;0)-出勤時刻;0);
#t2 = If(退勤時刻>Time(22;0;0);退勤時刻-Time(22;0;0);0);
#t3 = If(退勤時刻>Time(27;0;0);退勤時刻-Time(27;0;0);0)
];
#t2 + #t1 -#t3
)

宜しくお願い致します。

Offline

#11 2017-11-02 14:54:40

しろくろ
Member

Re: 勤怠計算について

チポ様

ありがとうございます
試してみたいと思います

Offline

#12 2017-11-02 15:35:13

しろくろ
Member

Re: 勤怠計算について

AM500は2700では有りませんでした汗2900ですね。
やりたい結果が表示されましたので解決としたいとおもいます。
チポ様mic様ありがとうございました

Offline

#13 2017-11-03 00:47:34

Shin
Member

Re: 勤怠計算について

出遅れましたが、中間フィールドを使って計算する方法です。
https://www.dropbox.com/s/ok2rotbjx3sk2 … 7.zip?dl=0
少し工夫すると、すごく応用が利きますよ。

Last edited by Shin (2017-11-03 00:49:53)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 10 queries executed - Memory usage: 569.06 KiB (Peak: 585.97 KiB) ]