gifts2017

Образец внешней обработки с длительной операцией на базе БСП 2.3

Опубликовал Konst Degt (ЕСТЬNULL) в раздел Обработки - Универсальные обработки

Как известно, в БСП 2.3 нас избавили от лишних реквизитов в форме, необходимых для корректного запуска длительной операции. Об этом есть инфостартовская статья, ссылку на неё я укажу. Но как его использовать в случае запуска из внешней обработки, неясно. Тут представлена обработка-образец, на примере которой видно, как это сделать. Используются стандартные процедуры БСП, изменений в конфигурации не нужно, есть пара недостатков.

Вдохновлённый статьёй http://infostart.ru/public/458778/, решил её применить. Правда, когда решился на это, замучался искать её среди методов предыдущего поколения (с дополнительными реквизитами в форме). Поскольку я стараюсь делать всё по максимуму внешними обработками, и как запускать процедуру внешней обработки этим методом, исходя из статьи, совсем неясно, пришлось поизучать код. Немного поковырявшись, выяснил, что БСП 2.3 без проблем это позволяет. Собрал обработку образец - проверил и выложил. Для того, чтобы собрать свою на основании указанной статьи, достаточно той функции, которую я выложил, если лень ковыряться - скачивайте. 

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


&НаСервере
Функция ВыполнитьФоновоеЗаданиеНаСервере()
	СтруктураПараметров = Новый Структура("КоличествоСекунд",10);	

	НаименованиеЗадания = НСтр("ru = 'Длительная операция внешней обработки'");
	
	ВыполняемыйМетод = "ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки";
	
	ПараметрыЗадания = Новый Структура;
	ПараметрыЗадания.Вставить("ИмяОбработки", ИмяОбработки(ЭтаФорма.ИмяФормы));
	ПараметрыЗадания.Вставить("ИмяМетода", "ДлительнаяОперация");
	ПараметрыЗадания.Вставить("ПараметрыВыполнения", СтруктураПараметров);
	ПараметрыЗадания.Вставить("ЭтоВнешняяОбработка", Истина);
	//ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка",Неопределено);
	ПараметрыЗадания.Вставить("ДополнительнаяОбработкаСсылка", Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию("Длительная операция"));
	
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполнения.НаименованиеФоновогоЗадания = НаименованиеЗадания;
	
	РезультатФоновогоЗадания = ДлительныеОперации.ВыполнитьВФоне(ВыполняемыйМетод, ПараметрыЗадания, ПараметрыВыполнения);
	
	Возврат РезультатФоновогоЗадания;
КонецФункции

  Если параметр ДополнительнаяОбработкаСсылка не будет заполнен, то внешняя обработка ищется по имени (Вариант использования ВнешниеОбработки.Создать()). Но в режиме запуска фонового задания, происходит ругань на то, что "файл не найден", хотя в серверной процедуре формы этот же метод, с таким же составом входящих параметров без проблем возвращает объектвнешняяобработка. Попахивает ошибкой платформы и я решил не упрямиться и просто дополнить ссылкой справочника ДополнительныеОтчетыИОбработки, так как времени выкладывать слово "вечность" из букв "1" и "С" нет, прошу понять и простить.

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

Наименование Файл Версия Размер Кол. Скачив.
ДлительнаяОперация23.epf
.epf 8,08Kb
30.11.16
2
.epf 8,08Kb 2 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа