Программное создание схемы СКД

acsent 91 2 14

Пример программного создания схемы СКД

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

См. также

Создание схемы компоновки данных программно

Выгрузить схему компоновки данных (скд) в файл/строку

Структура отчета СКД

СоздатьЭлементФормы

Добавить элемент в обычную форму

Чтение файла XML в объект XDTO по схеме *.xsd

ПодключитьСхему (БСП)

ПропускатьОбъектыСОшибкамиПроверкиПоСхеме (БСП)

ИспользуемыеТаблицы (БСП)

Модератору