;;----------------------------------------------------------------------------- ;; 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 ;;:size :third :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)) );;progn );;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." );;Material (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" );;Teilegruppe (Revision :range ("00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10") :title "Revision" :prompt-text "Revisionnsnummer" );;Revision (Benennung :value-type :string :proposals ("Aufspannplatte_AS" "Formplatte_DS" "Formplatte_AS" "Zwischenplatte" "Aw_Grundplatte" "Aw_Platte" "Aufspannplatte_AS" "Angussbuchse") :title "Benennung" :prompt-text "Teilebenennung eingeben max. 26" );;Benennung (Pos :value-type :string :title "Pos. Nr." :prompt-text "Positionsnummer eingeben." );;Pos (Menge :value-type :string :proposals ("1" "2" "3" "4" "3/1" "6") :title "Menge" :prompt-text "Menge eingeben" );;Menge (Fertigmasse_Bestellnummer :value-type :string :title "Masse." :prompt-text "Fertigmasse oder Bestellnummer eingeben" );;Fertigmasse_Bestellnummer );;Variables :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" "Name" "???" 'my-special-username) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Datum" "???" 'my-tr-get-date) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Teilename" "???" 'my-tr-get-Teilename) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Material" "???" 'my-tr-get-Material) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Teilegruppe" "???" 'my-tr-get-Teilegruppe) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Revision" "???" 'my-tr-get-Revision) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Benennung" "???" 'my-tr-get-Benennung) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Pos" "???" 'my-tr-get-Pos) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Menge" "???" 'my-tr-get-Menge) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Fertigmasse" "???" 'my-tr-get-Fertigmasse_Bestellnummer) (DOCU::DOCU-REGISTER-TR-TYPE "H&K" "Teilenummer" "???" 'my-tr-get-Teilenummer) ;; Datum zuordnen (defun my-tr-get-date () (multiple-value-bind (sec min hour day month year) (decode-universal-time (get-universal-time)) (declare (ignore sec) (ignore min) (ignore hour)) (format nil "~2,'Od.~2,'Od.~A" day month year))) ;;Username zuordnen (defun my-special-username() (sd-sys-getenv"USERNAME")) ;; Teileinfo zuordnen (defun my-tr-get-Teilename() (setq SHEET_TEXT1 (OLI::sd-inq-obj-basename (OLI::SD-INQ-CURR-PART)))) (AM_TEXT_REFERENCE :tr_update) (defun my-tr-get-Material() (setq SHEET_TEXT1 (bomattr-get-Material (OLI::SD-INQ-CURR-PART)))) (AM_TEXT_REFERENCE :tr_update) (defun my-tr-get-Teilegruppe() (setq SHEET_TEXT1 (bomattr-get-Teilegruppe (OLI::SD-INQ-CURR-PART)))) (AM_TEXT_REFERENCE :tr_update) (defun my-tr-get-Revision() (setq SHEET_TEXT1 (bomattr-get-Revision (OLI::SD-INQ-CURR-PART)))) (AM_TEXT_REFERENCE :tr_update) (defun my-tr-get-Benennung() (setq SHEET_TEXT1 (bomattr-get-Benennung (OLI::SD-INQ-CURR-PART)))) (AM_TEXT_REFERENCE :tr_update) (defun my-tr-get-Pos() (setq SHEET_TEXT1 (bomattr-get-Pos (OLI::SD-INQ-CURR-PART)))) (AM_TEXT_REFERENCE :tr_update) (defun my-tr-get-Menge() (setq SHEET_TEXT1 (bomattr-get-Menge (OLI::SD-INQ-CURR-PART)))) (AM_TEXT_REFERENCE :tr_update) (defun my-tr-get-Teilenummer() (setq SHEET_TEXT1 (my-tr-get-Teilename)) ;;(setq SHEET_TEXT2 (bomattr-get-Revision (OLI::SD-INQ-CURR-PART))) ;;(setq SHEET_TEXT3 (bomattr-get-Revision (OLI::SD-INQ-CURR-PART))) ;;(setq SHEET_TEXT4 (APPEND SHEET_TEXT2 SHEET_TEXT3)) ;;(setq SHEET_TEXT5 (cons SHEET_TEXT4 SHEET_TEXT3)) );;ende defun my -tr-get-Teilenummer (AM_TEXT_REFERENCE :tr_update) (defun my-tr-get-Fertigmasse_Bestellnummer() (setq SHEET_TEXT1 (bomattr-get-Fertigmasse_Bestellnummer (OLI::SD-INQ-CURR-PART)))) (AM_TEXT_REFERENCE :tr_update) ;;(docu::docu-update-tr-group "H&K") ;;(DOCU-UPDATE-TR-GROUP "H&K") ;;(DOCU-UPDATE-bom-attr-Teilenummer "Teilenummer") ;; (display(docu::docu_inq_drawing_number_text)) ;; (display('docu::docu_my-special-bom-attr-Menge))