Общие требования к регламентным заданиям
Область применения: управляемое приложение, обычное приложение.
1. В общем случае, регламентные задания следует использовать, когда необходимо выполнить определенные периодические или однократные действия в соответствии с расписанием.
2. При этом если регламентные задания не требуется добавлять или удалять в зависимости от действий пользователя или логики конфигурации, следует использовать предопределенные регламентные задания. Такие задания автоматически создаются в информационной базе с тем расписанием и состоянием, которое было задано разработчиком в Конфигураторе. Примеры предопределенных регламентных заданий:
- загрузка курсов валют;
- извлечение текста для полнотекстового индексирования;
- обновление агрегатов.
3.1. Недопустимо выполнять регламентные задания, если соответствующая им функциональность отключена в программе. Иначе регламентные задания будут приводить к запускам сеансов, занимая вычислительные ресурсы сервера 1С:Предприятие. Для этого необходимо программно управлять признаком предопределенного регламентного задания Использование в зависимости от включенных функциональных опций (ФО).
Например, имеем регламентное задание ПолучениеИОтправкаЭлектронныхПисем (с установленным флажком Использование ), которое должно выполняться только в том случае, если установлена ФО ИспользоватьПочтовыйКлиент .
Неправильно: создавать предопределенное регламентное задание, зависящее от ФО, с установленным флажком Использование .
Правильно: снять флажок Использование и управлять использованием регламентного задания в зависимости от включения/выключения функциональной опции.
Если в конфигурации используется подсистема «Регламентные задания» Библиотеки стандартых подсистем (БСП), то для такой настройки следует использовать процедуру ПриОпределенииНастроекРегламентныхЗаданий общего модуля РегламентныеЗаданияПереопределяемый . Например:
Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.ОбновлениеСтатусовДоставкиSMS;
Настройка.ФункциональнаяОпция = Метаданные.ФункциональныеОпции.ИспользоватьПочтовыйКлиент;
Настройка.ДоступноВМоделиСервиса = Ложь;
После чего в состав определяемого типа МестоХраненияФункциональныхОпций необходимо добавить константы, соответствующие функциональным опциям, используемым для управления регламентными заданиями.
Для конфигураций без БСП следует управлять использованием регламентного задания, разместив, например, в модуле менеджера значения константы ИспользоватьПочтовыйКлиент следующий код:
Если Задание.Использование <> Значение Тогда
Задание.Использование = Значение;
Задание.Записать();
КонецЕсли;
3.2. Дополнительно следует обезопасить выполнение регламентного задания, включенного через консоль или другим способом, минуя включение ФО, вставив в начало процедуры обработки регламентного задания следующий код:
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();
Если НЕ ПолучитьФункциональнуюОпцию(«ИспользоватьПочтовыйКлиент») Тогда
ВызватьИсключение НСтр(«ru = ‘Регламентное задание недоступно по функциональным опциям.'»);
КонецЕсли;
Если в конфигурации используется подсистема «Регламентные задания» БСП и настроены зависимости регламентных заданий от ФО (как указано в п.3.1), то вместо этого достаточно вставить вызов, как показано в п.6.
4.1. Если выполнение регламентного задания зависит от данных информационной базы, то флажок Предопределенное у регламентного задания следует отключать.
Например:
- обмен данными с другими информационными базами должен проводиться с каждой базой по индивидуальному расписанию;
- запуск каждой дополнительной обработки в базе требуется выполнять по отдельному расписанию.
В этих случаях требуется создавать экземпляры регламентных заданий и параметризовать их объектами ИБ (например, узлами ИБ, элементами справочника Дополнительные обработки и т.п.) из кода на встроенном языке с помощью метода РегламентныеЗадания . СоздатьРегламентноеЗадание . При этом в свойстве Наименование необходимо указывать представление объекта, на основании которого создается регламентное задание. Например, есть рассылка отчетов (элемент справочника), расписание, которое было настроено в карточке рассылки и ее автор, тогда добавление на основании нее регламентного задания будет выглядеть так:
// Снимаем ограничение, что только администратор может создавать регламентные задания.
УстановитьПривилегированныйРежим(Истина);
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.РассылкаОтчетов);
ПараметрыЗадания = Новый Массив;
ПараметрыЗадания.Добавить(РассылкаОтчетов);
Задание.Параметры = ПараметрыЗадания;
Задание.ИмяПользователя = АвторРассылки;
Задание.Использование = Истина;
Задание.Наименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр(«ru = ‘Рассылка отчетов: %1′»), СокрЛП(РассылкаОтчетов);
Задание.Расписание = РасписаниеРассылки;
Задание.Записать();
4.2. Если в конфигурации используется подсистема «Регламентные задания» БСП, то необходимо также запрещать интерактивное создание и запуск параметризованных регламентных заданий из формы Регламентные и фоновые задания . Для этого необходимо указать такое задание в процедуре ПриОпределенииНастроекРегламентныхЗаданий общего модуля РегламентныеЗаданияПереопределяемый . Например:
Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.РассылкаОтчетов;
Настройка.Параметризуется = Истина;
Также выполнить п.6.
5. Во избежание различных конфликтных ситуаций рекомендуется в копиях информационной базы автоматически блокировать все регламентные задания, обращающиеся к внешним ресурсам (рассылка почты, синхронизация данных с другими программами и т.п.). Например, если копия информационной базы была развернута для тестирования или передана в службу технической поддержки.
Если в конфигурации используется подсистема «Регламентные задания» БСП, то для этого необходимо перечислить такие задания в процедуре ПриОпределенииНастроекРегламентныхЗаданий общего модуля РегламентныеЗаданияПереопределяемый . Например:
Настройка = Настройки.Добавить();
Настройка.РегламентноеЗадание = Метаданные.РегламентныеЗадания.РассылкаОтчетов;
Настройка.РаботаетСВнешнимиРесурсами = Истина;
В этом случае при перемещении информационной базы администратору будет задан вопрос об отключении таких заданий.
6. Если регламентное задание попадает под требования, описанные в пунктах 3.1, 4.2, 5 и используется подсистема «Регламентные задания» БСП, то вначале процедур обработчиков таких заданий необходимо помещать вызов:
Первый параметр при этом заполнять обязательно.
См. также
- Настройка расписания регламентных заданий
- Запуск регламентных заданий
- Регламентные задания: требования по локализации
- Ограничения на регламентные задания при работе в режиме сервиса
Регламентное задание
Регламентные задания — это общие объекты конфигурации. Они являются частью механизма заданий и позволяют автоматически выполнять процедуры на встроенном языке по расписанию.

