Зуп как по физлицу найти сотрудника

Основной сотрудник физ. лица

Получить основного сотрудника физического лица

&НаСервере
Процедура УстановитьОсновногоСотрудника(ВыводитьСообщения = Истина)
	
   Объект.ОсновнойСотрудник = КадровыйУчетРасширенный.ОсновнойСотрудникФизЛица(Объект.ФизическоеЛицо, Объект.Организация, Объект.ДатаНачала, ВыводитьСообщения);

КонецПроцедуры

Недостаточно рейтинга для добавления отрицательного голоса. Шаблон будет скрыт из ваших результатов поиска.

Комментарии

Основной сотрудник ФизЛица?

В типовых решениях, а следом и в отраслевых решениях, используется следующая модель

СотрудникиОрганизаций
+ Организация
+ ТекущееПодразделениеОрганизации
+ ФизЛицо
+ ВидДоговора
+ ВидЗанятости
+ Актуальность

При такой модели Для одного ФизЛица в программе может быть неограниченное количество сотрудников.

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

ПроцедурыУправленияПерсоналом.ОсновнойСотрудникФизлица(Физлицо, ГоловнаяОрганизация)

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

Переработанный запрос для всех записей справочника СотрудникиОрганизаций.

втРанжированныеСотрудникиВсе - Сотрудники
втОсновныеСотрудникиФизЛиц - Основной сотрудник по каждой из организаций для ФизЛица
втОсновныеОрганизацияСотрудникФизЛиц - Основной сотрудник для ФизЛица для всех организаций.

Приоритет сотрудников и организаций определяется через МИНИМУМ(Ссылка) - более ранняя (старая) ссылка в приоритете. 

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 втРанжированныеСотрудникиВсе.ОРГАНИЗАЦИЯ,
 втРанжированныеСотрудникиВсе.ФИЗЛИЦО,
 МИНИМУМ(втРанжированныеСотрудникиВсе.СОТРУДНИК) КАК СОТРУДНИК
ПОМЕСТИТЬ втОсновныеСотрудникиФизЛиц
ИЗ
 (ВЫБРАТЬ
  втРанжированныеСотрудникиВсе.ОРГАНИЗАЦИЯ КАК ОРГАНИЗАЦИЯ,
  втРанжированныеСотрудникиВсе.ФИЗЛИЦО КАК ФИЗЛИЦО,
  МИНИМУМ(втРанжированныеСотрудникиВсе.Порядок) КАК Порядок
 ИЗ
  втРанжированныеСотрудникиВсе КАК втРанжированныеСотрудникиВсе
 
 СГРУППИРОВАТЬ ПО
  втРанжированныеСотрудникиВсе.ОРГАНИЗАЦИЯ,
  втРанжированныеСотрудникиВсе.ФИЗЛИЦО) КАК РанжирФизЛицаОрганизции
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ втРанжированныеСотрудникиВсе КАК втРанжированныеСотрудникиВсе
  ПО РанжирФизЛицаОрганизции.ОРГАНИЗАЦИЯ = втРанжированныеСотрудникиВсе.ОРГАНИЗАЦИЯ
   И РанжирФизЛицаОрганизции.ФИЗЛИЦО = втРанжированныеСотрудникиВсе.ФИЗЛИЦО
   И РанжирФизЛицаОрганизции.Порядок = втРанжированныеСотрудникиВсе.Порядок

СГРУППИРОВАТЬ ПО
 втРанжированныеСотрудникиВсе.ОРГАНИЗАЦИЯ,
 втРанжированныеСотрудникиВсе.ФИЗЛИЦО
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 РанжирФизЛицОрганизаций.ОРГАНИЗАЦИЯ,
 РанжирФизЛицОрганизаций.ФИЗЛИЦО,
 МИНИМУМ(втРанжированныеСотрудникиВсе.СОТРУДНИК) КАК СОТРУДНИК
ПОМЕСТИТЬ втОсновныеОрганизацияСотрудникФизЛиц
ИЗ
 (ВЫБРАТЬ
  РанжирФизЛиц.ФИЗЛИЦО КАК ФИЗЛИЦО,
  МИНИМУМ(втРанжированныеСотрудникиВсе.ОРГАНИЗАЦИЯ) КАК ОРГАНИЗАЦИЯ,
  РанжирФизЛиц.Порядок КАК Порядок
 ИЗ
  (ВЫБРАТЬ
   втРанжированныеСотрудникиВсе.ФИЗЛИЦО КАК ФИЗЛИЦО,
   МИНИМУМ(втРанжированныеСотрудникиВсе.Порядок) КАК Порядок
  ИЗ
   втРанжированныеСотрудникиВсе КАК втРанжированныеСотрудникиВсе
  
  СГРУППИРОВАТЬ ПО
   втРанжированныеСотрудникиВсе.ФИЗЛИЦО) КАК РанжирФизЛиц
   ВНУТРЕННЕЕ СОЕДИНЕНИЕ втРанжированныеСотрудникиВсе КАК втРанжированныеСотрудникиВсе
   ПО РанжирФизЛиц.ФИЗЛИЦО = втРанжированныеСотрудникиВсе.ФИЗЛИЦО
    И РанжирФизЛиц.Порядок = втРанжированныеСотрудникиВсе.Порядок
 
 СГРУППИРОВАТЬ ПО
  РанжирФизЛиц.ФИЗЛИЦО,
  РанжирФизЛиц.Порядок) КАК РанжирФизЛицОрганизаций
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ втРанжированныеСотрудникиВсе КАК втРанжированныеСотрудникиВсе
  ПО РанжирФизЛицОрганизаций.ОРГАНИЗАЦИЯ = втРанжированныеСотрудникиВсе.ОРГАНИЗАЦИЯ
   И РанжирФизЛицОрганизаций.ФИЗЛИЦО = втРанжированныеСотрудникиВсе.ФИЗЛИЦО
   И РанжирФизЛицОрганизаций.Порядок = втРанжированныеСотрудникиВсе.Порядок

СГРУППИРОВАТЬ ПО
 РанжирФизЛицОрганизаций.ОРГАНИЗАЦИЯ,
 РанжирФизЛицОрганизаций.ФИЗЛИЦО
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 втОсновныеОрганизацияСотрудникФизЛиц.ОРГАНИЗАЦИЯ,
 втОсновныеОрганизацияСотрудникФизЛиц.ФИЗЛИЦО,
 втОсновныеОрганизацияСотрудникФизЛиц.СОТРУДНИК,
 втРанжированныеСотрудникиВсе.ТабНомер
ИЗ
 втОсновныеОрганизацияСотрудникФизЛиц КАК втОсновныеОрганизацияСотрудникФизЛиц
  ВНУТРЕННЕЕ СОЕДИНЕНИЕ втРанжированныеСотрудникиВсе КАК втРанжированныеСотрудникиВсе
  ПО втОсновныеОрганизацияСотрудникФизЛиц.ОРГАНИЗАЦИЯ = втРанжированныеСотрудникиВсе.ОРГАНИЗАЦИЯ
   И втОсновныеОрганизацияСотрудникФизЛиц.ФИЗЛИЦО = втРанжированныеСотрудникиВсе.ФИЗЛИЦО
   И втОсновныеОрганизацияСотрудникФизЛиц.СОТРУДНИК = втРанжированныеСотрудникиВсе.СОТРУДНИК
   cyberandr

31.01.20 — 13:09

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

Попробовал сделать таким образом — по физлицам находим кто договорник, кто в штате и кто уволен(последнее увольнение). А дальше если сотрудник в штате -значит считаем его, если не но договорник -тогда он ну и в конце тогда уволенный. Для этого сделал в запросе общее объединение, но почему-то он задваевает строки.  

/code

ВЫБРАТЬ

    ПлатежноеПоручениеИсходящееРаботники.Физлицо КАК Физлицо,

    ПлатежноеПоручениеИсходящееРаботники.Сумма КАК Сумма

ПОМЕСТИТЬ ФизЛица

ИЗ

    Документ.ПлатежноеПоручениеИсходящее.Работники КАК ПлатежноеПоручениеИсходящееРаботники

ГДЕ

    ПлатежноеПоручениеИсходящееРаботники.Ссылка В

            (ВЫБРАТЬ

                ПлатежноеПоручение.Ссылка

            ИЗ

                Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручение

            ГДЕ

                ПлатежноеПоручение.ДатаПеречисления = &Нашадата

                И ПлатежноеПоручение.Проведен

                И НЕ ПлатежноеПоручение.детскиеПособия

                И НЕ ПлатежноеПоручение.ПометкаУдаления)

;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

    ФизЛица.Физлицо КАК Физлицо,

    СотрудникиОрганизаций.Ссылка КАК СотрудникДоговорник,

    NULL КАК СотрудникРаботает,

    NULL КАК СотрудникНеРаботает,

    ДАТАВРЕМЯ(1, 1, 1) КАК ДатаУвольнения

