Здравствуйте. 1С:Предприятие 8.3 (8.3.15.1830).
Задача такая:
Сделать проверку правильности заполнения реквизита по настройкам.
Есть структура настроек компоновки данных (скрин 1), с заполненым отбором.
Восстанавливаю из структуры в компоновщик настроек (скрин 2):

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

Вопрос как дальше использовать эти отборы? Создавать свою СКД и загружать или как то еще можно?
---
Была похожая задача. Программно создавал СКД и восстанавливал настройки, после получал результат.
---
Была похожая задача. Программно создавал СКД и восстанавливал настройки, после получал результат.
---
Пройтись по элементам отбора и проверить корректность их значений? Или я неправильно понял задачу?
---
нет,
в документе есть реквизит "подразделение", нужно проверить правильность заполнения (по отбору в КомпановщикеНастроек)
---
Сделала свою СКД, подставила настройки, выводит в ТЗ как надо. Спасибо.

```1c
    Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
    Если СтруктураНастроек.Свойство("НастройкиКомпоновщика")
    И ТипЗнч(СтруктураНастроек.НастройкиКомпоновщика) = Тип("НастройкиКомпоновкиДанных") Тогда
    Если СтруктураНастроек.НастройкиКомпоновщика.Отбор.Элементы.Количество() > 0 Тогда
    Компоновщик.ЗагрузитьНастройки(СтруктураНастроек.НастройкиКомпоновщика);
    КонецЕсли;
    КонецЕсли;
    ЗагружаемыеНастройки = Компоновщик.Настройки;

    //программное создание СКД
    Текст = "ВЫБРАТЬ Подразделения.Ссылка КАК Подразделение ИЗ Справочник.ПодразделенияОрганизаций КАК Подразделения";

    СКД = Новый СхемаКомпоновкиДанных;

    ИсточникДанных = СКД.ИсточникиДанных.Добавить();
    ИсточникДанных.Имя = "ИсточникДанных";
    ИсточникДанных.ТипИсточникаДанных = "Local";

    ТекущийНаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    ТекущийНаборДанных.Имя = "ОсновнойНабор";
    ТекущийНаборДанных.Запрос = Текст;
    ТекущийНаборДанных.ИсточникДанных = "ИсточникДанных";
    ТипНабора = "Запрос";
    ТекущийНаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;

    //НастройкиКомпановщика = СКД.НастройкиПоУмолчанию;
    НастройкиКомпановщика = ЗагружаемыеНастройки;

    Группировка1 = НастройкиКомпановщика.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    Группировка1.Использование = Истина;
    АвтоПоле = Группировка1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    АвтоПоле.Использование = Истина;

    КоллекцияКолонок = Новый ТаблицаЗначений;
    КоллекцияКолонок.Колонки.Добавить("Имя");
    КоллекцияКолонок.Колонки.Добавить("ТипЗначения");
    КоллекцияКолонок.Колонки.Добавить("Заголовок");

    ПостроительЗапроса = Новый ПостроительЗапроса;
    ПостроительЗапроса.Текст = СокрЛП(Текст);
    ПостроительЗапроса.ЗаполнитьНастройки();

    Для каждого ВыбранноеПоле Из ПостроительЗапроса.ВыбранныеПоля Цикл
    НоваяКолонка = КоллекцияКолонок.Добавить();
    НоваяКолонка.Имя = ВыбранноеПоле.Имя;
    НоваяКолонка.ТипЗначения = ПостроительЗапроса.ДоступныеПоля[ВыбранноеПоле.ПутьКДанным].ТипЗначения;
    НоваяКолонка.Заголовок = ВыбранноеПоле.Представление
    КонецЦикла;

    Для каждого НоваяКолонка Из КоллекцияКолонок Цикл
    ПолеНабора = ТекущийНаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНабора.Заголовок = СокрЛП(НоваяКолонка.Заголовок);
    ПолеНабора.Поле = СокрЛП(НоваяКолонка.Имя);
    ПолеНабора.ПутьКДанным = СокрЛП(НоваяКолонка.Имя);

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

    ВыбранноеПолеКомпоновкиДанных = НастройкиКомпановщика.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных(ПолеНабора.ПутьКДанным);
    ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
    КонецЦикла;
    //СКД

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпановщика,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

    ПроцессорКомпоновки = новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

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

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