Программная настройка СКД и вывод в таблицу или дерево значений

/// Запускается "ПриСоздании на сервере
Функция УстановитьНастройкиСервис()
	СКД = Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	Поле = СКД.ВычисляемыеПоля.Добавить();
	Поле.ПутьКДанным = "ЗаказНаряд.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");
	
	Возврат тзРезультат;
КонецФункции

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

Код раскрашен тут

Метки: , . Закладка Постоянная ссылка.