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

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

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

You are not logged in.

Announcement

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


#1 2014-04-07 19:00:29

eddie
Member

勤怠管理での出退勤時刻の上書き禁止方法

お世話になっております。FMPa12 Mac使用です。
アルバイトの勤怠管理を作成しています。

「出勤時刻」と「退勤時刻」というフィールドがあり、それぞれ「出勤」「退勤」というボタンを押すとスクリプトでタイムスタンプが挿入される仕組みになっています。スクリプトは、  フィールド設定[勤怠管理::出勤時刻; Get(タイムスタンプ)]  という非常に簡単なものです。

ここで、「出勤時刻」及び「退勤時刻」いずれも、
(1) アルバイトによるフィールド値の修正を禁止したい(初回のボタン押下による入力のみ許可)
(2) アルバイトによる2回目以降のボタン操作による値の更新を禁止したい(2回目以降はボタンを押してもタイムスタンプが上書きされないようにしたい)
のですが、可能でしょうか?それとも時刻についてはタイムカードで管理を基本とすべきでしょうか?

アドバイスいただけると幸いです。よろしくお願い致します。

Offline

#2 2014-04-07 19:22:00

Traveller
Guest

Re: 勤怠管理での出退勤時刻の上書き禁止方法

挿入の意味がわからないけど
If IsEmpty(出勤時刻)
をフィールド設定の前に付ける。

#3 2014-04-07 21:22:19

Moz
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

Traveller さんの書かれている方法で初回のみの記録になりますね。

タイムスタンプのフィールドをレイアウト上に配置している場合、
インスペクタのデータタブでフィールド入力のチェックを外すとカーソルが入るのを防げます。
もしタイムスタンプでの検索を行う場合は「検索」のチェックは残します。

レイアウトや定義をいじられると台無しなのでアルバイトさんは「データ入力のみ」のアカウントでログインするように設定します。

上のレイアウトの設定でカーソル入らないので不要かも知れませんが、
フィールドオプションで「データ入力時の値変更の禁止」もチェックしておくとよいかと。

Offline

#4 2014-04-09 18:14:05

eddie
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

Travellerさま、Mozさま、
ありがとうございます。お二人のアドバイスどおりで無事に完成し運用開始できました。誠にありがとうございました。

Offline

#5 2014-11-08 08:31:49

NK
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

こちらの投稿を参考にさせていただいています。

タイムカードではなく、いろいろな記録をiPadで取るときに、
[Now]というボタンを押すと現在時刻が横にある時刻のフィールドに自動入力されるようにしています。

複数のレイアウトで様々なフィールドに対して同じ動作をさせたいので、
ボタンで呼び出す打刻スクリプトに、引数でフィールドを渡して、
If[IsEmpty(Get(スクリプト引数))]
「フィールド設定」で、Get(時刻)を指定したいのですが、
フィールド設定は引数で指定できないので、
「フィールドを名前で設定」にしたのですが、
エラー102(フィールドが見つからない)でうまく行きません。

フィールド設定は直接する以外ないのでしょうか。

Offline

#6 2014-11-08 08:37:25

Shin
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

「フィールドを名前で設定」のフィールド名は、テーブル名を含めたフィールド名が必要ですが、そうなっていますか

If[ IsEmpty ( Get ( スクリプト引数 ) ) ]
も何か変。
If[ IsEmpty ( GetField ( Get ( スクリプト引数 ) ) ) ]
If[ IsEmpty ( Evaluate ( Get ( スクリプト引数 ) ) ) ]
何かにしないと行けないと思いますが。

Offline

#7 2014-11-08 11:12:30

NK
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

Shin wrote:

If[ IsEmpty ( Get ( スクリプト引数 ) ) ]
も何か変。
If[ IsEmpty ( GetField ( Get ( スクリプト引数 ) ) ) ]
If[ IsEmpty ( Evaluate ( Get ( スクリプト引数 ) ) ) ]
何かにしないと行けないと思いますが。

ここは、デバッガを見ても問題なく判定して動いていたのですが・・・

Shin wrote:

「フィールドを名前で設定」のフィールド名は、テーブル名を含めたフィールド名が必要ですが、そうなっていますか

フィールドを名前で設定
Get ( レイアウトテーブル名 ) & "::" &  Evaluate(Get ( スクリプト引数 ))
で、エラー102(フィールドが見つかりません)
となっています。
フィールドを設定で、直接フィールドを指定したら意図通りになります。

※Evaluateは、Shinさんのコメントを見て書き換えてみましたが、うまく行っていません。

Offline

