Как в 1С производится запуск фоновых заданий, каким образом можно получить список заданий при помощи метода "ПолучитьФоновыеЗадания()?
В одном проекте понадобилось запускать выполнение выгрузки на сайт с сервера.
Пользователь на своем клиенте открывает обработку, устанавливает параметры и нажимает выгрузить.
Выгрузка идет не с компьютера клиента, а создается фоновое задание на сервере!
На клиенте в модуле Кнопки Выгрузить:
Код 1C v 8.3 Процедура КоманднаяПанель1ВыгрузитьНаСайт(Кнопка)
ПараметрыФоновогоЗадания = Новый Массив;
ПараметрыФоновогоЗадания. Добавить( Группа) ;
ФоновыеЗадания. Выполнить( "МодульРегламентныхЗаданий.ВыгрузкаПрайсаНАФТП" ,
ПараметрыФоновогоЗадания, Новый УникальныйИдентификатор,
"Выгрузка прайса на сайт" ) ;
ПоказатьОповещениеПользователя( "Выгрузка прайса на сайт" , , "Запущено задание выгрузки прайса на сайт, проверьте данные на сайте через 2-3 минуты..." , БиблиотекаКартинок. Информация32 ) ;
ПараметрыФоновогоЗадания - это переменные функции, они задаются по порядку как определены в вызываемой функции.
На сервере в общем модуле МодульРегламентныхЗаданий:
Код 1C v 8.3 Процедура ВыгрузкаПрайсаНАФТП(Группа) Экспорт
Запрос = Новый Запрос( ) ;
Запрос. Текст =
"ВЫБРАТЬ
| ПрайсЛист1СрезПоследних.НоменклатураПрайса,
| ПрайсЛист1СрезПоследних.Цена
|ИЗ
| РегистрСведений.ПрайсЛист.СрезПоследних(, Поставщик = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) КАК ПрайсЛист1СрезПоследних
|ГДЕ
| &Условие
| И ПрайсЛист1СрезПоследних.НоменклатураПрайса.ИДдляСайта > 0" ;
Если ЗначениеЗаполнено( Группа) Тогда
Запрос. Текст = СтрЗаменить( Запрос. Текст, "&Условие" , "ПрайсЛист1СрезПоследних.НоменклатураПрайса В ИЕРАРХИИ(&НоменклатураПрайса)" )
Иначе
Запрос. Текст = СтрЗаменить( Запрос. Текст, "&Условие" , "ИСТИНА" )
КонецЕсли ;
Запрос. УстановитьПараметр( "НоменклатураПрайса" , Группа) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Текст = Новый ТекстовыйДокумент;
Пока Выборка. Следующий( ) Цикл
НомПрайса = Выборка. НоменклатураПрайса;
ЦенаА = Выборка. Цена;
Цена = Ценообразование. ОкруглитьЦену( ЦенаА * ( 1 + НомПрайса. Наценка20 / 100 ) + НомПрайса. Надбавка20 , НомПрайса. ПорядокОкругления, НомПрайса. ОкруглятьВБольшуюСторону) ;
Если Цена > 0 Тогда
Текст. ДобавитьСтроку( "" + Формат( НомПрайса. ИДдляСайта, "ЧГ=0" ) + ";" + Формат( Цена, "ЧГ=0" ) ) ;
КонецЕсли ;
КонецЦикла ;
ПутьКФайлВыгр = "\\FG-1\1c_data\naSite\vigruz.csv" ;
Текст. Записать( ПутьКФайлВыгр, "windows-1251" ) ;
КаталогНаSFTPСервере = "/sitetest.ru/public_html/p" ;
Попытка
ИмяПользователя = "serveruser" ;
ПарольПользователя = "password" ;
Сервер = "192.253.6.47" ;
Порт = "21" ;
Прокси = Новый ИнтернетПрокси( ) ;
Прокси. Пользователь = ИмяПользователя;
Прокси. Пароль = ПарольПользователя;
FTPСоединение = Новый FTPСоединение( Сервер, , ИмяПользователя, ПарольПользователя, , Ложь ) ;
FTPСоединение. УстановитьТекущийКаталог( КаталогНаSFTPСервере) ;
ТекущийКаталог = FTPСоединение. ТекущийКаталог( ) ;
Исключение
КонецПопытки ;
FTPСоединение. Записать( ПутьКФайлВыгр, "vigruz.csv" ) ;
НТТР = Новый HTTPСоединение( "sitetest.ru" ) ;
ФайлРезультата = ПолучитьИмяВременногоФайла( ) ;
НТТР. Получить( "/p/import_price.php" , ФайлРезультата) ;
КонецПроцедуры
Как Получить фоновые задания?
Напишем в процедуре обработки нажания следующий код:
Код 1C v 8.2 УП &НаКлиенте
Процедура ПолучитьФоновыеЗадания(Команда)
ПолучитьФоновыеЗаданияНаСервере( ) ;
КонецПроцедуры
Текст процедуры на сервере:
Код 1C v 8.2 УП &НаСервере
Процедура ПолучитьФоновыеЗаданияНаСервере()
ПараметрыОтбора = Новый Структура( "Наименование" , "Тестовое задание" ) ;
СписокФоновыхЗаданий = ФоновыеЗадания. ПолучитьФоновыеЗадания( ПараметрыОтбора) ;
Для каждого Задание Из СписокФоновыхЗаданий Цикл
Сообщить( Задание. Наименование) ;
КонецЦикла ;
КонецПроцедуры
В окно сообщений выведутся наименования выполняющихся и выполненных в 1С фоновых заданий с наименованием "Тестовое задание", так как мы сделали отбор именно по этому наименованию.