Формирование отчета СКД с использование внешних наборов данных

В данной статье приводится сквозной пример использования внешнего источника данных в СКД (система компоновки данных). Для определенности будем загружать данные из таблицы значений.

  1. Создаем новый внешний отчет, открываем схему компоновки данных.

  2. На первой закладке «Наборы данных» добавляем набор данных «объект». Это, по сути, и будет внешним источником данных, который мы впоследствии будем заполнять программно. В поле «Имя объекта, содержащего данные» напишем «ВнешнийИсточник», это имя по которому мы будем обращаться к объекту. На этом в схеме компоновки данных мы работу прервем и перейдем к форме отчета.

  3. Для заполнения внешнего источника, нам необходимо прибегнуть к программному формированию отчета. Соответственно, создаем форму отчета. Кнопка формы «Сформировать» по умолчанию командная, переопределим ее на вызов процедуры. Итак, следующий листинг кода формирует программно отчет, а также заполняет наш внешний источник.

//Заполнение ТаблицыЗначений данными===================================
запрос=новый запрос("ВЫБРАТЬ
			|	Номенклатура.Ссылка,
			|	isnull(Номенклатура.Код,""""),
			|	Номенклатура.Услуга,
			|	Номенклатура.СтавкаНДС
			|ИЗ
			|	Справочник.Номенклатура КАК Номенклатура");

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

ЭлементыФормы.Результат.Очистить();
ПроцВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцВывода.ОтображатьПроцентВывода=Истина;

ПроцВывода.НачатьВывод();

Пока Истина Цикл
	ОбработкаПрерыванияПользователя();
	ЭлементРезультата=ПроцессорКомпоновки.Следующий();
	Если ЭлементРезультата=Неопределено Тогда
		Прервать;
	КонецЕсли;
	ПроцВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЦикла;

ПроцВывода.ЗакончитьВывод();

Для наглядности он разбит визуально на три части. Поясним каждую в отдельности

   Первый- подготовка таблицы значения, которая будет передаваться во внешний источник компоновки. Именно здесь вы можете формировать любую таблицу наполненную произвольными данными.

   Второй – здесь мы помещаем в структуру нашу таблицу значений (таких таблиц может быть и несколько, все зависит от количества объектов компоновке). Обратите внимание в строчке ВнешнийНаборДанных.Вставить("ВнешнийИсточник",ТЗ); используется ключ с именем нашего источника.

   Третий - типовой код формирования отчета, его подробное объяснение не входит в рамки данной статьи. Внимание, стоит заострить на строчке

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешнийНаборДанных,ДанныеРасшифровки,Истина);
, где в метод инициализации вторым параметром передается наша структура «ВнешнийНаборДанных». Это и есть непосредственное интегрирование наших данных в компоновку данных.

На этом работа в модуле формы закончена.

  4. Вернемся в компоновку данных. На первой закладке «Наборы данных» необходимо в ручную заполнить состав полей, который должен в точности соответствовать составу полей во внешнем источнике. В данном примере такими полями являются Ссылка, Код, Услуга, СтавкаНДС. Далее работаем как обычно если бы у нас был бы просто запрос (в настройках нужно построить схему как вы хотите отобразить отчет).

Закладки компоновки данных в конечном итоге, должны выглядеть как на представленных вам изображениях ниже:



Теперь можно сформировать данный отчет в режиме предприятия и убедится в работоспособности данного отчета.


Автор: Андрей Баринов

Дата публикации: 24.09.2010