Почему в отчете «Штатные сотрудники» в 1С:ЗУП 3.1 отсутствует отбор по сотруднику и как это исправить?

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

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

Выясним причину проблемы: особенности RLS и СКД

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

В случае с отчетом «Штатные сотрудники», данные собираются не только из справочника Сотрудники, но и из множества регистров, таких как ТекущиеДанныеСотрудников, КадроваяИсторияСотрудников и других. Профиль «Кадровик без доступа к зарплате» намеренно ограничен разработчиками 1С так, чтобы исключить косвенное получение финансовых данных. К сожалению, иногда это приводит к тому, что поле Сотрудник становится недоступным для отбора, так как система считает его потенциально «опасным» в данном контексте прав.

Способ 1: Использование отбора по Физическому лицу (Штатный обход)

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

  1. Откроем отчет «Штатные сотрудники».
  2. Нажмем кнопку «Настройки...».
  3. Переключим вид настроек на «Расширенный» (внизу окна настроек).
  4. Перейдем на закладку «Отборы».
  5. Нажмем кнопку «Добавить отбор» и в дереве доступных полей найдем поле «Физическое лицо».

Поскольку в ЗУП 3.1 связь между справочниками Сотрудники и ФизическиеЛица является жесткой, выбор конкретного физлица в отчете даст тот же результат, что и выбор сотрудника. Это наиболее безопасный метод, который рекомендует техподдержка 1С.

Способ 2: Корректировка профиля групп доступа и добавление ролей

Если пользователям психологически неудобно искать по физлицу, или бизнес-процесс требует именно поле Сотрудник, нам придется вмешаться в настройки прав доступа. Посмотрим, какие типовые роли могут помочь вернуть доступ к полю.

Рекомендуем создать новый Профиль групп доступа (или скопировать существующий профиль кадровика) и добавить в него следующие роли:

После добавления ролей в профиль, обязательно обновите настройки прав у пользователя и попробуйте зайти в отчет заново. Также стоит проверить настройки в разделе «Администрирование» — «Настройки пользователей и прав» — «Группы доступа». Если включен RLS по физическим лицам, убедитесь, что кадровик включен во все необходимые группы доступа физических лиц.

Способ 3: Техническая доработка запроса отчета через расширение

Рассмотрим вариант для продвинутых пользователей и программистов. Если типовые роли не помогают (что часто случается в версии КОРП из-за сложного переплетения прав), можно прибегнуть к модификации схемы компоновки данных через расширение.

Проанализируем пример того, как можно принудительно «подсунуть» поле сотрудника в отчет, соединив его с виртуальной таблицей, на которую у пользователя точно есть права. Для этого в схеме компоновки данных (СКД) можно добавить левое соединение с самим справочником Сотрудники.


// Пример логики изменения запроса в СКД (упрощенно)
ВЫБРАТЬ
    ТекущиеДанные.Сотрудник КАК Сотрудник,
    СпрСотрудники.Ссылка КАК СотрудникОрганизации
ИЗ
    РегистрСведений.ТекущиеДанныеСотрудников КАК ТекущиеДанные
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК СпрСотрудники
    ПО ТекущиеДанные.Сотрудник = СпрСотрудники.Ссылка

Добавив поле СотрудникОрганизации из прямой ссылки на справочник и выведя его в доступные поля отбора, мы обходим ограничение СКД, наложенное на основную таблицу ТекущиеДанныеСотрудников. Важно: при таком подходе нужно убедиться, что у пользователя есть право «Чтение» на справочник Сотрудники без ограничений по RLS (или с корректно настроенными ограничениями).

Способ 4: Проверка «Добавления и изменения данных для начисления зарплаты»

Существует специфическая особенность в ЗУП 3.1, когда некоторые поля кадровых регистров становятся доступны только при наличии прав на изменение данных для начисления зарплаты. Проанализируем настройки профиля:

  1. Зайдем в настройки профиля кадровика.
  2. Найдем роль «Добавление и изменение данных для начисления зарплаты».
  3. В системе часто присутствует три варианта этой роли. Попробуйте поочередно добавить их (начиная с самой ограниченной) в тестовый профиль.

Иногда включение минимального права на просмотр расчетных механизмов (даже без доступа к самим суммам) «открывает» видимость полей сотрудников в сложных отчетах СКД.

Способ 5: Сброс настроек отчета и очистка кэша

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

Подводя итог, отметим, что проблема отсутствия отбора по сотруднику — это чаще всего следствие жесткой политики безопасности 1С в отношении персональных и финансовых данных. Наиболее стабильным решением без внесения изменений в код является использование поля Физическое лицо, а для полноценного исправления требуется детальная настройка профилей групп доступа с добавлением специализированных ролей чтения данных сотрудников.

← На главную