Программный запуск фонового задания 1С

Рассмотрим программный запуск фонового задания 1С на примере запуска обмена с Битрикс из «Управление торговлей ред. 10.3».

Задача: по кнопке осуществлять программный запуск фонового задания 1С для обмена заказами с сайтом. Перед запуском задания надо проверить, не выполняется ли оно прямо сейчас и проинформировать об этом пользователя.

Исходные данные: у нас уже есть регламентное задание, которое выполняет этот обмен.

Код

		
        УстановитьПривилегированныйРежим(Истина);
	П = новый структура;
	П.Вставить("Наименование","Заказы");
	П.Вставить("Ключ","7b4c3f46-f88c-4a26-a351-f6fa3273bcba");
	П.Вставить("Состояние",СостояниеФоновогоЗадания.Активно);
	МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(П);
	Если МассивЗаданий.Количество()>0 Тогда 
		Сообщить("Кто-то прямо сейчас уже выполняет загрузку заказов с оптового сайта. Подождите немного и, при необходимости, повторите попытку");
	Иначе
		МассивПараметров = новый массив;
		МассивПараметров.Добавить("000000004");
		Попытка
			ФоновыеЗадания.Выполнить("Б_ОбщиеПроцедурыИФункцииОбменаССайтом.ЗаданиеОбменССайтом", МассивПараметров,"7b4c3f46-f88c-4a26-a351-f6fa3273bcba","Заказы");
			Сообщить("Загрузка заказов с оптового сайта успешно запущена. Вы можете продолжить работу, заказы появятся в 1С в ближайшее время");
		Исключение
			Сообщить("Не удалось запустить загрузку заказов с оптового сайта. Сообщите о проблеме разработчику");
		КонецПопытки;		
	КонецЕсли;	

Пояснения к коду

 УстановитьПривилегированныйРежим(Истина);

Привилегированный режим устанавливаем, т.к. не администраторы не могу получать фоновые задания.

        П = новый структура;
	П.Вставить("Наименование","Заказы");
	П.Вставить("Ключ","7b4c3f46-f88c-4a26-a351-f6fa3273bcba");
	П.Вставить("Состояние",СостояниеФоновогоЗадания.Активно);
        МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(П);

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

Наименование и ключ регламентного задания. Программный запуск фонового задания 1С
Наименование и ключ регламентного задания
Если МассивЗаданий.Количество()>0 Тогда 
     Сообщить("Кто-то прямо сейчас уже выполняет загрузку заказов с оптового сайта. Подождите немного и, при необходимости, повторите попытку");

Если в массиве не ноль элементов, значит есть активное фоновое задание. Сообщаем об этом пользователю.

Если выполняемых фоновых заданий не нашли, то создаем свое.

Иначе
	МассивПараметров = новый массив;
	МассивПараметров.Добавить("000000004");

В массив параметров надо положить код обмена. Посмотреть его можно в плане обмена битрикса:

КодНастроек обмена с Битрикс 1С
КодНастроек обмена с Битрикс
Попытка
	ФоновыеЗадания.Выполнить("Б_ОбщиеПроцедурыИФункцииОбменаССайтом.ЗаданиеОбменССайтом", МассивПараметров,"7b4c3f46-f88c-4a26-a351-f6fa3273bcba","Заказы");
	Сообщить("Загрузка заказов с оптового сайта успешно запущена. Вы можете продолжить работу, заказы появятся в 1С в ближайшее время");
Исключение
	Сообщить("Не удалось запустить загрузку заказов с оптового сайта. Сообщите о проблеме разработчику");
КонецПопытки;

Пробуем запустить фоновое задание. Если получилось — сообщаем пользователю, что все ОК, если нет, то рекомендуем ему обратиться к разработчику.

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

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

Лог обмена с Битрикс 1С
Лог обмена с Битрикс

Если не знаете, где находится нужный вам лог, посмотрите в настройках обмена:

Расположение лога обмена с Битрикс
Расположение лога обмена с Битрикс
Прокрутить вверх