Почему возникает ошибка «Нарушение прав» при открытии документа через роль в расширении 1С и как её исправить?

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

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

Причина возникновения ошибки «Нарушение прав»

Проанализируем механику работы документов в платформе 1С. Документ ПереносДанных (как и многие другие специализированные документы) является регистратором для десятков регистров сведений, накопления и расчета. При открытии формы документа система платформенно считывает наборы записей по всем движениям, которые зафиксированы в данном конкретном экземпляре документа.

Если у пользователя есть полные права на сам документ (Чтение, Просмотр, Изменение, ИнтерактивноеДобавление), но отсутствует право Чтение хотя бы на один регистр, данные которого пытается прочитать форма документа, платформа 1С блокирует операцию и выдает сообщение «Нарушение прав».

Таким образом, предоставления прав только на объект метаданных Документ недостаточно — необходимо предоставить права на все связанные регистры, участвующие в движениях документа.

Пошаговая инструкция по настройке прав в расширении

Разберем последовательность действий для корректной настройки прав доступа через расширение конфигурации:

  1. Заимствование документа в расширение: Добавляем документ ПереносДанных в расширение конфигурации. Обратите внимание, что реквизиты, табличные части и формы документа переносить в расширение не требуется, если вы не планируете изменять их состав или программный код.
  2. Определение состава регистров: Выясняем, какие регистры сведений, накопления или расчета корректируются теми документами, к которым кадровику или другому специалисту нужен доступ. Добавлять абсолютно все регистры конфигурации не обязательно — достаточно заимствовать только те, по которым ведутся целевые кадровые или расчетные записи.
  3. Заимствование регистров в расширение: Добавляем выбранные регистры в дерево метаданных расширения. Измерения, ресурсы и реквизиты регистров заимствовать не нужно — для назначения прав достаточно самого объекта метаданных.
  4. Настройка роли в расширении: Открываем созданную роль в расширении и устанавливаем необходимые права:

    – Для документа: флаги Чтение, Просмотр, а при необходимости корректировки — Изменение, Интерактивное добавление, Проведение и Отмена проведения.

    – Для регистров: флаги Чтение и Просмотр (для просмотра движений), а также Изменение и Запись (для возможности перепроведения и сохранения изменений документа).

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

Регистрация роли в подсистеме БСП «Управление доступом»

В типовых конфигурациях (таких как 1С:Зарплата и Управление Персоналом, 1С:ERP или 1С:Комплексная автоматизация) управление правами выполняется через подсистему БСП «Управление доступом». Для того чтобы роль из расширения стала доступна для выбора в профилях групп доступа, метаданные расширения должны быть зарегистрированы в справочниках идентификаторов.

Рассмотрим, как актуализировать справочники прав:

  1. После применения расширения запустите информационную базу в режиме 1С:Предприятие с параметром запуска командной строки: /C ЗапуститьОбновлениеИнформационнойБазы
  2. Либо выполните обновление идентификаторов объектов метаданных через встроенные служебные обработки администрирования.
  3. Создайте новый Профиль групп доступа, отметьте в нем добавленную роль из расширения и включите этот профиль в соответствующую Группу доступа пользователя.

Альтернативный вариант: выполнение корректировок в привилегированном режиме

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

Для реализации этого подхода выполним следующие шаги:

  1. Создаем в расширении обработку с понятным и ограниченным пользовательским интерфейсом (например, для изменения только кадровых данных конкретного сотрудника).
  2. В серверном модуле обработки выполняем запись в требуемые регистры с включением привилегированного режима:
    
    УстановитьПривилегированныйРежим(Истина);
    
    // Выполняем формирование и запись набора записей регистра
    НаборЗаписей = РегистрыСведений.КадроваяИсторияСотрудников.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
    // Заполнение и запись данных
    НаборЗаписей.Записать();
    
    УстановитьПривилегированныйРежим(Ложь);
    
  3. Назначаем пользователю права только на открытие и выполнение созданной обработки. В этом случае выдавать прямые права на чтение и запись служебных регистров и документа ПереносДанных не потребуется.
← На главную