みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
勤怠管理用のファイルを作ろうとしています。
非常に素朴な疑問なのですが、
出勤時間と退勤時間をひとつのレコードにまとめるというのはどういう方法があるのでしょうか。
出勤時間と退勤時間を入力するということは、1日のうちに、別な時間(言い換えると2回に分けて)入力したレコードを一つにまとめる(ある特定の日の出勤退勤時間として)ということ、だと思うのですが…。
リレーションでどうにかなるのかな?
と思い、下記の方法で一度簡単に作ってみたのですが、うまく動かず、エラーになってしまいました。
テーブル
打刻
出勤時間
退勤時間
社員マスタ
従業員IDを入力してから打刻ボタンを押して、時刻が挿入されるようにしました。
従業員IDを入力したら、氏名が反映されて、その後で出勤ボタンを押す。
という形です。
リレーションを組んで、入力するときのレイアウトには、
出勤時間テーブルの出勤時刻フィールド
退勤時間テーブルの退勤時刻フィールド
が表示されるようにして、記録もそこで持つようにし、
同時にリレーションによって、打刻テーブルに全ての情報が揃って一覧で見られるようにレコードが作成されるようにしたかったです。
何が違っているのかがわからず、一度このやり方は捨てて、
どういった方法がスタンダードなのか伺いたいとおもいました。
知恵を貸していただけましたら大変ありがたいです。
仕様は下記です
・従業員コードを入力して打刻
・時刻を入力しなくても操作時の時刻を取得して打刻できる
・出勤区分と休憩の有無も同時に選択できる。
・勤務時間、休日勤務時間、残業時間、深夜勤務時間、欠勤時間は自動計算する
・各従業員は自身の過去60日分の出退勤時間、休憩の有無を閲覧できる。
打刻テーブルのフィールド
従業員ID
従業員名
年月日
出勤時間
退勤時間
区分>>>>通常・遅刻早退・休日出勤・出張・時差出勤(区分テーブルを作成)
休憩有無
勤務時間
休日勤務時間
残業時間
深夜勤務時間
欠勤時間
Last edited by uniod9 (2017-11-07 15:21:33)
Offline
スタンダードかは分かりませんが、、
打刻はそれ専用のテーブル一つにして、
その区分フィールドで打刻の区分を特定。
説明に有る「打刻テーブル」
とは従業員と日付でリレーションしてポータル表示すれば、
時刻、区分のフィールドは不要になりますね。
Offline
チポさん
先ほどに引き続きありがとうございます。
アドバイスをもとにまた考え直そうと思っているので、
重ねて質問をさせてください。
>>>打刻はそれ専用のテーブル一つに
その区分フィールドで打刻の区分を特定
ということは。。。
仮にこの画面を打刻記録用テーブルとして、ここに打刻時間と区分が何かの記録をする
打刻記録用テーブルのフィールド
・社員ID
・社員氏名
・年月日
・打刻時間
・区分
・休憩有無
という感じでしょうか?
>>>>>説明に有る「打刻テーブル」
とは従業員と日付でリレーションしてポータル表示すれば、
時刻、区分のフィールドは不要になりますね。
については、最初の投稿に書いた打刻テーブルは管理者目線のものですので、
仮に名前を打刻テーブル(管理者)とします。
また、区分テーブルは、区分を管理するために作ろうと思っています。
打刻テーブル(管理者)のフィールド
・社員ID リレーションする
・社員氏名
・年月日 リレーションする
・出勤時間 ポータルを使って打刻記録用テーブルから表示
・退社時間 ポータルを使って打刻記録用テーブルから表示
・]区分 ポータルを使って打刻記録用テーブルから表示
・休憩有無
・勤務時間 (集計して表示)
・休日勤務時間(集計して表示)
・残業時間 (集計して表示)
・深夜勤務時間(集計して表示)
・欠勤時間 (集計して表示)
このような形でしょうか?
リレーションについても質問させて頂きたいのですが、
リレーションをする場合は主キーとそれに従属するキーを使うと、書籍で読みました。
この場合、社員については社員IDがすでにあるので、それを使いますが、
年月日についてもidを設けた方が良いのでしょうか?
打刻テーブル(管理者)のフィールドに対して、
出社時と退社時の二つの打刻記録用テーブルのレコードがひもづく…という考えで良いでしょうか
細かいところまで聞いてしまい申し訳無いのですが、
わからないことだらけなので、教えて頂けたらありがたいです。
よろしくお願いいたします。
Last edited by uniod9 (2017-11-07 17:52:26)
Offline
「打刻記録用テーブル」
はそれでいいと思います。
しかし、
「休憩有無」
が理解できていません。
> 社員については社員IDがすでにあるので、それを使いますが、
> 年月日についてもidを設けた方が良いのでしょうか
いえ、年月日でいいでしょう。
1勤務が日をまたぐ場合は、48時間制で記録すればいいでしょう。
> 打刻テーブル(管理者)のフィールドに対して、
フィールドではなく、
1レコードに対して
ですね
> 出社時と退社時の二つの打刻記録用テーブルのレコードがひもづく
多分同じことだと思いますが、
打刻記録テーブルの出社・退社二つのレコードとひもづく
です。
Offline
チポさん
諸々、ありがとうございます。
まず打刻記録用テーブルを作ってみます。
休憩有無についてですが、
休憩をとったかとっていないか、という記録を持たせたいとのことです。
あれば、一律で勤務時間から60分を引く計算です。
休憩有無は、打刻用テーブルでデータを持たせるとして、
入力は退勤時にすれば良いか、と考えています。
Offline
打刻用テーブルでは、タイムスタンプで日時を持たせておいたほうが、後々便利でしょう。
休息は、1日分を集計するテーブルで持たせたほうがいいと思います。
Offline
Shinさん
ありがとうございます。
打刻用テーブルでは、タイムスタンプで日時を持たせておいたほうが、後々便利でしょう。
休息は、1日分を集計するテーブルで持たせたほうがいいと思います。
●上記について、タイムスタンプとは、スクリプトのtimestampのことですか?
それともフィールドタイプのことですか?
フィールドタイプをタイムスタンプにするということかな、と理解したのですが、
調べていたらスクリプトにもありましたので、確認させていただきたいと思い…。
●また、1日分を集計するテーブル、ということですが、
上司からもらった仕様にはそのようなことは書かれておらず、
ひと月ぶんまとめて集計ができれば良いとのことでした。
それに関して、
上記のようにひと月ぶんの集計をしたい場合、
それを可能にするには、1日ぶんの勤務時間を集計するためのテーブルが必要、ということでしょうか?
簡単な少し複雑になってくると、
どこを出発点にすれば良いのかが定められず、
しつこく聞いてしまって申し訳ないです。
ご回答いただけましたら大変ありがたいです。
Offline
打刻記録用テーブルはできましたか?
打刻(管理者)テーブルはできましたか?
このテーブルに打刻記録用テーブルのレコードの表示はできましたか?
(テーブルの命名がしっくりこないな!)
まず、これをクリアしてから次に進むべきですよ。
Offline
書き落とした、、
日付と時刻をタイムスタンプにすると、
日をまたいだ勤務の場合のリレーションが面倒になります。
私のお勧めは、退社時刻を48時間制にすることです。
> スクリプトのtimestamp
そのようなステップはないですよ。
Offline
チポさん
ありがとうございます。
打刻記録用テーブルはできましたか?
打刻(管理者)テーブルはできましたか?
このテーブルに打刻記録用テーブルのレコードの表示はできましたか?
(テーブルの命名がしっくりこないな!)
まず、これをクリアしてから次に進むべきですよ。
今日少し作業を進められました。
テーブルの名称ですが、
打刻(管理者)テーブル >>> 打刻管理テーブル
打刻記録用テーブル >>> 打刻テーブル
としてみました…
どうでしょうか
今日は、打刻テーブルのレイアウトで入力ができるようにしました。
新規レコード作成すると年月日と打刻時間が自動入力され、
従業員コードをプルダウンで選択すると対応する社員名が出てくるのでそれで確認、
区分をまたプルダウンで選択し、
休憩有無もプルダウンで選択できるように設定しました。
とりあえず思った通りに動くようにできましたが、
管理者テーブルとの兼ね合いで変更の可能性もありそうですね。
まだ自分にはうまく思い描けませんが…。
先に管理者用のテーブルに取り組む方が良かったのですね…
次の作業はそれにします!
タイムスタンプだとかえって面倒なのですね。
退勤時間だけ、48時間制で入力する、というようなことが可能なのでしょうか。
それは、やはり出勤時間テーブルと退勤時間テーブルを設けてそれぞれで管理するということでしょうか…
色々考えすぎても進まないので、まずは管理者用の打刻管理テーブルに、打刻テーブルのデータが表示できるレイアウトを作ることに専念します。
連日、ありがとうございます。
Offline
時刻は手入力ですか?
ボタンクリックなどで取得するのでしたら、48時間制での入力は不可能で、何らかの修正が必要です。
修正が必要なものならば、タイムスタンプで取得しておいて、直近の出勤時刻との関連をみて出勤との関連付けをしたほうが簡単かも。
ここは、チポさんと考え方が違いますので、細かい構成は異なるでしょう。
Offline
> 区分をまたプルダウンで選択し
直前のレコードが退社なら出社、出社なら退社。
と判断できるなら自動入力できますね。
でなくても、
ラジオボタンの方が良さそうですが。。
> 休憩有無もプルダウンで選択
これもラジオボタン?
> 退勤時間だけ、48時間制で入力する、というようなことが可能なのでしょうか
前の出社レコードが前日なら、
日付を -1
時刻を +24時間
計算入力できますね。
これで、日付の照合ができます。
(24時間以上の勤務がないことが条件です)
Offline
Shinさん
ありがとうございます。
日をまたぐ勤務は、しょっちゅうあるわけではないのですが、発生することがあります。
打刻については、要求されている仕様が、手入力ではなく、ボタン入力です。
ボタンクリックなどで取得するのでしたら、48時間制での入力は不可能で、何らかの修正が必要です。
修正が必要なものならば、タイムスタンプで取得しておいて、直近の出勤時刻との関連をみて出勤との関連付けをしたほうが簡単かも。
とのことですが、直近の出勤時間との関連を見て出勤との関連づける、
というのを目視で行うという意味でしょうか?
ただ、自分はかなりの初心者なので、あまり凝ったことは考えず、まずは記録ができるようにリレーションをしっかり作りたいです。
今もFileMaker触っているのですが、思うようにデータが反映されないです。
リレーションの設定で、
『このリレーションを利用しれレコードを作成する』にチェックをつけているにもかかわらず、
レコードが作成されません。
原因がよくわかりません。
何から見直すべきでしょうか
Offline
チポさん
遅い時間にもかかわらずありがとうございます。
連続24時間以上の勤務は発生しません。
ラジオボタンの方が良いのですね。
変更して試してみます。
> 区分をまたプルダウンで選択し
直前のレコードが退社なら出社、出社なら退社。
と判断できるなら自動入力できますね。
直前のレコードが対応する社員の出勤レコードである保証はないのです。。
そうなると自動化は難しいのでしょうか。
> 退勤時間だけ、48時間制で入力する、というようなことが可能なのでしょうか
前の出社レコードが前日なら、
日付を -1
時刻を +24時間
計算入力できますね。
日付をまたぐ時だけ上記のような処理ができるボタンか何かを設定すれば良いでしょうか。
Offline
直近の出勤時間との関連を見て出勤との関連づける、
というのを目視で行うという意味でしょうか?
入力(打刻)忘れが無ければ、自動設定が可能です。職員IDは = で、タイムスタンプは > で自己リレーションを張り、タイムスタンプで降べきにソートします。最初の出勤の日付が24時間以内なら、それと対応する、と考えて良いでしょう。日付を比較して同じならば日付を抜き出し、日付が異なれば前日として抜き出しておきます。
リレーションの設定で、
『このリレーションを利用しれレコードを作成する』にチェックをつけているにもかかわらず、
レコードが作成されません。原因がよくわかりません。
何から見直すべきでしょうか
チェックとリレーションの方向が逆なのか、または、リレーション条件に < または > , ≠ が入っていませんか。
Offline
> 直前のレコードが対応する社員の出勤レコードである保証はない
言葉足らずでしたか・・
同一従業員の直前のレコード
と言ったつもりでした。
そのレコードを参照する自己リレーション(Shinさんの考えとほぼ同じですが、、)
打刻テーブル 打刻テーブル2
従業員ID = 従業員ID
and
レコード順 > レコード順 (レコード固有のシリアル番号等、作成順が分かるフィールド)
レコード順の降順でソート指定
この参照レコードがないか、退社ならば出社とし、
出社ならば退社
と考えられますね。
> 日付をまたぐ時だけ上記のような処理ができるボタンか何かを設定すれば良いでしょうか
退社のレコードは、
無条件で上記の参照レコードの日付を入力すればいいですね。
その日付が本日でなければ、時刻に24時を加えます。
これらはまったくノータッチで入力できますよ。
ああ、
同一日付で、複数の出社、退社はないですよね?
もしあるようですと考えをちょっと変えないとダメかな。。
Offline
チポさん
shinさん
色々とありがとうございます。
出勤と退勤の時間を入力するテーブルとレイアウトは出来上がったので、
2日ぶんほどレコードを作り、
打刻管理テーブルにレコードが反映されるか試しています。
しかし、反映はされません。
打刻管理(参照テーブルは打刻管理)、という名称のレイアウトを作り、リスト形式でデータが見られるようにしようと思い、
フィールドは並べたのですが、全くデータが反映されません。
テーブルオカレンスを通して、レイアウトにデータが反映される、
という抽象的なことしか本には書いてなくて、
実際にどうすればいいのか書いてなくて全く見当がつきません。
リレーションはつくったはずなのに何故なのか、
全くわからないです。
「このリレーションを利用してレコードを作る」のチェックは打刻管理テーブルの方についています。
「=」以外のリレーションは作っていません。
何がいけないのか見当がつきません。
そもそも、打刻管理というテーブルは必要ないのでしょうか?
リレーションの線がうまく引けず、エラーが出て、オカレンスがどんどん増えていってしまいます。
レイアウトに対応させるべきオカレンスがどれかよくわからなくなってしまいました。
打刻管理、というレイアウトだけ作り、
打刻テーブルのデータをリレーションシップでどうにかして、見せる。
そういうことでしょうか
打刻管理テーブルという一覧のデータを持つテーブルは、
作るとしたら最後に作った方がいいのでしょうか。
センスがなさすぎて何から手をつけていいのかわかりません。
> 直前のレコードが対応する社員の出勤レコードである保証はない
言葉足らずでしたか・・
同一従業員の直前のレコード
と言ったつもりでした。
そのレコードを参照する自己リレーション(Shinさんの考えとほぼ同じですが、、)
打刻テーブル 打刻テーブル2
従業員ID = 従業員ID
and
レコード順 > レコード順 (レコード固有のシリアル番号等、作成順が分かるフィールド)
レコード順の降順でソート指定
この参照レコードがないか、退社ならば出社とし、
出社ならば退社と考えられますね。
上記の、丁寧にありがとうございます。とてもわかりやすいです。
チポさんに頂いた通りに一つテーブルオカレンスを作って見たのです。
3点質問があります。
レコード順(record_idを作ってありましたのでそれでやっています)でのソートはどちらのオカレンスにつければ良いのでしょうか?
両方ですか?
出勤時間を表示するためのTOのほうだけで良いのでしょうか?
(ソートをするのは同一社員の直前レコードを見つけるためですよね…??)
この参照レコードがないか、退社ならば出社とし、
出社ならば退社と考えられますね。
というのは、直前の出社レコードがない、
もしくは、退社であったなら、これから入力しようとしているレコードは退社時間のレコードとして扱う、ということですよね?
この設定をしたことによって、どこにこれが反映されて何が起きるのかが、わかりません。
試せば良いのでしょうが、基準になる動きもよくわからないため、試してもよくわからない、でおわってしまいます。
またそれを、どのようにしてしかるべきテーブルのしかるべきフィールド(フィールド名は退社時間でしょうか)に反映させることができれば良いのか…。
まとまりもなくなってきてしまい申し訳無いです。
すみませんがよろしくお願いいたします。
Offline
ソート指定は
打刻テーブル2
だけです。
> ソートをするのは同一社員の直前レコードを見つけるためですよね
そうです、直前を照合順1番にするためです
> 直前の出社レコードがない、
> もしくは、退社であったなら、これから入力しようとしているレコードは退社時間のレコードとして扱う
直前のレコードがない
その社員最初のレコードということです。
もしくは直前が退社レコードなら、今回のレコードの区分は出社になりますね。
区分の入力値の自動化・計算値の計算式を
Case ( IsEmpty ( 打刻テーブル2::社員ID ) or 打刻テーブル2::区分 = "退社" ; "出社" ; "退社" )
でいいでしょう。
Offline
打刻管理テーブルと打刻テーブルとのリレーション
打刻管理テーブル 打刻テーブル
社員ID = 社員ID
and
日付 = 日付
として、
打刻管理のレイアウトに
このリレーションのポータルを置いて2行に設定、
各フィールドを配置
これで試してみてください。
この日付の照合のために、
退社時刻フィールドの48時間制が便利なんです。
打刻管理テーブルのレコード作成は、
打刻テーブルで出社レコードを作ったときのタイミングで、
自動で作ることができます。
Offline
チポさん
ありがとうございます。
ソート指定は打刻テーブル2だけです。
>対応しました。
ありがとうございます。
区分の入力値の自動化・計算値の計算式を
Case ( IsEmpty ( 打刻テーブル2::社員ID ) or 打刻テーブル2::区分 = "退社" ; "出社" ; "退社" )
でいいでしょう。
上記についてなのですが、区分は、遅刻早退、通常出勤か、などのデータをもたせています。
打刻テーブルに、出勤なのか、退社なのかを示すデータを持つフィールドを作って、対応すれば同じことができますか?
例えば、(種別="退社" ; "出社" ; "退社")です。
Offline
> 区分は、遅刻早退、通常出勤か、などのデータをもたせています
やはりそういうのもあるんですね。
そこいらの運用は私からは何とも言えません。
出社と退社のみのフィールドを別にというのでしたら同じ考えでいいでしょう。
Offline
チポさん
おはようございます
打刻管理テーブルと打刻テーブルとのリレーション
打刻管理テーブル 打刻テーブル
社員ID = 社員ID
and
日付 = 日付
ここまではできました!
打刻管理のレイアウトに
このリレーションのポータルを置いて2行に設定、
各フィールドを配置
ポータルを置かなくてはいけない理由がよくわからず…
まだ、打刻のレイアウトがうまく機能していないせいか、test中に入力した打刻テーブルのデータから反映されてできるはずのレコードもできていません。
表示もされません。
状況は下記です…。
・打刻管理のレイアウトが表示するテーブルには打刻管理テーブルを設定しました
・ポータルを置き、ポータル設定の最初の行は一のまま、行を2に設定しました。
・関連レコードを表示には打刻テーブルを設定してあります。
・ポータルの中には、housekeepingのために使うフィールド以外のフィールド全部を置きました。
>>社員ID・日付・打刻種別(出社か退社か)・打刻時間・休憩有無・区分(遅刻早退など)
済みません、
アドバイスいただけますでしょうか。
区分の入力値の自動化・計算値の計算式を
Case ( IsEmpty ( 打刻テーブル2::社員ID ) or 打刻テーブル2::打刻種別 = "退社" ; "出社" ; "退社" )
上記の計算式を打刻テーブルの、打刻時間(フィールドタイプは時刻)に設定しました。
試しに打刻をしてみたのですが、一番最初のレコードを作るときには確かに打刻種別に「出社」と自動入力されていました。
しかし動きがおかしいです。
レコードが一切ない状態で、新規レコードを追加をクリックした直後は「出社」と表示されています。
しかし社員IDを入力すると、退社に切り替わってしまうのです。
どうしようと思い、こんな式も試してみましたが今度は自動入力がされず…w改悪でした。
Case ( 打刻_2::打刻種別 = “退社” ; “出社” ; 打刻_2::打刻種別 = “出社” ; “退社” )
何が原因か思い当たることはありますでしょうか?
それから、リレーションでソートはしてあるものの、なぜ、この設定で、直前の同一社員IDのレコードを参照して、反映させることができるのかが、リファレンスを読んでもよくわからないのです。直前のレコードを参照できている(この言い方にも実感がわきません)というのは、なんの設定によるのでしょうか。式は参照のフィールドを設定しただけのように見えます。レコードまで指定ができているのでしょうか。特定のレコードの、特定のフィールドの値を参照して新規レコードの入力値に反映している仕組み=設定がよくわからないのです。
Last edited by uniod9 (2017-11-10 13:08:05)
Offline
リレーションの確認のためにポータルを置いてみます。
打刻管理テーブルのレコードに
社員IDと日付が入力されていますか?
その社員IDと日付が同じ打刻テーブルのレコードが表示されるはずです。
> 上記の計算式を打刻テーブルの、打刻時間(フィールドタイプは時刻)に設定しました
「出社」「退社」を表示するのですから、
フィールドタイプはテキストですよ。
> レコードが一切ない状態で、新規レコードを追加をクリックした直後は「出社」と表示されています。
> しかし社員IDを入力すると、退社に切り替わってしまうのです
ああ、ごめんなさい
Case ( IsEmpty ( 打刻テーブル2::社員ID ) or 打刻テーブル2::打刻種別 = "退社" ; "出社" ; "退社" )
これ、間違えています
Case ( IsEmpty ( 打刻テーブル2::社員ID ) or 打刻テーブル2::打刻種別 = "退社" ; "出社" ;
打刻テーブル2::打刻種別 = "出社" ; "退社" )
こうしないとダメです。
お詫びして訂正お願いいたします-_-
さらに、社員IDが入力されるまで自動入力されない様に
Case ( IsEmpty ( 社員ID ) ; "" ;
IsEmpty ( 打刻テーブル2::社員ID ) or 打刻テーブル2::打刻種別 = "退社" ; "出社" ;
打刻テーブル2::打刻種別 = "出社" ; "退社" )
こうした方がいいかもですね。
Offline
リレーションの確認のためにポータルを置いてみます。
打刻管理テーブルのレコードに社員IDと日付が入力されていますか?
いえ、入力がされません....
レコードの作成を許可、には管理テーブルの方にチェックがついています。
> 上記の計算式を打刻テーブルの、打刻時間(フィールドタイプは時刻)に設定しました
「出社」「退社」を表示するのですから、
フィールドタイプはテキストですよ。
済みません、打刻種別と間違えました。今後種別とすることにします。
> レコードが一切ない状態で、新規レコードを追加をクリックした直後は「出社」と表示されています。
> しかし社員IDを入力すると、退社に切り替わってしまうのです
ああ、ごめんなさい
Case ( IsEmpty ( 打刻テーブル2::社員ID ) or 打刻テーブル2::打刻種別 = "退社" ; "出社" ; "退社" )
これ、間違えています
Case ( IsEmpty ( 打刻テーブル2::社員ID ) or 打刻テーブル2::打刻種別 = "退社" ; "出社" ;
打刻テーブル2::打刻種別 = "出社" ; "退社" )
こうしないとダメです。
お詫びして訂正お願いいたします-_-
さらに、社員IDが入力されるまで自動入力されない様に
Case ( IsEmpty ( 社員ID ) ; "" ;
IsEmpty ( 打刻テーブル2::社員ID ) or 打刻テーブル2::打刻種別 = "退社" ; "出社" ;
打刻テーブル2::打刻種別 = "出社" ; "退社" )
こうした方がいいかもですね。
上記、ありがとうございます、
しかし、やはり、社員IDと社員名が入力された途端に、勝手に切り替わって全部退社になってしまいます。
なぜ切り替わってしまうのか、全くわかりません…。
社員IDをプルダウンから選んで入力すると、確認のために社員名が自動入力されるように別なオカレンスでリレーションを組んであります。
これが原因でしょうか???
別なリレーションにしてあるのですが…
色々いじっていてどんどん壊れていきます。。。。。
Offline
チポさん
どうしてもうまくいかないので、
出社と退社の区別を持たせるためのフィールド:種別フィールドへの入力は、
出社ボタン>スクリブトで打刻フィールドに時刻を、種別フィールドに「出社」と
退社ボタン>スクリプトで打刻フィールドに時刻を、種別フィールドに「退社」と入力することにしました。
計算式色々教えていただいたのに、済みません。
Last edited by uniod9 (2017-11-10 16:05:09)
Offline
[ Generated in 0.010 seconds, 9 queries executed - Memory usage: 683.52 KiB (Peak: 732.06 KiB) ]