Администрирование · 9 мин
Как прервать выполнение обработки в 1С
Способы прервать выполнение обработки в 1С: Ctrl+Break, завершение сеанса, остановка фоновых заданий, серверные методы. Пошаговые инструкции и типичные ошибки.
Длительная обработка в 1С — загрузка данных, перепроведение документов, свёртка базы — может работать десятки минут и часов. Иногда её нужно остановить: выбраны неверные параметры, обработка зависла или блокирует работу других пользователей. Способ остановки зависит от того, где выполняется код: в клиентском сеансе, в фоновом задании или на сервере.
Главное различие — интерактивный и неинтерактивный режимы. Интерактивная обработка, запущенная из формы, может отвечать на прерывание пользователем. Фоновое задание и серверный вызов без возврата управления на клиента прервать из интерфейса нельзя — потребуются административные инструменты.
Перед остановкой важно оценить последствия: если обработка уже записала часть данных без транзакции, прерывание оставит базу в частично изменённом состоянии. Об этом — в разделе про риски.
Определите, где выполняется обработка
Первый шаг — понять, как именно запущена обработка. От этого зависит весь дальнейший сценарий. Типичные варианты: обработка запущена из формы и выполняется в клиентском сеансе; обработка работает как фоновое задание; обработка запущена регламентным заданием по расписанию; код выполняется в файловой базе монопольно.
Признак клиентского выполнения — интерфейс конкретного сеанса «завис», но у остальных пользователей база работает. Признак фонового задания — обработка была запущена кнопкой с длительной операцией, форма осталась доступной, а в списке фоновых заданий видно активное задание. Регламентные задания видны в консоли заданий по расписанию.
Как выбрать действие
Прерывание интерактивной обработки клавишами Ctrl+Break
Стандартный способ остановить выполняющийся код в клиентском приложении — сочетание клавиш Ctrl+Break (на многих клавиатурах Break совмещена с Pause). В тонком и толстом клиенте также работает пункт меню «Сервис — Прервать выполнение» в режиме конфигуратора при отладке.
Важное условие: прерывание пользователем должно быть разрешено. В конфигураторе в свойствах конфигурации есть параметр, управляющий возможностью прерывания, а на практике обработка прервётся только в точках, где платформа возвращает управление клиенту. Если код выполняется одним длинным серверным вызовом, Ctrl+Break сработает только после его завершения либо не сработает вовсе.
- 1Нажмите Ctrl+Break в окне зависшего сеанса
- 2Дождитесь появления диалога подтверждения прерывания
- 3Подтвердите прерывание — выполнение кода остановится
- 4Проверьте, не остались ли данные в частично записанном состоянии
- 5Если прерывание не сработало в течение нескольких минут — переходите к завершению сеанса
Если обработка написана с учётом длительных операций (с выводом индикатора и обработкой ожидания), прерывание обычно срабатывает быстро. Если код выполняет один массивный запрос или цикл на сервере без промежуточных вызовов, платформа не сможет вмешаться до окончания вызова.
Остановка фоновых и регламентных заданий
Фоновое задание нельзя прервать клавишами — у него нет интерактивного клиента. В типовых конфигурациях на БСП откройте раздел администрирования и консоль фоновых заданий (обработка «Консоль заданий» или типовой список «Фоновые задания»), найдите активное задание и нажмите «Отменить».
Программно задание отменяется методом ОтменитьВыполнениеЗадания с передачей уникального идентификатора задания. Получить список активных заданий можно методом ПолучитьФоновыеЗадания с отбором по состоянию «Активно».
Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно));
Для Каждого Задание Из Задания Цикл
ФоновыеЗадания.ОтменитьВыполнениеЗадания(Задание.УникальныйИдентификатор);
КонецЦикла;Учтите: отмена задания — это запрос на остановку, а не мгновенное завершение. Если внутри задания выполняется длинный запрос к СУБД, остановка произойдёт после завершения текущей операции. Регламентное задание, которое перезапускается по расписанию, нужно дополнительно отключить в настройках, иначе оно стартует снова.
Завершение зависшего сеанса
Если сеанс не отвечает и прерывание не помогает, завершите его принудительно. В клиент-серверном варианте откройте консоль кластера серверов 1С, найдите нужный сеанс в списке (по пользователю и времени начала) и удалите его. Сеанс завершится, выполняющийся код будет остановлен.
В файловом варианте административной консоли нет. Варианты: завершить процесс 1cv8.exe через диспетчер задач Windows на машине, где запущена обработка, либо, если база открыта через веб-сервер, перезапустить пул приложений. В типовых конфигурациях также доступен список активных пользователей с возможностью завершения сеансов.
Как заложить возможность прерывания в саму обработку
Если вы разрабатываете длительную обработку, предусмотрите штатную остановку. В клиентском варианте периодически вызывайте ОбработкаПрерыванияПользователя() — этот метод проверяет, нажал ли пользователь Ctrl+Break, и генерирует исключение, которое можно обработать и корректно завершить работу.
В фоновых заданиях используйте длительные операции БСП: механизм сам поддерживает отмену — внутри цикла проверяйте признак отмены через ДлительныеОперации.СообщитьПрогресс и связанные проверки. Дополнительно разбивайте запись данных на порции с транзакциями, чтобы прерывание оставляло базу в согласованном состоянии.
Для Каждого Строка Из ТаблицаДанных Цикл
ОбработкаПрерыванияПользователя();
// ... обработка строки ...
КонецЦикла;Также полезно выводить индикатор прогресса и кнопку «Отмена», которая устанавливает флаг, проверяемый в цикле. Это даёт пользователю понятный и безопасный способ остановиться вместо принудительного снятия сеанса.
Риски прерывания и проверка результата
Главный риск — частично записанные данные. Если обработка записывает объекты по одному без общей транзакции, после остановки часть документов будет проведена, часть — нет. Восстановить «как было» автоматически не получится: потребуется либо откат из резервной копии, либо ручной анализ и исправление.
В клиент-серверном варианте незавершённые транзакции СУБД откатывает автоматически при завершении сеанса — это защищает целостность. В файловом варианте жёсткое снятие процесса в момент записи может повредить файл 1Cv8.1CD, поэтому такой способ — только крайняя мера.
Как проверить результат
Сеанс завершён, задание в состоянии «Отменено» или «Завершено»
Задание остаётся активным спустя несколько минут после отмены
Документы и регистры в согласованном состоянии, отчёты сходятся
Часть документов проведена, часть нет, есть «битые» ссылки
База открывается, тестирование и исправление не выявляет ошибок
Ошибки при открытии, требуется восстановление из копии
Частые вопросы
Почему Ctrl+Break не останавливает обработку?
Прерывание срабатывает только в точках, где платформа возвращает управление клиенту. Если выполняется один длинный серверный вызов или запрос, нажатие подействует после его окончания либо не подействует вовсе. В таком случае завершайте сеанс через консоль кластера.
Как остановить регламентное задание навсегда?
Отмена текущего выполнения не отключает расписание. Откройте список регламентных заданий, снимите флаг «Использование» у нужного задания — тогда оно не будет запускаться автоматически.
Что произойдёт с данными при отмене фонового задания?
Если запись велась в транзакциях порциями, сохранятся только полностью записанные порции. Если обработка писала объекты по одному без транзакции, часть данных останется записанной — потребуется ручная проверка и исправление.
Можно ли прервать обмен данными или синхронизацию?
Да, если обмен выполняется фоновым заданием — отмените его в консоли заданий. Механизмы обмена обычно устойчивы к прерыванию: при следующем сеансе обмен продолжится с учётом уже переданных данных.
Как определить, какой сеанс выполняет зависшую обработку?
В консоли кластера серверов откройте список сеансов и ориентируйтесь по имени пользователя, времени начала сеанса и длительности текущего вызова СУБД. Зависшая обработка обычно видна как сеанс с долго выполняющимся запросом.
Опасно ли перезагружать сервер 1С для остановки обработки?
Перезапуск службы агента сервера завершит все сеансы всех пользователей, а не только проблемный. Это допустимо в нерабочее время, но в рабочие часы сначала завершите конкретный сеанс через консоль кластера.
Что важно запомнить
Интерактивную обработку прерывайте Ctrl+Break, фоновые задания — отменой через консоль заданий, зависшие сеансы — через консоль кластера. Жёсткое снятие процесса — крайняя мера, особенно для файловых баз. После остановки обязательно проверьте, в каком состоянии остались данные.