1с запустить процедуру в фоновом режиме

Как в 1С производится запуск фоновых заданий, каким образом можно получить список заданий при помощи метода «ПолучитьФоновыеЗадания()?

В одном проекте понадобилось запускать выполнение выгрузки на сайт с сервера.

Пользователь на своем клиенте открывает обработку, устанавливает параметры и нажимает выгрузить.

Выгрузка идет не с компьютера клиента, а создается фоновое задание на сервере!

На клиенте в модуле Кнопки Выгрузить:

ПараметрыФоновогоЗадания — это переменные функции, они задаются по порядку как определены в вызываемой функции.

На сервере в общем модуле МодульРегламентныхЗаданий:

Как Получить фоновые задания?

Напишем в процедуре обработки нажания следующий код:

Текст процедуры на сервере:

В окно сообщений выведутся наименования выполняющихся и выполненных в 1С фоновых заданий с наименованием «Тестовое задание», так как мы сделали отбор именно по этому наименованию.

многопоточных приложений. По делу и без дела, делал

многопоточными все свои поделки – было интересно, хоть тогда у меня еще не было многоядерных

процессоров. Постепенно мозги привыкли к этому, и когда я

занялся 1С 8, меня ожидало разочарование – запущенный из формы код замораживал не только
саму

форму, но и окно приложения заодно. Грустно. «Финты ушами» с

использованием генератора «Внешних событий» по душе не пришлись. А до фоновых заданий в
версии

1С 8.1 добрался только сейчас.

Автор статьи: shachneff | Редакторы: oleg_km, dj_serega
Последняя редакция №15 от 23.06.14 | История
URL: http://kb.mista.ru/article.php? >

Ключевые слова: 1cv81, фоновое задание, асинхронно, многопоточность

1С:Предприятие > 8.1.8, клиент-серверная архитектура, MS SQL.
Общий неглобальный серверный модуль. Обработка с одной формой, одной кнопкой и одним табличным полем.

Нажав кнопку на форме, запустить некий долгий алгоритм расчета так, чтобы при этом форма была доступна для нажатия других кнопок, менюшек, перемещения.
По окончании расчета передать результат расчета в табличное поле и отобразить результат.

Методика:

Как показала практика, из отработавшего фонового задания вернуть штатным путем каке-либо данные невозможно. Имеется 2 способа, позволяющих это
делать:
1) фоновое задание пишет результат своей работы в БД, обработка отслеживает, что фоновое задание завершилось и считывает из БД результат. В качестве места хранения результата предлагается
использовать регистр сведений, где измерение хранит UID экземпляра фонового задания, а ресурс имеет тип ХранилищеЗначений.
2) извращенный способ – передать значение через программную генерацию исключения (оператор «ВызватьИсключение»).

Решение:

Описывать способ с регистром сведений не буду, так как это достаточно просто реализовать, а минусом является необходимость добавления в конфигурацию регистра сведений. Поэтому опишу вариант с
«ВызватьИсключение»:

Процедура общего модуля:

Модуль формы обработки:

Результат:

Жмем кнопку. 15 секунд наслаждаемся перетаскиванием формы и прочими действиями (кроме закрытия).
Потом резко (само! шайтан! :) заполнится табличное поле на форме, чего и следовало ожидать.
Нагрузочные испытания проведены на передаче таблицы значений из 2 полей с количеством строк 100 тыс.
шт. – успешно.

Надеюсь, статья будет вам полезна.
Выражаю благодарность всем, кто помог мне осуществить данную операцию.

С уважением, Алексей Шачнев.

Вместо обработки ожидания использовал отправку датаграммы из фонового задания форме посредством MS WinSock (ActiveX)

Нужно было выполнить заполнение дерева в фоне (что бы не блокировать основной интерфейс). Нашел эту статейку.
Собственно удалось выполнить фоновое задание без «ВызватьИсключение».
8.2.19.68 (Управляемое приложение)

В данной статье приведен пример работы с фоновыми заданиями, как в 1С производится запуск фоновых заданий, каким образом можно получить список заданий при помощи метода «ПолучитьФоновыеЗадания()». Итак, данный метод возвращает нам некоторый массив. Посмотрим что же он содержит.

Cразу оговорюсь, что приведенный пример разрабатывался в клиент-серверном варианте работы базы.

На рисунке представленном выше видно содержимое данного массива.

Обратите внимание на поле «Состояние». Оно содержит информацию о том, успешно ли было выполнено запущенное фоновое задание или же оно еще выполняется.

Также там содержится информация о неудачном выполнении задания. Еще этот массив содержит информацию о ключах, уникальных идентификаторах, наименовании фоновых заданий. Информация о выполняющихся и выполненных заданиях хранится в информационной базе, но есть ограничение на количество хранимых записей в таблице. Это количество составляет порядка 1000 записей. То есть при добавлении новых элементов старые удаляются. Также задание удаляется из таблицы если оно было выполнено более суток назад.

Пример работы с фоновым заданием 1C — Метод «ПолучитьФоновыеЗадания»

Давайте также рассмотрим работу с фоновыми заданиями на примере метода «ПолучитьФоновыеЗадания()». В данном методе есть возможность установить отбор на получаемые записи. То есть в качестве параметра метода нам нужно передать структуру.

Структура может содержать поля: Уникальный идентификатор, Ключ, Состояние, Начало, Конец, Наименование, ИмяМетода, РегламентноеЗадание.

Например, если бы нам нужны были только выполняющиеся задания мы бы накладывали отбор с именем элемента структуры «Состояние» и значением бы мы указали системное перечисление «СостояниеФоновогоЗадания» в состояние активно. Итак, для начала необходимо добиться того, чтобы в демонстрационной базе появились записи о выполнении фоновых заданий 1С.

Для реализации примера сделаем следующее:
1. Создадим общий модуль «ОбработчикиФоновыхЗаданий», выполняемый на сервере.

И добавим в него следующий код:

Процедура ПроизвестиФоновоеВычисление ( Параметр ) Экспорт

Пока ТекущаяДата ( ) — ВремНач Цикл

2. Создадим обработку, разместим на форме кнопку «Выполнить задание в фоне» и в процедуре обработки события нажатия на кнопку добавим код:

Описание вызываемой процедуры:

Теперь запустим 1С в режиме предприятия и запустим выполнение фонового задания.

Готово. Этими действиями мы добились того, что в нашей демонстрационной базе появились записи о выполнении фоновых заданий 1С и теперь можно продемонстрировать пример получения их массива, содержащегося в нашей базе.

Добавим на форму еще одну кнопку «Получить фоновые задания». Напишем в процедуре обработки нажания следующий код:

Текст процедуры на сервере:

Запустим 1С на выполнение и нажмем кнопку «Получить фоновые задания».

В окно сообщений выведутся наименования выполняющихся и выполненных в 1С фоновых заданий с наименованием «Тестовое задание 2», так как мы сделали отбор именно по этому наименованию. Укажем в параметрах отбора наименование «Тестовое задание» и получим массив содержащий элементы данного задания.

Надеюсь приведенный выше пример дал вам некоторое понятие о механизме фоновых заданиях реализованном в системе 1С. Более детально ознакомиться со всеми тонкостями вы можете во встроенном синтакс-помошнике 1С.

Скачать базу с примером работы с фоновым заданием вы можете тут

Понравилась статья? Поделиться с друзьями:
Vkontakte.INFO
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: