Почему не работают регламентные задания в файловой базе 1С 8.3 и как их оживить

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Эволюция механизма в платформе 8.3

Прежде всего, проанализируем важное изменение, которое произошло в платформе. До версии 8.3 для выполнения регламентных заданий в файловой базе требовался либо выделенный сеанс (так называемый «менеджер регламентных заданий»), либо принудительный вызов метода ВыполнитьОбработкуЗаданий() в обработчике ожидания. Однако, начиная с версии 8.3.3, разработчики 1С реализовали автоматический запуск фоновых заданий. Теперь платформа сама инициирует выполнение задач внутри запущенного клиентского сеанса, обеспечивая индикацию прогресса выполнения фонового задания при необходимости.

Но здесь кроется первый нюанс: для автоматического старта база не должна быть пустой в плане активных пользователей. Хотя бы один сеанс «1С:Предприятия» должен быть открыт. В этом сеансе платформа будет периодически пытаться запустить фоновый поток для выполнения задач из очереди.

Анализируем программный код и свойства модуля

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


Процедура РегламентноеЗадание1() Экспорт
    НоваяЗапись = Справочники.ДислокацияВагоныАрхив.СоздатьЭлемент();
    НоваяЗапись.Номер = 5555;
    НоваяЗапись.Записать();
КонецПроцедуры

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

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

Разбираемся с интервалом выполнения (60 секунд)

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

Если в расписании указано «повторять каждые 10 секунд», платформа все равно будет запускать задание только тогда, когда сработает внутренний таймер проверки (раз в минуту). Таким образом, фактический интервал составит 60 секунд или более. Если вам критична точность до секунд, файловый вариант базы вам не подойдет, либо придется возвращаться к старым методам через ПодключитьОбработчикОжидания() на клиенте.

Настройка расписания и «Консоль заданий»

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

С помощью консоли заданий в режиме «Предприятие» выполним следующие действия:

  1. Проверим наличие нашего регламентного задания в списке.
  2. Убедимся, что стоит галочка «Использование».
  3. Перенастроим расписание вручную прямо в интерфейсе. Иногда это помогает «встряхнуть» настройки, хранящиеся в системных таблицах.
  4. Посмотрим колонку «Состояние». Если там написано «Завершено с ошибкой», нужно немедленно переходить к анализу журнала регистрации.

Особенности обычного приложения и параметры запуска

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

Разберем параметр запуска /AllowExecuteScheduledJobs. Этот флаг в строке запуска или в файле настроек conf.cfg принудительно разрешает выполнение заданий в данном сеансе. Для файловой базы это может быть полезно, если вы хотите гарантировать, что именно этот запущенный экземпляр 1С будет выполнять роль «сервера» для заданий.

Принудительный запуск через ВыполнитьОбработкуЗаданий()

Если автоматический механизм 8.3 по каким-то причинам не срабатывает в вашей конфигурации (например, из-за специфических настроек прав или режима совместимости), мы можем использовать классический надежный способ. Разберем его по шагам:

В модуле обычного приложения (или управляемого, в процедуре ПриНачалеРаботыСистемы) добавим подключение обработчика ожидания:


Процедура ПриНачалеРаботыСистемы()
    #Если Клиент Тогда
        ПодключитьОбработчикОжидания("ОбработкаРегламентныхЗаданий", 60);
    #КонецЕсли
КонецПроцедуры

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

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

Проверка блокировки заданий

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

Проверить и снять блокировку можно программно следующим кодом:


ПараметрыБлокировки = ПолучитьБлокировкуРегламентныхЗаданий();
Если ПараметрыБлокировки.Установлена Тогда
    ПараметрыБлокировки.Установлена = Ложь;
    УстановитьБлокировкуРегламентныхЗаданий(ПараметрыБлокировки);
    Сообщить("Блокировка успешно снята!");
КонецЕсли;

Использование журнала регистрации для поиска ошибок

Если задание стартует, но не выполняет полезную работу (например, справочник не заполняется), истинная причина всегда кроется в Журнале регистрации. Рассмотрим, как правильно искать информацию:

  1. Откройте Журнал регистрации в режиме «Предприятие».
  2. Установите отбор по полю «Событие». Нас интересуют события, начинающиеся с «Фоновое задание» (Запуск, Завершение, Ошибка).
  3. Если в колонке «Результат» указано «Ошибка», откройте детальный просмотр. Там будет указан текст исключения, например: "Объект не найден", "Нарушение прав доступа" или "Метод не обнаружен".

Важный момент по правам: Регламентное задание в файловой базе выполняется от имени того пользователя, который запустил текущий сеанс 1С. Если у этого пользователя нет прав на запись в справочник ДислокацияВагоныАрхив, задание завершится с ошибкой прав доступа.

Подведем итоги

Для стабильной работы регламентных заданий в файловой базе 8.3 нам необходимо убедиться в соблюдении трех условий:

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

← На главную