みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FMpro12adv Windows10の環境です。
在庫管理DBを作成しており、DB内に入荷T,商品マスタT(各同名の表示レイアウト在)があります。
各商品がユニークな品番を所持しているので、各T品番入力用に「Product No.」フィールドが作成してあります。
入荷TにExcelファイルのデータをインポート、
インポートで入荷T作成されたレコードの品番が、商品マスタTに存在しない場合は、
該当品番で商品マスタTに新規レコードを作成する。
上記を行うべく下記スクリプト作成しました。
エラー処理[オン]
レコードのインポート[ソース:入荷テーブルIMPxls]
変数を設定[$対象レコード数;値:Get(対象レコード数)]
変数を設定[$カウント;値:0]
レコード/検索条件/ページへ移動[最初の]
Loop
変数を設定[$カウント;値:$カウント+1]
コピー[選択;入荷T::Product No.]
レイアウト切り替え[「商品マスタ」(商品マスタT)]
検索モードに切り替え[]
貼り付け[選択;商品マスタT::Product No.]
検索実行[]
If[Get(対象レコード数)="0"]
新規レコード/検索条件
貼り付け[選択;商品マスタT::Product No.]
Else
ブラウズモードに切り替え[]
End If
レイアウト切り替え[「入荷」(入荷T)]
レコードを対象外に
Exit Loop If [$対象レコード数 ≤ $カウント]
End Loop
上記スクリプトの想定としては、
入荷Tにデータインポート後、スクリプト処理を経て、
対象レコード0の状態で入荷レイアウトに復帰
なのですが、
内容の同じインポートデータ(50レコード)を用いて、複数回に動作確認をしたところ、下記の問題が発生しております。
1.商品マスタTにレコードが作成されたが、「Product No.」が空欄で作成されるレコードがある。(空欄となるレコードは毎回異なる品番、入荷T内のレコードには「Product No.」に品番が入力されている。)
2.対象レコードが0にならずに入荷レイアウトに復帰
3.50レコードの処理に10秒程度掛かる
スクリプトに問題が在る場合は、問題点をご教授いただけないでしょうか。
よろしくお願いいたします。
インポートされる情報は何があるのですか。その中に、マスターに登録される商品名なども含まれているのでしょうか。
提示されたスクリプトは、かなり回りくどいことをしています。簡略化すると、4ステップほどで終了します。多分1秒かからないでしょう。
レコードのインポート[ソース:入荷テーブルIMPxls]
レイアウト切り替え[「商品マスタ」(商品マスタT)]
レコードのインポート[ソース:入荷テーブルIMPxls」 ; 更新;]
レイアウト切り替え[元のレイアウトへ]
だけでも十分なはずです。
肝は、商品マスターへのインポートで、商品番号を照合フィールドとして上書き、無いレコードを追加 する動きです。
ただし、既存のレコードの上書きを行ってしまいますので、レコードの編集歴が残ってしまいます。
それを回避したいのでしたら、
レコードのインポート[ソース:入荷テーブルIMPxls]
レイアウト切り替え[「商品マスタ」(商品マスタT)]
全レコードを対象
関連レコードへ移動[入荷テーブル;該当レコード]
対象外のみを表示
レイアウト切り替え[「商品マスタ」(商品マスタT)]
レコードのインポート[ソース:入荷テーブル ;追加]
レイアウト切り替え[元のレイアウトへ]
とするといいでしょう。
Last edited by Shin (2022-06-17 18:57:10)
Offline
Shin様
返事が遅くなり失礼いたしました。
ご提案いただいた最初の案で解決いたしました。
複雑なスクリプト作成しなければ実行できないと思っていましたが、
今後は柔軟にスクリプトの手順を考えるように努めてみます。
今回はありがとうございました。
Pages: 1
[ Generated in 0.014 seconds, 9 queries executed - Memory usage: 508.83 KiB (Peak: 515.61 KiB) ]