Дополнительные отчеты и обработки БСП и их регистрация

27 июля 2015

Доступна BETA-версией инструмента "Конструктор внешних обработок и отчетов для БСП"

Дополнительные отчеты и обработки для БСП

Дополнительные отчеты и обработки — подсистема, входящая в состав библиотеки стандартных подсистем от фирмы "1С". Подсистема встроена в большинство новых типовых конфигураций: Бухгалтерия предприятия 3.0, Управление торговлей 11.1 и др. Предоставляя новые возможности для разработчиков с одной стороны, подсистема требует соблюдение некоторых стандартов с другой, что немного усложняет разработку дополнительных отчетов и обработок.

Далее в статье кратко опишем параметры регистрации, основные настройки, а также продемонстрируем инструмент создания внешней обработки для подсистемы "Дополнительные отчеты и обработки" БСП 2.x в пару кликов.

Краткое описание параметров регистрации

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

Функция СведенияОВнешнейОбработке() Экспорт
 
 РегистрационныеДанные = Новый Структура;
 
 // * Наименование - Строка - Необязательный. 
 // Представление для администратора 
 // (наименование элемента справочника).
 // Если не заполнено, то берется представление 
 // объекта метаданных внешнего объекта.
 РегистрационныеДанные.Вставить("Наименование", "ИмяШаблона");
 
 // * БезопасныйРежим - Булево - Необязательный. 
 // Признак подключения внешней обработки в безопасном режиме.
 // Значение по умолчанию Истина (обработка будет выполняться безопасно).
 // Подробнее - см. разделы справки "ВнешниеОтчетыМенеджер.Подключить" 
 // и "ВнешниеОбработкиМенеджер.Подключить".
 РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);
 
 // * Версия - Строка - Версия объекта.
 // Задается в формате: "<Старший номер>.<Младший номер>".
 РегистрационныеДанные.Вставить("Версия", "1.0");
 
 // * ВерсияБСП - Строка - Необязательный. Версия библиотеки, 
 // на которую рассчитывают механизмы внешнего объекта.
 // Подробнее - см. СтандартныеПодсистемыСервер.ВерсияБиблиотеки().
 РегистрационныеДанные.Вставить("ВерсияБСП", "");
 
 // * Вид - Строка - Вид внешнего объекта. 
 // Соответствует реквизиту "Вид" 
 // (ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок).
 // Для определения вида можно использовать функции "Вид*" 
 // общего модуля ДополнительныеОтчетыИОбработкиКлиентСервер,
 // или указать вид явно:
 //  ** "ПечатнаяФорма"
 //  ** "ЗаполнениеОбъекта"
 //  ** "СозданиеСвязанныхОбъектов"
 //  ** "Отчет"
 //  ** "ДополнительнаяОбработка"
 //  ** "ДополнительныйОтчет"
 РегистрационныеДанные.Вставить("Вид", "ДополнительнаяОбработка");
 
 // * Информация - Строка - Необязательный. 
 // Краткая информация по внешнему объекту.
 // В этом параметре для администратора 
 // рекомендуется указать описание возможностей внешнего объекта.
 // Если не заполнено, то берется 
 // комментарий объекта метаданных внешнего объекта. 
 РегистрационныеДанные.Вставить("Информация", 
    "Шаблон дополнительной обработки БСП");
 
 // * Команды - ТаблицаЗначений - Необязательный для отчетов. 
 // Таблица команд, поставляемых внешним объектом.
 // Типы колонок соответствуют типам табличной части 
 // Команды справочника ДополнительныеОтчетыИОбработки.
 тзКоманд = Новый ТаблицаЗначений;
 тзКоманд.Колонки.Добавить("Идентификатор");
 тзКоманд.Колонки.Добавить("Представление");
 тзКоманд.Колонки.Добавить("Модификатор");
 тзКоманд.Колонки.Добавить("ПоказыватьОповещение");
 тзКоманд.Колонки.Добавить("Использование");
 тзКоманд.Колонки.Добавить("Скрыть");
 
 // Основная команда обработки
 строкаКоманды = тзКоманд.Добавить();
 // ** Идентификатор - Строка - Имя команды. 
 // Для печатной формы - список макетов.
 строкаКоманды.Идентификатор = "ИмяОсновнойКоманды";
 // ** Представление - Строка - Представление команды 
 // для конечного пользователя.
 строкаКоманды.Представление = "Имя основной команды";
 // ** ПоказыватьОповещение - Булево 
 // Истина = при запуске команды будет
 // показано стандартное оповещение.
 // Не работает для команд "ОткрытиеФормы".
 строкаКоманды.ПоказыватьОповещение = Ложь;
 // ** Использование - Строка - Тип команды. Соответствует 
 // реквизиту "ВариантЗапуска" 
 // (ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок).
 //  *** "ВызовКлиентскогоМетода"
 //  *** "ВызовСерверногоМетода"
 //  *** "ЗаполнениеФормы"
 //  *** "ОткрытиеФормы"
 //  *** "СценарийВБезопасномРежиме"
 строкаКоманды.Использование = "ОткрытиеФормы";
 // ** Модификатор - Строка - Вспомогательный 
 // модификатор команды.
 // *** "ПечатьMXL" для печатных форм 
 // на основе макетов MXL.
 строкаКоманды.Модификатор = "";
 // ** Скрыть - Булево - Истина если команду
 // необходимо скрывать в форме элемента.
 строкаКоманды.Скрыть = "Ложь";
 // * Разрешения - Массив из ОбъектXDTO 
 // {http://www.1c.ru/1cFresh/ApplicationExtensions/Permissions/a.b.c.d}
 // PermissionBase -
 // Необязательный. Массив разрешений, предоставленных 
 // дополнительному отчету или обработке при работе в безопасном
 // режиме.
 //строкаКоманды.Разрешения ...
 
 // Добавление других команд
 // строкаКоманды = тзКоманд.Добавить();
 // строкаКоманды.Идентификатор = "ИмяКоманды";
 // строкаКоманды.Представление = "ПредставлениеКоманды";
 // строкаКоманды.ПоказыватьОповещение = Истина;
 // строкаКоманды.Использование = "ОткрытиеФормы";
 
 РегистрационныеДанные.Вставить("Команды", тзКоманд);
 
 ////////////// назначение (в каких объектах используется) /////
 //для печ.форм, заполнения, ввода свазанных объектов
 //МассивНазначений = Новый Массив;
 //МассивНазначений.Добавить("Документ.*"); // все документы назначаются
 //МассивНазначений.Добавить("Документ.АвансовыйОтчет");
 //МассивНазначений.Добавить("Документ.ЗаказПокупателя");
 //РегистрационныеДанные.Вставить("Назначение", МассивНазначений);
 
 Возврат РегистрационныеДанные;
 
КонецФункции
В зависимости от типа команды и вида дополнительной обработки необходимо добавлять соответствующие процедуры и функции в модуль объекта / формы. Например, для печатной формы в модуль объекта должна быть добавлена функция "Печать":
// Интерфейс для дополнительной печатной формы
//
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
 
 ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
                                    
 Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, 
  ДемоДокумент") Тогда
  УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
   КоллекцияПечатныхФорм,
   "ДемоДокумент",
   НСтр("ru = 'Демо документ'"),
   Документы._ДемоДемоДокумент.ПечатьДокумента(МассивОбъектов, 
   ОбъектыПечати, "ДемоДокумент"),
   ,
   "Документ._ДемоДемоДокумент.ПФ_MXL_СчетЗаказ"
  );
 КонецЕсли;
 
КонецПроцедуры

Конструктор

Вместе с +Pavel Plekhanov была создана библиотека на .NET Framework (C#), которая позволяет работать с файлами конфигураций, внешних отчетов и обработок: распакововать и запаковывать файлы + некоторые другие функции. Библиотека имеет весь функционал, что и ее CPP-аналог V8Unpack от brix8x. В будущем планируем выложить библиотеку на GitHub, может кому пригодится =)

Ну а сейчас Вы можете воспользоваться BETA-версией инструмента "Конструктор внешних обработок и отчетов для БСП", который использует небольшую часть функционала этой библиотеки, генерируя файл внешней обработки/отчета по переданным параметрам.

Все вопросы / пожелания / комментарии / негодования / описание ошибок прошу отправлять по форме обратной связи в шапке сайта.


comments powered by Disqus