みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
https://fm-aid.com/bbs2/viewtopic.php?id=723
以前の質問の続きになるのですが、
開始時と終了時でログを取って、出退勤を作った方がいいかなと思いました。
logというテーブルを作り、
アカウント名、日付、開始時刻、終了時刻と4つのフィールドも作りました。
開始時は
------------------------------------------------------------
レイアウト切り替え[「log」(log)]
新規レコード/検索条件
フィールド設定[log::日付;GetAsDate(Get(ホストのタイムスタンプ))]
フィールド設定[log::開始時刻;GetAsDate(Get(ホストのタイムスタンプ))]
レイアウト切り替え「元のレイアウト」
------------------------------------------------------------
終了時は
------------------------------------------------------------
レイアウト切り替え[「log」(log)]
検索モードに切り替え[]
フィールド設定[log::アカウント;(Get(アカウント名)]
フィールド設定[log::日付;(Get(日付)]
フィールド設定[log::終了時刻;"="]
検索実行
フィールド設定[log::終了時刻;GetAsDate(Get(ホストのタイムスタンプ))]
レコードの/検索条件確定[]
------------------------------------------------------------
としました。
別のタイムカードテーブルで、
Shinさまの回答 #7
ファイルを立ち上げた時点と終了させる時点で、全てのタイムスタンプとアカウントを保存していきます。
その中からその日の最初の立ち上げと最後の終了を探せば良いのでは。
とありますが、抜粋するにはどのようにしたらよいのでしょうか?
Last edited by Gajiro (2014-02-03 01:18:01)
Offline
IDと日付でリレーションを組んで、開始分の最小と終了の最大を取ればいいんだけど、単に時刻の最小、最大でもいいかもしれません。
Offline
IDとは?
Offline
IDは、その人にとってユニークなものの意味です。アカウント名で良いと思います。
私がよく作るログテーブルは、ID、タイムスタンプ、IP、コメントを保存する様にして、そのそれぞれに、
Get ( アカウント名 )、Get ( タイムスタンプ )、Get ( システムIPアドレス )、Get ( スクリプト引数 )
を自動入力の設定にしておきます。スクリプトは、
レイアウトを変更
新規レコードを作成
元のレイアウトへ戻る
だけです。
スクリプトを呼び出す時に、Get ( スクリプト名 ) をスクリプト引数として設定しておけば、どのスクリプトから呼び出したかが分かります。
開始処理、と、終了処理、のスクリプトからこのスクリプトを呼び出します。
後で呼び出すには、アカウント名で抽出するか、ソートすれば、動きが読めます。
この程度で十分では。
Offline
ありがとうございます。
Get ( システムIPアドレス )という関数ってのはじめて知りました。
これは便利ですね!
サンプルで作成したのですが、
Get ( スクリプト引数 )のフィールドがlogin、logoutしても空白のままです。
通常はここになにか値が入るのですよね?
Offline
スクリプトを呼び出す時に、Get ( スクリプト名 ) をスクリプト引数として設定 していますか
Offline
設定してないです。
日付と時刻は別の方が勝手がいいので、
アカウント、日付、時刻、IPアドレスを自動入力の設定をして
開始時は
------------------------------------------------------------
レイアウト切り替え[「log」(log)]
新規レコード/検索条件
レイアウト切り替え「元のレイアウト」
------------------------------------------------------------
終了時は
------------------------------------------------------------
レイアウト切り替え[「log」(log)]
検索モードに切り替え[]
フィールド設定[log::アカウント;(Get(アカウント名)]
フィールド設定[log::日付;GetAsTime(Get(ホストのタイムスタンプ))]
フィールド設定[log::終了時刻;"="]
フィールド設定[log::システムIPアドレス;Get ( システムIPアドレス )]
検索実行
フィールド設定[log::終了時刻;GetAsTime(Get(ホストのタイムスタンプ))]
レコードの/検索条件確定[]
------------------------------------------------------------
としてみました。
ここから
IDと日付でリレーションを組んで、開始分の最小と終了の最大を取ればいいんだけど、単に時刻の最小、最大でもいいかもしれません。
これしたいんですけど、もう少し詳しく教えて下さい。
すいません、応用がきかないもので。。
Offline
そんなにややこしい物作らずに、#4で書いている、自動設定フィールドのテーブルと、3行のスクリプトとがあれば十分でしょう。私の管理運用しているファイルは、すべてこれだけで、今まで困ったことは無いです。
https://dl.dropboxusercontent.com/u/926 … 09.fp7.zip
そのテーブルから、ログインアウトを抽出するスクリプトを作り込んで有ります。
Offline
Shinさま
サンプルファイルまで作って下さってありがとうございます。
確かにタイムスタンプで充分な気がしてきました。
スクリプト「ログインアウト」はjoy-h909のファイルでどのタイミングで実行されてるのですか?
ファイル内探してもどこで実行されているかわかりません。
あと、ログインアウト(タイムカード)のレイアウトですが、
アカウント、ログイン時のタイムスタンプの最小値、ログアウト時のタイムスタンプの最大値、労働時間(ログアウト時のタイムスタンプの最大値-ログイン時のタイムスタンプの最小値)
を1つのテーブルにまとめたいのですが、可能でしょうか?
よろしくお願い致します。
Offline
FM11以前でしたら、ファイルオプションの開始スクリプト、終了スクリプトで、別のスクリプトを起動しています。
FM12以降でしたら、WindowFirstOpen などのトリガーに設定します。
スクリプト「ログインアウト」は、一覧するためのツールですので、任意で開きます。その中に計算フィールドなどを配置すればいいでしょう。
ただ、本格的な出勤管理に使うのでしたら、この中には不要なレコードが大量に入りますので、出勤レコードに退社情報をつけて、別テーブルへ書きだして処理したほうが、綺麗でしょうね。
Last edited by Shin (2014-02-05 09:22:36)
Offline
そうですね。
別テーブルに書き出した方が綺麗にできそうなのですが、
その書き出す計算式がわからないんです!
よろしくお願い致します。
Offline
その要求があるだろうと予想して、上のスクリプトを作り込んでおいたのですが。それ以外のフィールドは、別テーブル側で定義しましょう。
Offline
Shinさまが作って頂いたスクリプトや計算式を私のテストファイルに当て込んでるんですが、Shinさまの「ログインアウト」スクリプトですと、ログインアウトレイアウト上で計算結果が開始処理と終了処理できちんと分かれているのですが、私のですと開始処理しかでません。。。
id time comment log2::time log::comment
としてるのに
commentとlog::commentとで同じ値しかでません。
リレーションも
id=id
time≦time
としてるんですけど。
どこが間違ってるんでしょうか?
Offline
Pages: 1
[ Generated in 0.005 seconds, 7 queries executed - Memory usage: 548.75 KiB (Peak: 569.66 KiB) ]