Почему у добавленного регламентного задания отсутствует состояние? Выясняем причины и находим решение!

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

Мы часто сталкиваемся с ситуацией, когда после создания нового регламентного задания в 1С:Предприятии, в списке регламентных заданий напротив него пусто в колонке "Состояние". Это может вызвать недоумение, ведь кажется, что все настроено правильно. Давайте вместе разберем, почему так происходит, и какие шаги необходимо предпринять, чтобы ваше задание начало работать и отображать свой статус.

Основа понимания: Регламентные задания и фоновые задания

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

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

Соответственно, информация о состоянии, времени последнего запуска, успешности выполнения и ошибках формируется на основе данных о последнем выполненном фоновом задании. Если фоновые задания для нашего регламентного задания не создаются или не выполняются, то и состояние самого регламентного задания будет оставаться пустым — для контроля этих процессов подойдёт автоматический мониторинг выполнения регламентных заданий и уведомлений о сбоях.

Мы будем работать с объектами РегламентныеЗадания и ФоновыеЗадания. Помните, что фоновые задания, завершившиеся успешно или аварийно, хранятся в системе ограниченное время (обычно около суток), а затем удаляются. При большом объеме заданий старые могут удаляться и раньше.

Первичная диагностика: Проверяем запуск и наличие фоновых заданий

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

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

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

    
    // Получаем объект регламентного задания по его имени
    РегламентноеЗадание = РегламентныеЗадания.НайтиПоИмени("ИмяВашегоРегламентногоЗадания");
    
    Если РегламентноеЗадание <> Неопределено Тогда
        // Запускаем фоновое задание
        ФоновыеЗадания.ВыполнитьМетод(РегламентноеЗадание.ИмяМетаданных, РегламентноеЗадание.Метод);
    Иначе
        Сообщить("Регламентное задание с именем 'ИмяВашегоРегламентногоЗадания' не найдено.");
    КонецЕсли;
    

    После ручного запуска, обновите список регламентных заданий и посмотрите, появилось ли состояние. Если нет, переходим к следующему шагу.

  2. Проверьте список фоновых заданий. Даже если состояние регламентного задания не появилось, важно посмотреть, было ли создано фоновое задание. Перейдите в раздел "Администрирование" -> "Обслуживание" -> "Регламентные и фоновые задания". Здесь мы увидим список всех фоновых заданий. Для более гибкой работы с ними можно реализовать собственное отслеживание результата выполнения фоновых заданий даже без использования механизмов БСП.

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

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

    
    // Получаем список всех активных фоновых заданий
    СписокФоновыхЗаданий = ФоновыеЗадания.ПолучитьЗадания();
    
    Для Каждого Задание Из СписокФоновыхЗаданий Цикл
        Сообщить("Имя: " + Задание.Имя + ", Состояние: " + Задание.Состояние + ", Описание: " + Задание.Описание);
    КонецЦикла;
    

Проверяем настройки самого регламентного задания

Давайте внимательно проанализируем свойства нашего регламентного задания. Иногда причина кроется в неочевидной, но важной настройке.

  1. Флаг "Использование" (или "Включено"). В свойствах регламентного задания убедитесь, что установлен флажок "Использование". Если этот флаг снят, задание не будет создавать фоновые задания и не будет выполняться. Это очень важный пункт, который часто упускают из виду.

  2. Расписание. Нам необходимо убедиться, что расписание задано корректно и содержит актуальные даты и время выполнения. Неправильно настроенное расписание не позволит планировщику запустить задание. Проверьте следующие моменты:

    • Установлены ли даты начала и окончания выполнения расписания?
    • Корректно ли указаны интервалы повторения (часы, дни недели, месяцы)?
    • Не истек ли срок действия расписания?

    Расписание можно проверить как в конфигураторе, так и в пользовательском режиме. Программно мы можем получить расписание так:

    
    РегламентноеЗадание = РегламентныеЗадания.НайтиПоИмени("ИмяВашегоРегламентногоЗадания");
    Если РегламентноеЗадание <> Неопределено Тогда
        Расписание = РегламентноеЗадание.Расписание;
        Если Расписание <> Неопределено Тогда
            Сообщить("Расписание задания: " + Расписание.Описание());
        Иначе
            Сообщить("Расписание для задания не задано.");
        КонецЕсли;
    КонецЕсли;
    

Метод создания задания: Предопределенное или программное?

Способ, которым было создано регламентное задание, также играет роль в его поведении.

  1. Предопределенные регламентные задания. Если вы добавили регламентное задание в конфигурацию и установили флаг "Предопределенное", то оно автоматически создается в базе при запуске 1С:Предприятия.

  2. Задание без флага "Предопределенное". В этом случае оно не появится автоматически. Его необходимо либо добавить вручную в пользовательском режиме, либо создать программно.

  3. Программное создание задания. Если вы решили исполнить метод внешней обработки в фоновом задании или создать новое регламентное задание через код, убедитесь в правильности параметров. Рассмотрим пример программного создания:

    
    // Создаем новый объект регламентного задания
    НовоеРегламентноеЗадание = РегламентныеЗадания.СоздатьРегламентноеЗадание();
    
    // Устанавливаем основные свойства
    НовоеРегламентноеЗадание.Имя = "МоеНовоеРегламентноеЗадание";
    НовоеРегламентноеЗадание.Метод = "ОбщиеМодули.МойОбщийМодуль.ВыполнитьМоюПроцедуру";
    НовоеРегламентноеЗадание.Использование = Истина;
    НовоеРегламентноеЗадание.Описание = "Пример регламентного задания, созданного программно";
    НовоеРегламентноеЗадание.Ключ = "КлючМоегоНовогоЗадания";
    
    // Создаем расписание
    Расписание = НовоеРегламентноеЗадание.Расписание;
    Расписание.ЗаполнитьДневное(24, 0, 0, 0, 0, 0); // Запускать каждый день в 00:00:00
    
    // Записываем регламентное задание в информационную базу
    Попытка
        НовоеРегламентноеЗадание.Записать();
        Сообщить("Регламентное задание успешно создано.");
    Исключение
        Сообщить("Ошибка при создании: " + ОписаниеОшибки());
    КонецПопытки;
    

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

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

  1. Клиент-серверный режим. Убедитесь, что у учетной записи пользователя Windows, под которой запущен сервер 1С, есть достаточные права для выполнения кода задания.

  2. Файловый режим. В файловом режиме для выполнения заданий необходимо наличие активной сессии 1С, выполняющей обработку заданий.

  3. Блокировка регламентных заданий. Проверьте, не включена ли блокировка регламентных заданий в консоли администрирования серверов 1С. Если блокировка активна, задания запускаться не будут.

Изучаем Журнал регистрации и свойство "Ключ"

Ценную информацию для диагностики можно найти в системных логах.

  1. Журнал регистрации. Внимательно изучите записи. Профессиональный анализ журнала регистрации (в этом поможет универсальная консоль администрирования и анализа журнала регистрации) позволяет быстро найти причины сбоев, такие как "Недостаточно прав" или "Метод не найден". Для оперативного реагирования на проблемы можно использовать анализ и информирование о невыполненных регламентных заданиях, который автоматически оповестит вас о возникших ошибках.

  2. Свойство "Ключ". Если задание с определенным ключом уже выполняется, новый экземпляр не запустится. Убедитесь, что нет зависших фоновых заданий с таким же ключом.

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

← На главную