Зависла обработка или фоновое задание: как остановить его в 1С 8.3
Содержание
Чтобы отменить выполнение задачи в 1С, начните с самого мягкого способа: кнопка «Отменить» в окне длительной операции или сочетание Ctrl+Break для кода, который выполняется на клиенте. Если задача работает в фоне, отмените фоновое задание в списке Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. Не помогло — завершите сеанс в консоли кластера, и только в крайнем случае снимайте процесс в операционной системе.
Порядок важен. Каждый следующий шаг жёстче предыдущего: он рвёт больше работы и затрагивает больше пользователей. В файловой базе часть инструментов недоступна, поэтому сначала определите режим работы.
Что считается «задачей» в 1С и где она выполняется
Прежде чем что-то отменять, поймите, где работает код. От этого зависит, каким инструментом его можно остановить.
| Что выполняется | Где идёт работа | Чем отменить |
|---|---|---|
| 🖥️ Код обработки на клиенте (цикл в форме) | Процесс клиента 1cv8c.exe или 1cv8.exe | Ctrl+Break |
| ⏳ Длительная операция с окном прогресса | Фоновое задание на сервере | Кнопка отмены в окне ожидания |
| ⚙️ Фоновое или регламентное задание | Отдельный сеанс на сервере | Список фоновых заданий, консоль кластера |
| 🔒 Сеанс пользователя, который держит блокировки | Рабочий процесс rphost | Консоль кластера, rac |
| 💥 Всё зависло целиком | Процессы ОС | Диспетчер задач, taskkill, kill |
Почти все современные типовые конфигурации (БП 3.0, ЗУП 3.1, УТ 11) построены на Библиотеке стандартных подсистем. В них тяжёлые операции — закрытие месяца , расчёт зарплаты, формирование больших отчётов — запускаются фоновыми заданиями. Поэтому «зависшая обработка» на деле часто оказывается фоновым заданием на сервере, а не кодом в окне пользователя.
Способ 1. Прервать задачу из окна программы
Самый безопасный вариант. Работа останавливается штатно, незавершённая транзакция откатывается, база остаётся в согласованном состоянии.
Кнопка отмены в окне длительной операции
Когда отчёт или обработка долго формируются, типовые конфигурации показывают окно ожидания с индикатором и кнопкой отмены. Нажатие кнопки отправляет команду отмены фоновому заданию, которое выполняет эту работу.
- Нажмите кнопку отмены в окне ожидания.
- Подождите 10–30 секунд: задание останавливается не мгновенно.
- Если окно закрылось, а данные частично записались — проверьте результат до повторного запуска.
Закрытие формы отчёта крестиком тоже обычно отменяет связанное фоновое задание. Но если вы закрыли саму программу, задание на сервере может продолжить работу. Проверьте его в списке фоновых заданий.
Ctrl+Break для клиентского кода
Сочетание Ctrl+Break прерывает выполнение встроенного языка на клиенте: текущая процедура останавливается, форма снова откликается на действия.
Работает это не всегда:
- ✅ цикл в клиентской процедуре формы — прерывается;
- ✅ код, где разработчик вызывает
ОбработкаПрерыванияПользователя()внутри цикла, — прерывается быстро; - ❌ серверный вызов, который уже ушёл на сервер, —
Ctrl+Breakего не остановит, клиент ждёт ответа; - ❌ тяжёлый запрос к СУБД — будет выполняться, пока СУБД не вернёт результат.
На ноутбуках без клавиши Break ищите сочетание Ctrl+Fn+B или Ctrl+Fn+Pause — зависит от производителя. Если ничего не подходит, используйте экранную клавиатуру Windows: в ней есть клавиши Ctrl и Pause.
Способ 2. Отменить фоновое задание в списке заданий
Если задача работает в фоне, её видно в типовой форме управления заданиями. Она есть во всех конфигурациях на БСП.
Где найти список фоновых заданий
| Конфигурация | Путь |
|---|---|
| Бухгалтерия предприятия 3.0 | Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания |
| ЗУП 3.1 | Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания |
| Управление торговлей 11 | НСИ и администрирование → Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания |
Если раздел «Обслуживание» не виден, у пользователя нет полных прав. Откройте базу под администратором.
Как отменить задание
- Перейдите на вкладку фоновых заданий.
- Отберите задания в состоянии «Выполняется» и найдите нужное по наименованию и времени начала.
- Выделите строку и выполните команду отмены в командной панели списка.
- Обновите список: состояние должно смениться на «Отменено».
Отмена фонового задания — мягкая. Платформа просит задание остановиться, и оно останавливается в ближайший момент, когда выполняет код встроенного языка. Если задание в этот момент ждёт ответа СУБД на тяжёлый запрос, отмена сработает только после возврата из запроса. Иногда это минуты.
Отмена из кода
Разработчику или администратору с доступом к консоли кода пригодится программный способ. Он отменяет все активные задания с заданным ключом:
Отбор = Новый Структура;
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
Отбор.Вставить("Ключ", "МоеДлительноеЗадание");
Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Для Каждого Задание Из Задания Цикл
Задание.Отменить();
КонецЦикла;
Если известен уникальный идентификатор задания, используйте ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор) и вызовите у найденного объекта метод Отменить(). Код выполняется на сервере.
Способ 3. Завершить сеанс через консоль кластера
Применяется в клиент-серверной базе, когда задание не реагирует на отмену или висит сеанс пользователя, держащий блокировки. Завершение сеанса — жёсткая мера: работа в нём обрывается, открытая транзакция откатывается.
Завершая сеанс, вы рвёте работу конкретного пользователя или задания. Несохранённые изменения в этом сеансе пропадут. Предупредите человека, если сеанс пользовательский.
Через «Администрирование серверов 1С Предприятия»
- Откройте консоль, разверните кластер, затем
Информационные базы → имя базы → Сеансы. - В колонке «Приложение» найдите нужный сеанс. Фоновые задания отображаются как «Фоновое задание», пользователи — как «Тонкий клиент», «Толстый клиент», «Веб-клиент».
- Сверьте пользователя, время начала и колонку блокировок СУБД.
- Вызовите контекстное меню на строке и выберите удаление сеанса.
Если сеанс исчезает и тут же появляется снова, это регламентное задание, которое запускается по расписанию. Тогда в свойствах информационной базы в консоли включите флажок блокировки регламентных заданий, а после разбора проблемы снимите его.
Через утилиту rac
На сервере без графической консоли поможет rac. Утилита обращается к серверу администрирования ras, поэтому служба ras должна быть запущена.
rem Список кластеров — нужен UUID кластера
rac cluster list
rem Список сеансов кластера — нужен UUID сеанса
rac session list --cluster=<uuid-кластера>
rem Завершить выбранный сеанс
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Если на кластере задан администратор, добавьте параметры авторизации. Их точный синтаксис для вашей версии смотрите в справке rac help session.
Способ 4. Снять процесс в операционной системе
Последний рубеж. Используйте его, когда клиент не отвечает совсем или рабочий процесс сервера завис и не даёт работать остальным.
Снятие процесса не отменяет задачу, а убивает её. Делайте это, только если мягкие способы не сработали.
Клиентский процесс на компьютере пользователя
- Откройте диспетчер задач (
Ctrl+Shift+Esc). - Найдите процесс
1cv8c.exe(тонкий клиент) или1cv8.exe(толстый клиент, Конфигуратор). - Снимите задачу.
То же из командной строки:
taskkill /IM 1cv8c.exe /F
Команда закроет все копии тонкого клиента у этого пользователя Windows. Если открыто несколько баз, оборвутся все.
Рабочий процесс сервера
На сервере 1С каждый рабочий процесс rphost обслуживает сразу много сеансов. Убив его, вы оборвёте всех пользователей, которые на нём сидят, а не одного.
Завершать rphost или перезапускать службу «Агент сервера 1С:Предприятия 8.3» — только после предупреждения пользователей, лучше вне рабочего времени. Все открытые транзакции на этом процессе откатятся.
Порядок действий:
- В консоли кластера откройте
Рабочие процессыи найдите процесс с аномальной памятью или нагрузкой. Запомните его PID. - Посмотрите, какие сеансы на нём работают, и предупредите людей.
- В Windows снимите процесс с этим PID через диспетчер задач или
taskkill /PID <номер> /F. В Linux —kill <PID>, при отсутствии реакцииkill -9 <PID>. - Агент сервера сам поднимет новый рабочий процесс.
Запрос, застрявший в СУБД
Бывает, что сеанс 1С уже завершён, а запрос продолжает выполняться в СУБД и держит блокировки таблиц. В MS SQL Server такой запрос находят в мониторе активности SQL Server Management Studio по имени базы и снимают командой KILL с номером сеанса СУБД. Откат большой транзакции может длиться дольше самого запроса — не перезапускайте SQL Server, пока откат не закончится.
Чем файловый режим отличается от клиент-серверного
В файловой базе нет сервера 1С и нет консоли кластера. Это меняет набор инструментов.
| Возможность | Файловая база | Клиент-серверная база |
|---|---|---|
Ctrl+Break для клиентского кода | ✅ | ✅ |
| Отмена длительной операции кнопкой | ✅ | ✅ |
| Список фоновых заданий в программе | ✅ | ✅ |
Консоль кластера и rac | ❌ | ✅ |
| Где реально выполняется фоновое задание | В процессе клиента | В рабочем процессе rphost |
| Как остановить «намертво» | Закрыть клиентское приложение | Завершить сеанс или процесс rphost |
Главное отличие файлового режима: фоновые задания выполняются внутри процесса клиентского приложения, которое их запустило. Закрыли программу — задание прекратилось. Регламентные задания в файловой базе тоже выполняет один из открытых клиентов; при запуске можно указать параметр /AllowExecuteScheduledJobs, чтобы назначить, какой именно.
Если в файловой базе «висит» сеанс пользователя, которого уже нет на месте, найдите его компьютер и закройте там 1cv8c.exe или 1cv8.exe. При опубликованной на веб-сервере базе сеансы обслуживает процесс веб-сервера: его перезапуск оборвёт всех веб-пользователей.
Как не доводить до зависаний: настройки и привычки
Отменять задачи вручную приходится, когда система не ограничивает их сама. Часть ограничений настраивается в консоли кластера, часть — в работе с базой.
Ограничения на стороне сервера
- 🧠 Безопасный расход памяти за один вызов (свойства рабочего сервера). Серверный вызов, превысивший лимит, прерывается, но процесс и другие пользователи продолжают работу. Это защита от отчёта, который пытается выгрузить всю базу в память.
- 💤 Время засыпания пассивного сеанса и время завершения спящего сеанса (свойства информационной базы). Брошенные сеансы отключённых пользователей не висят сутками и не держат лицензии.
- 🔁 Перезапуск рабочих процессов (свойства кластера): интервал перезапуска и лимиты памяти позволяют периодически освежать
rphostбез участия администратора.
Меняйте эти параметры по одному и наблюдайте неделю. Слишком жёсткий лимит памяти начнёт обрывать честные тяжёлые операции, например закрытие месяца.
Привычки пользователей и администратора
- 📅 Тяжёлые регламентные задания — полнотекстовый индекс, загрузка курсов, обмены — ставьте на ночь или обед.
- 🔍 Большие отчёты формируйте с отбором по периоду и организации, а не за всё время.
- 🚫 Не запускайте одну и ту же длительную операцию повторно, пока первая не завершилась. Вторая копия будет ждать блокировок первой.
- 🧑💻 В собственных обработках выносите тяжёлую работу в фоновое задание и вызывайте
ОбработкаПрерыванияПользователя()в длинных клиентских циклах.