Для решения некой задачи потребовался внешний отчет, который часть данных берет из внешней базы в локальной сети через 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-сверку между базами делать)