Работа в команде над крупными проектами на платформе «1С:Предприятие» практически всегда строится с использованием встроенного инструмента — Хранилища конфигурации. Этот механизм обеспечивает совместную разработку, версионирование и контроль ссылочной целостности метаданных. Однако каждый разработчик рано или поздно сталкивается с раздражающей ситуацией: при попытке поместить в хранилище, казалось бы, простой измененный объект (или удалить ненужный реквизит) система неожиданно выкатывает огромный список незахваченных объектов, чаще всего состоящий из ролей. В худшем случае программист попадает в так называемый «замкнутый круг» (дедлок зависимостей), когда платформа не дает ни поместить изменения, ни захватить требуемые объекты.
В этой статье мы подробно проанализируем, почему возникает эта проблема, как устроен механизм контроля ссылочной целостности хранилища изнутри, и рассмотрим практические, проверенные временем способы обхода и предотвращения подобных конфликтных ситуаций.
Для того чтобы понять логику поведения платформы, углубимся в структуру хранения метаданных. Каждая роль в системе «1С:Предприятие» — это не просто абстрактное имя. Физически роль представляет собой сложную матрицу прав доступа, в которой явно прописаны разрешения (на чтение, изменение, просмотр, редактирование и т. д.) для абсолютно каждого объекта конфигурации, включая его подчиненные элементы: реквизиты, табличные части, формы, команды и макеты.
Рассмотрим стандартный сценарий:
ЗаказПокупателя, у которого мы решили удалить устаревший реквизит СкидкаПоКупону.Продавец, МенеджерПродаж, ПолныеПрава), в которых ранее были настроены права доступа к этому документу и, соответственно, к его реквизиту СкидкаПоКупону.ЗаказПокупателя, но и физически перезаписались файлы описания всех затронутых ролей.Аналогичная ситуация происходит и при обычном изменении типов данных реквизитов, изменении состава планов видов характеристик или удалении любых других элементов, на которые прямо или косвенно завязаны права доступа.
Еще более неприятная ситуация возникает при создании новых объектов метаданных. Этот процесс часто приводит разработчиков в тупик из-за свойства ролей Устанавливать права для новых объектов.
Проанализируем этот дедлок по шагам:
БонусныеКарты.ПолныеПрава), у которых включен признак Устанавливать права для новых объектов. Платформа 1С, следуя этому правилу, автоматически модифицирует эти роли в локальной конфигурации разработчика, добавляя в них полные права на новый справочник БонусныеКарты.Ниже мы подробно рассмотрим проверенные методы, как разорвать этот круг и навести порядок в процессе фиксации изменений.
Самый простой и надежный способ избежать проблем при удалении объектов или их реквизитов — это предварительное планирование своих действий. Если мы заранее знаем, что собираемся удалить реквизит или объект метаданных, мы должны действовать в строго определенном порядке:
Роли.Захватывать роли по одной через основное дерево конфигурации крайне неудобно, особенно если их в системе больше сотни. Проанализируем, как сделать это быстро с помощью встроенного инструмента групповой работы:
Роли.Shift для выделения диапазона или Ctrl для выбора отдельных элементов), выделяем весь список необходимых ролей.Этот способ экономит колоссальное количество времени и позволяет за один клик захватить всю структуру прав конфигурации.
Если разработчик уже попал в тупиковую ситуацию дедлока зависимостей, когда система не дает ни захватить роли, ни положить новый объект, не стоит паниковать и вручную переписывать код. Разберем по шагам классический алгоритм выхода из этой ситуации:
temp_config.cf).temp_config.cf.Если на проекте ведется активная разработка, подразумевающая частое создание новых справочников, документов, регистров и других метаданных, постоянные конфликты с ролями могут сильно снижать общую продуктивность команды. В таком случае мы рекомендуем пересмотреть архитектурный подход к назначению прав:
Устанавливать права для новых объектов и снимаем с него флажок.После этого при создании нового объекта платформа не будет автоматически лезть в файлы этих ролей и прописывать туда новые права. Роли останутся неизмененными. Разработчик сможет без проблем поместить новый объект в хранилище. Назначение же прав на этот новый объект для пользователей будет производиться осознанно и централизованно, например, в рамках планового обновления прав перед релизом, когда один ответственный разработчик захватит все роли и настроит к ним доступ.
Для минимизации проблем при коллективной разработке в 1С рекомендуем внедрить в вашей команде следующие правила:
Получить изменения из хранилища, чтобы актуализировать локальную базу и сразу увидеть возможные коллизии с работой коллег.Применение этих простых методологий и технических приемов избавит вас от рутины бесконечных отмен захватов и позволит сфокусироваться непосредственно на написании качественного кода и бизнес-логики.