みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お世話になっております。FMPa12 Mac使用です。
アルバイトの勤怠管理を作成しています。
「出勤時刻」と「退勤時刻」というフィールドがあり、それぞれ「出勤」「退勤」というボタンを押すとスクリプトでタイムスタンプが挿入される仕組みになっています。スクリプトは、 フィールド設定[勤怠管理::出勤時刻; Get(タイムスタンプ)] という非常に簡単なものです。
ここで、「出勤時刻」及び「退勤時刻」いずれも、
(1) アルバイトによるフィールド値の修正を禁止したい(初回のボタン押下による入力のみ許可)
(2) アルバイトによる2回目以降のボタン操作による値の更新を禁止したい(2回目以降はボタンを押してもタイムスタンプが上書きされないようにしたい)
のですが、可能でしょうか?それとも時刻についてはタイムカードで管理を基本とすべきでしょうか?
アドバイスいただけると幸いです。よろしくお願い致します。
Offline
挿入の意味がわからないけど
If IsEmpty(出勤時刻)
をフィールド設定の前に付ける。
Traveller さんの書かれている方法で初回のみの記録になりますね。
タイムスタンプのフィールドをレイアウト上に配置している場合、
インスペクタのデータタブでフィールド入力のチェックを外すとカーソルが入るのを防げます。
もしタイムスタンプでの検索を行う場合は「検索」のチェックは残します。
レイアウトや定義をいじられると台無しなのでアルバイトさんは「データ入力のみ」のアカウントでログインするように設定します。
上のレイアウトの設定でカーソル入らないので不要かも知れませんが、
フィールドオプションで「データ入力時の値変更の禁止」もチェックしておくとよいかと。
Offline
Travellerさま、Mozさま、
ありがとうございます。お二人のアドバイスどおりで無事に完成し運用開始できました。誠にありがとうございました。
Offline
こちらの投稿を参考にさせていただいています。
タイムカードではなく、いろいろな記録をiPadで取るときに、
[Now]というボタンを押すと現在時刻が横にある時刻のフィールドに自動入力されるようにしています。
複数のレイアウトで様々なフィールドに対して同じ動作をさせたいので、
ボタンで呼び出す打刻スクリプトに、引数でフィールドを渡して、
If[IsEmpty(Get(スクリプト引数))]
「フィールド設定」で、Get(時刻)を指定したいのですが、
フィールド設定は引数で指定できないので、
「フィールドを名前で設定」にしたのですが、
エラー102(フィールドが見つからない)でうまく行きません。
フィールド設定は直接する以外ないのでしょうか。
Offline
「フィールドを名前で設定」のフィールド名は、テーブル名を含めたフィールド名が必要ですが、そうなっていますか
If[ IsEmpty ( Get ( スクリプト引数 ) ) ]
も何か変。
If[ IsEmpty ( GetField ( Get ( スクリプト引数 ) ) ) ]
If[ IsEmpty ( Evaluate ( Get ( スクリプト引数 ) ) ) ]
何かにしないと行けないと思いますが。
Offline
If[ IsEmpty ( Get ( スクリプト引数 ) ) ]
も何か変。
If[ IsEmpty ( GetField ( Get ( スクリプト引数 ) ) ) ]
If[ IsEmpty ( Evaluate ( Get ( スクリプト引数 ) ) ) ]
何かにしないと行けないと思いますが。
ここは、デバッガを見ても問題なく判定して動いていたのですが・・・
「フィールドを名前で設定」のフィールド名は、テーブル名を含めたフィールド名が必要ですが、そうなっていますか
フィールドを名前で設定
Get ( レイアウトテーブル名 ) & "::" & Evaluate(Get ( スクリプト引数 ))
で、エラー102(フィールドが見つかりません)
となっています。
フィールドを設定で、直接フィールドを指定したら意図通りになります。
※Evaluateは、Shinさんのコメントを見て書き換えてみましたが、うまく行っていません。
Offline
複数の時刻のフィールドがあるという意味でしたら、全部にEnterトリガを設定して
「現在の時刻を挿入」ではだめなのですか。
Offline
複数の時刻のフィールドがあるという意味でしたら、全部にEnterトリガを設定して
「現在の時刻を挿入」ではだめなのですか。
旅人さん、ありがとうございます。
最初はそのようにしたのですが、
当初打刻した後で、誤ってボタンを押してデータがかきかわらないように、
IsEmptyで、空白のときに限ってボタンを有効にしました。
その際に、ボタン(フィールド)の数だけ似たようなスクリプトを作りたくないので、
引数だけで同じスクリプトを使い回せないかな?というところです。
フィールド自体にトリガを設定し、
フィールドが空白のときには[Now]を表示、入力されたらオブジェクトを隠すというのも考えたのですが、
現在時刻以外を入れることも有るので、やはり、ボタンを別にしようと思っています。
Offline
各ボタンにオブジェクト名として時刻を挿入したいフィールド名を付ける
といいはずですが、名前付けが面倒。
Offline
各ボタンにオブジェクト名として時刻を挿入したいフィールド名を付ける
といいはずですが、名前付けが面倒。
テーブル名::フィールド名
という名前をオブジェクト名としてつけるということですか?
ボタンのスクリプト引数にフィールド名を入れようと思っていたので、
スクリプトの使い回しができるなら、
ボタンに名前を付けるのはやれるかな、と思います。
フィールド設定はどのようにしたらいいのでしょう?
Offline
名前を付けるのはオブジェクトに移動の場合でした。
例えばAという名前のフィールドに時刻を挿入したい場合は
その横のボタンのスクリプトパラメータは"A"にして
スクリプトは
フィールドを名前で設定 [Get (レイアウトテーブル名)& "::" & Get (スクリプト引数) ; Get(時刻)]
とかになりそう。
ボタン設定だと、パラメータ設定とスクリプト指定も個々のボタンごとに行う必要が
あって面倒ですけど、Enterトリガならまとめて設定できます。(同じレイアウトなら?)
>現在時刻以外を入れることも有るので
これはスクリプト内にカスタムダイアログを出さない限りは別スクリプトを作らないと
いけないので同じですよね。
ボタン設定するメリットが思い付かないです。
Offline
例えばAという名前のフィールドに時刻を挿入したい場合は
その横のボタンのスクリプトパラメータは"A"にして
スクリプトは
フィールドを名前で設定 [Get (レイアウトテーブル名)& "::" & Get (スクリプト引数) ; Get(時刻)]
とかになりそう。ボタン設定だと、パラメータ設定とスクリプト指定も個々のボタンごとに行う必要が
あって面倒ですけど、Enterトリガならまとめて設定できます。(同じレイアウトなら?)
フィールドを名前で設定
Get ( レイアウトテーブル名 ) & "::" & Evaluate(Get ( スクリプト引数 ))
で、エラー102(フィールドが見つかりません)
となっています。
フィールドを設定で、直接フィールドを指定したら意図通りになります。
フィールドを名前で設定でうまく行かないポイントはどこにあるのでしょうか?
Offline
フィールドを名前で設定
Get(アクティブフィールドテーブル名) & "::" & Evaluate(Get(スクリプト引数 ))で試してみてください。
Get ( レイアウトテーブル名 ) ではうまく行かなかった記憶が。
より明確にテーブルを指定する必要がある?のかも。
Offline
魔笛さん、ありがとうございます。
GetFieldName(Evaluate(Get ( スクリプト引数 )))& "::" & Evaluate(Get(スクリプト引数 ))
Get(アクティブフィールドテーブル名) でもうまく行かなかったのですが、
上記にしたらうまく行きました。
なぜ違いが出るのか・・・よくわからないので、すっきりしませんが、
とりあえず意図通りの動きをさせることができました.
Shinさん、旅人さん、ありがとうございました。
Offline
Pages: 1
[ Generated in 0.008 seconds, 7 queries executed - Memory usage: 552.73 KiB (Peak: 573.27 KiB) ]