Другое · 8 мин
Как получить должность пользователя в 1С
Как получить должность пользователя или сотрудника в 1С: через интерфейс ЗУП, кадровые документы, запрос и встроенный язык. Примеры кода, ошибки и проверка результата.
Должность пользователя в 1С чаще всего требуется в двух ситуациях: когда бухгалтер или кадровик ищет её в интерфейсе программы и когда разработчику нужно получить её программно — для отчёта, печатной формы или проверки прав. Важно сразу различать два объекта: «пользователь» (учётная запись для входа в программу) и «сотрудник» (элемент справочника, привязанный к физическому лицу). Должность хранится именно у сотрудника, а не у пользователя.
В типовых конфигурациях — 1С:ЗУП, 1С:Бухгалтерия, 1С:ERP — должность определяется кадровыми документами: приёмом на работу, кадровым переводом. Поэтому корректный ответ на вопрос «какая у человека должность» зависит от даты: сотрудник мог быть переведён, и на разные даты значения будут разными.
Ниже разобраны все практические способы: просмотр в интерфейсе, получение через запрос к регистрам сведений, программное получение на встроенном языке, а также типичные ошибки, из-за которых должность «не находится» или возвращается устаревшей.
Где в 1С хранится должность сотрудника
В конфигурациях на базе БСП и в 1С:ЗУП должность — это элемент справочника «Должности», а её связь с сотрудником фиксируется документами и регистрами. В ЗУП актуальные и исторические кадровые данные хранятся в регистре сведений «Кадровая история сотрудников» (в старых версиях — «Работники организаций»). В 1С:Бухгалтерии должность чаще всего указывается непосредственно в карточке сотрудника и в документе «Приём на работу».
Пользователь информационной базы (справочник «Пользователи») связан с физическим лицом через реквизит «Физическое лицо», а физическое лицо — с сотрудниками. Поэтому цепочка получения должности от пользователя выглядит так: Пользователь → Физическое лицо → Сотрудник → Кадровая история → Должность.
Как посмотреть должность в интерфейсе без программирования
Для разовой проверки программировать ничего не нужно. Откройте раздел «Кадры» (в ЗУП) или «Справочники» → «Сотрудники» (в Бухгалтерии), найдите нужного человека и откройте его карточку. Должность указана в шапке карточки или на вкладке с трудовым договором.
Чтобы увидеть историю изменений, откройте из карточки сотрудника ссылку «Трудовой договор» или список кадровых документов: «Приём на работу», «Кадровый перевод». Последний проведённый документ на нужную дату и определяет действующую должность.
Если нужна должность по пользователю информационной базы, сначала выясните связанное физическое лицо: откройте «Администрирование» → «Пользователи», найдите учётную запись и посмотрите реквизит «Физическое лицо». Затем найдите сотрудника по этому физлицу.
- 1Откройте справочник «Сотрудники» и найдите нужного человека
- 2Откройте карточку сотрудника — должность указана в шапке или на вкладке трудового договора
- 3Для истории откройте кадровые документы сотрудника
- 4Сверьте дату: действующей считается должность из последнего проведённого документа на нужную дату
Как получить должность запросом
Для отчётов и обработок должность получают запросом к регистру сведений. В 1С:ЗУП используется срез последних регистра «Кадровая история сотрудников» с передачей даты, на которую нужно значение.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КадроваяИстория.Должность КАК Должность
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(
| &Период, Сотрудник = &Сотрудник) КАК КадроваяИстория";
Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Сотрудник", СотрудникСсылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Должность = Выборка.Должность;
КонецЕсли;Обратите внимание на параметр «Период»: если передать пустую дату, срез вернёт последнюю запись вообще, что обычно совпадает с ожиданием, но для отчётов за прошлые периоды дату нужно передавать явно. Если сотрудник уволен, срез всё равно вернёт последнюю должность — факт увольнения проверяйте отдельно.
В 1С:Бухгалтерии, где нет развитого кадрового учёта, должность может храниться как реквизит справочника «Сотрудники» — тогда достаточно простого обращения к реквизиту без регистра.
Как получить должность от текущего пользователя программно
Частая задача — определить должность того, кто сейчас работает в программе, например чтобы подставить её в печатную форму. Для этого сначала получают текущего пользователя, затем связанное физическое лицо и сотрудника.
ТекущийПользователь = Пользователи.ТекущийПользователь();
ФизЛицо = ТекущийПользователь.ФизическоеЛицо;
// Далее ищем сотрудника по физлицу (ЗУП):
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Сотрудники.Ссылка КАК Сотрудник
|ИЗ Справочник.Сотрудники КАК Сотрудники
|ГДЕ Сотрудники.ФизическоеЛицо = &ФизЛицо
| И НЕ Сотрудники.ВАрхиве";
Запрос.УстановитьПараметр("ФизЛицо", ФизЛицо);Учтите: у одного физического лица может быть несколько сотрудников (основное место работы и совместительство). В ЗУП для выбора основного сотрудника есть функции общего модуля «КадровыйУчет», например получение основных сотрудников по списку физических лиц — используйте их вместо самописного отбора, чтобы учесть период работы.
Как проверить, что полученное значение корректно
После написания запроса или кода сверьте результат с интерфейсом: откройте карточку сотрудника и сравните должность с той, что вернул код на ту же дату. Расхождение почти всегда означает, что запрос берёт не ту дату или не того сотрудника.
Как проверить результат
Совпадает с карточкой сотрудника
Возвращается старая должность до перевода
Передана явно и соответствует отчётному периоду
Пустая дата или дата сервера вместо даты документа
Выбран основной сотрудник на нужный период
Подхвачен совместитель или уволенный сотрудник
Типичные ошибки и ограничения
Самая распространённая ошибка — обращение к должности как к реквизиту справочника там, где она хранится в регистре. В ЗУП попытка написать «Сотрудник.Должность» не даст результата, потому что такого реквизита у справочника нет. Вторая частая проблема — игнорирование даты: кадровый перевод проведён, а отчёт показывает старую должность, потому что срез берётся на неверную дату.
Ещё один подводный камень — непроведённые или помеченные на удаление кадровые документы: регистр строится по движениям документов, поэтому исправленный, но не проведённый «Кадровый перевод» не изменит должность в выборке. Также в файловых копиях баз, где кадровые документы вводятся редко, должность может быть просто не заведена.
Частые вопросы
Почему запрос возвращает пустую должность?
Чаще всего причины три: у сотрудника нет ни одного проведённого кадрового документа, в параметр «Сотрудник» передана пустая ссылка, либо дата среза раньше даты приёма на работу. Проверьте наличие проведённого «Приёма на работу» и значения параметров запроса.
Как получить должность в 1С:Бухгалтерии, где нет ЗУП?
В 1С:Бухгалтерии должность обычно хранится в карточке сотрудника и в документе «Приём на работу». Для программного получения достаточно обратиться к реквизиту справочника «Сотрудники» или к данным последнего кадрового документа — отдельного регистра кадровой истории там может не быть.
Можно ли получить должность напрямую от пользователя информационной базы?
Нет, у объекта «Пользователь» нет реквизита «Должность». Нужно пройти цепочку: пользователь → физическое лицо → сотрудник → кадровая история. Если связь пользователя с физлицом не заполнена, её требуется установить в карточке пользователя.
Как получить должности сразу по списку сотрудников для отчёта?
Используйте один запрос со срезом последних по регистру «Кадровая история сотрудников» с условием «Сотрудник В (&СписокСотрудников)» и левым соединением к основной таблице отчёта. Это работает значительно быстрее, чем запрос в цикле по каждому сотруднику.
Сотрудника перевели, а отчёт показывает старую должность. Что делать?
Проверьте, проведён ли документ «Кадровый перевод», и какую дату вы передаёте в срез последних. Если дата запроса раньше даты перевода, старая должность — корректный результат. Если дата верная, а документ проведён, проверьте, не создан ли перевод в другой организации или по другому сотруднику того же физлица.
Что важно запомнить
Должность привязана к сотруднику, а не к пользователю, и определяется кадровыми документами на конкретную дату. В интерфейсе её видно в карточке сотрудника, программно — через срез последних регистра кадровой истории с явной датой. Всегда проверяйте связь пользователя с физлицом и совпадение результата с карточкой сотрудника.