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

0. ЕСТЬNULL 172 30.11.16 10:08 Сейчас в теме
Переработанная внешняя обработка для запуска длительных операций на базе БСП 2.3. Показывает прогресс, не требует изменений в конфигурации, лёгкая в отладке и использовании, работает в безопасном режиме, простая для понимания.

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. andreymazurovdwine 29.11.17 21:53 Сейчас в теме
Спасибо! Очень своевременная статься.. а то на те же грабли наступал с Внешней обработкой и выводом прогресс бара..
2. Err0r 03.12.17 21:57 Сейчас в теме
Обработку скачать не могу :(

В статье не приведен код для процедуры
ВыполнитьДлительнуюОперацию

Что там ?
Dmi|MiX; doublepuffer; letzteKraft; +3 Ответить
4. Nuuq 76 31.03.19 21:50 Сейчас в теме
Скачал, у себя применил - работает - отладка через "Файл - Открыть" без фонового режима, а открывая обработку из справочника ДополнительныеОтчетыИОбработки работает в фоне.
А вот как выводить сообщения пользователю в форме обработки из процедуры модуля Процедура ДлительнаяОперация1(СтруктураПараметров, АдресРезультата) Экспорт ?
5. Nuuq 76 31.03.19 22:23 Сейчас в теме
(4) Разобрался - нужно просто в параметрах установить "ПараметрыОжидания.ВыводитьСообщения = Истина;". Дальше стандартная функция ДлительныеОперацииКлиент.ОжидатьЗавершение сама все сделает.
Спасибо за обработку!
6. burgomister 19 29.05.19 12:53 Сейчас в теме
Скачал, запускаю. Нажимаю кнопки. Никаких процентов не вижу. Ничего не происходит. Только во втором случае сообщение об ошибке выходит (пример). Полагал использовать, но ничего не понятно. Что делать?
7. ЕСТЬNULL 172 30.05.19 01:36 Сейчас в теме
Проценты показываются если запустить обработку из с помощью стандартного механизма внешних обработок. То есть обработку надо поместить в "Дополнительные отчеты и обработки", и запустить её прямо оттуда или с помощью кода, который приведён в тексте статьи.
При показе процентов неудобно производить отладку.
8. RocKeR_13 825 29.11.19 16:23 Сейчас в теме
Если хотим, чтобы запускалась в фоне обработка даже без добавления в справочник внешних обработок, то в ПараметрыЗадания передаем в качестве ИмяОбработки путь к открытой внешней обработке:

&НаСервере
Функция ИспользуемоеИмяФайла()
	
	ЭтотОб = РеквизитФормыВЗначение("Объект");
	Возврат ЭтотОб.ИспользуемоеИмяФайла;
	
КонецФункции


При этом ключ ДополнительнаяОбработкаСсылка вообще не заполняем
12. ЕСТЬNULL 172 25.02.20 15:26 Сейчас в теме
(8)
День добрый, а полную методику где почитать? Или пример. Тоже хочу без регистрации в доп обработках.
9. Tommy82 21.02.20 15:05 Сейчас в теме
Коллеги, пожалуйста, об'ясните суть.
Есть у меня, например, обработка.
по кнопке примитивный запрос к номенклатуре.

Я скачал обработку от автора, но не могу понять как это всё связать со своей обработкой.

1. Зарегистрировал от автора внешнюю обработку с ДО в ДополнительныеОтчетахИОбработках.
оттуда проверил, ок, работает, статус-бар показывает.

2.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	Структура = ПодлючитьДопОтчетОбработку("Дислокация");
	ОткрытьФорму("ВнешняяОбработка."+Структура.ИмяОтчета+".Форма",Новый Структура("ДополнительнаяОбработкаСсылка",Структура.Ссылка));
КонецПроцедуры

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

теперь как это связать с моей обработкой по номенклатуре?!?!

Эти две процедуры куда вешать?!

Моя процедура кнопки на форме
&НаКлиенте Процедура ОбработатьЗапрос(Команда) ОбработатьЗапросНаСервере(); КонецПроцедуры
сюда засунуть
Структура = ПодлючитьДопОтчетОбработку("Дислокация"); //вместо "Дислокация" указать имя обработки от автора - Длительная операция дополненная?!?!?!
ОткрытьФорму("ВнешняяОбработка."+Структура.ИмяОтчета+".Форма",Новый Структура("ДополнительнаяОбработкаСсылка",Структура.Ссылка));

и чего получается - открывается форма обработки автора...

помогите, пожалуйста, очень хочу статус-бар видеть, надоело без него.
8.3.16.1063, БП 3.0.75.70
10. Tommy82 21.02.20 15:16 Сейчас в теме
я не понимаю как это работает
Есть обработка от автора - это шаблон вывода статус-бара (ОбработкаШаблон)
Есть обработка, для которой нужен статус-бар (ОбработкаПросто)
Что и как нужно сделать?!
Из ОбработкаПросто я должен передавать параметры для ОбработкаШаблон?!
ИЛИ
в ОбработкаПросто я должен засунуть функционал из ОбработкаШаблон?!?!?!??!
ИЛИ
вообще не так всё я понимаю?
11. ЕСТЬNULL 172 25.02.20 15:23 Сейчас в теме
(10)
в ОбработкаПросто я должен засунуть функционал из ОбработкаШаблон.

В форме есть клиентская функция ДлительнаяОперация1. Она вызывает экспортную процедуру ДлительнаяОперация1 из модуля ОБЪЕКТА процедуру.

То есть вы готовите данные на форме, на клиенте. Можете добавить данных с сервера без контекста (там есть пример), хотите - можете с контекстом. Передаёте всё как в примере в ПараметрыЗапуска, и потом эти параметры оказываются в процедуре ДлительнаяОперация1 в модуле ОБЪЕКТА.( может вы не знаете как попасть в модуль объекта внешней обработки?) - это не шутка. Прикладываю как.
Прикрепленные файлы:
15. MaxWalker 15.04.20 16:41 Сейчас в теме
(11)
Каким образом оно работает из модуля объекта?
Цитата с ИТС:
Код, выполняющий длительную обработку данных, располагается в модуле менеджера объекта

Из процедуры "ВыполнитьВФоне" вызывается процедура "ВыполнитьМетодКонфигурации", в описании которой также сказано
...<имя объекта>.<имя процедуры>, где <имя объекта> - это общий модуль или модуль менеджера объекта
16. ЕСТЬNULL 172 17.04.20 02:52 Сейчас в теме
(15)
Это чудеса БСП. Вы можете взять отладчик и посмотреть как именно это работает.
13. ЕСТЬNULL 172 25.02.20 15:31 Сейчас в теме
Или, если хотите вставить в свою обработину, вставьте на форму код области ПрограммныйИнтерфейсДО, создайте КЛЮЧЕВОЙ параметр формы ДополнительнаяОбработкаСсылка типа СправочникСсылка.ДополнительныеОтчетыИОбработки, и вызывайте из клиентской процедуры например так:

ВыполнитьДлительнуюОперацию("ДлительнаяОперация1",ПоместитьВоВременноеХранилище(Новый Структура("Параметр1,Параметр2",1,2),УникальныйИдентификатор),"ru = 'Длительная операция 1'");

Этот код вызовет процедуру ДлительнаяОперация1 из модуля объекта или с прогресс баром, если обработка загружена в ДополнительныеОтчетыИОбработки, или без него, но с отладкой, если запущена просто как внешняя, из файла.
14. Tommy82 25.02.20 17:08 Сейчас в теме
(13) Спасибо, обязательно попробую
Оставьте свое сообщение
Вопросы с вознаграждением