Не буду растекаться мыслью по дереву и тянуть кота за все известные места, так как надеюсь, все согласятся, что фоновое выполнение это хорошо. Есть простой путь запускать любой код в фоне. Специалисты скорее всего такой способ используют, но что-то в инете я описания не встретил, решил выложить.
Перво-наперво создаем общий модуль с именем например "ФоновоеВыполнение" с галкой "Сервер". Добавим туда пару процедур:
Функция ЗапуститьФоновоеВыполнение(ТекстПроцедуры,СтруктураПараметров=Неопределено) Экспорт
УникальныйИдентификатор = Новый УникальныйИдентификатор;
ПараметрыВыполнения = Новый Массив;
ПараметрыВыполнения.Добавить(ТекстПроцедуры);
ПараметрыВыполнения.Добавить(СтруктураПараметров);
ФоновыеЗадания.Выполнить("ФоновоеВыполнение.ФоноваяПроцедура",ПараметрыВыполнения,УникальныйИдентификатор);
Возврат УникальныйИдентификатор;
КонецФункции
Процедура ФоноваяПроцедура(ТекстМодуля,ПараметрыВыполнения) Экспорт
ПолныйТекстМодуля = "";
Для Каждого ТекПараметр Из ПараметрыВыполнения Цикл
ПолныйТекстМодуля = ПолныйТекстМодуля+ТекПараметр.Ключ+"=ПараметрыВыполнения."+ТекПараметр.Ключ+";"+Символы.ПС;
КонецЦикла;
ПолныйТекстМодуля = ПолныйТекстМодуля + ТекстМодуля;
Выполнить(ПолныйТекстМодуля);
КонецПроцедуры
И готово!
Теперь для выполнения когда в любой момент мы можем поместить любую процедуру в текстовую переменную:
ТекстФоновойПроцедуры = "
|//Тут передаем текст фоновой процедуры, это может быть вызов каких то процедур или полноценный код
|//вызов процедур проще, т.к. тупо легче отлаживать, т.к. код в этой процедуре обычной отладке не поддастся,
|//а при вызове процедуры или функции мы ставим там точку останова и включаем в отладке автоматическое
|//подключение фоновых заданий. Запускать можно любые методы для выполнения на сервере.
|
|ОбщийМодульСервер.ВыполнитьНужнуюЗадачу(Парметр1,Парметр2);"
И вызывать ее выполнение:
ФоновоеВыполнение.ЗапуститьФоновоеВыполнение(ТекстФоновойПроцедуры,Новый Структура("Параметр1,Параметр2",Параметр1,Параметр2));
интересно, спасибо
…А как узнать-то что всё завершилось?
Я разбирал эту задачу здесьПроизвольный код в фоновом режиме . Работает на БСП без изменения конфигурации, хотя и немного через пень — колоду (с сохранением файла обработки на сервере). Ваш метод более произовдительный, мой — работает без изменений почти везде. Касательно Вашего метода, то тут надо добавить обработчик ожидания, который будет проверять статус его выполнения и считывать прогресс через ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторФоновогоЗадания) и в самом коде делать ДлительныеОперации.СообщитьПрогресс(Прогресс). Ибо фоновое задание, которое завершится быстро, не критично и без фона сделать, а то, которое длится долго надо контролировать и видеть прогресс.
(2)Там есть процедура проверяющая результат выполнения, которая подключается через обработчик ожидания.
Вроде вагон подобных идей на ИС уже реализован в обработках и подсистемах по распараллеливанию через фоновые задания. Ну и про выполнение(формирование) например отчетов в фоне тоже вагон информации (особенно много появилось информации когда управляемые формы появились). Плохо гуглили мне кажется)))
А для многопоточности можно ещё завернуть в цикл.
Пример: Изменение / Удаление чего-то делать в потоках быстрее.
А как насчет отладки? Или получение результата выполнения?
Давайте завернем все что можно «Выполнить», это же 1С, можно делать все что хочешь…
Или все-же стоит пробовать реализовать лучшие мировые практики программирования?
(5) возможно, не закапывался сильно, т.к. искал не для использования, просто просмотрел насколько тема актуальная и что про нее написано.
(7) Для получения результатов выполнения мы возвращаем Уникальный идентификатор, который можем использовать для тестирования. В комментариях даже есть способ как это сделать. С отладкой все так же, запускаем процедуру, ставим точку останова и автоматическое подключение фоновых заданий
Я за использование БСП и запуск фонового задания из модуля внешней обработки, без модификации основной конфигурации.
(10) Это правильно, я сам против модификации стандартных конфигураций, тут скорее идея, которая может быть использована при работе. В любом случае реализация будет зависеть от задачи.
(2) например так:
Показать
А вообще примеров с ФЗ в интернете много, странно, что не нашли ничего…
Лениво проверять, но ИМХО в процедуре
ФоноваяПроцедура(ТекстМодуля,ПараметрыВыполнения)
есть ошибка.
Для Каждого ТекПараметр Из ПараметрыВыполнения Цикл
ПолныйТекстМодуля = ПолныйТекстМодуля+ТекПараметр.Ключ+»=ПараметрыВыполнения.»+ТекПараметр.Ключ+»;»+Символы.ПС;
КонецЦикла;
Первый параметр — это текст процедуры, откуда возьмется ТекПараметр.Ключ ?
Плохо, что до сих пор разработчики 1С не добавили возможность запускать фоновые задания прямо из внешних обработок, открываемых интерактивно через меню Файл. Могли бы добавить возможность передавать в качестве параметра фоновому заданию — сам объект обработки, для копирования его в сеанс фонового задания и исполнения в нем скомпилированного кода.
Кроме того контроль прогресса фонового задания на стороне клиента надо выносить в отдельный поток вызывающий сервер для получения прогресса, а то сейчас видно, как меняется иконка курсора мышки на иконку ожидания при каждом периодическом опросе прогресса и добавляет задержку в работе пользователя.
(13) ТекПараметр.Ключ берется из ПараметрыВыполнения, это второй параметр
Что полезного даёт эта статья? Знание того что в 1с есть фоновые задания и есть метод выполнить. Надоело тратить время на чтение статей описывающих синтаксис-помощник.
(16)Согласен с Вами. Меня очень удивило, что автор не нашел статей по данному вопросу…
Вот отличная статья на инфостарте про ФЗ и БСП:
https://infostart.ru/public/341698/
Ну, а про Выполнить и того статей больше…
Не понимаю в чем проблема? Может когда искал интернет не работал…
(14) для получения информации со стороны сервера — реализована система взаимодействия. Оповещение вызывает СЕРВЕР.
А вот запуск в фоне без доработки — дааа — давно пора убирать костыли со стороны 1С
(17) Отличная статья, спасибо за ссылку! Повторюсь, что искал я поверхностно, и у меня тут только практическая часть для использования «здесь и сейчас», это для тех кому срочно нужно, и у кого нет времени плотно погрузится и изучить тему всесторонне.
(18)Которая с сентября только в корпоративной версии платформы за кучу денег…
(9) Возвращать-то надо УИД ФЗ, а не его ключ, в который положен произвольный УИД.
Потому как в общем случае кому-то может захотеться запускать ФЗ с произвольным (задаваемым извне) ключом.