Open
Close

Работа с регламентными заданиями в 1с 8.3. Регламентные и фоновые задания (1Cv8). Включаем все или некоторые задания

Механизм заданий - один из инструментов администрирования 1С. Он включает:

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

Вопрос 09.59 экзамена 1С:Профессионал по платформе. Экземпляр регламентного задания:

  1. может быть создан программно
  2. может быть создан в форме списка, доступной через команду главного меню программы ("Операции/Регламентные задания")
  3. создается всегда только один экземпляр (при создании соответствующего объекта конфигурации)
  4. определяется только в режиме конфигурирования на закладке Прочее по кнопке "Состав"
  5. верны ответы 1 и 2
Правильный ответ первый. Если регламентное задание предопределенное (рис.), то задание будет создано в единственном экземпляре с указанным в конфигураторе расписанием. Экземпляры НЕ предопределенных заданий появляются по расписанию, заданному в режиме Предпритятие, программно.
Вопрос 09.60 экзамена 1С:Профессионал по платформе. Количество одновременно выполняющихся регламентных заданий может быть:
  1. любым без ограничения
  2. любое количество, но не будут выполняться два задания с одинаковым ключем и именем метода
  3. любое количество, но не будут выполняться два задания с одинаковым ключем и наименованием
  4. любое количество, но не будут выполняться два задания с одинаковым ключем и связанные с одним и тем же объектом метаданных
Правильный ответ шестой. Ключ - свойство регламентного задания, которое позволяет сгруппировать несколько однотипных заданий. Одновременно может быть запущено только одно задание с одним значением ключа (пустое значение не в счет). Также, одновременно исполняется только одно рег.задание над конкретным объектом, во избежание коллизий.
Вопрос 09.62 экзамена 1С:Профессионал по платформе. В качестве метода регламентного задания может использоваться процедура у которой:
  1. не должно быть параметров
  2. может быть только один параметр (список значений)
  3. может быть только один параметр (структура)
  4. может быть только один параметр (массив)
  5. может быть любое количество параметров
Правильный ответ пятый. Число параметров метода регламентного задания соответствует числу параметров самого регламентного задания.
Вопрос 09.63 экзамена 1С:Профессионал по платформе. Для создания регламентного задания пользователь должен обладать:
  1. правами администратора
  2. правами на использование данного объекта конфигурации (настраивается в роли)
  3. правами на создание новых экземпляров данного объекта конфигурации (настраивается в роли)
  4. любыми правами, метод регламентного задания исполняется в привилегированном режиме
Правильный ответ первый, только администраторы вправе.
Вопрос 09.64 экзамена 1С:Профессионал по платформе. Если регламентное задание определено в конфигураторе (в соответствующем объекте конфигурации) как предопределенное, то для него характерно (выберите наиболее полный ответ):
  1. нельзя создать не предопределенный экземпляр регламентного задания с привязкой к объекту метаданных предопределенного регламентного задания
  2. предопределенный экземпляр регламентного задания нельзя пометить на удаление и удалить
  3. только предопределенные экземпляры регламентных заданий хранятся в информационной базе, не предопределенные экземпляры являются сеансовыми объектами и в базе не хранятся
  4. верны ответы 1 и 2
  5. верны ответы 2 и 3
  6. верны ответы 1, 2, 3
Правильный ответ второй. Предопределенные экземпляры регламентных заданий можно изменять, но нельзя удалять. Они всегда будут доступны в списке шаблонов:
Вопрос 09.67 экзамена 1С:Профессионал по платформе. Если в качестве метода регламентного задания используется функция, то:
  1. возвращаемое функцией значение игнорируется
  2. при попытке исполнения задания возникает ошибка
  3. система будет ожидать исполнения данного задания (исполнение будет происходить не асинхронно)
  4. значение будет возвращено в соответствующий параметр регламентного задания
Правильный ответ первый.
Вопрос 09.61 экзамена 1С:Профессионал по платформе. Как могут быть связаны между собой регламентные и фоновые задания?
  1. Регламентное задание может породить фоновое задание
  2. Регламентное задание в обязательном порядке порождает фоновое задание
  3. Фоновое задание в обязательном порядке порождает регламентное задание
  4. Нет никакой взаимосвязи
Правильный ответ второй - фоновое задание это объект, порождаемый регламентным, и он обязательнем к созданию, иначе само регламентное задание теряет смысл.
Вопрос 09.65 экзамена 1С:Профессионал по платформе. Для обеспечения работы регламентных и фоновых заданий необходимо:
  1. наличие запуска 1С:Предприятие с установленным при запуске флагом "Планировщик"
  2. наличие запуска 1С:Предприятие с периодически исполняющимся соответствующим методом системы
  3. наличие запуска 1С:Предприятие с периодически исполняющимся соответствующим методом системы (но только в файловом варианте функционирования системы)
  4. как в файловом, так и в клиент-серверном вариантах нет необходимости в запуске экземпляра 1С:Предприятие
На практике, правильный ответ третий. В клиент-серверном варианте работы запуск регламентных заданий по расписанию осуществляет менеджер кластера. Таким образом, даже если с информационной базой не установлено ни одного клиентского соединения, регламентные задания будут выполняться (при условии, что они не запрещены для конкретной информационной базы). В файловом варианте работы для автоматического запуска регламентных заданий необходимо наличие выделенного клиентского соединения, используемого в качестве планировщика заданий. В этом соединении должна быть запущена обработка ожидания, с некоторой периодичностью выполняющая вызов метода встроенного языка ВыполнитьОбработкуЗаданий().
По ответам, верный ответ четвертый.
Вопрос 09.57 экзамена 1С:Профессионал по платформе. Фоновые задания позволяют:
  1. выполнять процедуру по расписанию
  2. выполнять процедуру асинхронно
  3. производить перезапуск в случае аварийного завершения
  4. верны ответы 1 и 2
  5. верны ответы 2 и 3
  6. верны ответы 1, 2, 3
Правильный ответ второй. Асинхронно - значит, не дожидаясь завершения процедуры.
Вопрос 09.58 экзамена 1С:Профессионал по платформе. Количество одновременно запущенных фоновых заданий может быть:
  1. любым без ограничения
  2. только одно задание на информационную базу
  3. только по одному заданию на пользовательский сеанс
  4. любое количество, но нельзя запустить два задания с одинаковым ключем и именем метода
  5. любое количество, но нельзя запустить два задания с одинаковым ключем и наименованием
  6. любое количество, но нельзя запустить два задания с одинаковым ключем и связанные с одним и тем же объектом метаданных
Правильный ответ четвертый.
Вопрос 09.66 экзамена 1С:Профессионал по платформе. Завершившиеся фоновые задания:
  1. сохраняется в информационной базе
  2. являются сеансовыми объектами, хранятся некоторое время (в информационной базе не сохраняются)
  3. не хранятся ни в каком виде
Правильный ответ шестой - фоновое задание это объект встроенного языка.который существует только на время сеанса.

1 Механизм заданий
2 Фоновые задания
3 Регламентные задания
4 Особенности выполнения фоновых заданий файловом и клиент-серверном вариантах
5 Создание метаданных регламентного задания
6 Консоль заданий
7 Работа с регламентными заданиями
7.1 Объекты заданий
7.2 Получение списка заданий
7.3 Создание
7.4 Удаление
7.5 Получение объекта задания

Механизм заданий

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

Механизм заданий решает следующие задачи:

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

Механизм заданий состоит из следующих компонентов:

  • Метаданных регламентных заданий;
  • Регламентных заданий;
  • Фоновых заданий;
  • Планировщика заданий.

Фоновые задания - предназначены для выполнения прикладных задач асинхронно. Фоновые задания реализуются средствами встроенного языка.

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

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

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

Фоновые задания

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

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

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

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

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

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

Завершившиеся успешно или аварийно фоновые задания хранятся в течение суток, а потом удаляются. Если количество выполнившихся фоновых заданий превышает 1000, то наиболее старые фоновые задания также удаляются.

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

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

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

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

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

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

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

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

Расписание регламентного задания определяет, в какие моменты времени регламентное задание должно быть запущено. Расписание позволяет задавать: дату и время начала и окончания выполнения задания, период выполнения, дни недели и месяцы, по которым нужно выполнять регламентное задание и др. (см. описание встроенного языка).

Примеры расписаний регламентных заданий:

Каждый час, только один день

ПериодПовтораДней = 0, ПериодПовтораВТечениеДня = 3600

Каждый день один раз в день

ПериодПовтораДней = 1, ПериодПовтораВТечениеДня = 0

Один день, один раз

ПериодПовтораДней = 0

Через день один раз в день

ПериодПовтораДней = 2

Каждый час с 01.00 до 07.00 каждый день

ПериодПовтораДней = 1
ПериодПовтораВТечениеДня = 3600
ВремяНачала = 01.00
ВремяКонца = 07.00

Каждую субботу и воскресенье в 09.00

ПериодПовтораДней = 1
ДниНедели = 6, 7
ВремяНачала = 09.00

Каждый день одну неделю, неделя пропуска

ПериодПовтораДней = 1
ПериодНедель = 2

В 01.00 один раз

ВремяНачала = 01.00

Последнее число каждого месяца в 9:00.

ПериодПовтораДней = 1
ДеньВМесяце = -1
ВремяНачала = 09.00

Пятое число каждого месяца в 9:00

ПериодПовтораДней = 1
ДеньВМесяце = 5
ВремяНачала = 09.00

Вторая среда каждого месяца в 9:00

ПериодПовтораДней = 1
ДеньНеделиВМесяце = 2
ДниНедели = 3
ВремяНачала = 09.00

Можно проверять, выполняется ли задание для заданной даты (метод ТребуетсяВыполнение объекта РасписаниеРегламентныхЗаданий). Регламентные задания всегда выполняются о имени определенного пользователя. Если пользователь регламентного задания не указан, то выполнение происходит от имени пользователя по умолчанию, имеющего административные права.

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

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

Важно помнить что Время конца не обязательно завершит фоновое задание в указанное время. Некоторые утверждения:
* Фоновое задание может проигнорировать свою автоматическую отмену, если оно не зависло, а продолжает работать по той причине,
что не все операции платформы можно отменить. Если выполняется циклический код встроенного языка, то задание отменить
можно в противном случае нет. Все зависит от того, что делает задание.
* Время конца - граница, в пределах которой задание может запускаться, а не завершаться?
* Принудительное завершение задания откатывает внесённые изменения к моменту начала транзакции?

Особенности выполнения фоновых заданий файловом и клиент-серверном вариантах

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

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

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

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

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

  • На информационную базу установлена явная блокировка регламентных заданий. Блокировка может быть установлена через консоль кластера;
  • На информационную базу установлена блокировка соединения. Блокировка может быть установлена через консоль кластера;
  • Из встроенного языка вызван метод УстановитьМонопольныйРежим() с параметром Истина;
  • В некоторых других случаях (например, при обновлении конфигурации базы данных).

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

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

Для создания объекта метаданных регламентного задания в дереве конфигурации в ветке «Общие» для ветки «Регламентные задания» выполните команду «Добавить» и в палитре свойств заполните следующие свойства регламентного задания:

Имя метода - указывается имя метода регламентного задания.

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

Расписание - указывается расписание регламентного задания. Для формирования расписания щелкните ссылку «Открыть» и в открывшейся форме расписания установите нужные значения.

На закладке «Общее» указываются дата начала и завершения задания и режим повтора.

На закладке «Дневное» указывается дневное расписание задания.

Укажите расписание:

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

Допускается указание произвольного сочетания условий.

На закладке «Недельное» указывается недельное расписание задания.

Установите флажки по тем дням недели, по которым задание будет выполняться. Если требуется повторять задание, укажите интервал повтора в неделях. Например, задание выполняется через 2 недели, значение повтора – 2.

На закладке «Месячное» указывается месячное расписание задания.

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

Использование - если установлено, то задание будет выполняться согласно расписанию.

Предопределенное - если установлено, то задание является предопределенным заданием.

Количество повторов при аварийном завершении - указывает количество повторов при аварийном завершении.

Интервал повтора при аварийном завершении - указывает интервал повтора при аварийном завершении. Примеры

Создание фонового задания «Обновление индекса полнотекстового поиска»:

ФоновыеЗадания.Выполнить("ОбновлениеИндексаПолнотекстовогоПоиска");

Создание регламентного задания «Восстановление последовательностей»:

Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ПериодПовтораДней = 1;
Расписание.ПериодПовтораВТечениеДня = 0;

Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ВосстановлениеПоследовательностей");
Задание.Расписание = Расписание;
Задание.Записать();

Консоль заданий

Обработка с ИТС, осуществляет управление регламентными заданиями: КонсольЗаданий.epf

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

Объекты заданий

Объекты заданий не являются ссылочными, но хранятся в базе данных в каком-то специальном хранилище.

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

Если флаг "Предопределенное" не установлен, то объекты такого задания создаются и удаляются программно, с указанием расписания и параметров.

Получение списка заданий

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

МенеджерРегламентныхЗаданий (ScheduledJobsManager)

ПолучитьРегламентныеЗадания (GetScheduledJobs)

Синтаксис:

ПолучитьРегламентныеЗадания(<Отбор>)

Параметры:

<Отбор> (необязательный)

Тип: Структура. Структура, задающая отбор. Значениями структуры могут быть: УникальныйИдентификатор, Ключ, Метаданные, Предопределенное, Использование, Наименование. Если отбор не задан, получаются все регламентные задания.

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

Возвращаемое значение:

Тип: Массив.

Описание:

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

Доступность:

Для Каждого Регламентное из Регламентные Цикл
НоваяСтрока = СписокРегламентныхЗаданий.Добавить();
НоваяСтрока.Метаданные = Регламентное.Метаданные.Представление();
НоваяСтрока.Наименование = Регламентное.Наименование;
НоваяСтрока.Ключ = Регламентное.Ключ;
НоваяСтрока.Расписание = Регламентное.Расписание;
НоваяСтрока.Пользователь = Регламентное.ИмяПользователя;
НоваяСтрока.Предопределенное = Регламентное.Предопределенное;
НоваяСтрока.Использование = Регламентное.Использование;
НоваяСтрока.Идентификатор = Регламентное.УникальныйИдентификатор;

ПоследнееЗадание = Регламентное.ПоследнееЗадание;
Если ПоследнееЗадание Неопределено Тогда
НоваяСтрока.Выполнялось = ПоследнееЗадание.Начало;
НоваяСтрока.Состояние = ПоследнееЗадание.Состояние;
КонецЕсли;
КонецЦикла;

Создание

Создается методом СоздатьРегламентноеЗадание менеджера регламентных заданий:

РегламентноеЗадание = РегламентныеЗадания.СоздатьРегламентноеЗадание(МетаданныеВыбор);

РегламентноеЗадание.Наименование = Наименование;
РегламентноеЗадание.Ключ = Ключ;
РегламентноеЗадание.Использование = Использование;
РегламентноеЗадание.ИмяПользователя = ПользователиВыбор;
РегламентноеЗадание.КоличествоПовторовПриАварийномЗавершении = КоличествоПовторовПриАварийномЗавершении;
РегламентноеЗадание.ИнтервалПовтораПриАварийномЗавершении = ИнтервалПовтораПриАварийномЗавершении;
РегламентноеЗадание.Расписание = Расписание;
РегламентноеЗадание.Записать();

ОбъектЗадания = РегламентныеЗадания.СоздатьРегламентноеЗадание("ВыполнениеОбмена");

ОбъектЗадания.Наименование = Наименование;
ОбъектЗадания.Использование = Истина;

Объект задания имеет поле "Параметры", в котором задаются параметры метода:

РегламентноеЗадание (ScheduledJob)

Параметры (Parameters)

Использование:

