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

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

Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

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

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

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

Результат.Очистить();

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

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

Но Результат не заполняется, поле на форме обработки - пустое.
Подскажите, в чем может быть ошибка?
---
Да: в схеме СКД ОСВ не задана структура отчета. Надо формировать программно.
В форме ОСФ можно покопать в процедуре ПриСозданииНаСервере
В общем случае добавление группировки (по Номенклатуре):

```1c
    НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

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

Выводимые поля (Стоимость):

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

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

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

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

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

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

    Результат.Очистить();

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

    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
```
---
kanalya, Спасибо, но не помогло.
Можете подсказать , как правильно установить параметры? например период?
---
А где компонуется? В модуле формы или в модуле объекта? Форма управляемая или обычная?
Если в модуле формы то советую в отладчике проверить тип. На всякий случай.
---
FReIM,
В модуле формы. Форма управляемая.
Тип чего проверить?
---
в модуле объекта
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

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

 ПараметрДанных= КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачПериода");
 ПараметрДанных.Значение = НачалоДня(НачПериода);
 ПараметрДанных.Использование = Истина;

 ПараметрДанных= КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонПериода");
 ПараметрДанных.Значение = КонецДня(КонПериода);
 ПараметрДанных.Использование = Истина;

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

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

или если в модуле формы

 Компоновщикнастроек.Настройки.ПараметрыДанных.Элементы.Найти("Дата1").Значение = Дата1;
 Компоновщикнастроек.Настройки.ПараметрыДанных.Элементы.Найти("Дата1").Использование = Истина;
 Компоновщикнастроек.Настройки.ПараметрыДанных.Элементы.Найти("Дата2").Значение = Дата2;
 Компоновщикнастроек.Настройки.ПараметрыДанных.Элементы.Найти("Дата2").Использование = Истина;
---
Результата. Ну и если форма управляемая. Чья форма, выводимого отчета или нет? Чтобы не было разночтений советую писать не Результат, а
```1c
    ЭтаФорма.Результат
```
 . чтобы наверняка обратиться к результату который на форме.
Ну и параметры тоже неплохо бы заполнить. А то все равно будет выводиться отчет, но без данных или с настройками по умолчанию.
---
Уточню, есть внешняя обработка, у обработки, на форме выведен реквизит "Результат", тип "Табличный документ", вот в этот табличный документ я и пытаюсь вывести стандартный отчет :"оборотно сальдовая ведомость"
---
1. Не рекоммендую использовать имя переменной "СхемаКомпоновкиДанных". Лучше "СхемаКомпоновки" или "СКД". Почему? В модуле объекта отчета в процедуре "ПриКомпоновкиРезультата" если поставить точку остановки в самом начале процедуры, то вычислив выражение "СхемаКомпоновкиДанных" можно обнаружить, что оно уже используется отчетом (управляемые формы) и содержит схему, т.е. вы ее переопределяете.
2. Проверить значения настроек поставив точку останова после их получения и вычислив выражение "Shift+F9":

```1c
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
```

3. Установить параметры можно например так:

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

4. Т.к. у вас управляемая форма настройки брать не по умолчанию из СКД, а с учетом пользовательских, т.е. из КомпоновщикаНастроек:

```1c
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
```
---
m2d3, Во вложении файл, это результат вычисления выражения Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
---
Сейчас получился вот такой вот код, но все равно на форме ничего не заполняет
ОСВ = Отчеты.ОборотноСальдоваяВедомость.Создать();

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

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
Компоновщик.ЗагрузитьНастройки(Компоновщик.ПолучитьНастройки());
ПарамНачПериода = Компоновщик.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода") ;
Если ПарамНачПериода <> Неопределено Тогда
ПарамНачПериода.Использование = Истина;
ПарамНачПериода.Значение = Объект.НачалоПериода;
КонецЕсли;

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

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

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

Результат.Очистить();

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

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
---
Подскажите, как задать показатели? Думаю, что проблема в этом, т.к на форме стал отображаться отбор, но сам отчет не показывается
---
получился вот такой код:
ОСВ = Отчеты.ОборотноСальдоваяВедомость.Создать();
СКД = ОСВ.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
Компоновщик.ЗагрузитьНастройки(Компоновщик.ПолучитьНастройки());
ПарамНачПериода = Компоновщик.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода") ;
Если ПарамНачПериода <> Неопределено Тогда
ПарамНачПериода.Использование = Истина;
ПарамНачПериода.Значение = Объект.НачалоПериода;
КонецЕсли;

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

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

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

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

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

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

выводит на форму только значение отбора(картинка прикреплена).
Как установить программно показатель отчета ( БУ, НУ)?
---
По скринами действительно видно что настроки пустые. Т.е. нет выбранных полей. Причина скорее всего в том, что объект компоновщик настроек обычно описывают как реквизит отчета. На клиенте пользователь устанавливает настройки, а на сервере они учитываются методом "ПолучитьНастройки()".

Попробуйте тогда вместо:

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

Сделать:

```1c
    Настройки = ОСВ.КомпоновщикНастроек.Настройки;
```

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

```1c
    НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

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

Выводимые поля (Стоимость):

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

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

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

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

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

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

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

 Компоновщик.Настройки.ПараметрыВывода.Элементы.Найти("Title").Использование = истина;
 Компоновщик.Настройки.ПараметрыВывода.Элементы.Найти("Title").Значение = "Мой заголовок отчета";

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

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

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

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

 ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
---
Этото должно работать

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

    //Из схемы возьмем настройки по умолчанию
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

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

    //Помещаем в переменную данные о расшифровке данных
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

    //Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

    //Очищаем поле табличного документа
    Результат = ЭлементыФормы.Результат;
    Результат.Очистить();

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

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

написано для обычных форм.
---
Вот эще файлик для примера
---
Pervuy, Спасибо, данный вариант будет работать, если в схеме СКД настроена структура отчета, но в отчет ОСВ, структура отчета не настроена в СКД, она создается программно, вот как раз этот момент и остался, как правильно программно создать структуру отчета
---
markela, раз сам отчет ОСВ заполняется программно, может в самом отчете и поискать? Или там 10к+ строк и вы затрудняетесь ?)
---
m2d3, спасибо, я уже нашел где он формируется, отчет сформировать получилось.
спасибо всем за помощь
---
На УФ чтобы работала так же стандартная расшифровка не забываем в свойствах формы указать ДанныеРасшифровки, Это должен быть строковый реквизит формы, можное его назвать например АдресРасшифровки и также после;

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

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

Добавляем

```1c
    АдресРасшифровки =ПоместитьВоВременноеХранилище(ДанныеРасшифровки,ЭтаФорма.УнникальныйИдентификатор)
```