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