К статье
Практический материал

Администрирование · 9 мин

Как прервать выполнение обработки в 1С

Способы прервать выполнение обработки в 1С: Ctrl+Break, завершение сеанса, остановка фоновых заданий, серверные методы. Пошаговые инструкции и типичные ошибки.

Длительная обработка в 1С — загрузка данных, перепроведение документов, свёртка базы — может работать десятки минут и часов. Иногда её нужно остановить: выбраны неверные параметры, обработка зависла или блокирует работу других пользователей. Способ остановки зависит от того, где выполняется код: в клиентском сеансе, в фоновом задании или на сервере.

Главное различие — интерактивный и неинтерактивный режимы. Интерактивная обработка, запущенная из формы, может отвечать на прерывание пользователем. Фоновое задание и серверный вызов без возврата управления на клиента прервать из интерфейса нельзя — потребуются административные инструменты.

Перед остановкой важно оценить последствия: если обработка уже записала часть данных без транзакции, прерывание оставит базу в частично изменённом состоянии. Об этом — в разделе про риски.

Определите, где выполняется обработка

Первый шаг — понять, как именно запущена обработка. От этого зависит весь дальнейший сценарий. Типичные варианты: обработка запущена из формы и выполняется в клиентском сеансе; обработка работает как фоновое задание; обработка запущена регламентным заданием по расписанию; код выполняется в файловой базе монопольно.

Признак клиентского выполнения — интерфейс конкретного сеанса «завис», но у остальных пользователей база работает. Признак фонового задания — обработка была запущена кнопкой с длительной операцией, форма осталась доступной, а в списке фоновых заданий видно активное задание. Регламентные задания видны в консоли заданий по расписанию.

Маршрут решения

Как выбрать действие

Интерфейс одного сеанса завис, обработка запущена из формыПопробуйте Ctrl+Break или «Сервис — Прервать»
Обработка работает как фоновое заданиеОтмените задание в консоли заданий или через ОтменитьВыполнениеЗадания
Сеанс не отвечает и не прерываетсяЗавершите сеанс через консоль кластера серверов или список активных пользователей
Файловая база, длительная операция в монопольном режимеСнимите процесс 1cv8.exe через диспетчер задач как крайнюю меру

Прерывание интерактивной обработки клавишами Ctrl+Break

Стандартный способ остановить выполняющийся код в клиентском приложении — сочетание клавиш Ctrl+Break (на многих клавиатурах Break совмещена с Pause). В тонком и толстом клиенте также работает пункт меню «Сервис — Прервать выполнение» в режиме конфигуратора при отладке.

Важное условие: прерывание пользователем должно быть разрешено. В конфигураторе в свойствах конфигурации есть параметр, управляющий возможностью прерывания, а на практике обработка прервётся только в точках, где платформа возвращает управление клиенту. Если код выполняется одним длинным серверным вызовом, Ctrl+Break сработает только после его завершения либо не сработает вовсе.

Как прервать обработку в клиентском сеансе
  1. 1
    Нажмите Ctrl+Break в окне зависшего сеанса
  2. 2
    Дождитесь появления диалога подтверждения прерывания
  3. 3
    Подтвердите прерывание — выполнение кода остановится
  4. 4
    Проверьте, не остались ли данные в частично записанном состоянии
  5. 5
    Если прерывание не сработало в течение нескольких минут — переходите к завершению сеанса

Если обработка написана с учётом длительных операций (с выводом индикатора и обработкой ожидания), прерывание обычно срабатывает быстро. Если код выполняет один массивный запрос или цикл на сервере без промежуточных вызовов, платформа не сможет вмешаться до окончания вызова.

Остановка фоновых и регламентных заданий

Фоновое задание нельзя прервать клавишами — у него нет интерактивного клиента. В типовых конфигурациях на БСП откройте раздел администрирования и консоль фоновых заданий (обработка «Консоль заданий» или типовой список «Фоновые задания»), найдите активное задание и нажмите «Отменить».

Программно задание отменяется методом ОтменитьВыполнениеЗадания с передачей уникального идентификатора задания. Получить список активных заданий можно методом ПолучитьФоновыеЗадания с отбором по состоянию «Активно».

bsl
Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно));
Для Каждого Задание Из Задания Цикл
    ФоновыеЗадания.ОтменитьВыполнениеЗадания(Задание.УникальныйИдентификатор);
КонецЦикла;

Учтите: отмена задания — это запрос на остановку, а не мгновенное завершение. Если внутри задания выполняется длинный запрос к СУБД, остановка произойдёт после завершения текущей операции. Регламентное задание, которое перезапускается по расписанию, нужно дополнительно отключить в настройках, иначе оно стартует снова.

Завершение зависшего сеанса

Если сеанс не отвечает и прерывание не помогает, завершите его принудительно. В клиент-серверном варианте откройте консоль кластера серверов 1С, найдите нужный сеанс в списке (по пользователю и времени начала) и удалите его. Сеанс завершится, выполняющийся код будет остановлен.

