Copyfield が誤った値を取る場合の対処法
Not version-specific
Tekla Structures
Environment
Not environment-specific
Question:
CopyField に渡される値が該当する行階層の外にある値を参照することがありますが、どうすればいいですか?
例: 製品内にメイン部材以外の部材を含むかどうかを出力するレポート
Image
製品(Assembly)行 B/2 の値 "Contains Sub-Parts"は空でなければなりませんが、製品行 B/1の値がコピーされています。これは間違っています。
Answer:
この問題はバージョン2018以降で正しく機能するようになりました。
CopyField関数は行の値フィールドで使用でき、その場所に応じて様々な場所の値フィールドの値を検索します。 以下は、CopyFieldが参照する場所と優先順位を示しています。
ケース |
シナリオ |
---|---|
1 |
CopyField は同じ行にあるソースフィールドを検索します。 |
2 |
CopyField は同じ行階層内で自分の上位(親)にある階層行にあるソースフィールドを検索します。 |
3 |
CopyField は同じ行階層内で自分の下位(子)にある階層行にあるソースフィールドを検索します。 |
4 |
CopyField は異なる行階層内で自分より下位(子の位置)にあるソースフィールドを検索します。 |
5 |
CopyField は異なる行階層内で自分より上位(親の位置)にあるソースフィールドを検索します。 |
この表は、テンプレートエディター内のF1ヘルプダイアログのTab:CopyFieldリファレンスケースにあります。
シナリオ4および5は、同じ行階層に求めるフィールドがない場合に機能します。例えば製品の子部材の値を取得したいが、製品に子部材(ここではメイン部材でない子部材)がない場合、値をコピーする行が見つかりません。このとき、Tekla Structuresはその行階層以外のフィールドを検索します。そこにも見つからない場合、出力は 0 or 空 になります。
テンプレートの修正方法:
- Summary 行を追加します。
- Summary 行内に下記のような条件を持つフィールド追加します:if ( count("Field name from Part-row")!= 0 )
then
CopyField("Field name from Part-row")
else
"NO or 0"
endif - 製品(Assembly)行の CopyField は Summary行のフィールドをコピーするようにします
このようにして、部材(Part)行をカウントし、部材行がある場合にのみ値を出力するSummary行を作成することにより、製品(Assembly)行のCopyField関数が常に階層内の値をフェッチするようにします。
修正前 | 修正後 |
---|---|
Image
|
Image
|
参考例のレポートテンプレートを添付しております。