Community Tip - Learn all about PTC Community Badges. Engage with PTC and see how many you can earn! X
This is reference to the previous thread that helped me solve with I was trying to do at the time, but am now having issues with: https://community.ptc.com/t5/3D-Part-Assembly-Design/Hiding-specified-value-in-a-BOM/m-p/730146#M119621
I'm using the following relation:
IF asm_mbr_cagecode == "2233"
my_cagecode = " "
ELSE
my_cagecode = asm_mbr_cagecode
ENDIF
and have &rpt.rel.my_cagecode in the table column.
I have also added a relation to display the quanities of bulk items as AR (as required) using the following:
IF asm_mbr_type == "BULK ITEM"
qty = "AR"
ELSE
qty = rpt_qty
ENDIF
while changing the QTY column to &rpt.rel.qty.
When I have both sets of code in my relations, nearly all of the quantities update as they should but a handful of them will have blanked quantities and cage codes now. If I remove the first relation for the cage code then it fixes all of the broken quantities. For some reason the two relations are conflicting with each other it seems. And this issue is only happening to certain pieces of hardware that happen to have family tables my Configuration Management team has established in PDM.
Solved! Go to Solution.
Weird behavior occurs if the parameter that the IF statement is looking for does not exist on one or more of the items in the repeat region.
Say for example that you imported a part from another organization that does not assign cagecode or type parameters to their .prt files. When your repeat region looks for those parameters in the part and doesn't find them, it causes unusual behavior.
Have you tried a nested loop.
This is one that I developed for "half" quantity of parts
:
IF asm_mbr_pn == "9594"
NEWQTY = "0.5"
ELSE
IF asm_mbr_pn == "9556"
NEWQTY = "0.5"
ELSE
IF asm_mbr_pn == "9151"
NEWQTY = "0.5"
ELSE
IF asm_mbr_pn == "9117"
NEWQTY = "0.5"
ELSE
IF asm_mbr_pn == "9158"
NEWQTY = "0.5"
ELSE
IF asm_mbr_pn == "9165"
NEWQTY = "0.5"
ELSE
IF asm_mbr_pn == "9588"
NEWQTY = "0.5"
ELSE
IF asm_mbr_pn == "9587"
NEWQTY = "1"
ELSE
NEWQTY = rpt_qty
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
Yikes! 😉
I would start with an EXISTS function, to check if the required parameter is present, and I would also use the OR operator (|) to check multiple conditions...
It's also much easier to expand this code 🙂
IF EXISTS("asm_mbr_pn")
IF \
asm_mbr_pn == "9594" | \
asm_mbr_pn == "9556" | \
asm_mbr_pn == "9151" | \
asm_mbr_pn == "9117" | \
asm_mbr_pn == "9158" | \
asm_mbr_pn == "9165" | \
asm_mbr_pn == "9588"
NEWQTY = "0.5"
ELSE
IF \
asm_mbr_pn == "9587"
NEWQTY = "1"
ELSE
NEWQTY = rpt_qty
ENDIF
ENDIF
ELSE
NEWQTY = rpt_qty
ENDIF
Cage codes are more than 4 characters long. Are you using extract by any chance?
If so the problem is likely that there is a NULL response when trying to extract 4 characters from a string that has less than 4 characters. Creo returns this NULL as a blank response.
To get around this you check the string length first before using the extract function. IE:
if string_length(extract_parameter)>3
parameter = extract(extract_parameter,1,4)
endif
I should have realized that my placeholder cagecode I used in my example was only 4 digits.. all of the cagecodes in my BOM are 5 digits and my actual relation represents that.
I am now looking through and noticing that the parts in my BOM experiencing these issues don't have a 'CAGECODE' parameter. How can I deal with this in my relation? Some of these parts (hardware primarily) I don't have the privilege to modify and add a parameter.
As others sort of alluded to, if there is any error in the relations evaluation for that one row, you will get an empty cell. Essentially the entire relations statement is independently evaluated for each row of the table.
I just noticed that these issues are a result of the parameter missing from these parts entirely. What can I include in my relation to avoid this?
Weird behavior occurs if the parameter that the IF statement is looking for does not exist on one or more of the items in the repeat region.
Say for example that you imported a part from another organization that does not assign cagecode or type parameters to their .prt files. When your repeat region looks for those parameters in the part and doesn't find them, it causes unusual behavior.
This was exactly the issue, and I was able to come up with the solution on my own:
IF exists("asm_mbr_cagecode")
IF asm_mbr_cagecode == "12345"
my_cagecode = " "
ELSE
my_cagecode = asm_mbr_cagecode
ENDIF
ENDIF
That's the solution I posted 5 days ago...I'm glad you figured it out yourself as well 😊