Часто при работе с отчетами на Системе компоновки данных (СКД) (поможет инструментарий для разработки и анализа СКД) возникает задача: добавить на форму отчета дополнительную кнопку для выполнения каких-либо действий. Сложность в том, что если для отчета не была создана своя уникальная форма, платформа 1С генерирует ее автоматически в момент открытия. Давайте разберемся, как встроить в этот процесс свои элементы управления.
Проанализируем несколько надежных способов, от самых простых до более гибких, которые позволят добавить необходимый функционал без нарушения основной логики работы отчета.
Это самый прямой и контролируемый подход. Вместо того чтобы полагаться на автоматически созданную форму, мы можем создать свою собственную (поможет конструктор экранных форм без программирования). Этот метод дает полный контроль над внешним видом и поведением отчета.
Рассмотрим по шагам:
Отчет — с типом ОтчетОбъект.<ИмяВашегоОтчета>. Этот реквизит будет основной точкой для связи формы с объектом отчета. Сделайте его основным реквизитом формы.Результат — с типом ТабличныйДокумент. Этот элемент будет отображать сформированные данные. Перетащите его на форму.ДанныеРасшифровки — с типом ХранилищеЗначения. Необходимо для работы механизма расшифровки.КомпоновщикНастроек — с типом КомпоновщикНастроек. Этот реквизит связан с основной схемой компоновки и отвечает за пользовательские настройки (отборы, сортировки и т.д.).КомпоновщикаНастроек и ДанныхРасшифровки соответствующие реквизиты формы.Преимущество этого метода — полный контроль. Недостаток — необходимо вручную воспроизводить всю стандартную логику работы формы отчета, что может быть трудоемко.
В типовых конфигурациях, использующих Библиотеку стандартных подсистем (БСП), отчеты часто используют общую форму, например, ФормаОтчета. Вместо того чтобы создавать форму с нуля, можно скопировать эту уже готовую общую форму и доработать ее под свои нужды.
Порядок действий:
ФормаОтчета или УниверсальнаяФормаОтчета.ФормаОтчетаСДопКнопкой.Этот способ является отличным компромиссом: он сохраняет все стандартные возможности и внешний вид, принятые в конфигурации, и при этом позволяет легко добавлять свои доработки.
Это наиболее гибкий и «чистый» способ, который не требует изменения исходной конфигурации. Он идеально подходит для доработки типовых конфигураций, которые находятся на поддержке. Суть метода — перехватить момент создания стандартной формы отчета и программно добавить на нее наши элементы — удобнее через инструмент для управления составом и поведением форм без программирования.
Разберем по шагам, как это сделать:
ФормаОтчета), и заимствуйте ее в расширение.&После("ПриСозданииНаСервере"). Этот код выполнится сразу после того, как стандартная логика создания формы завершится.Посмотрим на пример кода в модуле формы расширения:
&После("ПриСозданииНаСервере")
Процедура Расш_ПослеСозданияНаСервере(Отказ, СтандартнаяОбработка)
// Проверим, что дорабатываем форму именно нашего отчета
Если ЭтаФорма.Отчет.Метаданные().Имя = "МойОтчет" Тогда
// 1. Создаем новую команду для формы
НоваяКоманда = ЭтаФорма.Команды.Добавить("МояПользовательскаяКоманда");
НоваяКоманда.Заголовок = "Выполнить действие";
НоваяКоманда.Действие = "ОбработчикМоейКоманды"; // Имя клиентской процедуры-обработчика
// 2. Создаем новый элемент-кнопку на форме
// Предполагаем, что на форме есть стандартная командная панель с именем "КоманднаяПанель"
НоваяКнопка = ЭтаФорма.Элементы.Добавить("КнопкаМоеДействие", Тип("КнопкаФормы"), ЭтаФорма.Элементы.КоманднаяПанель);
НоваяКнопка.ИмяКоманды = "МояПользовательскаяКоманда";
НоваяКнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;
НоваяКнопка.Отображение = ОтображениеКнопки.Текст;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикМоейКоманды(Команда)
Сообщить("Моя дополнительная кнопка была нажата!");
// Здесь размещается логика, которая должна выполняться при нажатии
// Например, вызов какой-либо серверной процедуры
ВыполнитьОбработкуНаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ВыполнитьОбработкуНаСервере()
// Серверный код
КонецПроцедуры
Этот подход позволяет сохранить отчет и конфигурацию на поддержке, а все доработки инкапсулировать внутри расширения.
Иногда кнопка на самой форме не обязательна. Если ваша задача — просто предоставить пользователю возможность запустить некий процесс, связанный с отчетом, можно добавить команду прямо в объект отчета. Такая команда появится в панели действий формы (часто в подменю «Еще»).
Как это сделать:
Этот метод является самым простым и архитектурно верным, если вам не требуется сложного взаимодействия с элементами на форме отчета. Платформа сама позаботится о том, чтобы отобразить вашу команду в интерфейсе.