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