Сталкиваясь с тем, что регламентное задание, которое исправно работало в файловой базе 1С:УНФ, вдруг перестало запускаться, мы можем оказаться в затруднительном положении. Особенно если при ручном запуске оно отрабатывает корректно, а в журнале регистрации отсутствуют какие-либо ошибки. Мы уже убедились, что код нашей функции работает, ведь при ручном запуске все отрабатывает за пару секунд, а типовые регламентные задания запускаются без проблем. Это указывает на то, что проблема, скорее всего, не в самом коде, а в механизме его запуска или внешних условиях. Рассмотрим эту ситуацию и выясним, как вернуть задание в строй.
Прежде чем приступить к диагностике, нам необходимо разобраться с тем, как устроена работа регламентных заданий в файловом варианте информационной базы 1С. Это критически важно, так как здесь есть существенные отличия от клиент-серверного варианта, где регламентные задания запускаются выделенным сервером приложений.
В файловой базе регламентные задания не запускаются автоматически без участия клиентского приложения. Вместо этого они выполняются клиентскими приложениями или расширением веб-сервера. Это означает, что для их запуска необходимо наличие хотя бы одного активного сеанса 1С. Планировщик заданий в 1С периодически проверяет расписание регламентных заданий и, при совпадении условий, создает и запускает фоновое задание для его выполнения. Эти фоновые задания выполняются асинхронно, то есть незаметно для пользователя, в контексте активного сеанса.
Если ранее у вас был постоянно запущенный сеанс (например, под техническим пользователем или просто активный сеанс одного из пользователей), который обеспечивал выполнение заданий, а теперь его нет, это может быть главной причиной остановки работы. Важно понимать, что в файловом варианте регламентные задания выполняются последовательно, в отличие от клиент-серверного, где возможно параллельное выполнение.
Начиная с платформы 8.3, существует параметр командной строки /AllowExecuteScheduledJobs. Он позволяет управлять возможностью выполнения регламентных заданий расширением веб-сервера для файлового варианта информационной базы. Если база запускается через веб-сервер, этот параметр может играть роль, разрешая или запрещая выполнение регламентных заданий.
Когда мы сталкиваемся с тем, что регламентное задание не работает автоматически, но успешно выполняется вручную и не регистрирует ошибок, мы понимаем, что проблема, скорее всего, не в самом коде функции, а в механизме его запуска или внешних условиях. Мы уже проверили, что остальные типовые регламентные задания работают, и это сужает круг поиска.
Рассмотрим основные возможные причины, по которым наше регламентное задание могло перестать работать:
Отсутствие активных сеансов. Как мы уже выяснили, это одна из самых частых причин в файловых базах. Если ни один пользователь не работает в системе или специально выделенный сеанс был закрыт, задания не смогут быть запущены. Планировщик заданий в файловой базе нуждается в активном сеансе для инициации фонового задания.
Блокировка регламентных заданий. Регламентные задания могут быть заблокированы. Хотя чаще это встречается в клиент-серверном варианте (через администрирование серверов 1С), стоит исключить и такую возможность для файлового режима. Запуск базы с параметром /AllowExecuteScheduledJobs –off может временно отключить выполнение заданий, и если он был применен ранее, то задания останутся выключенными до явного включения параметром /AllowExecuteScheduledJobs –on.
Изменения в коде или конфигурации. Несмотря на то, что мы уже излазили процедуру отладчиком и убедились в ее работоспособности при ручном запуске, иногда в файловом режиме проявляются неочевидные особенности серверного контекста. Например, могли измениться права доступа пользователя, под которым запускается регламентное задание (в файловом режиме это часто первый вошедший пользователь), или доступность внешних ресурсов, необходимых для выполнения задачи.
Проблемы с расписанием. Хотя задание работало год, могли произойти непредвиденные изменения в расписании или его интерпретации платформой. Рекомендуется еще раз внимательно проверить настройки расписания задания.
Ошибки, не попадающие в ЖР. В редких случаях ошибки могут не записываться в журнал регистрации, особенно если они приводят к некорректному завершению процесса выполнения фонового задания на очень ранней стадии, не доходя до записи в лог. Это может происходить, например, при проблемах с памятью или некорректной инициализации.
Теперь, когда мы понимаем потенциальные причины, давайте пошагово разберем, как мы можем диагностировать и устранить проблему с нашим регламентным заданием.
Убедимся в наличии активного клиентского сеанса.
Это самый первый и важный шаг для файловых баз. Мы должны убедиться, что хотя бы один клиентский сеанс 1С постоянно запущен. Это может быть:
Если активного сеанса нет, попробуем запустить 1С под любым пользователем и оставить его открытым. Через 5-10 минут (в зависимости от интервала запуска нашего задания) проверим, начало ли наше регламентное задание выполняться. В идеале для стабильной работы регламентных заданий в файловом режиме рекомендуется создавать отдельный выделенный клиентский сеанс, который будет постоянно запущен и обрабатывать регламентные задания.
Воспользуемся "Консолью заданий".
Это мощный инструмент для просмотра состояния, истории выполнения и возможных ошибок регламентных и фоновых заданий. Мы можем найти ее в разделе "Администрирование" или "Все функции" (если включено в настройках 1С). Через консоль мы сможем увидеть, создаются ли фоновые задания для нашего регламентного задания, в каком они статусе (например, "Ожидание", "Выполняется", "Выполнено", "Отменено") и есть ли хоть какие-то сообщения об ошибках или предупреждениях. Если фоновые задания для нашего регламентного задания вообще не создаются, это указывает на проблему с планировщиком или условиями запуска.
Создадим новое простое регламентное задание.
Этот шаг поможет нам изолировать проблему: находится ли она в нашем конкретном коде/модуле или в самой инфраструктуре запуска регламентных заданий в нашей базе. Создадим новое регламентное задание с минимальной функциональностью, например, которое просто записывает строку в журнал регистрации.
Для этого нам потребуется создать новый общий модуль (например, МойТестовыйМодуль) в конфигурации. Важно установить для него свойство "Сервер" и, возможно, "Вызов сервера" (хотя в файловой базе это разделение менее критично). В нем определим простую экспортную процедуру:
// МойТестовыйМодуль
Процедура ЗаписатьВЖурнал() Экспорт
ЗаписьЖурналаРегистрации(НСтр("ru = 'Тестовое регламентное задание выполнено!'"),
УровеньВажностиЖурналаСобытий.Информация,
Метаданные.РегламентныеЗадания.ИмяВашегоНовогоРегламентногоЗадания, // Здесь 'ИмяВашегоНовогоРегламентногоЗадания' - это уникальное имя, которое вы дадите новому РЗ в конфигурации
"Проверка работы регламентных заданий.");
КонецПроцедуры
Затем создадим новое регламентное задание в конфигурации, указав в качестве метода МойТестовыйМодуль.ЗаписатьВЖурнал и настроим расписание, например, на каждую минуту. Если это новое задание заработает, регулярно записывая сообщения в журнал регистрации, это будет означать, что проблема кроется в исходном коде нашего старого задания или его контексте (например, правах, используемых внешних объектах или особенностях работы в фоновом режиме). Если же и это простое задание не запускается, то мы понимаем, что проблема в системных настройках или инфраструктуре запуска регламентных заданий в целом.
Проверим права пользователя, под которым запускается регламентное задание.
Если регламентные задания запускаются от имени пользователя (даже если это "фоновый" пользователь, который не работает интерактивно), нам необходимо убедиться, что у этого пользователя есть все необходимые права для выполнения действий, предусмотренных нашим заданием. В файловой базе это часто первый вошедший пользователь или пользователь, который запустил сеанс, инициирующий задания. Проверим, не были ли случайно изменены его роли или профили доступа, которые могли бы ограничить выполнение задачи. Особое внимание уделим доступу к данным, внешним обработкам, отчетам, а также к правам на выполнение серверных вызовов, если такие имеются в коде задания.
Перезапустим платформу и операционную систему.
Хотя этот шаг кажется очевидным, иногда он помогает. Полная перезагрузка компьютера, на котором запущена файловая база, может устранить зависшие процессы, некорректно работающие компоненты или освободить ресурсы, которые могли бы блокировать запуск заданий. Также попробуем перезапустить саму платформу 1С, закрыв все сеансы и открыв заново.
Проанализируем расписание регламентного задания.
Хотя расписание работало год, не исключено, что могли произойти неявные изменения или сбои. Откроем расписание нашего регламентного задания и внимательно проверим все настройки: интервалы запуска, дни недели, месяцы, время начала и окончания, а также дата начала действия расписания. Попробуем пересохранить расписание, возможно, это обновит его внутреннее представление и устранит потенциальные внутренние ошибки.
Использование параметра /AllowExecuteScheduledJobs.
Если база работает через веб-сервер, мы можем явным образом управлять возможностью выполнения регламентных заданий. Убедимся, что параметр не установлен в –off, что может полностью блокировать выполнение. Если необходимо, мы можем явно запустить 1С с параметром /AllowExecuteScheduledJobs –on, чтобы убедиться, что возможность выполнения регламентных заданий включена для данного сеанса.
Пример команды для запуска толстого клиента 1С из командной строки с параметром (для включения):
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"C:\Path\To\Your\Database" /N"Пользователь" /P"Пароль" /AllowExecuteScheduledJobs -on
Замените пути и данные пользователя на свои актуальные. Параметр ENTERPRISE указывает на запуск именно толстого клиента.
Проблема с регламентными заданиями в файловой базе часто связана с внешними условиями, а не с самим кодом. Пошагово проходя предложенные диагностические шаги, мы сможем выявить истинную причину и восстановить работоспособность нашего задания. Помните, что постоянный активный сеанс – это залог стабильной работы регламентных заданий в файловом режиме.