Как исправить ошибку «У пользователя недостаточно прав» при отмене проведения документов в УПП на новых платформах?

Программист 1С v8.3 (Обычные формы) Промышленность, строительство и АПК
← На главную

При работе с конфигурацией Управление производственным предприятием (УПП), редакция 1.3 на современных версиях платформы (начиная с 8.3.21.хххх и выше) многие технические специалисты сталкиваются со специфической проблемой. При попытке отмены проведения документов, имеющих движения по регистрам расчета (например, ОсновныеНачисленияРаботниковОрганизаций), система выдает ошибку: «У пользователя недостаточно прав на исполнение операции над базой данных». Примечательно, что ошибка возникает даже у пользователей с полными правами, а само проведение документа проходит без нареканий.

Рассмотрим подробнее причины этого поведения и разберем по шагам методы решения данной проблемы.

Выясним причину: почему это происходит?

Проанализируем техническую составляющую. Конфигурация УПП 1.3 работает в режиме совместимости 8.2.13. Начиная с версии платформы 8.3.21, разработчики 1С внесли изменения в ядро системы, касающиеся механизмов безопасности и работы с таблицами перерасчетов (Recalculations).

Основная причина кроется в зафиксированном баге платформы (например, Bug ID: 10243405). В устаревших режимах совместимости платформа некорректно обрабатывает запросы к внутренним служебным таблицам, связанным с регистрами расчета, в момент автоматической очистки движений. Система пытается проверить права доступа на объекты, которые в данном контексте недоступны или обрабатываются неверно, что приводит к отказу в доступе на уровне СУБД (MS SQL Server или PostgreSQL).

Решение 1: Откат или подбор версии платформы

Самым простым и гарантированным способом решения проблемы, не требующим изменения программного кода, является использование стабильной версии платформы, в которой данный механизм еще не был изменен. Опытным путем установлено, что наиболее стабильной веткой для УПП 1.3 остается 8.3.20.хххх.

Рекомендуемые версии для стабильной работы:

Решение 2: Использование привилегированного режима в метаданных

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

Проделаем следующие шаги:

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

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

Решение 3: Программное управление удалением движений

Разберем ситуацию, когда автоматическое удаление движений платформой вызывает сбой. В свойствах документа на закладке «Движения» параметр «Удаление движений» обычно стоит в положении Автоматически. Это заставляет платформу очищать регистры перед вызовом процедуры ОбработкаУдаленияПроведения.

Мы можем взять этот процесс под свой контроль:

  1. Изменим свойство «Удаление движений» на Не удалять автоматически (или Оставлять).
  2. В модуле объекта документа найдем процедуру ОбработкаУдаленияПроведения.
  3. Реализуем явную очистку движений в привилегированном режиме.

Пример кода для реализации этого метода:


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

Такой подход позволяет обойти ограничение платформы, так как команда Записать() будет выполнена от имени системы с игнорированием проверок прав доступа, которые вызывают ошибку.

Решение 4: Проверка таблиц перерасчетов

Проанализируем связанные объекты. Часто ошибка «недостаточно прав» вызвана не самим регистром расчета, а связанным с ним объектом типа Перерасчет. В новых версиях платформы при очистке регистра расчета система автоматически пытается обновить записи в таблицах перерасчетов.

Что необходимо проверить:

Дополнительные рекомендации

Если ни один из вышеперечисленных методов не помог, проанализируем состояние серверного окружения:

  1. Очистка кэша сервера: Иногда проблема кроется в «зависших» дескрипторах безопасности в серверном кэше. Необходимо остановить службу 1C:Enterprise Server Administration и полностью удалить содержимое папки srvinfo/reg_XXXX/snccntx.
  2. Тестирование на файловой базе: Переведите копию базы в файловый вариант. Если ошибка исчезнет — это подтверждает некорректную трансляцию SQL-запросов платформой для вашей СУБД. В этом случае единственным выходом будет либо обновление платформы до последней доступной сборки, либо откат на 8.3.20.
  3. Типовые роли: Убедитесь, что у пользователя с «Полными правами» действительно отмечены все системные права. В редких случаях после обновления платформы состав прав в старых конфигурациях может не соответствовать новым требованиям ядра. Попробуйте создать новую роль с максимальными правами и назначить её пользователю.

Подводя итог, отметим, что для УПП 1.3 наиболее стабильным и рекомендуемым решением является использование платформы 8.3.20.2180. Все остальные методы являются обходными путями («костылями»), которые могут потребовать значительных трудозатрат на изменение кода и тестирование всей системы расчета заработной платы.

← На главную