対象プラグイン名
計算式プラグイン
ご相談・ご質問の内容
見積計算ソフトにサブテーブルが3つアプリ内にあります。
サブテーブル1とサブテーブル2は入力用です。
上記2つのサブテーブルに入力された組み合わせ分、サブテーブル3に行を追加したいです。
それぞれのサブテーブルに登録されているデータは下記のイメージになります。
ご教授頂きたいです。よろしくお願いいたします。
(入力)サブテーブル1(使用材料)
格納データ
材料名
クラフト紙
ラミネート
(入力)サブテーブル2(見積枚数)
格納データ
枚数
1000枚
2000枚
(出力)サブテーブル3(材料代)
格納データ
枚数、材料名
1000枚、クラフト紙
1000枚、ラミネート
2000枚、クラフト紙
2000枚、ラミネート
テーブルが材料代ということで他に金額等があると思いますが、わかる部分だけ。
テーブル1,テーブル2を組合わせて、テーブル3(材料代)のデータを作ります。
編集画面
横並びプラグインでテーブルを横並び表示
計算式プラグイン設定
テーブル(材料代)計算式
LET(
maisu, JSON_P(OTVAL(見積枚数)), // 枚数取込
zairyo, JSON_P(OTVAL(使用材料)), // 材料取込
rows, ARRAY(), // 出力用
wk, ARRAY_MAP(maisu,m, // 外側回
ARRAY_MAP(zairyo,z, // 内側回
FSET(rows, ARRAY(rows,
DIC(
"枚数T", DIC_ITEM(m,"枚数"),
"材料名T", DIC_ITEM(z,"材料名")
)
))
)
),
TABLE_DATA(rows)
)
フォルトンに計算式の解説をしてもらいました
各部分の解説
| 変数 |
内容 |
説明 |
maisu |
JSON_P(OTVAL(見積枚数)) |
「見積枚数」テーブルを配列として取得 |
zairyo |
JSON_P(OTVAL(使用材料)) |
「使用材料」テーブルを配列として取得 |
rows |
ARRAY() |
出力結果を格納するための空配列 |
wk |
ARRAY_MAP(...) |
2重ループ処理(結果は使わない) |
TABLE_DATA(rows) |
|
最終的に作った配列をテーブル形式に変換 |
2重ループの動き
ARRAY_MAP(maisu,m,
ARRAY_MAP(zairyo,z,
FSET(rows, ARRAY(rows,
DIC("枚数T",DIC_ITEM(m,"枚数"),"材料名T",DIC_ITEM(z,"材料名"))
))
)
)
- 外側 (
maisu):見積枚数テーブルの各行を m として処理
- 内側 (
zairyo):使用材料テーブルの各行を z として処理
- 組み合わせ生成:
各 m(枚数)と z(材料)を組み合わせて、1行の辞書(DIC)を作成
結果はこのような形になります:
| 枚数T |
材料名T |
| 枚数1 |
材料A |
| 枚数1 |
材料B |
| 枚数2 |
材料A |
| 枚数2 |
材料B |
| … |
… |
関数のポイント
| 関数 |
説明 |
OTVAL() |
他テーブルの値を取得 |
JSON_P() |
JSON文字列を配列化 |
ARRAY() |
空配列を生成 |
ARRAY_MAP() |
各要素に対して繰り返し処理 |
FSET() |
配列に要素を追加 |
DIC() |
辞書(オブジェクト)を作成 |
DIC_ITEM() |
辞書内の指定項目の値を取得 |
TABLE_DATA() |
配列をテーブル形式データに変換 |
この式の最終結果
- 出力テーブルには、見積枚数テーブルと使用材料テーブルの全組み合わせ行が生成されます。
- 組み立てたデータは「TABLE_DATA」で出力し、
他のフィールドに「テーブル型」で設定すれば、そのまま一覧表示できます。
「いいね!」 1
お世話になります。
早速実装したところ、思った通りの結果を得る事が出来ました。
すぐ、サブテーブルを変更した際に連動して再計算してくれる所は感動です!
フォルトンも活用させて頂きます!!
ご教授頂きありがとうございました!
「いいね!」 1
system
クローズされました:
4
このトピックは最後の返信から 60 分が経過したので自動的にクローズされました。新たに返信することはできません。