СКД отбор

1. E_Tkach 16.09.20 11:01 Сейчас в теме
Здравствуйте. 1С:Предприятие 8.3 (8.3.15.1830).
Задача такая:
Сделать проверку правильности заполнения реквизита по настройкам.
Есть структура настроек компоновки данных (скрин 1), с заполненым отбором.
Восстанавливаю из структуры в компоновщик настроек (скрин 2):
&НаСервере
Процедура ВосстановитьОтбор(СохраненнаяНастройка)
	Если СохраненнаяНастройка.Свойство("НастройкиКомпоновщика") 
		И ТипЗнч(СохраненнаяНастройка.НастройкиКомпоновщика) = Тип("НастройкиКомпоновкиДанных")  Тогда
		Если СохраненнаяНастройка.НастройкиКомпоновщика.Отбор.Элементы.Количество() > 0 Тогда
			Компоновщик.ЗагрузитьНастройки(СохраненнаяНастройка.НастройкиКомпоновщика);
		КонецЕсли;
        КонецЕсли;
Показать


Вопрос как дальше использовать эти отборы? Создавать свою СКД и загружать или как то еще можно?
Прикрепленные файлы:
Найденные решения
2. dandykry 5 16.09.20 11:07 Сейчас в теме
(1) Была похожая задача. Программно создавал СКД и восстанавливал настройки, после получал результат.
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. dandykry 5 16.09.20 11:07 Сейчас в теме
(1) Была похожая задача. Программно создавал СКД и восстанавливал настройки, после получал результат.
3. Release 16.09.20 12:21 Сейчас в теме
(1) Пройтись по элементам отбора и проверить корректность их значений? Или я неправильно понял задачу?
4. E_Tkach 16.09.20 12:38 Сейчас в теме
(3)нет,
в документе есть реквизит "подразделение", нужно проверить правильность заполнения (по отбору в КомпановщикеНастроек)
5. E_Tkach 16.09.20 12:59 Сейчас в теме
Сделала свою СКД, подставила настройки, выводит в ТЗ как надо. Спасибо.
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
	Если СтруктураНастроек.Свойство("НастройкиКомпоновщика") 
		И ТипЗнч(СтруктураНастроек.НастройкиКомпоновщика) = Тип("НастройкиКомпоновкиДанных")  Тогда
		Если СтруктураНастроек.НастройкиКомпоновщика.Отбор.Элементы.Количество() > 0 Тогда
			Компоновщик.ЗагрузитьНастройки(СтруктураНастроек.НастройкиКомпоновщика);
		КонецЕсли;  
	КонецЕсли;
	ЗагружаемыеНастройки = Компоновщик.Настройки;
	
	//программное создание СКД 
	Текст = "ВЫБРАТЬ Подразделения.Ссылка КАК Подразделение ИЗ Справочник.ПодразделенияОрганизаций КАК Подразделения";
		
	СКД = Новый СхемаКомпоновкиДанных;

	ИсточникДанных = СКД.ИсточникиДанных.Добавить();
	ИсточникДанных.Имя = "ИсточникДанных";
	ИсточникДанных.ТипИсточникаДанных = "Local";
	
	ТекущийНаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
	ТекущийНаборДанных.Имя = "ОсновнойНабор";
	ТекущийНаборДанных.Запрос = Текст;
	ТекущийНаборДанных.ИсточникДанных = "ИсточникДанных";			
	ТипНабора = "Запрос";
	ТекущийНаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
	
	//НастройкиКомпановщика = СКД.НастройкиПоУмолчанию;
	НастройкиКомпановщика = ЗагружаемыеНастройки;
	
	Группировка1 = НастройкиКомпановщика.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
	Группировка1.Использование = Истина;			
	АвтоПоле = Группировка1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
	АвтоПоле.Использование = Истина;
	
	КоллекцияКолонок = Новый ТаблицаЗначений;
	КоллекцияКолонок.Колонки.Добавить("Имя");
	КоллекцияКолонок.Колонки.Добавить("ТипЗначения");
	КоллекцияКолонок.Колонки.Добавить("Заголовок");
	
	ПостроительЗапроса = Новый ПостроительЗапроса;
	ПостроительЗапроса.Текст = СокрЛП(Текст);
	ПостроительЗапроса.ЗаполнитьНастройки();
	
	Для каждого ВыбранноеПоле Из ПостроительЗапроса.ВыбранныеПоля Цикл	
		НоваяКолонка = КоллекцияКолонок.Добавить();
		НоваяКолонка.Имя = ВыбранноеПоле.Имя;			
		НоваяКолонка.ТипЗначения = ПостроительЗапроса.ДоступныеПоля[ВыбранноеПоле.ПутьКДанным].ТипЗначения;
		НоваяКолонка.Заголовок = ВыбранноеПоле.Представление
	КонецЦикла;
	
	Для каждого НоваяКолонка Из КоллекцияКолонок Цикл			
		ПолеНабора = ТекущийНаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		ПолеНабора.Заголовок = СокрЛП(НоваяКолонка.Заголовок);
		ПолеНабора.Поле = СокрЛП(НоваяКолонка.Имя);
		ПолеНабора.ПутьКДанным = СокрЛП(НоваяКолонка.Имя);
		
		// Удалим неопределено и NULL
		Массив = Новый Массив;
		Для каждого ТекущийТип Из НоваяКолонка.ТипЗначения.Типы() Цикл
			Если ТекущийТип = Тип("Неопределено") или ТекущийТип = Тип("NULL") или ТекущийТип = Неопределено или ТекущийТип = Null Тогда 
				Продолжить; 
			КонецЕсли;
			Массив.Добавить(ТекущийТип);
		КонецЦикла;
		ПолеНабора.ТипЗначения = Новый ОписаниеТипов(Массив,НоваяКолонка.ТипЗначения.КвалификаторыЧисла,НоваяКолонка.ТипЗначения.КвалификаторыСтроки,НоваяКолонка.ТипЗначения.КвалификаторыДаты);
						
		ВыбранноеПолеКомпоновкиДанных = НастройкиКомпановщика.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));			
		ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(ПолеНабора.ПутьКДанным);
		ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
	КонецЦикла;
	//СКД
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпановщика,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

	ТаблицаРезультат = Новый ТаблицаЗначений; 
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; 

    ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат); 
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Показать
Оставьте свое сообщение
Вопросы с вознаграждением