gifts2017

Расшифровки при программном формировании отчета на СКД

Опубликовал Дмитрий Котельников (kotlovD) в раздел Программирование - Практика программирования

Что делать, если не работают расшифровки при программном формировании отчета на СКД? Ответ ниже.

Сабж. Надо программно сформировать отчет на СКД.

Ок, лезем на любой ресурс, коих полно, копируем код, правим под свои нужды и вуаля! Отчет работает, только при попытке расшифровать выскакивает какое то окошко с цифрами :( Что делать?

Решение

На самом деле в этом окошке нам сообщается идентификатор расшифровки компоновки данных. Имея этот идентификато и данные расшифровки, мы можем сделать все, что душе угодно.

Рассмотрю случай формирования СКД из обработки (см. в скрепке). Добавил макет СКД, на форму вывел два реквизита "Контрагент" и "ТабДок". Важно иметь доступ к данным расшифровки при обработке расшифровки табличного документа, поэтому добавим переменную, которую будет перебрасывать в процедуру программного формирования отчета. Ну и опишем саму процедуру обработки расшифровки. 

&НаКлиенте
Перем ДанныеРасшифровки;

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	
	КонтрагентПриИзмененииНаСервере(ДанныеРасшифровки);		
	
КонецПроцедуры

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

&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Если ТипЗнч(Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") тогда
		ЭлементРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка];
		Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
			Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
				ОткрытьЗначение(Поле.Значение);
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Обработка расшифровки открывает значение, но вы можете прописать любое действие.

На этом все.

Скачать файлы

Наименование Файл Версия Размер
РасшифровкиПрограммногоСКД 1
.epf 8,46Kb
11.08.16
1
.epf 8,46Kb Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.