Для каждого регламентного задания может быть задано расписание, в соответствии с которым регламентное задание будет автоматически запущено на исполнение. В системе 1С:Предприятие 8 поддерживаются однократные и периодические расписания. Можно задать дату начала и окончания выполнения, дневное, недельное и месячные расписания. Расписание можно задать как на этапе конфигурирования, так и на этапе выполнения (в режиме 1С:Предприятие).

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

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

Впрочем, все это придумано больше для удобства разработчиков платформы. Понятно, что если у вас есть точка входа, тогда вы можете вызывать любой код на сервере. Вот, например, как это делают в типовой конфигурации Бухгалтерия предприятия редакция 3
Процедура ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки = Неопределено, АдресРезультата = Неопределено) Экспорт Если Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено Тогда Обработки["ЗагрузкаКурсовВалют"].ЗагрузитьАктуальныйКурс(ПараметрыЗагрузки, АдресРезультата); КонецЕсли; КонецПроцедуры
Если вы раньше имели дело с расписаниями в других системах, то вы не найдете здесь для себя ничего нового. Расписание, как расписание.

О чем имеет смысл сказать, так это об этих двух опциях: Использование и Предопределенное. Новички тут часто спотыкаются, потому что за этими опциями кроется логика, не воспринимаемая на интуитивном уровне.

