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

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

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

Смена типа СКД 1

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

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

Смена типа СКД 2

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

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

Смена типа СКД 3

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

Смена типа СКД 4

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

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

Смена типа СКД 5

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

Смена типа СКД 6

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

Смена типа СКД 7

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

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

via 1cKiller

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии