Мы часто сталкиваемся с ситуацией, когда после создания нового регламентного задания в 1С:Предприятии, в списке регламентных заданий напротив него пусто в колонке "Состояние". Это может вызвать недоумение, ведь кажется, что все настроено правильно. Давайте вместе разберем, почему так происходит, и какие шаги необходимо предпринять, чтобы ваше задание начало работать и отображать свой статус.
Прежде чем углубляться в диагностику, нам важно четко понимать, как работают регламентные задания в 1С. Само по себе регламентное задание — это лишь настройка, шаблон, который определяет, что и когда должно быть выполнено. Оно не выполняет действия напрямую. Вместо этого, согласно своему расписанию, регламентное задание порождает фоновое задание.
Именно фоновое задание является реальным исполнителем. Оно выполняет программный код, который мы указали в регламентном задании. Соответственно, информация о состоянии, времени последнего запуска, успешности выполнения и ошибках формируется на основе данных о последнем выполненном фоновом задании. Если фоновые задания для нашего регламентного задания не создаются или не выполняются, то и состояние самого регламентного задания будет оставаться пустым.
Мы будем работать с объектами РегламентныеЗадания и ФоновыеЗадания. Помните, что фоновые задания, завершившиеся успешно или аварийно, хранятся в системе ограниченное время (обычно около суток), а затем удаляются. При большом объеме заданий старые могут удаляться и раньше.
Одна из самых частых причин отсутствия состояния — задание ни разу не запускалось. Пока задание не отработает хотя бы один раз (успешно или с ошибкой), системе неоткуда взять информацию о его состоянии.
Попробуйте запустить задание вручную. Это первый и самый простой шаг. В пользовательском режиме, в списке регламентных заданий, найдите ваше задание, выделите его и нажмите кнопку "Выполнить сейчас".
Программно мы можем запустить фоновое задание на выполнение метода регламентного задания следующим образом:
// Получаем объект регламентного задания по его имени
РегламентноеЗадание = РегламентныеЗадания.НайтиПоИмени("ИмяВашегоРегламентногоЗадания");
Если РегламентноеЗадание <> Неопределено Тогда
// Запускаем фоновое задание
ФоновыеЗадания.ВыполнитьМетод(РегламентноеЗадание.ИмяМетаданных, РегламентноеЗадание.Метод);
Иначе
Сообщить("Регламентное задание с именем 'ИмяВашегоРегламентногоЗадания' не найдено.");
КонецЕсли;
После ручного запуска, обновите список регламентных заданий и посмотрите, появилось ли состояние. Если нет, переходим к следующему шагу.
Проверьте список фоновых заданий. Даже если состояние регламентного задания не появилось, важно посмотреть, было ли создано фоновое задание. Перейдите в раздел "Администрирование" -> "Обслуживание" -> "Регламентные и фоновые задания" (или аналогичный путь в вашей конфигурации). Здесь мы увидим список всех фоновых заданий.
Найдите в списке фоновое задание, которое должно соответствовать вашему регламентному. Обратите внимание на его состояние (например, "Выполняется", "Выполнено", "Ошибка"), время начала и окончания. Если фоновое задание успешно отработало, состояние регламентного задания должно обновиться.
Если фоновое задание не появилось в списке или имеет статус "Ошибка", это уже серьезная подсказка. Мы можем получить список фоновых заданий программно:
// Получаем список всех активных фоновых заданий
СписокФоновыхЗаданий = ФоновыеЗадания.ПолучитьЗадания();
Для Каждого Задание Из СписокФоновыхЗаданий Цикл
Сообщить("Имя: " + Задание.Имя + ", Состояние: " + Задание.Состояние + ", Описание: " + Задание.Описание);
КонецЦикла;
Давайте внимательно проанализируем свойства нашего регламентного задания. Иногда причина кроется в неочевидной, но важной настройке.
Флаг "Использование" (или "Включено"). В свойствах регламентного задания (как в конфигураторе, так и в пользовательском режиме), убедитесь, что установлен флажок "Использование" (или "Включено"). Если этот флаг снят, задание не будет создавать фоновые задания и, соответственно, не будет выполняться. Это очень важный пункт, который часто упускают из виду.
Расписание. Нам необходимо убедиться, что расписание задано корректно и содержит актуальные даты и время выполнения. Неправильно настроенное расписание не позволит планировщику запустить задание. Проверьте следующие моменты:
Расписание можно проверить как в конфигураторе, так и в пользовательском режиме, открыв свойства регламентного задания. Программно мы можем получить расписание так:
РегламентноеЗадание = РегламентныеЗадания.НайтиПоИмени("ИмяВашегоРегламентногоЗадания");
Если РегламентноеЗадание <> Неопределено Тогда
Расписание = РегламентноеЗадание.Расписание;
Если Расписание <> Неопределено Тогда
Сообщить("Расписание задания: " + Расписание.Описание());
Иначе
Сообщить("Расписание для задания не задано.");
КонецЕсли;
КонецЕсли;
Способ, которым было создано регламентное задание, также играет роль в его поведении.
Предопределенные регламентные задания. Если вы добавили регламентное задание непосредственно в конфигурацию и установили флаг "Предопределенное", то оно автоматически создается в информационной базе при запуске 1С:Предприятия в единственном экземпляре. Такие задания нельзя удалить из списка в пользовательском режиме, и они обычно сразу видны.
Задание, добавленное в конфигурацию без флага "Предопределенное". Если задание было добавлено в конфигурацию, но без установки флага "Предопределенное", оно не появится автоматически в списке регламентных заданий в режиме 1С:Предприятие. В этом случае его необходимо либо добавить вручную в пользовательском режиме (через кнопку "Создать" в списке регламентных заданий), либо создать программно.
Программное создание задания (например, через дополнительную обработку). Если задание создается программно, нам необходимо убедиться, что код создания выполняется при старте системы или в определенный момент. Также важно, чтобы задание регистрировалось в информационной базе с правильными параметрами и расписанием. Рассмотрим пример программного создания регламентного задания:
// Создаем новый объект регламентного задания
НовоеРегламентноеЗадание = РегламентныеЗадания.СоздатьРегламентноеЗадание();
// Устанавливаем основные свойства
НовоеРегламентноеЗадание.Имя = "МоеНовоеРегламентноеЗадание"; // Уникальное имя
НовоеРегламентноеЗадание.Метод = "ОбщиеМодули.МойОбщийМодуль.ВыполнитьМоюПроцедуру"; // Метод, который будет выполняться
НовоеРегламентноеЗадание.Использование = Истина; // Обязательно включаем!
НовоеРегламентноеЗадание.Описание = "Пример регламентного задания, созданного программно";
НовоеРегламентноеЗадание.Ключ = "КлючМоегоНовогоЗадания"; // Уникальный ключ, предотвращает одновременный запуск
// Создаем расписание
Расписание = НовоеРегламентноеЗадание.Расписание;
Расписание.ЗаполнитьДневное(24, 0, 0, 0, 0, 0); // Запускать каждый день в 00:00:00
// Или, например, запускать каждые 15 минут
// Расписание.ЗаполнитьДневное(0, 15, 0, 0, 0, 0);
// Записываем регламентное задание в информационную базу
Попытка
НовоеРегламентноеЗадание.Записать();
Сообщить("Регламентное задание успешно создано и записано.");
Исключение
Сообщить("Ошибка при создании регламентного задания: " + ОписаниеОшибки());
КонецПопытки;
Мы должны убедиться, что в коде правильно указано Имя, Метод (в формате "ИмяОбщегоМодуля.ИмяПроцедурыЭкспорта"), установлен флаг Использование = Истина и задано корректное Расписание.
Иногда проблема кроется не в самом задании, а в условиях, в которых оно должно выполняться.
Клиент-серверный режим. В клиент-серверном варианте фоновые задания выполняются под учетной записью пользователя Windows, от имени которого запущен процесс сервера 1С:Предприятия. Мы должны убедиться, что у этой учетной записи есть достаточные права для выполнения всех действий, которые выполняет регламентное задание. Например, если задание работает с файлами на сетевых ресурсах или обращается к внешним системам, у пользователя сервера 1С должны быть соответствующие разрешения.
Файловый режим. В файловом режиме для выполнения регламентных заданий необходимо, чтобы была запущена отдельная сессия 1С:Предприятия. Часто для этого используют "технического" пользователя, сеанс которого постоянно активен. В этой сессии должен периодически вызываться метод ВыполнитьОбработкуЗаданий() или использоваться ПодключитьОбработчикОжидания(), который будет проверять и запускать регламентные задания. Если такой сессии нет или она не выполняет нужные действия, задания не будут работать.
Блокировка регламентных заданий. Нам следует проверить, не включена ли блокировка регламентных заданий для информационной базы. Это можно сделать в "Администрировании серверов 1С:Предприятия" (консоль сервера 1С) в свойствах информационной базы. Если блокировка включена, задания не будут выполняться автоматически, независимо от их настроек.
Даже если состояние не отображается, ценную информацию мы можем найти в Журнале регистрации.
Журнал регистрации. Внимательно изучите Журнал регистрации. Отфильтруйте записи по событиям, связанным с РегламентноеЗадание и ФоновоеЗадание. Здесь мы можем найти записи о попытках запуска, а также об ошибках выполнения. Сообщения об ошибках часто содержат конкретную причину, по которой задание не смогло выполниться (например, "Недостаточно прав", "Метод не найден", "Ошибка выполнения процедуры").
Свойство "Ключ". У каждого регламентного задания есть свойство Ключ. Оно позволяет предотвратить одновременный запуск нескольких экземпляров одного и того же регламентного задания с одинаковым ключом. Если задание с таким ключом уже выполняется (или "зависло" в состоянии выполнения), новое задание не будет запущено. Убедитесь, что ваш ключ уникален для данного задания и нет других "зависших" заданий с таким же ключом, которые могли бы блокировать запуск.
Разбирая проблему отсутствия состояния у регламентного задания, мы видим, что причин может быть несколько, и подход к решению должен быть комплексным. Начиная с проверки базовых настроек и ручного запуска, постепенно углубляясь в анализ фоновых заданий, журнала регистрации и среды выполнения, мы обязательно найдем корень проблемы и заставим наше регламентное задание работать как часы!
← К списку