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