При попытке вывести отчет по уволенным сотрудникам в 1С:ЗУП многие разработчики сталкиваются с тем, что стандартные запросы к регистру ТекущиеКадровыеДанныеСотрудников не дают полной картины. Давайте разберем, почему это происходит и как правильно решить задачу получения списка уволенных лиц с учетом их вида занятости.
Ошибка многих начинающих разработчиков заключается в выборе регистра ТекущиеКадровыеДанныеСотрудников. Этот регистр спроектирован специально для получения актуальных данных на текущий момент времени. Как только сотрудник проходит процедуру увольнения, его статус меняется, и он перестает соответствовать фильтрам, наложенным на «текущие» данные.
Когда вы добавляете условие ГДЕ ТекущийВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы), система отсеивает всех, кто на текущий момент уже не числится работающим по основному месту. Именно поэтому уволенные сотрудники не попадают в выборку.
Вместо прямого обращения к таблицам базы данных, что чревато ошибками логики, мы рекомендуем использовать штатный API конфигурации. Библиотека стандартных подсистем и механизмы ЗУП предоставляют функции, которые учитывают все кадровые нюансы: переводы, внутренние совместительства и увольнения.
Основным инструментом для решения нашей задачи является функция КадровыйУчет.СотрудникиОрганизации. Она позволяет получить таблицу сотрудников с заданными кадровыми данными на указанный период.
Рассмотрим, как правильно сформировать запрос с использованием специализированных функций:
КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц.ДатаУвольнения и ВидЗанятости.Пример программного кода для реализации данной задачи:
&НаСервере
Функция ПолучитьСписокУволенныхСотрудников(ДатаНачала, ДатаОкончания, Организация)
// Получаем структуру параметров по умолчанию
ПараметрыПолучения = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
// Устанавливаем настройки выборки
ПараметрыПолучения.Организация = Организация;
ПараметрыПолучения.НачалоПериода = ДатаНачала;
ПараметрыПолучения.ОкончаниеПериода = ДатаОкончания;
// Задаем перечень необходимых кадровых данных
ПараметрыПолучения.КадровыеДанные = "Сотрудник,ФизическоеЛицо,ВидЗанятости,ДатаПриема,ДатаУвольнения";
// Получаем таблицу данных
ТаблицаСотрудников = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолучения);
// При необходимости фильтруем таблицу по ВидуЗанятости программно
// или используем полученную таблицу как источник данных для отчета
Возврат ТаблицаСотрудников;
КонецФункции
Если задача требует автоматизации и рассылки отчета, использование системы компоновки данных (СКД) будет оправдано при условии, что вы используете правильный источник данных.
Важные советы для реализации:
РегламентноеЗадание. Оно должно вызывать функцию формирования отчета, преобразовывать результат в табличный документ, сохранять его в формате Excel (SpreadsheetDocumentFileType.XLSX) и отправлять письмо через ИнтернетПочта.КадроваяИсторияСотрудников напрямую через сложные запросы, так как вы рискуете упустить специфические нюансы кадрового учета, которые уже реализованы разработчиками фирмы «1С» внутри функций КадровыйУчет.Использование предложенного подхода позволит вам не только получить корректный список уволенных сотрудников, но и обеспечит стабильную работу отчета при любых изменениях в структуре данных конфигурации.