После планового обновления конфигурации 1С:Зарплата и Управление Персоналом 3.1 (особенно на релизах 3.1.26.13, 3.1.23.777 и выше) многие пользователи сталкиваются с критической проблемой. Кадровики при попытке создать или открыть документы Увольнение, Больничный лист или Отпуск получают сообщение: «Непредвиденная ошибка». При детальном анализе в журнале регистрации или окне ошибки обнаруживается текст, связанный с невозможностью установить значение атрибута Вид для группы формы.
В этой статье мы подробно разберем, почему возникает этот программный сбой, как он связан с правами доступа и как правильно восстановить работоспособность программы, не нарушая логику разделения прав между кадровиками и расчетчиками.
Проанализируем текст ошибки, который обычно выглядит следующим образом:
Ошибка при установке значения атрибута контекста (Вид)
{ОбщийМодуль.РасчетЗарплатыРасширенныйФормы.Модуль(305)}:ГруппаОтработаноОплачено.Вид = ВидГруппыФормы.ГруппаКолонок;
...
[ОшибкаВоВремяВыполненияВстроенногоЯзыка] по причине: Недопустимое значение
Проблема кроется в механизме динамического построения управляемой формы. В последних версиях ЗУП 3.1 разработчики существенно изменили логику работы общих модулей РасчетЗарплатыРасширенныйФормы и ЗарплатаКадрыРасширенный. Программа при открытии формы документа выполняет проверку: должен ли текущий пользователь видеть расчетные данные (начисления, показатели, суммы).
Если код инициализации формы определяет, что у пользователя есть права на просмотр зарплаты, он пытается программно добавить на форму группу колонок ГруппаОтработаноОплачено и изменить ее вид на ГруппаКолонок. Однако, если конфигурация прав доступа настроена противоречиво, возникает конфликт: программный код считает, что права есть, а платформа на уровне ядра блокирует изменение видимости или структуры элементов, на которые у пользователя нет фактического доступа по метаданным. Это и приводит к фатальному завершению работы формы.
Рассмотрим наиболее частую ситуацию. Часто системные администраторы или программисты, пытаясь решить проблемы с выгрузкой документов в СЭДО (СФР/ФСС), добавляют кадровикам роль Удаленный доступ (OData). Это кажется простым решением, так как роль дает широкие права на чтение различных объектов.
Однако выясним, к чему это приводит внутри кода ЗУП:
НачисленнаяЗарплатаПросмотрОрганизации.Удаленный доступ (OData) зачастую косвенно или напрямую дает права, которые интерпретируются системой как «Пользователю доступен расчет зарплаты».РегистрацияНачисленийДоступна принимает значение Истина.Решение: Немедленно исключите роль Удаленный доступ (OData) из профилей кадровых сотрудников. Эта роль предназначена для интеграции внешних систем и не должна использоваться для настройки прав обычных пользователей внутри интерфейса 1С.
Почему же кадровикам вообще пытались добавить лишние роли? В новых релизах выгрузка в СЭДО требует прав на новые объекты, которые разработчики 1С забыли включить в типовые роли кадровиков. Рассмотрим, как решить эту задачу правильно, не «ломая» формы документов.
Для корректной работы СЭДО кадровику требуются права на следующие объекты:
СнилсВходящихСообщенийСЭДО;СостоянияСообщенийСЭДО;ВестиУчетОтчитывающихсяПоВзносамОрганизаций.Проанализируем правильный алгоритм действий:
ИсправлениеПравСЭДО.Компания 1С признала наличие ошибок в логике отрисовки форм. Для их устранения выпущены специальные патчи (исправления). Посмотрим, какие патчи должны быть установлены в вашей базе для стабильной работы:
Увольнение.Убедитесь, что в разделе Администрирование — Обслуживание — Обновление программы — Установленные исправления (патчи) включена автоматическая загрузка и установлены последние актуальные исправления.
Выполним следующие шаги для полного восстановления работы:
Удаленный доступ (OData). Также проверьте, чтобы у кадровиков не было ролей, связанных с «Просмотром начисленной зарплаты», если они не должны ее видеть.Тестирование и исправление с галочкой «Проверка логической целостности», если патчи не помогли сразу.Если вы решите программно проверить доступность начислений перед открытием формы, вы можете использовать следующий подход в расширении модуля формы:
&НаСервере
Процедура Исп_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Проверяем наличие критичного реквизита, вызывающего ошибку
Попытка
Если ЭтаФорма.Элементы.Найти("ГруппаОтработаноОплачено") <> Неопределено Тогда
// Принудительно проверяем, чтобы вид группы соответствовал правам
// Если возникла ошибка инициализации, скрываем проблемный элемент
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("Ошибка.ФормаУвольнения", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Использование подобных конструкций в расширении позволяет «смягчить» падение системы, если типовой код 1С снова неверно определит состав прав доступа. Однако лучшим решением остается использование штатных патчей и корректная настройка профилей без избыточных OData-ролей.
Таким образом, мы выяснили, что «Непредвиденная ошибка» — это результат попытки системы отобразить зарплатные колонки пользователю, которому они запрещены. Тщательно следите за составом ролей ваших кадровиков и не используйте технические роли (OData, Полные права) для решения локальных проблем с отчетностью.