Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 июл 2024, 19:50

Не получается открыть обработку через механизм внешних обработок.

Автор GamletSPB, 04 апр 2018, 09:19

0 Пользователей и 1 гость просматривают эту тему.

GamletSPB

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

БП 3.0 (3.0.59.54), платформа 8.3.10.2580. Есть необходимость запустить обработку "УниверсальныйОбменДаннымиXML". Она входит в конфигурацию и ее можно открыть через "все функции" но только под ролью администратора. Но есть необходимость делать это под обычным пользователем. Снимать с поддержки и править права очень не хочется. Сохранил её как внешнюю, отключил проверку прав доступа в коде, открываю под обычным пользователем через меню "Файл" - все нормально открывается. Само собой, это не есть удобно и хочется подключить ее через "Дополнительные отчеты и обработки". Ок, добавляю описание через процедуру ПриСозданииНаСервере, подключаю, вывожу в интерфейс пользователя и.. получаю болт. Окно обработки не открывается. Вернее открывается на долю секунды и тут же закрывается. Причем происходит это независимо от прав пользователя, в том числе и под администратором. Может кто подскажет, куда копать?


Код проверки модуля формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Проверка прав доступа должна располагаться самой первой.
Если Не ПравоДоступа("Администрирование", Метаданные) Тогда
//ВызватьИсключение НСтр("ru = 'Использование обработки в интерактивном режиме доступно только администратору.'");
КонецЕсли;




Код функции СведенияОВнешнейОбработке

#Область ОписаниеОбработки
Функция СведенияОВнешнейОбработке() Экспорт
    // Объявим переменную, в которой мы сохраним и вернем "наружу" необходимые данные
    ПараметрыРегистрации = Новый Структура;

    // Объявим еще одну переменную, которая нам потребуется ниже
    МассивНазначений = Новый Массив;
   
    // Первый параметр, который мы должны указать - это какой вид обработки системе должна зарегистрировать.
    // Допустимые типы: ДополнительнаяОбработка, ДополнительныйОтчет, ЗаполнениеОбъекта, Отчет, ПечатнаяФорма, СозданиеСвязанныхОбъектов
    ПараметрыРегистрации.Вставить("Вид", "ДополнительнаяОбработка");

    // Теперь нам необходимо передать в виде массива имен, к чему будет подключена наша ВПФ
    // Имейте ввиду, что можно задать имя в таком виде: Документ.* - в этом случае обработка будет подключена ко всем документам в системе,
    // которые поддерживают механизм ВПФ
    МассивНазначений.Добавить("Подсистемы.Администрирование");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
   
    // Теперь зададим имя, под которым ВПФ будет зарегистрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("Наименование", "Универсальный обмен данными XML");
   
    // Зададим право обработке на использование безопасного режима. Более подробно можно узнать в справке к платформе (метод УстановитьБезопасныйРежим)
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);

    // Следующие два параметра играют больше информационную роль, т.е. это то, что будет видеть пользователь в информации к обработке
    ПараметрыРегистрации.Вставить("Версия", "1.0");   
    ПараметрыРегистрации.Вставить("Информация", "Обработка для обмена данными между произвольными базами 1С");
   
    // Создадим таблицу команд (подробнее смотрим ниже)
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
   
    // Добавим команду в таблицу
    ДобавитьКоманду(ТаблицаКоманд, "Универсальный обмен данными XML", "УправляемаяФорма", "ОткрытиеФормы");
   
    // Сохраним таблицу команд в параметры регистрации обработки
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
   
    // Теперь вернем системе наши параметры
    Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()

   // Создадим пустую таблицу команд и колонки в ней
   Команды = Новый ТаблицаЗначений;

   // Как будет выглядеть описание печатной формы для пользователя
   Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));

   // Имя нашего макета, что бы могли отличить вызванную команду в обработке печати
   Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));

   // Тут задается, как должна вызваться команда обработки
   // Возможные варианты:
   // - ОткрытиеФормы - в этом случае в колонке идентификатор должно быть указано имя формы, которое должна будет открыть система
   // - ВызовКлиентскогоМетода - вызвать клиентскую экспортную процедуру из модуля формы обработки
   // - ВызовСерверногоМетода - вызвать серверную экспортную процедуру из модуля объекта обработки
   Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));

   // Следующий параметр указывает, необходимо ли показывать оповещение при начале и завершению работы обработки. Не имеет смысла при открытии формы
   Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));

   // Для печатной формы должен содержать строку ПечатьMXL
   Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
   Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    // Добавляем команду в таблицу команд по переданному описанию.
  // Параметры и их значения можно посмотреть в функции ПолучитьТаблицуКоманд
  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры
#КонецОбласти








GamletSPB

Уф, разобрался. Всего-то Надо был в свойствах формы выставить РежимОткрытияОкна Независимый. 1С такая 1С.. <_<

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск