Как настроить регламентные задания в файловой базе 1С:Управление торговлей 10.3

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

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

Выясняем причину: почему регламентные задания не работают «из коробки»?

Для начала проанализируем, как механизм регламентных заданий устроен в разных режимах работы базы данных 1С:

  1. Клиент-серверный вариант: Здесь за планирование и запуск процедур отвечает менеджер кластера сервера 1С:Предприятие. Служба Агента сервера самостоятельно отслеживает расписание и запускает фоновые задания без какого-либо участия пользователей и открытых клиентских сеансов.
  2. Файловый вариант: В этом режиме выделенного сервера нет. База данных представляет собой единый файл 1Cv8.1CD. Чтобы выполнить какой-либо код, платформе физически необходим запущенный клиентский сеанс (толстый или тонкий клиент), который будет выступать в роли исполнителя.

Начиная с версии платформы 1С 8.3.3, разработчики упростили жизнь в файловом режиме: при запуске системы автоматически стартует отдельный фоновый поток, который берет на себя выполнение задач по расписанию. Однако в конфигурации УТ 10.3 этот механизм автоматически не взлетает по следующим причинам:

Анализируем расписание: почему интервал в 4 секунды — это ошибка?

Часто в попытках протестировать работу регламентного задания разработчики устанавливают очень короткие интервалы повторения — например, каждые 4 или 5 секунд. В файловой базе это приводит к полной неработоспособности по двум причинам:

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

Во-вторых, выполнение любой фоновой задачи (например, авторизация на SMTP-сервере и отправка почты) требует времени. Если интервал запуска меньше, чем время выполнения самой процедуры, система начнет плодить незавершенные потоки, что приведет к перегрузке файловой СУБД и ошибкам блокировки данных.

Решение №1: Использование обработчика ожидания (Простой «костыль»)

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

Откроем Модуль обычного приложения и пропишем инициализацию обработчика при старте системы:


Процедура ПриНачалеРаботыСистемы()
    // Подключаем обработчик с интервалом 60 секунд (согласно ограничениям платформы)
    ПодключитьОбработчикОжидания("УправлениеРегламентнымиЗаданиями", 60);
КонецПроцедуры

Процедура УправлениеРегламентнымиЗаданиями() Экспорт
    // Данный метод инициирует запуск регламентных заданий по их расписанию
    ВыполнитьОбработкуЗаданий();
КонецПроцедуры

Важное предупреждение: Несмотря на простоту, этот метод таит в себе серьезную опасность для многопользовательской работы. Если этот код выполнится у всех пользователей базы данных, то каждые 60 секунд компьютеры всех менеджеров будут одновременно вызывать ВыполнитьОбработкуЗаданий(). В файловой базе это неизбежно приведет к постоянным микрозависаниям интерфейса («песочным часам») у сотрудников, а также к конфликтам блокировок таблиц 1С.

Решение №2: Профессиональная настройка через выделенный сеанс («Робот»)

Чтобы избежать блокировок и зависаний у реальных пользователей, настроим схему работы через выделенный служебный сеанс, который будет крутиться на одном из постоянно включенных компьютеров (или сервере).

Разберем этот процесс по шагам.

Шаг 1. Создание пользователя в Конфигураторе

Создадим нового пользователя с именем, например, РоботРегламент. Назначим ему необходимые права (желательно Полные права, чтобы у фоновых заданий не возникало проблем с доступом к метаданным).

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

Шаг 2. Модернизация кода в Модуле обычного приложения

Теперь сделаем так, чтобы обработчик ожидания запускался исключительно под учетной записью нашего робота. Модернизируем код в Модуле обычного приложения:


Процедура ПриНачалеРаботыСистемы()
    // Проверяем, что сеанс запущен именно под нашей служебной учетной записью
    Если ИмяПользователя() = "РоботРегламент" Тогда
        ПодключитьОбработчикОжидания("ВыполнитьРегламентыРобота", 60);
    КонецЕсли;
КонецПроцедуры

Процедура ВыполнитьРегламентыРобота() Экспорт
    ВыполнитьОбработкуЗаданий();
КонецПроцедуры

Теперь обычные пользователи будут работать в системе без каких-либо зависаний интерфейса, а всю рутину по обработке расписания возьмет на себя сеанс РоботРегламент.

Шаг 3. Автозапуск сеанса через планировщик Windows

Чтобы сеанс робота работал непрерывно и автоматически стартовал при перезагрузке компьютера, настроим его запуск через Планировщик задач Windows (Task Scheduler).

Создадим новую задачу со следующими параметрами запуска в поле «Программа или сценарий»:


"C:\Program Files (x86)\1cv8\8.3.X.XXXX\bin\1cv8.exe" ENTERPRISE /F"C:\1C_Bases\UT_10" /N"РоботРегламент" /P"ПарольРобота"

Где:

В настройках задачи Windows укажите триггер «При запуске компьютера» или «При входе в систему» и настройте перезапуск задачи в случае её аварийного закрытия.

Как отладить регламентное задание в файловом режиме?

Когда мы запускаем фоновое задание через метод ВыполнитьОбработкуЗаданий(), отладка стандартным способом может не сработать, так как код выполняется в фоновом потоке. Выясним, как быстро найти ошибку, если регламент не отрабатывает:

  1. Откройте Конфигуратор и перейдите в меню Сервис — Параметры — Запуск 1С:Предприятия — Основные.
  2. Убедитесь, что установлен флаг «Отладка разрешена» и выбран тип отладки «Автоматическое подключение фоновых заданий».
  3. В модуле, где расположена экспортная процедура вашего регламентного задания, установите точку останова.
  4. Запустите сеанс под пользователем РоботРегламент или принудительно вызовите ВыполнитьОбработкуЗаданий() через внешнюю обработку. Платформа перехватит управление, и вы сможете построчно протрассировать весь код отправки почты или формирования отчетов.

Придерживаясь этих правил, вы сможете раз и навсегда решить проблему стабильного выполнения регламентных задач в файловых базах 1С старого поколения.

← На главную