gifts2017

Разбираемся с механизмом Дополнительные отчеты и обработки в БСП

Опубликовал Пишу код как картины (yurii_host) в раздел Программирование - Практика программирования

Чуть более комплексное описание, чем на других ресурсах

Недавно столкнулся с необходимостью применить данную технологию. Статей в интернете много. Но полного понимания они не дают.

В итоге удалось разобраться, затратив некоторое время.

Опишу то, что я сам хотел бы знать об этом механизме, чтобы начать его применять.

Сведения о внешней обработке

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

Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();


	// заполняем структуру ПараметрыРегистрации


	Возврат ПараметрыРегистрации;
	
КонецФункции


Описание полей возвращаемой структуры можно посмотреть в комментарии к функции ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(). Там можно получить актуальную информацию для вашей версии БСП.

Опишу основные поля структуры сведений о внешней обработке. При этом буду по минимуму повторять информацию в упомянутом комментарии, а постараюсь дополнить ее.


Поле "Вид"

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


// Минимальное описание параметров регистрации

Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

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

Возможные значения этого поля приведу в виде таблицы

  Значение поля "Вид"   Расположение команды

  Расширение  

   файла  

  ПечатнаяФорма   В меню "Печать" на форме объекта или списка   epf
  ЗаполнениеОбъекта   В меню "Заполнить" на форме объекта или списка   epf
  СозданиеСвязанныхОбъектов     В меню "Создать на основании" - "Создание связанных объектов.."  
  на форме объекта или списка 
  epf
  Отчет   В меню "Отчеты" на форме объекта или списка   erf
  ДополнительнаяОбработка   В списке соответствующих подсистем в меню
 "Сервис" - "Дополнительные обработки"
  epf
  ДополнительныйОтчет   В списке соответствующих подсистем в меню
 "Сервис" - "Дополнительные отчеты"
  erf

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

// рекомендуется заполнять поле "Вид" таким способом

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();

// а не вот таким
ПараметрыРегистрации.Вид = "ПечатнаяФорма";


Поле "Назначение"

Содержит массив объектов конфигурации в формате "<Тип>.<Вид>", для которых будет назначен внешний отчет/обработка.

// для конкретных видов
ПараметрыРегистрации.Назначение.Добавить("Документ.Счет");

// для всех документов
ПараметрыРегистрации.Назначение.Добавить("Документ.*"); 

Этот параметр игнорируется, если поле "Вид" имеет значение "ДополнительнаяОбработка" или "ДополнительныйОтчет".


Поле "Наименование"

Это значение подставляется в наименование элемента справочника Дополнительные отчеты и обработки при создании.

Если не заполнено, то используется синоним внешней обработки/отчета.

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


Поле "Команды"

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

Эту табличную часть можно заполнить и вручную.

Каждой строке соответствует один пункт в соответствующих меню, описанных в таблице выше.

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

НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Заказ с характеристиками (сервер)";
НоваяКоманда.Идентификатор = "ЗаказСХарактеристикамиСервер";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

 

   

Таблица "Команды", колонка "Использование"

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

Наиболее часто используются процедуры Печать() и ВыполнитьКоманду(), а также открытие формы без обращения к методу.  