ПОМЕСТИТЬ Сотрудники

ИЗ

    ФизЛица КАК ФизЛица

        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций

        ПО ФизЛица.Физлицо = СотрудникиОрганизаций.Физлицо

ГДЕ

    СотрудникиОрганизаций.ВидДоговора = ЗНАЧЕНИЕ(ПЕРЕЧИСЛЕНИЕ.ВидыДоговоровСФизЛицами.Подряда)

СГРУППИРОВАТЬ ПО

    ФизЛица.Физлицо,

    СотрудникиОрганизаций.Ссылка

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

    ФизЛица.Физлицо,

    NULL,

    СотрудникиОрганизаций.Ссылка,

    NULL,

    ДАТАВРЕМЯ(1, 1, 1)

ИЗ

    ФизЛица КАК ФизЛица

        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций

        ПО ФизЛица.Физлицо = СотрудникиОрганизаций.Физлицо

ГДЕ

    СотрудникиОрганизаций.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)

    И СотрудникиОрганизаций.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)

СГРУППИРОВАТЬ ПО

    ФизЛица.Физлицо,

    СотрудникиОрганизаций.Ссылка

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ

    ФизЛица.Физлицо,

    NULL,

    NULL,

    СотрудникиОрганизаций.Ссылка,

    МАКСИМУМ(СотрудникиОрганизаций.ДатаУвольнения)

ИЗ

    ФизЛица КАК ФизЛица

        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций

        ПО ФизЛица.Физлицо = СотрудникиОрганизаций.Физлицо

ГДЕ

    СотрудникиОрганизаций.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)

    И СотрудникиОрганизаций.ДатаУвольнения <> ДАТАВРЕМЯ(1, 1, 1)

СГРУППИРОВАТЬ ПО

    ФизЛица.Физлицо,

    СотрудникиОрганизаций.Ссылка

;

   karpik666

13 — 31.01.20 — 13:33

(0) жесть, для таких целей есть регистр сведений Работники организаций, и данные о состоянии сотрудника, работает или уволен

   unenu

16 — 31.01.20 — 13:58

КадровыйУчетРасширенный.ТаблицаСотрудниковОрганизации(ФизическоеЛицо, Организация, Период,

ФизическоеЛицо — может быть ссылка, массив, список, неопределено

хватит костыли лепить

Здравствуйте! Открыть элемент справочника «Физические лица» с которым связан сотрудник из карточки не получится.
Вообще в идеале в Физических лицах должны быть уникальные значение, которые не спутаешь. Например по ИНН всегда можно физ. лицо найти. Если ФЛ задвоились, то следует применять спец. обработку: Как исправить ошибку по «задвоенным» элементам справочника «Физические лица», чтобы сдать РСВ?

Если Вам хочется именно из справочника сотрудники как-то проверить, какое физ лицо привязано, то можно в списке сотрудников вывести такой реквизит как «Код» справочника «Физические лица». А потом в Физ. лицах по коду найти нужное ФЛ.

1) Нажать Еще — Изменить форму.

2)В левом окне настроек щелкнуть мышью на «Ссылка» — вверху станет активна кнопка «Добавить поля» и там отмечайте флажком «Физическое лицо». Нажимайте ОК.


3)Теперь в левой форме доступно поле «Физическое лицо (ссылка)». Вставайте на нее — Добавить поля — И отмечайте «Код». ОК

Contents

  • 1 Введение
  • 2 Получение информации для одного сотрудника или физического лица
  • 3 Получение информации для списка сотрудников с использованием временных таблиц
  • 4 Получение кадровой информации для списка сотрудников на разные даты

Введение

В данной статье мы рассмотрим получение кадровых данных сотрудников и физических лиц с помощью библиотеки стандартных подсистем в конфигурации 1C Зарплата и управление персоналом (ЗУП), редакция 3.1

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

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

Все примеры проверены на конфигурации ЗУП 3.1.10.135, версия 1C БСП 3.0.3.59.

Получение информации для одного сотрудника или физического лица

Рассмотрим получение текущей фамилии для сотрудника Боровой Дмитрий Валентинович. Для наглядности добавим ему в историю изменения ФИО фамилию Бонд и изменим отчество.

Для получения кадровой информации используется общий модуль КадровыйУчет. Для получения кадровых данных физических лиц используется функция КадровыеДанныеФизическихЛиц. Более подробно о принимаемых параметрах вы можете в описании к функции. Для нас важен параметр СписокФизическихЛиц, куда мы передаем ссылку на физическое лицо или массив ссылок на физические лица, параметр КадровыеДанные, в котором указываются те кадровые данные, которые мы хотим получить и параметр ДатаПолученияДанных – дата, на которую мы получаем данные.
Видов кадровых данных, которые мы можем получить, очень много, поэтому мы рассмотрим только несколько из них.
Чтобы узнать какие кадровые данные можно получить с помощью данной функции вы можете обратиться к описанию функции КадровыйУчетВнутренний.ЗапросВТКадровыеДанныеФизическихЛиц.

ДатаПолученияДанных = Дата(2019, 12, 1);

ПоляОтбораПериодическихДанных = Неопределено;

КадровыеДанные = КадровыйУчет.КадровыеДанныеФизическихЛиц(Истина, ФизическоеЛицо, "Фамилия", ДатаПолученияДанных, ПоляОтбораПериодическихДанных);

Для Каждого ТекСтрока из КадровыеДанные Цикл
	
	Сообщить("" + ТекСтрока.ФизическоеЛицо + ", Фамилия: " + ТекСтрока.фамилия);
	
КонецЦикла;

Если мы выполним этот код, то получим следующую строку:

Боровой Дмитрий Валентинович,  Фамилия: Бонд

Т.е. функция нам вернет фамилию актуальную в период с 30.11.2019 по 01.01.2020. Если же указать дату получения данных не из этого периода, то функция вернет другую фамилию.

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

ДатаПолученияДанных = Дата(2019, 12, 1);

ЗначенияОтборов = Новый Массив;

УсловиеОтбора = Новый Структура();
УсловиеОтбора.Вставить("ЛевоеЗначение", "Отчество");
УсловиеОтбора.Вставить("ВидСравнения", " подобно ");
УсловиеОтбора.Вставить("ПравоеЗначение", """Вади%""");

ЗначенияОтборов.Добавить(УсловиеОтбора);

ПоляОтбораПериодическихДанных = Новый Структура("ФИОФизическихЛиц", ЗначенияОтборов);

КадровыеДанные = КадровыйУчет.КадровыеДанныеФизическихЛиц(Истина, ФизическоеЛицо, "Фамилия", ДатаПолученияДанных, ПоляОтбораПериодическихДанных);

Для Каждого ТекСтрока из КадровыеДанные Цикл

	Сообщить("" + ТекСтрока.ФизическоеЛицо + ",  Фамилия: " + ТекСтрока.фамилия);

КонецЦикла;

В результате получим строку:

Боровой Дмитрий Валентинович,  Фамилия: Быков

Т.е. мы получили другую фамилию, используя одну и ту же дату.

Для получения кадровых данных сотрудников используется функция КадровыеДанныеСотрудников из того же модуля. И, по аналогии, чтобы узнать список возможных кадровых данных можно посмотреть описание функции КадровыйУчетВнутренний.ЗапросВТКадровыеДанныеСотрудников.

 Для получения кадровой информации по списку сотрудников или списку физлиц можно использовать эти же функции. Только вместо ссылки на физическое лицо в параметр СписокФизическихЛиц передается массив физических лиц, а в параметр СписокСотрудников – массив сотрудников.

Получение информации для списка сотрудников с использованием временных таблиц

Иногда гораздо удобнее не получать данные в промежуточных переменных, а формировать временные таблицы и использовать эти временные таблицы в одном запросе. Для этого мы можем использовать функции СоздатьНаДатуВТКадровыеДанныеСотрудников и СоздатьНаДатуВТКадровыеДанныеФизическихЛиц из общего модуля КадровыйУчет. Данные функции отличаются тем, что не возвращают таблицу кадровых данных, а формируют временную таблицу в менеджере временных таблиц.

Для демонстрации можно использовать данный код.

ДатаПолученияДанных = Дата(2019, 12, 1);

МенеджерВТ = Новый МенеджерВременныхТаблиц;

КадровыйУчет.СоздатьНаДатуВТКадровыеДанныеСотрудников(МенеджерВТ, Истина, СписокСотрудников, "Подразделение, Должность, ФОТ", ДатаПолученияДанных);

