Почему не удается подключить внешний отчет или обработку к документу в 1С

Программист 1С v8.3 (Управляемые формы) Промышленность, строительство и АПК
← На главную

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

Анализ структуры функции СведенияОВнешнейОбработке

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

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


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

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

Работа с определяемыми типами в конфигурации

Самая частая причина, по которой документы не появляются в списке выбора ("Размещение"), — это отсутствие данных документов в специальных определяемых типах БСП. Библиотека стандартных подсистем использует эти типы для фильтрации объектов метаданных, поддерживающих подключаемые команды.

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

Порядок действий в конфигураторе:

  1. Откройте дерево метаданных и перейдите в ветку "Определяемые типы".
  2. Найдите тип ОбъектСДополнительнымиКомандами (или ОбъектСПечатнымиФормами в зависимости от выбранного вида).
  3. В свойстве "Тип" проверьте, установлены ли галочки напротив ваших документов (например, Документ.АИС_АПК_ЗаявлениеНаПолучениеСубсидии).
  4. Если галочки нет — установите её, сохраните конфигурацию и обновите базу данных (F7).

Без этого шага механизм БСП просто игнорирует ваш документ, так как считает, что он не предназначен для расширения функционала через внешние обработки.

Регистрация через переопределяемые модули

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


Процедура ОпределитьОбъектыСКомандамиОтчетов(Объекты) Экспорт
    // Добавляем ваш документ в список объектов, поддерживающих команды отчетов
    Объекты.Добавить(Метаданные.Документы.АИС_АПК_ЗаявлениеНаПолучениеСубсидии);
КонецПроцедуры

Это гарантирует, что при формировании меню "Отчеты" в форме документа система "увидит" ваше расширение.

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

Выясним причину другой популярной проблемы: кнопка в документе появилась, пользователь на неё нажимает, код выполняется, но визуально ничего не происходит. Это случается при использовании варианта ВызовКлиентскогоМетода.

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

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


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

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

Подключаемые команды в формах документов

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Подключаем команды БСП
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
    // Обработка выполнения команды
    ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

Если документ является самописным и в его форме эти строки отсутствуют, никакие настройки в справочнике "Дополнительные отчеты и обработки" не заставят кнопку появиться в интерфейсе.

Итоги и рекомендации

Разберем краткий чек-лист для успешного подключения:

  1. Вид обработки: Используйте "Дополнительная обработка" для открытия форм и "Печатная форма", если результат должен выводиться на печать.
  2. Определяемые типы: Обязательно включите документ в ОбъектСДополнительнымиКомандами или ОбъектСПечатнымиФормами.
  3. Очистка кэша: При изменении СведенияОВнешнейОбработке в справочнике "Дополнительные отчеты и обработки" лучше удалить старую запись и создать новую, чтобы БСП полностью пересчитала связи.
  4. Явное открытие: В клиентском методе Печать всегда прописывайте ОткрытьФорму, если вам нужен интерфейс.

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

← На главную