Как выполнить код в типовой форме отчёта
Сегодня рассмотрим такую задачу: мы добавили в типовую конфигурацию свой отчёт на СКД, и нам нужно выполнить какие-то действия на форме. По умолчанию, если к отчёту не привязано специфических форм, к нему будет подключена типовая форма Библиотеки Стандартных Подсистем (она называется ФормаОтчета и находится в списке общих форм).
Типовая форма предоставляющая дополнительные сервисы в подарок от авторов БСП: расчёт суммы в ячейке, отправка отчёта по электронной почте и т.д. Но нужно выполнить некий код на форме нашего отчёта, не затронув остальные отчёты. Есть два способа сделать это: создать свою форму отчёта — но тогда мы потеряем указанные выше сервисы, либо воспользоваться рекомендациями от авторов подсистемы ВариантыОтчетов. Второй путь несколько сложнее, но в конечном итоге даст нам более гибкое и функциональное решение. Рассмотрим его подробно.
Все манипуляции будем производить на типовой 1С:Управление холдингом версии 3.1 с подключенной подсистемой СтандартныеПодсистемы (она же БСП) версии 3.0.3.43. Уточнить версии подключенных подсистем можно в регистре ВерсииПодсистем, входящий в типовые конфигурации.
Постановка задачи
Итак, мы создадим простой отчёт, выводящий курсы валют на сегодняшнюю дату. Например, будем брать данные вот таким запросом:
ВЫБРАТЬ КурсыВалютСрезПоследних.Валюта КАК Валюта, КурсыВалютСрезПоследних.Курс КАК Курс ИЗ РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних
Готовый отчёт выглядит так:
Наша задача модифицировать его таким образом, чтобы при старте исполнялся некий код. Например, выводилось сообщение.
Для этого необходимо выполнить 7 несложных, но неочевидных действий:
-
Разместить в ВариантыОтчетовПереопределяемый — НастроитьВариантыОтчетов()
-
Добавить хранилище вариантов ХранилищеВариантовОтчетов
-
В модуле менеджера отчетов добавить экспортную процедуру НастроитьВариантыОтчетов()
-
Запустить обновление вспомогательных данных
-
В модуле объекта отчёта создать процедуру ОпределитьНастройкиФормы()
-
В процедуре указать настройки, подключить обработчик
-
Написать обработчик для вызова
Шаг 1. Разместить в ВариантыОтчетовПереопределяемый
Открываем общий модуль ВариантыОтчетовПереопределяемый (его можно смело снять с поддержки), находим там процедуру НастроитьВариантыОтчетов() и добавляем в конце свою настройку:
ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ПримерКурсы);
Шаг 2. Добавить хранилище вариантов
В свойствах отчёта указываем хранилище вариантов — ХранилищеВариантовОтчетов
Шаг 3. Добавить процедуру НастроитьВариантыОтчетов() в модуле менеджера
Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт НастройкиОтчета.ОпределитьНастройкиФормы = Истина; КонецПроцедуры
Шаг 4. Запустить обновление вспомогательных данных
Сейчас требуется «рассказать» БСП о нашем отчёте. Для этого нужно запустить обновление подсистемы ВариантыОтчетов. Сделать это можно двумя способами: увеличить номер версии конфигурации, либо воспользовавшись специальной обработкой от авторов БСП. В этом случае выбираем вариант «Простая настройка» и устанавливаем флажок «Варианты отчётов». Запускаем обновление
Шаг 5. В модуле объекта отчёта создать процедуру ОпределитьНастройкиФормы()
Отправляемся на этот раз в модуль объекта отчёта и добавляем там процедуру
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт КонецПроцедуры
Шаг 6. Подключить обработчик события
Самое время приступить к прикладной части. В нашем примере нам нужно переопределить обработчик ПриСозданииНаСервере(), чтобы при старте отчёта выводилось сообщение. Сообщаем в процедуре из шага 5, что такой обработчик находится здесь же
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт Настройки.События.Вставить("ПриСозданииНаСервере", Истина); КонецПроцедуры
Конечно, возможности подсистемы не заканчиваются одним обработчиком ПриСозданииНаСервере. Разработчики заложили программный доступ ко многим функциям формы отчётов. Полный список доступного функционала можно узнать на официальном сайте 1С
Шаг 7. Написать обработчик для вызова
Пришла пора сделать то, для чего всё и затевалась — написать нужный нам код. Создаём экспортный обработчик ПриСозданииНаСервере() там же, в модуле менеджера отчёта
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт Сообщить("123"); КонецПроцедуры // ПриСозданииНаСервере()
Готово! Если мы запустим отчёт, мы увидим наше тестовое сообщение.
из шага 4 непонятно откуда обработка взялась, в составе БСП и типовых такой нет.
Спасибо тебе, добрый человек, за эту статью. У меня взлетел отчет без обработки «Обновление вспомогательных данных». Как внешний он работал, добавила в расширение, перестали добавляться реквизиты, добавленные на форму программно.