Как запускать задачи по расписанию в 1С 8.3
Содержание
Планировщик заданий в 1С 8.3 — это механизм регламентных и фоновых заданий. Чтобы создать автоматический запуск по расписанию, отдельную программу ставить не нужно: расписание задаётся прямо в конфигурации, а выполнять рутину (обмен данными, пересчёт итогов, рассылку отчётов) платформа будет сама. Сделать это можно тремя путями — через Конфигуратор, через интерфейс в режиме «1С:Предприятие» и через встроенный язык.
Разберём, как устроен планировщик, что он требует в файловой и клиент-серверной базе, как настроить периодичность и где смотреть результат, если задание тихо упало с ошибкой.
Регламентные и фоновые задания: что это и как связано
Планировщик в 1С стоит на двух объектах, и их легко перепутать.
- 🗓️ Регламентное задание — это «расписание + ссылка на процедуру». Оно хранит, что и когда запускать: имя метода общего модуля, периодичность, время, ключ и флаг использования.
- ⚙️ Фоновое задание — это один конкретный запуск. Когда наступает время по расписанию, платформа порождает фоновое задание и выполняет метод в отдельном серверном сеансе, не мешая пользователям.
То есть регламентное задание не выполняется само по себе — оно только рождает фоновые задания по своему расписанию. Фоновое задание можно запустить и вручную, без всякого расписания.
Где физически крутится планировщик, зависит от варианта базы:
| Вариант базы | Кто выполняет задания | Что для этого нужно |
|---|---|---|
| Клиент-серверная | Кластер серверов, автоматически | База не должна быть заблокирована для регламентных заданий |
| Файловая | Клиентский сеанс | Нужен открытый сеанс, который обрабатывает задания |
Это ключевое различие. В файловой базе планировщик не работает «в фоне» без запущенной 1С — об этом подробно ниже, в разделе про частые проблемы.
Что подготовить перед настройкой
Прежде чем создавать расписание, проверьте три вещи.
1. Права. Управлять заданиями может только пользователь с правами администратора. В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, Управление торговлей 11) нужен профиль «Администратор» или право «Администрирование». Обычный пользователь список заданий просто не увидит.
2. Режим базы. Для клиент-серверной базы убедитесь, что в свойствах информационной базы не стоит флаг «Блокировка регламентных заданий включена». Его ставят, например, во время обновления или технического обслуживания, а снять забывают — и задания молча не идут. Флаг виден в консоли кластера в свойствах ИБ.
3. Процедура, которую будем запускать. Планировщик запускает экспортную процедуру из общего модуля с флагом «Сервер». Клиентского кода в ней быть не может: у фонового задания нет ни пользователя за экраном, ни форм, ни интерактивных окон.
Если задача — не писать свой код, а просто перенастроить время у уже существующего обмена или пересчёта, Конфигуратор вам не понадобится. Такие задания в типовых уже есть, их достаточно включить и задать расписание в режиме «1С:Предприятие».
Создаём регламентное задание: три способа
Выбор способа зависит от того, есть ли уже готовая процедура и нужен ли новый объект в конфигурации.
Способ 1. В Конфигураторе — новое задание с нуля
Подходит, когда нужна собственная автоматизация и вы дорабатываете конфигурацию (на расширении или в снятой с поддержки базе).
- Откройте дерево конфигурации, найдите ветку «Регламентные задания», добавьте новый объект.
- В свойстве «Имя метода» укажите путь к экспортной процедуре:
ОбщийМодуль.ИмяПроцедуры. - Задайте «Ключ» — строку-идентификатор. Задания с одинаковым ключом не будут выполняться одновременно, это защита от наложения запусков.
- Решите, делать ли задание предопределённым. Предопределённое создаётся вместе с базой автоматически; непредопределённое вы создадите кодом.
- Здесь же можно задать расписание по умолчанию — пользователь потом поменяет его в режиме «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С:Предприятие»?
Почему в файловой базе задания не выполняются сами?
Как запустить задание вручную, не дожидаясь времени по расписанию?
ФоновыеЗадания.Выполнить("ОбщийМодуль.ИмяПроцедуры", Параметры). В интерфейсе некоторых типовых есть кнопка принудительного запуска прямо в списке регламентных заданий.