Как добавить кнопку на форму отчета СКД, если она создается автоматически

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Часто при работе с отчетами на Системе компоновки данных (СКД) (поможет инструментарий для разработки и анализа СКД) возникает задача: добавить на форму отчета дополнительную кнопку для выполнения каких-либо действий. Сложность в том, что если для отчета не была создана своя уникальная форма, платформа 1С генерирует ее автоматически в момент открытия. Давайте разберемся, как встроить в этот процесс свои элементы управления.

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

Способ 1: Создание собственной формы отчета

Это самый прямой и контролируемый подход. Вместо того чтобы полагаться на автоматически созданную форму, мы можем создать свою собственную (поможет конструктор экранных форм без программирования). Этот метод дает полный контроль над внешним видом и поведением отчета.

Рассмотрим по шагам:

  1. Откройте нужный отчет в конфигураторе.
  2. Перейдите на вкладку «Формы» и создайте новую форму. Назначьте ее основной формой отчета.
  3. На созданную форму необходимо добавить основные реквизиты, которые нужны для работы отчета СКД:
    • Отчет — с типом ОтчетОбъект.<ИмяВашегоОтчета>. Этот реквизит будет основной точкой для связи формы с объектом отчета. Сделайте его основным реквизитом формы.
    • Результат — с типом ТабличныйДокумент. Этот элемент будет отображать сформированные данные. Перетащите его на форму.
    • ДанныеРасшифровки — с типом ХранилищеЗначения. Необходимо для работы механизма расшифровки.
    • КомпоновщикНастроек — с типом КомпоновщикНастроек. Этот реквизит связан с основной схемой компоновки и отвечает за пользовательские настройки (отборы, сортировки и т.д.).
  4. В свойствах отчета (основного реквизита формы) укажите в качестве данных для КомпоновщикаНастроек и ДанныхРасшифровки соответствующие реквизиты формы.
  5. Теперь вы можете размещать на форме любые элементы, включая нужную вам кнопку — для этого подойдёт обработка для программного добавления кнопок на формы 1С. Добавьте кнопку на форму, создайте для нее команду и напишите обработчик события на клиенте и/или на сервере.

Преимущество этого метода — полный контроль. Недостаток — необходимо вручную воспроизводить всю стандартную логику работы формы отчета, что может быть трудоемко.

Способ 2: Копирование и доработка общей формы (для конфигураций с БСП)

В типовых конфигурациях, использующих Библиотеку стандартных подсистем (БСП), отчеты часто используют общую форму, например, ФормаОтчета. Вместо того чтобы создавать форму с нуля, можно скопировать эту уже готовую общую форму и доработать ее под свои нужды.

Порядок действий:

  1. Найдите в дереве конфигурации общую форму, которую используют отчеты. Обычно ее название очевидно, например, ФормаОтчета или УниверсальнаяФормаОтчета.
  2. Скопируйте эту общую форму (CTRL+C, CTRL+V). Дайте копии уникальное имя, например, ФормаОтчетаСДопКнопкой.
  3. Откройте новую форму и добавьте на нее свою кнопку и связанные с ней команды и обработчики. Так как вы скопировали готовую форму, вся стандартная логика СКД уже будет в ней реализована.
  4. Откройте ваш объект отчета, перейдите на вкладку «Формы» и назначьте вашу новую, скопированную форму в качестве основной.

Этот способ является отличным компромиссом: он сохраняет все стандартные возможности и внешний вид, принятые в конфигурации, и при этом позволяет легко добавлять свои доработки.

Способ 3: Программное добавление кнопки через расширение

Это наиболее гибкий и «чистый» способ, который не требует изменения исходной конфигурации. Он идеально подходит для доработки типовых конфигураций, которые находятся на поддержке. Суть метода — перехватить момент создания стандартной формы отчета и программно добавить на нее наши элементы — удобнее через инструмент для управления составом и поведением форм без программирования.

Разберем по шагам, как это сделать:

  1. Создайте новое расширение конфигурации.
  2. Найдите в основной конфигурации общую форму, используемую вашим отчетом (например, ФормаОтчета), и заимствуйте ее в расширение.
  3. В модуле заимствованной формы создайте процедуру-обработчик с аннотацией &После("ПриСозданииНаСервере"). Этот код выполнится сразу после того, как стандартная логика создания формы завершится.
  4. Внутри этой процедуры программно создайте команду и кнопку, которая будет ее вызывать.

Посмотрим на пример кода в модуле формы расширения:


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

&НаКлиенте
Процедура ОбработчикМоейКоманды(Команда)
    Сообщить("Моя дополнительная кнопка была нажата!");
    // Здесь размещается логика, которая должна выполняться при нажатии
    // Например, вызов какой-либо серверной процедуры
    ВыполнитьОбработкуНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьОбработкуНаСервере()
    // Серверный код
КонецПроцедуры

Этот подход позволяет сохранить отчет и конфигурацию на поддержке, а все доработки инкапсулировать внутри расширения.

Способ 4: Добавление команды в командный интерфейс отчета

Иногда кнопка на самой форме не обязательна. Если ваша задача — просто предоставить пользователю возможность запустить некий процесс, связанный с отчетом, можно добавить команду прямо в объект отчета. Такая команда появится в панели действий формы (часто в подменю «Еще»).

Как это сделать:

  1. В конфигураторе откройте объект вашего отчета.
  2. Перейдите на вкладку «Команды».
  3. Добавьте новую команду, например, «ДополнительнаяОбработка».
  4. Задайте ей синоним (этот текст увидит пользователь), группу (например, «Командная панель формы.Важное») и укажите тип параметра команды, если это необходимо.
  5. Создайте модуль команды и напишите в нем процедуру-обработчик (для этого пригодится консоль для отладки кода в 1С:Предприятии).

Этот метод является самым простым и архитектурно верным, если вам не требуется сложного взаимодействия с элементами на форме отчета. Платформа сама позаботится о том, чтобы отобразить вашу команду в интерфейсе.

← На главную