Как подключить самописный документ к подсистеме Дополнительные отчеты и обработки в БСП

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

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

Шаг 1. Настройка метаданных и определяемых типов

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

  1. ОбъектСДополнительнымиКомандами — основной тип. Добавление нашего документа в этот список позволяет регистрировать внешние обработки с назначением на этот документ.
  2. ВладелецДополнительныхОтчетовИОбработок — рекомендуется также проверить этот тип в новых версиях БСП (3.1 и выше), так как он отвечает за контекстное отображение панелей отчетов.

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

Шаг 2. Реализация обязательных методов в модуле менеджера

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

Рассмотрим, что необходимо добавить в модуль менеджера нашего документа ТЦ_СписокУчастниковГИА. Нам нужно создать «заглушки» экспортных процедур, даже если мы не планируем делать встроенные печатные формы:


// Добавляет команды печати, поддерживаемые объектом.
// Команды, добавленные здесь, будут отображаться в подменю "Печать" или "Отчеты".
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	// Здесь можно описать встроенные команды печати, если они есть.
КонецПроцедуры

// Стандартный метод для выполнения печати.
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	// Реализация логики печати.
КонецПроцедуры

Наличие процедуры ДобавитьКомандыПечати является критически важным. Именно к ней обращается подсистема при формировании состава команд в форме документа.

Шаг 3. Доработка модуля формы документа

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

В модуле формы документа пропишем следующие вызовы:


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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	
	// Актуализация команд при смене контекста или переходе между документами.
	ПодключаемыеКоманды.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	
КонецПроцедуры

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

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

Шаг 4. Подготовка внешнего отчета для регистрации

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


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

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

Шаг 5. Финальная проверка настроек

Если после всех изменений в коде кнопки так и не появились, проанализируем ситуацию на уровне настроек системы:

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

← На главную