Как в хранилище 1С создать подчиненную подсистему для объекта на поддержке?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе в среде коллективной разработки с использованием Хранилища конфигурации 1С начинающие специалисты часто сталкиваются с техническими трудностями. Одна из типичных проблем — невозможность добавить новую подчиненную подсистему к уже существующей (например, типовой подсистеме от фирмы "1С"). При попытке добавить подчиненный объект кнопка создания или соответствующий пункт контекстного меню оказываются просто неактивными. При этом захват корня конфигурации или самой родительской подсистемы стандартным образом не решает проблему.

В этой статье мы подробно разберем, почему возникает эта сложность, детально изучим пошаговый алгоритм ее решения в хранилище, рассмотрим правила вежливой коллективной разработки, а также узнаем о современном альтернативном подходе с использованием расширений конфигурации и хитроумном "лайфхаке" опытных разработчиков.

Почему кнопка создания подчиненной подсистемы неактивна?

Давайте проанализируем первопричину этой проблемы. В типовых конфигурациях (таких как "1С:ERP", "1С:Бухгалтерия" или "1С:Управление торговлей") большинство объектов находятся на поддержке поставщика и закрыты для редактирования (на них установлен так называемый "замок").

Когда объект находится на строгой поддержке без возможности изменения, платформа 1С:Предприятие блокирует любые действия, способные нарушить его структуру. Создание подчиненной подсистемы напрямую меняет состав и свойства родительской подсистемы. Следовательно, пока для родительской подсистемы не включена возможность редактирования, платформа физически не позволит вам добавить в нее подчиненные элементы.

При работе в Хранилище конфигурации ситуация усложняется тем, что информация о правилах поддержки и правилах изменения объектов хранится непосредственно в корне конфигурации. Поэтому простого захвата родительской подсистемы недостаточно — необходимо выполнить ряд последовательных действий с соблюдением правил групповой разработки.

---

Пошаговый алгоритм решения проблемы в хранилище

Рассмотрим классический и наиболее надежный способ решения этой задачи непосредственно в основной конфигурации через изменение правил поддержки. Чтобы выполнить эту процедуру корректно и не заблокировать работу коллег по команде, строго придерживайтесь следующего плана:

  1. Захватите корень конфигурации. Найдите самый верхний элемент в дереве метаданных (имя вашей конфигурации), нажмите на него правой кнопкой мыши и выберите команду "Захватить в хранилище". Обратите внимание: устанавливать флаг "Захватывать рекурсивно" ни в коем случае не нужно, так как вы заблокируете для коллег абсолютно все объекты информационной базы.
  2. Откройте окно настройки поддержки. Перейдите в главное меню конфигуратора: Конфигурация — Поддержка — Настройка поддержки.
  3. Разрешите изменение конфигурации в целом. Если кнопка "Включить возможность изменения" вверху окна активна, нажмите ее. Если конфигурация уже открыта для изменений, этот шаг пропускаем. Обратите внимание, что у самого корня конфигурации должен стоять статус, разрешающий изменения.
  4. Измените правила для родительской подсистемы. В системном дереве объектов окна настройки поддержки найдите нужную родительскую подсистему, к которой вы хотите добавить подчиненную. Дважды кликните по ней. В открывшемся окне выбора правил установите переключатель в положение "Объект поставщика редактируется с сохранением поддержки" и нажмите "ОК".
  5. Сразу же освободите корень конфигурации! Это важнейший шаг коллективной разработки. Закройте окно настройки поддержки. Нажмите правой кнопкой мыши на корень конфигурации и выберите "Поместить в хранилище". Не держите корень захваченным долго. Пока он у вас захвачен, другие разработчики не смогут обновлять конфигурацию базы данных и добавлять новые объекты.
  6. Захватите родительскую подсистему. Теперь, когда правила поддержки изменены и обновлены в хранилище, найдите вашу родительскую подсистему в дереве метаданных, нажмите правой кнопкой мыши и выполните команду "Захватить в хранилище".
  7. Создайте подчиненную подсистему. Кликните правой кнопкой мыши по захваченной родительской подсистеме. Теперь действие Добавить -> Подсистема станет активным. Создайте новую подчиненную подсистему, задайте ей имя и настройте свойства.
  8. Поместите изменения обратно в хранилище. Выделите родительскую подсистему и вновь созданную подчиненную подсистему, нажмите правую кнопку мыши и выберите "Поместить в хранилище".

---

Лайфхак для опытных разработчиков: сохраняем "чистый замок"

Существует профессиональный недокументированный прием, который позволяет внести точечные изменения (в нашем случае — добавить подчиненную подсистему) и при этом сохранить правила поддержки для корня конфигурации в исходном неизменном виде ("на замке"). Это значительно облегчает последующие автоматические обновления конфигурации от поставщика.

Давайте разберем этот хитрый алгоритм по шагам:

  1. Разработчик захватывает в хранилище корень конфигурации и нужную родительскую подсистему.
  2. Через меню Конфигурация — Поддержка — Настройка поддержки включает возможность изменения (с сохранением поддержки) для родительской подсистемы.
  3. Платформа разрешает редактирование. Разработчик сразу же создает необходимую подчиненную подсистему в дереве метаданных.
  4. Теперь самое главное: для корня конфигурации в окне хранилища выполняется операция "Отменить захват" (а не "Поместить").

Что происходит в этот момент? При отмене захвата корня платформа откатывает настройки поддержки для самой конфигурации к исходному состоянию (корень снова закрыт на строгий "замок"). Однако созданная подчиненная подсистема и измененная родительская подсистема остаются захваченными лично вами! Вы можете спокойно доработать их и выполнить операцию "Поместить в хранилище" только для этих подсистем. Архитектура поддержки всей конфигурации останется максимально чистой.

---

Современная и рекомендуемая альтернатива: Использование расширений

В современных реалиях разработки на платформе 1С:Предприятие 8.3 настоятельно рекомендуется минимизировать любые изменения типовых конфигураций, находящихся на поддержке. Для решения подобных задач идеальным инструментом является механизм расширений конфигурации.

Использование расширений позволяет полностью избежать захвата корня основного хранилища и внесения изменений в правила поддержки типового решения. Рассмотрим этот процесс подробнее:

Этот способ является наиболее перспективным, так как он гарантирует легкое и беспроблемное обновление основной конфигурации от вендора в будущем, полностью исключая конфликты в основном хранилище.

← На главную