みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつも大変お世話になっております
表題の件、お知恵をお貸し頂けますでしょうか?
FMP16
受注レイアウト内に明細ポータルを使用しております
明細ポータルの『商品名』フィールドを入力しスクリプトで『商品マスタ』テーブルより検索しポータル内の『商品コード』へ転記させておりますが
ポータル1行目は問題なく転記されるのですが、2行目以降の『商品名』に入力すると1行目に転記されてしまします
スクリプトの指南をお願いします
変数を設定[$item; 値:明細::商品名]
レイアウト切り替え[「商品マスタ」;アニメーション:なし]
検索モードに切り替え[一時停止:オフ]
フィールド設定[商品マスタ::商品名;$item]
検索実行[]
変数を設定[$itemCD; 値:商品マスタ::商品コード]
レイアウト切り替え[「受注」;アニメーション:なし]
フィールド設定[明細::商品コード;$itemCD]
フィールドへ移動[]
私が作成したスクリプトは上記です
思いつくのが『ポータル内の行へ移動』ステップを活用すれば良いのかな?と試したのですが使い方がわからずうまくいきません
ご指導をお願い致します
Offline
それです。
レイアウト切り替えはせずに
"ポータル内の行へ移動"[最後の]を指定して下さい。
Offline
ポータルの新規行に入力するには、そのリレーションの設定で
このリレーションシップを使用して
このテーブルでのレコード作成を許可
にチェックが入っていなければなりません。
やりたいことは、明細テーブルで
新規レコード
商品名入力
で済むことではないのかな。。
Offline
calafate様
お返事ありがとうございます
2つ目の『レイアウト切り替え』を削除し『ポータル内の行へ移動[最後の]』を追記し変更しましたがやはり1行目に転記されました
チポ様
『受注』テーブルのIDと『明細』テーブルのIDでリレーションしており『明細』テーブル側に作成許可は既に行っております
2つめの『レイアウト切り替え』(もしくは『ポータル内の行へ移動[最後の]』)後に『新規レコード/検索条件』を追記しましたが『受注』レコードが1つ増えました…が、新レコードの1行目に転記されます
※たしかにポータル内のレコードを増やすステップは失念しておりました
やりたい事は、明細ポータル内で
新規レコード
商品名より商品コードを割り当てる事です
※蛇足ですが商品マスタのレコードが39,779件あり、商品名の該当が2レコード以上の場合は『商品マスタ』レイアウトのリスト表示で止めて
選択したらポータル内に割り当てるようIfとget(対象レコード数)で分岐しております
Offline
ポータルに名前を付けて以下の太字部分を追加すれば、大丈夫でしょう。
変数を設定 [$アクティブポータル行番号; 値:Get ( アクティブポータル行番号 )]
変数を設定[$item; 値:明細::商品名]
レイアウト切り替え[「商品マスタ」;アニメーション:なし]
検索モードに切り替え[一時停止:オフ]
フィールド設定[商品マスタ::商品名;$item]
検索実行[]
変数を設定[$itemCD; 値:商品マスタ::商品コード]
レイアウト切り替え[「受注」;アニメーション:なし]
オブジェクトへ移動 [オブジェクト名: "Portal01"]
ポータル内の行へ移動 [選択; ダイアログなし; $アクティブポータル行番号]
フィールド設定[明細::商品コード;$itemCD]
フィールドへ移動[]
Offline
> 『レイアウト切り替え』(もしくは『ポータル内の行へ移動[最後の]』)後に『新規レコード/検索条件』を追記
新規レコード作成
では商品マスタのレコードが出来ちゃいますよ。
ポータル行の最後に行き、そこへ入力すれば自動的に新規レコードが作成されます。
明細テーブルの現在のレコードと同じ商品のレコードを作りたいのでしょう?
ならば私の前レスの
商品名入力を商品ID入力に変えて、
商品名はルックアップ等でいいのでは。
Offline
qb_dp様
お返事ありがとうございます
対象レコードが1件の場合はうまく出来ましたが2件以上の場合、1行目に転記されます
先ほどのレスで蛇足で書かせて頂いた件、詳細をお伝えします
検索ボタンにスクリプト引数を『商品CD』とし、対象レコードが複数ある場合、
商品マスタのリスト表示でレコード選択(押下)し引数を『商品CD選択』としております
If[Get(スクリプト引数)=”商品CD”]
変数を設定 [$portal; 値:Get ( アクティブポータル行番号 )]
変数を設定[$item; 値:明細::商品名]
レイアウト切り替え[「商品マスタ」;アニメーション:なし]
検索モードに切り替え[一時停止:オフ]
フィールド設定[商品マスタ::商品名;$item]
検索実行[]
If[Get(対象レコード数)=1]
変数を設定[$itemCD; 値:商品マスタ::商品コード]
レイアウト切り替え[「受注」;アニメーション:なし]
オブジェクトへ移動 [オブジェクト名: 明細::商品コード]
ポータル内の行へ移動 [選択; ダイアログなし; $portal]
フィールド設定[明細::商品コード;$itemCD]
Else If[Get(対象レコード数)>1]
現在のスクリプト終了[テキスト結果: ]
End If
Else If[Get(スクリプト引数)=”商品CD選択”]
変数を設定[$itemCD; 値:商品マスタ::商品コード]
レイアウト切り替え[「受注」;アニメーション:なし]
オブジェクトへ移動 [オブジェクト名: 明細::商品コード]
ポータル内の行へ移動 [選択; ダイアログなし; $portal]
フィールド設定[明細::商品コード;$itemCD]
End If
フィールドへ移動[ ]
チポ様
お返事ありがとうございます
商品マスタのレコードが出来ちゃいますよ。
>出来ちゃいました
ポータル行の最後に行き、そこへ入力すれば自動的に新規レコードが作成されます。
>新規レコードが作成されたのですが最後に作成されるので参照している商品名フィールドのテキストが残ったままになります。
上書きして商品コードと商品名を転記したいと考えております
商品名入力を商品ID入力に変えて、商品名はルックアップ等でいいのでは。
>商品コードはユニークな値で品番がわかれば商品名にルックアップで自動表示にしております。
商品名は長く一致させる事が難しいので『商品マスタ』より参照し商品コードに転記し自動入力で商品名も出すようにしたいと考えております
Offline
> >新規レコードが作成されたのですが最後に作成されるので参照している商品名フィールドのテキストが残ったままになります。
> 上書きして商品コードと商品名を転記したいと考えております
意味不明です ^^;;
運用の手順は
明細のレイアウト
現在のレコードの商品名を変数に
商品マスタのレイアウト
変数の値で検索
(複数レコードの場合目視で選択?)
ポータルの最終行に
商品名フィールドに変数を入力
ですか?
とすれば目的は、前にも書いた通り
> 明細テーブルの現在のレコードと同じ商品のレコードを作りたいのでしょう
ならば、
全く無駄な動きが多すぎますよ。
Offline
> 商品名の該当が2レコード以上の場合は『商品マスタ』レイアウトのリスト表示で止めて選択したらポータル内に割り当てる
ここが肝なんでしょう。それ以外は、普通の伝票・明細の構造でしょうね。
商品名の構成や入力によってかわると思いますが、前方一致の検索いいのならば、商品マスター側に商品名を加工した別フィールドを作り、そこにリレーションを張るなどで対処できるでしょう。部分一致が必要でしたら、もう少し複雑な処理を行う事になりますが。
https://www.dropbox.com/s/cih4y4zqbl4py … 7.zip?dl=0
Offline
色々とやり方はあると思いますが。
以下については、
対象レコードが1件の場合はうまく出来ましたが2件以上の場合、1行目に転記されます
検索結果が複数あった場合、以下でスクリプトを終了しているので、変数:$portal の値が初期化されます。
Else If[Get(対象レコード数)>1]
現在のスクリプト終了[テキスト結果: ]
End If
$変数名 は、実行しているスクリプト内で有効です。
$$portal の様にグローバル変数にすれば、大丈夫です。
Offline
商品マスターの一覧を表示させるところを新規ウィンドウで行えば、そのウィンドウを閉じれば元のポータルのアクティブ行は変更されずにいますので、処理はシンプルになります。
https://www.dropbox.com/s/cih4y4zqbl4py … 7.zip?dl=0
伝票レイアウトのそれぞれに、異なる方式でのコード検索が組み込んであります。
Last edited by Shin (2018-04-30 19:25:33)
Offline
Pages: 1
[ Generated in 0.028 seconds, 7 queries executed - Memory usage: 550.73 KiB (Peak: 571.63 KiB) ]