Всем привет!
Бывали у меня как-то задачи, когда нужно было как-то доработать макет, сформированный механизмом СКД (да хоть картинки повставлять - сейчас, если не ошибаюсь, в самой СКД картинки реализовали - или, например, время формирования вставить в отчет первой строкой и автора, или ...).
Теоретические рассуждения
Отчет на базе СКД формируется либо по кнопке формирования отчета в самом отчете, либо, если это типовая, то из общей формы отчетов методом объекта отчета "СкомпоноватьРезультат". Вообще, конечно, этот метод в общей форме вызывается в фоновом задании, порождаемом общей формой. И где тут можно вставить свой код?
В действительности в модуле объекта отчета есть событие "ПриКомпоновкеРезультата". Эта процедура вызывается перед работой самой СКД, и за счет параметра "СтандартнаяОбработка" мы можем запретить СКД выполняться. Таким образом чтобы дополнить табличный документ, сформированный СКД, мы должны запустить компоновку самостоятельно, но при этом вовсе не обязательно городить весь этот огород с процессором и прочими объектами - достаточно вызвать "СкомпоноватьРезультат" из модуля объекта еще раз.
Практика
Итак, в чем же хитрость? Хитрость проста, как три копейки. Ниже модуль объекта отчета с перехватом:
Перем _СтандартнаяОбработка;
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Если НЕ _СтандартнаяОбработка = Истина Тогда
СтандартнаяОбработка = Ложь;
_СтандартнаяОбработка = Истина;
СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки);
// теперь можно покромсать ДокументРезультат - добавим дату формирования отчета
ДокументРезультат.ВставитьОбласть(
ДокументРезультат.Область(ДокументРезультат.ВысотаТаблицы + 1,1),
ДокументРезультат.Область(1,1,1,ДокументРезультат.ШиринаТаблицы),
ТипСмещенияТабличногоДокумента.ПоВертикали
);
ДокументРезультат.Область(1,1).Текст =
СтрШаблон("Сформирован в %1", ТекущаяДата()
);
КонецЕсли;
КонецПроцедуры
Здесь мы определили переменную модуля, в которую будем писать, например, "Истину" (да что угодно), предварительно проверив, нет ли в ней этой самой "Истины" уже. Если есть, значит мы компонуем отчет повторно (вызванным методом СкомпоноватьРезультат", поэтому позволим СКД отработать в штатном режиме.
Ну а дальше можем, например, добавить в отчет дату и время компоновки, вставив область сверху:
Не болейте!