#8 2014-11-08 11:45:31

旅人
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

複数の時刻のフィールドがあるという意味でしたら、全部にEnterトリガを設定して
「現在の時刻を挿入」ではだめなのですか。

Offline

#9 2014-11-08 12:24:03

NK
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

旅人 wrote:

複数の時刻のフィールドがあるという意味でしたら、全部にEnterトリガを設定して
「現在の時刻を挿入」ではだめなのですか。

旅人さん、ありがとうございます。

最初はそのようにしたのですが、
当初打刻した後で、誤ってボタンを押してデータがかきかわらないように、
IsEmptyで、空白のときに限ってボタンを有効にしました。

その際に、ボタン(フィールド)の数だけ似たようなスクリプトを作りたくないので、
引数だけで同じスクリプトを使い回せないかな?というところです。

フィールド自体にトリガを設定し、
フィールドが空白のときには[Now]を表示、入力されたらオブジェクトを隠すというのも考えたのですが、
現在時刻以外を入れることも有るので、やはり、ボタンを別にしようと思っています。

Offline

#10 2014-11-08 13:20:53

旅人
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

各ボタンにオブジェクト名として時刻を挿入したいフィールド名を付ける
といいはずですが、名前付けが面倒。

Offline

#11 2014-11-08 15:38:10

NK
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

旅人 wrote:

各ボタンにオブジェクト名として時刻を挿入したいフィールド名を付ける
といいはずですが、名前付けが面倒。

テーブル名::フィールド名
という名前をオブジェクト名としてつけるということですか?

ボタンのスクリプト引数にフィールド名を入れようと思っていたので、
スクリプトの使い回しができるなら、
ボタンに名前を付けるのはやれるかな、と思います。

フィールド設定はどのようにしたらいいのでしょう?

Offline

#12 2014-11-08 16:26:29

旅人
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

名前を付けるのはオブジェクトに移動の場合でした。

例えばAという名前のフィールドに時刻を挿入したい場合は
その横のボタンのスクリプトパラメータは"A"にして
スクリプトは
フィールドを名前で設定 [Get (レイアウトテーブル名)& "::" & Get (スクリプト引数) ; Get(時刻)]
とかになりそう。

ボタン設定だと、パラメータ設定とスクリプト指定も個々のボタンごとに行う必要が
あって面倒ですけど、Enterトリガならまとめて設定できます。(同じレイアウトなら?)

>現在時刻以外を入れることも有るので
これはスクリプト内にカスタムダイアログを出さない限りは別スクリプトを作らないと
いけないので同じですよね。
ボタン設定するメリットが思い付かないです。

Offline

#13 2014-11-08 19:13:10

NK
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

旅人 wrote:

例えばAという名前のフィールドに時刻を挿入したい場合は
その横のボタンのスクリプトパラメータは"A"にして
スクリプトは
フィールドを名前で設定 [Get (レイアウトテーブル名)& "::" & Get (スクリプト引数) ; Get(時刻)]
とかになりそう。

ボタン設定だと、パラメータ設定とスクリプト指定も個々のボタンごとに行う必要が
あって面倒ですけど、Enterトリガならまとめて設定できます。(同じレイアウトなら?)

フィールドを名前で設定
Get ( レイアウトテーブル名 ) & "::" &  Evaluate(Get ( スクリプト引数 ))
で、エラー102(フィールドが見つかりません)
となっています。
フィールドを設定で、直接フィールドを指定したら意図通りになります。

フィールドを名前で設定でうまく行かないポイントはどこにあるのでしょうか?

Offline

#14 2014-11-09 08:58:15

魔笛
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

フィールドを名前で設定
Get(アクティブフィールドテーブル名) & "::" & Evaluate(Get(スクリプト引数 ))で試してみてください。
Get ( レイアウトテーブル名 ) ではうまく行かなかった記憶が。


より明確にテーブルを指定する必要がある?のかも。

Offline

#15 2014-11-09 09:58:42

NK
Member

Re: 勤怠管理での出退勤時刻の上書き禁止方法

魔笛さん、ありがとうございます。

GetFieldName(Evaluate(Get ( スクリプト引数 )))& "::" & Evaluate(Get(スクリプト引数 ))

Get(アクティブフィールドテーブル名) でもうまく行かなかったのですが、
上記にしたらうまく行きました。

なぜ違いが出るのか・・・よくわからないので、すっきりしませんが、
とりあえず意図通りの動きをさせることができました.

Shinさん、旅人さん、ありがとうございました。

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 552.28 KiB (Peak: 572.82 KiB) ]