Регламентное задание в 1С 8.3: включаем готовое, пишем своё и ставим расписание
Содержание
Готовую регламентную операцию в 1С 8.3 включают без программиста: Администрирование → Обслуживание, группа «Регламентные операции», ссылка Регламентные и фоновые задания. Откройте нужное задание, поставьте флажок включения и задайте расписание. Новое задание, которого нет в типовой, создают только в конфигураторе: объект метаданных плюс экспортная процедура в серверном общем модуле.
Курсы валют, которые не загрузились к утру, обмен с сайтом, застрявший на вчерашнем дне, полнотекстовый поиск, который ничего не находит, — обычно это одна причина: регламентное задание выключено, не имеет расписания или не может запуститься. Пути меню ниже одинаковы для 1С:Бухгалтерии 3.0, ЗУП 3.1 и УТ 11: эти конфигурации построены на общей библиотеке стандартных подсистем (БСП). Механизм самих заданий — платформенный, общий для любой конфигурации на 8.3.
Регламентные операции и регламентные задания: о чём речь
Регламентное задание — это процедура, которую платформа 1С запускает сама, по расписанию, без участия пользователя. Каждое задание описано в конфигурации отдельным объектом метаданных в ветке Общие → Регламентные задания.
Типичные задания в типовых конфигурациях:
- 💱 загрузка курсов валют;
- 🏦 обновление классификатора банков;
- 🔄 синхронизация данных и обмены по расписанию;
- 🔍 обновление индекса полнотекстового поиска ;
- 📨 получение и отправка почты, документов ЭДО;
- 🧹 удаление устаревших данных, очистка журнала регистрации.
В Бухгалтерии словом «регламентные операции» называют ещё и операции закрытия месяца: начисление амортизации, переоценку валюты, закрытие счетов затрат. Это обычные документы, их проводят в обработке «Закрытие месяца». К расписанию и фоновому выполнению они отношения не имеют.
У задания есть два вида экземпляров:
| Вид | Сколько бывает | Кто создаёт | Пример |
|---|---|---|---|
| Предопределённое | ровно одно на объект метаданных | платформа при обновлении базы | загрузка курсов валют |
| Непредопределённое | сколько угодно | программный код | отдельное задание на каждую учётную запись почты |
Предопределённое задание удалить нельзя, только выключить. Непредопределённые создаёт и удаляет сама конфигурация, когда вы, например, добавляете новый узел обмена.
Что нужно проверить до настройки
Перед тем как трогать задания, выясните три вещи.
1. Права. Список регламентных заданий в пользовательском режиме доступен с полными правами или с ролью администратора системы. Рядовой бухгалтер ссылку в разделе «Обслуживание» обычно не видит. Чтобы создать новый объект метаданных, нужен доступ к конфигуратору и снятая с поддержки (или открытая для изменения) конфигурация.
2. Вариант работы базы. Это главное, что определяет, будут ли задания вообще выполняться.
| Вариант | Кто запускает задания | Что нужно |
|---|---|---|
| Клиент-серверный | кластер серверов 1С, сам по себе | снят флажок «Блокировка регламентных заданий включена» в свойствах базы в консоли кластера |
| Файловый | один из открытых клиентских сеансов | должен быть запущен хотя бы один сеанс 1С с этой базой |
В файловой базе ночью, когда все вышли из программы, ничего не выполнится. Для надёжного запуска держат отдельный сеанс на компьютере, который не выключают. Сеансу можно явно разрешить выполнение заданий параметром запуска /AllowExecuteScheduledJobs -Force.
3. Пользователь, от имени которого работает задание. В карточке задания указывают пользователя информационной базы. От его прав зависит, что задание сможет прочитать и записать. Заведите отдельного служебного пользователя, например Регламент, а не используйте учётную запись сотрудника: уволится человек, отключат вход — и обмены встанут.
Как включить регламентную операцию в пользовательском режиме
Этот способ подходит для любого задания, которое уже есть в конфигурации.
Шаг 1. Откройте список заданий
Перейдите в Администрирование → Обслуживание. В группе «Регламентные операции» нажмите Регламентные и фоновые задания. Откроется форма с двумя закладками: регламентные задания и фоновые задания.
Шаг 2. Найдите задание
Список длинный, в БП 3.0 там несколько десятков строк. Воспользуйтесь строкой поиска формы: введите слово из названия, например «курс» или «банк». В колонках видно, включено ли задание, когда оно последний раз завершилось и с каким результатом.
Шаг 3. Включите и настройте
Откройте задание двойным щелчком. В карточке:
- Поставьте флажок включения.
- Укажите пользователя, от имени которого задание будет работать.
- Нажмите ссылку с расписанием и задайте периодичность (подробно — в следующем разделе).
- Нажмите
Записать и закрыть.
Шаг 4. Проверьте запуск вручную
Выделите задание в списке и нажмите Выполнить сейчас. На закладке фоновых заданий появится строка со статусом. Если задание завершилось с ошибкой, текст ошибки виден в карточке фонового задания и в журнале регистрации (Администрирование → Обслуживание → Журнал регистрации, отбор по событиям регламентных заданий).
Многие задания включаются не в этом списке, а флажком в настройках своей подсистемы: например, автоматическая синхронизация — в настройках обмена. Если включить задание вручную, а настройка подсистемы выключена, при следующем обновлении или открытии настроек флажок может сброситься.
Как создать новое регламентное задание в конфигураторе
Свой автоматический процесс, например ночную выгрузку остатков в файл для сайта, делают в три этапа.
Этап 1. Процедура в общем модуле
Создайте общий модуль (или используйте существующий) с флажком Сервер. Процедура должна быть экспортной:
Процедура ВыгрузитьОстаткиДляСайта() Экспорт
// Обязательная первая строка в конфигурациях на БСП:
// проверяет, можно ли сейчас выполнять задание
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(
Метаданные.РегламентныеЗадания.ВыгрузкаОстатковДляСайта);
// Основная логика: запрос к регистру остатков и запись файла
// ...
КонецПроцедуры
Вызов ПриНачалеВыполненияРегламентногоЗадания в БСП нужен не для красоты. Он не даст заданию отработать, пока база не обновлена после установки нового релиза, и проверит блокировку работы с внешними ресурсами в копии базы.
Этап 2. Объект метаданных
В дереве конфигурации откройте Общие → Регламентные задания и добавьте новый объект. Основные свойства:
- Имя метода — выберите процедуру из этапа 1 (
ИмяМодуля.ВыгрузитьОстаткиДляСайта). - Предопределённое — включите, если нужен один экземпляр на базу.
- Использование — включено ли задание сразу после обновления базы.
- Ключ — строка, которая различает экземпляры одного задания.
- Количество повторных попыток при аварийном завершении и Интервал повторных попыток — сколько раз и через сколько секунд перезапускать задание после ошибки.
- Расписание — можно задать прямо здесь, его потом поменяют в пользовательском режиме.
Этап 3. Обновление базы и проверка
Выполните Конфигурация → Обновить конфигурацию базы данных. Новое предопределённое задание появится в списке Регламентные и фоновые задания. Включите его, запустите кнопкой Выполнить сейчас и убедитесь, что оно завершается без ошибок.
Если конфигурация на поддержке и снимать её не хочется, сначала проверьте, нельзя ли решить задачу штатными средствами: обменом по расписанию, загрузкой по расписанию из настроек подсистемы. Изменение типовой конфигурации усложняет каждое следующее обновление.
Расписание регламентного задания: как задать время и частоту
Расписание задают в стандартном окне платформы. В нём четыре закладки.
| Закладка | Что настраивается |
|---|---|
| Общее | дата начала и окончания действия расписания, повтор раз в N дней |
| Дневное | время начала и окончания, повтор в течение дня каждые N секунд, пауза между запусками |
| Недельное | в какие дни недели выполнять, повтор раз в N недель |
| Месячное | месяцы, конкретное число месяца или день недели в месяце |
Закладки работают вместе: задание запустится, только если момент подходит под все условия сразу.
Примеры настроек
| Задача | Как настроить |
|---|---|
| Курсы валют каждое утро | «Общее»: повтор каждый 1 день; «Дневное»: время начала 07:00 |
| Обмен с сайтом в рабочее время | «Дневное»: начало 08:00, окончание 20:00, повтор каждые 900 секунд; «Недельное»: пн–пт |
| Очистка устаревших данных | «Недельное»: только воскресенье; «Дневное»: начало 03:00 |
| Сверка в конце месяца | «Месячное»: число 28, все месяцы; «Дневное»: начало 22:00 |
900 секунд — это 15 минут. Значение «повторять через» задаётся именно в секундах, частая ошибка — ввести 15 и получить запуск каждые 15 секунд.
Не ставьте тяжёлые задания чаще, чем они успевают отработать. Платформа не запустит новый экземпляр, пока не завершился предыдущий, поэтому слишком частое расписание не ускорит работу, а лишь создаст постоянную нагрузку на сервер.
Ночные задания разносите по времени: резервное копирование , пересчёт итогов и обмены в одну минуту мешают друг другу и дольше держат блокировки.
Фоновое или регламентное задание: в чём разница
Оба вида выполняются на сервере, без формы и без участия пользователя. Разница в том, кто и когда их запускает.
| Признак | Регламентное задание | Фоновое задание |
|---|---|---|
| Описано в метаданных | да, отдельным объектом | нет |
| Кто запускает | платформа по расписанию | код конфигурации в нужный момент |
| Повторяется | да, по расписанию | один раз |
| Как создаётся в коде | РегламентныеЗадания.СоздатьРегламентноеЗадание() | ФоновыеЗадания.Выполнить() |
| Типичный пример | ночная загрузка курсов | долгое формирование отчёта, чтобы не «замораживать» форму |
Каждый запуск регламентного задания на деле выполняется как фоновое задание. Поэтому на закладке фоновых заданий видны и ручные запуски, и плановые.
Как выбрать:
- 📅 нужно «каждый день в 7:00» или «каждые 10 минут» — регламентное;
- 🖱 нужно «сейчас, после нажатия кнопки», а операция долгая — фоновое;
- ⚡ нужно «сразу после проведения документа» — фоновое или очередь (см. следующий раздел).
Запуск по условию, событию или извне
Встроенных триггеров «выполнить, когда изменился документ» у регламентных заданий нет. Практики используют три схемы.
Очередь плюс частое задание
Документ при записи кладёт ссылку на себя в регистр сведений
, например ОчередьОтправкиНаСайт. Регламентное задание раз в минуту читает регистр, обрабатывает записи и удаляет их.
Почему не запустить фоновое задание прямо из обработки проведения: проведение идёт в транзакции. Фоновое задание стартует в отдельном сеансе раньше, чем транзакция зафиксируется, и может прочитать старые данные или не найти документ вовсе. Если транзакция откатится, задание отправит на сайт то, чего в базе нет. Очередь от этого защищает.
Свой экземпляр задания на каждый объект
Когда одно и то же действие нужно выполнять с разными параметрами (несколько складов, несколько почтовых ящиков), создают непредопределённые экземпляры. Метаданные при этом одни:
УстановитьПривилегированныйРежим(Истина);
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(
Метаданные.РегламентныеЗадания.ВыгрузкаОстатковДляСайта);
Задание.Наименование = "Выгрузка остатков: склад Север";
Задание.Ключ = "Север";
Параметры = Новый Массив;
Параметры.Добавить("Север");
Задание.Параметры = Параметры;
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ПериодПовтораДней = 1;
Расписание.ВремяНачала = Дата(1, 1, 1, 8, 0, 0);
Расписание.ВремяКонца = Дата(1, 1, 1, 20, 0, 0);
Расписание.ПериодПовтораВТечениеДня = 1800; // каждые 30 минут
Задание.Расписание = Расписание;
Задание.Использование = Истина;
Задание.Записать();
Процедура в общем модуле в этом случае принимает параметр: Процедура ВыгрузитьОстаткиДляСайта(Склад) Экспорт. Для таких экземпляров снимите в метаданных флажок «Предопределённое». В конфигурациях на БСП для создания и изменения заданий удобнее программный интерфейс модуля РегламентныеЗаданияСервер: он корректно работает и в модели сервиса.
Запуск из внешней системы
Если момент запуска определяет внешняя программа, у неё два пути. Первый — HTTP-сервис в конфигурации: внешняя система делает запрос, сервис кладёт задачу в очередь или запускает фоновое задание. Второй — планировщик заданий Windows, который открывает 1С с параметром /Execute и путём к внешней обработке. Второй способ проще, но занимает лицензию на время работы и требует хранить пароль пользователя в командной строке.
Почему регламентное задание не выполняется
Перед разбором причин откройте закладку фоновых заданий и журнал регистрации. Если запусков нет совсем — проблема в расписании, блокировке или режиме базы. Если запуски есть, но с ошибкой — проблема в коде или правах.
Не снимайте блокировку регламентных заданий в тестовой копии базы без необходимости. Копия начнёт отправлять отчётность, письма и обмены с теми же настройками, что и рабочая, и контрагенты получат дубли.
Частые вопросы
Можно ли запустить регламентное задание вручную, не дожидаясь расписания?
Регламентные и фоновые задания выделите задание и нажмите Выполнить сейчас. Оно выполнится как фоновое задание, расписание не изменится.