View Single Post
  #6  
Old 01-03-2016, 11:21 PM
ssusana ssusana is offline
Registered User
 
Join Date: Aug 2004
Location: Italy
Posts: 60
Re: Edit and sort BOM table

Shaba,
thi is my code to sort the BOM by "codice", "fornitore" and "tipo".
the result in the attachment.

Code:
(defun ordinaBOM ()
    (sd-hide-display-table "AM-BOM-DATA-DTAB")

    (AM_BOM_NUMBERS :clear)  ;azzera tutte le posizioni
    (setq ltab (sd-get-display-table-logical-table "AM-BOM-DATA-DTAB"))
    (setq row-number (sd-get-logical-table-number-of-rows ltab))
    (setq i 0)
    (loop
	(setq POS_NO           (sd-Read-logical-table-cell ltab :row 0 :column :DOCU_BOM_POS_NO))
	(when (sd-string/= POS_NO "") (return) )

	(setq rowtableDB       (sd-read-logical-table-row ltab :row 0))
	(setq ENTRY_ID         (sd-Read-logical-table-cell ltab :row 0 :column :DOCU_BOM_ENTRY_ID )) 

	 (setq lengrow (length rowtableDB))
	 (dotimes (j lengrow)
		  (if (string= (nth j rowtableDB) ":PART_CODE ")                     (setq CODICE           (nth (+ j 1) rowtableDB)))
		  (if (string= (nth j rowtableDB) ":bom3d-Fornitore-attr-cont ")     (setq FORNITORE        (nth (+ j 1) rowtableDB)))
		  (if (string= (nth j rowtableDB) ":bom3d-classe-merc-attr-cont ")   (setq TIPO             (nth (+ j 1) rowtableDB)))
      ) 
	  (if (not FORNITORE) (setq FORNITORE ""))

         
          (COND 
            ((OR (and  (sd-string/= (sd-string-trim FORNITORE) "") (sd-string= (sd-string-trim Tipo) "XXX"))       
                 (sd-string= (sd-string-trim Tipo) "COM") )                                                    (AM_POS_CHG_NO :BOM_ENTRY_ID ENTRY_ID :new_pos_no (format nil "A ~a~a~a" (SD-STRING-UPCASE (sd-string-trim FORNITORE))   (SD-STRING-UPCASE (sd-string-trim CODICE)) i )))  
            ((AND (sd-string/= (sd-string-trim CODICE) "") (sd-string= (sd-string-trim Tipo) "MEC"))           (AM_POS_CHG_NO :BOM_ENTRY_ID ENTRY_ID :new_pos_no (format nil "C ~a" CODICE)))	
            (T 												       (AM_POS_CHG_NO :BOM_ENTRY_ID ENTRY_ID :new_pos_no (format nil "X ~a" i )))
;           (T 											       	       (AM_POS_CHG_NO :BOM_ENTRY_ID ENTRY_ID :new_pos_no (format nil "D ~a~a~a" (SD-STRING-UPCASE (sd-string-trim DESCRIZIONE)) (SD-STRING-UPCASE (sd-string-trim PARTE)) i )))            
          ) ;COND

    (incf i)
    ) ;endloop
    
    (AM_BOM_NUMBERS :by_step :on :by_step_start 1 :by_step_incr 1)

    (setq i (- row-number 1))
    (loop
        (when (< i 0) (return) )
	 (DISPLAY (format nil "~A gia' presente!" CODICE))
         (setq POS_NO           (sd-Read-logical-table-cell ltab :row i :column :DOCU_BOM_POS_NO))
         (setq ENTRY_ID         (sd-Read-logical-table-cell ltab :row i :column :DOCU_BOM_ENTRY_ID ))         

 	 (setq rowtableDB  (sd-read-logical-table-row ltab :row i))

	 (setq lengrow (length rowtableDB))
	 (dotimes (j lengrow)
		  (if (string= (nth j rowtableDB) ":PART_CODE ")                     (setq CODICE           (nth (+ j 1) rowtableDB)))
		  (if (string= (nth j rowtableDB) ":bom3d-Fornitore-attr-cont ")     (setq FORNITORE        (nth (+ j 1) rowtableDB)))
		  (if (string= (nth j rowtableDB) ":bom3d-classe-merc-attr-cont ")   (setq TIPO             (nth (+ j 1) rowtableDB)))
      )
      (if (not FORNITORE) (setq FORNITORE ""))	  
     
          (COND 
            ((sd-string= (sd-string-trim Tipo) "ASS")                         (AM_POS_CHG_NO :BOM_ENTRY_ID ENTRY_ID :new_pos_no (format nil "~a" CODICE)))	
            ((AND (sd-string= (sd-string-trim FORNITORE) "") 
            		(sd-string/= (sd-string-trim Tipo) "MEC"))            (AM_POS_CHG_NO :BOM_ENTRY_ID ENTRY_ID :new_pos_no (format nil "X~a" POS_NO)))
            ((sd-string= (sd-string-trim Tipo) "MEC")                         (AM_POS_CHG_NO :BOM_ENTRY_ID ENTRY_ID :new_pos_no (format nil "~a" CODICE)))	
          ) ;COND

        (decf i)
    )

    (display :clear-hide)

)
Attached Thumbnails
Click image for larger version

Name:	bom.jpg
Views:	691
Size:	157.4 KB
ID:	1929  
Reply With Quote