При работе в конфигурации 1С:Зарплата и управление персоналом 3.1 (и других решениях на базе Библиотеки стандартных подсистем) системные администраторы и разработчики часто сталкиваются с ситуацией, когда опытному пользователю (например, старшему кадровику или расчетчику) требуется возможность самостоятельно удалять помеченные объекты. Однако, даже после назначения соответствующих ролей в профиле групп доступа, система продолжает выдавать ошибку: "Недостаточно прав для выполнения операции". Разберем подробно, почему это происходит и какими способами можно решить данную задачу.
Проанализируем ситуацию с точки зрения архитектуры системы. В типовых конфигурациях 1С проверка прав на выполнение критически важных операций часто реализована на двух независимых уровнях:
УдалениеПомеченныхОбъектов в расширении или конфигураторе.Посмотрим на пример типичного кода, который вызывает отказ в доступе. В процедуре ПриОткрытии или ПриСозданииНаСервере формы обработки УдалениеПомеченныхОбъектов часто встречается следующая конструкция:
Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
ТекстОшибки = НСтр("ru = 'Недостаточно прав для выполнения операции.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
Отказ = Истина;
Возврат;
КонецЕсли;
Именно этот участок кода блокирует запуск обработки, даже если в метаданных право доступа предоставлено. 1С ограничивает эту функцию намеренно, чтобы предотвратить нарушение ссылочной целостности базы пользователями, которые могут не видеть часть данных из-за настроек RLS (ограничение прав на уровне записей).
Прежде чем вносить изменения в программный код, рассмотрим наиболее безопасный и современный способ решения проблемы. В актуальных версиях ЗУП 3.1 предусмотрен механизм удаления объектов без участия пользователя в интерактивном режиме. Это позволяет избежать выдачи избыточных прав сотруднику.
Разберем по шагам, как настроить автоматизацию:
При таком подходе регламентное задание будет выполняться от имени системного пользователя с полными правами. Кадровику достаточно просто помечать ненужные документы на удаление, а система сама очистит их согласно расписанию. Это исключает риск появления «битых ссылок» и не требует доработки конфигурации.
Если специфика бизнес-процесса требует именно интерактивного удаления (здесь и сейчас), нам потребуется вмешательство в логику программы с помощью расширения. Рассмотрим, как это реализовать правильно.
Проанализируем ситуацию: нам нужно «обмануть» или пропустить проверку ЭтоПолноправныйПользователь(). Для этого выполним следующие действия:
УдалениеПомеченныхОбъектов и её основную форму.ПриСозданииНаСервере).&Вместо для переопределения метода.Пример программного кода для расширения, который позволит запускать обработку пользователям с определенной ролью (например, РедактированиеРеквизитовОбъектов):
&Вместо("ПроверитьПраваДоступа")
Процедура Расш1_ПроверитьПраваДоступа()
// Проверяем наличие нашей роли вместо стандартной проверки на полные права
Если РольДоступна("РедактированиеРеквизитовОбъектов") Тогда
// Разрешаем выполнение, не вызывая исключение
Возврат;
Иначе
// Если роли нет, вызываем стандартное исключение или возвращаем Отказ
ВызватьИсключение НСтр("ru = 'Недостаточно прав для удаления объектов.'");
КонецЕсли;
КонецПроцедуры
Важный нюанс: при использовании этого метода необходимо убедиться, что у пользователя в профиле также включена роль ИнтерактивноеУдалениеПомеченныхОбъектов (или аналогичная), иначе выполнение прервется на этапе контроля ссылочной целостности самой платформой 1С.
Рассмотрим подробнее, почему не стоит давать права на удаление всем подряд без серьезной необходимости. В 1С:ЗУП 3.1 существует сложная система взаимосвязей между документами и регистрами расчета. Проанализируем основные риски:
Выясним итоговую рекомендацию: наиболее предпочтительным является Решение 1 (Регламентное задание). Оно гарантирует безопасность данных и не требует постоянной поддержки кода расширения при обновлениях программы. Если же интерактивное удаление неизбежно, обязательно протестируйте работу расширения на копии базы, проверяя поведение системы под пользователем с ограниченными правами доступа.