Wednesday 6 January 2016

iLogic to sort Parts List

A few years ago I posted some iLogic code to update and sort the BOM.

This proved rather troublesome, and never really worked for me, so I decided to do it via the detail drawing.  This works MUCH better.

The following is for my environment only, but I am sure you can adapt this for your own needs.

I have a few extra fields in my parts and assemblies, one of which is a custom parameter named "TYPE"

Notes on the iProperty fields: 

"STOCK NUMBER" = Area and/or size of component, E.G "100 x 50 x 5 x 6000 RHS"
"COST CENTER" = Broad based item type E.G. 'TUBE' or 'PLATE'
"TYPE" = More precise item type E.G. 'SHS' or 'RHS' or 'Cleat' etc

Prerequisites: 

1: In order for the code to function correctly, the Parts list must contain the fields in question.



Note how the column width has been set to "1" this "hides" the column from view.



2: There is a Radiobox, true false check. This is applicable for the times you have more than one parts list present on your drawing. Once again this is due to my environment, where my marking plan will have a Structured parts list for item making via balloons as well as the itemised parts list. I will sometimes have a third parts list containing fasteners only.

This section can be removed. Comment out the fist section of the sort. (From the "If True" up to and including the "else" statement, don't forget to comment out the "End if" as well )

TIPS and Caveats

1: I have found the best way to maintain the GA partslist/BOM is to have a separate drawing containing the GA and UNFILTERED Partslist. This one becomes god, and any other GA drawings containing the partlist get sorted via item number only.

2: Sub Assemblies work well with this code, and you don't need to have a separate drawing for management. you will find that the drawings become more consistent and predictable.

3: I have labeled my Fasteners with a 'z'. this forces them to the bottom of my parts list.


This process also forces you to manage and maintain a healthy BOM.
Don't forget, this writes back and updates the Assembly.

The Code:


'start of iLogic code----------------------------------------------------------------------------------
'sort parts list
oBOM = InputRadioBox("Parts List QTY", "2", "1", oBOM, Title := "PartsList Value")

If oBOM=True Then
On Error Resume Next
Dim oDrawDoc As DrawingDocument
oDrawDoc = ThisApplication.ActiveDocument

Dim oPartsList1 As PartsList
oPartsList1 = oDrawDoc.ActiveSheet.PartsLists.Item(2)
oPartsList1.Sort("COST CENTER",1,"TYPE", 1, "STOCK NUMBER", 1)
oPartsList1.Renumber
oPartsList1.SaveItemOverridesToBOM

Else

On Error Resume Next
Dim oDrawDoc As DrawingDocument
oDrawDoc = ThisApplication.ActiveDocument

Dim oPartsList1 As PartsList
oPartsList1 = oDrawDoc.ActiveSheet.PartsLists.Item(1)
oPartsList1.Sort("COST CENTER",1,"TYPE", 1, "STOCK NUMBER", 1)
oPartsList1.Renumber
oPartsList1.SaveItemOverridesToBOM
End If

'End  of iLogic code.

The result: 




4 comments:

  1. Is it possible to sort the Length column. As for now Inventor sorts on the first number and not the full length. 1203 comes before 204 due to the "1" in the begining.

    ReplyDelete
    Replies
    1. Hi
      I have had a look and to be honest, I am not sure if it is possible. I will see if there is a work around, but by default, the sort does not do what you require.

      Delete
    2. Hi

      After digging a little more.
      You need to Format the "LENGTH" column and "Apply Units Formatting" to the Length column.

      Setup the column as you prefer, I tested it with Unit type of "Length" and "unitless" both worked correctly.

      The only catch, In my example above, I overrode the blank fields with a '-'
      This will generate an error, so you either need to clear the cell, (Delete the contents, or place a zero in the cell)

      This will fix your problem and sort the numbers correctly.

      Delete