初心者のFileMaker pro Q&A

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

1.ファイルメーカーで解らない事があればここで質問して下さい。

何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

ログインしていません。

アナウンス

#1 2019-04-25 22:41:10

gonn
ゲストユーザー

時間計算について

ファイルメーカー 16で有給計算をしたいのですが、複雑なためどうかご教授願います。

①勤務時間     休憩時間
9:15〜17:45  12:00〜12:45

有給残日数 40日
丸一日有給を取った場合は当たり前ですが
残39日
そして

例:①9:15〜10:01だと1時間1分ですが
1分を過ぎても2時間となる、

例⓶12:00〜17:45
5:45ですが休憩時間をまたぐので45分を引く。

休憩時間をまたぐ時は45分を引く
という計算式にしたいのです
また残日数が0の場合のみで分単位で残がある時は分単位で取得できるのです。
このような場合の計算式を作ることは可能ですか

パターンとしては16:45〜17:30というもう1つの休憩時間もありまして
チェックボックスでどちらかの休憩時間にチェックをいれるとその休憩時間でけいさんされるようにしたいです。
わかりづらいとおもいますがお願いいたします。。

#2 2019-04-26 00:26:58

Hiro
メンバー

Re: 時間計算について

勤務時間計算の説明と求める有給計算との関係がさっぱり分かりません。
有給計算とは、最終的に何を求めれば良いのですか?

オフライン

#3 2019-04-26 06:54:16

gonn
ゲストユーザー

Re: 時間計算について

説明がダメダメですいません。。
結果的に求めたいのは有給を取った時の残日数と残時間です。
すいません。。

#4 2019-04-26 09:56:43

チポ
メンバー

Re: 時間計算について

> 例:①9:15〜10:01だと1時間1分ですが
計算は間違っていますが、、
これは有給休憩時間ということですよね?

有給休憩の
  開始時刻をS
  終了時刻をE
として、
有給時間Tの計算は
   E - S
   - Case ( S ≤ Time ( 12 ; 0 ; 0 )  and E  ≥  Time ( 12 ; 45 ; 0 ) ; 45 * 60 )
   - Case ( S ≤ Time ( 16 ; 45 ; 0 )  and E  ≥  Time ( 17 ; 30 ; 0 ) ; 45 * 60 )
で求められます。

切り上げは
  Ceiling ( T / 3600 )
結果を数字として、時間が求められます。

有給日数残が24時間より少ない場合は
上記の切り上げをしなければいいでしょう。

オフライン

#5 2019-04-26 10:08:58

チポ
メンバー

Re: 時間計算について

> 有給日数残が24時間より少ない場合
24時間ではないか・・

有給残日数 40日
これを時間にする場合、
  40 * 24
ではないですよね?

オフライン

#6 2019-04-26 13:51:02

gonn
ゲストユーザー

Re: 時間計算について

いろいろありがとうございます?
試してみたいと思います。
1日は7時間45分として考えます。

#7 2019-04-26 18:23:57

Hiro
メンバー

Re: 時間計算について

説明への解釈が間違っていなければ、下式の様な事?
(※日を跨ぐケースはその言及が無いので、本式では非対応です)

Let(
[
   #有給開始時刻=有給開始時刻フィールド;     // 例:9:15:00 //
   #有給終了時刻=有給終了時刻フィールド;     //例:17:45:00 //
   #休息時間=休息時間指定フィールド;     // 例:12:00〜12:45 //
   #有給日数残=有給日数残フィールド;     // 例:40 //
   #有給時間残=有給時間残フィールド;     // 例:2:30:00 //
   #繰上単位時間=Time(7;45;0);     // 例:有給1日は 7時間45分 相当とする //
   //---上の引数値に基づき計算開始---//
   #有給時間=#有給終了時刻 - #有給開始時刻;
   #休息時間=
      Let([
         #休息時間=Substitute(#休息時間; ["〜";¶]);
         #s=GetAsTime(GetValue(#休息時間;1));
         #e=GetAsTime(GetValue(#休息時間;2))
      ];
         Case((#e>=#有給開始時刻) and (#s<=#有給終了時刻); #e-#s)
      );
   #有給時間=#有給時間 - #休息時間;
   #有給時間=Case(#有給日数残; Ceiling(#有給時間/3600)*3600; Ceiling(#有給時間/60)*60);
   #有給日時残=(#有給日数残*#繰上単位時間 + #有給時間残) - #有給時間;
   #有給日数残=Div(#有給日時残; #繰上単位時間);
   #有給時間残=GetAsTime(Mod(#有給日時残; #繰上単位時間))
];
   #有給日数残     // 結果例:有給日数残は 39 日が返る //
&¶&
   #有給時間残     // 結果例:有給時間残は 2:15:00 時間が返る //
)

編集者 Hiro (2019-04-27 15:46:14)

オフライン

クィック投稿

メッセージを書いて送信してください。
登録の確認

実在の人物による登録であることを確認します。

Board footer