Расшифровка в СКД, генерируемой программно
У меня часто отчеты, которые формируются программно. При этом по-умолчанию расшифровка не показывается, вместо нее показываются цифры. Описываю подход, чтобы открывались ссылки в отчете при щелчке по ним. Решение универсальное.
Обычно настройки таких отчетов я размещаю в форме отчета. Обычно они довольно простые — иногда только период.
Тогда я вызываю отчет так в форме:
&НаСервере Процедура СформироватьНаСервере() ОО = РеквизитФормыВЗначение("Отчет"); Р = ОО.Сформировать(ЭтаФорма.УникальныйИдентификатор); ТабДок = Р.ТабДок; ДанныеРасшифровки = Р.ДанныеРасшифровки; ДокументРезультат.Очистить(); ДокументРезультат.Вывести(ТабДок); КонецПроцедуры &НаКлиенте Процедура Сформировать(Команда) СформироватьНаСервере(); КонецПроцедуры
Сам отчет формирую так:
Функция Сформировать(ГУИДХранилища) Экспорт ТабДок = Новый ТабличныйДокумент; ... СхемаКомпоновкиДанныхД = ПолучитьМакет("МакетСКД"); КомпоновщикНастроекД = Новый КомпоновщикНастроекКомпоновкиДанных(); КомпоновщикНастроекД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанныхД)); КомпоновщикНастроекД.ЗагрузитьНастройки(СхемаКомпоновкиДанныхД.НастройкиПоУмолчанию); ДанныеРасшифровкиД = Новый ДанныеРасшифровкиКомпоновкиДанных(); ТабДок.Очистить(); ТЗ.Колонки.Регистратор.Имя = "Документ"; ТЗ.Колонки.ВидОперацииАренды.Имя = "ВидОперации"; ВД = Новый Структура("Т", ТЗ); ВывестиОтчетВСКД(ТабДок, СхемаКомпоновкиДанныхД, КомпоновщикНастроекД, ДанныеРасшифровкиД, ВД); СтандартнаяОбработка = ложь; ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиД, ГУИДХранилища); Возврат Новый Структура("ТабДок, ДанныеРасшифровки", ТабДок, ДанныеРасшифровки); КонецФункции Функция ВывестиОтчетВСКД(ДокументРезультат, СхемаКомпоновкиДанных, КомпоновщикНастроек, ДанныеРасшифровки, СтруктураВнешнихДанных = Неопределено) Экспорт КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных(); Настройки = КомпоновщикНастроек.ПолучитьНастройки(); МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных(); ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, СтруктураВнешнихДанных, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент(); ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.НачатьВывод(); Пока Истина Цикл ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий(); Если ЭлементРезультата = Неопределено Тогда Прервать; Иначе ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); КонецЕсли; КонецЦикла; ПроцессорВывода.ЗакончитьВывод(); КонецФункции Процедура УстановитьПараметрСКД(КомпоновщикНастроек, Имя, Значение) Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Имя)); Если Параметр = Неопределено Тогда Сообщить("Не найден параметр: " + Имя); Иначе Параметр.Значение = Значение; Параметр.Использование = Истина; КонецЕсли; КонецПроцедуры
Ну и сама процедура обработки расшифровки вызывается из события «обработка расшифровки» табличного документа:
&НаКлиенте Процедура ДокументРезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) Если СтандартнаяОбработка Тогда ЗначениеРасшифровки = //дор_ПолучитьЗначениеРасшифровки(Форма, Расшифровка); ПолучитьЗначениеРасшифровки(ЭтаФорма.ДанныеРасшифровки, Расшифровка); Если ЗначениеРасшифровки <> Неопределено Тогда ПоказатьЗначение(, ЗначениеРасшифровки); СтандартнаяОбработка = ложь; КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Функция ПолучитьЗначениеРасшифровки(ДанныеРасшифровки, Расшифровка) Экспорт Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки); Поля = Данные.Элементы.Получить(Расшифровка).ПолучитьПоля(); //Тут получаем поля расшифровки, среди которых находим нужное. Для Каждого Поле ИЗ Поля Цикл Рез = Поле.значение; Тип = ТипЗнч(Рез); Если Справочники.ТипВсеСсылки().СодержитТип(Тип) ИЛИ Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда Возврат Рез; КонецЕсли; КонецЦикла; КонецФункции




Свежие комментарии