Вывод СКД в ТЗ у меня работает отлично, вопрос в другом, можно ли сделать так чтобы я передал в СКД произвольный запрос, а СКД автоматически вывел таблицу со всем полями. То есть не перечисляя в группировках все колонки, как я делаю это сейчас:

```1c
    лГруппировкаДанных=лНастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    лМассивПоляГруппировки=СтрРазделить(пПоляГруппировки, ",");
    Для Каждого лИмяПоляГруппировки Из лМассивПоляГруппировки Цикл
    лПолеГруппировкиДанных=лГруппировкаДанных.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
    лПолеГруппировкиДанных.Поле=Новый ПолеКомпоновкиДанных(СокрЛП(лИмяПоляГруппировки));
    КонецЦикла;
    лВыбранноеПоле=лГруппировкаДанных.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
```

То есть нужно избежать предварительного знания какие в запросе поля, или как то чтобы СКД подсказала какие это поля.
Но запрос программный и текст естественно произвольный.

т.е. сделать код который выведет тз с 2 колонками если текст запроса будет
Выбрать 1, 2
и с 3 колонками если текст запроса:
Выбрать 1, 2, 3

Разбирать текст запроса вручную не предлагать.
---
```1c
    Функция ПолучитьТаблицуЗначенийИзСКД(Схема)

    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));

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

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

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

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

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

    Возврат ТЗ

    КонецФункции
```
---
Что касается структуры, то тут достаточно создать группировку "Детальные записи", что у вас и делается в первой и последней строке кода. Однако, это не освобождает от заполнения коллекции выбранных полей (лНастройкиКомпоновки.Выбор.Элементы).
Собрать поля запроса можно через КомпоновщикНастроекКомпоновкиДанных.
---
```1c
    Функция ПолучитьТаблицуЗначенийИзСКД(Схема)

    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));

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

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

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

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

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

    Возврат ТЗ

    КонецФункции
```
---
Спасибо! Получилось, там так много объектов и так редко с ними работаю что вот с такими нюансами всегда плохо. Если не сложно еще ругался на ПараметрыДанных, пришлось криво

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

потому что в доступных полях отбора именно параметрыданных есть и потом на них ругается
---
Да, по идее, надо бы брать из ДоступныеПоляВыбора, но там системные поля есть, на них тоже будет ругаться.