みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
FMS19とFMP19でWindows環境、ServerはMACMini(Ventura13.1)の構成です。
フィールドが30ぐらいあり、それらは、製品01,製品02とつけています。
このフィールドに計算で製品+番号 で移動したいのです。
Loopしたいので、番号を1づつ足していって、フィールドを順番に指定したいわけす。
なにがしたいかというと、製品01.製品02とあるわけで何番目が空白フィールドかを探したいわけです。そしてそのフィールドに移動したいわけです。
よろしくお願いします。
Offline
テーブル構造がまずい感じがぷんぷんしますが
それは置いといて、空きがない場合はどうしますか?
製品01・・・製品30とフィールドがありますが、空白フィールドがない場合は、想定していませんでした。実際は在庫管理につかっているわけで、フィールドが全部埋まってしまうことはまずないのですが、空きフィールドがなかった場合は、そのままスクリプト停止でいいと思います。
Offline
在庫管理につなぐためには、フィールド1と別のレコードのフィールド3に入っているものをどうやって集計するつもりですか。1レコードごとに面倒な処理が必要で、それが数万レコードになってくると、お手上げになります。
発注入庫管理をしたいのでしょうか。サンプルを探してみましょう。
Offline
ありがとうございます。これは単にメモのようなもので、例えば100個商品を作っておいて、使用した分を引当するというだけのものなのです。引当がすくなくなってきたら、また100個発注するというもので、この表を人間がみて判断しているものだったのです。今回NTTが提供する自動化プログラムなるもので効率化するのですが、そのプログラムの中で引当の空いている場所がわからないとだめということなのです。人間が操作していた場合は一目でわかるのでなんの問題もなかったのですけどね。
Offline
製品01,02・・・
だけにタブ順を振ったレイアウトにして、
スクリプトステップ
次のフィールドへ移動
でLoopでフィールド内容を見て行き、空欄ならLoopを抜ける。
全部が入力の場合の考慮も必要でしょう。
Offline
書き忘れました、
この形でなら、
繰り返しフィールドにしたほうが面倒なくていいのでは。
Offline
確かに、繰り返しで順番に途中を開けずに入力するなら、Count(フィールド)でいいので簡単ですね。
移動するのも繰り返し番号で指定できるし。
個別フィールドだとタブ順で移動するか、オブジェクト名を付けないと名前で指定したフィールドに移動できないのでは。
移動しないでダイアログなどで入力させて、「フィールドを名前で設定」で入れるとかはできるかな。
GetField() を使って loop 回して空きを探して、フィールドを名前で設定 するのが簡単かも。
ポータルで入力していく方が、絶対楽だと思いますが。ポータルの0行めの場所に、ポータルフィルターを使って常に空き行を表冶させておくと、いつも同じ動きでいいです。
Last edited by Shin (2023-07-28 16:11:36)
Offline
ありがとうございます。どれがよいかそれぞれためしてみます
Offline
「フィールドへ移動」というスクリプトのステップを使おうと思っています。
このときフィールドの指定を製品01、製品02というのを計算式でしようと思います。
”製品”&”番号”のような計算式で指定するのはどうすればよいのでしょうか?
これができれば番号を+1してLoopすればいいと思っています。
Offline
フィールドへ移動 では、動的にフィールドを指定することはできませんので、それを使うのでしたらフィールド数だけのステップが必要です。
そのフィールドにオブジェクト名を割り当てておいて、オブジェクトへ移動 を行うと、オブジェクト名は動的に変更できます。
loopで検出するのでしたら、タブ順を設定しておいて、次のフィールドへ移動 を行うといいです。
どれにしても、メンテナンスが少々面倒ですね。
Offline
「自動化プログラムなるもので効率化」のために本当に必要なのは何なんでしょうね。
現状のままだと「そのフィールドに移動」するのはFMの機能的に面倒ですけど、「何番目が空白フィールドかを探す」のは簡単なので、
入力するのは常に製品30とか専用のグローバルフィールドとかにしておいて、最初の空きフィールドにデータを移動する、とかの方が簡単そうですが...
なるほど、動的にフィールド指定はだめなんですね。タブ順が簡単かなぁ。
NTTが提供しようとしている自動化プログラムがどういうものなのかまだわかりません。自動化というよりも人間の作業の補助的なもののようです。マクロのような次になにをするのかをルーチン化するもののようです。
Offline
フィールドのLoopは、タブを設定して次のフィールドに移動をするとして、そのフィールドが空かどうかの判断はIf文でGetField() で判定しようと思います。
GetField() で現在のフィールドの値をとるにはどうすればいいのでしょうか
Offline
Get (アクティブフィールド内容)の方がいいでしょう。
ありがとうございます。なんとなくできそうです
Offline
タブで次のフィールドに移動して、Get (アクティブフィールド内容)>0なら次のフィールドに移動していこうとおもうのですが、Get (アクティブフィールド内容)でフィールドが空かどうかが判断できません。Get (アクティブフィールド内容)は、そのアクティブなフィールドの内容を表示してくれるのですね。
Offline
適当なグローバルフィールドを作っておき、そこに設定値を入力すれば、空白の製品フィールドに入力する、という動きはどうでしょう。
例えば、製品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
Shinさん、私にはこのスクリプトはむずかしすぎます。スクリプトがスマートでなくても自分で理解できる範囲で作っていきたいと思います。ただ、空きのフィールドを見つけるだけなんです。それも最初の空きフィールドでいいのです。
Offline
Get (アクティブフィールド内容)でフィールド内容がGetできません。新しいフィールドを作って、計算フィールドにして、計算式にGet (アクティブフィールド内容)をいれました。
なにも表示できないのです。なにが間違っていますでしょうか。
Offline
最初に書いてある
> このフィールドに計算で製品+番号 で移動したいのです
> Loopしたいので、番号を1づつ足していって、フィールドを順番に指定したい
この動きをloopで作っています。
やっていることは、loop で名前を作っていき、そのフィールドが空でなければ次を作る、空ならばそのフィールドに値を設定して終わり、です。
ただ、レイアウト上での動きではなく、論理的な動きです。
特別難しい処理はないですが、中級者向きでしょう。コレがわかるようになるように、勉強してください。
Last edited by Shin (2023-07-30 17:19:54)
Offline
新しいフィールドを作って、計算フィールドにして、計算式にGet (アクティブフィールド内容)をいれました。
その取得関数は、スクリプトの中で使わないと意味がないですよ。
レイアウト上でタブ順で移動させるのでしたら、目的のフィールドのみにタブを設定しておき、
Loop
次のフィールドへ移動
Exit Loop If ( IsEmpty ( Get ( アクティブフィールド内容 ) )
end Loop
だけでいいですが、空白が見つからないと永遠に loop しますので、どこかで止める処理をいれましょう。
Last edited by Shin (2023-07-30 17:24:35)
Offline
ありがとうございます。これでできました。いろいろ勉強になりましら。
Offline
最後のフィールドであることを判断するために
Exit Loop if(Get(アクティブフィールド名)=”製品30”)
としてLoopを終わろうとしたのですが、この式がうまくうごきません。
なにがまちがっていますでしょうか?
Offline
[ Generated in 0.009 seconds, 8 queries executed - Memory usage: 571.71 KiB (Peak: 592.62 KiB) ]