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

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

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

You are not logged in.

Announcement

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


#1 2023-07-27 21:49:51

空きフィールドをさがして移動したい。

FMS19とFMP19でWindows環境、ServerはMACMini(Ventura13.1)の構成です。
フィールドが30ぐらいあり、それらは、製品01,製品02とつけています。
このフィールドに計算で製品+番号 で移動したいのです。
Loopしたいので、番号を1づつ足していって、フィールドを順番に指定したいわけす。
なにがしたいかというと、製品01.製品02とあるわけで何番目が空白フィールドかを探したいわけです。そしてそのフィールドに移動したいわけです。
よろしくお願いします。

Offline

#2 2023-07-27 22:19:14

himadanee
Guest

Re: 空きフィールドをさがして移動したい。

テーブル構造がまずい感じがぷんぷんしますが
それは置いといて、空きがない場合はどうしますか?

#3 2023-07-28 07:40:34

Re: 空きフィールドをさがして移動したい。

製品01・・・製品30とフィールドがありますが、空白フィールドがない場合は、想定していませんでした。実際は在庫管理につかっているわけで、フィールドが全部埋まってしまうことはまずないのですが、空きフィールドがなかった場合は、そのままスクリプト停止でいいと思います。

Offline

#4 2023-07-28 08:40:36

Shin
Member

Re: 空きフィールドをさがして移動したい。

在庫管理につなぐためには、フィールド1と別のレコードのフィールド3に入っているものをどうやって集計するつもりですか。1レコードごとに面倒な処理が必要で、それが数万レコードになってくると、お手上げになります。
発注入庫管理をしたいのでしょうか。サンプルを探してみましょう。

Offline

#5 2023-07-28 08:48:23

Re: 空きフィールドをさがして移動したい。

ありがとうございます。これは単にメモのようなもので、例えば100個商品を作っておいて、使用した分を引当するというだけのものなのです。引当がすくなくなってきたら、また100個発注するというもので、この表を人間がみて判断しているものだったのです。今回NTTが提供する自動化プログラムなるもので効率化するのですが、そのプログラムの中で引当の空いている場所がわからないとだめということなのです。人間が操作していた場合は一目でわかるのでなんの問題もなかったのですけどね。

Offline

#6 2023-07-28 09:23:13

チポ
Member

Re: 空きフィールドをさがして移動したい。

製品01,02・・・
だけにタブ順を振ったレイアウトにして、
スクリプトステップ
  次のフィールドへ移動
でLoopでフィールド内容を見て行き、空欄ならLoopを抜ける。

全部が入力の場合の考慮も必要でしょう。

Offline

#7 2023-07-28 09:29:43

チポ
Member

Re: 空きフィールドをさがして移動したい。

書き忘れました、

この形でなら、
繰り返しフィールドにしたほうが面倒なくていいのでは。

Offline

#8 2023-07-28 13:58:24

himadanee
Guest

Re: 空きフィールドをさがして移動したい。

確かに、繰り返しで順番に途中を開けずに入力するなら、Count(フィールド)でいいので簡単ですね。
移動するのも繰り返し番号で指定できるし。
個別フィールドだとタブ順で移動するか、オブジェクト名を付けないと名前で指定したフィールドに移動できないのでは。
移動しないでダイアログなどで入力させて、「フィールドを名前で設定」で入れるとかはできるかな。

#9 2023-07-28 15:57:36

Shin
Member

Re: 空きフィールドをさがして移動したい。

GetField() を使って loop 回して空きを探して、フィールドを名前で設定 するのが簡単かも。

ポータルで入力していく方が、絶対楽だと思いますが。ポータルの0行めの場所に、ポータルフィルターを使って常に空き行を表冶させておくと、いつも同じ動きでいいです。

Last edited by Shin (2023-07-28 16:11:36)

Offline

#10 2023-07-29 21:08:38

Re: 空きフィールドをさがして移動したい。

ありがとうございます。どれがよいかそれぞれためしてみます

Offline

#11 2023-07-30 08:24:22

Re: 空きフィールドをさがして移動したい。

「フィールドへ移動」というスクリプトのステップを使おうと思っています。
このときフィールドの指定を製品01、製品02というのを計算式でしようと思います。
”製品”&”番号”のような計算式で指定するのはどうすればよいのでしょうか?
これができれば番号を+1してLoopすればいいと思っています。

Offline

#12 2023-07-30 08:51:22

Shin
Member

Re: 空きフィールドをさがして移動したい。

フィールドへ移動 では、動的にフィールドを指定することはできませんので、それを使うのでしたらフィールド数だけのステップが必要です。
そのフィールドにオブジェクト名を割り当てておいて、オブジェクトへ移動 を行うと、オブジェクト名は動的に変更できます。
loopで検出するのでしたら、タブ順を設定しておいて、次のフィールドへ移動 を行うといいです。

どれにしても、メンテナンスが少々面倒ですね。

Offline

#13 2023-07-30 09:15:05

himadanee
Guest

Re: 空きフィールドをさがして移動したい。

「自動化プログラムなるもので効率化」のために本当に必要なのは何なんでしょうね。
現状のままだと「そのフィールドに移動」するのはFMの機能的に面倒ですけど、「何番目が空白フィールドかを探す」のは簡単なので、
入力するのは常に製品30とか専用のグローバルフィールドとかにしておいて、最初の空きフィールドにデータを移動する、とかの方が簡単そうですが...

#14 2023-07-30 09:25:46

Re: 空きフィールドをさがして移動したい。

なるほど、動的にフィールド指定はだめなんですね。タブ順が簡単かなぁ。
NTTが提供しようとしている自動化プログラムがどういうものなのかまだわかりません。自動化というよりも人間の作業の補助的なもののようです。マクロのような次になにをするのかをルーチン化するもののようです。

Offline

#15 2023-07-30 11:09:58

Re: 空きフィールドをさがして移動したい。

フィールドのLoopは、タブを設定して次のフィールドに移動をするとして、そのフィールドが空かどうかの判断はIf文でGetField() で判定しようと思います。
GetField() で現在のフィールドの値をとるにはどうすればいいのでしょうか

Offline

#16 2023-07-30 11:41:01

himadanee
Guest

Re: 空きフィールドをさがして移動したい。

Get (アクティブフィールド内容)の方がいいでしょう。

#17 2023-07-30 12:18:29

Re: 空きフィールドをさがして移動したい。

ありがとうございます。なんとなくできそうです

Offline

#18 2023-07-30 14:29:43

Re: 空きフィールドをさがして移動したい。

タブで次のフィールドに移動して、Get (アクティブフィールド内容)>0なら次のフィールドに移動していこうとおもうのですが、Get (アクティブフィールド内容)でフィールドが空かどうかが判断できません。Get (アクティブフィールド内容)は、そのアクティブなフィールドの内容を表示してくれるのですね。

Offline

#19 2023-07-30 14:37:49

Shin
Member

Re: 空きフィールドをさがして移動したい。

適当なグローバルフィールドを作っておき、そこに設定値を入力すれば、空白の製品フィールドに入力する、という動きはどうでしょう。

例えば、製品00 をグローバルフィールドにしておき、OnObjectExit トリガーで、次のスクリプトを走らせます。

変数を設定 [ $i ; 値: 30 ] 
変数を設定 [ $i0 ; 値: $i + 1 ] 
Loop
	Exit Loop If [ Let ( 	$fld = Get ( アクティブフィールドテーブル名 ) & "::製品" & Right ( "00" & ( $i0 - $i ) ; 2 ) ; 	IsEmpty ( GetField ( $fld ) ) ) ] 
	Exit Loop If [ Let ( 	$i = $i - 1 ; 	not $i ) ] 
End Loop
If [ $i ] 
	フィールドを名前で設定 [ $fld ; テーブル::製品00 ] 
	フィールド設定 [ テーブル::製品00 ; "" ] 
End If

https://www.dropbox.com/scl/fi/uj9zrbh3 … 7uv92&dl=0

Last edited by Shin (2023-07-30 17:06:44)

Offline

#20 2023-07-30 15:59:50

Re: 空きフィールドをさがして移動したい。

Shinさん、私にはこのスクリプトはむずかしすぎます。スクリプトがスマートでなくても自分で理解できる範囲で作っていきたいと思います。ただ、空きのフィールドを見つけるだけなんです。それも最初の空きフィールドでいいのです。

Offline

#21 2023-07-30 16:39:19

Re: 空きフィールドをさがして移動したい。

Get (アクティブフィールド内容)でフィールド内容がGetできません。新しいフィールドを作って、計算フィールドにして、計算式にGet (アクティブフィールド内容)をいれました。
なにも表示できないのです。なにが間違っていますでしょうか。

Offline

#22 2023-07-30 16:46:32

Shin
Member

Re: 空きフィールドをさがして移動したい。

最初に書いてある
> このフィールドに計算で製品+番号 で移動したいのです
> Loopしたいので、番号を1づつ足していって、フィールドを順番に指定したい
この動きをloopで作っています。
やっていることは、loop で名前を作っていき、そのフィールドが空でなければ次を作る、空ならばそのフィールドに値を設定して終わり、です。
ただ、レイアウト上での動きではなく、論理的な動きです。
特別難しい処理はないですが、中級者向きでしょう。コレがわかるようになるように、勉強してください。

Last edited by Shin (2023-07-30 17:19:54)

Offline

#23 2023-07-30 16:51:43

Shin
Member

Re: 空きフィールドをさがして移動したい。

もっとさん wrote:

新しいフィールドを作って、計算フィールドにして、計算式にGet (アクティブフィールド内容)をいれました。

その取得関数は、スクリプトの中で使わないと意味がないですよ。
レイアウト上でタブ順で移動させるのでしたら、目的のフィールドのみにタブを設定しておき、
Loop
    次のフィールドへ移動
    Exit Loop If ( IsEmpty ( Get ( アクティブフィールド内容 ) )
end Loop
だけでいいですが、空白が見つからないと永遠に loop しますので、どこかで止める処理をいれましょう。

Last edited by Shin (2023-07-30 17:24:35)

Offline

#24 2023-07-30 18:31:20

Re: 空きフィールドをさがして移動したい。

ありがとうございます。これでできました。いろいろ勉強になりましら。

Offline

#25 2023-07-30 19:29:58

Re: 空きフィールドをさがして移動したい。

最後のフィールドであることを判断するために
Exit Loop if(Get(アクティブフィールド名)=”製品30”)
としてLoopを終わろうとしたのですが、この式がうまくうごきません。
なにがまちがっていますでしょうか?

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 8 queries executed - Memory usage: 571.71 KiB (Peak: 592.62 KiB) ]