Разработка дополнительных внешних отчетов и обработок

Содержит шаблоны для скачивания!

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

Я вот, например, постоянно ищу и копирую подходящие собственные обработки, чтобы создать новую. Иной раз долго копаюсь, чтобы найти нужный шаблон. И вот чтобы поменьше искать — выкладываю — для себя, в том числе.

Кому интересно немного теории и ознакомиться с моим стандартом — переходите по ссылке, остальных томить не буду, переходим к делу и собственно шаблонам:

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

Вид обработки и Тип команды

Поведение внешних отчетов и обработок, главным образом, определяется Видом обработки и Типом команды (описание).

Виды обработок

Главным параметром, определяющим вид обработки является «Вид». Их немного, остановимся кратко на каждом:

Дополнительная обработка

Обработка произвольного вида. Привязывается к выбранному разделу главного меню и вызывается из меню «Сервис» => «Дополнительные обработки». Классический пример — обработка с открытием формы.

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

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

Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаПечатиШтрихкодов","Вывод в печатную форму штрихкода EAN13 AddOn 5"); 

ПараметрыРегистрации.Разрешения.Добавить(Разрешение); 

НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();

НоваяКоманда.Представление        = Метаданные().Синоним;
НоваяКоманда.Идентификатор        = Метаданные().Имя;
НоваяКоманда.Использование        = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.ПоказыватьОповещение = Истина;

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

Заполнение объекта

Дополнительная обработка специального вида «Заполнение объекта». Предназначена для обработки данных документа или другого объекта (но далеко не всех!). При регистрации обработки на форме появляется невидимая до сих пор кнопка «Заполнение»

Подробно разобраны для типов команды «ТипКомандыОткрытиеФормы» и «ТипКомандыВызовКлиентскогоМетода»:

Пример самой функции (ТипКомандыОткрытиеФормы):

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

Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина, "Чтение и запись файла Excel во временном каталоге");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение); 

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

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

Скачать пример Скачать (Открытие формы)

Скачать пример Скачать (Вызов клиентского метода)

Печатная форма

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

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

Скачать шаблон для УТ11: Скачать

Создание связанных объектов

Пока нет примера

Шаблон сообщения

Пока нет примера

Дополнительный отчет

Предназначен для добавления произвольного отчета. Можно назначить в один или несколько подсистем (Продажи, Закупки и т.д.). Шаблон ниже:

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

//Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина, "Чтение и запись файла Excel во временном каталоге");
//ПараметрыРегистрации.Разрешения.Добавить(Разрешение); 

НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = Метаданные().Синоним;

НоваяКоманда.Идентификатор = Метаданные().Имя;  
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.ПоказыватьОповещение = Истина;

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

Скачать шаблон для УТ11 Скачать

Отчет

Для дополнительных контекстных отчетов. Встраиваются в списки справочников и документов для вызова по кнопке «Отчеты».
Необходимо обратить внимание на передачу параметров и автоформирование отчета:

  • «ОпределитьНастройкиФормы» в СведенияОВнешнейОбработке — обязательно установить флаг Истина
  • Доп процедура ОпределитьНастройкиФормы
  • Доп процедура ПриСозданииНаСервере
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(СтандартныеПодсистемыСервер.ВерсияБиблиотеки());  
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
	ПараметрыРегистрации.БезопасныйРежим = Истина;
	ПараметрыРегистрации.Наименование = Метаданные().Синоним;
	
	ПараметрыРегистрации.Версия = Метаданные().Комментарий; 
	ПараметрыРегистрации.Назначение.Добавить("Справочник.Номенклатура");
	ПараметрыРегистрации.ОпределитьНастройкиФормы = Истина; 
	
	//Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина, "Чтение и запись файла Excel во временном каталоге");
	//ПараметрыРегистрации.Разрешения.Добавить(Разрешение); 
	
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = Метаданные().Синоним;
	
	НоваяКоманда.Идентификатор = Метаданные().Имя;  
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	НоваяКоманда.ПоказыватьОповещение = Истина;
	
	Возврат ПараметрыРегистрации;	 
КонецФункции

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

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
	ОбъектыНазначения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Форма.Параметры, "ОбъектыНазначения");
	Если ОбъектыНазначения <> Неопределено Тогда
		Форма.ФормаПараметры.Отбор.Вставить("Номенклатура", ОбъектыНазначения);
	КонецЕсли;
КонецПроцедуры

Немного теории и описание моего стандарта функции СведенияОВнешнейОбработке

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

Внешний отчет / обработка должен содержать в модуле обработки экспортную функцию СведенияОВнешнейОбработке без параметров. Функция должна возвращать Структуру с определенным обязательным набором параметров. Разберем функцию по строкам

Функция СведенияОВнешнейОбработке() Экспорт
    1. ВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки();	
     // или ВерсияБСП = "2.4.5";
    2. ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ВерсияБСП);  
    3. ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    4. ПараметрыРегистрации.БезопасныйРежим = Истина;
    5. ПараметрыРегистрации.Наименование = Метаданные().Синоним;
	//мне кажется оптимально брать наименование прямо из синонима обработки - код получается универсальным
    6. ПараметрыРегистрации.Версия = Метаданные().Комментарий; 
	//я в комментарий обычно ставлю дату, она же версия
    7. 	ПараметрыРегистрации.Назначение.Добавить("Справочник.Номенклатура");
	ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказКлиента");

    8. Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина, "Чтение и запись файла Excel во временном каталоге");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение); 
	
    9. НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    10. НоваяКоманда.Представление = Метаданные().Синоним;
	//оптимально брать наименование прямо из синонима, но может быть произвольным
    11.	НоваяКоманда.Идентификатор = Метаданные().Имя;  
	//оптимально брать идентификатор из имени обработки, но может быть произвольным 
    12.	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	НоваяКоманда.ПоказыватьОповещение = Истина;
	
	Возврат ПараметрыРегистрации;
КонецФункции

  1. Для инициализации параметров структуры, которую будем заполнять и затем возвращать я использую стандартную функцию ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(«ВерсияБСП»)
  2. ВерсиюБСП я тоже предпочитаю получать ту, которая используется в конфигурации.
    ВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки()
    Стоит заметить, что есть теоретическая вероятность, что в результате изменений версий БСП после обновления конфигурации и изменения версии библиотеки ваш код перестанет работать и, с этой точки зрения, безопаснее использовать ту версию, которую вы использовали на момент отладки.
  3. ПараметрыРегистрации.Вид, с видом все понятно, см. выше
  4. ПараметрыРегистрации.БезопасныйРежим — всегда выставляю = Истина. Однако, надо быть готовым к тому, чтобы прописать нужные разрешения
  5. ПараметрыРегистрации.Наименование — ставлю = Метаданные().Синоним, т.к. при правильно названной обработке — код получается универсальным (см скрин выше)
  6. ПараметрыРегистрации.Версия = Метаданные().Комментарий, мне лично версии удобнее поддерживать в метаданных обработки, чем в коде. Опять-таки, код универсален
  7. ПараметрыРегистрации. Назначение. Это должен быть массив с перечислением идентификаторов метаданных. Актуально для объектов, к которым привязывается обработка (к примеру, к печатным формам). По примеру должно быть все ясно.
  8. Добавление разрешений — это опять-таки см п4 и разрешения
  9. Нужно создать одну или несколько Команд. Поэтому пишем НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(), где ПараметрыРегистрации.Команды — это Таблица значений с колонками:
    • ЗаменяемыеКоманды
    • Идентификатор
    • Использование
    • Модификатор
    • ПоказыватьОповещение
    • Представление
    • Скрыть
  10. НоваяКоманда.Представление = Метаданные().Синоним — чтобы не придумывать другое имя команды и для универсальности кода. В некоторых случаях бывает целесообразно заменить на другое (например, если команд — несколько)
  11. НоваяКоманда.Идентификатор = Метаданные().Имя — аналогично с п10, чтобы не придумывать другой идентификатор команды и для универсальности кода. В некоторых случаях бывает целесообразно заменить на другое (например, если команд — несколько)
  12. НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода()
    или другая из 7 вариантов, описанных ниже

Типы команд

ПараметрыРегистрации.Команды — это Таблица значений с колонками:

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

Самое важное значение — «Использование» — может принимать несколько значений для исполнения разных назначений:

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

С типами команд надо бы тему раскрыть, но как-нибудь в другой раз…

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

Вам также может понравиться

About the Author: Павел Пчелинцев