Программно открыть дополнительную внешнюю обработку в небезопасном режиме

Пользователи открывали обработку Клиент-банк через Файл-Открыть, но в таком режиме она не давала делать некоторые операции, т.к. все внешние обработки открываются в безопасном режиме у пользователей, не имеющих полных прав.

Выход вроде бы очевиден — добавить в дополнительные внешние обработки.

Но у обработки всего две команды — Выгрузить и Загрузить. Обе вызывают ошибку при запуске. А команды для открытия формы обработки нет:

Можно, конечно, дописать такую команду, но это придется делать каждый раз при обновлении обработки, а она меняется нередко — банк любит модернизации.

Создал пустую внешнюю обработку. Для открытия формы буду использовать тип команды «Открытие формы». Сначала я хотел использовать «вызов клиентского метода», но потом обнаружил, что такую команду нельзя добавить в интерфейс пользователя.

Функция СведенияОВнешнейОбработке() Экспорт
   
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(СтандартныеПодсистемыСервер.ВерсияБиблиотеки());
   
Заголовок = НСтр(«ru = ‘Открытие клиент-банка'»);
   
ПараметрыРегистрации.Информация = Заголовок;
   
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
   
ПараметрыРегистрации.Версия = «2021-04-23»;
   
ПараметрыРегистрации.БезопасныйРежим = Истина;

   
Команда = ПараметрыРегистрации.Команды.Добавить();
   
Команда.Представление = Заголовок;
   
Команда.Идентификатор = СтрЗаменить(Заголовок, » «, «»);
   
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
   
Команда.ПоказыватьОповещение = Ложь;

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

Вопрос, как открывать дополнительную внешнюю обработку, адресовал в Google, оказывается есть уже готовая функция в БСП. Правда, я не был уверен, что эта функция есть в УНФ, но нашлась поиском.

Сам код по открытию нужно прописывать форме обработки, хотя она и не используется:

&НаСервере
Функция НайтиДополнительнуюВнешнююОбработку()  Экспорт
   
З = Новый Запрос(
   
«ВЫБРАТЬ
    |   ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка
    |ИЗ
    |   Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
    |ГДЕ
    |   НЕ ДополнительныеОтчетыИОбработки.ПометкаУдаления
    |   И ДополнительныеОтчетыИОбработки.ИмяОбъекта = &ИмяОбъекта
    |   И ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)»
);
   
З.УстановитьПараметр(«ИмяОбъекта», «КлиентБанк»);
   
Выборка = З.Выполнить().Выбрать();
    Если
выборка.Следующий() Тогда
        Возврат
Выборка.Ссылка;
    КонецЕсли;
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   
Отказ = истина;

   
ВыполняемаяКоманда = Новый Структура(«ЭтоОтчет, Ссылка, Идентификатор», ложь);
   
ВыполняемаяКоманда.Ссылка = НайтиДополнительнуюВнешнююОбработку();

    Если
ВыполняемаяКоманда.Ссылка = Неопределено Тогда
       
ПоказатьПредупреждение(, «Не найдена дополнительная внешняя обработка с именем объекта КлиентБанк!»);
        Возврат;
    КонецЕсли;

   
ОбъектыНазначения = Неопределено;
   
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда, ЭтаФорма, ОбъектыНазначения);
КонецПроцедуры

Как видно из кода, обработку ищу по признаку, что она опубликована (используется) и по названию клиентского метода:

Все работает, обработка вызывается. Осталось только разместить этот статер в командах пользователя.

Но тут возникла проблема с безопасным режимом, обработка выдает ошибку:

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

Возможно, раньше база была на облаке, а потом переехала локально.

Попробовал дать разрешение на использование временных файлов (это меня спасало во Fresh):

Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Ложь, Истина, «Тест»);
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);

Оказалось, что нужно указать еще и версию БСП, чтобы обработка корректно работала.

ПараметрыРегистрации.ВерсияБСП = «1.2.1.4»; //Чтобы работал безопасный режим

В конечном итоге удалось запустить клиент-банк в безопасном режиме, но это потребовало слишком много усилий.

Нашел статью про профили безопасности, но так и не понял, зачем они используются. В общем, против лома нет приема и даже при включенных профилях безопасности можно добиться работы обработки не в безопасном режиме!

Время факт: 1.5 час. Среда: УНФ 1.6.24.107

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 3

  1. Zuko:

    Что за Банк?

  2. Павел:

    Вот смотрю я на это и у меня кровь из глаз идет — как на селезневской все по колхозному делают.

Добавить комментарий для Павел Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *