Регламентированное задание 1с. Запуск фонового задания программно. Блокировка регламентных заданий

Регламентные задания в 1С предназначены для выполнения определенных процедур по расписанию, с некоторой периодичностью.

Регламентные задания хранятся в информационной базе, имеют расписание запуска. Сам запуск производится полностью автоматически, если режим работы информационной базы клиент-серверный. Если же база файловая, то необходимо выполнить следующие действия:

  • выделить специального пользователя для выполнения регламентных заданий;
  • должна быть открыта база под этим пользователем, в которой периодически должна выполняться функция ВыполнитьОбработкуЗаданий().

Создание регламентного задания

Регламентные задания — объект метаданных конфигурации 1С. Находится в группе Общие. Рассмотрим параметры и свойства регламентных заданий.

Имя метода — путь к экспортной процедуре в общем модуле, которая будет выполняться по заданному расписанию. Процедура должна выполняться на сервере. В этом регламентные задания чем-то похожи на объект Подписка на событие.

Ключ — позволяет создать несколько регламентных заданий одного типа. Например, выполнение синхронизации данных между несколькими информационными базами может быть реализовано с помощью одного объекта метаданных РегламентноеЗадание , при этом самих регламентных заданий будет создано несколько (по количеству баз для обмена). Различаться эти регламентные задания будут с помощью свойства Ключ. Одновременно может выполняться только одно задание с одинаковым ключом.

Использование — флаг, показывающий, включено ли регламентное задание.

Предопределенное — здесь можно провести аналогию с предопределенными элементами справочника. Предопределенные элементы создаются в конфигураторе и применяются пользователями в работе. Обычные элементы пользователь создает сам. С регламентными заданиями точно так же: если оно предопределенное, то оно существует и может выполняться по расписанию сразу после создания в конфигураторе. Если же флаг Предопределенное не установлен, то пользователю нужно самому создать одно или несколько регламентных заданий данного типа (например, через Консоль заданий ).

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

Интервал повтора при аварийном завершении задания — определяет, с какой периодичностью будет выполнен перезапуск фонового задания, если оно было завершено с ошибкой.

Программная работа с регламентными заданиями

В данных примерах будем рассматривать работу с обычными, не предопределенными, регламентными заданиями.

Программное создание регламентного задания

//Создаем задание
"ИмяРегдаментногоЗадания" ) ;

//Устанавливаем ключ регламентного задания (не обязательно)
Задание. Ключ = "КлючЗадания" ;

//Включаем регламентное задание
Задание. Использование = Истина ;

//Записываем регламентное задание
Задание. Записать() ;

Программное получение регламентного задания для изменения параметров

В этом примере предположим, что существует только одно регламентное задание данного типа. Если заданий несколько, то, зная , нетрудно внести в код соответствующие изменения.


"ИмяРегламентногоЗадания" ] ) ) ;


Если Задания. Количество() > 0 Тогда
Задание= Задания[ 0 ] ;


Иначе
Задание = РегламентныеЗадания. СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания" ) ;

КонецЕсли ;

//Регламентное задание находится в переменной Задание. Можно изменять его параметры.

Вызов диалога изменения расписания регламентного задания

Для работы с расписанием регламентного задания существует особый тип диалога. Все еще предполагаем, что у нас есть только одно регламентное задание данного типа.

//Получаем массив с регламентными заданиями нужного типа
Задания= РегламентныеЗадания. ПолучитьРегламентныеЗадания(новый Структура("Метаданные" , Метаданные. РегламентныеЗадания[ "ИмяРегламентногоЗадания" ] ) ) ;

//Если задание существует, то по условию оно одно
Если Задания. Количество() > 0 Тогда
Задание= Задания[ 0 ] ;

//Если задания нет, создадим его
Иначе
Задание = РегламентныеЗадания. СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания" ) ;

КонецЕсли ;

Расписание= Задание. Расписание;

//Создаем диалог изменения расписания регламентного задания
ДиалогРедактирования= Новый ДиалогРасписанияРегламентногоЗадания (Расписание) ;

