Проблема внезапной остановки регламентных заданий в файловом варианте работы 1С — ситуация довольно распространенная. В отличие от клиент-серверного варианта, где за расписание отвечает менеджер кластера, в файловой базе механизм исполнения заданий напрямую зависит от активных пользовательских сеансов. Разберем детально, как устроена эта система и что делать, если обмен с сайтом или другие автоматические процессы перестали запускаться.
Начиная с версии 8.3.3.641, фирма «1С» значительно изменила архитектуру работы с фоновыми процессами в файловом режиме. Рассмотрим подробнее, как это реализовано сейчас. Ранее для работы заданий требовался выделенный сеанс, в котором постоянно крутился цикл обработки. Теперь же всё работает иначе:
Проанализируем ситуацию: если регламентные задания работали, а потом внезапно «застыли» на определенной временной отметке, это означает, что либо поток планировщика в «ответственном» сеансе завис, либо очередь заданий заблокирована длительным процессом.
В файловой базе данных существует жесткое ограничение: все фоновые и регламентные задания выстраиваются в одну общую очередь. Если одно из заданий (например, тяжелый расчет себестоимости или проблемный обмен) «зависло» или выполняется аномально долго, оно блокирует выполнение всех последующих заданий по расписанию.
Выясним причину через мониторинг. Выяснить, какой процесс тормозит систему, можно с помощью встроенных инструментов или внешней обработки «Консоль заданий». Посмотрим на список выполненных заданий: если последнее запущенное задание всё еще имеет статус «Выполняется» и время его работы превышает разумные пределы, именно оно является виновником остановки всей очереди. Для детального контроля зависших процессов и управления очередью можно использовать консоль регламентных и фоновых заданий.
Иногда сеанс 1С завершается некорректно (например, при выключении компьютера «через кнопку» или сбое сети). В этом случае в каталоге информационной базы могут остаться файлы блокировок с расширением *.lck или записи в таблице сеансов, которые заставляют систему думать, что планировщик всё еще активен в том, старом сеансе.
Рассмотрим порядок действий для исправления этой ситуации:
1cv8.exe..cfl, .lck).1Cv8.1CD.Иногда выполнение заданий может быть запрещено на программном уровне или через параметры командной строки. Проанализируем два способа управления этим процессом.
Во-первых, проверьте настройки самой информационной базы. В коде это регулируется свойством БлокировкаРегламентныхЗаданий. Если база была скопирована или восстановлена из бэкапа, платформа часто автоматически включает блокировку, чтобы не запустились автоматические обмены из тестовой копии. Для интерактивного контроля этого состояния подойдёт обработка для управления блокировками регламентных заданий в базе.
Во-вторых, существует специальный параметр запуска AllowExecuteScheduledJobs. Мы можем использовать его, чтобы явно указать системе, какому приложению разрешено брать на себя роль планировщика. Рассмотрим пример строки запуска:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F "C:\Base1C" /AllowExecuteScheduledJobs -Force
Использование этого ключа позволяет принудительно переназначить функцию исполнения регламентных заданий конкретному клиенту.
Разберем ситуацию, когда в базе проводятся административные работы. Если кто-то из пользователей зашел в режиме «Конфигуратор» и выполняет обновление конфигурации базы данных, либо запущено «Тестирование и исправление» в монопольном режиме, выполнение любых заданий по расписанию будет остановлено до завершения этих процедур.
Также стоит проверить наличие свободного места на диске, где лежит база. При дефиците места поток планировщика может просто не иметь возможности записать логи выполнения в таблицу JobScheduleData, что приведет к ошибке и остановке потока.
Для детального анализа рекомендуем воспользоваться обработкой «Консоль заданий». Разберем по шагам, на что обратить внимание:
ВыполнитьОбработкуЗаданий(): хотя в новых версиях 1С это происходит автоматически, в старых конфигурациях на обычных формах иногда полезно запустить этот метод принудительно в отладочных целях.Если вы столкнулись с тем, что задания просто «висят», попробуйте программно проверить состояние блокировки информационной базы:
ПараметрыБлокировки = ПолучитьБлокировкуУстановкуРегламентныхЗаданий();
Если ПараметрыБлокировки.Установлена Тогда
Сообщить("Выполнение заданий запрещено административно!");
КонецЕсли;
Чтобы в будущем избежать остановки регламентных заданий в файловом режиме, придерживайтесь следующих правил:
Таким образом, для починки «сломавшихся» заданий в файловой базе первым делом очистите зависшие сеансы, проверьте отсутствие монопольных блокировок и убедитесь, что ни одно фоновое задание не «забило» общую очередь выполнения.