Включённая "Защита от опасных действий" и работа COM

1. Darklight 34 26.08.20 13:15 Сейчас в теме
Разрабатывал отчёт, которому нужно подключаться к разным информационным базам по COM (переход на WS не предлагать), и столкнулся со странным поведением платформы 1С: Предприятие 8: при запуске внешнего отчета из файла под пользователем, у которого стоит галочка "Защита от опасных действий" (убрать у всех - тоже просьба не предлагать - суть не в этом).

Под 8.3.15 (серверная ИБ) получаю такое окно


Под 8.3.17 (файловая ИБ) получаю такое окно


И какую же мне кнопку нажать, чтобы отчёт всё-таки запустился (подсказка - обе кнопки (и даже крестик) закрывают сеанс).
Или что надо настроить, как написать код, чтобы всё-таки отчёт заработал
Снимать защиту от опасных действий или переходить на WS не хочется! По сути это просто принципиальный вопрос - то ли это просто такая особая специфика работы 1С Предприятие 8 - как вопрос с двумя вариантами - и все кнопки "Отмена" - т.е. налицо обман возможности выбора - и по сути с COM объектами при установке флага "Защита от опасных действий" работать абсолютно нельзя - или всё-таки тут есть какой-то хитрый обходной путь?

Вот с этим и хотелось бы разобраться

Проблемная строчка кода
ТекCOMОбъект = Новый COMОбъект("V83.COMConnector");
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
27. Darklight 34 27.08.20 14:02 Сейчас в теме
(2)Настроил через механизм Расширения безопасного режима - получилось - теперь отчёт не требует безопасный режим - но требует от профилей безопасности (если они используются) наличия доступа к указанным внешним компонентам. Соотвественно, не надо снимать и галочку у пользователя "Защита от опасных действий"

Функция СведенияОВнешнейОбработке() Экспорт 
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.1.1");
    ПараметрыРегистрации.Наименование = НСтр("ru = 'Консолидированный отчет по сотрудникам'");
    ПараметрыРегистрации.Информация = НСтр("ru = 'Собирает данные из разных информационных баз, подключаясь через COM'");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    ПараметрыРегистрации.Версия = "1.1.2";
    ПараметрыРегистрации.БезопасныйРежим = Истина;
    
    
    ТаблицаКоманд = ПараметрыРегистрации.Команды;
    
    ДобавитьКоманду    (ТаблицаКоманд,
    ПараметрыРегистрации.Наименование,             // Представление команды в пользовательском интерфейсе
    "КонсолидированныйОтчетПоСотрудникаCOM",      // Уникальный идентификатор команды
    );
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V83.COMConnector", неопределено);
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
    
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V82.COMConnector", неопределено);
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
    
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V81.COMConnector", неопределено);
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
    
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V8.COMConnector", неопределено);
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);

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

Показать


Спасибо Виктору Владимировичу за правильную информацию о том, как надо это делать по уму!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. oleg-x 22 26.08.20 14:06 Сейчас в теме
(1) Похоже на проблемы с правами доступа, должна быть еще одна кнопка "Разрешить", после чего нужно повторно вызвать подключение и уже все должно пройти гладко. У пользователя есть право на внешние соединения?
7. Darklight 34 26.08.20 14:08 Сейчас в теме
(6)Проверяю под собой:
Администратор системы
Полные права