//Показываем диалог пользователю и обрабатываем изменения расписания
Если ДиалогРедактирования. ОткрытьМодально() Тогда
Задание. Расписание = ДиалогРедактирования. Расписание;
Задание. Записать() ;
КонецЕсли ;

Нередко при ведении учета возникает необходимость в периодическом выполнении тех или иных действий без вмешательства пользователя. Регламентные и фоновые задания в 1С – те механизмы, которые предусмотрены для этой цели в восьмой версии программы и позволяют:

  • Настроить своевременное допреведение документов;
  • Рассчитать остатки и итоги;
  • Обеспечить периодичность почтовой рассылки;
  • Проверить и удалить неактуальные данные.

Фоновое и регламентное задание – что это и где настраивается

Регламентное задание – заложенный в 1С механизм, который позволяет настроить и, в соответствии с заложенным расписанием и периодичностью, выполнить определенную последовательность действий.

Фоновое задание – действие, порожденное регламентной операцией и не требующее непосредственного участия пользователя.

Создание регламентного задания происходит в режиме конфигуратора:

  • В окне дерева конфигурации находим соответствующую ветку (Рис.1);
  • Нажимаем кнопку добавить;
  • В открывшемся окне необходимо задать имя, позволяющее идентифицировать объект в конфигурации;

Рис.2

  • Напротив надписи «Расписание» (Рис. 2) есть надпись «Открыть», нажатие на которую открывает окно настройки времени и периодичности выполнения обрабочика (Рис.3);

Рис.3

  • Также необходимо заполнить «Имя метода» (сюда будет введено название процедуры, вызываемой из общего модуля и описывающей алгоритм поведения программы);
  • Поля «Наименование» и «Ключ» позволяют группировать объекты;
  • Установленный флажок «Использование» указывает на активность регламентной операции;
  • «Предопределенное» следует установить, если обработчик должен запуститься сразу после его добавления в базу в противном случае запуск можно произвести из соответствующей обработки (о ней ниже);
  • Параметры «Количество повторов» и «Интервал повторов» описывают поведение программы в случае возникновения исключительной ситуации при выполнении фонового задания.

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

Особенности фоновых заданий

Основная особенность этого механизма заключается в том, что фоновый процесс выполняется асинхронно.

Что же это значит. Дело в том, что при синхронной модели работы, в случае выполнения, какого либо алгоритма происходит блокировка пользовательского интерфейса. В нашем случае пользователь может продолжать вносить и редактировать данные, даже если процедура запущена. Асинхронная модель программирования предполагает разделение вычислительных потоков.

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

Особенности работы в клиент-серверном режиме

  • Планирование выполнения и контроль осуществляется планировщиком из кластера серверов;
  • В случае появления запроса на выполнение, планировщик ищет рабочие процессы кластера с минимальной загрузкой и раздает им задачи к выполнению;
  • Каждый процесс может выполнять несколько параллельных вычислений;
  • После поступления задания процесс соединяется с базой и выполняет в ней алгоритм;
  • О результатах процесс сообщает планировщику.

Фоновые задания в файловом режиме

До версии платформы 8.3.3.641 работа с фоновыми заданиями в файловом варианте представляла некоторые трудности:

  1. Необходимо было запускать отдельный сеанс, который бы круглосуточно работал, заменяя собой планировщик;
  2. Этот сеанс должен был периодически выполнять метод ВыполнитьОбработкуЗаданий().

После обновления каждый старт толстого и тонкого клиентов, в случае если в настройках запуска (Рис.4) в поле «Дополнительные » указан ключ AllowExecuteScheduledJobs, инициирует дополнительный поток подключения к базе, который ни как не влияет на работу пользователя, а занимается только выполнением фоновых операций.

Рис.4

Следует учитывать, что даже в файловом варианте работы фоновые процессы не дают возможности интерактивной работы с пользователем (не будут выводиться служебные сообщения, предупреждения, вопросы). То есть кодировать их надо так, будто они будут выполняться на стороне сервера.

Как отключить регламентные задания

Неиспользуемые задания можно отключить, просто сняв в свойствах объекта галочку «Использовать».

В случае, когда администратору необходимо запретить использование регламентных и фоновых операций для всей базы в целом (допустим, не сервере хранится несколько баз, из которых только одна основная, а остальные используются только для разработки) необходимо воспользоваться утилитой администрирования баз. Также можно в создаваемой на сервере базе поставить галочку «Установить блокировку регламентных заданий».

Кроме этого на дисках ИТС имеется специальная обработка «Консоль заданий», позволяющая редактировать расписание фоновых процессов и менять их активность.

Платформы : 1С:Предприятие 8.3, 1С:Предприятие 8.2, 1С:Предприятие 8.1
Конфигурации : Все конфигурации

2012-11-13
53989

В документообороте существуют задачи, которые требуют периодического выполнения — к примеру, по двадцатым числам, либо ежедневно. Как правило, в компаниях специально для этого, создаются определенные правила, в которых обозначено, когда и как должна выполняться необходимая задача, и кто должен проконтролировать процесс. Такие задачи выполняются согласно регламенту и называются — регламентированными.

Довольно часто, в ИТ соблюдается регламент при мониторинге. Такой метод отлично знаком администраторам, так как для этого существуют специальные программы, применяемые для периодической проверки работоспособности сетевой инфраструктуры и серверов. Об обнаруженных неполадках они извещают администратора с помощью СМС, либо электронного письма.

Похожая система действует и для веб-мастеров, при этом, доступность сайта проверяется в течение суток. При помощи механизма "Регламентные задания" в 1С осуществляются задачи мониторинга, а также, периодические задачи, которые выполняются по расписанию в автоматическом режиме в 1С. Рассмотрим подробнее данную тему.

Регламентные задания 1С

Объект 1С, который называется "Регламентные задания" — дает возможность выполнить обработку информации не после возникновения проблемы, а по расписанию. В конфигураторе, регламентное задание является способом задать настройки и установить расписание. Кроме этого, существует возможность в последствии изменять расписание в режиме 1С Предприятие.

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

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

Использование клиент-серверного варианта 1С дает возможность автоматического выполнения задач на сервере. Во запланированное время — осуществляется запуск фонового задания, которое и выполняет необходимые действия. Для параллельных вычислений на сервере, фоновое задание может быть создано из текста программы, при помощи языка 1С, без использования регламентного задания 1С. Действие регламентного задания можно временно отключить, используя для этого консоль управления сервером 1С.

Добавление регламентного задания

Регламентные задания расположены в — Конфигуратор — Общие — Регламентные задания. Добавьте новое "задание" и укажите имя. Дальше, необходимо зайти в свойства «Задания». И выбрать Имя метода. Здесь, нужно указать функцию обработчика, так же, как это происходит в подписке на событие. Данная функция будет расположена в общем модуле и обозначена "птичкой" Сервер в свойствах. Это значит, что необходимый модуль требуется добавить заранее.

Наименование задания в Свойствах регламентного задания позволяет определить его название, которое далее будет фигурировать в средствах управления заданиями. Функция Свойства регламентного задания — является ключем, позволяющим группировать несколько разных регламентных заданий. При этом одновременно может быть запущено лишь одно задание с одинаковым значением ключа. Здесь, значение может быть произвольным, но заполнять его обязательно, так как пустое значение не учитывается системой.

В Бухгалтерии редакции 2.0, которая является типовой конфигурацией, регламентные задания, такие как: "Пересчет итогов" и "Обновление конфигурации" — являются предопределенными, а такие, как например "Отложенные движения" и "Обмен данными" — не предопределенными.

Повтор при аварийном завершении — перезапуск действующего задания. Предусмотрен для осуществления запуска, который не был успешно выполнен с первого раза. Здесь, указано, сколько раз можно перезапускать и по прошествии какого времени после аварийного завершения.

Мониторинг и средства управления регламентным заданием 1С

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

С ее помощью можно осуществлять следующие действия:

Включать и выключать регламентное задание;

Назначать и изменять расписание;

Обозначить имя пользователя, с помощью которого будет выполняться регламентное задание;

Видеть выполненные задачи (когда и с каким результатом), а также, ошибки задания;

Регламентное задание и копии баз данных

При использовании серверной 1С, может возникнуть такой момент:

Для программирования необходимо сделать копию рабочей базы;

Необходимость работы в копиях базы (тестирование);

По каким-то причинам не включено регламентное задание в тестовой базе.

Если одна из таких ситуаций возникла во время выполнения задач регламентным заданием, которые связаны только со своей базой данных, то это не несет за собой негативных последствий. Но, зачастую, регламентное задание может сохранять файлы, либо другие данные, высылать электронные письма, проводить обмен. В таком случае, может возникнуть путаница между результатами работы «задания» и копиями. Для того чтобы этого не происходило, необходимо отключить «задачи» в консоли управления сервером.

Выполненные и не выполненные регламентные задачи

Во время создания регламентных задач, важно проверить может ли задача быть выполнена как регламентное задание. Важно знать, что серверный модуль не дает многих вещей, которые возможны на клиенте. Далее, задача, имеющая дело с чем-то, что находится вне базы — важную роль при этом, играют права пользователя Windows, под которым происходит выполнение задания.

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

Периодическая очистка регистров (например, регистра сведений «Версии объектов» в конфигурации УПП), выполнение расчетов по расписанию, допроведение документов в определенное время – вот далеко не полный список действий, которые можно реализовать с помощью регламентных заданий 1С.

Создание задания

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

Регламентное задание незаменимо:

  1. Если в поставленной задаче в качестве одного из условий присутствует необходимость периодического выполнения определенного алгоритма;
  2. Если код должен выполняться независимо от действий операторов и пользователей базы;
  3. Если запуск исполняемой процедуры не зависит от внешних событий, происходящих с объектами информационной базы.

Для его создания необходимо зайти в информационную базу в режиме «Конфигуратор». Далее находим в дереве конфигурации ветку «Регламентные задания», они находятся на закладке «Общие» и нажимаем кнопку «Добавить» (Рис.1)

Давайте подробнее разберем окно его свойств (Рис.2) :
Рис.2

  1. Имя, синоним и комментарий – правила и принципы заполнения этих полей аналогичны для всех объектов конфигурации и описывать их еще раз нет необходимости;
  2. Имя метода – процедура общего модуля, которая максимально точно описывает необходимый алгоритм (нажатие на кнопку выбора открывает доступные процедуры, представление которых состоит из имени общего модуля и наименования процедуры в различных колонках таблицы);
  3. Ключ – определяет не столько уникальность регламентного задания, сколько уникальность фонового процесса, запущенного на основании задания, имеет ограничение по длине;
  4. Расписание – описанию этого элемента мы посвятим отдельный абзац нашей статьи;
  5. Использование – установка данного флажка определяет активность задания, ИСТИНА означает, что задание будет запускаться и выполняться по расписанию;
  6. Предопределенное – если у элемента установлена эта галочка, эти задания нельзя удалить, их создание происходит автоматически при сохранении конфигурации в базу;
  7. Количество повторов – если в процессе выполнения возникла исключительная ситуация, оно будет перезапущено, чтобы не возникла бесконечная зацикленность, программа ограничивает количество перезапусков;
  8. Интервал повтора – время в секундах между повторными запусками аварийно завершенных заданий.

Давайте более подробно рассмотрим расписание.

Расписание регламентного задания

Рис.3

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

Закладка «Общие»:

  • Дата начала выполнения задания;
  • Дата окончания обработки;
  • Периодичность повторения задания.

Если не указаны даты на этой закладке, то никакого ограничения по срокам выполнения для задания не будет установлено.

Закладка «Дневное» (Рис.4)
Рис.4

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

Закладки «Дневные» и «Недельные» содержат информацию для соответствующих периодов.

Особенности функционирования

В клиент-серверном варианте работы выполнение регламентных заданий определяется инструментами сервера. Из консоли администрирования можно включить и отключить возможность выполнения заданий для конкретной базы.

