Программный вывод СКД
Система Компоновки Данных (СКД) — инструмент, заменивший собой построитель отчётов в 1С:Предприятие версии 8.1. Позволяет гибко компоновать, структурировать и выводить разрозненные данные на форму или в программную коллекцию. Быстро создать отчёт на СКД можно буквально в несколько щелчков мышью, воспользовавшись встроенным мастером в платформе для объекта метаданных Отчёт.
Но как быть, если требуется вывести данные, вне Отчёта? Встроенный язык 1С:Предприятия предлагает гибкие (и достаточно сложные) API для взаимодействия с объектами СКД. Однако, часто задача стоит в простом выводе на форму документа на СКД, задав разве что парочку параметров. Просто вывести. Хотелось бы, чтобы это делалось одной строкой кода, разбираться в перипетиях объектов нет ни сил, ни желания. Предлагаю готовый код для этого с кратким примером.
Итак, начнём. У нас есть справочник Номенклатура с полями ВидНоменклатуры и Цена.
Мы хотим вывести Номенклатуру, сгруппированную по Виду номенклатуры и отобранные по минимальной Цене. Группировку осуществляем средствами СКД. Цена задаётся параметром там же.
Создадим общий макет МакетВыводНоменклатуры с видом «Схема компоновки данных». Выберем данные из базы и проведём визуальные настройки. Не будем подробно останавливаться на этом шаге. Процесс творческий, зависит от вкуса и пожеланий заказчика. Об этой (и не только) стороне вопроса можно почитать в замечательной книге «Разработка сложных отчетов в «1С:Предприятии 8.2». Система компоновки данных» авторства Е. Хрусталёвой. Сейчас же говорим о программной части.
Создадим обработку ВыводНоменклатуры. Разместим на форме табличный документ Результат — в него мы будем выводить готовый отчёт. Также на форме разместим числовое поле МинимальнаяЦена — по нему будем осуществлять отбор, а также команду СформироватьОтчет — в ней разместим код.
Сам код представлен ниже:
&НаСервере
Процедура СформироватьОтчет_Сервер()
ДанныеРасшифровки = Неопределено;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетДокумента = ПолучитьОбщийМакет("МакетВыводНоменклатуры"); // Обращение к макету.
КомпоновщикНоменклатура = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНоменклатура.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(МакетДокумента));
КомпоновщикНоменклатура.ЗагрузитьНастройки(МакетДокумента.НастройкиПоУмолчанию);
КомпоновщикНоменклатура.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("МинимальнаяЦена", МинимальнаяЦена); // Задание необходимых параметров.
МакетКомпоновки = КомпоновщикМакета.Выполнить(МакетДокумента, КомпоновщикНоменклатура.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат); // Выбор выходного табличного документа.
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры // СформироватьОтчет_Сервер()
&НаКлиенте
Процедура СформироватьОтчет(Команда)
СформироватьОтчет_Сервер();
КонецПроцедуры
Вот и всё. Можно запускать режим предприятия и увидеть результат.
Приведённый код можно скопировать и с минимальными усилиями адаптировать в свой проект — он не содержит дополнительных зависимостей. В заключение приведу найденную на просторах Интернет блок-схему работы программных компнонентов СКД:













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