1с внешняя обработка в фоновом режиме

В данной статье описан пример кода для запуска фонового задания из формы внешней обработки средствами 1С БСП с возможностью отображения индикации.

Описание используемых процедур

Данный пример кода реализован с использованием функционала Длительных операций 1С:Библиотеки стандартных подсистем версии 2.3.2 и выше.
В 1С БСП существует функционал для запуска фоновых заданий из дополнительных обработок в общем модуле ДлительныеОперации.
Основные процедуры функционала Длительных операций БСП, используемые в данном примере:
— Запуск экспортной функции внешней обработки происходит через функцию ДлительныеОперации.ВыполнитьПроцедуруМодуляОбъектаОбработки, в которую необходимо передать данные для запуска: имя процедуры, ссылка на дополнительную обработку, имя обработки и другие;
— Процедура ДлительныеОперации.ВыполнитьВФоне: Запустить выполнение процедуры в фоновом задании, если это возможно;
— Функция ДлительныеОперации.ПрочитатьПрогресс: Считывает информацию о ходе выполнения фонового задания;
— Функция ДлительныеОперации.СообщитьПрогресс: Регистрирует информацию о ходе выполнения фонового задания;
— Процедура ДлительныеОперацииКлиент.ОжидатьЗавершение: Ожидать завершения выполнение процедуры в фоновом задании и открыть форму ожидания длительной операции.

Со всеми детальными описаниями и параметрами функций и процедур можно ознакомится в комментариях перед соответствующими процедурами в общих модулях.

Рассмотрим пример обработки.

Пример запуска процедуры внешней обработки в фоновом режиме с помощью функционала 1С БСП

В модуле объекта необходимо описать сведения о внешней обработке. Команда будет запускаться через команду формы.

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

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

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

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

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

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

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

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

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

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

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

В данной статье приведен пример работы с фоновыми заданиями, как в 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: :???: :?: :!: