Как вывести данные расшифровки на макет
Добрый день.
Для решения определенной задачи мне потребовалось хранить запрос в общем модуле. Затем он используется для нескольких отчетов.
Далее при программном выводе отчета происходит подключение внешней таблицы значений. Все получилось и вывелось, но расшифровки у записей нет. Никак не могу понять почему. Смотрел в автоматически созданной форме. Там используется реквизит формы “ДанныеРасшифровки”. Как я понял это ссылка на какое-то временное хранилище с данными. Поясните, пожалуйста, эту тонкость.
Ниже привожу пример программного вывода СКД:
“&НаСервере
Процедура ФормированиеСКД(Таб, ТипПрогноза=Неопределено)
//Получаем схему из макета
Если ФильтрПоказыватьТекущееМестоположение Тогда
СхемаКомпоновкиДанных = Отчеты.ПрогнозНаличияТСТЕ.ПолучитьМакет(“ТекущееМесторасположение”);
КонецЕсли;
Если ФильтрПоказыватьПрогнозМестоположения Тогда
СхемаКомпоновкиДанных = Отчеты.ПрогнозНаличияТСТЕ.ПолучитьМакет(“Прогноз”);
КонецЕсли;
//Из схемы возьмем настройки по умолчанию
Если ТипПрогноза = Неопределено Тогда
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
Иначе
Если ТипПрогноза = “ТЕ” Тогда
Настройки = СхемаКомпоновкиДанных.ВариантыНастроек.ПрогнозПоТЕ.Настройки;
ИначеЕсли ТипПрогноза = “ТС” Тогда
Настройки = СхемаКомпоновкиДанных.ВариантыНастроек.ПрогнозПоТС.Настройки;
КонецЕсли;
КонецЕсли;
//Помещаем в переменную данные о расшифровке данных
Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, Расшифровка);
ВнешниеПараметры = Новый Структура;
Если НЕ ТипПрогноза=Неопределено Тогда
Если ТипПрогноза=”ТЕ” Тогда
Таб.Колонки.Добавить(“ТипТС”);
Таб.Колонки.Добавить(“ТС”);
ИначеЕсли ТипПрогноза=”ТС” Тогда
Таб.Колонки.Добавить(“ТипТЕ”);
Таб.Колонки.Добавить(“ТЕ”);
КонецЕсли;
КонецЕсли;
ВнешниеПараметры.Вставить(“Таб”, Таб);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеПараметры, Расшифровка);
//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
КонецПроцедуры”
Я все таки нашел ответ на этот вопрос. Оказалось, что для адекватной расшифровки требовалось сохраниять во временном хранилище схему компановки и расшифровку. Вот что пришлось добавить в выше приденный текст кода:
“URLСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Новый УникальныйИдентификатор());
АдресРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, Новый УникальныйИдентификатор());”
Далее пришлось переписать обработку расшифровки. Пример взят с mista.ru:
“&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Перем ВыполненноеДействие, ПараметрВыполненногоДействия;
СтандартнаяОбработка = Ложь;
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(АдресРасшифровки,
Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы));
ДоступныеДействия = Новый Массив;
ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыполненноеДействие, ПараметрВыполненногоДействия, ДоступныеДействия);
ОткрытьЗначение(ПараметрВыполненногоДействия);
КонецПроцедуры”