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

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

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

You are not logged in.

Announcement

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


#1 2016-09-14 13:58:15

aya
Guest

ボタンを押す条件

検索開始ボタンを作っています。
ボタンを押す条件に番号が6桁であることと日付が入力済みであること。
又、未入力時はエラー表示を出すようにしたいのですが、
検索開始ボタンのスクリプトの修正方法をご指導願います。

番号グローバルはテキストでグローバル
日付グローバルは日付でグローバル

検索開始ボタンのスクリプト
検索モードに切り替え
レイアウト切り替え
フィールド設定 計画番号;番号グローバル
エラー処理 オン
検索実行
エラー処理 オフ
レコードのソート
フィールド内容の全置換 開始日;日付グローバル

#2 2016-09-14 15:02:35

チポ
Member

Re: ボタンを押す条件

> 番号が6桁であることと日付が入力済みであること
番号は、
6桁の正の整数のみという条件ですか?

また,
日付の値に条件はないのでしょうか?

Offline

#3 2016-09-14 15:27:28

aya
Guest

Re: ボタンを押す条件

チポ wrote:

> 番号が6桁であることと日付が入力済みであること
番号は、
6桁の正の整数のみという条件ですか?

また,
日付の値に条件はないのでしょうか?

6桁の正の整数のみです。

日付は本日の場合は半角の 2016/09/13 で、特別な条件はありません。

宜しくお願い致します。

#4 2016-09-14 16:16:32

チポ
Member

Re: ボタンを押す条件

その条件の方法は,いろいろ有るでしょうが、
簡単と思われるのは
  100000 <= 番号グローバル
  and
  番号グローバル <=999999
  and
  not Mod ( 番号グローバル ; 1 )
でいいでしょう。


日付の値に条件がないのでしたら
  not IsEmpty ( 日付グローバル )
でいいですね。


この判定をスクリプトの最初にして、
真なら検索モード切り替え以降を実行
偽ならエラー表示


気になったのですが、
> エラー処理 オン
> 検索実行
> エラー処理 オフ
> レコードのソート
> フィールド内容の全置換 開始日;日付グローバル

検索結果、対象レコードがない場合もこのステップを実行しますよね。

レコードがないから特に問題はないでしょうが、
普通、対象レコードの有無を判定して、ない場合はこれをスルーさせますね。

Offline

#5 2016-09-14 16:34:17

aya
Guest

Re: ボタンを押す条件

チポ wrote:

その条件の方法は,いろいろ有るでしょうが、
簡単と思われるのは
  100000 <= 番号グローバル
  and
  番号グローバル <=999999
  and
  not Mod ( 番号グローバル ; 1 )
でいいでしょう。


日付の値に条件がないのでしたら
  not IsEmpty ( 日付グローバル )
でいいですね。


この判定をスクリプトの最初にして、
真なら検索モード切り替え以降を実行
偽ならエラー表示


気になったのですが、
> エラー処理 オン
> 検索実行
> エラー処理 オフ
> レコードのソート
> フィールド内容の全置換 開始日;日付グローバル

検索結果、対象レコードがない場合もこのステップを実行しますよね。

レコードがないから特に問題はないでしょうが、
普通、対象レコードの有無を判定して、ない場合はこれをスルーさせますね。

スルーさせないといけないのは フィールド内容の全置換 開始日;日付グローバル の事ですよね。
たまたまヒットしているので問題とならなかっただけです。
申し訳ありませんが、至急スルーさせるスクリプトを教えて下さい。

#6 2016-09-14 16:53:12

チポ
Member

Re: ボタンを押す条件

検索実行
  If [ Get ( 対象レコード数 ) ]
    ソート
    全置換
  //必要なら
  Else
   対象レコードがない場合の処理
  //ここまで
  End If

エラー処理 オフ
は特に必要ないでしょう。

Offline

#7 2016-09-14 17:09:47

Shin
Member

Re: ボタンを押す条件

番号が数値であるならば、テキストフィールドで扱うのは止めた方が良いでしょう。

どちらも数値フィールドならば、グローバルフィールドから、計画番号へリレーションを張って、関連レコードへ移動、を使って抽出する方法も有りますよ。

Offline

#8 2016-09-15 11:46:46

aya
Guest

Re: ボタンを押す条件

チポ様
有難うございます。

検索開始ボタンのスクリプトを修正し確認しましたので、これで良いかと思いますが。
If[100000<=番号グローバル and 番号グローバル<=999999 and not Mod(番号グローバル;1)and not IsValid(日付グローバル)]
Elsa
  カスタムダイアログを表示
  フィールド設定 番号グローバル ;””
  フィールド設定 日付グローバル ;””
  現在のスクリプト終了
End If
検索モードに切り替え
レイアウト切り替え
フィールド設定 計画番号;番号グローバル
エラー処理 オン
検索実行
If[Get(対象レコード数)]
   フィールド内容の全置換 開始日;日付グローバル
Else
  カスタムダイアログを表示
  レイアウト切り替え
  フィールド設定 番号グローバル;””
  現在のスクリプト終了
End If
レコードのソート

Shin様
こちらのメリットは何なのでしょうか。
どちらも数値フィールドならば、グローバルフィールドから、計画番号へリレーションを張って、関連レコードへ移動、を使って抽出する方法も有りますよ。

#9 2016-09-15 13:14:58

チポ
Member

Re: ボタンを押す条件

> not IsValid(日付グローバル)
これでは日付フィールドが無効な値で 1(真)を返しますよ。

そもそも、
IsValid関数で空白は判定できませんね。


スクリプトは書かれたもので良さそうですが、
最初の
  If

  Else
の間に、
検索モードに切り替え
ステップ以下を全ていれるのが普通でしょうかね。

Offline

#10 2016-09-15 13:59:52

aya
Guest

Re: ボタンを押す条件

チポ wrote:

> not IsValid(日付グローバル)
これでは日付フィールドが無効な値で 1(真)を返しますよ。

そもそも、
IsValid関数で空白は判定できませんね。


スクリプトは書かれたもので良さそうですが、
最初の
  If

  Else
の間に、
検索モードに切り替え
ステップ以下を全ていれるのが普通でしょうかね。


IfとElseの間に移動させました。
申し訳ありませんが、not IsEmpty ( 日付グローバル )はどこにどの様に入れれば良いのでしょうか。

If[100000<=番号グローバル and 番号グローバル<=999999 and not Mod(番号グローバル;1)]
  検索モードに切り替え
  レイアウト切り替え
  フィールド設定 計画番号;番号グローバル
  エラー処理 オン
  検索実行
  If[Get(対象レコード数)]
     フィールド内容の全置換 開始日;日付グローバル
  Else
    カスタムダイアログを表示
    レイアウト切り替え
    フィールド設定 番号グローバル;””
    現在のスクリプト終了
End If
レコードのソート
Elsa
  カスタムダイアログを表示
  フィールド設定 番号グローバル ;””
  フィールド設定 日付グローバル ;””
  現在のスクリプト終了
End If

#11 2016-09-15 15:40:08

チポ
Member

Re: ボタンを押す条件

書かれたステップを丸写して変更しました。

If[100000<=番号グローバル and 番号グローバル<=999999 and not Mod(番号グローバル;1)and not IsEmpty(日付グローバル)]
検索モードに切り替え
レイアウト切り替え
フィールド設定 計画番号;番号グローバル
エラー処理 オン
検索実行
If[Get(対象レコード数)]
   フィールド内容の全置換 開始日;日付グローバル
Else
  カスタムダイアログを表示
  レイアウト切り替え
  フィールド設定 番号グローバル;””
  現在のスクリプト終了
End If
レコードのソート
Elsa
  カスタムダイアログを表示
  フィールド設定 番号グローバル ;””
  フィールド設定 日付グローバル ;””
  現在のスクリプト終了
End If

これでいいでしょう。

Offline

#12 2016-09-23 10:18:12

aya
Guest

Re: ボタンを押す条件

チポ wrote:

書かれたステップを丸写して変更しました。

If[100000<=番号グローバル and 番号グローバル<=999999 and not Mod(番号グローバル;1)and not IsEmpty(日付グローバル)]
検索モードに切り替え
レイアウト切り替え
フィールド設定 計画番号;番号グローバル
エラー処理 オン
検索実行
If[Get(対象レコード数)]
   フィールド内容の全置換 開始日;日付グローバル
Else
  カスタムダイアログを表示
  レイアウト切り替え
  フィールド設定 番号グローバル;””
  現在のスクリプト終了
End If
レコードのソート
Elsa
  カスタムダイアログを表示
  フィールド設定 番号グローバル ;””
  フィールド設定 日付グローバル ;””
  現在のスクリプト終了
End If

これでいいでしょう。

チポ様
解決しました。
大変有難うございました。

#13 2016-09-27 14:26:18

aya
Guest

Re: ボタンを押す条件

その後、殆ど同じスクリプトが必要になりましたので下記のように作成しました。
Get(スクリプト引数)=1を割り当てたボタンは正常動作しますが、Get(スクリプト引数)=2
のボタンは動作しません。
どのように修正すれは宜しいのでしょうか。

If[100000<=番号グローバル and 番号グローバル<=999999 and not Mod(番号グローバル;1)and not IsEmpty(日付グローバル)]
変数を設定[$no;番号グローバル
If[ 0]
Else If [Get(スクリプト引数)=1]
  検索モードに切り替え
  レイアウト切り替え A
  フィールド設定 計画番号;$no
  エラー処理 オン
  検索実行
  If[Get(対象レコード数)]
  Else
   カスタムダイアログを表示
   レイアウト切り替え「A]
   フィールド設定 番号グローバル;””
   現在のスクリプト終了
  End If
  レコードのソート
  レコード/検索条件/ページへ移動
  Elsa
   カスタムダイアログを表示
   フィールド設定 番号グローバル ;””
   フィールド設定 日付グローバル ;””
   現在のスクリプト終了
End If
Else If [Get(スクリプト引数)=2]
  検索モードに切り替え
  レイアウト切り替え B
  フィールド設定 計画番号2;$no
  エラー処理 オン
  検索実行
  If[Get(対象レコード数)]
  Else
   カスタムダイアログを表示
   レイアウト切り替え「B]
   フィールド設定 番号グローバル;””
   現在のスクリプト終了
  End If
  レコードのソート
レコード/検索条件/ページへ移動
Elsa
  カスタムダイアログを表示
  フィールド設定 番号グローバル ;””
  フィールド設定 日付グローバル ;””
  現在のスクリプト終了
End If

#14 2016-09-27 15:54:24

チポ
Member

Re: ボタンを押す条件

> Get(スクリプト引数)=2のボタンは動作しません
動作しない
とは?

スクリプトが動かないのでしたら、
スクリプトパラメータの値が間違っている。
位しか考えられません。


スクリプトですが
> If[ 0]
> Else If [Get(スクリプト引数)=1]

これは
   If [ Get(スクリプト引数)=1 ]
1行でいいですね。

また、
ボタン1と2の動作で
検索実行
までは共通の様ですから、
レイアウト切り替えの前で分岐すれば良さそうですよ。

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, 10 queries executed - Memory usage: 557.68 KiB (Peak: 578.22 KiB) ]