Почему 1С игнорирует форму внешнего отчета и как вывести свои кнопки на панель?

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

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

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

Выясняем причину: почему платформа игнорирует нашу форму?

Основная причина такого поведения кроется в интеграции отчета с современными типовыми конфигурациями (такими как ERP, КА, УТ, БП, ЗУП), построенными на базе БСП (Библиотеки стандартных подсистем). Рассмотрим подробнее этот механизм:

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

Теперь, когда мы проанализировали ситуацию и поняли истоки проблемы, разберем способы ее решения.

Способ 1. Принудительное открытие собственной формы через регистрацию в БСП

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

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


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    ПараметрыРегистрации.Наименование = "Мой внешний отчет с кнопками";
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    
    // Создаем команду для открытия нашей формы
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Открыть отчет (индивидуальная форма)";
    НоваяКоманда.Идентификатор = "ОткрытьОтчетСКомандой";
    
    // КРИТИЧЕСКИ ВАЖНО: указываем тип запуска "ОткрытиеФормы"
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    НоваяКоманда.ПоказыватьОповещение = Ложь;
    
    Возврат ПараметрыРегистрации;

КонецФункции

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

Способ 2. Внедрение стандартного шаблона БСП внутрь вашего отчета

Что делать, если вам крайне необходим весь богатый функционал типовых отчетов (сохранение вариантов настроек, быстрые отборы, рассылки отчетов, отправка по почте), но при этом нужно вывести свою кнопку на командную панель? Лучший вариант в этом случае — скопировать системную форму БСП внутрь вашего отчета.

Выполним это по шагам:

  1. Откройте конфигуратор вашей базы данных и найдите общую форму ОбщаяФорма.ФормаОтчета.
  2. Скопируйте эту форму (нажав Ctrl+C или через контекстное меню).
  3. Перейдите к вашему внешнему отчету, разверните ветку Формы и вставьте скопированную форму туда.
  4. Дважды кликните по корню вашего внешнего отчета, чтобы открыть окно его свойств. В поле Основная форма отчета выберите только что скопированную локальную форму.
  5. Теперь вы можете свободно редактировать эту локальную копию формы: добавлять новые команды, перетаскивать их в командную панель и писать обработчики действий в модуле этой формы.

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

Способ 3. Борьба с кэшированием при локальной отладке

Если вы отлаживаете отчет через Файл -> Открыть, но изменения формы упорно не появляются, выполните следующие действия:

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

Способ 4. Проверка свойств командной панели (если форма открывается, но кнопок нет)

Если вы точно убедились (например, поставив точку останова в процедуре ПриСозданииНаСервере в модуле вашей формы), что открывается именно ваша форма, но добавленная кнопка все равно отсутствует, проанализируем настройки элементов в конфигураторе:

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

← На главную