В процессе разработки в среде 1С:Предприятие 8.3 программисты часто сталкиваются с необходимостью создания новой роли на основе существующей типовой роли. Казалось бы, стандартная операция «Добавить копированием» должна полностью дублировать все права на справочники, документы и регистры. Однако в ряде случаев мы обнаруживаем, что созданная роль оказывается практически пустой. Рассмотрим причины возникновения этой проблемы и разберем по шагам наиболее эффективные способы её решения.
Ситуация, когда при копировании роли в конфигураторе настройки прав по объектам метаданных не переносятся, чаще всего связана с техническими особенностями конкретных версий платформы. Проблема была официально признана ошибкой в ветках 8.3.17, 8.3.18 и ранних сборках 8.3.19. Основная причина кроется в механизме «ленивой загрузки» метаданных, когда конфигуратор не успевает корректно считать и связать таблицу прав при создании нового объекта.
Также стоит учитывать состояние конфигурации. Если корень конфигурации закрыт для редактирования или объекты находятся на поддержке без возможности изменения, это может накладывать ограничения на операции копирования. Однако, как показывает практика, даже в полностью открытых конфигурациях (например, «Управление холдингом») данный баг может проявляться.
Прежде чем прибегать к сложным манипуляциям с файлами, проверим версию используемой платформы. Опыт многих разработчиков показывает, что на более свежих релизах, таких как 8.3.20.1914 и выше, данная ошибка исправлена.
Алгоритм действий:
ЧтениеДанныхБухгалтерии).Если после обновления права скопировались корректно, проблема решена. Если же на серверах компании используется старая версия и её обновление невозможно в ближайшее время, перейдем к альтернативным методам.
Этот метод является наиболее надежным «обходным путем». Его суть заключается в том, чтобы вручную подменить описание прав в файловой структуре конфигурации. Разберем этот процесс детально.
Пошаговая инструкция:
НоваяРоль_Копия.\Roles\.ЧтениеДанныхБухгалтерии) и папку нашей новой роли (НоваяРоль_Копия).Rights.xml) и вставим его с заменой в папку новой роли.После загрузки проверим права новой роли — они должны полностью соответствовать оригиналу. Этот метод гарантирует стопроцентный результат, так как мы работаем напрямую с XML-описанием прав.
Если полная выгрузка и загрузка конфигурации в файлы занимает слишком много времени, применим более быстрый метод с использованием «буферной» базы.
Рассмотрим порядок действий:
.cf..cf.Современный стандарт разработки в 1С диктует использование расширений для изменения типового функционала. Это позволяет оставить основную конфигурацию на поддержке. Однако здесь есть критически важный нюанс, связанный с аддитивностью прав.
Проанализируем ситуацию: права в 1С работают по принципу логического «ИЛИ». Если типовая роль в основной конфигурации разрешает чтение справочника, то роль в расширении не может это право отобрать. Она может только добавить новые разрешения.
Как правильно «урезать» права через расширение:
Этот способ является наиболее корректным с точки зрения дальнейшего сопровождения и обновлений системы.
При копировании сложных ролей, таких как ЧтениеДанныхБухгалтерии, мы должны помнить о рисках обновлений. Рассмотрим типичную ситуацию: вендор (1С) выпускает обновление конфигурации, в котором появляются новые документы или справочники. Эти объекты будут автоматически добавлены в типовую роль, но в вашу скопированную роль они не попадут.
В результате пользователи со скопированной ролью начнут получать ошибку: Нарушение прав доступа при обращении к новым функциям системы. Поэтому при каждом обновлении конфигурации вам придется вручную анализировать изменения в типовой роли и переносить их в свою копию. Именно поэтому использование профилей групп доступа и механизмов RLS (Ограничение доступа на уровне записей) часто является более предпочтительным, чем прямое копирование и модификация тяжелых ролей.
Для автоматизации сравнения прав можно использовать инструменты на базе OneScript, которые позволяют программно сопоставлять файлы Rights.xml и выявлять расхождения в правах объектов метаданных.