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