В процессе эксплуатации крупных систем на базе платформы 1С:Предприятие 8.3 (особенно на обычных формах) администраторы и программисты часто сталкиваются с ситуацией, когда РегламентныеЗадания внезапно перестают выполняться. При этом в консоли заданий отображается статус «Выполнено с ошибками», но поле описания ошибки остается абсолютно пустым. Ситуация осложняется тем, что даже попытки отладки не приносят результата: выполнение не доходит до первой строки кода процедуры задания.
В этой статье мы подробно разберем, почему возникает подобная проблема, проанализируем внутренние механизмы платформы и найдем эффективные способы восстановления работоспособности фоновых процессов.
Прежде чем приступать к радикальным мерам, давайте проанализируем типичную картину проблемы:
Если вы столкнулись с подобным поведением, значит проблема кроется не в самом теле процедуры задания, а на этапе инициализации фонового сеанса. Рассмотрим пошагово, как решить эту задачу.
Как показывает практика, наиболее частой причиной «тихого» падения регламентного задания является отсутствие привязки к конкретному пользователю. По умолчанию регламентные задания в клиент-серверном варианте запускаются от имени системного пользователя. Однако, если в конфигурации есть жесткие проверки прав или специфическая логика инициализации, сеанс может закрыться аварийно.
Рассмотрим, как это исправить:
Почему это помогает? При указании пользователя платформа принудительно создает полноценный контекст сеанса, что часто позволяет обойти ошибки инициализации, возникающие при анонимном запуске.
Если назначение пользователя не помогло, нам необходимо заглянуть в МодульСеанса. Проблема часто кроется в процедуре УстановкаПараметровСеанса. Когда запускается фоновое задание, платформа вызывает этот обработчик. Если внутри кода происходит обращение к элементам интерфейса, клиентским переменным или попытка получить данные пользователя, который в данном контексте не определен, фоновое задание «вылетает» с системной ошибкой до записи в ЖР.
Проанализируем пример безопасного кода в модуле сеанса:
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
// Проверяем, не является ли текущий сеанс фоновым заданием
Если ПараметрыСеанса.ТекущийПользователь.Пустая() Тогда
// Для фоновых заданий без пользователя устанавливаем минимально необходимый набор
// Или выходим, если логика ниже требует наличия реального пользователя
Возврат;
КонецЕсли;
// Логика установки параметров, критичная к наличию пользователя
УстановитьЗначениеПараметраСеанса(ТребуемыеПараметры);
КонецПроцедуры
Важный совет: Добавьте в начало этой процедуры запись в Журнал Регистрации. Если запись не появляется при запуске регламентного задания, значит ошибка происходит еще раньше — на уровне ядра платформы или лицензирования.
Иногда причина кроется в «зависших» данных в каталоге кластера серверов 1С. Это особенно актуально для платформы версии 8.3.9. Платформа может хранить некорректные данные о состоянии сеансов в служебных файлах.
Выполним следующие действия по очистке:
1C:Enterprise 8.3 Server Agent (ragent).C:\Program Files\1cv8\srvinfo\reg_1541).snccntx. В ней хранятся данные сеансов. Полностью очистите ее содержимое.Local\Temp пользователя, под которым работает служба 1С.Эта процедура заставляет кластер пересоздать таблицу заданий и сеансов, что часто устраняет фантомные ошибки «Выполнено с ошибками».
Фоновые задания требуют наличия свободных лицензий. Если в кластере настроен режим строгой экономии лицензий или их количество на сервере ограничено, фоновое задание может мгновенно завершаться, так как менеджер не смог выделить ему лицензию. При этом в интерфейсе это может выглядеть как пустая ошибка.
Проанализируем ситуацию с лицензированием:
ragent разрешена выдача лицензий сервером 1С.Когда Журнал Регистрации бессилен, единственным достоверным источником информации становится Технологический журнал (ТЖ). Он позволяет увидеть системные исключения (Exceptions), которые не успевают попасть в прикладной лог.
Для диагностики создайте файл logcfg.xml в папке conf сервера 1С со следующим содержанием:
<config xmlns="http://v8.1c.ru/7.4/config/logcfg">
<log location="C:\LOGS\EXCP" history="2">
<event>
<eq property="Name" value="EXCP"/>
</event>
<property name="all"/>
</log>
</config>
После этого запустите регламентное задание и изучите появившиеся логи в папке C:\LOGS\EXCP. Вы наверняка увидите там сообщения вида Session terminated или Error initializing session module, что даст точный ответ: на какой строке и в каком модуле происходит сбой.
Проблема с «молчаливым» падением регламентных заданий чаще всего решается явным указанием пользователя в настройках задания. Это позволяет системе корректно пройти этапы проверки прав и инициализации параметров сеанса. Однако, если база имеет большой объем (как в нашем примере — 400 Гб), не забывайте также о регламентном обслуживании SQL-сервера и очистке серверных кэшей, так как накопленные ошибки метаданных могут блокировать работу фоновых процессов на уровне СУБД.
Используя предложенные методы — от простой смены пользователя до настройки Технологического журнала — мы сможем быстро локализовать и устранить любые сбои в работе автоматизированных процессов вашей системы.