Как скопировать роль в конфигураторе 1С, если права не переносятся и роль остается пустой?

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

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

Проанализируем причины возникновения проблемы

Ситуация, когда при копировании роли в конфигураторе настройки прав по объектам метаданных не переносятся, чаще всего связана с техническими особенностями конкретных версий платформы. Проблема была официально признана ошибкой в ветках 8.3.17, 8.3.18 и ранних сборках 8.3.19. Основная причина кроется в механизме «ленивой загрузки» метаданных, когда конфигуратор не успевает корректно считать и связать таблицу прав при создании нового объекта.

Также стоит учитывать состояние конфигурации. Если корень конфигурации закрыт для редактирования или объекты находятся на поддержке без возможности изменения, это может накладывать ограничения на операции копирования. Однако, как показывает практика, даже в полностью открытых конфигурациях (например, «Управление холдингом») данный баг может проявляться.

Способ 1. Обновление версии технологической платформы

Прежде чем прибегать к сложным манипуляциям с файлами, проверим версию используемой платформы. Опыт многих разработчиков показывает, что на более свежих релизах, таких как 8.3.20.1914 и выше, данная ошибка исправлена.

Алгоритм действий:

  1. Выполним резервное копирование информационной базы.
  2. Установим актуальный релиз платформы 1С:Предприятие на локальную машину.
  3. Запустим конфигуратор под новой платформой.
  4. Попробуем повторно скопировать нужную роль (например, ЧтениеДанныхБухгалтерии).

Если после обновления права скопировались корректно, проблема решена. Если же на серверах компании используется старая версия и её обновление невозможно в ближайшее время, перейдем к альтернативным методам.

Способ 2. Выгрузка и замена файлов метаданных

Этот метод является наиболее надежным «обходным путем». Его суть заключается в том, чтобы вручную подменить описание прав в файловой структуре конфигурации. Разберем этот процесс детально.

Пошаговая инструкция:

  1. В конфигураторе создадим новую роль (путем копирования или просто пустую), назовем её, например, НоваяРоль_Копия.
  2. Выполним выгрузку конфигурации в файлы. Для этого перейдем в меню Конфигурация — Выгрузить конфигурацию в файлы... и выберем пустую папку на диске.
  3. Дождемся завершения процесса (для тяжелых конфигураций, таких как УХ или ERP, это может занять значительное время).
  4. Откроем выгруженную папку в проводнике и перейдем в каталог \Roles\.
  5. Найдем там две папки: папку исходной роли (ЧтениеДанныхБухгалтерии) и папку нашей новой роли (НоваяРоль_Копия).
  6. Скопируем всё содержимое из папки исходной роли (обычно это файл Rights.xml) и вставим его с заменой в папку новой роли.
  7. Вернемся в конфигуратор и выполним обратную операцию: Конфигурация — Загрузить конфигурацию из файлов....

После загрузки проверим права новой роли — они должны полностью соответствовать оригиналу. Этот метод гарантирует стопроцентный результат, так как мы работаем напрямую с XML-описанием прав.

Способ 3. Использование промежуточной базы через сравнение и объединение

Если полная выгрузка и загрузка конфигурации в файлы занимает слишком много времени, применим более быстрый метод с использованием «буферной» базы.

Рассмотрим порядок действий:

  1. Создадим новую пустую информационную базу (без конфигурации).
  2. В основной базе выгрузим конфигурацию в файл .cf.
  3. В новой базе выполним Конфигурация — Сравнить, объединить с конфигурацией из файла, выбрав наш .cf.
  4. Снимем все галочки и выберем только ту роль, которую нужно скопировать, а также объекты, на которые она ссылается (хотя бы частично).
  5. После того как роль появилась в новой базе, попробуем скопировать её там. На пустых или облегченных конфигурациях баг платформы проявляется значительно реже.
  6. Настроим права в этой «буферной» базе и загрузим измененную роль обратно в основную конфигурацию через механизм сравнения и объединения.

Способ 4. Работа через расширения конфигурации

Современный стандарт разработки в 1С диктует использование расширений для изменения типового функционала. Это позволяет оставить основную конфигурацию на поддержке. Однако здесь есть критически важный нюанс, связанный с аддитивностью прав.

Проанализируем ситуацию: права в 1С работают по принципу логического «ИЛИ». Если типовая роль в основной конфигурации разрешает чтение справочника, то роль в расширении не может это право отобрать. Она может только добавить новые разрешения.

Как правильно «урезать» права через расширение:

  1. Добавим новую роль в расширение.
  2. В этой роли настроим нужные (ограниченные) права доступа.
  3. У пользователей, которым нужно ограничить доступ, отключим типовую роль в их профилях групп доступа (в режиме «1С:Предприятие»).
  4. Вместо типовой роли назначим им нашу новую роль из расширения.

Этот способ является наиболее корректным с точки зрения дальнейшего сопровождения и обновлений системы.

Важные замечания по сопровождению (Управление холдингом)

При копировании сложных ролей, таких как ЧтениеДанныхБухгалтерии, мы должны помнить о рисках обновлений. Рассмотрим типичную ситуацию: вендор (1С) выпускает обновление конфигурации, в котором появляются новые документы или справочники. Эти объекты будут автоматически добавлены в типовую роль, но в вашу скопированную роль они не попадут.

В результате пользователи со скопированной ролью начнут получать ошибку: Нарушение прав доступа при обращении к новым функциям системы. Поэтому при каждом обновлении конфигурации вам придется вручную анализировать изменения в типовой роли и переносить их в свою копию. Именно поэтому использование профилей групп доступа и механизмов RLS (Ограничение доступа на уровне записей) часто является более предпочтительным, чем прямое копирование и модификация тяжелых ролей.

Для автоматизации сравнения прав можно использовать инструменты на базе OneScript, которые позволяют программно сопоставлять файлы Rights.xml и выявлять расхождения в правах объектов метаданных.

← На главную