0
Очень Любознательная
11.08.20
✎
15:36
|
Добрый день. Делаю отчёт внешний по образованиям, аттестациям и сертификатам сотрудников в ЗУПе.
Отчёт должен выводить сотрудников, работающих в организации на дату отчёта. Соответственно, я получаю их функцией КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников);
Но у меня в отчёте могут быть отборы по сотрудникам, подразделению, должности и категории сотрудника (это реквизит справочника сотрудники). Пока у меня это получается только через вывод на форму
КомпоновщикНастроекНастройкиОтбор и "разборе" отбора в коде, то есть, вот так (пример отчёта, где отборы могут быть по сотруднику, подразделению и должности)
Для Каждого СтрокаОтбора ИЗ Отборы Цикл
Если СтрокаОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сотрудник") И СтрокаОтбора.Использование
И (СтрокаОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Или СтрокаОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке) Тогда
ВыводимПоСотрудникам = Истина;
СотрудникиОрганизации = КадровыйУчет.КадровыеДанныеСотрудников(ИСТИНА, СтрокаОтбора.ПравоеЗначение, "ТрудовойДоговорДата, ТрудовойДоговорНомер", КонецДня(ДатаФормирования));
ОбъектСравнения = Новый СравнениеЗначений;
СотрудникиОрганизации.Колонки.Добавить("ФИО", Новый ОписаниеТипов("Строка"));
Для Каждого Строка Из СотрудникиОрганизации Цикл
Строка.ФИО = Строка(Строка.ФизическоеЛицо);
КонецЦикла;
СотрудникиОрганизации.Сортировать("ФИО");
КонецЕсли;
КонецЦикла;
Если Не ВыводимПоСотрудникам Тогда
ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц();
ПараметрыПолученияСотрудников.НачалоПериода = ДатаФормирования;
ПараметрыПолученияСотрудников.ОкончаниеПериода = ДатаФормирования;
ПараметрыПолученияСотрудников.КадровыеДанные = "ТрудовойДоговорДата, ТрудовойДоговорНомер";
Для Каждого СтрокаОтбора ИЗ Отборы Цикл
Если СтрокаОтбора.Использование Тогда
Если СтрокаОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно
ИЛИ СтрокаОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке Тогда
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ПараметрыПолученияСотрудников.Отборы, Строка(СтрокаОтбора.ЛевоеЗначение), " В ", СтрокаОтбора.ПравоеЗначение);
ИначеЕсли СтрокаОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно
ИЛИ СтрокаОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке Тогда
ЗарплатаКадрыОбщиеНаборыДанных.ДобавитьВКоллекциюОтбор(ПараметрыПолученияСотрудников.Отборы, Строка(СтрокаОтбора.ЛевоеЗначение), " НЕ В ", СтрокаОтбора.ПравоеЗначение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
СотрудникиОрганизации = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников);
СотрудникиОрганизации.Сортировать("ПолеПорядка2");
КонецЕсли;
Есть ли возможность сделать это проще/красивее? Просто сейчас отборов будет 5, а если их будет 20? Как это реализовано в стандартных отчётах?
|
|