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