Можно догадаться, что Использование отвечает за включение и выключение регламентного задания. Тут сразу возникают вопросы. Зачем создавать в метаданных выключенное регламентное задание? И как оно потом включается? Только в конфигураторе? Или есть возможность включать и выключать задания из пользовательского режима программно?
В дереве метаданных мы видим список регламентных заданий. Казалось бы, все, что нам нужно для запуска задания в работу это создать его, указать точку входа в код (какую-нибудь экспортную процедуру общего модуля), настроить расписание и не забыть поставить галочку Использование. Интуиция подсказывает нам, что если мы создали что-то и взвели галочку использования, то это должно работать.
Но, нет. Тут мы сталкиваемся с контринтуитивным моментом. Дело в том, что список регламентных заданий, который мы видим в режиме конфигуратора, это на самом деле список шаблонов регламентных заданий. И для того, чтобы созданное в конфигураторе регламентное задание заработало в пользовательском режиме, надо его создать из шаблона. Если в режиме конфигуратора у созданного вами регламентного задания (которое на самом деле не задание, а шаблон задания) установить опцию Предопределенное, тогда в пользовательском режиме создавать задание из шаблона не требуется, оно будет создано автоматически в момент применения конфигурации к базе данных.
Если вы до сих пор не запутались, тогда вот вам еще. Получается, что у нас есть список шаблонов регламентных заданий в конфигураторе. В пользовательском режиме мы можем создавать работающие регламентные задания из шаблонов. Причем из одного шаблона можно создать множество работающих регламентных заданий. А чтобы такого не происходило (действительно, что может быть хорошего во множестве однотипных регламентных заданий?) вы можете в режиме конфигуратора указать ключ регламентного задания. Хотя, как по мне, то для того , чтобы этого не происходило было бы достаточно «не городить огород» там, где в нем нет необходимости.
В отличие от, например, справочников или документов у регламентных заданий нет «встроенной» визуализации. Чтобы в пользовательском режиме посмотреть на список регламентных заданий в типовых конфигурациях надо перейти в соответствующий раздел «Администрирование». В нетиповых следует пользоваться т.н. библиотекой стандартных подсистем. Если нет желания в нее погружаться, можно сделать свою визуализацию. Это не займет много времени (есть объект под названием МенеджерРегламентныхЗаданий, а у него есть метод ПолучитьРегламентныеЗадания() ).
Для обычных форм такая визуализация есть на сайте ИТС
можно «подсмотреть» как это работает.
Зачем это нужно
Без регламентных заданий нам не обойтись, если мы решаем в том или ином виде задачи интеграции. Мы принимаем данные в 1С и отправляем данные из 1С. И конечно нам хотелось бы. чтобы это происходило по расписанию.
И это наиболее очевидный способ применения регламентных заданий. Но, хорошего специалиста в любой области отличает знание вещей, которые менее очевидны.
Дайте пользователю отчет и он захочет его улучшить для себя. Потом еще раз улучшить. И на каждом шаге это будет означать существенное усложнение, и как следствие, замедление. Это, хоть и не обязательно, но имеет высокую вероятность. Изначально приемлемо быстрый отчет работает все медленнее и медленнее. Возникает вопрос, как бы получить и то, и другое. И прежнюю скорость, и новую сложность. Регламентные задания позволяют это сделать! Идея заключается в том, чтобы готовить «тяжелые» отчеты заранее, по расписанию. А когда пользователь захочет получить такой отчет, выдавать ему уже готовый.
Можно пойти и дальше. Зачастую мы используем отчеты для того, чтобы контролировать какие-либо процессы. Сравниваем что стало с тем, что было и смотрим, чтобы это не выходило за определенные рамки. И здесь было бы неплохо, если бы кто-то или что-то делало за нас эту скучную работу. Регламентные задания походят для этого как нельзя лучше. Вообще, существует такая крайняя точка зрения, что отчеты не нужны вовсе, а если они присутствуют в приложении, значит его недостаточно хорошо продумали. Объясняется это тем, что человек все равно не в состоянии воспринимать тот объем информации, который ему выдают в отчетах. Поэтому для людей в приложении должны быть боты-помощники (и тут нам понадобятся регламентные задания), а для сторонних приложений должен быть хорошо продуманный API.
Заключение
Регламентные задания довольно простой, если не обращать внимание на описанные выше сложности, и при этом очень эффективный инструмент. С его помощью вы сможете придать своему решению современный вид.
Напоследок хочу порекомендовать вам бесплатный вебинар, в рамках которого преподаватели из OTUS расскажут про основные возможности EDT и научат вас вести через EDT разработку.
Регламентные и фоновые задания в 1С 8.3
Для начала давайте разберемся, что собой представляют фоновые и регламентные задания в 1С 8.3. Регламентные задания в 1С 8.3 – это механизм (объект метаданных 1С) созданный для выполнения задач по расписанию.
Фоновое задание в 1С 8.3 – это процесс, созданный путем запуска регламентного задания, который выполняет описанный в нем алгоритм.
Говоря простым языком, эти два объекта не могут существовать один без другого. Регламентное задание в 1С 8.3 является триггером (условием) запуска фоновых заданий. Также регламентные задания в 1С 8.3 можно сравнить с планировщиком заданий Windows, только триггером в данном случае является время.
Рассмотрим структуру регламентного задания в 1С 8.3:
Рисунок 1. Окно конфигурации Регламентные задания находятся в разделе Общие, основного дерева конфигурации 1С. Для добавления нового регламентного задания нужно воспользоваться кнопкой «Добавить» в группе регламентных заданий.
Для примера возьмем регламентное задание «Выполнение задач по почте» конфигурации «Документооборот» 2.1.
Рисунок 2. Окно настроек регламентного задания Имя – имя регламентного задания для конфигуратора. Синоним – наименование для пользователя, которое пользователь видит в обработке «Регламентные и фоновые задания» 1С 8.3
Имя метода – путь к Процедуре, которая будет выполняться по расписанию. Следует отметить несколько нюансов при создании такой функции:
1) Процедура обязательно должна находиться в общем модуле 1С 2) Общий модуль 1Сдолжен быть с директивой «Сервер». 3) Процедура обязательно должна быть экспортной процедурой
Ключ – свойство, которое позволяет формально группировать несколько регламентных заданий 1С 8.3, а также позволяет разграничить однотипные задания. Если есть несколько заданий с одинаковым ключом, они будут выполняться последовательно. В результате в разрезе группы в один промежуток времени может выполняться одно задание из каждой группы. Следует учитывать, что если Ключ не заполнен, он не учитывается.
Расписание – это настройка, которая позволяет настроить периоды выполнения задания по времени.
Рисунок 3. Окно настроек расписания
В данной настройке мы можем задать периоды, когда регламентное задание в 1С 8.3 будет выполняться.
Использование – признак того, будет ли выполняться данное регламентное задание. Повтор при аварийном завершении – повторный запуск регламентного задания. Сбой может произойти, если в результате выполнения регламентного задания сработало исключение, либо когда происходит перезапуск сервера.
2. Управление регламентными заданиями в 1С 8.3
Для управления регламентными заданиями в типовых конфигурациях, использующих библиотеку стандартных подсистем, присутствует обработка «Регламентные и фоновые задания»:
Рисунок 4. Окно обработки «Регламентные и фоновые задания»
В данной обработке мы видим, какие задания включены, т.е. которые будут выполнены по регламенту.
Наименование – синоним регламентного задания 1С 8.3 из конфигуратора. Состояние — задача выполнена, выполняется, выполнена с ошибками. В данном случае выводится ошибка из журнала регистрации.
Дата окончания — дата фактически оконченного задания. Показывает даты только тех заданий, которые были выполнены в прошлом. При двойном клике на регламентном задании в 1С 8.3 мы можем открыть его свойства.
Рисунок 5. Окно настроек регламентного задания
В свойствах мы можем поменять его расписание. В данном случае эта настройка будет считаться актуальнее той, которая задана в конфигураторе. А также указать пользователя, под которым выполняется регламентное задание (это целесообразно для файлового варианта базы, об этом мы поговорим далее). В большинстве случаев этот пользователь должен иметь права администратора, чтобы процедура, выполняемая в фоновом задании, не имела ограничений.
3. Особенности работы в файловой и клиент-серверной базах
Следует также отметить особенности работы регламентных задний в файловой и клиент-серверной базах.
1С 8.3 Файловая база — база находится в папке на сервере. Регламентные задания работают, пока есть хотя бы один работающий сеанс. Если все пользователи выходят из 1С – регламентные задания прекращают свою работу. В данном случае есть несколько вариантов решения данной проблемы. Использовать планировщик операционной системы, чтобы он запускал обработку, которая актуализирует работу фоновых заданий. В обработке нужно при открытии указать выполнение функции «ВыполнитьОбработкуЗаданий();».
Клиент-серверная база – в данном варианте для выполнения фоновых заданий существует отдельный пользователь. Поскольку серверная база работает постоянно, то и регламентные задания работают независимо от количества человек в базе. Регламентные задания выполняются под учетной записью пользователя Windows, который запустил сервер 1С.
В данной статье мы рассмотрели регламентные и фоновые задания, как их создавать, настраивать, контролировать, а также особенности их работы в разных архитектурах 1С. Специалист компании ООО «Кодерлайн» Сергей Кулажевский.