(in-package :custom) (use-package :oli) (sd-defdialog 'exemplare_suchen :dialog-title "Exemplare in Baugruppe" :toolbox-button t :variables '( (Quelle :modifies nil :initial-value nil :value-type :assembly :prompt-text "Baugruppe angeben" :title "Baugruppe" ) ) ;end variables :ok-action '(progn (let (stuecklist_liste nummern_liste liste_exemplar tester_exemplar tester_einzelteil tester_bezeichnung tester_objekt objekt modellnummer) (setf objekt (sd-inq-obj-children Quelle)) (loop for tester_objekt in objekt do (when (or (sd-inq-assembly-p tester_objekt) (sd-inq-part-p tester_objekt)) (setf liste_exemplar (cons (list (sd-inq-obj-contents-name tester_objekt)) liste_exemplar)) (setf nummern_liste (cons (list (sd-inq-obj-contents-name tester_objekt)) nummern_liste)) (setf stuecklist_liste (cons (list (sd-inq-obj-contents-name tester_objekt) (sd-inq-obj-basename tester_objekt)) stuecklist_liste)) ) ) (setq liste_exemplar (remove-duplicates liste_exemplar :test #'equal)) ;Exemplarliste erstellen und Duplikat löschen (setq liste_exemplar (sort liste_exemplar #'string-lessp :key #'car)) ;Liste Sortiere (with-open-file (out "c:\\Temp\\Stueckliste.csv" :direction :output :external-format :uft-8) ;In Datei schreiben ;;; Überschrift der Rubriken in Datei schreiben ;;; (princ (format nil "Modellnummer~aBezeichnung~aMenge~aSME~%" #\TAB #\TAB #\TAB) out) ;;; loop loop und nochmal loop ;;; ;;; Loop 1 Einzelteile der liste_exemplar abarbeiten ;;; Loop 2 Einzelteile zählen - wie oft sie in nummern_liste vorhanden sind ;;; Loop 3 Einzelteile in stuecklist_liste suchen - Bezeichung kopieren (loop for tester_exemplar in liste_exemplar do (setq Teile_anz 0) (loop for tester_einzelteil in nummern_liste do (when (equal tester_exemplar tester_einzelteil) (setq Teile_anz (+ Teile_anz 1)) (loop for tester_bezeichnung in stuecklist_liste do (when (equal (first tester_bezeichnung) (first tester_exemplar)) (setq teile_benennung (second tester_bezeichnung)) (return) ) ) ;end loop3 ) ) ;end loop2 ;;; Nicht gefundene Modelnamen NIL in ??? umwandeln ;;; (unless (first tester_exemplar) (setq tester_exemplar (list "???" "???")) (setq teile_benennung "Ohne Modellname -> Untrennbar?")) ;;; Unterstriche ersetzen;;; (setq modellnummer (sd-string-replace (first tester_exemplar) "_" " ")) (setq teile_benennung (sd-string-replace teile_benennung "_" " ")) ;;; In Datei schreiben ;;; (princ (format nil "~a~a~a~a~a~aStk~%" modellnummer #\TAB teile_benennung #\TAB teile_anz #\TAB) out) ) ;end loop1 ) ;end with-open-file ) ;end let ;;; Teileliste in Excel öffnen ;;; (oli:sd-display-url (format nil "c:\\Temp\\Stueckliste.csv")) ) ;end Ok-Action ) ;end sd-defdialog