cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - Stay updated on what is happening on the PTC Community by subscribing to PTC Community Announcements. X

How to drive Quantity of an item in a BOM based on Options & Variants rules?

Prabhu
10-Marble

How to drive Quantity of an item in a BOM based on Options & Variants rules?

Hi,

With Options & Variants capability in windchill 9.1, how we can build the rules (Parameters, expressions, constraints, case tables, etc.,) to drive the quantity of an item under an Advanced Configurable Part?

Example:

Consider the below BOM:

Top_Part (Adv Config Part)
Part1 (for option1) Qty - 1
Part2 (for option2) Qty - 2
Part3 (for both options) Qty - 2 Meters for Option1 and 5 Meters for Option2

While configuring, selecting option1 should result in:

Top_Part
Part1 Qty - 1
Part3 Qty - 2 Meters

Selecting option2 should result in:

Top_Part
Part2 Qty - 2
Part3 Qty - 5 Meters

Can you please help in this?

Thanks,
Prabhakaran V.

ACCEPTED SOLUTION

Accepted Solutions

Check out "Top_Part" and open it into PSE.

In PSE, select "Top_Part" and go to the Uses tab.

Use the "Inclusion Option" and "Quantity Option" columns for each row (child part).

The "Inclusion Option" is a boolean - if true, then the child is included in the variant, if false, then the child is not included in the variant.

The "Quantity Option" is either a constant (e.g. 1, 2, 5, etc.) or a numeric parameter (e.g. int or float).

If the child is included in the variant, its quantity is the value of "Quantity Option".

For your example

1. Create String parameter "option" with constraint list values "option1" and "option2"

2. add a page break

3. Create a boolean parameter "hasPart1" and value specified by "expression" with default expression "option1".equals(option).

4. On the "uses" tab for "part1" set the "inclusion option" to "hasPart1" and set the "quantity option" to 1

Now, when you generate a variant, if "option" is "option1" then the variant will have Part1 with quantity 1.

If "option" is "option2" then Part1 will not be included.

5. Create a boolean parameter "hasPart2" with expression "option2".equals(option).

6. On the "uses" tab for "part2" set the "inclusion option" to "hasPart2" and "quantity option" to 2

Now, when you generate a variant, if "option" is "option2" then the variant will have Part2 with quantity 2.

If "option" is "option1" then Part2 will not be included.

7. Create an integer parameter "qtyPart3" with constraint list values 2 and 5

8. On the uses tab for "part3" set the "quantity option" to "qtyPart3" and set the "unit" to "meters"

9. On the Constraints tab, create a case table "qtyPart3". Select parameters "option" and "qtyPart3" as columns. Add a row with values {"option1", 2} and {"option2", 5}.

Now when you generate a variant, if "option" is "option1", the qtyPart3 is 2 and the variant has Part3 with quantity 2 meters. If "option" is "option2" then qtyPart3 is 5 and the variant has Part3 with quantity 5 meters.

That should do it.

View solution in original post

5 REPLIES 5

Check out "Top_Part" and open it into PSE.

In PSE, select "Top_Part" and go to the Uses tab.

Use the "Inclusion Option" and "Quantity Option" columns for each row (child part).

The "Inclusion Option" is a boolean - if true, then the child is included in the variant, if false, then the child is not included in the variant.

The "Quantity Option" is either a constant (e.g. 1, 2, 5, etc.) or a numeric parameter (e.g. int or float).

If the child is included in the variant, its quantity is the value of "Quantity Option".

For your example

1. Create String parameter "option" with constraint list values "option1" and "option2"

2. add a page break

3. Create a boolean parameter "hasPart1" and value specified by "expression" with default expression "option1".equals(option).

4. On the "uses" tab for "part1" set the "inclusion option" to "hasPart1" and set the "quantity option" to 1

Now, when you generate a variant, if "option" is "option1" then the variant will have Part1 with quantity 1.

If "option" is "option2" then Part1 will not be included.

5. Create a boolean parameter "hasPart2" with expression "option2".equals(option).

6. On the "uses" tab for "part2" set the "inclusion option" to "hasPart2" and "quantity option" to 2

Now, when you generate a variant, if "option" is "option2" then the variant will have Part2 with quantity 2.

If "option" is "option1" then Part2 will not be included.

7. Create an integer parameter "qtyPart3" with constraint list values 2 and 5

8. On the uses tab for "part3" set the "quantity option" to "qtyPart3" and set the "unit" to "meters"

9. On the Constraints tab, create a case table "qtyPart3". Select parameters "option" and "qtyPart3" as columns. Add a row with values {"option1", 2} and {"option2", 5}.

Now when you generate a variant, if "option" is "option1", the qtyPart3 is 2 and the variant has Part3 with quantity 2 meters. If "option" is "option2" then qtyPart3 is 5 and the variant has Part3 with quantity 5 meters.

That should do it.

Hi Patrick,

Works exactly as I wanted..!! Thanks a lot..!!

Now one more question - in create parameter section, what is the intention/purpose of the option "Map to attribute"? When I hit the browse button, the application takes me to a window that of type and attribute manager and am able to select an attribute. But beyond that am not able to use this feature further.

In 9.1, will we be able to use an attribute and its values of a WTPart to specify if a part should or should not included in a variant bom?

Taking the abov example, instead of defining option1 and option2 as part of parameter/casetable, let's say I give these values to one of the wtpart attribute to bom line items. Then, will be able to define rules in PSE, such that, bom line items are included/excluded based on this attribute and its value?

Thanks,

Prabhakaran V.

The "maps to attribute" button allows you to map a parameter to an "attribute definition". If a parameter is mapped to an attribute definition, when you generate a variant part, an IBA is set on the variant part with the value of the parameter. For example say you had a parameter "size" mapped to a String Attribute Definition "Size" and you set the value of "small" then the variant part would get an IBA that is an instanceof "Size" with value "small".

Variant parts are considered different if their IBAs or components (child parts) are different.

The advanced logic functionality works with parameters and constraints. If you want to use a value of a object in Windchill then you would have to write some code to read that value and put the value into a parameter.

Has there been syntax/functionality changes for 10.2 M030 from these instructions? Just trying to follow this with HELP context "Linking Advanced Logic Parameters with Options" with little or no success.

The goal would be:

  • Select one option/choice during structure filtering
    • Voltage/24V
  • extract that option/choice value to parameter
    • ParamVoltage=24V
  • deduct the Quantity Option from option/choice parameter value

I am trying to find a solution for a similar scenario but with a twist....  I have a number of possible choices that are permisible (and I can calculate the quantities - in fact some times hundreds). But there could be also choices that do not find a match in the case table.... In that case, the system just reports no solution.... and the whole thing stops.

 

What I would like to achive is that no match would be interpreted as qtyParam = 0, and therefore it will be elimitated by the filter..... So it is a kind of " in case of no match" make the whole thing "optional".

Announcements


Top Tags