Это поле может принимать одно из значений, возвращаемых функциями ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды<Тип>(), например, ТипКомандыВызовСерверногоМетода(). В каждой из этих функций есть подробный комментарий.

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

 Тип команды     Значение поля "Вид"     Вызываемая экспортная процедура  
 ВызовСерверногоМетода   ПечатнаяФорма   Печать(
      МассивОбъектов,
      КоллекцияПечатныхФорм,
      ОбъектыПечати,
      ПараметрыВывода) 

 ДополнительнаяОбработка
 ДополнительныйОтчет
 Отчет 
 ВыполнитьКоманду(
      ИдентификаторКоманды,
      ПараметрыВыполнения) 

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

 ЗаполнениеОбъекта   ВыполнитьКоманду(
      ИдентификаторКоманды,
      ОбъектыНазначения,
      ПараметрыВыполнения) 
 ВызовКлиентскогоМетода   ПечатнаяФорма   &НаКлиенте
  Печать(
      ИдентификаторКоманды,
      ОбъектыНазначенияМассив) 

 ДополнительнаяОбработка
 ДополнительныйОтчет 
 &НаКлиенте
  ВыполнитьКоманду(
      ИдентификаторКоманды) 

 СозданиеСвязанныхОбъектов   &НаКлиенте
 ВыполнитьКоманду(
      ИдентификаторКоманды,
      ОбъектыНазначенияМассив,
      СозданныеОбъекты) 

 ЗаполнениеОбъекта Отчет   &НаКлиенте
 ВыполнитьКоманду(
      ИдентификаторКоманды,
      ОбъектыНазначенияМассив) 

 Для всех видов   в форму передается параметр
    ДополнительнаяОбработкаСсылка 
 ОткрытиеФормы   СозданиеСвязанныхОбъектов
 ЗаполнениеОбъекта
 Отчет 
 в форму передается дополнительный параметр
    ОбъектыНазначения 

 Для всех видов   в форму передаются параметры
     ИдентификаторКоманды
     ДополнительнаяОбработкаСсылка
     ИмяФормы 

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

   

Для типа команды ВызовКлиентскогоМетода необходимо создать форму в обработке, назначить ее основной и объявить экспортную процедуру

   


Полезные процедуры

Рекомендую обратить внимание на следующие процедуры и функции:

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


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


Файлы

Прикладываю шаблоны для наиболее востребованных на мой взгляд вариантов использования
Шаблоны тестировались на БСП 2.3.2.35 в режиме совместимости с 8.3.6. Версию библиотек в своей конфигурации можно посмотреть в регистре сведений  Версии подсистем

В шаблонах присутствует минимально необходимый код и убрано все лишнее.

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

Данный список файлов предполагаю расширять по мере необходимости

  

Внешняя печатная форма (шаблон)

Реализованы типы команд: ВызовСерверногоМетода, ВызовКлиентскогоМетода, ОткрытиеФормы. 

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

То есть все используемые в нем методы рабочие, их останется только заполнить своими данными.

  

Внешняя обработка Создание связанных объектов (шаблон)

Реализованы типы команд: ВызовСерверногоМетода, ВызовКлиентскогоМетода, ОткрытиеФормы. 

Сам шаблон в неизменном виде регистрируется для всех видов документов и выводит переданные данные через сообщить.


   

Внешняя обработка Заполнение объекта (шаблон)

Реализованы типы команд: ВызовСерверногоМетода, ВызовКлиентскогоМетода, ОткрытиеФормы, ЗаполнениеФормы. 

Сам шаблон в неизменном виде регистрируется для всех видов документов и увеличивает на один день дату выбранного документа (или документов).

  

Внешний отчет СКД по объекту (шаблон)

Реализован тип команд: ОткрытиеФормы

Сам шаблон в неизменном виде регистрируется для справочника Организаци и выводит поля Ссылка, Код, Наименование с отбором по организации (или организациям), для которой вызван отчет

Скачать файлы

Наименование Файл Версия Размер
Внешняя печатная форма (шаблон) 12
.epf 8,58Kb
29.10.16
12
.epf 8,58Kb Скачать
Внешняя обработка Создание связанных объектов (шаблон) 11
.epf 8,43Kb
30.10.16
11
.epf 8,43Kb Скачать
Внешняя обработка Заполнение объекта (шаблон) 12
.epf 8,46Kb
30.10.16
12
.epf 8,46Kb Скачать
Внешний отчет СКД по объекту (шаблон) 12
.erf 6,42Kb
30.10.16
12
.erf 6,42Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Призрак (davdykin) 30.10.16 18:09
Спасибо за статью! Но мне кажется, значительно большие трудности не с написанием, а с отладкой данных обработок. Интересно было бы почитать про способы отладки!
NeviD; pas; iolko; mindcannon; wbazil; syberman; +6 Ответить 1
2. Пишу код как картины (yurii_host) 30.10.16 19:44
(1) davdykin, благодарю за вопрос.
Раз тема актуальная, то опишу свой подход к решению этой задачи в ближайшее время
3. vadver (vadver) 31.10.16 08:45
Спасибо, хорошая статья. Правда, совершенно не освещено заполнение разрешений. Для безопасного режима это очень актуально
olbu; vasiliy_b; +2 Ответить
4. Никита Грызлов (nixel) 31.10.16 09:54
Кто-то должен спросить...
Чем не устроила официальная документация по БСП на ИТС?
З.Ы. Про разрешения там тоже есть.
5. Сергей Рудаков (fishca) 31.10.16 11:16
Только за одно оформление "+"
6. Сергей Рудаков (fishca) 31.10.16 11:16
(4) а у всех туда доступ есть?
7. Марат Настоящий (rayastar) 31.10.16 11:50
"применить данную технологию"
уж тогда механизм) технология это немножко другое
8. vadver (vadver) 31.10.16 17:32
(4) nixel, ага, документация там по принципу "краткость - сестра таланта"
9. Павел Жихарев (palsergeich) 31.10.16 18:19
(4) nixel, https://its.1c.ru/db/bspdoc#content:427:1 Вы про это? При всем моем уважении, это не документация, это КрССТал.
Нормально посмотреть как это работает, конечно, можно в демо базе, но зачем тогда такая документация, если по любому вопросу проще лезть в пример. А доступ к демо базе может быть не всегда...

Да они в общем то этого не скрывают:
Подробнее см. дополнительную обработку Демо: Обработка заполнения в справочнике Дополнительные отчеты и обработки демонстрационной конфигурации.
bow; sbcode; +2 Ответить
10. Никита Грызлов (nixel) 31.10.16 18:40
(8) vadver, не заметил там краткости, особенно в разделе "Использование при разработке конфигурации"

Видимо, вкусовщина.
11. Пишу код как картины (yurii_host) 31.10.16 23:38
(4) nixel, я описал с точки зрения программиста, который начал использовать данный механизм, а не с точки зрения архитектора, который его разработал и описал документацию.
Архитектору, например, и так понятно, что СвязанныеОбъекты - появляются в меню "Создать на основании" в карточке документа. Но я потратил кучу времени, чтобы понять, на что влияет этот параметр. Или чем отличается Отчет от ДополнительныйОтчет? Из указанной вами справки этого не понять, о чем справедливо заметил (8) vadver, Или например, те же самые команды - все поля перечислены скопом, сидишь и думаешь, как их все заполнить, а заполнять то оказывается достаточно только три из них. И такие мелочи на каждом шагу. В итоге, разобравшись, мне было просто жалко, что эта информация забудется мною через некоторое время, поэтому я выложил свое знание в виде публикации

Мое мнение такое: публикация получилась неплохая, наглядная (за счет добавления таблиц и рисунков). Такой материал проще усваивается и запоминается. Кроме того чтение документации никто не отменял, и ее будет проще читать после этой обзорной статьи.

(3) vadver, я постарался осветить только основные моменты, не погружаясь в детали. На полноту изложения не претендую. Я пропустил не только этот аспект, но и еще дополнительные методы объектов, которые на мой взгляд тоже заслуживают внимания. Думаю, что такие детали уже можно разобрать по справке или на примерах из БСП, имея общее понимание механизма.
VladimirL; swiss-garant; vic777tor; sbcode; NeviD; AlX0id; vadver; jONES1979; +8 Ответить
12. Максим Кузнецов (Makushimo) 01.11.16 06:36
13. Олег Веселов (sml) 02.11.16 10:07
плюсанул за внятный удобочитаемый вид
14. Trucker (Trucker) 03.11.16 08:45
Да, все это нужное и важное. Вот только разработчик БСП постепенно уходит от текущей модели подключаемых внешних обработок и переходит на расширения.
15. Виталий Попов (Сурикат) 07.12.16 20:12
Забыли про внешние обработки, позволяющие добавлять свои способы расчета скидок
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа