Как предоставить доступ к удалению помеченных объектов пользователю без полных прав в 1С:ЗУП 3.1

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

При работе в конфигурации 1С:Зарплата и управление персоналом 3.1 (и других решениях на базе Библиотеки стандартных подсистем) системные администраторы и разработчики часто сталкиваются с ситуацией, когда опытному пользователю (например, старшему кадровику или расчетчику) требуется возможность самостоятельно удалять помеченные объекты. Однако, даже после назначения соответствующих ролей в профиле групп доступа, система продолжает выдавать ошибку: "Недостаточно прав для выполнения операции". Разберем подробно, почему это происходит и какими способами можно решить данную задачу.

Выясним причину блокировки: почему роли в профиле не помогают

Проанализируем ситуацию с точки зрения архитектуры системы. В типовых конфигурациях 1С проверка прав на выполнение критически важных операций часто реализована на двух независимых уровнях:

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

Посмотрим на пример типичного кода, который вызывает отказ в доступе. В процедуре ПриОткрытии или ПриСозданииНаСервере формы обработки УдалениеПомеченныхОбъектов часто встречается следующая конструкция:


Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
    ТекстОшибки = НСтр("ru = 'Недостаточно прав для выполнения операции.'");
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
    Отказ = Истина;
    Возврат;
КонецЕсли;

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

Решение 1: Настройка автоматического удаления по расписанию (рекомендуемое)

Прежде чем вносить изменения в программный код, рассмотрим наиболее безопасный и современный способ решения проблемы. В актуальных версиях ЗУП 3.1 предусмотрен механизм удаления объектов без участия пользователя в интерактивном режиме. Это позволяет избежать выдачи избыточных прав сотруднику.

Разберем по шагам, как настроить автоматизацию:

  1. Зайдем в раздел Администрирование, далее выберем пункт Обслуживание.
  2. Развернем подраздел Удаление помеченных объектов.
  3. Вместо варианта «Стандартное» выберем гиперссылку Настроить расписание.
  4. Установим флаг Автоматически удалять помеченные объекты по расписанию.
  5. Настроим удобный график (например, ежедневно в ночное время или каждый час в рабочее время).

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

Решение 2: Обход проверки прав через расширение конфигурации

Если специфика бизнес-процесса требует именно интерактивного удаления (здесь и сейчас), нам потребуется вмешательство в логику программы с помощью расширения. Рассмотрим, как это реализовать правильно.

Проанализируем ситуацию: нам нужно «обмануть» или пропустить проверку ЭтоПолноправныйПользователь(). Для этого выполним следующие действия:

  1. Создадим новое расширение или используем существующее.
  2. Добавим в расширение обработку УдалениеПомеченныхОбъектов и её основную форму.
  3. Найдем процедуру, отвечающую за проверку прав (обычно это ПриСозданииНаСервере).
  4. Используем аннотацию &Вместо для переопределения метода.

Пример программного кода для расширения, который позволит запускать обработку пользователям с определенной ролью (например, РедактированиеРеквизитовОбъектов):


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

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

Важные предостережения при работе с правами на удаление

Рассмотрим подробнее, почему не стоит давать права на удаление всем подряд без серьезной необходимости. В 1С:ЗУП 3.1 существует сложная система взаимосвязей между документами и регистрами расчета. Проанализируем основные риски:

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

← На главную