Вопрос
Как можно перехватить формирование отчета, чтобы не делать форму? Я нашел только предопределенную процедуру "ПриКомпоновкеРезультата".
Может я плохо искал? Ведь логично, чтобы для каждого этапа:
1.компоновка макета
2.копоновка данных
3.вывод результата компоновки
присутствовали обработчики, позволяющие программисту вмешиваться в работу.
Ответ 1
Делаешь свою кнопку и вперед.
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ОстаткиТоваровОстаткиИОбороты.Склад,
| ОстаткиТоваровОстаткиИОбороты.Номенклатура,
| ОстаткиТоваровОстаткиИОбороты.КоличествоНачальныйОстаток,
| ОстаткиТоваровОстаткиИОбороты.КоличествоПриход,
| ОстаткиТоваровОстаткиИОбороты.КоличествоРасход,
| ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток
|ИЗ
| РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты КАК ОстаткиТоваровОстаткиИОбороты";
ТЗ=Запрос.Выполнить().Выгрузить();
ВнешнийНабор=Новый Структура("Наборчик",ТЗ);
// схема компановки из реквизита отчета
СКД=ЭтотОбъект.ПолучитьМакет("ЧерезНабор"); // получим схему из макета
// настройка из схемы по умолчанию
НастройкаСКД=ЭтотОбъект.КомпоновщикНастроек.Настройки; // текущие настройки
// компановщик макета из схемы и настроек порождает макет
КомпоновщикМакетаКомпоновкиДанных=Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных=КомпоновщикМакетаКомпоновкиДанных.Выполнить(СКД, НастройкаСКД) ;
// процессор из макета делает себя самого
ПроцессорКомпоновкиДанных=Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,ВнешнийНабор);
// прцессор вывода порождает ТД
ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ЭлементыФормы.Результат.Очистить();
ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.УстановитьДокумент(ЭлементыФормы.Результат);
ТД=ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент.Вывести(ПроцессорКомпоновкиДанных);
ТД.Показать();
Ответ 2
Ну все правильно ПриКомпоновкеРезультата() для этого предназначена, и форму можно не делать.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Вопрос
А в какое время вызывается эта процедура? Нигде не нашел (и программно проверить тоже нельзя, потому что если в форме руками прописать код похожий на ваш, то процедура не вызывается).
Ответ
Код живёт в модуле Объекта.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Сообщить("Я тут!!");
КонецПроцедуры