初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2023-02-12 18:22:47

red
Guest

深夜勤務の勤怠管理

FM18、Win10       
       
Claris様から提供していただいている下記のDBを、弊社用に加工して勤怠管理をしようと考えております。       
https://content.claris.com/jpapps/0021
       
弊社では深夜勤勤の社員がおりまして、17時から翌日2時(3時までには退社)までの勤務になります。       
この場合、日付が変わってしまうので、「退社時刻」の打刻が上手くいきません。       
(翌日になると「出社時刻」打刻ボタンに切り替わります。)       
①②について、どのように修正したらよいか、ご教授いただけますと幸いです。       
       
①「出社時刻」と「退社時刻」以外に「退社時刻」(深夜)打刻ボタンを作成して次のスクリプトを割り当てる方法を考えたのですが、       
「出社時刻」のレコードとは別のレコードとして「退社時刻」(深夜)のレコードが作成されてしまいます。
(日付が変わっても、出社時刻と同じ日付で、同じレコードの中で退社時刻のレコードを作成したいです。)       
    日付     出社時刻    退社時刻       
    1/1      16:50             ←このレコードの退社時刻フィールドに2:10と入れたい。        
    1/1              2:10            
       
   スクリプト       
    If[$区分]=”退社”   
      フィールド設定[退社時刻フィールド;$time]   
      フィールド設定[ステータスフィールド;4]   
      フィールド設定[日付フィールド;Get(日付)-1]   
    End If   
       
②”次の場合にオブジェクトを隠す”設定に、次の計算式を記載したのですが、(深夜勤務のため)退社していない社員について、翌日になると「出社時刻」ボタンが出現してしまいます。       
「退社時刻」ボタン       
    IsEmpty (主キーフィールド ) or    
    Get ( 時刻 )  ≦ GetAsTime ( "3:00:00" ) or    
    ステータスフィールド ≥ 4   
「退社時刻」(深夜)ボタン       
    Get ( 時刻 )  > GetAsTime ( "3:00:00" ) or    
    ステータスフィールド ≥ 4   

お忙しいところ恐縮ですが、お詳しい方、教えていただけますとありがたいです。

#2 2023-02-13 09:01:12

red
Guest

Re: 深夜勤務の勤怠管理

②について
  色々と方法はあるかと思いますが、
  1つの方法として、”前日”のステータスが”4”になった場合に、オブジェクトを隠す計算式を教えて下さいますとありがたいです。

#3 2023-02-13 11:07:52

himadanee
Guest

Re: 深夜勤務の勤怠管理

前日の退社記録がなければ退社ボタンも表示、とかではだめなんですかね。
何時までなら、という条件も必要かと思ったけど、早退する場合は9時に出社で10時に退社とかもありえるから、変に制限しないほうがいいのかな...

#4 2023-02-13 13:26:36

red
Guest

Re: 深夜勤務の勤怠管理

himadanee様

ありがとうございます。

himadanee wrote:

前日の退社記録がなければ退社ボタンも表示、とかではだめなんですかね。

前日の退社記録がなければ退社ボタンも表示 を表現しようと思いましたが、良く分からず
下記をオブジェクトを隠す場所に記載しましたが、上手くいきません。どのように修正したらよいのでしょうか?
(「前日の退社記録」の表現方法が分かりません。)
IsEmpty (勤怠データ::主キー) and 勤怠データ::日付 = Get(日付)-1

#5 2023-02-13 15:37:25

チポ
Member

Re: 深夜勤務の勤怠管理

ボタンはどこに表示するのですか?


スレを変えて、
新たにするのなら、前のスレを閉じるべきかと。。

Offline

#6 2023-02-13 16:17:21

Shin
Member

Re: 深夜勤務の勤怠管理

すべての内部処理を、3時間ずらしておくといいのでしょうね。
表示は、その内部時刻に3時間足して、元に戻します。

そのような特殊な処理を行いたいのでしたら、既存のソリューションを改造するより、1から自分で作った方が早いですよ。

Offline

#7 2023-02-13 16:19:51

red
Guest

Re: 深夜勤務の勤怠管理

チポ様

ありがとうございます。不手際、すみませんでした。

ボタンは、できれば「出社時刻」ボタンや「退社時刻」ボタンと同じ場所に重ねて「退社時刻」という名称で(表面上は、当日内退社と翌日退社とは区別がないようにしたいです。)作成したいです。
難しいのならば、少し下の別の場所に表示でも良いかと思っています。ただ、ボタンをクリックしたときに、クリック済みであることが分かるように、クリックしたら他の表示に変わるようにしたいです。

#8 2023-02-13 16:26:17

チポ
Member

Re: 深夜勤務の勤怠管理

どこかというのは、

各人のレコード上?
レコードに無関係なヘッダとかフッタとか、他のテーブルとか?

とお尋ねしました。

Offline

#9 2023-02-13 16:31:11

red
Guest

Re: 深夜勤務の勤怠管理

Shin様

ありがとうございます。

とても素晴らしい方法であるとは思ったのですが、「内部処理」という意味が理解不足で分かりません。
フィールドを計算にして3時間マイナスすると表示上も3時間マイナスになってしまうと思いますし・・・
もう少し簡易な表現で教えて下さいますとありがたいです。

#10 2023-02-13 17:51:11

Shin
Member

Re: 深夜勤務の勤怠管理