Гораздо сложнее дело обстоит с файловым вариантом работы. До определенного релиза платформы выполнение фоновых и регламентных процедур осуществлялось только в случае, если при старте системы под определенным пользователем активизировался метод ВыполнитьОбработкуЗаданий(). В этом случае периодический запуск алгоритмов осуществлялся до тех пор, пока пользователь, инициировавший метод, находился в программе.

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

Полностью отключить выполнение фоновых и регламентных работ в базе, работающей в файловом режиме можно удалив или переименовав файл DoNotCopy.txt в папке с базой. Наличие этого файла говорит платформе о том, что работы производятся в оригинале, а не в копии базы.

Кроме того в стандартных поставках 1С появилась возможность управления плановыми работами напрямую из программы, не заходя в «Конфигуратор». В конфигурации «ЗУП», версии 3.1.3.223, открыть форму управления можно из меню Администрирование->Обслуживание->Регламентные операции->Регламентные и фоновые задания (Рис.5)
Рис.5

Открывшаяся форма имеет интуитивно понятный интерфейс и позволяет:


Можно также запустить выполнение задачи непосредственно из формы.

Концепция асинхронного программирования

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

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

Некоторые методы, вероятность исключений которых сведена к минимуму, не нуждаются в асинхронном подходе, но другие - требуют его в самом начале разработки.

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

При синхронном выполнении у приложения есть только один поток. С помощью асинхронной модели программирования вы можете запускать множество параллельных потоков и во время их выполнения реагировать на новые действия пользователя. После того как n-поток выполнен, вы отображаете результат на экран.

Фоновые задания в «1С:Предприятие 8»

В «1С:Предприятие 8» фоновые задания предназначены для выполнения прикладных задач асинхронно. Они могут порождать дочерние фоновые задания, например, для распараллеливания сложных вычислений по различным рабочим серверам кластера в клиент-серверном варианте работы.

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

Механизм заданий функционирует как в клиент-серверном, так и в файловом варианте работы, но возможности по администрированию и выполнению заданий в обоих вариантах несколько различаются.

Клиент-серверный вариант

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

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

Файловый вариант

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

Раньше для автоматического выполнения заданий требовалось запускать отдельный, дополнительный сеанс «1С:Предприятия», используемый в качестве планировщика заданий. И в этом сеансе нужно было периодически выполнять метод встроенного языка ВыполнитьОбработкуЗаданий(). Такой подход был довольно громоздким, неудобным и сильно ограничивал использование фоновых и регламентных заданий в файловом варианте работы.

Теперь всё стало гораздо проще. Если стартует тонкий или толстый клиент, а также если у веб-сервера есть клиентские соединения, то в каждом из этих приложений автоматически запускается еще один поток с подключением к базе данных. Эти потоки занимаются тем, что выполняют фоновые и регламентные задания.

Каждое из перечисленных приложений выполняет собственные фоновые задания. Если приложение инициировало несколько фоновых заданий, то выполняются они последовательно, в порядке поступления.

Очевидный минус 1С фоновых заданий : поскольку они выполняются на стороне сервера, то нет возможности интерактивной работы с пользователем (к примеру, нельзя вывести сообщение или какую-нибудь другую информацию; все эти данные нужно сохранять в рамках информационной базы и дальше каким-то образом обрабатывать).

Необходимо отметить, что фоновые задания - это объекты исключительно программные и их нельзя сохранить в базе данных. То есть мы можем только создать экземпляр класса, инициализировать его свойства и запустить его на выполнение.

Пример асинхронного выполнения кода в «1С:Предприятие 8»

«Писать программы, в которых результат вызова функции приходит неизвестно когда - куда сложнее, чем обычные. Вложенные вызовы, обработка ошибок, контроль над происходящим - все усложняется», - так скажут только те, кто не умеет правильно пользоваться возможностями платформы, но не мы!

Продемонстрируем всю простоту и изящество асинхронного выполнения кода в «1С:Предприятие 8»!

Шаг 1. Создадим новую ИБ для разработки конфигурации

Шаг 2. В конфигурации добавим общий модуль «АсинхронныеОбработчики»

