Каталог решений - Смена типа набора данных СКД с сохранением полей

Смена типа набора данных СКД с сохранением полей

Смена типа набора данных СКД с сохранением полей

В наличии

Иногда возникает необходимость в существующем отчете на СКД, имеющем набор данных — запрос, изменить тип набора данных с запроса на объект, например, при необходимости поместить данные в таблицу значений, затем передать ее в СКД в качестве набора данных — объект. При этом, придется заново настраивать поля СКД (роли, оформление и пр.), ресурсы, что может занять немало времени. В этой статье пойдет речь о том, как сменить тип набора данных с сохранением всех настроенных полей.

Категория:

Описание

Пусть, мы имеем отчет, построенный на СКД с набором данных — запрос. У полей отчета настроены роли и некое оформление.

Поступила задача доработать отчет. При этом, получить данные для СКД через набор данных — запрос — либо очень сложно, либо невозможно.
Решено получить данные в таблицу значений, затем передать их в СКД через набор данных — объект.

Но, изменить тип данных набора интерактивно в конструкторе СКД возможности нет. А создавать новый набор данных с типом — объект, и заново настраивать поля — желания мало. Тем более, что полей может быть много.

Делаем следующее:

Сохраняем схему в файл

Открываем сохраненный файл xml текстовым редактором. Я использую Notepad++.

  1. Меняем значение атрибута «xsi:type» элемента «dataSet» с «DataSetQuery» на «DataSetObject»
  2. Удаляем элемент «query»
  3. Добавляем элемент «objectName»

 Должно получиться так:

Сохраняем изменения, загружаем схему из файла:

Набор данных успешно изменен с сохранением колонок с ролями и оформлением:

 

Осталось только написать в модуле объекта процедуру, в которой таблица значений предается в СКД:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТЗ = ПолучитьТаблицуДанных();
	
	Настройки = КомпоновщикНастроек.Настройки;
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
	
	ВнешниеНаборыДанных = Новый Структура;
	ВнешниеНаборыДанных.Вставить("ТЗ",ТЗ);
	
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	
КонецПроцедуры
has been added to your cart:
Оформление заказа