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