Как запускать задачи по расписанию в 1С 8.3

· 9 мин

Содержание

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

Разберём, как устроен планировщик, что он требует в файловой и клиент-серверной базе, как настроить периодичность и где смотреть результат, если задание тихо упало с ошибкой.

Регламентные и фоновые задания: что это и как связано

Планировщик в 1С стоит на двух объектах, и их легко перепутать.

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

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

Где физически крутится планировщик, зависит от варианта базы:

Вариант базыКто выполняет заданияЧто для этого нужно
Клиент-сервернаяКластер серверов, автоматическиБаза не должна быть заблокирована для регламентных заданий
ФайловаяКлиентский сеансНужен открытый сеанс, который обрабатывает задания

Это ключевое различие. В файловой базе планировщик не работает «в фоне» без запущенной 1С — об этом подробно ниже, в разделе про частые проблемы.

Что подготовить перед настройкой

Прежде чем создавать расписание, проверьте три вещи.

1. Права. Управлять заданиями может только пользователь с правами администратора. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, Управление торговлей 11) нужен профиль «Администратор» или право «Администрирование». Обычный пользователь список заданий просто не увидит.

2. Режим базы. Для клиент-серверной базы убедитесь, что в свойствах информационной базы не стоит флаг «Блокировка регламентных заданий включена». Его ставят, например, во время обновления или технического обслуживания, а снять забывают — и задания молча не идут. Флаг виден в консоли кластера в свойствах ИБ.

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

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

Создаём регламентное задание: три способа

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

Способ 1. В Конфигураторе — новое задание с нуля

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

  1. Откройте дерево конфигурации, найдите ветку «Регламентные задания», добавьте новый объект.
  2. В свойстве «Имя метода» укажите путь к экспортной процедуре: ОбщийМодуль.ИмяПроцедуры.
  3. Задайте «Ключ» — строку-идентификатор. Задания с одинаковым ключом не будут выполняться одновременно, это защита от наложения запусков.
  4. Решите, делать ли задание предопределённым. Предопределённое создаётся вместе с базой автоматически; непредопределённое вы создадите кодом.
  5. Здесь же можно задать расписание по умолчанию — пользователь потом поменяет его в режиме «1С:Предприятие».

После изменения метаданных выполните «Обновить конфигурацию базы данных» (F7). Для расширения конфигурации сначала загрузите .cfe, затем обновите базу — это два отдельных шага.

Способ 2. В режиме «1С:Предприятие» — настроить готовое

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

Откройте Администрирование → Обслуживание → Регламентные и фоновые задания (в некоторых конфигурациях пункт лежит в группе «Регламентные операции»; название раздела верхнего уровня может отличаться). В списке регламентных заданий:

  • установите флаг «Включено» у нужной строки;
  • откройте задание и нажмите «Настроить расписание»;
  • задайте периодичность и время (подробности — в следующем разделе).

Предопределённое задание из этого списка нельзя удалить или создать заново — ему можно только менять использование и расписание.

Способ 3. Через встроенный язык

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

// Создаём экземпляр непредопределённого регламентного задания
Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание(
    Метаданные.РегламентныеЗадания.ОбменДанными);

Задание.Использование = Истина;
Задание.Ключ          = "ОбменСБанком";

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

Задание.Расписание = Расписание;
Задание.Записать();

Чтобы найти уже существующее задание и поправить его, используйте отбор по метаданным:

Отбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.ОбменДанными);
Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);
Если Задания.Количество() > 0 Тогда
    Задание = Задания[0];
    Задание.Использование = Истина;
    Задание.Записать();
КонецЕсли;

А запустить метод однократно, не дожидаясь расписания, можно фоновым заданием:

Параметры = Новый Массив;
ФоновыеЗадания.Выполнить("ОбщийМодуль.ИмяПроцедуры", Параметры, , "Разовый запуск");

Настройка расписания: периодичность и время запуска

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

Свойство (в коде)Что задаётПример
НачалоВремениСутокВо сколько начинать в течение дня09:00
ОкончаниеВремениСутокПосле какого времени не запускать18:00
ПовторятьКаждыйИнтервал повтора в течение дня, в секундах3600 — раз в час
ПовторятьПослеЗавершенияОтсчитывать интервал от конца прошлого запуска, а не от началаИстина
ДниНеделиВ какие дни недели (1 — понедельник … 7 — воскресенье)[1,2,3,4,5] — будни
ДеньМесяцаВ какой день месяца1 — первое число
ДатаНачала / ДатаОкончанияПериод, в котором расписание действует—

Несколько практических комбинаций:

  • Каждый час в рабочее время по будням: НачалоВремениСуток 09:00, ОкончаниеВремениСуток 18:00, ПовторятьКаждый 3600, ДниНедели = будни.
  • Раз в сутки ночью: НачалоВремениСуток 02:00, без повтора в течение дня, дни недели — все.
  • Первого числа месяца: ДеньМесяца = 1, НачалоВремениСуток — удобное время.

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

Разница между повтором «от начала» и «от завершения» важна для долгих заданий. Если ПовторятьПослеЗавершения = Ложь, а задание работает дольше интервала, запуски начнут накладываться. Чтобы этого не было, либо включайте повтор после завершения, либо задавайте всем таким запускам одинаковый ключ — платформа не стартует второй экземпляр с тем же ключом, пока не завершился первый.

Контроль выполнения и разбор ошибок

Задание может «работать», но ничего не делать, если процедура внутри падает с ошибкой. Поэтому после настройки обязательно проверьте, что запуски реально проходят.

Основной инструмент — та же обработка Администрирование → Обслуживание → Регламентные и фоновые задания. На вкладке фоновых заданий у каждого запуска видно состояние:

  • Активно — выполняется прямо сейчас;
  • Завершено — отработало штатно;
  • Завершено аварийно — упало с ошибкой (текст ошибки открывается двойным щелчком);
  • Отменено пользователем — остановлено вручную.

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

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

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

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

Почему задания стоят и как не тормозить пользователей

Самая частая жалоба — «настроил расписание, а задание не выполняется». В девяти случаях из десяти причина не в расписании.

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

Блокировка в кластере. В клиент-серверной базе проверьте флаг блокировки регламентных заданий в свойствах ИБ (см. раздел про подготовку).

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

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

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

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

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

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