При формировании отчета «Расчетный листок» в конфигурациях «1С:Зарплата и управление персоналом» или «1С:Зарплата и кадры государственного учреждения» пользователи могут столкнуться с неожиданным сообщением о нехватке прав, даже если у текущей учетной записи назначены полные административные права. Разберем подробнее, почему возникает данная ситуация и как правильно её исправить.
Ошибка проявляется при компоновке отчета и сопровождается следующим диагностическим сообщением в журнале или окне программы:
В настройку отчета "Расчетный листок" внесены критичные изменения. Отчет не будет сформирован. У пользователя недостаточно прав на исполнение операции над базой данных.
Проанализируем ключевые особенности поведения системы в этот момент:
ПриКомпоновкеРезультата общего модуля ЗарплатаКадрыОтчеты система маскирует реальную проблему запроса стандартной фразой о правах.Выясним причину на уровне исходного кода конфигурации. В общем модуле ЗарплатаКадрыОбщиеНаборыДанныхБазовый для расчета приоритета рабочего места используется математическое выражение с перемножением составляющих даты:
ГОД(КадровыеДанныеСотрудников.ДатаУвольнения) * 100000000
+ МЕСЯЦ(КадровыеДанныеСотрудников.ДатаУвольнения) * 10000
* ДЕНЬ(КадровыеДанныеСотрудников.ДатаУвольнения) * 100
Если поле ДатаУвольнения не заполнено (в платформе 1С это значение по умолчанию 0001-01-01), транслятор запросов платформы при работе с PostgreSQL генерирует SQL-конструкцию, вызывающую переполнение числовых типов или исключение при обработке граничной даты. СУБД прерывает транзакцию, а СКД выдает ложное сообщение о правах.
Рассмотрим прямое исправление исходного кода, если требуется оперативно восстановить работоспособность отчета без ожидания полного обновления конфигурации.
ЗарплатаКадрыОбщиеНаборыДанныхБазовый.ПриоритетРабочегоМеста:
| ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка)
| ТОГДА 9999999999
| ИНАЧЕ ГОД(КадровыеДанныеСотрудников.ДатаУвольнения) * 100000000 + МЕСЯЦ(КадровыеДанныеСотрудников.ДатаУвольнения) * 10000 * ДЕНЬ(КадровыеДанныеСотрудников.ДатаУвольнения) * 100
| КОНЕЦ + КадровыеДанныеСотрудников.ВидЗанятости.Порядок КАК ПриоритетРабочегоМеста
РАЗНОСТЬДАТ:
| ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка)
| ТОГДА 9999999999
| ИНАЧЕ РАЗНОСТЬДАТ(ВЫБОР
| КОГДА КадровыеДанныеСотрудников.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА ДАТАВРЕМЯ(1900, 1, 1)
| ИНАЧЕ КадровыеДанныеСотрудников.ДатаУвольнения
| КОНЕЦ, ДАТАВРЕМЯ(1900, 1, 1), ДЕНЬ) * 100
| КОНЕЦ + КадровыеДанныеСотрудников.ВидЗанятости.Порядок КАК ПриоритетРабочегоМеста
После сохранения конфигурации и обновления базы данных расчетный листок начнет корректно формироваться по всем сотрудникам за любые периоды.
Чтобы не снимать конфигурацию с полной поддержки поставщика, перенесем исправление в расширение:
ЗарплатаКадрыОбщиеНаборыДанныхБазовый.&Вместо или &ИзменениеИКонтроль, подставив исправленный текст запроса с вычислением разности дат.Разработчики фирмы «1С» устранили ошибку 40000543 в релизе 3.1.3.157. Если информационная база находится на типовой поддержке, наиболее правильным долгосрочным решением будет обновление конфигураций «1С:ЗУП» или «1С:ЗГУ» до релиза 3.1.3.157 или более актуальных версий ветки 3.1.