пятница, 1 марта 2013 г.

Фоновые задания в 1С 8.2


В системе 1С 8 существует такой механизм, как фоновые задания. 

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

ФоновыеЗадания.Выполнить("НазваниеПроцедурыНаСервере",[ПараметрыПроцедуры],[Новый УникальныйИдентификатор],["Название"]);

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

Процедуру лучше всего описывать в серверном общем модуле, таким образом имя должно выглядить так:"Общиймодуль.НазваниеПроцедуры". Соответственно и вызывать лучше её с сервера, чтобы не ставить галочку общего модуля "Вызов Сервера". 
Процедура, выполняемая "в фоне" ДОЛЖНА быть экспортной. 
Единственное ограничение - это невозможность вывода сообщений из фоновых заданий, поэтому можно либо создавать файлик на где-нибудь, либо служебный элемент справочника или регистра сведений. 
Следующий ньюанс в выполнение фоновых заданий в файловой базе. 
Чтобы, написанный нами ранее код заработал в файловой базе необходимо сделать следующие действия:
1)Создать служебного пользователя с полными правами, например "ФоновыйПользователь".
2)В модуле управляемого приложения при начале работы системы написать следующий код:

Если ИмяПользователя() = "ФоновыйПользователь" Тогда

ПодключитьОбработчикОжидания("ВыполнениеЗаданий",5);

КонецЕсли;

3)Описать процедуру ВыполнениеЗаданий в этом же модуле, не забыть сделать её экспортной.
В процедуре необходимо запускать метод ВыполнитьОбработкуЗаданий() без параметров.

Процедура ВыполнениеЗаданий() Экспорт

ВыполнитьОбработкуЗаданий();

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

4)Запустить сеанс пользователя "ФоновыйПользователь".
5)Запустить наш сеанс и выполнить фоновое задание.
6)Задание будет выполняться "в фоне", не в нашем сеансе, но и не на сервере, а в сеансе пользователя "ФоновыйПользователь".

Комментариев нет:

Отправить комментарий