gifts2017

Одна обработка, чтобы править всеми

Опубликовал nick-max nick-max (nick-max) в раздел Обработки - Универсальные обработки

Внешняя обработка, из которой можно открывать другие внешние обработки с вашего файлового ресурса

Предлагаю вашему вниманию обработку Дополнительные возможности. Она может быть полезна, если у вас много однотипных баз, в которых используется много ваших внешних обработок, которые к тому же часто меняются. В данной обработке вы указываете каталог, в котором лежат все ваши *.epf и *.erf файлы, и обработка строит деревья с иерархией подкаталогов как в файловой системе:

 

    

 

При двойном щелчке по любой из обработок она программно откроется в вашей базе (обработка Дополнительные возможности при этом закроется). Это скромная альтернатива подсистеме "Дополнительные отчеты и обработки" в БСП. При изменении/доработке какой-либо из ваших внешних обработок вам не нужно будет распространять ее по всем вашим базам, повторно регистрировать в справочнике "Дополнительные обработки" или совершать какие-либо другие действия.

Внешние отчеты вынесены на отдельную закладку:

 

    

 

Для того, чтобы у всех пользователей обработка сразу "смотрела" на один и тот же каталог, зайдите в функцию МестоРасположенияПоУмолчанию() в модуле объекта и укажите там расположение по умолчанию. Вот как выглядит сам каталог, который обработка Дополнительные возможности сканирует для построения деревьев на скриншотах выше:

 

    

 

Для конфигураций на обычном приложении предусмотрена такая же форма, как и для управляемого приложения. Обработку можно открывать интерактивно (через "Файл -> Открыть"), можно подключить как внешнюю обработку.

 

    

 

Но самый большой спектр возможностей вы получите, если включите ее в свою конфигурацию. Это даст вам возможность буквально одной строчкой программно вызывать методы внешних обработок, располагающихся в каталоге по умолчанию. Для этого вам нужно добавить обработку Дополнительные возможности в дерево метаданных, а также скопировать в модуль менеджера (по умолчанию он будет пустой) следующий код. Обратите внимание, что вам также потребуется создать небольшую процедуру ЗапускФоновогоМетода в своем общем модуле (это связано с тем, что в фоне можно выполнять только процедуры общих модулей).

 

Функция   ПодключитьДополнительнуюОбработку(Знач ИмяОбработки, БезопасныйРежим = Ложь) Экспорт
	
	ДополнительныеВозможности = Обработки.ДополнительныеВозможности.Создать();
	Возврат ДополнительныеВозможности.ПодключитьДополнительнуюОбработку(ИмяОбработки, БезопасныйРежим);
	
КонецФункции 
	

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


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



Функция   ЗапуститьПроцедуруВФоне(ИмяОбработки, ИмяПроцедуры, МассивПараметров = Неопределено, Ключ = Неопределено) Экспорт
	
	
	НовыйМассив = Новый Массив;
	НовыйМассив.Добавить(ИмяОбработки);
	НовыйМассив.Добавить(ИмяПроцедуры);
	НовыйМассив.Добавить(МассивПараметров);
	
	Если Ключ = Неопределено Тогда
		Ключ = Строка(Новый УникальныйИдентификатор())
	КонецЕсли;	
	
	АдресФоновогоМетода = АдресФоновогоМетода();
	Описание = "Фоновое выполнение процедуры """ + ИмяПроцедуры + """ внешней обработки """ + ИмяОбработки + """"; 
	
	Попытка
		ПараметрыОтбора = Новый Структура();
		ПараметрыОтбора.Вставить("Ключ", Ключ);
		ПараметрыОтбора.Вставить("ИмяМетода", АдресФоновогоМетода);
		ПараметрыОтбора.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
		НайденныеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ПараметрыОтбора);
		Если НайденныеЗадания.Количество() > 0 Тогда
			Сообщить("Уже существуют активные фоновые задания с такими параметрами", СтатусСообщения.Важное);
			Возврат Ложь
		КонецЕсли;	
		
		ФоновоеЗадание = ФоновыеЗадания.Выполнить(АдресФоновогоМетода, НовыйМассив, Ключ, Описание) 
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат Ложь
	КонецПопытки;
	
	Возврат Истина
	
	
КонецФункции	


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



Пример вызова метода внешней обработки выглядит так:

Обработки.ДополнительныеВозможности.ВыполнитьПроцедуру("Синхронизация с доменом", "Синхронизировать");



Пример вызова метода внешней обработки в фоновом режиме:

Обработки.ДополнительныеВозможности.ЗапуститьПроцедуруВФоне("Служебные\Обмен данными с узлами", "ВыполнитьОбмен");



Можно и нужно использовать относительное расположение обработки в каталоге по умолчанию. Обработка "Обмен данными с узлами.epf" находится в каталоге \\FileStore\Public\1C\Служебные

P.S. Все файлы и каталоги, имя которых начинается на нижнее подчеркивание, игнорируются (не выводятся в дерево). Также возможны два метода сортировки дерева, подробнее можно посмотреть в конце процедуры ДобавитьСтрокиКДереву в модуле объекта.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Дополнительные возможности
.epf 14,88Kb
03.08.15
43
.epf 1.0 14,88Kb 43 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Александр (МимохожийОднако) 05.08.15 09:05
Только для обычного интерфейса?
2. Альберт (Alik_1c) 05.08.15 09:23
{Форма.ФормаОбычная.Форма(54)}: Поле объекта не обнаружено (Реквизит)
ОформлениеСтроки.Ячейки.Имя.УстановитьКартинку(?(ДанныеСтроки.ЭтоСтрока, БиблиотекаКартинок.Реквизит,
УПП ред. 1.3

почему такая ошибка выходит?
3. Никита Грызлов (nixel) 05.08.15 11:32
(1) МимохожийОднако, под УФ рекомендую использовать http://infostart.ru/public/239307/
4. nick-max nick-max (nick-max) 05.08.15 15:57
(2) Alik_1c,

Довольно странно. Проверял на БП 3.0.40.39, БП 2.0.58.5, УТ 11.0.9.15, ЗУП 2.5.94.1, ЗУП 3.0.23.120, КА 1.1.54.2, УПП 1.3.53.1. Все на платформе 8.3.6.2041. Вот скрин:


Открыть в полном размере



Может у вас настолько старая платформа, что в ней нет стандартной картинки "Реквизит" в Библиотеке картинок? Самое простое в этом случае - закомментируйте содержимое процедуры ДеревоПриВыводеСтроки. У вас будет дерево без иконок, но на функциональность это никак не повлияет.
5. nick-max nick-max (nick-max) 05.08.15 16:01
(1) МимохожийОднако, и для Управляемых форм и для Обычных.

(3) nixel, Спасибо, похоже - отличная обработка
6. Александр Крынецкий (echo77) 06.08.15 21:16
Штука позволит пользователям без права запуска внешних отчетов и обработок открыть их
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа