К статье
Практический материал

Другое · 8 мин

Как получить должность пользователя в 1С

Как получить должность пользователя или сотрудника в 1С: через интерфейс ЗУП, кадровые документы, запрос и встроенный язык. Примеры кода, ошибки и проверка результата.

Должность пользователя в 1С чаще всего требуется в двух ситуациях: когда бухгалтер или кадровик ищет её в интерфейсе программы и когда разработчику нужно получить её программно — для отчёта, печатной формы или проверки прав. Важно сразу различать два объекта: «пользователь» (учётная запись для входа в программу) и «сотрудник» (элемент справочника, привязанный к физическому лицу). Должность хранится именно у сотрудника, а не у пользователя.

В типовых конфигурациях — 1С:ЗУП, 1С:Бухгалтерия, 1С:ERP — должность определяется кадровыми документами: приёмом на работу, кадровым переводом. Поэтому корректный ответ на вопрос «какая у человека должность» зависит от даты: сотрудник мог быть переведён, и на разные даты значения будут разными.

Ниже разобраны все практические способы: просмотр в интерфейсе, получение через запрос к регистрам сведений, программное получение на встроенном языке, а также типичные ошибки, из-за которых должность «не находится» или возвращается устаревшей.

Где в 1С хранится должность сотрудника

В конфигурациях на базе БСП и в 1С:ЗУП должность — это элемент справочника «Должности», а её связь с сотрудником фиксируется документами и регистрами. В ЗУП актуальные и исторические кадровые данные хранятся в регистре сведений «Кадровая история сотрудников» (в старых версиях — «Работники организаций»). В 1С:Бухгалтерии должность чаще всего указывается непосредственно в карточке сотрудника и в документе «Приём на работу».

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

Как посмотреть должность в интерфейсе без программирования

Для разовой проверки программировать ничего не нужно. Откройте раздел «Кадры» (в ЗУП) или «Справочники» → «Сотрудники» (в Бухгалтерии), найдите нужного человека и откройте его карточку. Должность указана в шапке карточки или на вкладке с трудовым договором.

Чтобы увидеть историю изменений, откройте из карточки сотрудника ссылку «Трудовой договор» или список кадровых документов: «Приём на работу», «Кадровый перевод». Последний проведённый документ на нужную дату и определяет действующую должность.

Если нужна должность по пользователю информационной базы, сначала выясните связанное физическое лицо: откройте «Администрирование» → «Пользователи», найдите учётную запись и посмотрите реквизит «Физическое лицо». Затем найдите сотрудника по этому физлицу.

Как найти должность в интерфейсе
  1. 1
    Откройте справочник «Сотрудники» и найдите нужного человека
  2. 2
    Откройте карточку сотрудника — должность указана в шапке или на вкладке трудового договора
  3. 3
    Для истории откройте кадровые документы сотрудника
  4. 4
    Сверьте дату: действующей считается должность из последнего проведённого документа на нужную дату

Как получить должность запросом

Для отчётов и обработок должность получают запросом к регистру сведений. В 1С:ЗУП используется срез последних регистра «Кадровая история сотрудников» с передачей даты, на которую нужно значение.

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИстория.Должность КАК Должность
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(
| &Период, Сотрудник = &Сотрудник) КАК КадроваяИстория";
Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Сотрудник", СотрудникСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
 Должность = Выборка.Должность;
КонецЕсли;

Обратите внимание на параметр «Период»: если передать пустую дату, срез вернёт последнюю запись вообще, что обычно совпадает с ожиданием, но для отчётов за прошлые периоды дату нужно передавать явно. Если сотрудник уволен, срез всё равно вернёт последнюю должность — факт увольнения проверяйте отдельно.

В 1С:Бухгалтерии, где нет развитого кадрового учёта, должность может храниться как реквизит справочника «Сотрудники» — тогда достаточно простого обращения к реквизиту без регистра.

Как получить должность от текущего пользователя программно

Частая задача — определить должность того, кто сейчас работает в программе, например чтобы подставить её в печатную форму. Для этого сначала получают текущего пользователя, затем связанное физическое лицо и сотрудника.

