По задаче было необходимо создать печатную форму заданного образца, с шапкой, подвалом и данными между ними. Простым решением было создать обработку с выводом табличного документа на экран. А красивым решением мне представлялось создание не обработки, а отчета с использованием собственного макета вместо макета, формируемого СКД. Предлагаю вам мою реализацию этого решения.
Создаем внешний отчет. Реквизитов не требуется. Формы тоже.
Создаем свой макет. И, как видите, создаем схему компоновки данных. Вы спросите: а как же «без СКД»? Отвечаю, схема компоновки нужна, только чтобы заполнить параметры. Иначе для отражения и ввода параметров придется создавать свою форму. Нет уж! Пускай штатные механизмы поработают для нас! Если отчет не требует ввода параметров, то и схема компоновки данных нам не потребуется.
Наборы данных пустые, структура отчета тоже:
Заполняем только нужные нам для отчета параметры:
Далее переходим к обработке команды «Сформировать». Обрабатывается эта команда в модуле объекта в процедуре ПриКомпоновкеРезультата.
Важная деталь: если ваш отчет не потребовал ввода параметров и вы не стали создавать схему компоновки, то при формировании отчета вы увидите фигу в виде сообщения:
Чтобы фига не показывалась, начните формирование отчета так:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если отчет все же потребовал ввод параметров, то нам нужно вытащить параметры из настроек отчета:
КомпоновщикНастроек.ЗагрузитьНастройки(КомпоновщикНастроек.ПолучитьНастройки());
Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы;
Период = Параметры.Найти("Период").Значение;
НачалоПериода = Период.ДатаНачала;
КонецПериода = Период.ДатаОкончания;
Так же не забудьте задать представление варианта отчета, из схемы компоновки оно пойдет в заголовок отчета:
Cобираем табличный документ:
//Получаем данные для печати
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоПериода",НачалоПериода);
Запрос.УстановитьПараметр("ОкончаниеПериода",КонецПериода);
Запрос.Текст = ПолучитьТекстЗапроса();
РезультатЗапроса = Запрос.Выполнить();
// Заполняем табличный документ
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("ОбластьШапка");
ОбластьСтрока = Макет.ПолучитьОбласть("ОбластьСтрока");
ОбластьПодвал = Макет.ПолучитьОбласть("ОбластьПодвал");
ОбластьШапка.Параметры.ДатаПриказа = Формат(ТекущаяДата(),"ДФ='dd.MM.yyyy'");
ТабДок.Вывести(ОбластьШапка);
Выборка = РезультатЗапроса.Выбрать();
i=0;
Пока Выборка.Следующий() Цикл
i=i+1;
ОбластьСтрока.Параметры.Заполнить(Выборка);
ОбластьСтрока.Параметры.нпп = i;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
СтруктураРуководитель = ПолучитьСтруктуруРуководителя(Справочники.Организации.НайтиПоНаименованию("ООО XYZ"));
ОбластьПодвал.Параметры.РуководительДолжность = СтруктураРуководитель.Должность;
ОбластьПодвал.Параметры.РуководительФИО = ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(СтруктураРуководитель.ФизическоеЛицо);
ТабДок.Вывести(ОбластьПодвал);
Передаем наш табличный документ на вывод:
ДокументРезультат.Очистить();
ДокументРезультат.Вывести(ТабДок);
КонецПроцедуры
И вот результат наших трудов:
В печатную форму могут пробраться параметры:
Избавимся от них через Настройки à Другие настройки В СКД:
Доклад окончен.
Протестировано на Платформе 8.3.25.1374. Управление торговлей 11.5.12.270.