モデルからの図面の作成 (Creo Elements/Direct Annotation) > 上級者向けトピック > 上級ユーザ向けカスタマイズ > BOM 関数
  
BOM 関数
Creo Elements/Direct Annotation の BOM 機能は多数の関数で制御できます。これらのうち最も重要なものは、BOM レイアウトをロードし、属性やテキスト参照を登録する関数です。WorkManager データベースが BOM 情報の唯一のソースであるイベントでは「スキャンモデル」ボタンを無効にすることもできます。
以降のセクションでは、次の関数について説明します。
BOM ヘッド、コンポーネント、フラグレイアウトのロード
BOM 属性とテキスト参照の登録 (WorkManager を使用しない場合)および BOM 属性とテキスト参照の登録 (WorkManager を使用する場合)
デフォルトの接続モードと延長方向の設定
完全な BOM 登録の例
BOM ヘッド、コンポーネント、フラグレイアウトのロード
レイアウトとは、BOM テーブルと位置フラグの外観を決定するテンプレートです。任意の MI ファイルを BOM レイアウトとしてロードし、登録できます。BOM には次の 3 種類のレイアウトがあります。
BOM テーブルの題名を表すヘッドレイアウト。このレイアウトには BOM ルートアセンブリに関する情報を含めることができます。
テーブルの個別の行を表すコンポーネントレイアウト。
* 
テーブルレイアウトを有効にするには、同じ UI-NAME オプションを持つヘッドレイアウトとコンポーネントレイアウトが必要です。
BOM 位置フラグを表すフラグレイアウト。
BOM レイアウトのカスタマイズメニューでレイアウトに適用される特別な BOM 属性とテキスト参照の登録 (WorkManager を使用しない場合)に値を記入できます。ロードしたレイアウトは一時的なシート 0 で編集して、通常の「スケッチの保存」コマンドで保存します。次の図に一般的な BOM レイアウトを示します。
BOM レイアウト
1 つ目の図はテーブルのヘッドレイアウト (最上部) およびコンポーネントレイアウト (最下部) を示し、2 つ目の図はフラグレイアウトを示しています。
レイアウト関数とそのオプションは次のとおりです。詳細については個別リンクを参照してください。 を示します。
構文
(DOCU-LOAD-BOM-HEAD-LAYOUT --+--> UI-NAME オプション---->+--->
| ^
`--> FILE オプション------->'
(DOCU-LOAD-BOM-COMP-LAYOUT --+--> UI-NAME オプション---->+--->
| ^
`--> FILE オプション------->'
(DOCU-LOAD-BOM-FLAG-LAYOUT --+--> UI-NAME オプション---->+--->
| ^
`--> FILE オプション------->' DOCU-UNLOAD-ALL-BOM-LAYOUTS 関数
UI-NAME オプション
:UI-NAME は「スケッチレイアウト」テーブルまたは「フラグレイアウト」テーブルに表示されるレイアウト名を指定します。テーブル全体のレイアウトを定義するためには、関連するヘッドレイアウトおよびコンポーネントレイアウトの UI-NAME 文字列が同一である必要があります。フラグレイアウトは独立であり、テーブルレイアウト名を同じにする必要はありません。
構文
-->(:UI-NAME)----->|"interface name"|------->
FILE オプション
:FILE は、レイアウトとして使用する MI ファイル名を指定します。これは通常、「スケッチの保存」で保存されるレイアウトスケッチです。指定した名前のファイルが Creo Elements/Direct Annotation の起動時に自動的にロードされます。
構文
-->(:FILE)----->|"filename"|------->
DOCU-UNLOAD-ALL-BOM-LAYOUTS 関数
DOCU-UNLOAD-ALL-BOM-LAYOUTS 関数は以前にロードしたレイアウトをすべてロード解除 (および登録解除) します。デフォルトレイアウトを使用しない場合、am_customize ファイル (または別のファイル) で、(DOCU-LOAD-BOM-...-LAYOUT ...) のインスタンスの前にこの関数を記述します。
レイアウト登録の例は次のとおりです。
(docu-load-bom-head-layout
:ui-name "Example1"
:file "/bom/head1.mi")
(docu-load-bom-comp-layout
:ui-name "Example1"
:file "/bom/comp1.mi")
(docu-load-bom-flag-layout
:ui-name "Example1"
:file "/bom/flag1.mi")
BOM 属性とテキスト参照の登録 (WorkManager を使用しない場合)
WorkManager が使用されていないときには、次の関数が適用されます。WorkManager 固有の情報については、 BOM 属性とテキスト参照の登録 (WorkManager を使用する場合)を参照してください。
Creo Elements/Direct Annotation には簡単な BOM ジェネレータがあります。指定したアセンブリをスキャンしてモデルツリーを作成し、見つかった各オブジェクトから BOM データを生成します。関連する値関数を持つ特定の属性を登録して、BOM のコンテンツを定義できます。
属性の関数、そのオプション、および関連する関数は次のとおりです。詳細については個別リンクを参照してください。 を示します。
(DOCU-REGISTER-BOM-ATTR --+--> ATTR-TYPE オプション--------->+--->
| ^
|--> ATTR-TITLE オプション-------->|
| |
|--> ATTR-DISPLAY オプション------>|
| |
`--> ATTR-VALUE-FNC オプション---->' DOCU-UNREGISTER-BOM-ATTR-ALL 関数 DOCU-UNREGISTER-BOM-ATTR 関数 DOCU-REGISTER-BOM-TR-GROUP 関数 DOCU-REGISTER-WMBOM-TR-GROUP 関数
ATTR-TYPE オプション
:ATTR-TYPE は対象のテキスト参照タイプを決定する属性タイプを指定します。 DOCU-REGISTER-BOM-TR-GROUP 関数も参照してください。
構文
-->(:ATTR-TYPE)----->|"text reference type"|------->
ATTR-TITLE オプション
:ATTR-TITLE は「現 BOM テーブル」に表示される BOM 属性の名前を指定します。
構文
-->(:ATTR-TITLE)----->|"name in table"|------->
ATTR-DISPLAY オプション
:ATTR-DISPLAY は BOM 属性を「現 BOM テーブル」に表示するかどうかを指定します。必要に応じて属性を非表示にできますが、その場合もスキャン時には属性が決定されます。
構文
-->(:ATTR-DISPLAY)----->|t or nil|------->
ATTR-VALUE-FNC オプション
:ATTR-VALUE-FNC は BOM 属性の値を決定する関数を指定します。値関数は登録前に定義する必要があります。これには選択したパーツまたはアセンブリを説明するパラメータが 1 つあり、BOM に入力する値を保持した文字列を返します。
Integration Kit 関数を使用した BOM 属性値関数については、 完全な BOM 登録の例も参照してください。
構文
-->(:ATTR-VALUE-FNC)----->|#'value-function-name|------->
DOCU_BOM_QUANTITY などのシステム定義属性には、システムの値関数が使用されます。ただし、その場合も属性を BOM テーブルに表示するには、属性を登録する必要があります。次の場合には、値関数に nil を使用します
-->(:ATTR-VALUE-FNC)----->|nil|------->
(システム属性 DOCU_BOM_POS_NO は自動的に使用可能になり、登録する必要はありません)。
後述の を参照してください。
DOCU-UNREGISTER-BOM-ATTR-ALL 関数
DOCU-UNREGISTER-BOM-ATTR-ALL 関数は以前に登録した BOM 属性をすべて登録解除します。デフォルトの BOM 属性を使用しない場合、am_customize ファイル (または別のファイル) で、(DOCU-REGISTER-BOM-ATTR ...) のインスタンスの前にこの関数を記述します。
DOCU-UNREGISTER-BOM-ATTR 関数
DOCU-UNREGISTER-BOM-ATTR 関数は、以前に定義した BOM 属性を 1 つ登録解除します。既存の属性の ATTR-TYPE オプション の値を二重引用符で囲んで指定します。
構文
(DOCU-UNREGISTER-BOM-ATTR "attribute type")
DOCU-REGISTER-BOM-TR-GROUP 関数
The Creo Elements/Direct Annotation の BOM ジェネレータは、共有パーツの出現数を数えて、そのデータを "DOCU_BOM_QUANTITY" という名前のシステム BOM 属性に入力します。BOM テキスト参照のデフォルトのテキスト参照グループは "BFG" です。DOCU-REGISTER-BOM-TR-GROUP 関数で別のグループを指定できます。
登録されたすべての BOM 属性により、このグループで (同じ名前の) テキスト参照タイプが自動的に生成されます。これらのテキスト参照タイプは、BOM レイアウトのカスタマイズメニューで使用できます。
システムのテキスト参照 "DOCU_BOM_POS_NO" は位置番号の表示に使用されます。これは、自動的に有効になります。
構文
(DOCU-REGISTER-BOM-TR-GROUP "group name")
BOM 属性とテキスト参照の登録 (WorkManager を使用する場合)
次の関数が WorkManager と合わせて適用されます。
DOCU-REGISTER-WMBOM-TR-GROUP 関数
WorkManager により、タイトル列とデータ行で BOM 属性を定義するテーブルが表示されます。BOM 表示テーブルに表示する属性は、設定テーブルで指定します。したがって、カスタマイズのほとんどは WorkManager で行われます。
WorkManager BOM 属性のデフォルトのテキスト参照グループは "BFG" です。これは、DOCU-REGISTER-WMBOM-TR-GROUP 関数で変更できます。
この名前の下で WorkManager 属性のリストが自動的に取得され、このグループで (同じ名前の) 新しいテキスト参照タイプが生成されます。これらのテキスト参照タイプは、BOM レイアウトのカスタマイズメニューで使用できます。
システムのテキスト参照 "DOCU_BOM_POS_NO" は位置番号の表示に使用されます。これは、自動的に有効になります。
構文
(DOCU-REGISTER-WMBOM-TR-GROUP "WorkManager group name")
BOM 属性登録の例は次のとおりです。
(defun docu-bom-attr-part-name (selitem)
(let ((contents-name (oli::sd-inq-obj-contents-name selitem)))
(if contents-name contents-name (oli::sd-inq-obj-basename selitem))
)
)
(docu-unregister-bom-attr-all)
(docu-register-bom-attr :attr-type "PART_NAME"
:attr-title "Part Name"
:attr-display t
:attr-value-fnc #'docu-bom-attr-part-name)
(docu-unregister-bom-attr "PART_NAME")
(docu-register-bom-attr :attr-type "DOCU_BOM_QUANTITY"
:attr-title "Quantity"
:attr-display t
:attr-value-fnc nil) ;; system BOM attribute
(docu-register-bom-attr :attr-type "PART_NAME"
:attr-title "Part Name"
:attr-display t
:attr-value-fnc #'docu-bom-attr-part-name)
デフォルトの接続モードと延長方向の設定
接続モード
BOM テーブルを配置する際のデフォルトのカーソル接続点を設定できます。デフォルトは、テーブルの中心点です (MIDDLE_MIDDLE)。
構文
(DOCU::DOCU-SET-CURRENT-BOM-ATTACH-MODE "position")
位置は、UPPER_LEFT、UPPER_MIDDLE、UPPER_RIGHT、MIDDLE_LEFT、MIDDLE_MIDDLE、MIDDLE_RIGHT、LOWER_LEFT、LOWER_MIDDLE、またはLOWER_RIGHT のいずれかに設定できます。これらのオプションは大文字小文字が区別され、大文字で入力する必要があります。
延長方向
BOM テーブルのデフォルトの延長方向を設定することもできます。これにより、BOM 情報を上から下に表示するか (下向き)、下から上に表示するか (上向き) が決まります。
構文
(DOCU::DOCU-SET-CURRENT-BOM-GROWTH-DIR :GROW-UPWARD or :GROW-DOWNWARD)
完全な BOM 登録の例
次の例に、モデルに属性を添付する方法および属性を BOM に取り込む方法を示します。
;;-----------------------------------------------------------------------------
;; simple example how to implement BOM attributes using IK functions
;;-----------------------------------------------------------------------------
(in-package :my-special-bom-attr)
(use-package '( :oli ))
;;-----------------------------------------------------------------------------
;; functions to inquire attached BOM information of an SD part or assembly
;;-----------------------------------------------------------------------------
(defun bomattr-get-material (object)
(let ((attr (sd-inq-item-attribute object "MY_SPECIAL_BOM_ATTR"
:values :attachment :contents)))
(if attr (getf attr :material) nil)
)
)
(defun bomattr-get-partno (object)
(let ((attr (sd-inq-item-attribute object "MY_SPECIAL_BOM_ATTR"
:values :attachment :contents)))
(if attr (getf attr :part-number) nil)
)
)
;;-----------------------------------------------------------------------------
;; dialog to attach BOM information to an SD part or assembly
;;-----------------------------------------------------------------------------
(sd-defdialog 'my_special_bom_attr
:dialog-title "BOM Attr"
:start-variable 'object
:variables
'(
(OBJECT
:value-type :part-assembly
:modifies :contents
:title "Part/Assy"
:prompt-text "Select a part or assembly."
:after-input
(progn
(setq material (bomattr-get-material object))
(setq partno (bomattr-get-partno object))
)
)
(MATERIAL
:range ("Steel" "Aluminium" "Brass")
:title "Material"
:prompt-text "Enter material info."
)
(PARTNO
:value-type :string
:title "Part No"
:prompt-text "Enter part number info."
)
)
:ok-action
'(progn
(sd-attach-item-attribute object "MY_SPECIAL_BOM_ATTR"
:attachment :contents
:on-copy :copy
:on-merge :maintain
:on-split :copy
:on-xform :maintain
:filing '(:sd-file)
:values
`(
:material ,material
:part-number ,partno
)
)
)
)
;;-----------------------------------------------------------------------------
;; convenience functions to inquire attached BOM information
;;-----------------------------------------------------------------------------
(defun bomattr-get-material (selitem)
(let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR"
:values :attachment :contents)))
(if attr (getf attr :material) nil)
)
)
(defun bomattr-get-partno (selitem)
(let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR"
:values :attachment :contents)))
(if attr (getf attr :part-number) nil)
)
)
;;-----------------------------------------------------------------------------
;; examples of how to customize some simple BOM attributes
;;-----------------------------------------------------------------------------
(defun my-bom-attr-part-name (selitem)
(let ((contents-name (oli::sd-inq-obj-contents-name selitem)))
(if contents-name contents-name (oli::sd-inq-obj-basename selitem))
)
)
(defun my-bom-attr-part-no (selitem)
(let ((part-no (bomattr-get-partno selitem)))
(if part-no part-no "")
)
)
(defun my-bom-attr-material (selitem)
(let ((material (bomattr-get-material selitem)))
(if material material "")
)
)
(docu::docu-unregister-bom-attr-all)
(docu::docu-register-bom-attr :attr-type "DOCU_BOM_QUANTITY"
:attr-title "Quantity"
:attr-display t
:attr-value-fnc nil) ;; system bom attribute
(docu::docu-register-bom-attr :attr-type "PART_NAME"
:attr-title "Part Name"
:attr-display t
:attr-value-fnc #'my-bom-attr-part-name)
(docu::docu-register-bom-attr :attr-type "PART_NO"
:attr-title "Part No"
:attr-display t
:attr-value-fnc #'my-bom-attr-part-no)
(docu::docu-register-bom-attr :attr-type "MATERIAL"
:attr-title "Material"
:attr-display t
:attr-value-fnc #'my-bom-attr-material)