みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
FM11 WIN7利用です。
コールシステムでファイルメーカーを利用してます。
日時フィールドと時刻フィールドがありまして、
この日時になったら電話するように使ってます。
しかし、電話し忘れる事が多々あります。
忘れないように5分前くらいにポップアップで「○○(電話番号)5分前」と表示できないでしょうか?
電話番号でリレーションしていて、次回コール指定がある場合は「見込テーブル」に移動するようにしています。
少しわかりづらいですが、よろしくお願い致します。
Shinさま、Travellerさま
ありがとうございます。
今回はShinさまのファイルを参考にして無事出来ました!
ありがとうございます。
細かい作業になりましたが、出来ました。
しかし、ズームUPにしたりズームDOWNしたら微妙にずれが生じるのですが、これはなんとかならないでしょうか?
※一つのフィールドに項目が9つあって3×3で表示されてます。(少し増えました)
左3はズームUPDOWNしても問題ないのですが、中3と右3はずれが生じます。
これは仕方ない事なんでしょうか?
FM11 WIN7利用です。
チェックボックスフィールドを作って
値一覧に
A
B
C
D
E
F
と6項目あります。
条件付き書式で、
チェックボックスフィールド="A" の時に
文字色を"赤"にすると
6項目全て赤になってしまいます。
やりたいのは
"A"にチェック入れたら"A"の文字が赤くなる。(それ以外は黒字のまま)
"A"と"B"にチェック入れたら"A"と"B"が赤くなる。(それ以外は黒字のまま)
よろしくお願いします。
フィールドにエラーメッセージを表示するのではなく、ダイヤルログでエラーメッセージを表示する事はできないでしょうか?
<>を=にする
でいけました!
ありがとうございます。
しかし、カスタムダイヤルログですと、標準で"OK"と"キャンセル"ボタンがあるのですが、どちらのボタンでも次へ進んでしまいます。
エラーメッセージみたいにフィールドの復帰的な感じで前に戻ることは出来ないのでしょうか?(値を必ず変更するようにしたいのです)
ちなみにチポ様がいう
計算フィールドでアラート表示
とはどうやるのでしょうか?
If[FilterValues(ValueListItems(Get(ファイル名);"値一覧名"); フィールドA)<>""]
カスタムダイヤルログを表示[error;"値が正しくありません"]
End if
としてみましたが、
値一覧名内の値の場合、ダイヤルログが表示されて、
値一覧名内の値と違う場合、ダイヤルログが表示されないです。
希望と逆になってしまっています。
どこをなおせばいいのでしょうか?
FilterValues ( ValueListItems ( ファイル名 ; 値一覧名 ) ; フィールドA )
ですか?
FM11 Win7利用
フィールドAのオプション,値一覧(入力制限)としています。
インポート時にはどうしても値一覧以外の値が入ってしまいます。
スクリプトA始動時にフィールドAに値一覧以外の値が入っていると、エラーメッセージを表示することはできますか?
(エラーメッセージは「値が正しくありません」)
よろしくお願い致します。
FM11 WIN7 利用です。
タイムスタンプのフィールドから 「日付」「曜日」「時刻」のみを抜粋することは出来ますでしょうか?
Shinさまが作って頂いたスクリプトや計算式を私のテストファイルに当て込んでるんですが、Shinさまの「ログインアウト」スクリプトですと、ログインアウトレイアウト上で計算結果が開始処理と終了処理できちんと分かれているのですが、私のですと開始処理しかでません。。。
id time comment log2::time log::comment
としてるのに
commentとlog::commentとで同じ値しかでません。
リレーションも
id=id
time≦time
としてるんですけど。
どこが間違ってるんでしょうか?
そうですね。
別テーブルに書き出した方が綺麗にできそうなのですが、
その書き出す計算式がわからないんです!
よろしくお願い致します。
Shinさま
サンプルファイルまで作って下さってありがとうございます。
確かにタイムスタンプで充分な気がしてきました。
スクリプト「ログインアウト」はjoy-h909のファイルでどのタイミングで実行されてるのですか?
ファイル内探してもどこで実行されているかわかりません。
あと、ログインアウト(タイムカード)のレイアウトですが、
アカウント、ログイン時のタイムスタンプの最小値、ログアウト時のタイムスタンプの最大値、労働時間(ログアウト時のタイムスタンプの最大値-ログイン時のタイムスタンプの最小値)
を1つのテーブルにまとめたいのですが、可能でしょうか?
よろしくお願い致します。
設定してないです。
日付と時刻は別の方が勝手がいいので、
アカウント、日付、時刻、IPアドレスを自動入力の設定をして
開始時は
------------------------------------------------------------
レイアウト切り替え[「log」(log)]
新規レコード/検索条件
レイアウト切り替え「元のレイアウト」
------------------------------------------------------------
終了時は
------------------------------------------------------------
レイアウト切り替え[「log」(log)]
検索モードに切り替え[]
フィールド設定[log::アカウント;(Get(アカウント名)]
フィールド設定[log::日付;GetAsTime(Get(ホストのタイムスタンプ))]
フィールド設定[log::終了時刻;"="]
フィールド設定[log::システムIPアドレス;Get ( システムIPアドレス )]
検索実行
フィールド設定[log::終了時刻;GetAsTime(Get(ホストのタイムスタンプ))]
レコードの/検索条件確定[]
------------------------------------------------------------
としてみました。
ここから
IDと日付でリレーションを組んで、開始分の最小と終了の最大を取ればいいんだけど、単に時刻の最小、最大でもいいかもしれません。
これしたいんですけど、もう少し詳しく教えて下さい。
すいません、応用がきかないもので。。
ありがとうございます。
Get ( システムIPアドレス )という関数ってのはじめて知りました。
これは便利ですね!
サンプルで作成したのですが、
Get ( スクリプト引数 )のフィールドがlogin、logoutしても空白のままです。
通常はここになにか値が入るのですよね?
IDとは?
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
ファイルを立ち上げた時点と終了させる時点で、全てのタイムスタンプとアカウントを保存していきます。
その中からその日の最初の立ち上げと最後の終了を探せば良いのでは。
とありますが、抜粋するにはどのようにしたらよいのでしょうか?
リレーションは
テーブル::D=テーブル 2::D
のリレーションでテーブル2側をBの降順ソートにする。
Case ( not IsEmpty ( フィールドA ) ; SerialIncrement ( テーブル 2::フィールドB ; 1 ) )
で出来ました!!!
ソートがなかったので出来てなかったみたいです。
最終こちらの計算式の方が編集いらずで断然いいです!
みなさまありがとうございました!
×ではなく=になってます。
苦し紛れ、
Left ( テーブル 2::フィールドB ; 1 ) & SerialIncrement ( "0001" ; Max ( テーブル 2::フィールドB ) )
で逃げられるかな。
ですと、埼玉での初期値"A0001"、東京での初期値を"B0001"としたのですが、
埼玉、東京関係なしに値が 0003、0004、0005...となります。
数字の前のアルファベットが付きません。
Case ( not IsEmpty ( フィールドA ) ;Left ( テーブル 2::フィールドB ; 1 ) & SerialIncrement ( "0001" ; Max ( テーブル 2::フィールドB ) ))
フィールドAに値が入った時にこの計算式を実行させたいので Case ( not IsEmpty ( フィールドA ) 付けたんですけど、いりますよね?
>SerialIncrement ( Max ( テーブル 2::フィールドB ) ; 1 )
ですが、フィールドAに値が入った時に有効にする場合は、
Case ( not IsEmpty ( フィールドA ) ;SerialIncrement ( Max ( テーブル 2::フィールドB ) ; 1 ))
ですよね?
初期値を手入力"A0001"としても次の値は"2"となりますし、東京と埼玉と県域が違っても"3"、"4"...希望の値と違がいます。
もちろんリレーション
フィールドD=フィールドD ですが。
Case ( not IsEmpty ( フィールドA ) ;Left ( テーブル 2::フィールドB ; 1 ) & SerialIncrement ( "0001" ; Max ( テーブル 2::フィールドB ) ))
とすると、初期値を手入力しても、数字の前のアルファベットが付いてこないですし、県域ごとに数字が加算されないです。
引栗さま
ありがとうございます。
リレーションは
フィールドD= フィールドD
にして、計算値自動入力
Case ( not IsEmpty ( フィールドA ) ;
SerialIncrement (
Case(D= "東京" ; "A0001" ; D= "埼玉" ; "B0001" ; "C0001" ) ;
Max(テーブル2::フィールドB)
)
)
で出来たみたいなんですけど。。。
この式ってなにが問題なんでしょうか?
リレーションは
フィールドD= フィールドD で
SerialIncrement ( テーブル2::フィールドB ; Max ( テーブル2::フィールドB ) )
や
Left ( テーブル 2::フィールドB ; 1 ) & SerialIncrement ( "0001" ; Max ( テーブル 2::フィールドB ) )
だとフィールドBに値が反映されないですね。
なぜなんでしょうか??
チポさま
ありがとうございます。
初出の場合のみ手入力すれば
SerialIncrement ( テーブル2::フィールドB ; Max ( テーブル2::フィールドB ) )
の場合リレーションは何で組めばいいのでしょうか?
すいません。ややこしくて。。
フィールドA=リストではないです。
仮にフィールドC=リスト と考えて下さい!
今のところ東京、埼玉しか入りません!
フィールドCには県域しか入りませんが今後増えても2~3県程です。
増えた時はその都度If関数やCase関数で増やそうと思っています。
条件が追加でややこしいですが、よろしくお願い致します。
--------------------------
リレーションは
フィールドA X フィールドA
にして、計算値自動入力
If ( Left ( フィールドC ; 2 ) = "東京" ;
Case ( not IsEmpty ( フィールドA ) ;
SerialIncrement ( "A0001" ; Max(テーブル2::フィールドB))) ;
If ( Left ( フィールドC ; 2 ) = "埼玉" ;
Case ( not IsEmpty ( フィールドA ) ;
SerialIncrement ( "B0001" ; Max(テーブル2::フィールドB))) ;
0 )
)
--------------------------
皆様ありがとうございます!
完全に "X"を見落としていました。
"X"にすることで、A0001、A0002、A0003…とできました!
しかし、もうひとつ条件を増やしたいのですが、またわからなくなりました。
その条件とは
リスト=東京(左から2つの文字が東京の場合)はフィールドB=A0001、A0002、A0003…
リスト=埼玉(左から2つの文字が埼玉の場合)はフィールドB=B0001、B0002、B0003…
のようにリスト名が違う場合にそれぞれにカウントするようにしたいのです!
--------------------------
リレーションは
フィールドA X フィールドA
にして、計算値自動入力
If ( Left ( リスト ; 2 ) = "東京" ;
Case ( not IsEmpty ( フィールドA ) ;
SerialIncrement ( "A0001" ; Max(テーブル2::フィールドB))) ;
If ( Left ( リスト ; 2 ) = "埼玉" ;
Case ( not IsEmpty ( フィールドA ) ;
SerialIncrement ( "B0001" ; Max(テーブル2::フィールドB))) ;
0 )
)
--------------------------
とやってみたのですが、
リスト=東京で「A0001」がある状態で、リスト=埼玉で「B0001」が出てきません!
(B0002となってしまいます。)
これを「B0001」にするにはどうしたらよいでしょうか?
よろしくお願い致します。
[ Generated in 0.006 seconds, 6 queries executed - Memory usage: 659.59 KiB (Peak: 698.01 KiB) ]