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