Внешний отчёт: вывести свой результат в обработчике компоновки

Учебные задачи

Перехватываем формирование внешнего отчёта и выводим небольшой итог без запроса к рабочим данным.

Где и как запускать

Модуль объекта внешнего отчёта (.erf). Обработчик создайте через список «Процедуры и функции» модуля объекта. Это не модуль формы и не общий модуль.

Подготовка

  1. В конфигураторе выберите Файл → Новый → Внешний отчёт. Сохраните отчёт в свой .erf. Создайте основную форму отчёта и поле табличного документа Результат.

  2. В модуле объекта добавьте обработчик ПриКомпоновкеРезультата через список событий и поместите в него основной код. Если обработчик уже есть, дополните его тело, не создавайте вторую одноимённую процедуру.

  3. В модуле обычной формы добавьте процедуру Сформировать из дополнительного блока и назначьте её действием своей кнопки. Поле Результат должно отображать реквизит формы Результат типа ТабличныйДокумент.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ДокументРезультат.Очистить();
    ДокументРезультат.Область(1, 1).Текст = "Учебные продажи";
    ДокументРезультат.Область(2, 1).Текст = "Количество";
    ДокументРезультат.Область(2, 2).Текст = "Цена";
    ДокументРезультат.Область(2, 3).Текст = "Сумма";
    ДокументРезультат.Область(3, 1).Текст = "3";
    ДокументРезультат.Область(3, 2).Текст = "250";
    ДокументРезультат.Область(3, 3).Текст = Строка(3 * 250);
КонецПроцедуры
Кнопка Сформировать в обычной форме внешнего отчёта

Основная обычная форма внешнего отчёта → Модуль формы.

Реквизит формы Результат: ТабличныйДокумент; кнопка вызывает эту процедуру.

Процедура Сформировать(Кнопка)
    Результат = Новый ТабличныйДокумент;
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    СкомпоноватьРезультат(Результат, ДанныеРасшифровки);
КонецПроцедуры

Разбор по шагам

  1. Кнопка вызывает метод СкомпоноватьРезультат контекста внешнего отчёта. Платформа вызывает обработчик объекта и передаёт ему табличный документ.

  2. СтандартнаяОбработка = Ложь отключает обычный вывод СКД: в этом примере результат заполняется вручную.

  3. Обработчик очищает прежний результат и записывает заголовок, исходные числа и вычисленную сумму. Он не должен повторно вызывать СкомпоноватьРезультат, иначе получится рекурсия.

Как проверить результат

  1. Откройте .erf в толстом клиенте с обычной формой и нажмите свою кнопку Сформировать: в третьей строке должно появиться 3, 250 и 750.

  2. Нажмите кнопку повторно: строки не дублируются, потому что обработчик начинает с Очистить().

  3. Поставьте точку останова в обработчике: вызов должен прийти из СкомпоноватьРезультат, а не из прямого вызова процедуры.

Ожидаемый результат

Внешний отчёт выводит учебную таблицу с суммой 750; данные информационной базы не читаются и не записываются.

На что обратить внимание

  1. Выгрузка справки содержит сокращённую запись ПриКомпоновкеРезультата(). Для модуля объекта используйте обработчик с параметрами, который создаёт конфигуратор, как в примере выше.

  2. Обычная форма выбрана для короткого способа запуска. В управляемой форме компоновку выполняйте на сервере, возвращая табличный документ в реквизит формы.

  3. Этот учебный вывод заменяет СКД полностью. Для настоящего отчёта либо оставляйте стандартную обработку, либо выполняйте собственную компоновку.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.