Как исправить «Непредвиденную ошибку» при создании документов «Увольнение» и «Больничный лист» в ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

После планового обновления конфигурации 1С:Зарплата и Управление Персоналом 3.1 (особенно на релизах 3.1.26.13, 3.1.23.777 и выше) многие пользователи сталкиваются с критической проблемой. Кадровики при попытке создать или открыть документы Увольнение, Больничный лист или Отпуск получают сообщение: «Непредвиденная ошибка». При детальном анализе в журнале регистрации или окне ошибки обнаруживается текст, связанный с невозможностью установить значение атрибута Вид для группы формы.

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

Разбор технической причины ошибки

Проанализируем текст ошибки, который обычно выглядит следующим образом:


Ошибка при установке значения атрибута контекста (Вид)
{ОбщийМодуль.РасчетЗарплатыРасширенныйФормы.Модуль(305)}:ГруппаОтработаноОплачено.Вид = ВидГруппыФормы.ГруппаКолонок;
...
[ОшибкаВоВремяВыполненияВстроенногоЯзыка] по причине: Недопустимое значение

Проблема кроется в механизме динамического построения управляемой формы. В последних версиях ЗУП 3.1 разработчики существенно изменили логику работы общих модулей РасчетЗарплатыРасширенныйФормы и ЗарплатаКадрыРасширенный. Программа при открытии формы документа выполняет проверку: должен ли текущий пользователь видеть расчетные данные (начисления, показатели, суммы).

Если код инициализации формы определяет, что у пользователя есть права на просмотр зарплаты, он пытается программно добавить на форму группу колонок ГруппаОтработаноОплачено и изменить ее вид на ГруппаКолонок. Однако, если конфигурация прав доступа настроена противоречиво, возникает конфликт: программный код считает, что права есть, а платформа на уровне ядра блокирует изменение видимости или структуры элементов, на которые у пользователя нет фактического доступа по метаданным. Это и приводит к фатальному завершению работы формы.

Причина №1: Некорректное использование роли «Удаленный доступ (OData)»

Рассмотрим наиболее частую ситуацию. Часто системные администраторы или программисты, пытаясь решить проблемы с выгрузкой документов в СЭДО (СФР/ФСС), добавляют кадровикам роль Удаленный доступ (OData). Это кажется простым решением, так как роль дает широкие права на чтение различных объектов.

Однако выясним, к чему это приводит внутри кода ЗУП:

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

Решение: Немедленно исключите роль Удаленный доступ (OData) из профилей кадровых сотрудников. Эта роль предназначена для интеграции внешних систем и не должна использоваться для настройки прав обычных пользователей внутри интерфейса 1С.

Причина №2: Проблемы с выгрузкой в ФСС (СЭДО)

Почему же кадровикам вообще пытались добавить лишние роли? В новых релизах выгрузка в СЭДО требует прав на новые объекты, которые разработчики 1С забыли включить в типовые роли кадровиков. Рассмотрим, как решить эту задачу правильно, не «ломая» формы документов.

Для корректной работы СЭДО кадровику требуются права на следующие объекты:

Проанализируем правильный алгоритм действий:

  1. Создадим новое Расширение конфигурации (если оно еще не создано для исправления ошибок).
  2. Добавим в расширение указанные выше объекты (регистры и константы).
  3. Создадим в расширении новую Роль, назовем ее, например, ИсправлениеПравСЭДО.
  4. В этой роли установим права «Чтение» и «Просмотр» для добавленных объектов.
  5. Назначим эту роль пользователям-кадровикам через «Профили групп доступа».

Причина №3: Необходимость установки официальных патчей

Компания 1С признала наличие ошибок в логике отрисовки форм. Для их устранения выпущены специальные патчи (исправления). Посмотрим, какие патчи должны быть установлены в вашей базе для стабильной работы:

Убедитесь, что в разделе Администрирование — Обслуживание — Обновление программы — Установленные исправления (патчи) включена автоматическая загрузка и установлены последние актуальные исправления.

Пошаговый алгоритм исправления «Непредвиденной ошибки»

Выполним следующие шаги для полного восстановления работы:

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

Пример кода для расширения (если вы создаете свои права)

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


&НаСервере
Процедура Исп_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Проверяем наличие критичного реквизита, вызывающего ошибку
    Попытка
        Если ЭтаФорма.Элементы.Найти("ГруппаОтработаноОплачено") <> Неопределено Тогда
            // Принудительно проверяем, чтобы вид группы соответствовал правам
            // Если возникла ошибка инициализации, скрываем проблемный элемент
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("Ошибка.ФормаУвольнения", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Использование подобных конструкций в расширении позволяет «смягчить» падение системы, если типовой код 1С снова неверно определит состав прав доступа. Однако лучшим решением остается использование штатных патчей и корректная настройка профилей без избыточных OData-ролей.

Таким образом, мы выяснили, что «Непредвиденная ошибка» — это результат попытки системы отобразить зарплатные колонки пользователю, которому они запрещены. Тщательно следите за составом ролей ваших кадровиков и не используйте технические роли (OData, Полные права) для решения локальных проблем с отчетностью.

← На главную