bdd2

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

Опубликовал Alexey (1cKiller) в раздел Программирование - Практика программирования

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

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

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

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

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

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

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

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

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

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

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

 

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

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

См. также

Добавить вознаграждение
Комментарии
1. Анатолий Бритько (headMade) 130 30.05.14 21:36 Сейчас в теме
Спасибо. Думаю будет полезно.
2. Кирилл Бондаренко (karapuzzzz) 51 04.06.14 10:51 Сейчас в теме
Спасибо. Вот если бы рассылка от инфостарта пришла на пару дней раньше и я эту статью увидел раньше чем переделал 2 отчета.
3. Kris (mikit) 70 04.06.14 10:58 Сейчас в теме
Класс, спасибо огромное!
4. Виталий Онянов (Tavalik) 348 04.06.14 11:24 Сейчас в теме
Полезная статья. Спасибо.
5. Fomix (fomix) 20 04.06.14 12:14 Сейчас в теме
Спасибо большое! Реально полезная статья. Просто бесит, что затейники из 1С-а про такую полезную "мелочь" ни где не пишут! А может и не знают....
6. Ольга (Bagrick) 04.06.14 12:19 Сейчас в теме
Большое спасибо! Полезная статья!
7. cassyan (cassyan) 04.06.14 14:53 Сейчас в теме
Спсибо. Очень любопытно. Надо подумать, как это метод творчески развить:)
8. Александр Полтава (Патриот) 178 05.06.14 09:36 Сейчас в теме
Это реально круто! Всё гениальное просто. Была похожая идея, но я тогда недоразбирался с xml файлом, подумал, что это очень долго и сложно в итоге руками лопатил. Оформлю сиё решение в виде обработки, добавлю в свою коллекцию, спасибо)
А если бы ВК знал, можно было бы как кнопку повесить в форму СКД, раз разработчики 1С этого не сделали, хотя это, действительно уже "очень долго и сложно" =)
9. Юрий Лу (yura1960) 24.06.14 18:12 Сейчас в теме
Да уж. Реально помогла. Вот где кладезь народной мудрости и опыта. Автор - спасибо!
10. Олег Крапивный (powerpc) 194 26.06.14 12:41 Сейчас в теме
Автору спасибо! Очень помогло в работе! Теперь ждём обработки автоматические конвертеры из одного в другое!
11. Олег Крапивный (powerpc) 194 27.06.14 10:59 Сейчас в теме
Вот кстати и обработка для автоматического преобразования http://infostart.ru/public/289484/
12. Роман Ложкин (webester) 21 29.06.14 13:31 Сейчас в теме
(5)Вас не бесит, что некоторые "затейники" при необходимости даже не пытаются открыть файл блокнотом, просто ради праздного интереса?
13. Александр Зорин (Manticor) 61 30.06.14 17:01 Сейчас в теме
Все гениальное - просто.
14. Михаил Кузнецов (hotey) 36 02.07.14 05:15 Сейчас в теме
15. Игорь (IgorS) 42 02.07.14 11:40 Сейчас в теме
16. Александр Крынецкий (echo77) 666 12.10.16 09:16 Сейчас в теме
Важно соблюдать регистр :-)