Рассмотрим программный запуск фонового задания 1С на примере запуска обмена с Битрикс из «Управление торговлей ред. 10.3».
Задача: по кнопке осуществлять программный запуск фонового задания 1С для обмена заказами с сайтом. Перед запуском задания надо проверить, не выполняется ли оно прямо сейчас и проинформировать об этом пользователя.
Исходные данные: у нас уже есть регламентное задание, которое выполняет этот обмен.
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
УстановитьПривилегированныйРежим(Истина); П = новый структура; П.Вставить("Наименование","Заказы"); П.Вставить("Ключ","7b4c3f46-f88c-4a26-a351-f6fa3273bcba"); П.Вставить("Состояние",СостояниеФоновогоЗадания.Активно); МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(П); Если МассивЗаданий.Количество()>0 Тогда Сообщить("Кто-то прямо сейчас уже выполняет загрузку заказов с оптового сайта. Подождите немного и, при необходимости, повторите попытку"); Иначе МассивПараметров = новый массив; МассивПараметров.Добавить("000000004"); Попытка ФоновыеЗадания.Выполнить("Б_ОбщиеПроцедурыИФункцииОбменаССайтом.ЗаданиеОбменССайтом", МассивПараметров,"7b4c3f46-f88c-4a26-a351-f6fa3273bcba","Заказы"); Сообщить("Загрузка заказов с оптового сайта успешно запущена. Вы можете продолжить работу, заказы появятся в 1С в ближайшее время"); Исключение Сообщить("Не удалось запустить загрузку заказов с оптового сайта. Сообщите о проблеме разработчику"); КонецПопытки; КонецЕсли; |
Пояснения к коду
1 |
УстановитьПривилегированныйРежим(Истина); |
Привилегированный режим устанавливаем, т.к. не администраторы не могу получать фоновые задания.
1 2 3 4 5 |
П = новый структура; П.Вставить("Наименование","Заказы"); П.Вставить("Ключ","7b4c3f46-f88c-4a26-a351-f6fa3273bcba"); П.Вставить("Состояние",СостояниеФоновогоЗадания.Активно); МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(П); |
В структуру ставим те поля, по которым будем идентифицировать нужное нам фоновое задание. В принципе, достаточно только ключа, но я на всякий случай добавил еще и наименование. Посмотреть эта параметры можно в консоли заданий:
1 2 |
Если МассивЗаданий.Количество()>0 Тогда Сообщить("Кто-то прямо сейчас уже выполняет загрузку заказов с оптового сайта. Подождите немного и, при необходимости, повторите попытку"); |
Если в массиве не ноль элементов, значит есть активное фоновое задание. Сообщаем об этом пользователю.
Если выполняемых фоновых заданий не нашли, то создаем свое.
1 2 3 |
Иначе МассивПараметров = новый массив; МассивПараметров.Добавить("000000004"); |
В массив параметров надо положить код обмена. Посмотреть его можно в плане обмена битрикса:
1 2 3 4 5 6 |
Попытка ФоновыеЗадания.Выполнить("Б_ОбщиеПроцедурыИФункцииОбменаССайтом.ЗаданиеОбменССайтом", МассивПараметров,"7b4c3f46-f88c-4a26-a351-f6fa3273bcba","Заказы"); Сообщить("Загрузка заказов с оптового сайта успешно запущена. Вы можете продолжить работу, заказы появятся в 1С в ближайшее время"); Исключение Сообщить("Не удалось запустить загрузку заказов с оптового сайта. Сообщите о проблеме разработчику"); КонецПопытки; |
Пробуем запустить фоновое задание. Если получилось — сообщаем пользователю, что все ОК, если нет, то рекомендуем ему обратиться к разработчику.
Если вы все сделали правильно, то программный запуск фонового задания 1С должен отработать корректно.
Также замечу, что запущенное таким образом фоновое задание не отобразится в консоли заданий. Тем не менее, вы сможете проверить корректность работы вашего кода, открыв лог обмена:
Если не знаете, где находится нужный вам лог, посмотрите в настройках обмена: