Как в 1С:ЗУП 3.1 реализовать учет временных сотрудников и отчет «Кто вместо кого»

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

В практике кадрового учета часто возникает ситуация, когда на время отсутствия основного сотрудника (например, в случае декретного отпуска или длительного больничного) принимается временный работник по срочному трудовому договору. Основная сложность заключается не столько в самом факте приема, сколько в необходимости отслеживать связь между сотрудниками и оперативно реагировать на изменения: досрочный выход основного работника, продление договора или его расторжение.

Разберем подробно, как реализовать этот механизм в конфигурации 1С:Зарплата и Управление Персоналом 3.1, используя типовые возможности системы и инструменты разработки.

Использование штатного расписания для связи сотрудников

Прежде чем приступать к созданию собственных регистров, проанализируем возможности типового функционала. Если в вашей информационной базе ведется штатное расписание с сохранением истории, система уже обладает необходимыми механизмами для решения задачи.

Рассмотрим по шагам, как фиксируется «замещение» на уровне данных:

  1. Освобождение ставки: При оформлении документа Отпуск по уходу за ребенком или Отсутствие (болезнь, прогул, неявка) необходимо установить флаг «Освободить ставку на период отсутствия». С этого момента позиция штатного расписания в регистре ЗанятостьПозицийШтатногоРасписания помечается как «Временно освобождена».
  2. Прием временного сотрудника: При создании документа Прием на работу на ту же позицию штатного расписания, программа понимает, что сотрудник занимает временно свободную ставку. В документе на закладке «Трудовой договор» устанавливается признак «Срочный трудовой договор» и указывается дата окончания.
  3. Аналитика: Связь «Кто вместо кого» в данном случае устанавливается через объект ПозицияШтатногоРасписания. На одной и той же позиции в один момент времени числятся два человека: один — основной (в состоянии отсутствия), второй — временный.

Техническая реализация связи в отчете

Если типовых отчетов (таких как «Заполненность штатного расписания») недостаточно и требуется отчет с прямой привязкой «Сотрудник А принят вместо Сотрудника Б», нам необходимо обратиться к программным методам. Попытка создать свой регистр с двумя измерениями Сотрудник может привести к избыточности и сложностям при обновлении конфигурации.

Проанализируем программный подход. Для получения данных лучше всего использовать функции общих модулей, которые агрегируют кадровые данные. Выясним причину, почему это эффективнее прямого запроса: типовые механизмы ЗУП учитывают множество нюансов (совмещения, перемещения, исправления документов), которые сложно описать в одном запросе.

Посмотрим на пример логики построения отчета через Набор данных объект в СКД:


// В модуле объекта отчета или в обработчике компоновки
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Занятость.ПозицияШтатногоРасписания КАК Позиция,
    |   Занятость.Сотрудник КАК Сотрудник,
    |   Занятость.ВидЗанятостиПозиции КАК ВидЗанятости
    |ИЗ
    |   РегистрСведений.ЗанятостьПозицийШтатногоРасписания.СрезПоследних(&Период, ) КАК Занятость";

// Далее программно сопоставляем сотрудников на одной позиции
// Если на позиции есть сотрудник с видом "Постоянно занята" (но он в отпуске) 
// и сотрудник с видом "Временно занята" — это наша искомая пара.

Как отслеживать досрочный выход и продление договора

Ситуация с досрочным выходом или изменением сроков договора — это «узкое место» ручных реестров. Рассмотрим, как это работает в типовой логике ЗУП 3.1:

Досрочный выход: Когда основной сотрудник возвращается из отпуска раньше срока, оформляется документ Возврат из отпуска по уходу за ребенком. Это автоматически меняет статус позиции в штатном расписании. Для временного сотрудника в этот же день оформляется документ Увольнение. В отчете, построенном на срезе данных регистра ЗанятостьПозицийШтатногоРасписания, эта связь исчезнет автоматически, так как изменится состав занятых ставок.

Продление договора: Для изменения даты окончания срочного договора в ЗУП предусмотрен документ Продление контракта, договора (срочного). Данный документ изменяет периодические сведения о трудовом договоре. Если ваш отчет обращается к регистру сведений ПараметрыПериодовСтажаПФР или ПериодыРаботыПоТрудовомуДоговору, вы всегда будете видеть актуальную дату окончания замещения.

Рекомендации по разработке отчета «Кто вместо кого»

Разберем наиболее гибкий путь создания такого отчета без изменения структуры конфигурации:

  1. Используйте Дополнительные реквизиты. В документе Прием на работу можно создать доп. реквизит «Замещаемый сотрудник» с типом СправочникСсылка.Сотрудники. Это позволит пользователю явно указывать связь, если штатное расписание не дает однозначного ответа.
  2. Для построения отчета используйте функции общего модуля КадровыйУчетРасширенный. Это позволит получить актуальные данные о состоянии сотрудника на любую дату.
  3. В схеме компоновки данных (СКД) соедините таблицу сотрудников, работающих по срочным договорам, с таблицей сотрудников, находящихся в длительных отпусках, по полю Должность или Подразделение, если жесткая связь через штатное расписание не включена.

Проанализируем ситуацию, когда необходимо программно получить список замещающих. Посмотрим на фрагмент кода, который можно использовать в консоли запросов или при разработке:


ВЫБРАТЬ
    Сотрудники.Ссылка КАК ВременныйСотрудник,
    Сотрудники.ФизическоеЛицо КАК ФизЛицоВременного,
    ТрудовыеДоговоры.ДатаОкончания КАК ДатаОкончанияДоговора,
    Штатное.Сотрудник КАК ОсновнойСотрудник
ИЗ
    Справочник.Сотрудники КАК Сотрудники
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыПериодовСтажаПФР КАК ТрудовыеДоговоры
        ПО Сотрудники.Ссылка = ТрудовыеДоговоры.Сотрудник
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗанятостьПозицийШтатногоРасписания КАК Штатное
        ПО Сотрудники.ТекущаяПозицияШтатногоРасписания = Штатное.ПозицияШтатногоРасписания
ГДЕ
    ТрудовыеДоговоры.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1)
    И Штатное.ВидЗанятостиПозиции = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиПозицийШтатногоРасписания.ПостоянноЗанята)

Важный момент: В вышеуказанном запросе мы ищем пересечение по позиции штатного расписания. Условие Штатное.ВидЗанятостиПозиции = ПостоянноЗанята выберет основного владельца ставки, в то время как Сотрудники.Ссылка будет указывать на временного работника, так как мы фильтруем их по наличию даты окончания в срочном договоре.

Резюме

Подводя итог, можно сказать, что для решения задачи не требуется создание новых регистров накопления или сведений. Правильная стратегия — это комбинация использования типового механизма «Освобождения ставок» в документах отсутствия и создание отчета на базе СКД, который сопоставляет данные из регистров занятости штатного расписания и параметров трудовых договоров. Это обеспечит корректную работу системы при обновлениях и позволит избежать дублирования данных.

← На главную