Разрабатывал отчёт, которому нужно подключаться к разным информационным базам по COM (переход на WS не предлагать), и столкнулся со странным поведением платформы 1С: Предприятие 8: при запуске внешнего отчета из файла под пользователем, у которого стоит галочка "Защита от опасных действий" (убрать у всех - тоже просьба не предлагать - суть не в этом).
Под 8.3.15 (серверная ИБ) получаю такое окно
Под 8.3.17 (файловая ИБ) получаю такое окно
И какую же мне кнопку нажать, чтобы отчёт всё-таки запустился (подсказка - обе кнопки (и даже крестик) закрывают сеанс).
Или что надо настроить, как написать код, чтобы всё-таки отчёт заработал
Снимать защиту от опасных действий или переходить на WS не хочется! По сути это просто принципиальный вопрос - то ли это просто такая особая специфика работы 1С Предприятие 8 - как вопрос с двумя вариантами - и все кнопки "Отмена" - т.е. налицо обман возможности выбора - и по сути с COM объектами при установке флага "Защита от опасных действий" работать абсолютно нельзя - или всё-таки тут есть какой-то хитрый обходной путь?
Вот с этим и хотелось бы разобраться
Проблемная строчка кода
ТекCOMОбъект = Новый COMОбъект("V83.COMConnector");
(2)Настроил через механизм Расширения безопасного режима - получилось - теперь отчёт не требует безопасный режим - но требует от профилей безопасности (если они используются) наличия доступа к указанным внешним компонентам. Соотвественно, не надо снимать и галочку у пользователя "Защита от опасных действий"
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.1.1");
ПараметрыРегистрации.Наименование = НСтр("ru = 'Консолидированный отчет по сотрудникам'");
ПараметрыРегистрации.Информация = НСтр("ru = 'Собирает данные из разных информационных баз, подключаясь через COM'");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Версия = "1.1.2";
ПараметрыРегистрации.БезопасныйРежим = Истина;
ТаблицаКоманд = ПараметрыРегистрации.Команды;
ДобавитьКоманду (ТаблицаКоманд,
ПараметрыРегистрации.Наименование, // Представление команды в пользовательском интерфейсе
"КонсолидированныйОтчетПоСотрудникаCOM", // Уникальный идентификатор команды
);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V83.COMConnector", неопределено);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V82.COMConnector", неопределено);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V81.COMConnector", неопределено);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V8.COMConnector", неопределено);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Возврат ПараметрыРегистрации;
КонецФункции
Показать
Спасибо Виктору Владимировичу за правильную информацию о том, как надо это делать по уму!
(1) Похоже на проблемы с правами доступа, должна быть еще одна кнопка "Разрешить", после чего нужно повторно вызвать подключение и уже все должно пройти гладко. У пользователя есть право на внешние соединения?
(6)Проверяю под собой:
Администратор системы
Полные права
Как уже написал в (3) - проверял на чистой базе без БСП (но с пользователем - там одна единственная роль "ПолныеПрава" - всё тоже самое
Вот вариант в базе, где нет ни пользователей, ни ролей:
(10) Как вариант подключите его как внешний отчет
и установите параметр безопастности
РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);
Если это не сработает, тогда встройте ваш отчет непосредственно в конфигуратор.
(13)Спасибо, этот вариант "РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);" работает (и даже можно, скорее всего, его применить без БСП)!
Хотя, конечно, если быть принципиальным, это не ответ на основной вопрос - но для "хоть как-то работающего решения" сгодится! Но, отчёт, всё-таки будет запущен вне безопасного режима!
При подключении отчета из справочника доп. отчетов (открытие уже зарегистрированного в справочнике отчета) у пользователя первый раз задаётся указный ниже диалог - в котором, наконец-то, можно выбрать вариант использования отчета и запустить его
(18) "Проблема" безопасного режима в том, что он не допускает КомСоединений (безопасность), в БСП предусмотрен механизм исключения для обработок, ну либо встраивать в конфигуратор. По другому ни как без отключения у пользователя.
(19)Я сейчас пытаюсь разобраться с тем, что предложено в (2) - никогда, просто, ранее не сталкивался с этим (делал такие отчеты с отключённым безопасным режимом, а сейчас, узнав про Разрешения, хочу более подробно изучить этот вопрос (хотя профили безопасности у нас сейчас не используются)
Вот тут на ИТС читаю Расширения безопасного режима дополнительных отчётов и обработок
(4) надо в сведениях о внешней обработке прописать разрешения
а вот какое именно, надо искать в бсп вашей конфы
типа такого что-то должно получиться, но тоже зависит от конфигурации
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаПечатиQRКода", "Требуется для подлючения компоненты формирования QR-кодов в печатных формах из общего модуля");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
(2)Я обработку открываю через "Файл->Открыть..." - насколько я понимаю БСП тут ни причём! Но для точности открыл отчёт в пустой конфигурации (без БСП) - результат тот же!
Но, так как далее отчёт будет всё-таки интегрирован в "Доп. отчеты" - и будет уже подключаться через БСП и метод "ВнешниеОтчеты.Подключить())" - то я это вариант сейчас, конечно, попробую
(2)Настроил через механизм Расширения безопасного режима - получилось - теперь отчёт не требует безопасный режим - но требует от профилей безопасности (если они используются) наличия доступа к указанным внешним компонентам. Соотвественно, не надо снимать и галочку у пользователя "Защита от опасных действий"
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.1.1");
ПараметрыРегистрации.Наименование = НСтр("ru = 'Консолидированный отчет по сотрудникам'");
ПараметрыРегистрации.Информация = НСтр("ru = 'Собирает данные из разных информационных баз, подключаясь через COM'");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Версия = "1.1.2";
ПараметрыРегистрации.БезопасныйРежим = Истина;
ТаблицаКоманд = ПараметрыРегистрации.Команды;
ДобавитьКоманду (ТаблицаКоманд,
ПараметрыРегистрации.Наименование, // Представление команды в пользовательском интерфейсе
"КонсолидированныйОтчетПоСотрудникаCOM", // Уникальный идентификатор команды
);
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V83.COMConnector", неопределено);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V82.COMConnector", неопределено);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V81.COMConnector", неопределено);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("V8.COMConnector", неопределено);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Возврат ПараметрыРегистрации;
КонецФункции
Показать
Спасибо Виктору Владимировичу за правильную информацию о том, как надо это делать по уму!
(5)я как то(месяца 2 назад) много чего пробовал, из того что было написано в интернете. И привилигированный режим ставил. И безопасность внешней обработки настраивал, и БСП перерывал. Но, но все упиралось в эту ошибку.
Как итог, я создал нового пользователя. снял этот флажок. Настроил запуск обрабоки от имени этого пользователя и только его. (как программно, так и в настройках расписания запуска обработки) и все больше не парюсь
(9)Это мне известно - что работает - но я как раз задал вопрос о другом - вот в (7) я вообще проверил в базе без пользователей - и где "прикажете" в этом случае флажок снимать?
(16)Спасибо за интересную (хоть и почти бесполезную) информацию - но не прокатило :-( - хотя значение флага изменяется и запоминается!
Сначала написал в модуле параметров сеанса , потом написал вот так при создании формы обработки
ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
ТекПользователь.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь; //он тут уже "Ложь" - установлен в модуле параметров сеанса
ТекCOMОбъект = Новый COMОбъект("V83.COMConnector");
На последней строчке вылетает с указанной ошибкой!
Проверил и в базе с пользователем и в базе без пользователя!
Так что - вот ещё один пример возможности 1С - которая не работает!
(23)Сделал в привилегированном модуле в составе конфигурации и вызвал из обработки - один хрен - не работает даже так:
Предупреждение безопасности
Модуль "Консолидированный отчет по сотрудникам" загруженный из "E:\1C\V83\Управление холдингом\Отчеты\КонсолидированныйПоСотрудникам.erf" выполняет подключение исполнимого бинарного файла "V83.COMConnector".
Рекомендуется обращать внимание на источник, из которого был получен данный файл. Если с источником нет договоренности о разработке дополнительных модулей, или есть сомнения в содержимом файла, то его не рекомендуется открывать, поскольку это может нанести вред компьютеру и данным.
Разрешить подключать исполнимые бинарные файлы для данного модуля?
А варианта выбора разрешения - по-прежнему нет :-(
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьПривилегированныйРежим(Истина);
ТекCOMОбъект = Новый COMОбъект("V83.COMConnector"); //Тест возможности работы с COM
КонецПроцедуры
Не работает (проверил на локальной файловой пустой базе через "Файл->Открыть...")