Подсистемы 1С: как найти объекты вне состава и пересечения
Практический разбор состава подсистем 1С через analyze_subsystems: объекты вне подсистем, принадлежность объекта и пересечения между корневыми ветками.
При знакомстве с конфигурацией дерево подсистем служит картой. Но по одному дереву не видно, какие объекты в него не включены и какие используются сразу в нескольких ветках. Проверьте состав перед изменением интерфейса, чтобы найти объекты для разбора и договориться, кто отвечает за общие части конфигурации.
Инструмент analyze_subsystems появился в v2.26.0 MCP-1C. Он доступен в Открытой редакции и включён в Расширенную и Профессиональную. В платных редакциях готовая выгрузка служит источником дерева; без неё используется живой запрос к базе. Описание находится в справочнике analyze_subsystems, история развития — в релизах.
В статье: три действия, объекты вне подсистем, пересечения, решения по карте.
Три вопроса к составу конфигурации
| Действие | На какой вопрос отвечает |
|---|---|
orphans |
Какие объекты не входят ни в одну подсистему |
containing |
В какие подсистемы входит выбранный объект |
intersections |
Какие объекты входят в несколько подсистем |
Для конкретного документа начните с аргументов инструмента:
{
"action": "containing",
"object": "Документ.РеализацияТоваровУслуг"
}
Имя условное. Лучше передавать полное имя метаданных. Если короткое имя неоднозначно, инструмент возвращает все совпадения; object_type помогает уточнить вид объекта. Совпадение по короткому имени нельзя молча трактовать как один документ.
Объект вне подсистемы — повод разобраться
Вызов {"action":"orphans"} позволяет получить кандидатов для разбора. Проверка охватывает не только документы и справочники, но и служебные объекты, которые могут входить в подсистемы: общие модули, роли, сервисы, задания, подписки и другие объекты. Сами подсистемы и языки в эту выборку не входят.
Отсутствие в составе не доказывает ошибку. Служебный объект может намеренно не относиться к прикладному разделу, а устаревшая подсистема — сохраняться ради совместимости. Для каждого кандидата уточните назначение и принятые в проекте правила. Не добавляйте объекты в подсистемы массово ради пустого списка.
Также не смешивайте состав подсистемы с фактической видимостью команды. На интерфейс влияют дополнительные настройки и права. Список принадлежности даёт структурный факт, который стоит проверить перед изменением навигации.
Найдите общие объекты разных веток
Для общей карты вызовите intersections. Если интересуют пересечения между корневыми ветками, добавьте фильтр:
{
"action": "intersections",
"cross_branch_only": true
}
Например, один справочник может входить в «Продажи» и «Закупки». Это часто соответствует общему справочному объекту, а не дублированию кода. У результата есть смысл лишь в контексте назначения объекта и ответственности за его изменение.
Список пересечений не является графом вызовов. Принадлежность общей подсистеме не доказывает, что один модуль вызывает другой. Для анализа влияния используйте отдельные графовые инструменты и проверяйте найденные связи в исходниках.
Как использовать карту в задаче
Сохраните источник данных и сформулируйте цель: распределить ответственность, навести порядок в составе или подготовить изменение интерфейса. Затем разберите объекты вне состава и значимые пересечения. Исправляйте только те случаи, для которых есть понятное правило проекта.
При живом подключении нужны соответствующие возможности установленного расширения 1С; поддержка анализа подсистем появилась в MCP_HTTPService 0.7.2. Для текущей установки следуйте инструкции обновления и требованиям вашей версии сервера.
После изменения состава проверьте дерево, а при изменении пользовательской навигации — реальные команды и открытие разделов под нужными правами в тестовой базе.
Рядом пригодятся чтение структуры объектов и разбор прав по ролям.