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

SeiOkami 560 5 15 15

Возвращает схему компоновки данных на основе текста запроса и параметров

// Схема компоновки данных из запроса.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/160
// 
// Параметры:
//  ТекстЗапроса - Строка
//  ПараметрыЗапроса - Структура
// 
// Возвращаемое значение:
//  СхемаКомпоновкиДанных
//
// Пример:
//  СКД = СхемаКомпоновкиДанныхИзЗапроса("ВЫБРАТЬ * ИЗ Справочник.Валюты");
//
Функция СхемаКомпоновкиДанныхИзЗапроса(ТекстЗапроса, ПараметрыЗапроса = Неопределено) Экспорт
	
	СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных();
	
	ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
	ИсточникДанных.Имя = "ЛокальнаяБаза";
	ИсточникДанных.СтрокаСоединения = "";
	ИсточникДанных.ТипИсточникаДанных = "Local";
	
	НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
	НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
	НаборДанных.Запрос = ТекстЗапроса;
	НаборДанных.Имя = "Запрос";
	НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
	
	Если ЗначениеЗаполнено(ПараметрыЗапроса) Тогда
		Для Каждого КлючИЗначение Из ПараметрыЗапроса Цикл
			ПараметрЗапроса = СхемаКомпоновкиДанных.Параметры.Добавить();
			ПараметрЗапроса.Имя = КлючИЗначение.Ключ;
			ПараметрЗапроса.Значение = КлючИЗначение.Значение;
			ПараметрЗапроса.ОграничениеИспользования = Истина;
			ПараметрЗапроса.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
		КонецЦикла;
	КонецЕсли;
	
	КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных();
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    
    КоллекцияВыбранныхПолей = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Выбор.Элементы;
	Для Каждого ДоступноеПоле Из КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл
		Если НЕ ДоступноеПоле.Папка Тогда
			ВыбранноеПоле = КоллекцияВыбранныхПолей.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
			ЗаполнитьЗначенияСвойств(ВыбранноеПоле, ДоступноеПоле, "Поле,Заголовок");
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Параметр Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
		ИмяПараметра = Строка(Параметр.Параметр);
		Если СхемаКомпоновкиДанных.Параметры.Найти(ИмяПараметра) = Неопределено Тогда
			ПараметрСКД = СхемаКомпоновкиДанных.Параметры.Добавить();
			ПараметрСКД.Имя = ИмяПараметра;
			ПараметрСКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;
		КонецЕсли;
	КонецЦикла;
	
	ДетальныеЗаписи = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
	
	Возврат СхемаКомпоновкиДанных;
	
КонецФункции
0

См. также

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

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

Создать отбор в скд

Заполняем (описываем набор данных и поля) схему компоновки данных из таблицы значений

КомпоновщикНастроек для выполнения отбора на форме

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

СловарьТиповРезультатовОбработкиЗапросов (БСП)

ДобавитьВыбранноеПоле (БСП)

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

Модератору