Почему мы добавили общий модуль? Тут все просто: для выполнения асинхронных операций в «1С:Предприяте 8» применяются фоновые задания, у которых имеется свой менеджер - «МенеджерФоновыхЗадания». У этого объекта есть метод «Выполнить», с помощью которого как раз и запускается фоновое задание.

Обратимся к синтакс-помощнику.

Таким образом, нам понадобится общий модуль.

Шаг 3. В общем модуле «АиснхронныеОбработчики» добавим экспортную процедуру НашаДлительнаяОперация()

Процедура НашаДлительнаяОперация(Длительность) Экспорт // Имитация продолжительного действия (Длительность сек.). ДатаНачалаОперации = ТекущаяДата(); Пока ТекущаяДата() - ДатаНачалаОперации < Длительность Цикл КонецЦикла; КонецПроцедуры

Шаг 4. Добавляем в конфигурацию обработку «АсинхроннаяКонцепцияПрограммирования» (можно создать внешнюю обработку)

На форму добавляем один реквизит:

Длительность (Число)

и две команды

ВыполнитьДлительнуюОперацию;

ВыполнитьДлительнуюОперациюАсинхронно.

Шаг 5. Согласно синтакс-помощнику заполняем модуль формы

&НаКлиенте Процедура ВыполнитьДлительнуюОперацию(Команда) ВыполнитьДлительнуюОперациюНаСервере(); КонецПроцедуры &НаСервере Процедура ВыполнитьДлительнуюОперациюНаСервере() АсинхронныеОбработчики.НашаДлительнаяОперация(Длительность); КонецПроцедуры &НаКлиенте Процедура ВыполнитьДлительнуюОперациюАсинхронно(Команда) ВыполнитьДлительнуюОперациюАсинхронноНаСервере(); КонецПроцедуры &НаСервере Процедура ВыполнитьДлительнуюОперациюАсинхронноНаСервере() Параметры = Новый Массив; Параметры.Добавить(Длительность); ФоновыеЗадания.Выполнить("АсинхронныеОбработчики.НашаДлительнаяОперация", Параметры, Новый УникальныйИдентификатор, "Пример асинхронной концепции программирования"); КонецПроцедуры

Шаг 6. Запускаем и проверяем!

Результат:

Если мы нажимаем на кнопку «Выполнить длительную операцию», то пользовательский интерфейс на «Длительность» секунд блокируется;

Если мы нажимаем на кнопку «Выполнить длительную операцию асинхронно», то пользовательский интерфейс не блокируется, а программный код выполняется параллельно.

В том, что программный код асинхронно выполняется, мы можем убедиться, просмотрев журнал регистрации.

Отладить программный код, который выполняется в «фоне» мы можем, если в параметрах отладки установим соответствующее свойство.

Пример асинхронного выполнения кода в «1С:Предприятие 8» с использование БСП

Пример реализации асинхронной концепции программирования в «1С:Предприятие 8» в БСП рассмотрим на примере обработки «Текущие дела».

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

Проанализируем программный код формы.

Событие формы «ПриСозданииНаСервере» вызывает процедуру «ЗапуститьФоновоеЗадание» - это то, что нам и нужно.

Не отвлекаясь на нюансы, анализируем данную процедуру

И здесь мы видим, что используется менеджер фоновых заданий и его метод «Выполнить». Отметить, что разработчики сохраняют уникальный идентификатор фонового задания.

Для этого разработчики применяют метод ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>).



В подключаемой процедуре Подключаемый_ПроверитьВыполнениеЗадания() разработчики вызывают функцию ЗаданиеВыполнено(ИдентификаторЗадания)


Данная функция по идентификатору проверяет выполнения фонового задания.

Необходимо отметить, что в БСП разработаны общие модули поддержки работы длительных серверных операций.

Таким образом, асинхронная концепция программирования в «1С:Предприятие 8» незначительно увеличивает трудоемкость решения задач для разработчика, но заметно улучшает функциональность программы с точки зрения пользователя.

Понравилось? Лайкни нас на Facebook