Предлагаю вашему вниманию обработку Дополнительные возможности. Она может быть полезна, если у вас много однотипных баз, в которых используется много ваших внешних обработок, которые к тому же часто меняются. В данной обработке вы указываете каталог, в котором лежат все ваши *.epf и *.erf файлы, и обработка строит деревья с иерархией подкаталогов как в файловой системе:
При двойном щелчке по любой из обработок она программно откроется в вашей базе (обработка Дополнительные возможности при этом закроется). Это скромная альтернатива подсистеме "Дополнительные отчеты и обработки" в БСП. При изменении/доработке какой-либо из ваших внешних обработок вам не нужно будет распространять ее по всем вашим базам, повторно регистрировать в справочнике "Дополнительные обработки" или совершать какие-либо другие действия.
Внешние отчеты вынесены на отдельную закладку:
Для того, чтобы у всех пользователей обработка сразу "смотрела" на один и тот же каталог, зайдите в функцию МестоРасположенияПоУмолчанию() в модуле объекта и укажите там расположение по умолчанию. Вот как выглядит сам каталог, который обработка Дополнительные возможности сканирует для построения деревьев на скриншотах выше:
Для конфигураций на обычном приложении предусмотрена такая же форма, как и для управляемого приложения. Обработку можно открывать интерактивно (через "Файл -> Открыть"), можно подключить как внешнюю обработку.
Но самый большой спектр возможностей вы получите, если включите ее в свою конфигурацию. Это даст вам возможность буквально одной строчкой программно вызывать методы внешних обработок, располагающихся в каталоге по умолчанию. Для этого вам нужно добавить обработку Дополнительные возможности в дерево метаданных, а также скопировать в модуль менеджера (по умолчанию он будет пустой) следующий код. Обратите внимание, что вам также потребуется создать небольшую процедуру ЗапускФоновогоМетода в своем общем модуле (это связано с тем, что в фоне можно выполнять только процедуры общих модулей).
Функция ПодключитьДополнительнуюОбработку(Знач ИмяОбработки, БезопасныйРежим = Ложь) Экспорт
ДополнительныеВозможности = Обработки.ДополнительныеВозможности.Создать();
Возврат ДополнительныеВозможности.ПодключитьДополнительнуюОбработку(ИмяОбработки, БезопасныйРежим);
КонецФункции
Функция ВыполнитьФункцию(ИмяОбработки, ИмяФункции, МассивПараметров = Неопределено) Экспорт
ДополнительныеВозможности = Обработки.ДополнительныеВозможности.Создать();
Возврат ДополнительныеВозможности.ВыполнитьФункцию(ИмяОбработки, ИмяФункции, МассивПараметров)
КонецФункции
Процедура ВыполнитьПроцедуру(ИмяОбработки, ИмяПроцедуры, МассивПараметров = Неопределено) Экспорт
ДополнительныеВозможности = Обработки.ДополнительныеВозможности.Создать();
ДополнительныеВозможности.ВыполнитьПроцедуру(ИмяОбработки, ИмяПроцедуры, МассивПараметров);
КонецПроцедуры
Функция ЗапуститьПроцедуруВФоне(ИмяОбработки, ИмяПроцедуры, МассивПараметров = Неопределено, Ключ = Неопределено) Экспорт
НовыйМассив = Новый Массив;
НовыйМассив.Добавить(ИмяОбработки);
НовыйМассив.Добавить(ИмяПроцедуры);
НовыйМассив.Добавить(МассивПараметров);
Если Ключ = Неопределено Тогда
Ключ = Строка(Новый УникальныйИдентификатор())
КонецЕсли;
АдресФоновогоМетода = АдресФоновогоМетода();
Описание = "Фоновое выполнение процедуры """ + ИмяПроцедуры + """ внешней обработки """ + ИмяОбработки + """";
Попытка
ПараметрыОтбора = Новый Структура();
ПараметрыОтбора.Вставить("Ключ", Ключ);
ПараметрыОтбора.Вставить("ИмяМетода", АдресФоновогоМетода);
ПараметрыОтбора.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
НайденныеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ПараметрыОтбора);
Если НайденныеЗадания.Количество() > 0 Тогда
Сообщить("Уже существуют активные фоновые задания с такими параметрами", СтатусСообщения.Важное);
Возврат Ложь
КонецЕсли;
ФоновоеЗадание = ФоновыеЗадания.Выполнить(АдресФоновогоМетода, НовыйМассив, Ключ, Описание)
Исключение
Сообщить(ОписаниеОшибки());
Возврат Ложь
КонецПопытки;
Возврат Истина
КонецФункции
Функция АдресФоновогоМетода()
// необходимо указать адрес экспортной процедуры в общем
// неглобальном модуле, имеющей следующее тело:
//
// Процедура ЗапускФоновогоМетода(ИмяОбработки, ИмяПроцедуры, МассивПараметров = Неопределено) Экспорт
//
// Обработки.ДополнительныеВозможности.ВыполнитьПроцедуру(ИмяОбработки, ИмяПроцедуры, МассивПараметров)
//
// КонецПроцедуры
Возврат "МойОбщийМодуль.ЗапускФоновогоМетода"
КонецФункции
Пример вызова метода внешней обработки выглядит так:
Обработки.ДополнительныеВозможности.ВыполнитьПроцедуру("Синхронизация с доменом", "Синхронизировать");
Пример вызова метода внешней обработки в фоновом режиме:
Обработки.ДополнительныеВозможности.ЗапуститьПроцедуруВФоне("Служебные\Обмен данными с узлами", "ВыполнитьОбмен");
Можно и нужно использовать относительное расположение обработки в каталоге по умолчанию. Обработка "Обмен данными с узлами.epf" находится в каталоге \\FileStore\Public\1C\Служебные
P.S. Все файлы и каталоги, имя которых начинается на нижнее подчеркивание, игнорируются (не выводятся в дерево). Также возможны два метода сортировки дерева, подробнее можно посмотреть в конце процедуры ДобавитьСтрокиКДереву в модуле объекта.