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