打刻時間からいろいろな計算へ
打刻は当然のことながら、勤怠管理、給与を支払うために行います。今回はそのベースとなる一日の勤務時間などを計算していきます。
まず、前提としてタイムカードというテーブルがあります。これは一人一日、1レコードを持つものです。実際の紙のタイムレコードの一日分=1レコードということになります。
計算が必要な項目
給与計算をするにあたって、タイムカード上で必要な基本的な計算は下記の通りでしょう。
- 勤務時間の計算
- 残業時間の計算
- 休日の判断
FileMaker(ファイルメーカー)上での計算
FileMaker(ファイルメーカー)上での計算を行う方法は大まかに3つあるでしょう。
- 1)計算フィールドによる計算
- 2)オプション・計算値の自動入力による計算
- 3)スクリプトで計算
まず1)です。これは、「ファイル」→「管理」→「データベース」で設定するフィールドでタイプを「計算」に設定し、計算式も設定します。この方法のメリットは必要な時に再計算をされます。また、別のテーブルの値を使用して計算を行う場合でも値が変更されると計算されます。デメリットは、レコード数が多くなると処理に時間がかかることです。とはいっても、社内ネットワークだけの運用ですむような場合にはあまり感じないかもしれません。
2)です。フィールドのオプションで計算値という欄にチェックを入れて使用するものです。この場合は、関連するフィールドの値が変更されると、再計算されます(「フィールドに既存の値が存在する場合は置き換えない」チェックがない場合に)。この場合は、別のテーブルの値を使用している場合で、別のテーブルの値が変更されても再計算されません。また、1)の方法より処理が早くなります。FileMaker Serverをつかってインターネットからアクセスする場合はこちらの方法がいいでしょう。
3)は2)と似ていますが、オプションを設定せずに、スクリプトを作成して、そのスクリプトで計算結果を書き込みます。1)の方法が使えず、別のテーブルの値を使用している場合に採用されることが多いです。処理に関しては2)と変わりません。ただし、スクリプトを実行させる必要があるので、どのタイミングで実行させるかを考える必要があります。
今回はどの場合にも使え、別テーブルのフィールドは使用しないので、2)で考えていきます。
勤務時間の計算
タイムカードテーブルに「勤務時間」という数字フィールドを作成し、オプションの計算値を設定します。「フィールドに既存の値が存在する場合は置き換えない」チェックはしません。
( 退勤時刻 – 出勤時刻 ) / 3600
これで、勤務時間が時間単位で求められます。
残業時間の計算
次に残業時間です。残業はこの例では勤務時間(拘束時間)が9時間を超えた場合に残業とします。基本は、上記の勤務時間より「-9」とすればいいのですが、仮に勤務時間が9時間以内の場合はマイナスになってしまうので、そのあたりも考慮してみます。
Case ( 勤務時間 < 9 ; 0 ; 勤務時間 – 9 )
論理関数「Case」を使用して、勤務時間が9時間未満の時は0と表示するようになります。
休日の判定
ここでは、とりあえず休日出勤等は考慮しません。打刻がなかった場合に、その日を休日としてカウントするようにしていきます。
Case ( IsEmpty ( 出勤時刻 ) and IsEmpty ( 退勤時刻 ) ; 1 ; “” )
ここでもCase関数を使って、出勤、退勤ともに打刻のない場合時に休日としてカウントして、「1」を自動入力するようになります。この場合は、打刻前でも、打刻がないので、とりあえず休日としてカウントされます。
次回は、このタイムカードのデータを1か月分集計していきます。