При разработке конфигурации «с нуля» на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с необходимостью мониторинга и настройки регламентных заданий. В отличие от типовых решений, где уже встроены соответствующие интерфейсы, в самописной конфигурации по умолчанию нет удобного визуального средства для управления этими процессами в режиме Управляемого приложения. В этой статье мы подробно рассмотрим все доступные способы решения этой задачи: от использования внешних инструментов до написания собственного программного кода.
Самым быстрым и эффективным способом управления является использование внешней обработки «Консоль заданий». Важно учитывать, что старые версии консолей, предназначенные для обычных форм, не запустятся в управляемом интерфейсе без специальной адаптации. Рассмотрим основные варианты:
Для запуска в режиме обычного приложения в управляемой конфигурации необходимо в свойствах конфигурации разрешить использование обычных форм и запустить клиентское приложение с ключом /RunModeOrdinaryApplication.
Разберем ситуацию, когда нам необходимо быстро вывести список всех регламентных заданий в самописной базе без поиска сторонних обработок. Платформа предоставляет объект РегламентныеЗаданияМенеджер, через который мы можем программно управлять списком. Проанализируем пример кода, который возвращает массив всех существующих регламентных заданий:
// Получаем все регламентные задания конфигурации
ЗаданияМассив = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого ТекущееЗадание Из ЗаданияМассив Цикл
Сообщить("Задание: " + ТекущееЗадание.Метаданные.Имя);
Сообщить("Активность: " + ТекущееЗадание.Использование);
Сообщить("Последнее состояние: " + ТекущееЗадание.Состояние);
КонецЦикла;
Этот метод ПолучитьРегламентныеЗадания() возвращает объекты типа РегламентноеЗадание. У каждого такого объекта мы можем прочитать расписание через свойство Расписание и изменить его программно с помощью метода УстановитьРасписание(). Это критически важно для самописных баз, где графический интерфейс настройки еще не реализован.
Для понимания процесса мониторинга важно различать эти два понятия. Выясним причину, почему иногда в списке регламентных заданий все «зеленое», а данные не обновляются. Регламентное задание — это объект в метаданных, который определяет «что» и «когда» делать. Однако само действие выполняется в рамках Фонового задания.
Рассмотрим, как посмотреть список фоновых заданий, которые были порождены конкретным регламентным заданием. Это необходимо для анализа ошибок и причин зависания процессов:
// Отбор фоновых заданий по конкретному регламентному заданию
Фильтр = Новый Структура;
Фильтр.Вставить("РегламентноеЗадание", ВыбранноеРегламентноеЗадание);
Фоновые = ФоновыеЗадания.ПолучитьФоновыеЗадания(Фильтр);
Для Каждого ФЗ Из Фоновые Цикл
Если ФЗ.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
ЗаписатьВЛог("Ошибка в задании: " + ФЗ.ИнформацияОбОшибке.Описание);
КонецЕсли;
КонецЦикла;
Проанализируем ситуацию: если регламентное задание запущено, но упало с ошибкой, информацию об этом нужно искать именно в объекте ФоновоеЗадание через свойство ИнформацияОбОшибке.
Если ваша база работает в клиент-серверном варианте, мы можем осуществлять мониторинг без запуска 1С. В утилите «Администрирование серверов 1С Предприятия» (MMC-консоль) можно увидеть активные сеансы фоновых заданий. Рассмотрим шаги для анализа:
Здесь же можно принудительно завершить зависшее задание, удалив его сеанс. Кроме того, в свойствах информационной базы в консоли кластера есть важный флажок «Блокировка регламентных заданий включена». Если этот флаг установлен, ни одно задание не запустится, даже если в самой конфигурации оно помечено как активное. Это первое место, которое стоит проверить, если ваши задания перестали выполняться.
Если ваша самописная конфигурация создавалась с использованием фрагментов БСП, то задача значительно упрощается. Рассмотрим встроенные возможности подсистемы «Регламентные задания»:
В БСП уже реализована форма РегламентныеИФоновыеЗадания. Вам достаточно добавить ее в интерфейс или запустить через «Функции для технического специалиста». Она предоставляет:
Проанализируем ситуацию, когда код регламентного задания не отрабатывает так, как ожидается, и нам нужна отладка. Поскольку код выполняется на сервере в контексте отдельного фонового процесса, обычная точка останова может не сработать. Разберем шаги настройки отладки:
-debug. Без этого отладка серверного кода невозможна.Теперь при запуске фонового задания отладчик автоматически «подцепит» этот сеанс, и выполнение остановится на вашей точке останова в серверном модуле.
Важно помнить, что в платформе 8.3 параметры регламентных заданий (активность и расписание) хранятся не в метаданных (.cf), а в системных таблицах конкретной базы данных. Рассмотрим последствия этого факта:
Если вы обновите базу через «Загрузить конфигурацию из файла», настройки расписания останутся прежними. Если же вы создаете новую базу из файла .dt, все настройки расписаний перенесутся вместе с данными. При тестировании на копии базы обязательно проверяйте блокировку регламентных заданий в консоли сервера, чтобы копия базы не начала выполнять реальные действия (например, рассылку писем клиентам или обмен с сайтом).
Таким образом, для эффективной работы с регламентными заданиями в самописной конфигурации на УФ мы рекомендуем комбинировать использование внешней консоли заданий с ИТС для оперативной настройки и программные методы для глубокого анализа состояния системы.