Почему регламентное задание в 1С не срабатывает по расписанию и как это исправить?

Программист 1С v8.3 (Управляемые формы)
← На главную

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

1. Первоначальная проверка и общие настройки регламентного задания

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

  1. Активность и расписание:
    • В режиме "Предприятие" перейдите в список регламентных заданий (обычно доступно через меню "Все функции" или специализированную обработку "Регламентные и фоновые задания").
    • Убедитесь, что для вашего задания установлен флаг "Использование" или "Активно".
    • Проверьте корректность настройки расписания выполнения. Иногда расписание может быть задано неверно, например, с датой окончания в прошлом или с слишком редкой частотой, что создает иллюзию неработоспособности. Для тестирования рекомендуем установить короткий интервал, например, 30 секунд (но в файловом режиме лучше 3 минуты, о чем поговорим позже).
    • Обратите внимание на колонки "Состояние" и "Дата окончания". Если они показывают "<не определено>", это может свидетельствовать о некорректном расписании или ошибках при его сохранении.
  2. Настройки в конфигураторе:
    • В конфигураторе откройте свойства вашего регламентного задания.
    • Убедитесь, что установлен флаг "Используется".
    • Если задание предопределенное, проверьте флаг "Предопределенное".
    • Просмотрите расписание, заданное в конфигураторе. Важно понимать, что в некоторых версиях платформы (до 8.3.13) изменения расписания регламентного задания через Конфигуратор могли не сохраняться или не применяться корректно. В таких случаях мы рекомендуем изменять расписание непосредственно через обработку в режиме "Предприятие" или полностью пересоздавать регламентное задание.
  3. Консоль заданий (или обработка "Регламентные и фоновые задания"):
    • В режиме "Предприятие" откройте консоль или обработку для управления регламентными заданиями.
    • Проверьте статус вашего задания: "Использование" должно быть включено.
    • Посмотрите на "Состояние" задания. Если оно "Неопределено", это подтверждает проблемы с запуском.
    • Обязательно проверьте колонку "Последнее выполнение". Если там пусто или указана давняя дата, значит задание не запускается по расписанию.

2. Особенности регламентных заданий в файловом режиме

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

  1. Зависимость от активных сеансов:
    • В файловом режиме регламентные задания не запускаются автоматически, если в базе нет ни одного активного пользовательского сеанса. Это означает, что для срабатывания задания кто-то должен быть подключен к базе.
    • Задание выполняется от имени пользователя, который первым вошел в базу, или от имени пользователя, который указан в задании (если его можно указать), но с минимальным приоритетом.
    • Для стабильной работы регламентных заданий в файловой базе мы часто используем постоянно запущенный выделенный клиентский сеанс (например, с помощью "технического" пользователя, который запускается через планировщик Windows).
  2. Проблема "Пользователь : не был найден в справочнике сотрудников":
    • Это одна из самых частых ошибок в файловом режиме, если регламентное задание работает с объектами, требующими идентификации пользователя.
    • Если поле для выбора пользователя в настройках регламентного задания в режиме "Предприятие" неактивно, это является явным признаком того, что база файловая. Доступность этого поля определяется программно, например, так:
      
      Элементы.ИмяПользователя.Доступность = НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая;
      
    • Решение:
      • Если регламентное задание выполняет действия, которые требуют наличия аутентифицированного пользователя (например, запись в журнал, создание документов от имени пользователя, работа с правами), то вам необходимо программно установить пользователя в начале процедуры регламентного задания.
      • Мы можем использовать примерно следующий код в начале процедуры регламентного задания:
        
        // Если требуется установка пользователя для файловой базы
        Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
            ПользовательДляВыполнения = Пользователи.НайтиПоИмени("ИмяПользователяДляЗадания");
            Если ПользовательДляВыполнения = Неопределено Тогда
                // Обработка ситуации, если пользователь не найден
                ЗаписьЖурналаРегистрации("РегламентноеЗадание.ОшибкаПользователя", УровеньЖурналаРегистрации.Ошибка,,,
                                        "Пользователь для регламентного задания не найден: ИмяПользователяДляЗадания");
                Возврат;
            КонецЕсли;
            УстановитьТекущегоПользователя(ПользовательДляВыполнения);
        КонецЕсли;
        

        Замените "ИмяПользователяДляЗадания" на актуальное имя пользователя, который имеет все необходимые права для выполнения действий задания. Этот пользователь должен существовать в базе.

      • В качестве альтернативы, вы можете запустить базу в режиме "Предприятие" под определенным пользователем (например, администратором) и оставить ее открытой, чтобы регламентные задания могли выполняться в этом сеансе.
  3. Интервал расписания:
    • В файловой базе, если вы установили очень короткий интервал расписания (например, 30 секунд), это может привести к нестабильной работе или даже отсутствию запусков.
    • Мы рекомендуем увеличить интервал до минимум 3 минут для файловых баз, чтобы избежать излишней нагрузки и дать системе время на обработку.

3. Особенности регламентных заданий в клиент-серверном режиме

В клиент-серверном варианте регламентные задания выполняются службой сервера 1С:Предприятия. Здесь также есть свои подводные камни.

  1. Блокировка выполнения регламентных заданий:
    • На сервере 1С:Предприятия может быть установлена глобальная блокировка выполнения регламентных заданий.
    • Мы можем проверить и снять эту блокировку в утилите администрирования серверов 1С. Убедитесь, что флаг "Блокировка выполнения регламентных заданий включена" (или аналогичный) снят.
    • Если другие регламентные задания работают, это, скорее всего, не ваш случай.
  2. Права пользователя:
    • Если регламентное задание запускается без явно указанного пользователя (что типично для клиент-серверного варианта, где поле выбора пользователя обычно неактивно), оно будет выполняться от имени "системного" пользователя (DefUser).
    • DefUser получает права, определяемые совокупностью основных ролей конфигурации. Если основные роли не заполнены, DefUser будет иметь привилегированный режим (полные права).
    • Если в коде задания используются объекты, на которые у DefUser нет прав, возникнет ошибка "Нарушение прав доступа!".
    • Решение: Мы можем указать конкретного пользователя для регламентного задания, обладающего всеми необходимыми правами. Это делается в консоли заданий или соответствующей обработке в режиме "Предприятие", если конфигурация позволяет. Если это невозможно, необходимо убедиться, что у DefUser достаточно прав или изменить код задания так, чтобы он выполнялся в привилегированном режиме, если это допустимо.
  3. Отсутствие задания в списке консоли заданий:
    • Иногда, особенно после обновления конфигурации или при создании новых регламентных заданий, они могут не появиться в общем списке заданий в режиме "Предприятие".
    • Мы можем добавить свое задание в общий список в "Консоли заданий" (или обработке "Регламентные и фоновые задания"), задать там же расписание и признак "Используется". После этого оно должно начать работу.

4. Подробная отладка регламентных и фоновых заданий

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

  1. Запуск сервера 1С с ключом /debug:
    • Чтобы отладчик мог "подхватывать" фоновые задания, служба сервера 1С:Предприятия должна быть запущена с ключом /debug. Без этого ключа отладка серверного кода, выполняемого фоновыми заданиями, будет невозможна.
    • Мы можем настроить это в свойствах службы 1С:Предприятия на сервере.
  2. Настройка конфигуратора для автоматического подключения:
    • В конфигураторе перейдите в меню "Отладка" -> "Подключение".
    • Нажмите кнопку "Автоматическое подключение".
    • Установите флажок "Фоновые задания". Это позволит отладчику автоматически подключаться к фоновым заданиям, когда они запускаются.
  3. Совпадение строк подключения:
    • Очень важным аспектом является точное совпадение строки подключения к информационной базе в конфигураторе со строкой подключения, которую определяет сервер для фоновых заданий.
    • Мы можем проверить это, добавив в код регламентного задания временную запись в журнал регистрации, которая выводит строку соединения:
      
      ЗаписьЖурналаРегистрации("#ПроверкаСтрокиСоединения", УровеньЖурналаРегистрации.Информация,,, СтрокаСоединенияИнформационнойБазы);
      
    • Затем мы можем принудительно запустить задание (из консоли заданий или тестовой обработки) и посмотреть в журнале регистрации по событию #ПроверкаСтрокиСоединения, какая строка там записана (например, Srvr="tt-1313:1641";Ref="baza-kaif";).
    • Скопируйте эту строку и убедитесь, что она точно соответствует настройкам базы в вашем ярлыке 1С (имя сервера, имя базы). Обратите особое внимание на регистр символов, так как в некоторых версиях платформы (до 8.3.7, например, в 8.3.6) это было критично для подключения отладчика.
  4. Режим отладки в текущем сеансе:
    • Для упрощения отладки мы можем использовать параметр запуска РежимОтладки.
    • В конфигураторе перейдите в "Сервис" -> "Параметры" -> "Запуск 1С:Предприятие" и установите РежимОтладки.
    • Это может привести к появлению в обработке "Регламентные и фоновые задания" кнопки "Выполнить не в фоне", позволяющей запускать задание в текущем сеансе, что значительно упрощает пошаговую отладку.
  5. Отладочная обработка:
    • Мы можем создать простую внешнюю обработку, которая вызывает ту же экспортную процедуру, что и ваше регламентное задание.
    • Запустите эту обработку в обычном клиентском сеансе и поставьте точку останова в вызываемой процедуре. Это позволит вам отладить логику задания без необходимости разбираться с особенностями фонового выполнения, а затем уже перейти к проверке запуска по расписанию.
  6. Локальная отладка серверного кода:
    • Иногда отладка серверного кода фоновых заданий может быть доступна только на той же машине, где и располагается сервер 1С. Это может быть связано с настройками фаервола или сетевыми ограничениями.
    • Мы можем попробовать открыть конфигуратор непосредственно на машине сервера 1С и оттуда выполнить отладку.

5. Мониторинг и диагностика с помощью журнала регистрации и консоли заданий

Журнал регистрации и консоль заданий – наши основные помощники в диагностике причин неработоспособности регламентных заданий.

  1. Журнал регистрации:
    • Регулярно просматривайте журнал регистрации. В нем фиксируются записи о начале и завершении фоновых заданий, а также обо всех ошибках, которые могли возникнуть в процессе выполнения. Если задание отвечает за синхронизацию данных, для контроля корректности проводок применяется автоматическая сверка бухгалтерских и налоговых проводок между базами 1С.
    • Если задание не запускается вообще, записи о его начале могут отсутствовать. Если задание запускается, но падает, вы увидите запись об ошибке.
    • Используйте фильтры по событию, объекту метаданных (ваше регламентное задание) или по пользователю, если он назначен.
  2. Консоль заданий (в режиме "Предприятие"):
    • Консоль заданий предоставляет информацию о текущем состоянии всех регламентных заданий, включая их активность, расписание, дату последнего выполнения и наличие ошибок.
    • Мы можем программно получать информацию о фоновых заданиях, используя встроенный язык, например:
      
      МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания();
      Для Каждого Задание Из МассивФоновыхЗаданий Цикл
          // Анализ состояния, имени, статуса задания
          Сообщить(Задание.Имя + ": " + Задание.Состояние);
      КонецЦикла;
      
      Это позволяет более глубоко анализировать их поведение.

6. Дополнительные рекомендации и частые ошибки

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

  1. Обновление платформы:
    • Иногда после обновления платформы регламентные задания могут перестать работать по расписанию, даже если настройки не менялись. В таких случаях мы рекомендуем перепроверить все настройки и, возможно, перезапустить службу сервера 1С:Предприятия. Для автоматического обслуживания и тестирования баз после таких работ применяется программа для автоматического архивирования, обновления и тестирования баз 1С.
  2. Соответствие параметров:
    • Убедитесь, что количество фактических параметров, передаваемых фоновому заданию (если они есть), совпадает с количеством параметров в его экспортном методе. Несоответствие приведет к ошибке выполнения.
  3. Ключ регламентного задания:
    • Если для регламентного задания указан "Ключ", это может ограничивать одновременное выполнение заданий с одним и тем же ключом. Убедитесь, что это не мешает выполнению вашего задания.
  4. Функциональные опции:
    • В некоторых конфигурациях выполнение регламентного задания может зависеть от включенных функциональных опций. Мы можем проверить соответствующие опции в настройках конфигурации, если задание связано с определенным функционалом.

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

← На главную