Вывод отчета в обработке: Вместо открытия ссылки показывает число

1. AndrewKop 30.06.22 14:29 Сейчас в теме
Возникла необходимость сделать вывод отчета на СКД в форме отчета. Отчет сделал, все выводит. Но есть проблемы с расшифровкой:
Вместо открытия ссылок, показывает числа.
Отчет сверочный. Строится по данным из 1С и внешней системы, данные которой передаются как параметр ТЗ в запрос.
Поля ТЗ (проверял отладчиком) типизированы. В СКД для полей указан явно тип (скрин)
Код формирования отчета следующий:
ОтчетТЗ = Отчет.Выгрузить(); 
	
	СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

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

	НастройкаКонецПериода = Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода"); 
	НастройкаКонецПериода.Использование = Истина;
	НастройкаКонецПериода.Значение = КонецПериодаОтбор;  
	
	НастройкаНачалоОстатки = Настройки.ПараметрыДанных.Элементы.Найти("НачалоОстатки"); 
	НастройкаНачалоОстатки.Использование = Истина;
	НастройкаНачалоОстатки.Значение = НачалоПериодаОтбор;  
	
	НастройкаКонецПериодаГраница = Настройки.ПараметрыДанных.Элементы.Найти("КонецПериодаГраница"); 
	НастройкаКонецПериодаГраница.Использование = Истина;
	НастройкаКонецПериодаГраница.Значение = Новый Граница(КонецДня(КонецПериодаОтбор), ВидГраницы.Включая); 
	
	НастройкаТЗ = Настройки.ПараметрыДанных.Элементы.Найти("ТЗ"); 
	НастройкаТЗ.Использование = Истина;
	НастройкаТЗ.Значение = ОтчетТЗ;	
	
	
	НастройкаБазоваяВалюта = Настройки.ПараметрыДанных.Элементы.Найти("БазоваяВалюта"); 
	НастройкаБазоваяВалюта.Использование = Истина;
	НастройкаБазоваяВалюта.Значение =  Справочники.Валюты.НайтиПоНаименованию("руб.");	
	
	НастройкаВалютаУправленческогоУчета = Настройки.ПараметрыДанных.Элементы.Найти("ВалютаУправленческогоУчета"); 
	НастройкаВалютаУправленческогоУчета.Использование = Истина;
	НастройкаВалютаУправленческогоУчета.Значение =  Справочники.Валюты.НайтиПоНаименованию("руб.");
	
	Если ЗначениеЗаполнено(Контрагент) тогда
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Настройки.Отбор, "Контрагент", Контрагент, ВидСравненияКомпоновкиДанных.Равно, ,Истина); 
	Иначе	
		ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Настройки.Отбор, "Контрагент", Контрагент, ВидСравненияКомпоновкиДанных.Равно, ,Ложь); 
	КонецЕсли; 
	//--------
		
    лВыводитьЗаголовок = ДругиеНастройки.Найти("ВыводитьЗаголовок");
    лВыводитьЗаголовок.Использование = Истина;
    лВыводитьЗаголовок.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
 
    лВыводитьПараметрыДанных = ДругиеНастройки.Найти("ВыводитьПараметрыДанных");
    лВыводитьПараметрыДанных.Использование = Истина;
    лВыводитьПараметрыДанных.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
	
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	МакетОформленияКомпоновкиДанных = ПолучитьМакет("МакетОформленияКомпоновкиДанныхПесок");
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки, МакетОформленияКомпоновкиДанных);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки, Истина);
	
	ТабДок.Очистить();
	Макет = ПолучитьМакет("Макет");
	ОбластьМакетаШапки         = Макет.ПолучитьОбласть("ШапкаОтчета");
	ОбластьМакетаШапки.Параметры.НадписьДаты  = Формат(ТекущаяДата(),"ДЛФ=DDT");
	ТабДок.Вывести(ОбластьМакетаШапки);
	
	ТабДок.ОриентацияСтраницы=ОриентацияСтраницы.Ландшафт;
	ТабДок.АвтоМасштаб=Истина;
	ТабДок.ФиксацияСлева = 3;
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ТабДок);
	
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	ТабДок.ПоказатьУровеньГруппировокСтрок(УровеньГруппировки); 
Показать

Полагаю, что неправильно в этом куске инициализируется расшифровка. Но понятия не имею, что надо сделать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
4. SlavaKron 30.06.22 17:26 Сейчас в теме
В процедуре формирования табличного документа нужно поместить схему и данные расшифровки во временное хранилище
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
АдресРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, УникальныйИдентификатор);
И переопределить событие ТабДока ОбработкаРасшифровки:
&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(АдресРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
	ОбработкаРасшифровки.ПоказатьВыборДействия(Новый ОписаниеОповещения("ПослеВыбораДействия", ЭтотОбъект), Расшифровка, , , Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораДействия(ВыполненноеДействие, ПараметрВыполненногоДействия, ДополнительныеПараметры) Экспорт
	
	Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
		ПоказатьЗначение(, ПараметрВыполненногоДействия)
	КонецЕсли;
	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. succub1_5 89 30.06.22 16:32 Сейчас в теме
(1) Да, вот это
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
сбрасывает всю расшифровку.
2. vkholodnov 7 30.06.22 14:43 Сейчас в теме
Так вам же надо использовать пользовательские отборы. В настройках находите идентификатор, а уже в пользовательских отборах находите по идентификатору и уже берете значение.
4. SlavaKron 30.06.22 17:26 Сейчас в теме
В процедуре формирования табличного документа нужно поместить схему и данные расшифровки во временное хранилище
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
АдресРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, УникальныйИдентификатор);
И переопределить событие ТабДока ОбработкаРасшифровки:
&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(АдресРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
	ОбработкаРасшифровки.ПоказатьВыборДействия(Новый ОписаниеОповещения("ПослеВыбораДействия", ЭтотОбъект), Расшифровка, , , Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораДействия(ВыполненноеДействие, ПараметрВыполненногоДействия, ДополнительныеПараметры) Экспорт
	
	Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
		ПоказатьЗначение(, ПараметрВыполненногоДействия)
	КонецЕсли;
	
КонецПроцедуры
Показать
6. AndrewKop 01.07.22 08:03 Сейчас в теме
(4) Огромное спасибо! В очередной раз крепко жму Вашу трехпалую руку!
7. polyakovyan 15.05.23 14:50 Сейчас в теме
(4) А могли бы вы подсказать как программно делать расшифровку суммы по регистраторам в отчете выведеном в ТабличныйДокумент обработки? А то во всех примерах что находил все показывают для открытия ссылочных данных через ПоказатьЗначение().
5. SlavaKron 30.06.22 17:35 Сейчас в теме
Либо получать значение поля прямо из элемента расшифровки (тоже потребует хранить данные расшифровки во временном хранилище):
&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
	
	СтандартнаяОбработка = Ложь;
	
	Если ТипЗнч(Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") тогда
		Значение = ПолучитьЗначениеРасшифровки(АдресРасшифровки, Расшифровка);
		ПоказатьЗначение(, Значение);
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьЗначениеРасшифровки(Знач АдресРасшифровки, Знач Расшифровка)
	Результат = Неопределено;
	ДанныеРасшифровки = ПолучитьИзВременногоХранилища(АдресРасшифровки);
	ЭлементРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка];
	Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
		Поля = ЭлементРасшифровки.ПолучитьПоля();
		Если Поля.Количество() > 0 Тогда
			Результат = Поля[0].Значение;
		КонецЕсли;
	КонецЕсли;
	
	Возврат Результат
КонецФункции
Показать
8. user1629842 21.12.23 14:05 Сейчас в теме
в параметрах формы надо указать реквизит, будет работать без дописок.
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот