hata お世話になっております。 使用環境 Filemaker 19 Windows10 スタッフの勤怠を作成しているのですが、時給を2部制にしており ①19時~22時が1部 ②22時~1時が2部 としています。 勤務時間が19時~1時の場合 1部の勤務時間は3時間、2部の勤務時間は3時間となりますが、どの様な計算式にすればこの様な場合の1部2部それぞれの勤務時間を出す事が出来るでしょうか? また、上記の様に日を跨ぐ場合もあります。 ご教授いただければ幸いです。 よろしくお願い致します。
tipo 出退の時刻をタイムスタンプにして、 1部の時間 Case ( GetAsTime ( 出勤時刻 ) <=Time ( 22 ; 0 ; 0 ) ; Min ( GetAsTime ( 退勤時刻 ) ; Time ( 22 ; 0 ; 0 ) ) - 出勤時刻 ; 0 ) 2部の時間 退勤時刻 - 出勤時刻 - 1部の時間 でいいでしょう。
tipo tipo 出退の時刻をタイムスタンプにし と書きましたが、、 時刻だけでしたら、 時刻 + Time ( 24 ; 0 ; 0 ) * ( 時刻 <= Time ( 1 ; 0 ; 0 ) ) で25時間に対応できます。
tipo ああ、 出勤が0時以降もあれば、条件式を GetAsTime ( 出勤時刻 ) >=Time ( 19 ; 0 ; 0 ) & GetAsTime ( 出勤時刻 ) <=Time ( 22 ; 0 ; 0 ) としないとだめですね。
hata tipo さん 分かりやすくありがとうございます。 やりたい事が出来ました! 1点、退勤時刻なのですが、現在24時なら0時 25時なら1時と表記しているのですが、教えていただいた方法ですと24時25時としないと、 正しい時間が出ないのですがこれを0時、1時と表記しても正しい時間を出す事は可能でしょうか?
Shin 繰り返し2の計算フィールドにしておいて、 Let ( [ T0 = GetAsTime ( 出勤[1] ) ; T1 = GetAsTime ( 退勤[1] ) + ( 退勤[1] < 出勤[1] ) * Time ( 24 ; 0 ; 0 ) ] ; Choose ( Get ( 計算式繰り返し位置番号 ) - 1 ; // ①19時~22時が1部 Case ( T1 ≤ Time ( 19 ; 0 ; 0 ) ; "" ; T0 ≥ Time ( 22 ; 0 ; 0 ) ; "" ; Min ( T1 ; Time ( 22 ; 0 ; 0 ) ) - Max ( T0 ; Time ( 19 ; 0 ; 0 ) ) ) ; // ②22時~1時が2部 Case ( T1 ≤ Time ( 22 ; 0 ; 0 ) ; "" ; T0 ≥ Time ( 25 ; 0 ; 0 ) ; "" ; Min ( T1 ; Time ( 25 ; 0 ; 0 ) ) - Max ( T0 ; Time ( 22 ; 0 ; 0 ) ) ) ) )
hata Shin さん ありがとうございます。 こちらの方法でもやりたい事出来ました! また、こちらの方法でやった場合、24時を0時表記、25時を1時表記にしても正しい数字が 反映されました。 非常に助かりました。 ありがとうございました。
Shin hata 退勤に時間が入っていないにも関わらず1部と2部に時間が入ってしまう Let ( [ T0 = GetAsTime ( 出勤[1] ) ; T1 = GetAsTime ( 退勤[1] ) + ( 退勤[1] < 出勤[1] ) * Time ( 24 ; 0 ; 0 ) ] ; Choose ( Get ( 計算式繰り返し位置番号 ) - 1 ; // ①19時~22時が1部 Case ( IsEmpty ( 出勤[1] ) or IsEmpty ( 退勤[1] ) ; "" ; T1 ≤ Time ( 19 ; 0 ; 0 ) ; "" ; T0 ≥ Time ( 22 ; 0 ; 0 ) ; "" ; Min ( T1 ; Time ( 22 ; 0 ; 0 ) ) - Max ( T0 ; Time ( 19 ; 0 ; 0 ) ) ) ; // ②22時~1時が2部 Case ( IsEmpty ( 出勤[1] ) or IsEmpty ( 退勤[1] ) ; "" ; T1 ≤ Time ( 22 ; 0 ; 0 ) ; "" ; T0 ≥ Time ( 25 ; 0 ; 0 ) ; "" ; Min ( T1 ; Time ( 25 ; 0 ; 0 ) ) - Max ( T0 ; Time ( 22 ; 0 ; 0 ) ) ) ) )
hata tipo さん 無知で申し訳ありません。 時刻 + Time ( 24 ; 0 ; 0 ) * ( 時刻 <= Time ( 1 ; 0 ; 0 ) ) こちらの式を最初に教えて頂いた式にどのように当てはめれば良いか教えて頂いてもよろしいですか? また、こちらの式ですが出勤に時間が入っていないと1部の方に22:00と時間が入ってしまうのと、 Shinさんに教えて頂いた現象と同じで、出勤に時刻が入ると退勤に時刻が入っていないにも関わらず1部に時間が入ってしまうのですが、 こちらの解決方法ありますでしょうか?
hata tipo さん 自分なりに色々試してみたのですがうまくいかず、 tipo 時刻 + Time ( 24 ; 0 ; 0 ) * ( 時刻 <= Time ( 1 ; 0 ; 0 ) ) こちらを最初に教えて頂いた式にどのように当てはめれば良いかご教授いただいてもよろしいですか? お手数おかけしてしまいますがよろしくお願い致します。
Shin Let ( [ T0 = GetAsTime ( 出勤[1] ) ; T1 = GetAsTime ( 退勤[1] ) + ( 退勤[1] < 出勤[1] ) * Time ( 24 ; 0 ; 0 ) ; ST = Choose ( Get ( 計算式繰り返し位置番号 ) - 1 ; Time ( 19 ; 0 ; 0 ) ; Time ( 22 ; 0 ; 0 ) ) ; ET = Choose ( Get ( 計算式繰り返し位置番号 ) - 1 ; Time ( 22 ; 0 ; 0 ) ; Time ( 25 ; 0 ; 0 ) ) ] ; Case ( IsEmpty ( 出勤[1] ) or IsEmpty ( 退勤[1] ) ; "" ; T1 ≤ ST ; "" ; T0 ≥ ET ; "" ; Min ( T1 ; ET ) - Max ( T0 ; ST ) ) ) のほうが、すっきりしますね
hata Shin さん お世話になっております。 こちらの式ですが、時間の変更を簡潔にしたいと思い、時間の部分をフィールドにしてレイアウトに表示したフィールドの時刻を変更 したら時間1部と2部の時間が変わるようにしたいのですが方法ありますでしょうか? Let ( [ T0 = GetAsTime ( 出勤[1] ) ; T1 = GetAsTime ( 退勤[1] ) + ( 退勤[1] < 出勤[1] ) * Time ( 24 ; 0 ; 0 ) ; ST = Choose ( Get ( 計算式繰り返し位置番号 ) - 1 ; 1部開始時間 ; 1部終了時間 ) ; ET = Choose ( Get ( 計算式繰り返し位置番号 ) - 1 ; 2部開始時間 ; 2部終了時間 ) ] ; Case ( IsEmpty ( 出勤[1] ) or IsEmpty ( 退勤[1] ) ; "" ; T1 ≤ ST ; "" ; T0 ≥ ET ; "" ; Min ( T1 ; ET ) - Max ( T0 ; ST ) ) ) この様に試しにやってみたのですがうまくいかず・・・ ご教示お願い致します。
hata hata さん ありがとうございます。 現在Let関数に関しまして勉強中の身となり、まだ完全に理解が出来ない為 時間の部分をフィールドに置き換えた際の計算式を教えて頂けると幸いです。 お手数おかけしてしまいますがよろしくお願い致します。