Особенности регистрации отчетов/обработок с использованием COM-соединения в конфигурациях БСП


Регистрация разрешения использования COM-соединения в безопасном режиме во внешних отчетах/обработках в конфигурациях БСП (>2.2)

Для решения некой задачи потребовался внешний отчет, который часть данных берет из внешней базы в локальной сети через COM-соединение.

Вроде как все нормально работало при открытии внешнего отчета как файла, но при использовании отчета по технологии внешних отчетов БСП (>2.2.x) Система (БП3.0) выдавала ошибку:

Немного погуглив, нашел, что при регистрации отчета-обработки требуется добавить параметр «Разрешения», в который добавить нечто, возвращаемое БСП функцией  РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса(…).

Для решения своей задачи готовой строки не нашел, поэтому пришлось искать ID класса в реестре

Соответственно, для 64 разрядного 1С сервера, вполне пойдет как готовая строка в коллекцию заготовок и собственно полезность статьи:

ПараметрыРегистрации.Разрешения.Добавить(                РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса(«V83.ComConnector», «{181E893D-73A4-4722-B61D-D604B3D67D47}»,»ИмяСервера»));

// Возвращает сведения о внешней обработке.
Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.4.1");
	
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
	ПараметрыРегистрации.Версия = "100";
	ПараметрыРегистрации.ОпределитьНастройкиФормы = Истина;
	ПараметрыРегистрации.Разрешения.Добавить(
	РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V83.ComConnector","{181E893D-73A4-4722-B61D-D604B3D67D47}","WIN-6366"));
	
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
	НоваяКоманда.Представление = НСтр("ru = 'Сверка ОСВ между базами'");
	НоваяКоманда.Идентификатор = "пп_Сверка_ОСВ_МеждуБазами";
	НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
	НоваяКоманда.ПоказыватьОповещение = Ложь;
	
	Возврат ПараметрыРегистрации;
	
КонецФункции

А вот это нечто, возвращаемое функцией РазрешениеНаСозданиеCOMКласса – должен быть вот такой объект XDTO

Текст функции модуля РаботаВБезопасномРежиме 

// Возвращает внутреннее описание разрешения на использование COM-класса.
//
// Параметры:
//  ProgID - Строка - ProgID класса COM, с которым он зарегистрирован в системе.
//    Например, "Excel.Application",
//  CLSID - Строка - CLSID класса COM, с которым он зарегистрирован в системе.
//  ИмяКомпьютера - Строка - имя компьютера, на котором надо создать указанный объект.
//    Если параметр опущен - объект будет создан на компьютере, на котором выполняется
//    текущий рабочий процесс,
//  Описание - Строка - описание причины, по которой требуется предоставление разрешения.
//
// Возвращаемое значение:
//  ОбъектXDTO - внутреннее описание запрашиваемого разрешения.
//  Предназначен только для передачи в качестве параметра в функции.
//  РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(),
//  РаботаВБезопасномРежиме.ЗапросНаОтменуРазрешенийИспользованияВнешнихРесурсов() и
//  РаботаВБезопасномРежиме.ЗапросНаОчисткуРазрешенийИспользованияВнешнихРесурсов().
//
Функция РазрешениеНаСозданиеCOMКласса(Знач ProgID, Знач CLSID, Знач ИмяКомпьютера = "", Знач Описание = "") Экспорт
	
	Пакет = РаботаВБезопасномРежимеСлужебный.Пакет();
	Результат = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(Пакет, "CreateComObject"));
	Результат.Description = Описание;
	
	Результат.ProgId = ProgID;
	Результат.CLSID = Строка(CLSID);
	Результат.ComputerName = ИмяКомпьютера;
	
	Возврат Результат;
	
КонецФункции

В результате при регистрации внешнего отчета появится закладка «Разрешения» с соответствующим содержимым

В следующей статье приведу пару примеров использования СКД-отчетов с такого плана COM-запросами (знаю, знаю – не хайтек ;), но может пригодится кому на скорую руку COM-сверку между базами делать)

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

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