Ребята, всем привет!
Помогите пожалуйста со следующим вопросом:

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

Появилась необходимость добавить вычисляемое поле, которого в исходом СКД нету.

Думается мне, что реализовать данную возможность реально с использованием пользовательских полей, но вот никак не могу найти, как его туда засунуть.

Настройки получаю так:

```1c
    СКД = Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

    АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор);
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных));
    КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);
    СтруктураПолей = Новый Структура("
    |vin
    |,date
    |,order_number
    |,work_total
    |,parts_total
    |,order_Type
    |,mileage
    |,payer"

    ,"Автомобиль.VIN"
    ,"ЗаказНаряд.Дата"
    ,"ЗаказНаряд.Номер"
    ,"СуммаРабот"
    ,"СуммаНоменклатуры"
    ,"ЗаказНаряд.ВидРемонта.КодВыгрузки"
    ,"ЗаказНаряд.Пробег"
    ,"ЗаказНаряд.Контрагент"
    );

    СКД = Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    //Настройки = СКД.НастройкиПоУмолчанию;
    Настройки = КомпоновщикНастроек.Настройки;

    МассивЭлементовОтбора = Новый Массив;
    Для Каждого ЭлементОтбора ИЗ Настройки.Отбор.Элементы Цикл
    МассивЭлементовОтбора.Добавить(ЭлементОтбора);
    КонецЦикла;
    Для Каждого ЭлементОтбора ИЗ МассивЭлементовОтбора Цикл
    Настройки.Отбор.Элементы.Удалить(ЭлементОтбора);
    КонецЦикла;

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

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

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

    Дата = НачалоДня(НачалоДня(ТекущаяДата())-1)-1;

    Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаНачала", НачалоМесяца(Дата));
    Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаОкончания", КонецДня(Дата));
```
---
Раз нужны вычисляемые поля, так и добавляйте их. Пользовательские поля для пользователей. :-)

```1c
    ВычисляемоеПоле = СКД.ВычисляемыеПоля.Добавить();
    ВычисляемоеПоле.ПутьКДанным = "НовоеПолеОтчета";
    ВычисляемоеПоле.Выражение = "123";

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

```1c
    ВычисляемоеПоле = СКД.ВычисляемыеПоля.Добавить();
    ВычисляемоеПоле.ПутьКДанным = "НовоеПолеОтчета";
    ВычисляемоеПоле.Выражение = "123";

    Ресурс = СКД.ПоляИтога.Добавить();
    Ресурс.ПутьКДанным = "НовоеПолеОтчета";
    Ресурс.Выражение = "Сумма(НовоеПолеОтчета)";
```
---
Когда добавляю его в вывод (ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных) при формировании пишет "Поле не найдено" добавляю следующим образом поле:

```1c
    ПолеКлиент = СКД.ВычисляемыеПоля.Добавить();
    //ПолеКлиент.ОграничениеИспользования.Поле = Истина;
    ПолеКлиент.ПутьКДанным = "payer";
    ПолеКлиент.Заголовок = "payer";
    ПолеКлиент.Выражение = "Выбор
    | Когда ЗаказНаряд.ВидРемонта.КодВыгрузки = "КР"
    |Тогда "Клиент"
    |Иначе ""
    |Конец";
```
---
Вы модифицируете СКД до инициализации Компоновщика настроек?
---
(3) Вы модифицируете СКД до инициализации Компоновщика настроек?

Да.
---
У Вас в примере СКД из макета получается дважды. Это не могло помешать?
---
Доеду до дома и обязательно проверю это
(6)
---
Спасибо, что указали. Более того, компоновщик макета вызывался так

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

Под вечер глаз совсем замылился :-(
---
На всякий случай, может кому пригодится!

Если ваша конфигурация на БСП и программно правите схему компоновки данных, например в процедуре ПриСозданииНаСервере, то надо установить СхемаМодифицирована в Истина, а то при компоновке используется стандартная.

```1c
    Форма.НастройкиОтчета.СхемаМодифицирована = истина
```
---
Форма.НастройкиОтчета.СхемаМодифицирована = истина

Спасибо за инфу. Такой маленький нюанс, пол дня потеря, пока случайно увидел этот пост, добавил строку, все заработало, как надо.