タイムカードを集計するための準備
今回は、タイムカードのデータを一か月分まとめて集計していきます。一か月分をまとめることによって、給与計算として使う元のデータとなっていきます。まとめるデータは下記の通りです。
- 勤務時間の合計
- 勤務日数、休日日数の合計
- 残業時間の計算
集計の準備(テーブルの用意)
集計といってもファイルメーカーの集計(レポート)機能は使いません。この機能を使用すれば、新しくテーブルを作る必要がありませんが、データとして利用するのが少し難しくなるからです。例えば、集計されたデータを見るには必ずソートが必要になります。またこの集計データ自体は、保存されないので、利用するのに少し面倒なわけです。また、レコード数が多くなったり、FileMaker Serverを利用してインターネット経由で見る場合など、遅く感じたりすることもあるので、この方法は使いません。
タイムカードの締め日
集計用のテーブルを作る前にタイムカードのデータにいつの給与計算に必要なレコードなのかを判別するためのフィールドを作ります。そのために必要なのが、「締め日」です。
月末締め15日払い、10日締め25日払い、15日締め月末払いなど会社によって採用される物は違います。月末締めであれば、シンプルですが、月の途中に締め日があると少しややこしくなります。
この判別用のフィールドは「支払月」という名称にしておきます。給与を支払う月という意味です。これを「タイムカード」のテーブルに追加します。
月末締め15日払い
この場合は、シンプルで「2017年3月15日」のタイムカードのデータは「4月」というデータを「支払月」に入力させたいわけです。ただ「4月」だけだとどの年かわからなくなるので「201704」にしましょう。計算値自動入力オプションで下記のように設定しましょう。
Let ( [ #date = Date ( Month ( 日付 ) + 1 ; 1 ; Year ( 日付 ) )]; Year ( #date ) & Right ( 0 & Month ( #date ) ; 2 ))
計算式の内容としては、翌月を求めて、そこから日付フィールドが「2017/03/15」の場合「201704」が返るように日付関数「Year」を使って年を日付関数「Month」を使って月を取り出します。日付関数「Date」を使っているのは、翌月を計算するためです。月に「+1」しただけではダメで、12月の場合は13になってしまいます。Date関数を使用すれば、勝手に翌年の1月になります。
また、テキスト関数「Right」を使っているのは、1月~9月は1ケタの数字が返り、昇順で並び替えをしたときに2月より11月が上に来てしまうので、それを避けるために、1ケタの場合に0が付くようになります。
10日締め25日払い
この場合は例えば「2017年3月11日~4月10日までのタイムカードを4月分として」計算します。
Let ( [ #date = Case ( Day ( 日付 ) > 10 ; Date ( Month ( 日付 ) + 1 ; 1 ; Year ( 日付 ) ) ; 日付 )
];
Year ( #date ) & Right ( 0 & Month ( #date ) ; 2 )
)
11日以降は翌月になるので、「+1」、10日以前はその月になるので、「+1」をしません。また、計算式が少し複雑(長く)になる場合は、このように適度に改行しておきましょう。見やすくなります。
15日締め月末払いの場合も基本はこれと同じで、16日以降は「+1」、それより前は「+1」をしないようにすればいいでしょう。
テーブルはこのようになっています。
10日締めの例。
次回は、集計用のテーブルの作成です。