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

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

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

You are not logged in.

Announcement

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


#1 2022-02-28 00:43:21

SK
Member

売上明細の中のセット商品を展開したい

以下のように売上明細の中に「セット商品」が紛れておりまして、

売上ID    商品ID        数量
売上001    商品001        1
売上001    商品002        1
売上002    セット001        1

セット商品は別のテーブルに以下のような形で定義してあります。

セットID        商品ID        数量
セット001        商品002        2
セット001        商品003        1

やりたい事は、売上明細の中のセット商品を以下のように展開する事です

売上ID    商品ID        数量
売上001    商品001        1
売上001    商品002        1
売上002    商品002        2
売上002    商品003        1

普段のプログラミングの考え方で思いつくのは、商品明細をループしながらセットIDかどうかをチェックして、セットIDならセット内容をループして、みたいな事くらいですが...
何かFilemaker的なやり方がございますでしょうか?
ヒントが頂けましたら有り難いです。
宜しくお願いいたします。

Offline

#2 2022-02-28 06:56:05

himadanee
Guest

Re: 売上明細の中のセット商品を展開したい

展開後もセット商品の売上情報が必要だと思いますが、それはどうしますか?

FM的というと、売上1件なら「関連レコードに移動」でセットに移動してインポート、でもできるけど、それだと同じ商品を使うセットを一度に処理できないので結局ループになってしまいますね。

#3 2022-02-28 09:48:51

チポ
Member

Re: 売上明細の中のセット商品を展開したい

売上明細の、商品ごとの明細の別テーブルを作り、
明細が商品だったらそれをそのまま移す、
セット商品だったら、その商品のレコードを作る。

としたらいかがでしょう。

スクリプトにして、
明細のレコードが確定したときに、
スクリプトトリガで実行すればいいのでは。

セットマスタのようなテーブルがあるといいでしょうね。

Offline

#4 2022-02-28 16:47:03

Shin
Member

Re: 売上明細の中のセット商品を展開したい

明細を2段構造にしたらいかがでしょう。それに合わせて、商品マスターにもセット商品を登録して、商品マスターの明細を作っておきます。こちらには、単品商品は単品を登録し、セットは複数の商品を登録します。
2段目の明細へは、レコード確定で、スクリプトで loop で登録していく処理を行えばいいのかも。

Offline

#5 2022-03-03 01:01:56

SK
Member

Re: 売上明細の中のセット商品を展開したい

皆様コメントありがとうございます。
理解があまり追いついておらず、遅レスご容赦ください。

------------------------
himadanee さん
------------------------
> 展開後もセット商品の売上情報が必要だと思いますが、それはどうしますか?

確かに。質問の単純化のために省いておりますが、実際は、展開前の商品IDも保持したままで作成しようと思っております。

>  FM的というと、売上1件なら「関連レコードに移動」でセットに移動してインポート、
> でもできるけど、それだと同じ商品を使うセットを一度に処理できないので結局ループになってしまいますね。

明細の商品IDからセット内容に移動してインポートみたいなイメージでしょうか。

------------------------
チポ さん
------------------------
> 売上明細の、商品ごとの明細の別テーブルを作り、
> 明細が商品だったらそれをそのまま移す、
> セット商品だったら、その商品のレコードを作る。

以下のようにやってみました。

売上明細には、明細を特定するための「明細ID」を連番で入れて、
さらに「セット商品かどうか」の計算フィールドを作成しました。
さらに、セット展開後の明細を格納するための別テーブルを用意しました。

スクリプトでまずは明細の中の「セットではない商品」のものを検索して、展開後の別テーブルにインポート。

続いて明細の中の「セット商品」のものを検索して明細IDの一覧を作成し、この一覧をループさせます。
明細の中の必要な値を変数に保存しておき、さらにセット内容を検索して値を取得し、
展開後の別テーブルに移動して新規レコードを作成しました。
これをセット内容の分ループしました。

以上のような2重ループにしたところ、一応思ったような動きはしてくれましたが、
普段のプログラミング脳で無理やり実装している気がして、もっとシンプルにできないかな、とも思いました。
どうなんでしょう?

------------------------
Shin さん
------------------------
> 明細を2段構造にしたらいかがでしょう。

これはチポさんも仰っているように、受注明細(展開前)とは別に、展開後の明細を作るという事でしょうか

> それに合わせて、商品マスターにもセット商品を登録し商品マスターの明細を作っておきます。
> こちらには、単品商品は単品を登録し、セットは複数の商品を登録します。

セット商品も含めた商品マスターと、展開後の商品明細(単品含む)を作成するという事でしょうか

> 2段目の明細へは、レコード確定で、スクリプトで loop で登録していく処理を行えばいいのかも。

仰るようにテーブルを作ってリレーションを利用すれば、もっとFilemaker的な機能を利用できるのでは?
という印象を持ちました。実は、チポさんのコメントを参考にループを書く際、フォーラムやWEBで
「別テーブルにレコードをコピー」などで検索したのですが、ん〜あまり良くないやり方なのでは?と感じていました。
もしかして、関連テーブルに新規レコードを作成?あたりがヒントになるのでしょうか。
もうちょっと調べてみようと思います。

Offline

#6 2022-03-03 09:08:42

チポ
Member

Re: 売上明細の中のセット商品を展開したい

> 明細の中の「セットではない商品」のものを検索して、展開後の別テーブルにインポート
これでいいでしょう。
別の方法、、
明細のレコード確定時に、それが商品ならば、
別テーブルに明細IDを移す。
スクリプトトリガで実行させればノータッチですね。

> 「セット商品」のものを検索して明細IDの一覧を作成し、この一覧をループさせます
商品マスタにその商品が含まれるセットIDを持たせるとか、
別途、セットマスタのようなテーブルがあれば、
明細から関連レコード移動で、そのセットの商品のみを対象レコードとして、
それを別テーブルでインポート。
でもいいのでは。
これもトリガでノータッチで出来ますよね。

Offline

#7 2022-03-03 17:04:19

Shin
Member

Re: 売上明細の中のセット商品を展開したい

テーブル構成とスクリプトは、こんな形で。
https://www.dropbox.com/s/st5aucmnd5xf3 … 2.zip?dl=0

Offline

#8 2022-03-07 00:33:37

SK
Member

Re: 売上明細の中のセット商品を展開したい

-------------------
Shin さん
-------------------

参考スクリプトありがとうございました。
一つ一つ書き写しながら内容を理解していくのに大分時間がかかってしまいました。

関連レコードを辿って商品マスタを特定し、レイアウトを切り替えてインポート。
その際、自動入力で、保存しておいた変数や計算式で値をセットする。

読み解くまで時間はかかりましたが、とても斬新なやり方に見えました。
どのように解決したかの詳細を書きたいところですが、まだ自分の言葉で正確には説明できず、
完全に消化しきるまでに時間がかかりそうです。とりあえずは自分式に書き直した
動くコピーの作成までは辿り着きましたのでお礼も込めて書き込みいたしました。

-------------------
チポさん
-------------------

コメントありがとうございます。

> 明細から関連レコード移動で、そのセットの商品のみを対象レコードとして、それを別テーブルでインポート

Shinさんのサンプルからそのやり方を学ばせて頂きました。

みなさま本当にありがとうございます。

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: 590.66 KiB (Peak: 607.57 KiB) ]