/// Запускается "ПриСоздании на сервере
Функция УстановитьНастройкиСервис()
СКД = Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Поле = СКД.ВычисляемыеПоля.Добавить();
Поле.ПутьКДанным = "ЗаказНаряд.payer";
Поле.Заголовок = "payer";
Поле.Выражение = "Выбор
| Когда ЗаказНаряд.ВидРемонта.КодВыгрузки = ""КР""
|Тогда ""Клиент""
|Иначе """"
|Конец";
Поле = СКД.ВычисляемыеПоля.Добавить();
Поле.ПутьКДанным = "ЗаказНаряд.product_type";
Поле.Заголовок = "product_type";
Поле.Выражение = "Выбор
| Когда ЗаказНаряд.ВидРемонта.КодВыгрузки = ""КР""
|Тогда ""Клиент""
|Иначе """"
|Конец";
Поле = СКД.ВычисляемыеПоля.Добавить();
Поле.ПутьКДанным = "ЗаказНаряд.order_type";
Поле.Заголовок = "order_type";
Поле.Выражение = "Выбор
| Когда ЗаказНаряд.ВидРемонта.КодВыгрузки = """"
|Тогда ""Укажите код выгрузки для вида ремонта "" + ЗаказНаряд.ВидРемонта.Наименование
|Иначе ЗаказНаряд.ВидРемонта.КодВыгрузки
|Конец";
Поле = СКД.ВычисляемыеПоля.Добавить();
Поле.ПутьКДанным = "ЗаказНаряд._date";
Поле.Заголовок = "date";
Поле.Выражение = "НАЧАЛОПЕРИОДА(ЗаказНаряд.Дата,""ДЕНЬ"")";
Поле = СКД.ВычисляемыеПоля.Добавить();
Поле.ПутьКДанным = "ЗаказНаряд.order_number";
Поле.Заголовок = "order_number";
Поле.Выражение = "Выбор
| Когда ПОДСТРОКА(ЗаказНаряд.Номер,4,1) <> ""0""
|Тогда ПОДСТРОКА(ЗаказНаряд.Номер,4,7)
| Когда ПОДСТРОКА(ЗаказНаряд.Номер,5,1) <> ""0""
|Тогда ПОДСТРОКА(ЗаказНаряд.Номер,5,6)
| Когда ПОДСТРОКА(ЗаказНаряд.Номер,6,1) <> ""0""
|Тогда ПОДСТРОКА(ЗаказНаряд.Номер,6,5)
| Когда ПОДСТРОКА(ЗаказНаряд.Номер,7,1) <> ""0""
|Тогда ПОДСТРОКА(ЗаказНаряд.Номер,7,4)
| Когда ПОДСТРОКА(ЗаказНаряд.Номер,8,1) <> ""0""
|Тогда ПОДСТРОКА(ЗаказНаряд.Номер,8,3)
| Когда ПОДСТРОКА(ЗаказНаряд.Номер,9,1) <> ""0""
|Тогда ПОДСТРОКА(ЗаказНаряд.Номер,9,2)
| Когда ПОДСТРОКА(ЗаказНаряд.Номер,10,1) <> ""0""
|Тогда ПОДСТРОКА(ЗаказНаряд.Номер,10,1)
|Конец";
Поле = СКД.ВычисляемыеПоля.Добавить();
Поле.ПутьКДанным = "Отметка";
Поле.Заголовок = "Отметка";
Поле.Выражение = "НЕ ЗаказНаряд.ВидРемонта.КодВыгрузки = """"";
АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);
СтруктураПолей = Новый Структура("Отметка, ЗаказНаряд, ВидРемонта, Автомобиль
|,vin
|,date
|,order_number
|,work_total
|,parts_total
|,order_Type
|,mileage
|,payer
|,product_type"
,"Отметка", "ЗаказНаряд", "ЗаказНаряд.ВидРемонта", "Автомобиль"
,"Автомобиль.VIN"
,"ЗаказНаряд._date"
,"ЗаказНаряд.order_number"
,"СуммаРабот"
,"СуммаНоменклатуры"
,"ЗаказНаряд.order_type"
,"ЗаказНаряд.Пробег"
,"ЗаказНаряд.payer"
,"ЗаказНаряд.product_type"
);
Настройки = КомпоновщикНастроек.Настройки;
УдалитьСтандартныеНастройки(Настройки);
Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Группировка.Использование = Истина;
Для Каждого КиЗ ИЗ СтруктураПолей Цикл
ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Заголовок = КиЗ.Ключ;
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(КиЗ.Значение);
КонецЦикла;
Группа = Настройки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Группа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Автомобиль");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
ЭлементОтбора.ПравоеЗначение = Справочники.Автомобили.НайтиПоКоду("ЦБ00000002");
ЭлементОтбора = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Автомобиль.VIN");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеНачинаетсяС;
ЭлементОтбора.ПравоеЗначение = "1N";
ЭлементОтбора.Использование = Ложь;
ЭлементОтбора = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Автомобиль.VIN");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодразделениеКомпании");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии;
СписокПодразделений = Новый СписокЗначений;
СписокПодразделений.Добавить(Справочники.ПодразделенияКомпании.НайтиПоКоду("ЦБ000014"));
СписокПодразделений.Добавить(Справочники.ПодразделенияКомпании.НайтиПоКоду("ЦБ000021"));
ЭлементОтбора.ПравоеЗначение = СписокПодразделений;
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поставщик");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Справочники.Контрагенты.НайтиПоКоду("ЦБ011454");
ЭлементОтбора.Использование = Ложь;
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЗаказНаряд.Состояние");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Справочники.ВидыСостоянийЗаказНарядов.Закрыт;
ЭлементПорядка = Настройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("ЗаказНаряд._date");
КонецФункции
/// Запускается пользователем
Функция СформироватьДанныеВыработки() Экспорт
тзРезультат = ВыполнитьСКД(СКД, КомпоновщикНастроек);
тзРезультат.Свернуть("Отметка, ЗаказНаряд, ВидРемонта, Автомобиль,vin,date,order_number,order_Type,payer,mileage,product_type","work_total,parts_total");
тзРезультат.Сортировать("date");
Возврат тзРезультат;
КонецФункции
Функция ВыполнитьСКД(текСКД, текКомпоновщик)
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Если текКомпоновщик.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Найти("ДатаНачала") <> Неопределено Тогда
текКомпоновщик.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаНачала", НачалоМесяца(Дата));
КонецЕсли;
Если текКомпоновщик.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Найти("ДатаОкончания") <> Неопределено Тогда
текКомпоновщик.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаОкончания", КонецДня(Дата));
КонецЕсли;
Если текКомпоновщик.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Найти("ДатаОтчета") <> Неопределено Тогда
текКомпоновщик.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаОтчета", КонецДня(Дата));
КонецЕсли;
МакетКомпоновки = КомпоновщикМакета.Выполнить(текСКД, текКомпоновщик.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,);
тзРезультат = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(тзРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Для Каждого Колонка ИЗ тзРезультат.Колонки Цикл
ПОПЫТКА //На случай, если заголовок с пробелом и т.п.
Колонка.Имя = Колонка.Заголовок;
ИСКЛЮЧЕНИЕ КОНЕЦПОПЫТКИ;
КонецЦикла;
Возврат тзРезультат;
КонецФункции
Код раскрашен тут
Похожее