;;----------------------------------------------------------------------------- ;; 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-Pos (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 "Stueckliste" :start-variable 'object :variables '( (OBJECT :value-type :part-assembly :modifies :contents :title "Teil" :prompt-text "Teil auswaehlen." :after-input (progn (setq Material (bomattr-get-Material object)) (setq Teilegruppe (bomattr-get-Teilegruppe object)) (setq Revision (bomattr-get-Revision object)) (setq Benennung (bomattr-get-Benennung object)) (setq Pos (bomattr-get-Pos object)) (setq Menge (bomattr-get-Menge object)) (setq Fertigmasse_Bestellnummer (bomattr-get-Fertigmasse_Bestellnummer object)) ) ) (Material :value-type :string :proposals ("1730" "2083" "2162" "2311" "2312" "2738" "2767" "Ampco" "Becu" "M390" "DME" "Ermeto" "Festo" "HASCO" "MS" "Profi Quick" "SANKYO" "Strack") :title "Material" :prompt-text "Material auswählen." ) (Teilegruppe :range ("41" "42" "43" "44" "45" "46" "47") :title "Teilegruppe" :prompt-text "41=Neuteil 42=Halbf_Teil 43=Fertigteil 44= Nacharb_Halbf_Teil 45=Zuk_Teil_m_Bearb. 46=Zuk_Teil_o_Bearb 47=Nacharb_Fertigteil" ) (Revision :value-type :string :range ("00" "01" "02" "03" "04" "05" "06") :title "Revision" :prompt-text "Revisionnsnummer" ) (Benennung :value-type :string :title "Benennung" :prompt-text " Teilebenennung eingeben max. 26" ) (Pos :value-type :string :title "Pos. Nr." :prompt-text "Positionsnummer eingeben." ) (Menge :value-type :string :proposals ("1" "2" "3" "4" "3/1" "6") :title "Menge" :prompt-text "Menge eingeben" ) (Fertigmasse_Bestellnummer :value-type :string :title "Masse." :prompt-text "Fertigmasse oder Bestellnummer eingeben" ) ) :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 ,Pos :Teilegruppe ,Teilegruppe :Benennung ,Benennung :Revision ,Revision :Menge ,Menge :Fertigmasse_Bestellnummer ,Fertigmasse_Bestellnummer ) ) ) ) ;;----------------------------------------------------------------------------- ;; 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-Teilegruppe (selitem) (let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR" :values :attachment :contents))) (if attr (getf attr :Teilegruppe) nil) ) ) (defun bomattr-get-Revision (selitem) (let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR" :values :attachment :contents))) (if attr (getf attr :Revision) nil) ) ) (defun bomattr-get-Benennung (selitem) (let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR" :values :attachment :contents))) (if attr (getf attr :Benennung) nil) ) ) (defun bomattr-get-Pos (selitem) (let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR" :values :attachment :contents))) (if attr (getf attr :part-number) nil) ) ) (defun bomattr-get-Menge (selitem) (let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR" :values :attachment :contents))) (if attr (getf attr :Menge) nil) ) ) (defun bomattr-get-Fertigmasse_Bestellnummer (selitem) (let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR" :values :attachment :contents))) (if attr (getf attr :Fertigmasse_Bestellnummer) 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-Pos selitem))) (if part-no part-no "") ) ) (defun my-bom-attr-Teilegruppe (selitem) (let ((Teilegruppe (bomattr-get-Teilegruppe selitem))) (if Teilegruppe Teilegruppe "") ) ) (defun my-bom-attr-Revision (selitem) (let ((Revision (bomattr-get-Revision selitem))) (if Revision Revision "") ) ) (defun my-bom-attr-Benennung (selitem) (let ((Benennung (bomattr-get-Benennung selitem))) (if Benennung Benennung "") ) ) (defun my-bom-attr-Material (selitem) (let ((Material (bomattr-get-Material selitem))) (if Material Material "") ) ) (defun my-bom-attr-Menge (selitem) (let ((Menge (bomattr-get-Menge selitem))) (if Menge Menge "") ) ) (defun my-bom-attr-Fertigmasse_Bestellnummer (selitem) (let ((Fertigmasse_Bestellnummer (bomattr-get-Fertigmasse_Bestellnummer selitem))) (if Fertigmasse_Bestellnummer Fertigmasse_Bestellnummer "") ) ) (docu::docu-unregister-bom-attr-all) (docu::docu-register-bom-attr :attr-type "Pos" :attr-title "Pos No" :attr-display t :attr-value-fnc #'my-bom-attr-part-no) (docu::docu-register-bom-attr :attr-type "Teilenummer" :attr-title "Teile Name" :attr-display t :attr-value-fnc #'my-bom-attr-part-name) (docu::docu-register-bom-attr :attr-type "Benennung" :attr-title "Benennung" :attr-display t :attr-value-fnc #'my-bom-attr-Benennung) (docu::docu-register-bom-attr :attr-type "Fertigmasse_Bestellnummer" :attr-title "Fertigmass / Bestellnummer" :attr-display t :attr-value-fnc #'my-bom-attr-Fertigmasse_Bestellnummer) (docu::docu-register-bom-attr :attr-type "Material" :attr-title "Material" :attr-display t :attr-value-fnc #'my-bom-attr-Material) (docu::docu-register-bom-attr :attr-type "Revision" :attr-title "Revision" :attr-display t :attr-value-fnc #'my-bom-attr-Revision) (docu::docu-register-bom-attr :attr-type "Teilegruppe" :attr-title "Teile-Gruppe" :attr-display t :attr-value-fnc #'my-bom-attr-Teilegruppe) (docu::docu-register-bom-attr :attr-type "Menge" :attr-title "Menge" :attr-display t :attr-value-fnc #'my-bom-attr-Menge) ;;(docu::docu-register-bom-attr :attr-type "DOCU_BOM_QUANTITY" ;; :attr-title "Quantity" ;; :attr-display t ;; :attr-value-fnc Nil) ;; system BOM attribute ;; Textverweise zuordnen (DOCU::DOCU-UNREGISTER-TR-GROUP "H&K") (DOCU::DOCU-REGISTER-TR-GROUP "H&K" "GLOBAL") (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Zeichnungsname" "???" 'DOCU::DOCU_INQ_DRAWING_NUMBER_TEXT) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Masstab" "???" 'DOCU::DOCU_INQ_CURR_SHEET_SCALE_TEXT) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Blatt_Name" "???" 'DOCU::DOCU-GET-CURRENT-SHEET-NAME) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Menge" "???" 'Hier soll die Menge zugewiesen werden))