<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 MS-Access97大魔法陳列棚>The Kintai



【仕 様 な ど】MS-Access97で作成。Windows95でのみ動作確認。

【ダウンロード】←Zip形式
            (解凍後、mdb初期状態:およそ218KB)

【主 な 機 能】

簡単な勤務管理表の入力データベースです。

【作 り 方 等】

ちょっとしたきっかけでプロトタイプを作ったので、ちょっと修正して載せてみました。


簡単な処理の流れとしては

1.月初めに、その月の勤怠表を社員数分作成する。

2.日々、その勤怠表に勤務時間と残業時間を入力する。

3.月の終わりに集計表を印刷する。

というカンジにしてみました。

こういう処理で頭が痛いのは「出勤しなかった日、レコードは存在しないけど、印刷するときはその行は印刷されて欲しい」ということです。スケジュール管理や生産管理のシステムを作るとき、結構悩まないとならないところですネ。

フツウ、どれだけクエリーを駆使してがんばっても、基のテーブルにないデータは出せません。

しかし、たとえ12月20日に休みを取って出社しなかったとしても、印刷した集計表の、12月19日の次の行が12月21日になってもらっちゃちょっと具合が悪い。優秀で無駄のないデータ管理を誇りとするRDBのちょっとした盲点かもしれないですね。

レポートの中で工夫をして、空回り印刷みたいなのをさせるようにしてもいいのかもしれないですが、これもなかなか難しそう。研究の余地はありそうですけれど・・・。

でー、こんなやり方を考えてみました。

月のはじめに、「今月が何月で、1日から何日まである月か判断して、社員数分の勤怠表テーブルを作成します。Crt_Crdr()という名前の関数をぶん回して、[カレンダー]というテーブルを作り、これと[社員テーブル]を結合線のないクエリーでくっつけて、「社員数×その月の日数」分のレコードを持つテーブルを先に作ってしまいます。

で、下のような勤怠表から、社員名を選択して、その人の勤怠を入力するわけです。

こういう処理にすると、毎月毎月テーブルを空っぽにしますので、社員数が多い場合などはデータベースの最適化などの考慮が必要になります。が、逆に、同じ社員の二重入力など、入力時のイージーミスを防ぐことができる仕組みを作ることができますので、結果的には使う人にやさしいシステムになるのではないかなと思います。


ひとつ心残りなのは、「1日始まり月末〆」であることです。

日付の関数で、「開始日と終了日」みたいなのを指定できるのがあるとありがたいんですけどね。。日本だと、「16日始まりの15日〆」とか「21日始まりの翌月20日〆」とか多いですよね。こういうときいつもDatepart関数を駆使して、自分で日付作ったりしてるんですけど、なんかもっと引数で簡単に指定できる関数がないもんかなぁと思います。

こんな風に・・。

今月16日

Datepart("yyyy",date()) & "/" & Datepart("m",date()) & "/15"

来月15日

Datepart("yyyy",date()) & "/" & Datepart("m",date()+1) & "/16"

これで、書式を「yyyy/mm/dd」にしとけば、大概の場合日付だと思って処理してくれます。

まあ、請求書とかの印刷なら、Inputbox出して「出力範囲を入力してください。例)1998/11/16 1998/12/15」とかいう感じで入力を促すようにすればいいのかもしれないんですけどね。。。

勤怠の開始日は、16日とか21日とか、みなさんいろいろだと思います。このシステムの場合は、Crt_Crdr()というプロシージャの内容を工夫すればそれも可能だと思います。これがたいへんならば、この関数を使わず、月の初めに誰かが[カレンダー]テーブルの中に、16日から翌月15日までの日付を、1件ずつ入力して一ヶ月分のレコードを作っておけばOK。実際にはそれでも十分かな。