ICQ: 378 171 273 Skype: programict-1c info@1c-programist.ru

1C запуск фоновых заданий - Пример работы с фоновыми заданиями 1С

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

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

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

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

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


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

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

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

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


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

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

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

ВремНач = ТекущаяДата();

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

КонецЦикла;

КонецПроцедуры

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

&НаКлиенте
Процедура ВыполнитьЗадание(Команда)
	
	ВыполнитьФоновоеЗаданиеНаСервере();
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ПолучитьФоновыеЗадания(Команда)
	
	ПолучитьФоновыеЗаданияНаСервере();
	
КонецПроцедуры

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

&НаСервере
Процедура ПолучитьФоновыеЗаданияНаСервере()

	ПараметрыОтбора = Новый Структура("Наименование", "Тестовое задание 2");	
	СписокФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(ПараметрыОтбора);
	
	Для каждого Задание Из СписокФоновыхЗаданий Цикл
		Сообщить(Задание.Наименование);
	КонецЦикла;

КонецПроцедуры // ПолучитьФоновыеЗаданияНаСервере()

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

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

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

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

Вы еще не читали? Вам это будет интересно...

Написать мне