Как добавить общую кнопку в регламентированные отчеты в «1С:Бухгалтерия 3.0» без изменения конфигурации?

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

При разработке и адаптации типовых решений на платформе «1С:Предприятие 8.3» (на примере конфигурации «Бухгалтерия предприятия 3.0») программисты часто сталкиваются с задачей расширения типового функционала. Одна из таких задач — добавление новой кнопки (команды) на формы регламентированных отчетов, документов и справочников для выполнения определенного алгоритма (например, создание связанных объектов или выгрузка данных в стороннюю систему).

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

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

Способ 1. Безопасное использование расширений: программное добавление кнопки

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

Мы применим более безопасный, «бескровный» метод — динамическое создание команды и кнопки кодом при создании формы на сервере.

Рассмотрим подробнее этот процесс по шагам:

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

Посмотрим на пример программной реализации этого метода:


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

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


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

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

Способ 2. Без расширений и изменения конфигурации: Внешние регламентированные отчеты (ERF)

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

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

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

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

Способ 3. Использование подключаемых команд Библиотеки стандартных подсистем (БСП)

В современных конфигурациях, работающих на базе БСП (включая «1С:Бухгалтерия 3.0»), заложена мощная подсистема подключаемых команд. Она позволяет регистрировать внешние обработки заполнения объектов и выводить их в меню командных панелей документов и справочников автоматически.

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

Для отчетов на базе СКД в БСП предусмотрен механизм интеграции через общий модуль ВариантыОтчетовПереопределяемый. Вы можете использовать процедуру ОпределитьНастройкиФормы модуля менеджера отчета, чтобы динамически подключать свои команды:


Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    
    // Включаем перехват события создания формы на сервере через механизмы БСП
    Настройки.События.ПриСозданииНаСервере = Истина;
    
КонецПроцедуры

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

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

← На главную