При работе с файловой базой 1С пользователи часто сталкиваются с ситуацией, когда регламентное задание (РЗ) "зависает" в процессе выполнения. Это может привести к блокировке других критически важных регламентных операций, например, синхронизации с бухгалтерской программой, и существенно нарушить рабочий процесс. В нашей теме на форуме рассматривается именно такая проблема: зависшее регламентное задание "Загрузка электронной почты" в 1С:Управление нашей фирмой (УНФ) версии 1.6 не позволяло запускаться другим регламентным заданиям.
Мы подробно разберем, почему регламентные задания могут зависать, как их принудительно остановить в файловом режиме, а также рассмотрим дополнительные методы мониторинга и управления регламентными заданиями, чтобы избежать подобных проблем в будущем.
Прежде чем перейти к решению, выясним основные причины, по которым регламентные задания могут "замирать" в процессе выполнения:
В файловом режиме работы 1С:Предприятия регламентные задания выполняются на одном из запущенных клиентских компьютеров. Для их работы требуется, чтобы был запущен хотя бы один сеанс 1С. Важно понимать, что каждое регламентное задание порождает фоновое задание. Если регламентное задание отключено или его расписание изменено, но фоновое задание уже было запущено, оно может продолжать выполняться. В случае, когда сеанс, запустивший фоновое задание, отключается, это фоновое задание может быть "подхвачено" другим доступным активным сеансом 1С, работающим с той же базой. Обычно такой переход занимает до 60 секунд, после чего, если доступных сеансов нет, фоновое задание завершается или умирает. В нашей ситуации зависшее фоновое задание "Загрузка электронной почты" блокировало запуск других фоновых заданий, так как на один клиентский сеанс в файловой базе может выполняться только одно фоновое задание.
В случае, если регламентное задание зависло и не отключается стандартными средствами, мы можем применить параметр командной строки при запуске 1С, который временно блокирует выполнение всех регламентных заданий в данном сеансе. Разберем шаги:
Для успешного применения данного метода критически важно, чтобы в базе не было других активных пользователей. Если другие сеансы 1С продолжат работать, зависшее фоновое задание может быть подхвачено одним из них, и параметр запуска не даст желаемого эффекта. Поэтому:
Шаг 1.1: Сообщаем всем пользователям о необходимости завершить работу с программой 1С.
Шаг 1.2: Убеждаемся, что все активные сеансы закрыты. Это можно проверить через список активных пользователей в режиме Конфигуратор или через Администрирование -> Обслуживание -> Активные пользователи в режиме Предприятие (если вы успеваете туда попасть).
/AllowExecuteScheduledJobs –OffПосле того как все пользователи вышли из базы, мы запускаем 1С с специальным параметром, который отключает запуск регламентных заданий в данном сеансе.
Шаг 2.1: Открываем окно запуска 1С (то, где выбираются базы).
Шаг 2.2: Выбираем проблемную базу и нажимаем кнопку "Изменить".
Шаг 2.3: Находим поле "Дополнительные параметры запуска" или "Параметры запуска" (в зависимости от версии интерфейса). В это поле добавляем следующую строку:
/AllowExecuteScheduledJobs –Off
Шаг 2.4: Запускаем 1С в режиме Предприятие с этим параметром. Важно: для гарантированного результата, особенно если вы не уверены в корректности завершения фоновых заданий, рекомендуется запустить 1С в режиме Конфигуратор, а уже из него - в режиме Предприятие. Это может помочь "оборвать" зависшие процессы, которые привязаны к конфигуратору.
При запуске 1С с параметром /AllowExecuteScheduledJobs –Off, текущий сеанс не будет инициировать выполнение никаких регламентных заданий. Это эффективно останавливает "подхват" зависшего фонового задания другими сеансами и дает ему возможность корректно завершиться (тайм-аут).
После запуска 1С с указанным параметром, мы можем проверить, что проблема решена.
Шаг 3.1: В запущенной базе 1С переходим в раздел Администрирование -> Обслуживание -> Регламентные операции -> Фоновые задания и убеждаемся, что зависшее задание отсутствует или находится в состоянии "Завершено с ошибкой" (что лучше, чем "Выполняется").
Шаг 3.2: Проверяем работу других регламентных заданий, которые ранее были заблокированы, например, запускаем синхронизацию с бухгалтерской программой. Если они начали выполняться, значит, мы успешно решили проблему.
После завершения всех необходимых операций и успешного решения проблемы, нам нужно снова включить регламентные задания для нормальной работы системы. Это можно сделать одним из следующих способов:
Способ 4.1: Запустить 1С без параметра /AllowExecuteScheduledJobs. Первое запущенное приложение 1С без этого параметра снова начнет выполнять регламентные задания.
Способ 4.2: Явно запустить 1С с параметром /AllowExecuteScheduledJobs –On. Этот параметр явно разрешает выполнение регламентных заданий в данном сеансе. После одного запуска с этим параметром можно вернуться к обычному запуску.
Шаг 4.3 (для специфических случаев): Если мы хотим принудительно назначить выполнение регламентных заданий на определенный сеанс, даже если уже есть другие, которые их выполняют, мы можем использовать параметр /AllowExecuteScheduledJobs –Force.
Помимо основного решения, существуют и другие методы, которые могут быть полезны в различных сценариях. Рассмотрим их:
Встроенный язык 1С предоставляет возможность программно управлять фоновыми заданиями. Мы можем использовать метод ФоновоеЗадание.Отменить() для прерывания выполнения задания. Однако есть несколько нюансов:
Пример использования (в консоли кода или в обработке):
&НаКлиенте
Процедура ОтменитьФоновоеЗадание(Команда)
Если Вопрос("Вы уверены, что хотите отменить все выполняющиеся фоновые задания?", РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет) = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Задания = ПолучитьЗаданияНаСервере();
Для Каждого Задание Из Задания Цикл
Если Задание.Состояние = СостояниеФоновогоЗадания.Выполняется Тогда
Попытка
ОтменитьФоновоеЗаданиеНаСервере(Задание.УникальныйИдентификатор);
Сообщить("Фоновое задание " + Задание.Идентификатор + " отменено.");
Исключение
Сообщить("Не удалось отменить фоновое задание " + Задание.Идентификатор + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьЗаданияНаСервере()
Возврат ФоновыеЗадания.ПолучитьФоновыеЗадания();
КонецФункции
&НаСервере
Процедура ОтменитьФоновоеЗаданиеНаСервере(ИдентификаторЗадания)
ФоновоеЗадание.Отменить(ИдентификаторЗадания);
КонецПроцедуры
Этот пример демонстрирует, как получить список всех фоновых заданий и попытаться отменить те, которые находятся в состоянии "Выполняется".
В некоторых случаях, если фоновое задание зависло из-за некорректных временных данных, может помочь очистка кэша. Для файловой базы это означает очистку кэша пользователя. Если это не помогло, и вы предполагаете, что проблема связана с данными сеансов, то на крайний случай, при невозможности запустить 1С, вы можете попробовать:
1Cv8.1 или 1Cv8.tmp, или в системном каталоге временных файлов пользователя). Можно попробовать удалить кэш 1С для пользователя (обычно находится в %LOCALAPPDATA%\1C\1Cv8\ или %APPDATA%\1C\1Cv8\).Внимание: Этот метод следует применять с осторожностью, так как неправильное удаление файлов может повредить базу или вызвать необходимость повторной настройки.
Хотя в нашем случае база файловая, полезно знать, как подобные проблемы решаются в клиент-серверном режиме, для расширения общего понимания. В клиент-серверном варианте зависшие фоновые задания можно удалить без перезагрузки всего сервера 1С, используя консоль администрирования серверов 1С:
rphost.exe), в котором оно выполняется.rphost.exe через диспетчер задач по его PID.Этот метод позволяет "аккуратно" завершить зависший процесс, не влияя на работу других баз и пользователей.
Чтобы минимизировать риск зависания регламентных заданий в будущем, мы можем использовать различные инструменты мониторинга и управления:
Журнал регистрации 1С:Предприятия — наш основной инструмент для отслеживания событий. Он записывает информацию о начале и окончании выполнения фоновых заданий, а также все возникающие ошибки. Регулярный просмотр журнала регистрации помогает оперативно выявлять проблемы.
Для более удобного и развитого мониторинга существуют внешние обработки, которые называются "Консоль заданий". Эти обработки предоставляют расширенные возможности по просмотру, управлению и анализу фоновых и регламентных заданий, включая их запуск, остановку, изменение расписания и просмотр логов.
В самой программе 1С мы можем осуществлять контроль за регламентными заданиями через раздел Администрирование -> Обслуживание -> Регламентные операции. Здесь доступны два уровня контроля:
Чтобы избежать нежелательных проблем с регламентными заданиями, часто бывает эффективнее отключать не само регламентное задание, а связанные с ним функциональные настройки в программе. Например, если зависает регламентное задание полнотекстового поиска, мы можем отключить сам полнотекстовый поиск. Аналогично можно поступить с автоматической проверкой контрагентов, обновлением классификаторов, справочников или проверкой обновлений программы. Это позволяет сохранить функционал РЗ в рабочем состоянии для других задач, но временно отключить проблемный аспект.
Зависшие регламентные задания в файловой базе 1С могут быть серьезной проблемой, но, как мы выяснили, существуют эффективные методы для их устранения. Основное решение в нашем случае заключалось в использовании параметра запуска /AllowExecuteScheduledJobs –Off после выгона всех пользователей из базы. Этот метод позволяет временно отключить выполнение регламентных заданий в конкретном сеансе, давая возможность зависшему фоновому заданию завершиться. Важно также понимать механизмы работы фоновых заданий и применять инструменты мониторинга и управления, чтобы предотвращать подобные ситуации в будущем и обеспечивать стабильную работу вашей информационной системы 1С.