Программный вывод отчета

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

//Получаем схему из макета
СхемаКомпоновкиДанных 		= ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
//Из схемы возьмем настройки по умолчанию
Настройки 					= СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки 			= Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета 			= Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки 			= КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных 	= Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
//Очищаем поле табличного документа
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Подписаться
Уведомить о
guest
9 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
hdv
hdv
13 лет назад

пропахал интернет, так никто и не знает как сделать чтоб работала расшифровка при программном выводе отчета. при таком выводе она не работает.
Пробовал такой совет:
после строки
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
поместить
ДанныеРасшифровки.Настройки = КомпоновщикНастроек.ПолучитьНастройки();
все равно не работает стандартная расшифровка по двойному клику. выдает лишь номер ячейки.

Денис Концевой
Денис Концевой
12 лет назад

надо использовать Форма.ДанныеРасшифровки

Olga
Olga
13 лет назад

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

v.a.ryag
v.a.ryag
12 лет назад

второй параметр насколько я помню обязательный

isupovav
isupovav
13 лет назад

Re: also
Запятая не причем, все равно не катит, 3-й параметр.

Головаченко Дима
Головаченко Дима
12 лет назад

Если вы посмотрите в синтакс-помошник или справку – то увидите, что метод Инициализировать() у ПроцессораКомпоновкиДанных имеет 4 параметры:
Макет – обязательный
ВнешниеНаборыДанных – необязательный
ДанныеРасшифровки – необязательный
ИспользоватьВнешниеФункции – необязательный.
Поэтому в примере все верно написано

Crush
Crush
11 лет назад

Кому не охота создавать на форме табличное поле но хочется сохранить расшифровку, то можно закомментить последнюю строчку из сабжа и сделать так:
//ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Результат = Новый ТабличныйДокумент;
Результат.ТолькоПросмотр = Истина;
Результат.ОтображатьГруппировки = Ложь;
Результат.ОтображатьЗаголовки = Ложь;
Результат.ОтображатьСетку = Ложь;
ПроцессорВывода.НачатьВывод();
ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();
Пока НЕ ЭлементРезультата = Неопределено Цикл
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
Если ЭлементРезультата.ЗначенияПараметров.Количество() > 0 Тогда
Для счКол = 1 по Результат.ШиринаТаблицы Цикл
ТекРасшифровкаИдентификатор = Результат.Область(Результат.ВысотаТаблицы,счКол).Расшифровка;
Результат.Область(Результат.ВысотаТаблицы,счКол).Расшифровка = ДанныеРасшифровки.Элементы[ТекРасшифровкаИдентификатор].ПолучитьПоля()[0].Значение
КонецЦикла;
КонецЕсли;
ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
Результат.Показать();

Adapter
Adapter
6 лет назад

Вообще то все намного проще. Статья от вендора на ИТС “Использование объекта ДанныеРасшифровки”
http://its.1c.ru/db/metod8dev#content:2797:hdoc
Применительно к примеру добавить
Перем ДанныеРасшифровкиСКД;
……
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровкиСКД);
ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиСКД, УникальныйИдентификатор);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровкиСКД);