При работе с конфигурацией Управление производственным предприятием (УПП), редакция 1.3 на современных версиях платформы (начиная с 8.3.21.хххх и выше) многие технические специалисты сталкиваются со специфической проблемой. При попытке отмены проведения документов, имеющих движения по регистрам расчета (например, ОсновныеНачисленияРаботниковОрганизаций), система выдает ошибку: «У пользователя недостаточно прав на исполнение операции над базой данных». Примечательно, что ошибка возникает даже у пользователей с полными правами, а само проведение документа проходит без нареканий.
Рассмотрим подробнее причины этого поведения и разберем по шагам методы решения данной проблемы.
Проанализируем техническую составляющую. Конфигурация УПП 1.3 работает в режиме совместимости 8.2.13. Начиная с версии платформы 8.3.21, разработчики 1С внесли изменения в ядро системы, касающиеся механизмов безопасности и работы с таблицами перерасчетов (Recalculations).
Основная причина кроется в зафиксированном баге платформы (например, Bug ID: 10243405). В устаревших режимах совместимости платформа некорректно обрабатывает запросы к внутренним служебным таблицам, связанным с регистрами расчета, в момент автоматической очистки движений. Система пытается проверить права доступа на объекты, которые в данном контексте недоступны или обрабатываются неверно, что приводит к отказу в доступе на уровне СУБД (MS SQL Server или PostgreSQL).
Самым простым и гарантированным способом решения проблемы, не требующим изменения программного кода, является использование стабильной версии платформы, в которой данный механизм еще не был изменен. Опытным путем установлено, что наиболее стабильной веткой для УПП 1.3 остается 8.3.20.хххх.
Рекомендуемые версии для стабильной работы:
Если понижение версии платформы невозможно, попробуем изменить настройки самого объекта в конфигураторе. У документов в 1С есть специфические свойства, которые позволяют выполнять операции с повышенными правами доступа.
Проделаем следующие шаги:
НачислениеЗарплатыРаботникамОрганизаций).Важное замечание: в некоторых случаях простой установки галочек недостаточно, так как ошибка может возникать в системных механизмах еще до того, как сработает этот флаг. Поэтому перейдем к более глубокому анализу кода.
Разберем ситуацию, когда автоматическое удаление движений платформой вызывает сбой. В свойствах документа на закладке «Движения» параметр «Удаление движений» обычно стоит в положении Автоматически. Это заставляет платформу очищать регистры перед вызовом процедуры ОбработкаУдаленияПроведения.
Мы можем взять этот процесс под свой контроль:
Не удалять автоматически (или Оставлять).ОбработкаУдаленияПроведения.Пример кода для реализации этого метода:
Процедура ОбработкаУдаленияПроведения(Отказ)
// Включаем привилегированный режим для обхода ошибки прав
УстановитьПривилегированныйРежим(Истина);
// Очищаем движения по конкретному регистру расчета
Движения.ОсновныеНачисленияРаботниковОрганизаций.Записывать = Истина;
Движения.ОсновныеНачисленияРаботниковОрганизаций.Очистить();
// Повторяем для всех регистров, по которым есть движения
// ...
// Записываем пустые наборы записей
Движения.Записать();
// Выключаем привилегированный режим
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Такой подход позволяет обойти ограничение платформы, так как команда Записать() будет выполнена от имени системы с игнорированием проверок прав доступа, которые вызывают ошибку.
Проанализируем связанные объекты. Часто ошибка «недостаточно прав» вызвана не самим регистром расчета, а связанным с ним объектом типа Перерасчет. В новых версиях платформы при очистке регистра расчета система автоматически пытается обновить записи в таблицах перерасчетов.
Что необходимо проверить:
Перерасчет, которые ссылаются на регистр ОсновныеНачисленияРаботниковОрганизаций.Если ни один из вышеперечисленных методов не помог, проанализируем состояние серверного окружения:
1C:Enterprise Server Administration и полностью удалить содержимое папки srvinfo/reg_XXXX/snccntx.Подводя итог, отметим, что для УПП 1.3 наиболее стабильным и рекомендуемым решением является использование платформы 8.3.20.2180. Все остальные методы являются обходными путями («костылями»), которые могут потребовать значительных трудозатрат на изменение кода и тестирование всей системы расчета заработной платы.