КадровыйУчет.СоздатьНаДатуВТКадровыеДанныеФизическихЛиц(МенеджерВТ, Истина, МассивФизлиц, "Фамилия", ДатаПолученияДанных);

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст = "ВЫБРАТЬ
               |	Сотрудники.Ссылка КАК Ссылка,
               |	Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
               |	ВТКадровыеДанныеФизическихЛиц.Фамилия КАК Фамилия,
               |	ВТКадровыеДанныеСотрудников.Подразделение КАК Подразделение,
               |	ВТКадровыеДанныеСотрудников.ФОТ КАК ФОТ,
               |	ВТКадровыеДанныеСотрудников.Должность КАК Должность
               |ИЗ
               |	Справочник.Сотрудники КАК Сотрудники
               |		ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеФизическихЛиц КАК ВТКадровыеДанныеФизическихЛиц
               |		ПО Сотрудники.ФизическоеЛицо = ВТКадровыеДанныеФизическихЛиц.ФизическоеЛицо
               |		ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК ВТКадровыеДанныеСотрудников
               |		ПО Сотрудники.Ссылка = ВТКадровыеДанныеСотрудников.Сотрудник
               |ГДЕ
               |	Сотрудники.Ссылка В(&СписокСотрудников)";

Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);

КадровыеДанные = Запрос.Выполнить().Выгрузить();

После выполнения данного кода мы получим таблицу кадровых данных следующего вида:

В данном примере мы сначала подготовили кадровые данные сотрудника и кадровые данные физического лица во временных таблицах, и затем использовали их в одном запросе.

Получение кадровой информации для списка сотрудников на разные даты

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

Для примера используем все того же сотрудника Борового Дмитрия Валентиновича и его таблицу изменения ФИО.

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

МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст = "ВЫБРАТЬ
               |	&ФизическоеЛицо КАК ФизическоеЛицо,
               |	ДАТАВРЕМЯ(2018, 1, 1) КАК Период
               |ПОМЕСТИТЬ ВТФизическиеЛица
               |
               |ОБЪЕДИНИТЬ ВСЕ
               |
               |ВЫБРАТЬ
               |	&ФизическоеЛицо,
               |	ДАТАВРЕМЯ(2019, 12, 2)
               |
               |ОБЪЕДИНИТЬ ВСЕ
               |
               |ВЫБРАТЬ
               |	&ФизическоеЛицо,
               |	ДАТАВРЕМЯ(2020, 1, 2)";

Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо);

Запрос.Выполнить();

Во временной таблице будет три строки с разными датами.

Далее формируем описание нашей временной таблицы с физическими лицами:

ОписательВременнойТаблицыФизЛиц = КадровыйУчет.ОписаниеВременнойТаблицыОтборовФизическихЛиц("ВТФизическиеЛица");

Если колонка, содержащая ссылки на физические лица, будет называться не ФизическоеЛицо, необходимо указать это в функции ОписаниеВременнойТаблицыОтборовФизическихЛиц в параметре ИмяПоляФизическоеЛицо. Это же касается и колонки, содержащей даты, по умолчанию она должна называться Период.

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

ПоляОтбораПериодическихДанных = Неопределено;

Запрос = КадровыйУчет.ЗапросВТКадровыеДанныеФизическихЛиц(Истина, ОписательВременнойТаблицыФизЛиц, "Фамилия, Имя, Отчество", ПоляОтбораПериодическихДанных);

Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

Запрос.Выполнить();

Ну и в конце мы можем использовать эту временную таблицу. В данном примере мы просто выведем ее в таблицу значений.

Запрос.Текст = "ВЫБРАТЬ
               |	ВТКадровыеДанныеФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо,
               |	ВТКадровыеДанныеФизическихЛиц.Период КАК Период,
               |	ВТКадровыеДанныеФизическихЛиц.Фамилия КАК Фамилия,
               |	ВТКадровыеДанныеФизическихЛиц.Имя КАК Имя,
               |	ВТКадровыеДанныеФизическихЛиц.Отчество КАК Отчество
               |ИЗ
               |	ВТКадровыеДанныеФизическихЛиц КАК ВТКадровыеДанныеФизическихЛиц";

КадровыеДанные = Запрос.Выполнить().Выгрузить();

В результате мы получим следующую таблицу:

Как мы видим, запрос вернул нам актуальную информацию для всех дат указанных в исходной таблице ВТФизическиеЛица.

Понравилась статья? Поделить с друзьями:
  • Как найти bhop сервера
  • Искривление носовой перегородки как исправить в домашних условиях
  • Как найти знакомого человека в телеграмме
  • Как найти чат дома в вацапе
  • Как найти камеру на рабочем столе