В файловом варианте административной консоли нет. Варианты: завершить процесс 1cv8.exe через диспетчер задач Windows на машине, где запущена обработка, либо, если база открыта через веб-сервер, перезапустить пул приложений. В типовых конфигурациях также доступен список активных пользователей с возможностью завершения сеансов.

Как заложить возможность прерывания в саму обработку

Если вы разрабатываете длительную обработку, предусмотрите штатную остановку. В клиентском варианте периодически вызывайте ОбработкаПрерыванияПользователя() — этот метод проверяет, нажал ли пользователь Ctrl+Break, и генерирует исключение, которое можно обработать и корректно завершить работу.

В фоновых заданиях используйте длительные операции БСП: механизм сам поддерживает отмену — внутри цикла проверяйте признак отмены через ДлительныеОперации.СообщитьПрогресс и связанные проверки. Дополнительно разбивайте запись данных на порции с транзакциями, чтобы прерывание оставляло базу в согласованном состоянии.

bsl
Для Каждого Строка Из ТаблицаДанных Цикл
    ОбработкаПрерыванияПользователя();
    // ... обработка строки ...
КонецЦикла;

Также полезно выводить индикатор прогресса и кнопку «Отмена», которая устанавливает флаг, проверяемый в цикле. Это даёт пользователю понятный и безопасный способ остановиться вместо принудительного снятия сеанса.

Риски прерывания и проверка результата

Главный риск — частично записанные данные. Если обработка записывает объекты по одному без общей транзакции, после остановки часть документов будет проведена, часть — нет. Восстановить «как было» автоматически не получится: потребуется либо откат из резервной копии, либо ручной анализ и исправление.

В клиент-серверном варианте незавершённые транзакции СУБД откатывает автоматически при завершении сеанса — это защищает целостность. В файловом варианте жёсткое снятие процесса в момент записи может повредить файл 1Cv8.1CD, поэтому такой способ — только крайняя мера.

Контрольные точки

Как проверить результат

Состояние сеанса или задания
Норма

Сеанс завершён, задание в состоянии «Отменено» или «Завершено»

Тревожный признак

Задание остаётся активным спустя несколько минут после отмены

Целостность данных
Норма

Документы и регистры в согласованном состоянии, отчёты сходятся

Тревожный признак

Часть документов проведена, часть нет, есть «битые» ссылки

Файловая база после снятия процесса
Норма

База открывается, тестирование и исправление не выявляет ошибок

Тревожный признак

Ошибки при открытии, требуется восстановление из копии

Типичные ошибки
01
Снятие процесса 1cv8.exe сразу, без попытки штатного прерывания — повышает риск повреждения файловой базы
02
Отмена фонового задания без отключения регламентного задания — оно запускается снова по расписанию
03
Повторный запуск обработки без проверки, что записала первая попытка, — дублирование данных
04
Ожидание, что Ctrl+Break остановит длинный серверный вызов — прерывание сработает только после его завершения

Частые вопросы

Почему Ctrl+Break не останавливает обработку?

Прерывание срабатывает только в точках, где платформа возвращает управление клиенту. Если выполняется один длинный серверный вызов или запрос, нажатие подействует после его окончания либо не подействует вовсе. В таком случае завершайте сеанс через консоль кластера.

Как остановить регламентное задание навсегда?

Отмена текущего выполнения не отключает расписание. Откройте список регламентных заданий, снимите флаг «Использование» у нужного задания — тогда оно не будет запускаться автоматически.

Что произойдёт с данными при отмене фонового задания?

Если запись велась в транзакциях порциями, сохранятся только полностью записанные порции. Если обработка писала объекты по одному без транзакции, часть данных останется записанной — потребуется ручная проверка и исправление.

Можно ли прервать обмен данными или синхронизацию?

Да, если обмен выполняется фоновым заданием — отмените его в консоли заданий. Механизмы обмена обычно устойчивы к прерыванию: при следующем сеансе обмен продолжится с учётом уже переданных данных.

Как определить, какой сеанс выполняет зависшую обработку?

В консоли кластера серверов откройте список сеансов и ориентируйтесь по имени пользователя, времени начала сеанса и длительности текущего вызова СУБД. Зависшая обработка обычно видна как сеанс с долго выполняющимся запросом.

Опасно ли перезагружать сервер 1С для остановки обработки?

Перезапуск службы агента сервера завершит все сеансы всех пользователей, а не только проблемный. Это допустимо в нерабочее время, но в рабочие часы сначала завершите конкретный сеанс через консоль кластера.

Итог

Что важно запомнить

Интерактивную обработку прерывайте Ctrl+Break, фоновые задания — отменой через консоль заданий, зависшие сеансы — через консоль кластера. Жёсткое снятие процесса — крайняя мера, особенно для файловых баз. После остановки обязательно проверьте, в каком состоянии остались данные.