bsl
ТекущийПользователь = Пользователи.ТекущийПользователь();
ФизЛицо = ТекущийПользователь.ФизическоеЛицо;
// Далее ищем сотрудника по физлицу (ЗУП):
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Сотрудники.Ссылка КАК Сотрудник
|ИЗ Справочник.Сотрудники КАК Сотрудники
|ГДЕ Сотрудники.ФизическоеЛицо = &ФизЛицо
| И НЕ Сотрудники.ВАрхиве";
Запрос.УстановитьПараметр("ФизЛицо", ФизЛицо);

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

Как проверить, что полученное значение корректно

После написания запроса или кода сверьте результат с интерфейсом: откройте карточку сотрудника и сравните должность с той, что вернул код на ту же дату. Расхождение почти всегда означает, что запрос берёт не ту дату или не того сотрудника.

Контрольные точки

Как проверить результат

Должность на текущую дату
Норма

Совпадает с карточкой сотрудника

Тревожный признак

Возвращается старая должность до перевода

Дата в параметрах запроса
Норма

Передана явно и соответствует отчётному периоду

Тревожный признак

Пустая дата или дата сервера вместо даты документа

Выбор сотрудника по физлицу
Норма

Выбран основной сотрудник на нужный период

Тревожный признак

Подхвачен совместитель или уволенный сотрудник

Типичные ошибки и ограничения

Самая распространённая ошибка — обращение к должности как к реквизиту справочника там, где она хранится в регистре. В ЗУП попытка написать «Сотрудник.Должность» не даст результата, потому что такого реквизита у справочника нет. Вторая частая проблема — игнорирование даты: кадровый перевод проведён, а отчёт показывает старую должность, потому что срез берётся на неверную дату.

Ещё один подводный камень — непроведённые или помеченные на удаление кадровые документы: регистр строится по движениям документов, поэтому исправленный, но не проведённый «Кадровый перевод» не изменит должность в выборке. Также в файловых копиях баз, где кадровые документы вводятся редко, должность может быть просто не заведена.

Типичные ошибки
01
Обращение к несуществующему реквизиту справочника вместо запроса к регистру — код падает или возвращает пусто
02
Срез последних без даты — в отчёте за прошлый период выводится текущая должность
03
Выбор первого попавшегося сотрудника по физлицу — подхватывается совместитель
04
Игнорирование непроведённых кадровых документов — данные в регистре не обновились

Частые вопросы

Почему запрос возвращает пустую должность?

Чаще всего причины три: у сотрудника нет ни одного проведённого кадрового документа, в параметр «Сотрудник» передана пустая ссылка, либо дата среза раньше даты приёма на работу. Проверьте наличие проведённого «Приёма на работу» и значения параметров запроса.

Как получить должность в 1С:Бухгалтерии, где нет ЗУП?

В 1С:Бухгалтерии должность обычно хранится в карточке сотрудника и в документе «Приём на работу». Для программного получения достаточно обратиться к реквизиту справочника «Сотрудники» или к данным последнего кадрового документа — отдельного регистра кадровой истории там может не быть.

Можно ли получить должность напрямую от пользователя информационной базы?

Нет, у объекта «Пользователь» нет реквизита «Должность». Нужно пройти цепочку: пользователь → физическое лицо → сотрудник → кадровая история. Если связь пользователя с физлицом не заполнена, её требуется установить в карточке пользователя.

Как получить должности сразу по списку сотрудников для отчёта?

Используйте один запрос со срезом последних по регистру «Кадровая история сотрудников» с условием «Сотрудник В (&СписокСотрудников)» и левым соединением к основной таблице отчёта. Это работает значительно быстрее, чем запрос в цикле по каждому сотруднику.

Сотрудника перевели, а отчёт показывает старую должность. Что делать?

Проверьте, проведён ли документ «Кадровый перевод», и какую дату вы передаёте в срез последних. Если дата запроса раньше даты перевода, старая должность — корректный результат. Если дата верная, а документ проведён, проверьте, не создан ли перевод в другой организации или по другому сотруднику того же физлица.

Итог

Что важно запомнить

Должность привязана к сотруднику, а не к пользователю, и определяется кадровыми документами на конкретную дату. В интерфейсе её видно в карточке сотрудника, программно — через срез последних регистра кадровой истории с явной датой. Всегда проверяйте связь пользователя с физлицом и совпадение результата с карточкой сотрудника.