Разбираемся с механизмом Дополнительные отчеты и обработки в БСП
Чуть более комплексное описание, чем на других ресурсах
- Описание
- Подробнее
Описание
Недавно столкнулся с необходимостью применить данную технологию. Статей в интернете много. Но полного понимания они не дают.
В итоге удалось разобраться, затратив некоторое время.
Опишу то, что я сам хотел бы знать об этом механизме, чтобы начать его применять.
Сведения о внешней обработке
Чтобы подключить внешний отчет или обработку в справочник Дополнительные отчеты и обработки необходимо описать экспортную функцию СведенияОВнешнейОбработке() в модуле. Вот шаблон такой функции:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
// заполняем структуру ПараметрыРегистрации
Возврат ПараметрыРегистрации;
КонецФункции Описание полей возвращаемой структуры можно посмотреть в комментарии к функции ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(). Там можно получить актуальную информацию для вашей версии БСП.
Опишу основные поля структуры сведений о внешней обработке. При этом буду по минимуму повторять информацию в упомянутом комментарии, а постараюсь дополнить ее.
Поле «Вид»
Минимальным условием для регистрации внешнего отчета или обработки является заполненность поля «Вид». То есть, если вы создадите внешнюю обработку и пропишете в ней следующий код, то этого будет достаточно, чтобы добавить ее в справочник Дополнительные отчеты и обработки
// Минимальное описание параметров регистрации
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
Возврат ПараметрыРегистрации;
КонецФункцииЭто поле определяет откуда будет вызываться команда, из какого пункта меню на форме объекта или списка.
Возможные значения этого поля приведу в виде таблицы
| Значение поля «Вид» | Расположение команды | Расширение файла |
|---|---|---|
| ПечатнаяФорма | В меню «Печать» на форме объекта или списка | epf |
| ЗаполнениеОбъекта | В меню «Заполнить» на форме объекта или списка | epf |
| СозданиеСвязанныхОбъектов | В меню «Создать на основании» — «Создание связанных объектов..» на форме объекта или списка | epf |
| Отчет | В меню «Отчеты» на форме объекта или списка | erf |
| ДополнительнаяОбработка | В списке соответствующих подсистем в меню «Сервис» — «Дополнительные обработки» | epf |
| ДополнительныйОтчет | В списке соответствующих подсистем в меню «Сервис» — «Дополнительные отчеты» | erf |
Это поле может принимать одно из значений, возвращаемых функциями ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки<Вид>(). Например, для вида «ПечатнаяФорма» есть функция ВидОбработкиПечатнаяФорма().
// рекомендуется заполнять поле "Вид" таким способом
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
// а не вот таким
ПараметрыРегистрации.Вид = "ПечатнаяФорма";Поле «Назначение»
Содержит массив объектов конфигурации в формате «<Тип>.<Вид>», для которых будет назначен внешний отчет/обработка.
// для конкретных видов
ПараметрыРегистрации.Назначение.Добавить("Документ.Счет");
// для всех документов
ПараметрыРегистрации.Назначение.Добавить("Документ.*");
Этот параметр игнорируется, если поле «Вид» имеет значение «ДополнительнаяОбработка» или «ДополнительныйОтчет».
Поле «Наименование»
Это значение подставляется в наименование элемента справочника Дополнительные отчеты и обработки при создании.
Если не заполнено, то используется синоним внешней обработки/отчета.
Используется только для администрирования, а при добавлении в пункт меню, например, Печать будет подставляться наименование команды из таблицы команд, а не значение этого поля.
Поле «Команды»
Таблица значений, которая загружается в одноименную табличную часть элемента справочника Дополнительные отчеты и обработки при регистрации внешней обработки.
Эту табличную часть можно заполнить и вручную.
Каждой строке соответствует один пункт в соответствующих меню, описанных в таблице выше.
Чтобы команда внешней обработки появилась в нужном меню, обязательно нужно добавить хотя бы одну строку в эту таблицу.
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Заказ с характеристиками (сервер)";
НоваяКоманда.Идентификатор = "ЗаказСХарактеристикамиСервер";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Таблица «Команды», колонка «Использование»
В колонке «Использование» указывается тип вызываемой команды. По сочетанию Вид-Тип команды система определяет какая предопределенная процедура будет вызвана из внешней обработки/отчета, и где она будет объявлена — на клиенте или на сервере.
Наиболее часто используются процедуры Печать() и ВыполнитьКоманду(), а также открытие формы без обращения к методу.
Это поле может принимать одно из значений, возвращаемых функциями ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды<Тип>(), например, ТипКомандыВызовСерверногоМетода(). В каждой из этих функций есть подробный комментарий.
Кроме того различается состав и количество параметров, передаваемых во внешнюю обработку/отчет. Кратко опишу возможные варианты использования в таблице
| Тип команды | Значение поля «Вид» | Вызываемая экспортная процедура |
|---|---|---|
| ВызовСерверногоМетода | ПечатнаяФорма | Печать( МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) |
| ДополнительнаяОбработка ДополнительныйОтчет Отчет | ВыполнитьКоманду( ИдентификаторКоманды, ПараметрыВыполнения) | |
| СозданиеСвязанныхОбъектов | ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполнения) | |
| ЗаполнениеОбъекта | ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) | |
| ВызовКлиентскогоМетода | ПечатнаяФорма | &НаКлиенте Печать( ИдентификаторКоманды, ОбъектыНазначенияМассив) |
| ДополнительнаяОбработка ДополнительныйОтчет | &НаКлиенте ВыполнитьКоманду( ИдентификаторКоманды) | |
| СозданиеСвязанныхОбъектов | &НаКлиенте ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) | |
| ЗаполнениеОбъекта Отчет | &НаКлиенте ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив) | |
| Для всех видов | в форму передается параметр ДополнительнаяОбработкаСсылка | |
| ОткрытиеФормы | СозданиеСвязанныхОбъектов ЗаполнениеОбъекта Отчет | в форму передается дополнительный параметр ОбъектыНазначения |
| Для всех видов | в форму передаются параметры ИдентификаторКоманды ДополнительнаяОбработкаСсылка ИмяФормы | |
| Отчет | Отчет с макетом СКД может не иметь форму, тогда будет использована общая форма для отчетов по умолчанию | |
| ЗаполнениеФормы | ЗаполнениеОбъекта | ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) |
| СценарийВБезопасномРежиме | Для всех видов | см. описание в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер .ТипКомандыСценарийВБезопасномРежиме() |
| ЗагрузкаДанныхИзФайла | ДополнительнаяОбработка | см. описание в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер .ТипКомандыЗагрузкаДанныхИзФайла() |
Для типа команды ВызовКлиентскогоМетода необходимо создать форму в обработке, назначить ее основной и объявить экспортную процедуру

Полезные процедуры
Рекомендую обратить внимание на следующие процедуры и функции:
ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработку(ОбъектСправочника, ПараметрыРегистрации)
ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(Ссылка)
ДополнительныеОтчетыИОбработки.ВыполнитьКомандуИзФормыВнешнегоОбъекта(ИдентификаторКоманды, ПараметрыКоманды, ЭтаФорма)
Также будет полезно развернуть демо конфигурацию по БСП. В ней есть примеры внешних обработок и отчетов в справочнике внешних обработок.
Файлы
Прикладываю шаблоны для наиболее востребованных на мой взгляд вариантов использования
Шаблоны тестировались на БСП 2.3.2.35 в режиме совместимости с 8.3.6. Версию библиотек в своей конфигурации можно посмотреть в регистре сведений Версии подсистем
В шаблонах присутствует минимально необходимый код и убрано все лишнее.
Если обнаружите недочеты или возникнут вопросы по применению — пишите в комментариях, постараюсь по возможности исправить/ответить.
Данный список файлов предполагаю расширять по мере необходимости
Внешняя печатная форма (шаблон)
Реализованы типы команд: ВызовСерверногоМетода, ВызовКлиентскогоМетода, ОткрытиеФормы.
Сам шаблон в неизменном виде регистрируется для всех видов документов и выдает печатную форму, содержащую список переданных в него объектов и идентификатор команды.
То есть все используемые в нем методы рабочие, их останется только заполнить своими данными.
Внешняя обработка Создание связанных объектов (шаблон)
Реализованы типы команд: ВызовСерверногоМетода, ВызовКлиентскогоМетода, ОткрытиеФормы.
Сам шаблон в неизменном виде регистрируется для всех видов документов и выводит переданные данные через сообщить.
Внешняя обработка Заполнение объекта (шаблон)
Реализованы типы команд: ВызовСерверногоМетода, ВызовКлиентскогоМетода, ОткрытиеФормы, ЗаполнениеФормы.
Сам шаблон в неизменном виде регистрируется для всех видов документов и увеличивает на один день дату выбранного документа (или документов).
Внешний отчет СКД по объекту (шаблон)
Реализован тип команд: ОткрытиеФормы
Сам шаблон в неизменном виде регистрируется для справочника Организаци и выводит поля Ссылка, Код, Наименование с отбором по организации (или организациям), для которой вызван отчет


