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