Как дать доступ к документу Корректировка регистров через расширение в 1С:ERP и УТ 11

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет
← На главную

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

Анализ проблемы: почему стандартная роль не работает

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

  1. Объектный уровень: Проверка права Чтение и Изменение в метаданных.
  2. Интерфейсный уровень: Включение документа в подсистемы и проверка функциональных опций.
  3. Программный уровень: Жесткие проверки в модулях документа (так называемая «защита от дурака»).
  4. Регистровый уровень: Поскольку документ является универсальным регистратором, пользователю нужны права на те регистры, которые он собирается править.

Шаг 1: Создание роли в расширении

Первым делом создадим расширение (если оно еще не создано) и добавим в него новую роль. Назовем ее, например, ДобавлениеИзменениеКорректировокРегистров. В этой роли необходимо указать следующие права на документ КорректировкаРегистров:

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

Шаг 2: Права на регистры накопления и сведений

Проанализируем ситуацию: документ КорректировкаРегистров не имеет собственных движений, он записывает данные напрямую в те регистры, которые выберет пользователь. Если у пользователя есть права на документ, но нет прав на регистр ВыручкаИПродажи, то при попытке записи корректировки по этому регистру система выдаст ошибку нарушения прав доступа.

Вам необходимо в той же роли расширения добавить права (Чтение, Просмотр, Изменение, Редактирование) на все регистры, которые пользователь будет «курочить». Если список регистров велик (как в случае с 7/8 всех регистров ERP), придется методично отметить их в составе роли расширения.

Шаг 3: Настройка видимости в интерфейсе и подсистемах

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

  1. Добавим в расширение нужную подсистему (например, Администрирование или ФинансовыйРезультатИКонтроллинг).
  2. В расширении откроем состав этой подсистемы и убедимся, что наш документ КорректировкаРегистров включен в нее.
  3. Проверим функциональные опции. Если документ связан с какой-либо константой (функциональной опцией), она должна быть включена в базе.

Рассмотрим пример программного включения видимости, если стандартные средства не помогают. Иногда требуется переопределить командный интерфейс в расширении для конкретной роли.

Шаг 4: Обход программных проверок (Защита в коде)

Это самый важный этап. В ERP часто встроен код, который проверяет наличие роли ПолныеПрава непосредственно перед открытием или записью. Найдем в модуле менеджера или модуле объекта документа процедуры проверки прав. Обычно это ПередЗаписью или специализированные методы в общих модулях, такие как ПроверитьПраваДоступа.

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


&НаСервере
Процедура ПриЧтенииНаСервереПосле(ТекущийОбъект)
    // Если система требует полных прав, мы можем "обмануть" её
    // проверив нашу собственную роль из расширения
    Если Не РольДоступна("ПолныеПрава") И РольДоступна("ДобавлениеИзменениеКорректировокРегистров") Тогда
        // Разрешаем доступ или отключаем стандартные отказы
        ДоступностьОбъекта = Истина; 
    КонецЕсли;
КонецПроцедуры

Если проверка зашита глубоко в общих модулях БСП, нам может потребоваться расширить метод ПриОпределенииДоступаКОбъекту. Выясним причину отказа через отладчик, установив точку остановки на исключении Отказ = Истина.

Шаг 5: Работа с RLS и привилегированным режимом

При работе с корректировками часто возникают конфликты с RLS (ограничением доступа на уровне записей). Если на регистры наложены ограничения по организациям или подразделениям, пользователь может случайно затереть данные, которые он не видит.

Рассмотрим решение через использование привилегированного режима для записи документа. Мы можем создать в расширении серверный модуль и вынести туда процедуру записи, установив признак Привилегированный. Это позволит обойти ограничения RLS при непосредственной записи движений, но использовать этот метод нужно крайне осторожно, чтобы не нарушить целостность данных.

Шаг 6: Проблема параметров сеанса и кэширования

Иногда после добавления роли в расширение права не подтягиваются сразу. Это связано с кэшированием прав в параметре сеанса УстановленныеРоли. Попробуйте выполнить следующие действия:

Резюме и рекомендации

Мы проанализировали ситуацию и выяснили, что для предоставления доступа к Корректировке регистров недостаточно просто создать роль. Необходимо:

  1. Дать права на сам документ в расширении.
  2. Явно прописать права на все используемые регистры накопления и сведений.
  3. Включить документ в состав подсистем внутри расширения.
  4. Программно переопределить проверки прав в модулях через аннотации &Вместо или &Перед.

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

← На главную