При работе в программе 1С:Зарплата и управление персоналом 3.1 (особенно в версии КОРП) пользователи часто сталкиваются с ситуацией, когда под профилем «Кадровик» или «Кадровик без доступа к зарплате» в типовом отчете «Штатные сотрудники» пропадает возможность выбрать конкретного сотрудника в отборах. При этом под полными правами или правами администратора все работает корректно. Рассмотрим подробнее, почему так происходит, и разберем по шагам все возможные способы решения этой проблемы.
Проанализируем ситуацию с технической точки зрения. В системе 1С:Предприятие 8.3 механизм ограничения доступа на уровне записей (RLS) тесно связан с Системой компоновки данных (СКД). Если у пользователя нет прав на чтение хотя бы одного поля, которое задействовано в цепочке связей или в итоговой выборке запроса, СКД может полностью скрыть это поле из доступных настроек (отборов, колонок, группировок), чтобы предотвратить возникновение ошибок при выполнении запроса.
В случае с отчетом «Штатные сотрудники», данные собираются не только из справочника Сотрудники, но и из множества регистров, таких как ТекущиеДанныеСотрудников, КадроваяИсторияСотрудников и других. Профиль «Кадровик без доступа к зарплате» намеренно ограничен разработчиками 1С так, чтобы исключить косвенное получение финансовых данных. К сожалению, иногда это приводит к тому, что поле Сотрудник становится недоступным для отбора, так как система считает его потенциально «опасным» в данном контексте прав.
Разберем самый простой и быстрый способ, который не требует программирования и изменения ролей. Если поле Сотрудник недоступно, мы можем воспользоваться альтернативным полем, которое почти всегда остается открытым для кадровиков.
Поскольку в ЗУП 3.1 связь между справочниками Сотрудники и ФизическиеЛица является жесткой, выбор конкретного физлица в отчете даст тот же результат, что и выбор сотрудника. Это наиболее безопасный метод, который рекомендует техподдержка 1С.
Если пользователям психологически неудобно искать по физлицу, или бизнес-процесс требует именно поле Сотрудник, нам придется вмешаться в настройки прав доступа. Посмотрим, какие типовые роли могут помочь вернуть доступ к полю.
Рекомендуем создать новый Профиль групп доступа (или скопировать существующий профиль кадровика) и добавить в него следующие роли:
После добавления ролей в профиль, обязательно обновите настройки прав у пользователя и попробуйте зайти в отчет заново. Также стоит проверить настройки в разделе «Администрирование» — «Настройки пользователей и прав» — «Группы доступа». Если включен RLS по физическим лицам, убедитесь, что кадровик включен во все необходимые группы доступа физических лиц.
Рассмотрим вариант для продвинутых пользователей и программистов. Если типовые роли не помогают (что часто случается в версии КОРП из-за сложного переплетения прав), можно прибегнуть к модификации схемы компоновки данных через расширение.
Проанализируем пример того, как можно принудительно «подсунуть» поле сотрудника в отчет, соединив его с виртуальной таблицей, на которую у пользователя точно есть права. Для этого в схеме компоновки данных (СКД) можно добавить левое соединение с самим справочником Сотрудники.
// Пример логики изменения запроса в СКД (упрощенно)
ВЫБРАТЬ
ТекущиеДанные.Сотрудник КАК Сотрудник,
СпрСотрудники.Ссылка КАК СотрудникОрганизации
ИЗ
РегистрСведений.ТекущиеДанныеСотрудников КАК ТекущиеДанные
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК СпрСотрудники
ПО ТекущиеДанные.Сотрудник = СпрСотрудники.Ссылка
Добавив поле СотрудникОрганизации из прямой ссылки на справочник и выведя его в доступные поля отбора, мы обходим ограничение СКД, наложенное на основную таблицу ТекущиеДанныеСотрудников. Важно: при таком подходе нужно убедиться, что у пользователя есть право «Чтение» на справочник Сотрудники без ограничений по RLS (или с корректно настроенными ограничениями).
Существует специфическая особенность в ЗУП 3.1, когда некоторые поля кадровых регистров становятся доступны только при наличии прав на изменение данных для начисления зарплаты. Проанализируем настройки профиля:
Иногда включение минимального права на просмотр расчетных механизмов (даже без доступа к самим суммам) «открывает» видимость полей сотрудников в сложных отчетах СКД.
Если вы уже изменили права доступа, но поле в отчете так и не появилось, возможно, проблема в закэшированных настройках пользователя. Выполним следующие действия:
Подводя итог, отметим, что проблема отсутствия отбора по сотруднику — это чаще всего следствие жесткой политики безопасности 1С в отношении персональных и финансовых данных. Наиболее стабильным решением без внесения изменений в код является использование поля Физическое лицо, а для полноценного исправления требуется детальная настройка профилей групп доступа с добавлением специализированных ролей чтения данных сотрудников.