СКД Лого

Программный вывод СКД

Система Компоновки Данных (СКД) — инструмент, заменивший собой построитель отчётов в 1С:Предприятие версии 8.1. Позволяет гибко компоновать, структурировать и выводить разрозненные данные на форму или в программную коллекцию. Быстро создать отчёт на СКД можно буквально в несколько щелчков мышью, воспользовавшись встроенным мастером в платформе для объекта метаданных Отчёт.

Но как быть, если требуется вывести данные, вне Отчёта? Встроенный язык 1С:Предприятия предлагает гибкие (и достаточно сложные) API для взаимодействия с объектами СКД. Однако, часто задача стоит в простом выводе на форму документа на СКД, задав разве что парочку параметров. Просто вывести. Хотелось бы, чтобы это делалось одной строкой кода, разбираться в перипетиях объектов нет ни сил, ни желания. Предлагаю готовый код для этого с кратким примером.

Итак, начнём. У нас есть справочник Номенклатура с полями ВидНоменклатуры и Цена.

Справочник номенклатура

Мы хотим вывести Номенклатуру, сгруппированную по Виду номенклатуры и отобранные по минимальной Цене. Группировку осуществляем средствами СКД. Цена задаётся параметром там же.

Создадим общий макет МакетВыводНоменклатуры с видом «Схема компоновки данных». Выберем данные из базы и проведём визуальные настройки. Не будем подробно останавливаться на этом шаге. Процесс творческий, зависит от вкуса и пожеланий заказчика. Об этой (и не только) стороне вопроса можно почитать в замечательной книге «Разработка сложных отчетов в «1С:Предприятии 8.2». Система компоновки данных» авторства Е. Хрусталёвой. Сейчас же говорим о программной части.

Настройки СКД

Создадим обработку ВыводНоменклатуры. Разместим на форме табличный документ Результат — в него мы будем выводить готовый отчёт. Также на форме разместим числовое поле МинимальнаяЦена — по нему будем осуществлять отбор, а также команду СформироватьОтчет — в ней разместим код.

Форма формирование отчета

Сам код представлен ниже:

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

&НаКлиенте
Процедура СформироватьОтчет(Команда)
	СформироватьОтчет_Сервер();	
КонецПроцедуры

Вот и всё. Можно запускать режим предприятия и увидеть результат.

Итоговый отчёт СКД

Приведённый код можно скопировать и с минимальными усилиями адаптировать в свой проект — он не содержит дополнительных зависимостей. В заключение приведу найденную на просторах Интернет блок-схему работы программных компнонентов СКД:

Блок-схема СКД

Один комментарий на «“Программный вывод СКД”»

  1. Еще бы ссылочку на скачивание примера

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *