Внешние наборы данных в 1С СКД
Возникал ли у вас хоть раз вопрос – как сделать отчет на 1С СКД по таблице значений? В этом нам помогут внешние наборы данных в 1С СКД.
Итак. Если вам нужно сделать отчет по данным внешней системы, если вам нужно сделать отчет по данным сложного алгоритма, которые невозможно получить запросом (пакетом запросов), то вы должны познакомиться с такими понятиями СКД как «набор данных объект» и «внешний набор данных».
Начнем с набора данных объект. Его вам нужно добавить в вашу схему компоновки

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

Каким образом появляются данные в указанном наборе? Это реализуется через внешние наборы данных, которые можно задать только при программном формировании отчета. Поэтому мы обращаемся к процедуре модуля объекта отчета «ПриКомпоновкеРезультата», в которой, как известно, производится программное выполнение отчета 1С на СКД.
Рассмотрим вот такой пример программного формирования:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ВнешниеНаборыДанных = Новый Структура;
ДанныеНабора = ВнешнийНабор.Выгрузить();
ДанныеНабора.Колонки.Добавить("КодВнешний", Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(9)));
ДанныеНабора.Колонки.Добавить("СерияВнешний", Новый ОписаниеТипов("Число",,,Новый КвалификаторыЧисла(5)));
ДанныеНабора.Колонки.Добавить("ДокументВнешний", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(50)));
ДанныеНабора.Колонки.Количество.Имя = "КоличествоВнешний";
ДанныеНабора.Колонки.Наименование.Имя = "НаименованиеВнешний";
Для каждого Строка Из ДанныеНабора Цикл
Строка.КодВнешний = Строка.Код;
Строка.СерияВнешний = Строка.Серия;
Строка.ДокументВнешний = "Накладная № " + Строка.Номер + " от " + Формат(Строка.Дата, "ДФ=dd.MM.yyyy");
КонецЦикла;
ВнешниеНаборыДанных.Вставить("ВнешнийНабор", ДанныеНабора);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Здесь «ВнешнийНабор» это табличная часть отчета, которая заполняется на клиенте. Табличную часть мы выгружаем в таблицу значений, которую в свою очередь передаем в структуру, задающую состав внешних наборов – «ВнешниеНаборыДанных». В каждом элементе этой структуры свойство «Ключ» содержит имя объекта, как мы задали его в схеме данных. Свойство «Значение» содержит таблицу значений с колонками, совпадающими по именам и типам с полями набора данных.
Ключевая строчка в этом коде это
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки);
В этой строке мы передаем внешние наборы данных в процессор компоновки для дальнейшего выполнения нашего отчета.
На этом в принципе все.
Материалы для дополнительного изучения
Смена типа набора данных СКД с сохранением полей
Автоматическая обработка для смены типа набора данных СКД с сохранением полей
Разработка отчета СКД с использованием заглушек наборов данных

Comments
So empty here ... leave a comment!