Как в 1С запустить фоновое задание. Как получить список заданий при помощи метода «ПолучитьФоновыеЗадания()?
В одном проекте понадобилось запускать выполнение выгрузки на сайт с сервера.
Пользователь на своем клиенте открывает обработку, устанавливает параметры и нажимает выгрузить. Выгрузка идет не с компьютера клиента, а создается фоновое задание на сервере.
На клиенте в модуле Кнопки Выгрузить:
1 2 3 4 5 6 7 8 9 10 11 |
Процедура КоманднаяПанель1ВыгрузитьНаСайт(Кнопка) //Выгружается фоновым заданием на серваке ПараметрыФоновогоЗадания = Новый Массив; ПараметрыФоновогоЗадания.Добавить(Группа); //Группа номенклатуры ФоновыеЗадания.Выполнить("МодульРегламентныхЗаданий.ВыгрузкаПрайсаНАФТП", ПараметрыФоновогоЗадания, Новый УникальныйИдентификатор, "Выгрузка прайса на сайт"); ПоказатьОповещениеПользователя("Выгрузка прайса на сайт", ,"Запущено задание выгрузки прайса на сайт, проверьте данные на сайте через 2-3 минуты...", БиблиотекаКартинок.Информация32); КонецПроцедуры |
ПараметрыФоновогоЗадания — это переменные функции, они задаются по порядку как определены в вызываемой функции.
На сервере в общем модуле МодульРегламентныхЗаданий:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
Процедура ВыгрузкаПрайсаНаFTP(Группа) Экспорт Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ | ПрайсЛист1СрезПоследних.НоменклатураПрайса, | ПрайсЛист1СрезПоследних.Цена |ИЗ | РегистрСведений.ПрайсЛист.СрезПоследних(, Поставщик = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)) КАК ПрайсЛист1СрезПоследних |ГДЕ | &Условие | И ПрайсЛист1СрезПоследних.НоменклатураПрайса.ИДдляСайта > 0"; Если ЗначениеЗаполнено(Группа) Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Условие", "ПрайсЛист1СрезПоследних.НоменклатураПрайса В ИЕРАРХИИ(&НоменклатураПрайса)") Иначе Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Условие", "ИСТИНА") КонецЕсли; Запрос.УстановитьПараметр("НоменклатураПрайса", Группа); Выборка = Запрос.Выполнить().Выбрать(); Текст = Новый ТекстовыйДокумент; Пока Выборка.Следующий() Цикл НомПрайса = Выборка.НоменклатураПрайса; ЦенаА = Выборка.Цена; Цена = Ценообразование.ОкруглитьЦену(ЦенаА * ( 1 + НомПрайса.Наценка20 / 100) + НомПрайса.Надбавка20, НомПрайса.ПорядокОкругления, НомПрайса.ОкруглятьВБольшуюСторону); Если Цена > 0 Тогда Текст.ДобавитьСтроку(""+Формат(НомПрайса.ИДдляСайта, "ЧГ=0")+";"+Формат(Цена, "ЧГ=0")); КонецЕсли; КонецЦикла; // запись в текстовый файл ПутьКФайлВыгр = "\\FG-1\1c_data\naSite\vigruz.csv";//"D:\!!!For1C!!!\naSite\vigruz.csv"; Текст.Записать(ПутьКФайлВыгр, "windows-1251"); КаталогНаSFTPСервере = "/sitetest.ru/public_html/p"; Попытка ИмяПользователя = "serveruser"; ПарольПользователя = "password"; Сервер = "70.87.5.24"; Порт = "21"; Прокси = Новый ИнтернетПрокси(); Прокси.Пользователь = ИмяПользователя; Прокси.Пароль = ПарольПользователя; FTPСоединение = Новый FTPСоединение(Сервер,,ИмяПользователя,ПарольПользователя,,Ложь); FTPСоединение.УстановитьТекущийКаталог(КаталогНаSFTPСервере); //FTPСоединение.ПассивныйРежим(Ложь); ТекущийКаталог = FTPСоединение.ТекущийКаталог(); Исключение КонецПопытки; FTPСоединение.Записать(ПутьКФайлВыгр,"vigruz.csv"); //Вызов PHP скрипта для иморта данных из csv файла на сайт НТТР = Новый HTTPСоединение("sitetest.ru"); ФайлРезультата = ПолучитьИмяВременногоФайла(); НТТР.Получить("/p/import_price.php", ФайлРезультата); КонецПроцедуры |
Как Получить фоновые задания в 1С?
Напишем в процедуре обработки нажатия следующий код:
1 2 3 4 |
&НаКлиенте Процедура ПолучитьФоновыеЗадания(Команда) ПолучитьФоновыеЗаданияНаСервере(); КонецПроцедуры |
Текст процедуры на сервере:
1 2 3 4 5 6 7 8 9 10 11 |
&НаСервере Процедура ПолучитьФоновыеЗаданияНаСервере() ПараметрыОтбора = Новый Структура("Наименование", "Тестовое задание"); СписокФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(ПараметрыОтбора); Для каждого Задание Из СписокФоновыхЗаданий Цикл Сообщить(Задание.Наименование); КонецЦикла; КонецПроцедуры |
В окно сообщений выведутся наименования выполняющихся и выполненных в 1С фоновых заданий с наименованием «Тестовое задание», так как мы сделали отбор именно по этому наименованию.