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