К статье
Практический материал

Отчеты и Аналитика · 11 мин

Как добавить кнопку в отчет 1С

Как добавить кнопку в отчет 1С через расширение формы и конфигуратор: команды, обработчики, СКД, типичные ошибки и проверка результата.

Кнопка в отчете 1С нужна, когда пользователю требуется быстрое действие прямо из формы отчета: сформировать с отбором по текущей строке, открыть связанный документ, запустить обработку данных или выгрузить результат в нужном формате. Стандартная форма отчета на СКД уже содержит кнопки «Сформировать» и «Настройки», но прикладные сценарии часто выходят за их пределы.

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

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

Определите, как устроен ваш отчет

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

Отчет на СКД может вообще не иметь своей формы — тогда платформа генерирует форму автоматически. В этом случае кнопку нельзя «нарисовать» в конфигураторе напрямую: придется либо создать свою форму отчета, либо добавлять кнопку программно через расширение. Проверить это просто: откройте отчет в дереве конфигурации и посмотрите узел «Формы». Если он пуст — форма генерируется платформой.

Также уточните режим работы: в управляемом приложении команды и элементы формы создаются через редактор формы, а в обычном приложении (устаревший режим) — через диалог формы с элементом «Кнопка». Далее речь идет об управляемых формах, как о наиболее распространенном случае.

Узел «Формы» пустФорма генерируется платформой

Кнопку добавляют через свою форму или расширение с программным созданием

Конфигурация на поддержкеПрямые изменения снимут её с поддержки

Используйте расширение конфигурации

Отчет внешний (.erf)Форма редактируется в самом файле

Откройте файл через «Файл — Открыть» в конфигураторе

Добавление кнопки через форму отчета в конфигураторе

Это базовый способ, когда конфигурацию можно изменять. Откройте конфигуратор, найдите нужный отчет, раскройте узел «Формы» и откройте основную форму отчета. Если формы нет, создайте её: правой кнопкой по узлу «Формы» — «Добавить», тип формы — «Форма отчета».

В редакторе формы перейдите на вкладку «Команды» и добавьте новую команду формы, например ОткрытьДокументы. Задайте ей заголовок, который увидит пользователь, и при необходимости картинку. Затем перетащите команду из правой панели в дерево элементов формы — на командную панель или в группу кнопок. Платформа автоматически создаст элемент «Кнопка», связанный с командой.

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

Порядок действий в конфигураторе
  1. 1
    Откройте конфигуратор и найдите отчет в дереве конфигурации
  2. 2
    Откройте или создайте форму отчета
  3. 3
    На вкладке «Команды» добавьте новую команду и задайте заголовок
  4. 4
    Перетащите команду на командную панель формы
  5. 5
    Создайте обработчик команды и напишите код действия
  6. 6
    Обновите конфигурацию базы данных (F7) и проверьте в режиме предприятия

Добавление кнопки через расширение конфигурации

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

Создайте расширение: в меню «Конфигурация» выберите «Расширения конфигурации», добавьте новое и задайте имя и префикс. Затем в основной конфигурации найдите форму отчета, откройте контекстное меню и выберите «Добавить в расширение». Форма появится в расширении, и дальше действия аналогичны обычной доработке: добавьте команду, перетащите её на командную панель, напишите обработчик.

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

Программное создание кнопки без изменения формы

Иногда заимствовать форму в расширение нежелательно — например, типовая форма часто меняется вендором, и контроль заимствованной формы превращается в постоянную работу. Альтернатива — создать кнопку программно в обработчике ПриСозданииНаСервере через расширение формы (добавление обработчиков без заимствования всей формы).

Идея такая: в расширении добавляется процедура Расш1_ПриСозданииНаСервере с аннотацией &После("ПриСозданииНаСервере"), в которой кодом создается команда через Команды.Добавить() и кнопка через Элементы.Добавить() с типом «КнопкаФормы». Кнопке назначается имя команды и родитель — командная панель формы.

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

bsl
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Команда = Команды.Добавить("Расш1_ОткрытьДокументы");
    Команда.Действие = "Расш1_ОткрытьДокументы";
    Команда.Заголовок = "Документы";
    Родитель = Элементы.Найти("КоманднаяПанель");
    Если Родитель <> Неопределено Тогда
        Кнопка = Элементы.Добавить("Расш1_КнопкаДокументы", Тип("КнопкаФормы"), Родитель);
        Кнопка.ИмяКоманды = "Расш1_ОткрытьДокументы";
    КонецЕсли;
КонецПроцедуры

Что писать в обработчике кнопки

Содержимое обработчика зависит от задачи. Частые сценарии: открыть форму списка с отбором по данным текущей строки отчета, пересформировать отчет с конкретными параметрами, вызвать серверную процедуру для обработки результата.

Если нужно получить данные из результата отчета (табличного документа), используйте расшифровку СКД: через Отчет.КомпоновщикНастроек и данные расшифровки можно определить, какое значение стоит в текущей ячейке. Это сложнее, чем просто открыть форму, но именно так реализуют кнопки вида «показать документы по этой строке».

Для действий, требующих доступа к данным (запросы, создание документов), используйте серверный вызов: клиентский обработчик вызывает серверную процедуру с директивой &НаСервере. Помните, что на сервере недоступны интерактивные действия — открытие форм возможно только на клиенте.

Проверка результата и типичные ошибки

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

Если кнопки нет, проверьте по порядку: обновлена ли конфигурация базы данных (F7), включено ли расширение в списке расширений, есть ли у пользователя права на отчет, не скрыта ли кнопка настройками видимости командной панели. Частая ситуация — команда создана, но не перетащена на форму: в дереве элементов кнопки просто нет.

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

Типичные ошибки
01
Команда создана, но не перетащена на форму — кнопка не появляется в интерфейсе
02
Имя обработчика в свойстве «Действие» не совпадает с именем процедуры в модуле — ошибка при нажатии
03
Доработка внесена напрямую в типовую конфигурацию — потеряна при обновлении
04
В расширении использовано обращение к элементу типовой формы, который переименовали при обновлении — кнопка перестает добавляться
05
Изменения проверены только под администратором — у рядовых пользователей не хватает прав
Контрольные точки

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

Кнопка на форме отчета
Норма

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

Тревожный признак

Видна только под полными правами или отсутствует

Нажатие кнопки
Норма

Выполняется задуманное действие без сообщений об ошибке

Тревожный признак

Ошибка «процедура не определена» или ничего не происходит

После обновления конфигурации
Норма

Расширение активно, кнопка на месте

Тревожный признак

Расширение отключено или кнопка исчезла

Часто задаваемые вопросы

Можно ли добавить кнопку в отчет без конфигуратора?

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

Почему кнопка видна администратору, но не видна пользователю?

Чаще всего дело в правах: у пользователя нет права на сам отчет, на объекты, к которым обращается обработчик, или расширение подключено с ограничением по ролям. Также проверьте функциональные опции, если кнопка или команда к ним привязана.

Как добавить кнопку в форму настроек отчета, а не в основную форму?

Форма настроек — отдельный объект (форма варианта или форма настроек отчета). Её нужно заимствовать или создать отдельно и добавить команду туда тем же способом. Учтите, что контекст формы настроек отличается: доступ к результату отчета оттуда ограничен.

Чем расширение лучше внешнего отчета для этой задачи?

Внешний отчет — это отдельный файл, который пользователь открывает вместо типового отчета; кнопка появится только в нем. Расширение дорабатывает сам типовой отчет: пользователи работают как обычно, а кнопка доступна в привычном месте. Если нужно изменить поведение существующего отчета — выбирайте расширение.

Кнопка добавлена программно, но после обновления конфигурации пропала. Что делать?

Скорее всего, в типовой форме переименовали или удалили элемент, к которому привязывалась кнопка (например, командную панель). Откройте типовую форму, найдите актуальное имя родительского элемента и скорректируйте код. Чтобы снизить риск, добавляйте кнопку в собственную группу, созданную программно в корне формы.

Можно ли добавить кнопку прямо в табличный документ результата отчета?

Нет, табличный документ не поддерживает кнопки как элементы управления. Интерактивность в результате реализуется через расшифровку СКД: по двойному щелчку или через меню расшифровки можно открыть связанный объект. Для своих действий настройте обработку расшифровки в модуле формы отчета.

Итог

Что важно запомнить

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