Расписание регламентных и фоновых заданий в 1С: настройка и запуск

· 9 мин

Содержание

Расписание в 1С 8.3 задаётся у регламентного задания: откройте Администрирование → Обслуживание → Регламентные и фоновые задания, выберите нужное задание и нажмите ссылку с текущим расписанием. В диалоге указываете время старта, период повтора в течение дня и дни недели — так настраивается автоматический обмен данными, загрузка курсов валют, закрытие месяца и любая другая периодическая операция.

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

Регламентные и фоновые задания — в чём разница

Это два связанных механизма, и путаница между ними — источник половины проблем.

  • 🗓 Регламентное задание — это настройка: какой метод вызывать и по какому расписанию. Оно хранится в конфигурации и само код не выполняет.
  • ⚙️ Фоновое задание — это конкретный запуск. Когда наступает время по расписанию, платформа порождает фоновое задание, которое и делает работу.

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

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

У каждого регламентного задания есть владелец — пользователь, от имени которого оно работает. Если у владельца не хватает прав, задание упадёт с ошибкой доступа, хотя расписание настроено верно.

Где настроить расписание в пользовательском режиме

В типовых конфигурациях на Библиотеке стандартных подсистем (БП 3.0, ЗУП 3.1, УТ 11) список открывается одинаково:

  1. Откройте раздел Администрирование.
  2. Перейдите в группу Обслуживание.
  3. Выберите команду Регламентные и фоновые задания.

Если команды не видно, у пользователя нет прав администратора — расписание меняет только администратор.

В открывшейся форме две вкладки. На вкладке Регламентные задания — список всех заданий со столбцом текущего расписания. Нажмите на ссылку расписания (или откройте задание и найдите поле «Расписание») — откроется диалог настройки с вкладками.

Вкладка диалогаЧто задаёт
ОбщееДата начала и окончания, повтор каждые N дней
ДневноеВремя старта и окончания, повтор в течение дня каждые N секунд
НедельноеДни недели и повтор через N недель
МесячноеЧисла месяца и выбранные месяцы

Типовые примеры настройки:

  • Каждый час в рабочее время — вкладка «Дневное»: начало 09:00, окончание 19:00, повтор каждые 3600 секунд.
  • Раз в сутки ночью — «Дневное»: время начала 03:00, повтор в течение дня не ставим.
  • По будням — «Недельное»: отметить понедельник–пятницу.

Проверьте флажок «Включено» (поле «Использование») — без него задание не выполнится ни по какому расписанию.

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

Проверка перед включением расписания
Выполнено: 0 / 5

Как задать расписание в Конфигураторе и кодом

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

В дереве конфигурации откройте ветку Общие → Регламентные задания и добавьте новый объект. Заполните:

  • Имя метода — полное имя экспортного метода, например ОбменССайтом.ВыполнитьОбмен. Метод должен быть в общем серверном модуле, не глобальном.
  • Предопределённое расписание — можно задать прямо здесь кнопкой «Открыть» у свойства «Расписание».
  • Использование — стартовое состояние.

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

// Включаем задание и ставим запуск каждый час с 09:00
РегЗадание = РегламентныеЗадания.НайтиПоИмени("ЗагрузкаКурсовВалют");
РегЗадание.Использование = Истина;

Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ВремяНачала = Дата(1, 1, 1, 9, 0, 0);   // старт в 09:00
Расписание.ПериодПовтораВТечениеДня = 3600;        // повтор каждый час, в секундах
РегЗадание.Расписание = Расписание;
РегЗадание.Записать();

Метод НайтиПоИмени ищет задание по имени из метаданных. ПериодПовтораВТечениеДня задаётся в секундах — частая причина «задание срабатывает не раз в час, а раз в минуту» в том, что сюда вписали 60 вместо 3600.

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

Запуск по расписанию внешней обработки или расширения

Напрямую внешнюю обработку (файл .epf) платформенный планировщик запускать не умеет — регламентное задание ссылается только на метод из конфигурации. Обойти это можно двумя способами.

Способ 1. Дополнительные обработки через БСП. В типовых конфигурациях есть справочник дополнительных отчётов и обработок: Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Добавьте обработку с видом «Дополнительная обработка» и типом команды «Запуск по расписанию» — тогда в её карточке появится настройка расписания. Этот способ не требует изменения конфигурации и снимается с поддержки.

Способ 2. Регламентное задание в расширении. Расширения конфигурации (доступны начиная с платформы 8.3.6) позволяют добавить собственное регламентное задание, не трогая основную конфигурацию. Вы создаёте в расширении новый объект «Регламентное задание» и общий модуль с методом-обработчиком. После загрузки .cfe и обновления конфигурации базы задание появится в общем списке.

Загрузка файла расширения и команда «Обновить конфигурацию базы данных» — это два отдельных шага. Пока конфигурация базы не обновлена, задание из расширения работать не начнёт.

Выбор между способами:

Как запускать внешнюю обработку по расписанию?

Файловый и клиент-серверный режим: кто выполняет задания

Это ключевой момент, из-за которого расписание часто «не работает », хотя настроено верно.

Клиент-серверная база . Регламентные задания выполняет кластер серверов — конкретно рабочий процесс (rphost). Сеансы пользователей при этом не нужны: задания идут по расписанию, даже когда в базе никого нет. Главное — чтобы была снята блокировка (о ней ниже).

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

Форсировать выполнение в файловой базе можно вызовом глобального метода:

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

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

Для автоматизации файловой базы без участия человека обычно поднимают постоянно открытый сеанс (например, запуск 1cv8 в режиме предприятия на выделенной машине) либо переводят базу в клиент-серверный режим — это самое надёжное решение для регулярных обменов и ночных операций.

Блокировка регламентных заданий

В клиент-серверной базе есть свойство информационной базы «Блокировка регламентных заданий включена». Его выставляют в консоли администрирования кластера или через rac (точные параметры смотрите в справке rac help).

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

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

Как отслеживать выполнение и читать журнал

Отработало задание или упало — видно в двух местах.

Вкладка «Фоновые задания». В той же форме Регламентные и фоновые задания переключитесь на вкладку фоновых заданий. Каждая строка — один запуск с состоянием:

  • Завершено — отработало без ошибок;
  • Выполняется — идёт прямо сейчас;
  • Завершено аварийно — упало, в описании будет текст ошибки.

Двойной клик по аварийной строке открывает детали с сообщением об ошибке — с него и начинайте разбор.

Журнал регистрации. Администрирование → Обслуживание → Журнал регистрации. Отберите события по приложению «Фоновое задание» — увидите историю запусков с привязкой ко времени и пользователю-владельцу. Журнал полезен, когда фоновое задание уже исчезло из оперативного списка.

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

Оптимизация: чтобы задания не тормозили работу

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

  1. Разнесите время старта. Не ставьте десять заданий на 00:00 — сервер захлебнётся. Раскидайте их по минутам и часам.
  2. Снизьте частоту тяжёлых операций. Полная переиндексация или пересчёт итогов раз в час не нужны — достаточно раза в сутки ночью.
  3. Ночные операции — в нерабочее время. Закрытие месяца, свёртку, тяжёлые отчёты ставьте на 02:00–05:00.
  4. Следите за «зависшими» заданиями. Если задание выполняется часами, оно, скорее всего, ждёт блокировку или зациклилось — такое лучше останавливать и разбирать причину.

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

Ориентиры по частоте для типовых операций:

ОперацияРазумное расписание
Обмен с сайтом, маркетплейсомкаждые 15–30 минут в рабочее время
Загрузка курсов валютраз в сутки утром
Обмен между базами (РИБ, КД)каждый час или по событию
Закрытие месяца, пересчёт итоговраз в сутки ночью
Полнотекстовый индекс, обслуживаниеночью, в наименее загруженное время

Это ориентиры, а не жёсткое правило: подстраивайте под нагрузку конкретной базы и число пользователей.

Если один обмен должен отработать строго раньше другого, не подбирайте интервалы «на глаз» — лучше вызвать второй шаг из кода первого задания по его завершении. Расписание не гарантирует порядок между разными заданиями.

Почему расписание не срабатывает

Самая частая жалоба — «настроил, а не запускается». Разбор по симптомам:

Диагностика: выберите симптом

Частые вопросы

Можно ли запустить регламентное задание вручную, не дожидаясь расписания?
Да. В форме регламентных заданий выделите задание и выполните команду запуска — платформа создаст фоновое задание немедленно. Из кода это ФоновыеЗадания.Выполнить() с указанием метода.
Почему в файловой базе задания не идут ночью?
В файловом режиме задания выполняет открытый клиентский сеанс. Нет сеанса — нет исполнителя. Для круглосуточной работы держите постоянно открытый сеанс или переходите на клиент-сервер.
Чем регламентное задание отличается от фонового?
Регламентное — это настройка (метод плюс расписание), фоновое — конкретный запуск этой настройки. Одно регламентное задание за сутки порождает множество фоновых по расписанию.
Задание выполняется, но с ошибкой доступа. Что делать?
Проверьте владельца задания и его права. Задание работает от имени конкретного пользователя; если у него нет прав на нужные объекты, запуск падает, хотя расписание верное.
Можно ли менять расписание без Конфигуратора?
Да. Само расписание и флаг включения меняются в пользовательском режиме в форме регламентных заданий. Конфигуратор нужен только чтобы добавить новое задание или метод-обработчик.