Возможности управления данными > Управление конфигурируемыми изделиями > Разработка расширенной логики выбора для конфигурируемых узлов > Примеры и рекомендации по использованию расширенной логики выбора > Создание модульных конфигурируемых структур изделий > Конструирование модульной структуры изделия
  
Конструирование модульной структуры изделия
Многие изделия имеют несколько подсистем с собственными наборами необязательных элементов. В некоторых случаях опции для каждой подсистемы обрабатываются независимо системой в логической прогрессии. Однако в других случаях может потребоваться, чтобы на доступные опции в одной подсистеме влияли опции, выбранные в других подсистемах.
Например, рассмотрим металлическую витрину: доступно несколько различных моделей с разнообразными опциями показа, отделки и освещения. В зависимости от выбранной модели витрины, доступные опции показа, отделки и элементов освещения могут различаться.
В случае простой структуры изделия, содержащей только несколько модулей и ограниченный набор опций, можно относительно легко создать и проверить подходящую конфигурируемую структуру изделия. Однако если структура изделия содержит пять модулей, каждый из которых имеет шесть возможных опций для выбора, общее число перестановок (в данном случае 5 x 6, или 30) может быть слишком большим.
Предлагаемый подход состоит в упорядочении структуры изделия узла в конфигурируемые узлы, как показано на следующем рисунке.
В этом примере предполагается, что доступно пять моделей витрины: с Модель_01 по Модель_05, а некоторые из опций применимы только для определенных моделей, как показано в следующей таблице.
Модель Display Case
Trim Options
Lighting Options
Опции показа
Model_01
Twin Standard
Single Double
Shelf, Ventilated Shelf, Solid
Model_02
Standard Deluxe
Double, Triple
Shelf, Ventilated Shelf, Solid
Model_03
Twin Standard Deluxe
Single Double Triple
Shelf, Ventilated Rack
Model_04
Twin Standard Deluxe
Single Double Triple
Shelf, Ventilated Shelf, Solid Rack
Model_05
Twin Standard Deluxe
Single Double Triple
Shelf, Ventilated Shelf, Solid Rack
Следующий шаг: установить подходящие логические элементы в модульной манере так, чтобы каждый модуль опций можно было независимо протестировать, а затем интегрировать в полную структуру изделия. Например, рассмотрим логику для узла Trim Options. Для этого узла требуются следующие четыре параметра:
askModel
String, Input Parameter
Prompt = “(TRIM OPTIONS) Select the desired display case model”
Constraint:“Model_01”, “Model_02”, “Model_03”, “Model_04”, “Model_05”
“hide when driven” = true
useStandard
Boolean, non-input parameter
Добавляется в опцию включения на вкладке Использует конфигурируемого узла Display Case для детали Bumper, Standard
useTwin
Boolean, non-input parameter
Добавляется в опцию включения на вкладке Использует конфигурируемого отображаемого узла для детали Bumper, Twin
useDeluxe
Boolean, non-input parameter
Добавляется в опцию включения на вкладке Использует конфигурируемого отображаемого узла для детали Bumper, Deluxe
Далее требуется таблица вариантов, например pickTrim, чтобы управлять применимостью опций отделки для каждой модели отображаемого варианта, как показано в следующей таблице.
Модель Display Case
Trim Options
Lighting Options
Опции показа
Model_03
TwinStandardDeluxe
SingleDoubleTriple
Shelf, Ventilated Rack
Model_04
TwinStandardDeluxe
SingleDoubleTriple
Shelf, Ventilated Shelf, Solid Rack
Model_05
TwinStandardDeluxe
SingleDoubleTriple
Shelf, Ventilated Shelf, Solid Rack
Следующий шаг: установить подходящие логические элементы в модульной манере так, чтобы каждый модуль опций можно было независимо протестировать, а затем интегрировать в полную структуру изделия. Например, рассмотрим логику для узла Trim Options. Для этого узла требуются следующие четыре параметра:
askModel
String, Input Parameter
Prompt = “(TRIM OPTIONS) Select the desired display case model”
Constraint:“Model_01”, “Model_02”, “Model_03”, “Model_04”, “Model_05”
“hide when driven” = true
useStandard
Boolean, non-input parameter
Добавляется в опцию включения на вкладке "Использует" конфигурируемого узла Display Case для детали Bumper, Standard
useTwin
Boolean, non-input parameter
Добавляется в опцию включения на вкладке Использует конфигурируемого отображаемого узла для детали Bumper, Twin
useDeluxe
Boolean, non-input parameter
Добавляется в опцию включения на вкладке Использует конфигурируемого отображаемого узла для детали Bumper, Deluxe
Далее требуется таблица вариантов, например pickTrim, чтобы управлять применимостью опций отделки для каждой модели отображаемого варианта, как показано в следующей таблице.
askModel
useStandard
useTwin
useDeluxe
Model_01
да
да
нет
Model_02
да
нет
да
Model_03
да
да
да
Model_04
да
да
да
Model_05
да
да
да
Эти логические выражения позволяют тестировать модуль опций отделки независимо, чтобы гарантировать, что все работает правильно.
* 
Если один и тот же подход используется для каждого из модулей, то пользователь будет запрашивать повторно, какая модель витрины требуется, что нежелательно. Поэтому после создания каждого из модулей и проверки правильности их работы необходимо их интегрировать.
Чтобы интегрировать модули, выполните следующие действия.
1. Создайте подходящий параметр для определения модели в конфигурируемом узле "Витрина" следующим образом:
askModel - строка, обязательный входной параметр
Prompt = “Select the desired display case model”
Constraint:“Model_01”, “Model_02”, “Model_03”, “Model_04”, “Model_05”
2. Установите эквивалентность между параметром askModel в конфигурируемом узле "Витрина" и всеми его потомками.
3. Удалите ограничения для каждого параметра askModel в каждом из модулей опций.
* 
Удаление этих ограничений необходимо во избежание конфликтов между конфигурируемым узлом верхнего уровня "Витрина" и конфигурируемыми узлами, входящими в каждый модуль.
4. Протестируйте завершенную конфигурируемую структуру изделия. Поскольку вы уже тестировали каждый из узлов, нужно только проверить, что значение askModel, введенное пользователем в конфигурируемом узле верхнего уровня "Витрина", будет правильно скопировано в каждый из узлов.
* 
При отображении дерева ведомости материалов на странице "Задать параметры" окна Настройка и нажатии кнопки Применить можно быстро увидеть, скопировано ли текущее значение askModel из конфигурируемого узла "Витрина" в каждый из узлов.