Привет
Как можно в СКД, программно, выгрузить результат запроса в таблицу значений, добавить в нее колонку, заполнить колонку, а потом обратно загрузить в СКД для вывода в табличный документ
---
Посмотрел https://infostart.ru/1c/articles/1229680/ (9)? Прямо твой случай. В модуле при компоновке заполняешь таблицу истории данных, потом помещаешь ее в МВТ и скармливаешь этот МВТ схеме компоновки.
---
почему нельзя добавить колонку запросом внутри отчета СКД?
---
В самой схеме необходимо добавить набор данных с типом Объект. И указать структуру полей.

```1c
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    Настройки = КомпоновщикНастроек.ПолучитьНастройки();

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

    Запрос = Новый Запрос;
    // ...
    ТЗ = Запрос.Выполнить().Выгрузить();

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура("ТЗ", ТЗ), ДанныеРасшифровки);

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

    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

    КонецПроцедуры
```
---
это да, а как выполнить запрос через этот же скд? что бы сохранить гибкость отборов скд.
---
Для начала, объясните необходимость в использовании внешнего набора, вместо запроса, если ТЗ у вас всё равно формируется запросом.
---
тз формирую средствами скд. т.е. по отборам которые установил пользователь в отчете, получаю данные и выгружаю их в ТЗ. вот код

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

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

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

Надо выбрать из справочника элементы с помощью скд(потому что гибкие фильтры)
далее выбранные элементы надо обработать программно(выполнить расчеты)
а потом вывести в табличный документ скд полученную ТЗ
---
Если в отчете часть данных необходимо рассчитать во встроенном языке, то лучше сделать 2 набора данных: запрос и объект, связанные по ключевым полям. В наборе-объекте должны содержаться поля, которые будут рассчитаны программно. В ПриКомпоновкеРезультата создаете временную (служебную) схему на основе пользовательских настроек для формирования внешнего набора. В этой служебной схеме нужно будет убрать отборы по полям внешнего набора и сделать плоскую структуру. В ней нужны только ключевые поля. Из этой временной схемы получаем таблицу значений, на основе которой формируем набор-объект. Далее формируем ТабличныйДокумент из основной схемы как обычно.
---
спасибо
---
далее выбранные элементы надо обработать программно(выполнить расчеты)

Расчеты прям совсем запросом выполнить нельзя?
---
Можно. Прикрути к схеме менеджер временных таблиц.
---
так проблемы с отчетом не у меня :)
---
Акела промахнулся, сорян))
---
да, нужно вытащить дату создания элемента справочника из истории данных

```1c
    Отбор = Новый Структура;
    Отбор.Вставить("Данные", Строка.Справочник);
    Отбор.Вставить("ВидИзмененияДанных", ВидИзмененияДанных.Добавление);
    Версии = ИсторияДанных.ВыбратьВерсии(Отбор,"Дата");
```
---
Посмотрел https://infostart.ru/1c/articles/1229680/ (9)? Прямо твой случай. В модуле при компоновке заполняешь таблицу истории данных, потом помещаешь ее в МВТ и скармливаешь этот МВТ схеме компоновки.
---
да, мой прям, спасибо