打刻は、すべてボタンで行うことを前程とします。
そこから取得する日付時刻のかわりに、タイムスタンプを使います。保存するタイムスタンプは、Get ( タイムスタンプ ) - 108000 としておきます。時間などの計算は、このタイムスタンプを使って計算させます。
その上で、現在のテーブルにある日付時刻はレイアウト上の表示専用として、GetAsDate() と、GetAsTime() で計算させるのですが、日付はタイムスタンプからそのまま計算し、時刻は、タイムスタンプから取得した時刻に 10800 を加えます。(表示が、25時、26時になるはずですので、これがダメなら86400で割った剰余 Mod() を使ってください)
表示系と計算系が入りますので、よく構造を吟味して改造してください。

Offline

#11 2023-02-13 19:08:05

red
Guest

Re: 深夜勤務の勤怠管理

チポ様

チポ wrote:

どこかというのは、

各人のレコード上?
レコードに無関係なヘッダとかフッタとか、他のテーブルとか?

とお尋ねしました。

私の理解不足で良く分からないのですが、「レコードに無関係なヘッダとかフッタ」ではないので、「各人のレコード上」になるのかと思います。


Shin様
丁寧に教えていただきまして、ありがとうございます。
挑戦してみます。

#12 2023-02-13 20:50:58

red
Guest

Re: 深夜勤務の勤怠管理

Shin様

Shin wrote:

打刻は、すべてボタンで行うことを前程とします。
そこから取得する日付時刻のかわりに、タイムスタンプを使います。保存するタイムスタンプは、Get ( タイムスタンプ ) - 108000 としておきます。時間などの計算は、このタイムスタンプを使って計算させます。
その上で、現在のテーブルにある日付時刻はレイアウト上の表示専用として、GetAsDate() と、GetAsTime() で計算させるのですが、日付はタイムスタンプからそのまま計算し、時刻は、タイムスタンプから取得した時刻に 10800 を加えます。(表示が、25時、26時になるはずですので、これがダメなら86400で割った剰余 Mod() を使ってください)
表示系と計算系が入りますので、よく構造を吟味して改造してください。

教えていただいたとおりに作成し直そうとしたのですが、具体的に分からない部分がありましたので、ご教授お願いします。

1.保存するタイムスタンプ→ 次のようにスクリプトの変数を修正したら良いのでしょうか?
                 変数を設定[$time;値:Get(タイムスタンプ)-10800]・・・・・

2.時刻は、タイムスタンプから取得した時刻に10800を加えます→ 次のようにスクリプトの変数を修正したら良いのでしょうか?
                                  If[$区分=”出社”]
                                   フィールド設定[勤怠データ::出社時刻;$time+10800]・・・・・

3.日付についての修正箇所は、スクリプトの”日付”部分でしょうか? このようしてもしても上手く動作しませんでした。
4.GetAsDate() と、GetAsTime()をどこに使用したらよいのかが分からないので、教えていただけないでしょうか?

初歩的で恐縮ですが、よろしくお願いいたします。

#13 2023-02-13 21:06:41

Shin
Member

Re: 深夜勤務の勤怠管理

元のファイルを見ていないのですが、そこだけ変更しても多分ダメですよ。
全体を見て、設計の根本から変更する必要があると思います。

Offline

#14 2023-02-14 11:19:10

チポ
Member

Re: 深夜勤務の勤怠管理

私も元のファイルを見ていませんが、、

打刻が共通のPCで行われるのでしたら、自分のレコード表示、
個々のPCでなら、「打刻」だけで済むのでは。

もちろんイレギュラー対策は必要でしょうが、、

Offline

#15 2023-02-14 11:36:22

himadanee
Guest

Re: 深夜勤務の勤怠管理

元のファイルを見てみましたが、普通に開くと誰の打刻でもできる状態なので、ちょっと中途半端な感じがしました。少人数で、物理的なタイムカードの代りにPCを1台置いておくような想定なんでしょうか...
「休憩時間をスキップ」を一度押してしまうと、もう元に戻れないようですし...
説明書がないので、他人の作ったものを改造するよりは、自分で一から作った方が速いと思います。
個人的には、同じ時間でも出社の人も退社の人もいるのであれば、ボタンを一々隠す必要はないと思いました。
あとは誤打刻とか打刻漏れの処理をどうするかとか...(出社時に押し忘れると、退社時に出社を押さないと退社が押せない?)
まずは全体の動作の流れを考えてからですよね...

#16 2023-02-14 15:56:09

Shin
Member

Re: 深夜勤務の勤怠管理

元のファイルみてみましたが、骨格だけの、とりあえず入力ができますよ、というプレゼン用のサンプルの感じですね。
運用するためには、このファイルに色をつけていってもいいでしょうし、新たに作ってもいいでしょうが、そこからが本来の開発工程です。
勤怠管理は、簡単なようで、ものすごく面倒な例外処理が日常的に発生するので、とても面倒なものです。(だから商売になるのですが)
まずは、基本の流れを考えて作り込むところからでしょう。頑張って作ってください。

Offline

#17 2023-02-14 19:18:11

red
Guest

Re: 深夜勤務の勤怠管理

himadanee様、チポ様、Shin様

色々と教えていただきまして、ありがとうございます。
自分で考えていた以上に様々な方法があるのだなぁと思いました。
いただいたヒントを参考にして、自分の欲しい形に近づくように作成していきたいと思います。
本当にありがとうございました。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 601.44 KiB (Peak: 618.34 KiB) ]