Структура реальности
Понимание, объяснение и, в конечном итоге, структуризация реальности, данной нам в ощущениях, происходят через определение понятий и создание утверждений на их основе.
Понятия — это именованные группы некоторых сущностей, которые делятся на конкретные и абстрактные. Конкретные понятия возникают при обозначении элементарных сущностей обозреваемой предметной области, а абстрактные — в результате работы с понятиями.
По своей сути каждое слово естественного языка обозначает некоторое понятие. Например, конкретными понятиями могут быть Небо, Земля, Камень (конкретный) и т. п. Абстрактные понятия возникают при обобщении и ассоциации других понятий. Так собирательное понятие Фрукт – это обобщение понятий Яблоко, Груша, Слива, Банан, и т. д. А разделительное понятие Дерево есть результат ассоциации таких понятий как Крона, Ствол, Корень и т. п.
Обратите внимание на то, что одно и то же понятие может по-разному выражаться в разных контекстах. Например, понятие Дерево может рассматриваться не как ассоциация, а как обобщение различных пород деревьев. А понятие Фрукт обобщать фрукты, произрастающие в средней полосе России (исключаем бананы и другую экзотику). Отсюда, по моему мнению, и происходит вариативность отражения окружающего мира в нашем сознании. Далее я покажу, как понятийный подход позволяет эффективно управлять конфигурацией изделий.
Управление конфигурацией
Из понятийных представлений следует, что состав любой сущности, будь то природный объект или артефакт (искусственный объект) состоит из частей трех видов:
элементарная неделимая часть, описываемая конкретным понятием (будем обозначать индивидуальным именем или уникальным идентификатором);
составная часть, описываемая понятием-ассоциацией (будем обозначать символом &, который соответствует союзу И при перечислении составляющих частей);
вариативная часть, описываемая понятием-обобщением (будем обозначать символом V, который соответствует союзу ИЛИ при перечислении составляющих частей).
Для примера рассмотрим конфигурацию такого всем известного изделия, как персональный компьютер.
Неделимые и неконфигурируемые части компьютера обозначаем конкретными понятиями, например, процессор, память, жёсткий диск и т.д.
Понятие-обобщение (V) возникает при объединении нескольких обобщаемых понятий. При конфигурировании понятие-обобщение собирает все возможные исполнения изделия в одно итоговое, конфигурируемое путем выбора одного из перечисленных исполнений. Например, основная память компьютера объединяет исполнения, отличающиеся количеством и типом линеек памяти.
Понятие-ассоциация (&) возникает при соединении двух и более связанных понятий в одно целое. Однако не все комбинации сущностей этих понятий могут быть включены в состав понятия-ассоциации. Ограничение отражает индивидуальные связи между сущностями. Пример понятия-ассоциации — системный блок компьютера, включающий корпус, материнскую плату, блок питания, блок охлаждения, процессор, основную и дисковую память и т.д. Не все комбинации этих компонентов могут работать вместе.
Различные конфигурации одного и того же изделия или его составной части выразим перечислением составляющих с использованием союза ИЛИ (понятием-обобщением), а неизменный состав изделия или его составной части – перечислением составляющих с использованием союза И (понятием-ассоциацией). Не раскрываемыми частями в этом случае будут те составляющие, которые уже не подлежать конфигурированию.
В итоге имеем вариативную структуру изделия, на которой осталось задать формулы для вычисления характеристик сконфигурированного изделия как в электронной таблице.
Конфигуратор изделий
Для проверки управления конфигурацией на основе понятийного подхода мною была разработана программа-конфигуратор. Конфигуратор предназначен для создания и управления структурой изделий на всех этапах жизненного цикла.
На практике оказалось, большая часть данных, входящих в полученную структуру изделия, – это данные о стандартных и покупных изделиях (товарах), соответствующих неделимым и неконфигурируемым составляющим. Как известно, данные о товарах хранятся в корпоративных учетных информационных системах. По этой причине место размещения конфигуратора должно быть «недалеко» от таких информационных систем.
Разработанный конфигуратор — это отдельное расширение для 1С: Предприятие, работающее в двух режимах: конфигурации изделия и спецификации продукта (спасибо компании «Аквариус» за возможность показать примеры и скриншоты конфигуратора).
В режиме конфигурации изделия решаются следующие задачи:
ввод и редактирование электронной структуры изделия с учетом его состава, исполнений и опциональных составляющих;
привязка комплектующих изделий к верифицированным номенклатурным товарам из корпоративной информационной системы;
установка ограничений на совместное использование составляющих;
определение вычисляемых характеристик изделия и его составляющих.
На рисунке ниже представлен пример электронной структуры изделия в виде дерева. Каждый узел дерева имеет уникальный идентификатор – номер у правой границы окна.
![Электронная структура изделий Электронная структура изделий](https://habrastorage.org/getpro/habr/upload_files/904/ec5/6b7/904ec56b7cc517d6c50ab37729fe8f08.png)
Электронная структура изделия состоит из узлов групп и элементов различных типов:
![](https://habrastorage.org/getpro/habr/upload_files/56f/de1/e66/56fde1e66efd45b3594027151b5b3133.png)
Для узлов типа «продукт» имеется возможность получения спецификации и заказа на сборку изделия. Остальные узлы являются вспомогательными и не специфицируются как законченные изделия. Управление структурой осуществляется через команды в контекстном меню узлов. При выполнении команд создания или изменения узла открывается форма редактирования группы или элемента, как на рисунках ниже.
![Форма группы Форма группы](https://habrastorage.org/getpro/habr/upload_files/496/aea/493/496aea49313d3643a61998677a21cc4d.png)
![Форма элемента Форма элемента](https://habrastorage.org/getpro/habr/upload_files/2c6/bbe/02c/2c6bbe02c8e6aa3aed46bbbd82106ccd.png)
Для валидации узла (группы или элемента) предназначено специальное поле «Валидация». Формула в поле «Валидация» задает вычисляемое выражение, ложное значение которого соответствует невалидной конфигурации изделия или его части.
Свойства группы и элемента выражаются константой, значение которой задает потребительские свойства и может быть изменено в процессе спецификации продукта, или формулой, значение которой зависит от конфигурации изделия и вычисляется в процессе спецификации продукта.
Формула начинается со знака «равно» и задает значение свойства с помощью выражений, в которые могут входить значения других свойств. Синтаксис и семантика выражения такие, как в языках программирования высокого уровня.
Для доступа к свойствам узлов используются специальные функции:
Узел(X) извлекает логическое значение выбора узла с номером X в состав продукта;
Узел(X, Y) извлекает значение свойства с именем Y узла с номером X;
Сумма(X, Y) вычисляет сумму значений свойств с именем Y у выбранных узлов, вложенных в узел X;
Конкат(X, Y) вычисляет конкатенацию текстовых значений свойств с именем Y у выбранных узлов, вложенных в узел X;
Тест(X, Y) возвращает логическое значение X и, если оно ложно, то генерирует сообщение об ошибке с описанием Y.
В режиме конфигурации формулы вводятся и редактируются, а в режиме спецификации – вычисляются и отображаются как значения соответствующих свойств.
Спецификация продукта
Для перехода в режим спецификации необходимо выбрать узел с продуктом и нажать кнопку «Спецификация». В режиме спецификации продукта решаются следующие задачи:
спецификация состава продукта путем выбора исполнений составляющих его изделий;
валидация продукта и выбранных составляющих изделий путем проверки выполнимости заданных ранее ограничений;
вычисление технических характеристик продукта и его составляющих;
экспорт (импорт) файла спецификации.
На рисунке ниже показана форма спецификации продукта с возможностью включения и исключения узлов из спецификации и отображения списка свойств текущего узла в правой панели. Если свойство задано значением, то имеется возможность его изменить, например, выбрать число процессоров, устанавливаемых на материнскую плату сервера.
![Форма спецификации Форма спецификации](https://habrastorage.org/getpro/habr/upload_files/d5f/0c9/d76/d5f0c9d7660627a6b262bfa8dfacc841.png)
При переходе в режим спецификации устанавливается флаг выбора узла-продукта, который является начальным узлом-комплексом. Далее индукцией по ветвям дерева выполняются следующие действия:
если у узла-ассоциации установлен (сброшен) флаг выбора, то флаги выбора устанавливаются (сбрасываются) у всех вложенных узлов, кроме опциональных;
если у узла-обобщения установлен флаг выбора, то флаг выбора устанавливается у первого вложенного узла, а у всех остальных узлов флаги выбора сбрасываются;
если у узла-обобщения сброшен флаг выбора, то флаги выбора сбрасываются у всех вложенных узлов.
Текущая спецификация продукта изменяется через установку или снятие флагов выбора для дополнительных или необязательных элементов, а также через выбор исполнения, после которого предыдущий выбранный узел автоматически сбрасывается.
При любом изменении флага выбора узла запускается описанная выше индуктивная процедура изменения флагов вложенных узлов, а затем вычисляются свойства узлов по введённым ранее формулам.
Если есть нарушения ограничений, задаваемых формулами валидации, в спецификации продукта или ошибки в вычислении свойств узлов, то эти свойства, узлы и их родители подсвечиваются. При наведении курсора на такой узел или свойство появляется сообщение с текстом ошибки.
После исправления ошибок итоговая спецификация продукта сохраняется в виде файла с помощью кнопки «Экспорт». Это линейный список комплектующих для сборки изделия. Ранее сохранённую спецификацию можно загрузить обратно, нажав кнопку «Импорт».
Заключение
Применение понятийного подхода к представлению электронной структуры изделий привело к созданию мною простого и эффективного механизма управления конфигурацией, характерной особенностью которого является отсутствие необходимости создавать отдельные программы управления конфигурацией для каждого конфигурируемого изделия.
Описанный в статье конфигуратор помогает в наглядной форме учитывать сложные ограничения, связанные с несовместимостью компонентов, определять проблемные места в конфигурации изделия и рассчитывать технические характеристики конфигурируемого изделия и его составляющих частей.
На какие мысли Вас натолкнуло реализованное мною управление конфигурацией? Какие общие концепции и представления помогают Вам в работе?