Чтение и запись.

Описание:

Тип: Массив. Массив параметров регламентного задания. Количество и состав параметров должен соответствовать параметрам метода регламентного задания.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Примечание:

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

Удаление

Удаляется методом Удалить() объекта задания:

РегламентноеЗадание.Удалить();

Получение объекта задания

  • списком через метод ПолучитьРегламентныеЗадания:
    Регламентные = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);
  • через метод НайтиПоУникальномуИдентификатору менеджера заданий:
    Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(УИД);

[необходимо зарегистрироваться для просмотра ссылки]

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

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

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

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

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

При синхронном выполнении у приложения есть только один поток. С помощью асинхронной модели программирования вы можете запускать множество параллельных потоков и во время их выполнения реагировать на новые действия пользователя. После того как 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» незначительно увеличивает трудоемкость решения задач для разработчика, но заметно улучшает функциональность программы с точки зрения пользователя.

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

Недавно я разместил статью: пришло время это автоматизировать:

Регламентные и фоновые задания

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

Механизм заданий решает следующие задачи:

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

Механизм заданий состоит из следующих компонентов:

  • Метаданных регламентных заданий;
  • Регламентных заданий;
  • Фоновых заданий;
  • Планировщика заданий.

Фоновые задания & предназначены для выполнения прикладных задач асинхронно. Фоновые задания реализуются средствами встроенного языка.

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

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

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

С описанием, думаю, хватит - приступим к реализации:

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

Имя метода – путь к процедуре, которая будет выполняться в фоновом задании по заданному расписанию. Процедура должна находиться в общем модуле. Рекомендуется не использовать типовые общие модули, а создать свой. Не забудьте, что фоновые задания исполняются на сервере!

Использование – признак использования регламентного задания.

Предопределенное – указывает, является ли регламентное задание предопределенным.

Если хотите что бы регламентное задание заработало сразу после помещения в БД, укажите признак Предопределенное . В противном случае вам необходимо будет использовать обработку “Консоль заданий” или вызывать запуск задания программно.

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

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

Настройка расписания

Расписание выполнения задания:

Каждый час, только один день ПериодПовтораДней = 0, ПериодПовтораВТечениеДня = 3600
Каждый день один раз в день ПериодПовтораДней = 1, ПериодПовтораВТечениеДня = 0
Один день, один раз ПериодПовтораДней = 0
Через день один раз в день ПериодПовтораДней = 2
Каждый час с 01.00 до 07.00 каждый день ПериодПовтораДней = 1ПериодПовтораВТечениеДня = 3600ВремяНачала = 01.00

ВремяКонца = 07.00

Каждую субботу и воскресенье в 09.00 ПериодПовтораДней = 1ДниНедели = 6, 7ВремяНачала = 09.00
Каждый день одну неделю, неделя пропуска ПериодПовтораДней = 1ПериодНедель = 2
В 01.00 один раз ВремяНачала = 01.00
Последнее число каждого месяца в 9:00. ПериодПовтораДней = 1ДеньВМесяце = -1ВремяНачала = 09.00
Пятое число каждого месяца в 9:00 ПериодПовтораДней = 1ДеньВМесяце = 5ВремяНачала = 09.00
Вторая среда каждого месяца в 9:00 ПериодПовтораДней = 1ДеньНеделиВМесяце = 2ДниНедели = 3

ВремяНачала = 09.00

Особенности выполнения фоновых заданий файловом и клиент-серверном вариантах

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

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

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

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

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

  • На информационную базу установлена явная блокировка регламентных заданий. Блокировка может быть установлена через консоль кластера;
  • На информационную базу установлена блокировка соединения. Блокировка может быть установлена через консоль кластера;
  • Из встроенного языка вызван метод УстановитьМонопольныйРежим() с параметром Истина;
  • В некоторых других случаях (например, при обновлении конфигурации базы данных).

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

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

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

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

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

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

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

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

Рис.2

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

Рис.3

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

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

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

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

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

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

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

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

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

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

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

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

Рис.4

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

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

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

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

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