Как уже написал в (3) - проверял на чистой базе без БСП (но с пользователем - там одна единственная роль "ПолныеПрава" - всё тоже самое
Вот вариант в базе, где нет ни пользователей, ни ролей:
Прикрепленные файлы:
8. oleg-x 22 26.08.20 14:09 Сейчас в теме
(7) Открываете отчет через файл открыть?
10. Darklight 34 26.08.20 14:12 Сейчас в теме
(8)Да - Как я написал в теме вопроса и уточнил в (3)
13. oleg-x 22 26.08.20 14:25 Сейчас в теме
(10) Как вариант подключите его как внешний отчет
и установите параметр безопастности
РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);
Если это не сработает, тогда встройте ваш отчет непосредственно в конфигуратор.
Darklight; +1 Ответить
15. Darklight 34 26.08.20 14:27 Сейчас в теме
18. Darklight 34 26.08.20 15:23 Сейчас в теме
(13)Спасибо, этот вариант "РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);" работает (и даже можно, скорее всего, его применить без БСП)!
Хотя, конечно, если быть принципиальным, это не ответ на основной вопрос - но для "хоть как-то работающего решения" сгодится! Но, отчёт, всё-таки будет запущен вне безопасного режима!
При подключении отчета из справочника доп. отчетов (открытие уже зарегистрированного в справочнике отчета) у пользователя первый раз задаётся указный ниже диалог - в котором, наконец-то, можно выбрать вариант использования отчета и запустить его
Прикрепленные файлы:
19. oleg-x 22 26.08.20 15:33 Сейчас в теме
(18) "Проблема" безопасного режима в том, что он не допускает КомСоединений (безопасность), в БСП предусмотрен механизм исключения для обработок, ну либо встраивать в конфигуратор. По другому ни как без отключения у пользователя.
20. Darklight 34 26.08.20 15:39 Сейчас в теме
(19)Я сейчас пытаюсь разобраться с тем, что предложено в (2) - никогда, просто, ранее не сталкивался с этим (делал такие отчеты с отключённым безопасным режимом, а сейчас, узнав про Разрешения, хочу более подробно изучить этот вопрос (хотя профили безопасности у нас сейчас не используются)
Вот тут на ИТС читаю Расширения безопасного режима дополнительных отчётов и обработок
2. VictorRGB2 14 26.08.20 13:26 Сейчас в теме
(4) надо в сведениях о внешней обработке прописать разрешения
а вот какое именно, надо искать в бсп вашей конфы

типа такого что-то должно получиться, но тоже зависит от конфигурации
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаПечатиQRКода", "Требуется для подлючения компоненты формирования QR-кодов в печатных формах из общего модуля");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
3. Darklight 34 26.08.20 14:00 Сейчас в теме
(2)Я обработку открываю через "Файл->Открыть..." - насколько я понимаю БСП тут ни причём! Но для точности открыл отчёт в пустой конфигурации (без БСП) - результат тот же!

Но, так как далее отчёт будет всё-таки интегрирован в "Доп. отчеты" - и будет уже подключаться через БСП и метод "ВнешниеОтчеты.Подключить())" - то я это вариант сейчас, конечно, попробую
27. Darklight 34 27.08.20 14:02 Сейчас в теме
(2)Настроил через механизм Расширения безопасного режима - получилось - теперь отчёт не требует безопасный режим - но требует от профилей безопасности (если они используются) наличия доступа к указанным внешним компонентам. Соотвественно, не надо снимать и галочку у пользователя "Защита от опасных действий"

Функция СведенияОВнешнейОбработке() Экспорт 
    
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.1.1");
    ПараметрыРегистрации.Наименование = НСтр("ru = 'Консолидированный отчет по сотрудникам'");
    ПараметрыРегистрации.Информация = НСтр("ru = 'Собирает данные из разных информационных баз, подключаясь через COM'");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
    ПараметрыРегистрации.Версия = "1.1.2";
    ПараметрыРегистрации.БезопасныйРежим = Истина;
    
    
    ТаблицаКоманд = ПараметрыРегистрации.Команды;
    
    ДобавитьКоманду    (ТаблицаКоманд,
    ПараметрыРегистрации.Наименование,             // Представление команды в пользовательском интерфейсе
    "КонсолидированныйОтчетПоСотрудникаCOM",      // Уникальный идентификатор команды
    );
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V83.COMConnector", неопределено);
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
    
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V82.COMConnector", неопределено);
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
    
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V81.COMConnector", неопределено);
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
    
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V8.COMConnector", неопределено);
    ПараметрыРегистрации.Разрешения.Добавить(Разрешение);

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

Показать


Спасибо Виктору Владимировичу за правильную информацию о том, как надо это делать по уму!
4. mcgoblin 3 26.08.20 14:01 Сейчас в теме
В конфигураторе отключить для пользователя "Защита от опасных действий"
5. Darklight 34 26.08.20 14:02 Сейчас в теме
(4)Написал же в теме вопроса - НЕ ПРЕДЛАГАТЬ этот вариант! Вопрос о другом!
9. mcgoblin 3 26.08.20 14:11 Сейчас в теме
(5)я как то(месяца 2 назад) много чего пробовал, из того что было написано в интернете. И привилигированный режим ставил. И безопасность внешней обработки настраивал, и БСП перерывал. Но, но все упиралось в эту ошибку.
Как итог, я создал нового пользователя. снял этот флажок. Настроил запуск обрабоки от имени этого пользователя и только его. (как программно, так и в настройках расписания запуска обработки) и все больше не парюсь
11. Darklight 34 26.08.20 14:14 Сейчас в теме
(9)Это мне известно - что работает - но я как раз задал вопрос о другом - вот в (7) я вообще проверил в базе без пользователей - и где "прикажете" в этом случае флажок снимать?
12. mcgoblin 3 26.08.20 14:24 Сейчас в теме
(11) Вы там писали
(но с пользователем - там одна единственная роль "ПолныеПрава" - всё тоже самое


Но как бы есть пользователь по умолчанию, даже если не создавали, его свойства установлены по дефолту, можно попробвоать
что то такое

ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
ТекПользователь.ЗащитаОтОпасныхДействий = ЛОжь;
ТекПользователь.Записать();

Но я не тестил


ps может надо еще получить объект или что то подобное
14. Darklight 34 26.08.20 14:27 Сейчас в теме
(12)Это свойство не доступно для записи
16. mcgoblin 3 26.08.20 14:29 Сейчас в теме
(14) У него есть расширеные свйства, наверное из за этого

ТекПользователь.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = ЛОжь;
17. Darklight 34 26.08.20 14:55 Сейчас в теме
(16)Спасибо за интересную (хоть и почти бесполезную) информацию - но не прокатило :-( - хотя значение флага изменяется и запоминается!

Сначала написал в модуле параметров сеанса , потом написал вот так при создании формы обработки

ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
ТекПользователь.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь; //он тут уже "Ложь" - установлен в модуле параметров сеанса
ТекCOMОбъект = Новый COMОбъект("V83.COMConnector");



На последней строчке вылетает с указанной ошибкой!
Проверил и в базе с пользователем и в базе без пользователя!

Так что - вот ещё один пример возможности 1С - которая не работает!
21. AnryMc 849 26.08.20 15:59 Сейчас в теме
А пробовали:
УстановитьПривилегированныйРежим(Истина);
?

З.Ы. если поможет - права. Если нет - платформа
22. oleg-x 22 26.08.20 16:04 Сейчас в теме
(21) Это строка в обработке не будет работать, если включен режим безопасности.
23. AnryMc 849 26.08.20 16:09 Сейчас в теме
(22)
Это строка в обработке не будет работать, если включен режим безопасности.


Даже если вынести "проблемную" часть кода в общий модуль "привелигированный"?
24. oleg-x 22 26.08.20 16:11 Сейчас в теме
(23) Ну это уже не будет внешняя обработка, тогда проще добавить обработку в конфигурацию и там не нужен будет привелигированный режим.
26. Darklight 34 26.08.20 16:16 Сейчас в теме
(23)Сделал в привилегированном модуле в составе конфигурации и вызвал из обработки - один хрен - не работает даже так:

Предупреждение безопасности

Модуль "Консолидированный отчет по сотрудникам" загруженный из "E:\1C\V83\Управление холдингом\Отчеты\КонсолидированныйПоСотрудникам.erf" выполняет подключение исполнимого бинарного файла "V83.COMConnector".

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

Разрешить подключать исполнимые бинарные файлы для данного модуля?


А варианта выбора разрешения - по-прежнему нет :-(
25. Darklight 34 26.08.20 16:11 Сейчас в теме
(21)
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    УстановитьПривилегированныйРежим(Истина);
    ТекCOMОбъект = Новый COMОбъект("V83.COMConnector"); //Тест возможности работы с COM
КонецПроцедуры


Не работает (проверил на локальной файловой пустой базе через "Файл->Открыть...")
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот