Запуск обработки лучше включить в те интерфейсы, где необходим запуск, например интерфейс "Полный" на одной из панелей в виде иконки.
Данная обработка тестировалась на конфигурации УТ 10.3 релиз 10.3.70.3.
При первоначальном запуске список будет пустой. Необходимо вначале зарегистрировать. Регистрация проходит при запуске отчета или обработки в списке справочника внешние обработки. Для тех пользователей, у которых закрыт доступ к справочнику внешних обработок, и для которых нужно указать разрешенные обработки или отчеты, регистрацию можно сделать за них. Для это в списке справочника добавляем команду Регистрация пользователя, в которой указываем для какого пользователя регистрируем текущий отчет или обработку в списке справочника. И тогда в списке пользователя будут отображены зарегистрированные отчеты или обработки. Для тех, у кого есть доступ к списку справочника внешние обработки, все запускаемые отчеты или обработки будут отображаться в списке пользователя, при этом указывая, когда в последний раз была запущена та или иная обработка. Теперь нет необходимости искать постоянно используемый отчет или обработку в списке справочника, достаточно запустить список моих обработок и выбрать в списке и запустить, нажав Enter.
Также можно за закладке Мой рабочий стол в списке указать нужные объекты конфигурации (справочник или документ),которые сложно найти в своем интерфейсе.Они будут всегда под рукой на "своем рабочем столе".
Ниже описываются, какие метаданные необходимы для работы с данной обработкой.
Для использования необходимо создать регистр сведений РегистрацияВнешнихОбработокОтчетов
с тремя измерениями:
Пользователь - СправочникСсылка.Пользователи
Дата - Дата
Объект - СправочникСсылка.ВнешниеОбработки
И Ресурс "Количество" Число с разрядностью два
В обработке используются функции к модулю "ДопПроверки" .Текст процедуры "ОткрытьВнешнийОтчетОбработку" размещен в модуле обработки, его необходимо раскомментировать и перенести в общий модуль
Процедура ОткрытьВнешнийОтчетОбработку(СсылкаНаВнешнююОбработку,Параметры = Неопределено,Команда = Неопределено,Результат =Неопределено,УдалитьФайлОбработки = ЛОЖЬ) Экспорт
Если ТипЗнч(СсылкаНаВнешнююОбработку) = Тип("Строка") Тогда
СсылкаНаВнешнююОбработку = Справочники.ВнешниеОбработки.НайтиПоНаименованию(СсылкаНаВнешнююОбработку);
Если СсылкаНаВнешнююОбработку = Справочники.ВнешниеОбработки.ПустаяСсылка() ИЛИ СсылкаНаВнешнююОбработку = Неопределено Тогда
Возврат;
КонецЕсли;
ИначеЕсли ТипЗнч(СсылкаНаВнешнююОбработку) <> Тип("СправочникСсылка.ВнешниеОбработки") Тогда
Возврат;
КонецЕсли;
Попытка
Если ПравоДоступа("Просмотр",СсылкаНаВнешнююОбработку.Метаданные()) = Ложь Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(СсылкаНаВнешнююОбработку) = Тип("СправочникСсылка.ВнешниеОбработки") Тогда
Если СсылкаНаВнешнююОбработку.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка Тогда
ИмяФайла = ПолучитьИмяВременногоФайла("epf");
ИначеЕсли СсылкаНаВнешнююОбработку.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Отчет Тогда
ИмяФайла = ПолучитьИмяВременногоФайла("erf");
Иначе
Возврат;
КонецЕсли;
ТекущийФайл = Новый Файл(ИмяФайла);
Если ТекущийФайл.Существует() Тогда
УдалитьФайлы(ТекущийФайл.Путь);
КонецЕсли;
ДвоичныеДанные = СсылкаНаВнешнююОбработку.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Если СсылкаНаВнешнююОбработку.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка Тогда
ОбработкаОтчет = ВнешниеОбработки.Создать(ИмяФайла);
Иначе
ОбработкаОтчет = ВнешниеОтчеты.Создать(ИмяФайла);
КонецЕсли;
ФормаОбработки = ОбработкаОтчет.ПолучитьФорму();
Если Параметры <> Неопределено И ТипЗнч(Параметры) = Тип("Структура") Тогда
Для Каждого Стр ИЗ Параметры Цикл
Попытка
ОбработкаОтчет[Стр.Ключ] = Стр.Значение;
Исключение
Попытка
ФормаОбработки[Стр.Ключ] = Стр.Значение;
Исключение
КонецПопытки;
КонецПопытки;
КонецЦикла;
КонецЕсли;
Если Команда <> Неопределено И Команда Тогда
Попытка
ФормаОбработки.Автозапуск = Истина;
Исключение
КонецПопытки;
КонецЕсли;
Если Результат = Неопределено Тогда
ФормаОбработки.Открыть();
Иначе
Результат = ФормаОбработки.ОткрытьМодально();
КонецЕсли;
Если УдалитьФайлОбработки Тогда
УдалитьФайлы(ИмяФайла);
КонецЕсли;
КонецЕсли;
Исключение
КонецПопытки;
КонецПроцедуры
В модуле формы обработки используется обращения к общему модулю "УниверсальныеМеханизмы".
В форме списка справочника ВнешниеОбработки нужно добавить модуль регистрации
Если ВыбраннаяСтрока.ПометкаУдаления Тогда
СтандартнаяОбработка = Ложь;
Предупреждение(?(ЭтоОбработка,"Данная обработка","Данный отчет")+" больше не используется!",10);
Возврат;
КонецЕсли;
ГруппаПользователей = Элемент.ТекущаяСтрока.ГруппаПользователей;
Если НЕ ЗначениеЗаполнено(ГруппаПользователей) Тогда
ГруппаПользователей = Элемент.ТекущаяСтрока.Родитель.ГруппаПользователей;
КонецЕсли;
Если ЗначениеЗаполнено(ГруппаПользователей) И НЕ ДопПроверки.ЕстьВключениеВГруппуПользователя(ГруппаПользователей) ТОГДА
СтандартнаяОбработка = Ложь;
Предупреждение("У вас нет прав на запуск данной обработки",10);
Возврат;
КонецЕсли;
НаборЗаписей = РегистрыСведений.РегистрацияВнешнихОбработокОтчетов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Дата.Установить(ТекущаяДата());
НаборЗаписей.Отбор.Пользователь.Установить(глЗначениеПеременной("глТекущийПользователь"));
НаборЗаписей.Отбор.Объект.Установить(ВыбраннаяСтрока);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Выбран() И НаборЗаписей.Количество()>0 Тогда
НаборЗаписей[0].Количество = НаборЗаписей[0].Количество + 1;
Иначе
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Дата = ТекущаяДата();
НоваяЗапись.Пользователь = глЗначениеПеременной("глТекущийПользователь");
НоваяЗапись.Объект = ВыбраннаяСтрока;
НоваяЗапись.Количество = 1;
КонецЕсли;
НаборЗаписей.Записать();
Для регистрации выбранной строки в списке внешних отчетов или обработок необходимо внести модуль команды
Процедура ДействияФормыДействиеРегистрация(Кнопка)
Если ДопПроверки.ЕстьАдминаБазы() Тогда
ТекущаяСтрока = ЭлементыФормы.СправочникСписок.ТекущиеДанные;
Если ТекущаяСтрока<>Неопределено И ТекущаяСтрока.ЭтоГруппа = ЛОЖЬ Тогда
ФормаСписка = Справочники.Пользователи.ПолучитьФормуВыбора("ФормаВыбора");
ВыбранныйПользователь = ФормаСписка.ОткрытьМодально();
Если ВыбранныйПользователь<>Неопределено Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РегистрацияОбработокОтчетов.Дата
|ИЗ
| РегистрСведений.РегистрацияОбработокОтчетов КАК РегистрацияОбработокОтчетов
|ГДЕ
| РегистрацияОбработокОтчетов.Пользователь = &Пользователь
| И РегистрацияОбработокОтчетов.Объект = &Объект";
Запрос.УстановитьПараметр("Объект", ТекущаяСтрока.Ссылка);
Запрос.УстановитьПараметр("Пользователь", ВыбранныйПользователь);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
НоваяЗапись = РегистрыСведений.РегистрацияВнешнихОбработокОтчетов.СоздатьМенеджерЗаписи();
НоваяЗапись.Дата = ТекущаяДата();
НоваяЗапись.Пользователь = ВыбранныйПользователь;
НоваяЗапись.Объект = ТекущаяСтрока.Ссылка;
НоваяЗапись.Количество = 1;
НоваяЗапись.Записать();
Если ТекущаяСтрока.ВидОбработки = Перечисления.ВидыДополнительныхВнешнихОбработок.Обработка Тогда
Сообщить("Обработка зарегистрировано для "+Строка(ВыбранныйПользователь))
Иначе
Сообщить("Отчет зарегистрирован для "+Строка(ВыбранныйПользователь))
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 10.3, релизы 10.3.70.3