Дополнительные отчеты и обработки в 1С: Предприятие
Оглавление
- Введение
- Виды дополнительных отчетов и обработок
- Функция СведенияОВнешнейОбработке()
- Типы команд в дополнительных обработках
- Примеры реализации разных видов дополнительных обработок
- Дополнительные возможности
- Заключение
Введение
Подсистема «Дополнительные отчеты и обработки» предназначена для подключения и использования внешних (дополнительных) отчетов и обработок к информационной базе в режиме 1С:Предприятие. Это позволяет расширять функциональность конфигурации без изменения её кода.
Основное преимущество подсистемы в том, что пользователи и администраторы могут добавлять новую функциональность в систему без помощи разработчика и без модификации конфигурации.
Виды дополнительных отчетов и обработок
В зависимости от назначения дополнительные отчеты и обработки делятся на два основных типа:
1. Глобальные
- ДополнительнаяОбработка - общая обработка, доступная из командного интерфейса (меню) программы
- ДополнительныйОтчет - общий отчет, доступный из командного интерфейса (меню) программы
2. Назначаемые (контекстные)
- ПечатнаяФорма - добавляет новые печатные формы к объектам конфигурации
- ЗаполнениеОбъекта - позволяет автоматически заполнять данные в объектах
- СозданиеСвязанныхОбъектов - создает связанные объекты на основании существующих
- Отчет - контекстный отчет по данным конкретного объекта
- ШаблонСообщения - шаблон для создания сообщений
Функция СведенияОВнешнейОбработке()
Эта функция является ключевой при разработке дополнительных отчетов и обработок. Она предоставляет информацию о внешней обработке при её регистрации в системе.
Общий вид функции
// Возвращает сведения о внешней обработке.
//
// Возвращаемое значение:
// Ст руктура - сведения о внешней обработке.
//
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
// Заполнение параметров
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Информация = НСтр("ru = 'Описание обработки'");
ПараметрыРегистрации.Версия = "1.0.0.1";
ПараметрыРегистрации.БезопасныйРежим = Истина;
// Описание команд
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Название команды'");
НоваяКоманда.Идентификатор = "ИдентификаторКоманды";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
Параметры функции
Разберем подробно структуру, которую должна возвращать функция СведенияОВнешнейОбработке()
:
Основные параметры
Параметр | Тип | Описание |
---|---|---|
Вид | Строка | Вид обработки или отчета. Один из следующих: "ДополнительнаяОбработка", "ДополнительныйОтчет", "ЗаполнениеОбъекта", "Отчет", "ПечатнаяФорма", "СозданиеСвязанныхОбъектов", "ШаблонСообщения" |
Назначение | Массив | Массив строк имен объектов метаданных в формате "ИмяКлассаОбъектаМетаданного.ИмяОбъектаМетаданных", которым назначается обработка |
Наименование | Строка | Наименование обработки для администратора |
Версия | Строка | Версия обработки в формате "МажорнаяВерсия.МинорнаяВерсия" (например, "1.0") |
БезопасныйРежим | Булево | Требуется ли устанавливать безопасный режим при исполнении. Если Истина - обработка запускается в безопасном режиме |
Информация | Строка | Краткая информация по обработке, её описание |
ВерсияБСП | Строка | Минимальная версия БСП, с которой совместима обработка в формате "РР.ПП.ВВ.СС" |
Разрешения | Массив | Массив разрешений при использовании безопасного режима |
ОпределитьНастройкиФормы | Булево | Используется для дополнительных отчетов, подключенных к подсистеме Варианты отчетов |
НазначениеВариантаОтчета | ПеречислениеСсылка | Назначение варианта дополнительного отчета |
Команды
Таблица значений с колонками:
Колонка | Тип | Описание |
---|---|---|
Представление | Строка | Представление команды в интерфейсе |
Идентификатор | Строка | Идентификатор команды, уникальный в пределах обработки |
Использование | Строка | Вариант запуска команды (см. типы команд) |
ПоказыватьОповещение | Булево | Нужно ли показывать оповещение при запуске и завершении |
Модификатор | Строка | Дополнительный модификатор команды (для печатных форм - "ПечатьMXL") |
ЗаменяемыеКоманды | Строка | Идентификаторы стандартных команд, которые заменяются обработкой (через запятую) |
Использование программного интерфейса
Рекомендуется использовать программный интерфейс для создания структуры параметров:
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
Где "2.3.1.73" - версия БСП, с которой совместима обработка.
Для указания вида обработки используются функции общего модуля ДополнительныеОтчетыИОбработкиКлиентСервер
:
// Глобальные
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка()
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет()
// Назначаемые
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма()
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта()
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиСозданиеСвязанныхОбъектов()
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет()
ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиШаблонСообщения()
Типы команд в дополнительных обработках
Система поддерживает несколько типов команд, определяющих способ вызова и запуска обработки.
1. ТипКомандыВызовСерверногоМетода
Вызывает серверный метод обработки без открытия формы. Для каждого вида обработки требуется реализовать соответствующую процедуру:
-
Для глобальных обработок:
// Обработчик серверных команд.
//
// Параметры:
// ИдентификаторКоманды - Строка - имя команды.
// ПараметрыВыполнения - Структура - контекст выполнения команды.
// * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка обработки.
// * РезультатВыполнения - Структура - результат выполнения команды.
//
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполнения) Экспорт
// Реализация логики команды.
КонецПроцедуры -
Для печатных форм:
// Обработчик печати.
//
// Параметры:
// МассивОбъектов - Массив - ссылки на объекты, которые нужно распечатать.
// КоллекцияПечатныхФорм - ТаблицаЗначений - информация о табличных документах.
// ОбъектыПечати - СписокЗначений - соответствие между объектами и областями печати.
// ПараметрыВывода - Структура - дополнительные параметры.
// * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка обработки.
//
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Реализация логики печати.
КонецПроцедуры -
Для обработок создания связанных объектов:
// Обработчик серверных команд.
//
// Параметры:
// ИдентификаторКоманды - Строка - имя команды.
// ОбъектыНазначения - Массив - ссылки объектов, для которых вызвана команда.
// СозданныеОбъекты - Массив - ссылки новых объектов, созданных в результате выполнения.
// ПараметрыВыполнения - Структура - контекст выполнения команды.
// * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка обработки.
// * РезультатВыполнения - Структура - результат выполнения команды.
//
Процедура ВыполнитьКоман ду(ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполнения) Экспорт
// Реализация логики команды.
КонецПроцедуры -
Для обработок заполнения объекта:
// Обработчик серверных команд.
//
// Параметры:
// ИдентификаторКоманды - Строка - имя команды.
// ОбъектыНазначения - Массив - ссылки объектов, для которых вызвана команда.
// ПараметрыВыполнения - Структура - контекст выполнения команды.
// * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки - ссылка обработки.
// * РезультатВыполнения - Структура - результат выполнения команды.
//
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
// Реализация логики команды.
КонецПроцедуры
2. ТипКомандыВызовКлиентскогоМетода
Вызывает клиентский метод основной формы внешнего объекта. Требуется реализовать:
-
Для глобальных обработок:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды) Экспорт
// Реализация логики команды.
КонецПроцедуры -
Для печатных форм:
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
// Реализация логики команды.
КонецПроцедуры -
Для обработок создания связанных объектов:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт
// Реализация логики команды.
КонецПроцедуры -
Для обработок заполнения и контекстных отчетов:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
// Реализация логики команды.
КонецПроцедуры
3. ТипКомандыОткрытиеФормы
Открывает основную форму внешнего объекта. При открытии формы передаются параметры:
-
Основные параметры:
- ИдентификаторКоманды - идентификатор команды
- ДополнительнаяОбработкаСсылка - ссылка на элемент справочника
- ИмяФормы - имя формы-владельца, из которой вызвана команда
-
Дополнительные параметры (для назначаемых обработок):
- ОбъектыНазначения - массив ссылок на объекты, для которых вызвана команда
4. ТипКомандыЗаполнениеФормы
Специальный тип команды для заполнения данных формы без записи объекта. Доступен только для обработок вида "ЗаполнениеОбъекта". Требуется реализовать:
// Обработчик серверных команд.
//
// Параметры:
// ИдентификаторКоманды - Строка - имя команды.
// ОбъектыНазначения - Массив - ссылки объектов (Неопределено для ЗаполнениеФормы).
// ПараметрыВыполнения - Структура - контекст выполнения команды.
// * ЭтаФорма - ФормаКлиентскогоПриложения - заполняемая форма.
// * ДополнительнаяОбработкаСсылка - СправочникСсылка.ДополнительныеОтчетыИОбработки.
//
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
// Реализация логики команды.
КонецПроцедуры
5. ТипКомандыЗагрузкаДанныхИзФайла
Доступен только для глобальных обработок (Вид = "ДополнительнаяОбработка") при наличии подсистемы "ЗагрузкаДанныхИзФайла". Требуется реализовать:
// Определяет параметры загрузки данных из файла.
//
// Параметры:
// ИдентификаторКоманды - Строка - имя команды.
// ПараметрыЗагрузки - Структура - настройки загрузки данных.
//
Процедура ОпределитьПараметрыЗагрузкиДанныхИзФайла(ИдентификаторКоманды, ПараметрыЗагрузки) Экспорт
// Настройка параметров загрузки.
КонецПроцедуры
// Сопоставляет загружаемые данные с данными в информационной базе.
//
// Параметры:
// ИдентификаторКоманды - Строка - имя команды.
// ЗагружаемыеДанные - ТаблицаЗначений - описание загружаемых данных.
//
Процедура СопоставитьЗагружаемыеДанныеИзФайла(ИдентификаторКоманды, ЗагружаемыеДанные) Экспорт
// Реализация логики поиска данных.
КонецПроцедуры
// Загружает сопоставленные данные в базу.
//
// Параметры:
// ИдентификаторКоманды - Строка - имя команды.
// ЗагружаемыеДанные - ТаблицаЗначений - описание загружаемых данных.
// ПараметрыЗагрузки - Структура - пользовательские настройки загрузки.
// Отказ - Булево - признак отмены загрузки.
//
Процедура ЗагрузитьИзФайла(ИдентификаторКоманды, ЗагружаемыеДанные, ПараметрыЗагрузки, Отказ) Экспорт
// Реализация логики загрузки данных.
КонецПроцедуры
Примеры реализации разных видов дополнительных обработок
1. Печатная форма
// Возвращает сведения о внешней обработке.
//
// Возвращаемое значение:
// см. ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке
//
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.3.1.73");
ПараметрыРегистрации.Информация = НСтр("ru = 'Печать ценников для Очков'");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
ПараметрыРегистрации.Версия = "25.02.24.1";
// Назначение печатной формы - для каких объектов будет доступна
ПараметрыРегистрации.Назначение.Добавить("Документ.ПоступлениеТоваров");
ПараметрыРегистрации.Назначение.Добавить("Документ.УстановкаЦенНоменклатуры");
ПараметрыРегистрации.Назначение.Добавить("Документ.ПеремещениеТоваров");
ПараметрыРегистрации.Назначение.Добавить("Справочник.Номенклатура");
// Добавляем команду печати
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = НСтр("ru = 'Очки печать ценников'");
Команда.Идентификатор = "ПечатьОчки";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.ПоказыватьОповещение = Истина;
Команда.Модификатор = "ПечатьMXL";
//Команда.ЗаменяемыеКоманды = "Счет,Квитанция";
Возврат ПараметрыРегистрации;
КонецФункции
// Обработчик печати
//
// Параметры:
// МассивОбъектов - Массив - ссылки на объекты для печати
// КоллекцияПечатныхФорм - ТаблицаЗначений - коллекция печатных форм
// ОбъектыПечати - СписокЗначений - соответствие объектов и областей печати
// ПараметрыВывода - Структура - дополнительные параметры
//
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
// Получаем ссылку на печатную форму в коллекции
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "ПечатьОчки");
Если ПечатнаяФорма <> Неопределено Тогда
// Создаем табличный документ для вывода печатной формы
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.КлючПараметровПечати = "ПараметрыПечатиЦенников";
// Перебираем объекты для печати
Для Каждого Ссылка Из МассивОбъектов Цикл
Если ТабличныйДокумент.ВысотаТаблицы > 0 Тогда
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
НачалоОбласти = ТабличныйДокумент.ВысотаТаблицы + 1;
// Формируем данные для печати
СформироватьПечатнуюФормуЦенников(ТабличныйДокумент, Ссылка);
// Регистрируем область печати для объекта
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НачалоОбласти, ОбъектыПечати, Ссылка);
КонецЦикла;
// Записываем табличный документ в печатную форму
ПечатнаяФорма.ТабличныйДокумент = ТабличныйДокумент;
КонецЕсли;
КонецПроцедуры
// Формирует печатную форму ценников
//
// Параметры:
// ТабличныйДокумент - ТабличныйДокумент - документ для вывода данных
// Ссылка - СправочникСсылка, ДокументСсылка - объект для печати
//
Процедура СформироватьПечатнуюФормуЦенников(ТабличныйДокумент, Ссылка)
// Логика формирования печатной формы
// ...
КонецПроцедуры