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