Остановка зависших операций, фоновых заданий и сеансов в 1С 8.3

· 10 мин

Содержание

Чтобы отменить выполнение задачи в 1С прямо из окна программы, нажмите Ctrl+Break. Это стандартная горячая клавиша платформы 1С:Предприятие 8.3: она прерывает код, который выполняется на клиенте и умеет проверять прерывание. Если окно не реагирует, задача ушла на сервер или работает фоном, нужны другие методы: отмена фонового задания, завершение сеанса в консоли кластера или команда rac.

Типичная ситуация: бухгалтер запустил оборотно-сальдовую ведомость за три года без отборов, курсор крутится десятую минуту, а закрыть окно нельзя. Ниже разобраны все уровни остановки, от безопасного к радикальному. Порядок важен: каждый следующий способ грубее предыдущего.

Ctrl+Break: как прервать операцию с клавиатуры

Комбинация Ctrl+Break работает в тонком и толстом клиенте, в файловом и клиент-серверном варианте. Платформа ловит её в моменты, когда код проверяет прерывание пользователя. После нажатия программа либо спросит, прервать ли выполнение, либо сразу остановит процедуру с сообщением об ошибке.

Что нужно знать о поведении комбинации:

  • ✅ Прерывает длинные циклы на клиенте, если в них вызывается ОбработкаПрерыванияПользователя(). Типовые обработки обычно так и написаны.
  • ✅ Срабатывает при отладке: в отладчике Конфигуратора это команда остановки выполнения на текущей строке.
  • ⏳ Во время тяжёлого вызова сервера реакция может прийти только после возврата управления клиенту. Иногда это минуты.
  • ❌ Не останавливает фоновые и регламентные задания: они живут в отдельном сеансе на сервере.
  • ❌ Не помогает, если код написан без проверки прерывания. Это вопрос к разработчику, а не к пользователю.

Где Break на ноутбуке

На многих ноутбуках отдельной клавиши Break нет. Варианты:

  1. Ctrl+Fn+B — так Break эмулируется на многих моделях Lenovo и части других производителей.
  2. Ctrl+Fn+Pause или Ctrl+Pause — если на клавиатуре есть Pause, она даёт тот же код, что и Break.
  3. Экранная клавиатура Windows: Win+R → osk → Enter. Зажмите на ней Ctrl, затем нажмите Pause. Если клавиши Pause не видно, включите дополнительные клавиши в параметрах экранной клавиатуры.

Если операция запущена в окне длительной операции с индикатором (так работают отчёты и обработки в типовых конфигурациях на БСП), у окна есть кнопка «Отмена». Она отменяет фоновое задание, которое делает работу, и действует надёжнее Ctrl+Break.

Клавиша Esc в 1С закрывает формы, но выполнение кода не прерывает. Многократные нажатия Esc во время зависания бесполезны.

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

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

В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11 и другие) список открывается по пути:

Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания

В форме две вкладки: регламентные задания и фоновые задания.

Как остановить фоновое задание

  1. Откройте вкладку фоновых заданий.
  2. Отберите задания в состоянии «Выполняется» (колонка состояния, сортировка по ней).
  3. Выделите зависшее задание. В наименовании видно, что это за работа: обмен, загрузка, отчёт.
  4. Нажмите команду отмены в командной панели списка.
  5. Обновите список: задание перейдёт в состояние «Отменено».

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

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

Остановить уже запущенный экземпляр можно так же, через вкладку фоновых заданий: каждый запуск регламентного задания виден там отдельной строкой. Чтобы задание не стартовало снова:

  • 🔕 откройте карточку регламентного задания и снимите флажок «Включено»;
  • 🕐 или поменяйте расписание, если задание мешает только в рабочие часы;
  • 🧱 для всей базы в клиент-серверном варианте: в консоли кластера, в свойствах информационной базы, включите блокировку регламентных заданий.

Не отключайте задания вслепую. Задания обмена с ЕГАИС, ЭДО, банком или сайтом отвечают за реальные бизнес-процессы. Отключили на время — запишите, какие, и включите обратно.

Консоль заданий и программная отмена для администратора

Типовая форма удобна, но не всегда доступна: например, когда задания созданы не через БСП или нужно отменить сразу пачку. Для этого администраторы используют внешнюю обработку «Консоль заданий». Она показывает регламентные и фоновые задания базы, их состояние, время старта, сообщения об ошибках, и умеет отменять активные задания.

Порядок работы с внешней обработкой:

  1. Откройте файл обработки через Файл → Открыть в режиме 1С:Предприятие.
  2. Если открытие внешних обработок запрещено, это настраивается в профиле безопасности или правах пользователя. Включает их администратор.
  3. В списке фоновых заданий отберите активные и отмените нужные.

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

&НаСервере
Процедура ОтменитьЗаданияПоКлючуНаСервере(КлючЗадания)

    Отбор = Новый Структура;
    Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
    Отбор.Вставить("Ключ", КлючЗадания);

    Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
    Для Каждого Задание Из Задания Цикл
        Задание.Отменить();
        Сообщить("Отменено: " + Задание.Наименование);
    КонецЦикла;

КонецПроцедуры

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

Для одного задания удобнее искать по уникальному идентификатору: ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор), затем вызвать у результата Отменить().

Сравнение способов отменить выполнение задачи

СпособКогда применятьЧто потеряете
Ctrl+BreakЗавис отчёт или обработка в вашем окнеТолько результат текущей операции
Кнопка «Отмена» в окне длительной операцииОтчёт или обработка с индикатором прогрессаТолько результат текущей операции
Отмена фонового задания в списке заданийВисит обмен, загрузка, расчётДанные незавершённой транзакции
Отключение регламентного заданияЗадание стартует снова и сноваАвтоматическую работу процесса до включения
«Активные пользователи» → завершение сеансаПользователь «завис» и держит блокировкиНесохранённые данные этого пользователя
Консоль кластера или rac session terminateСеанс не завершается из 1СНесохранённые данные сеанса
Диспетчер задач, процесс 1cv8c.exe или 1cv8.exeОкно клиента полностью не отвечаетВсё несохранённое в этом окне
Завершение рабочего процесса rphostПоследнее средство на сервереСеансы всех пользователей этого процесса

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

Как завершить зависший сеанс в консоли кластера и через rac

Если процесс на сервере не реагирует на отмену, остаётся завершить сеанс целиком. Сначала попробуйте изнутри 1С: в типовых конфигурациях есть список «Активные пользователи» в разделе Администрирование → Обслуживание. Там выделяют сеанс и завершают его; в клиент-серверном варианте программа попросит логин и пароль администратора кластера, если он задан.

Через консоль администрирования серверов

  1. Запустите «Администрирование серверов 1С Предприятия» на машине, где установлены средства администрирования.
  2. Раскройте дерево: центральный сервер → Кластеры → ваш кластер → Информационные базы → нужная база → Сеансы.
  3. Найдите сеанс по пользователю, компьютеру и времени начала. Колонки с объёмом вызовов и временем вызова подскажут, кто нагружает сервер.
  4. Через контекстное меню выберите Удалить. Сеанс будет принудительно завершён.

Если консоль не открывается из-за ошибки регистрации оснастки, её восстанавливают перерегистрацией библиотеки radmin.dll той версии платформы, что и сервер:

regsvr32 "C:\Program Files\1cv8\8.3.24.1586\bin\radmin.dll"

Номер версии в пути замените на свой, командную строку запустите от имени администратора.

Через rac на сервере без графической консоли

Утилита rac работает через сервер администрирования ras, который должен быть запущен. Последовательность:

rac cluster list
rac infobase summary list --cluster=<uuid_кластера>
rac session list --cluster=<uuid_кластера> --infobase=<uuid_базы>
rac session terminate --cluster=<uuid_кластера> --session=<uuid_сеанса>

Если на кластере задан администратор, добавьте параметры авторизации; их точные имена смотрите в rac help session.

Завершение сеанса обрывает работу пользователя без сохранения. Предупредите его заранее. Убивать процесс rphost в диспетчере задач сервера ещё опаснее: оборвутся все сеансы, которые обслуживает этот рабочий процесс. Делайте это только вне рабочих часов или когда другого выхода нет.

Файловая база

В файловом варианте консоли кластера нет. Зависший клиент закрывают через диспетчер задач Windows: процесс 1cv8c.exe для тонкого клиента или 1cv8.exe для толстого клиента и Конфигуратора. Если база осталась «занятой» после аварийного закрытия, проверьте, не висит ли процесс у другого пользователя на терминальном сервере.

Какие права нужны, чтобы отменять чужие задачи

Прервать свою операцию через Ctrl+Break может любой пользователь. Для остального нужны права администратора, и их два уровня.

Права в информационной базе. Список регламентных и фоновых заданий, «Активные пользователи» и завершение чужих сеансов в типовых конфигурациях доступны пользователю с профилем полных прав (роль «Администратор системы» или «Полные права»). Рядовой бухгалтер этих команд не увидит, и это правильно.

Права в кластере серверов. Консоль кластера и rac проверяют администратора кластера, а не пользователя базы. Это отдельная учётная запись, которую задают в свойствах кластера. Если она не задана, управлять кластером может любой, кто дотянется до консоли по сети, поэтому на рабочем сервере администратора кластера стоит завести.

Практичная схема для организации:

  • 👤 пользователи — только своя Ctrl+Break и кнопка «Отмена»;
  • 🛠 ответственный бухгалтер или 1С-ник — профиль полных прав в базе для работы с заданиями и активными пользователями;
  • 🖥 системный администратор — администратор кластера, доступ к консоли и rac.

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

Почему 1С зависает и как реже отменять задачи

Отмена лечит симптом. Если одна и та же операция зависает каждую неделю, ищите причину.

Частые причины долгого выполнения:

  • 📊 Тяжёлые отчёты без отборов. Оборотка за несколько лет по всем субконто или анализ субконто по всей номенклатуре грузят сервер на минуты.
  • 🔒 Ожидание блокировки. Один пользователь проводит документ в транзакции, другой ждёт. Когда ожидание превышает таймаут, платформа выдаёт ошибку Конфликт блокировок при выполнении транзакции с текстом о превышении времени ожидания блокировки.
  • 🌐 Обращения к внешним сервисам. Обмен с банком, ЭДО или сайтом висит, если удалённая сторона не отвечает, а таймаут соединения в коде не задан.
  • 🔁 Ошибка в доработке. Бесконечный цикл или запрос в цикле в самописной обработке.
  • 🗄 Состояние сервера. Устаревшая статистика СУБД, нехватка памяти, переполненный диск.

Что делать на практике:

  1. Для тяжёлых отчётов задавайте период и отборы до формирования. Варианты отчётов с отборами сохраните, чтобы не настраивать каждый раз.
  2. Регламентные задания обмена и пересчёта перенесите на нерабочее время, разведите по времени, чтобы они не стартовали одновременно.
  3. Попросите разработчика добавить ОбработкаПрерыванияПользователя() в длинные клиентские циклы и таймауты в HTTPСоединение. Тогда Ctrl+Break начнёт срабатывать.
  4. Для разбора блокировок и медленных вызовов включите технологический журнал на сервере. Он покажет, какой запрос и какой пользователь держал ресурс.
  5. Регулярно обслуживайте СУБД: обновление статистики и перестроение индексов по расписанию.
Диагностика: выберите симптом

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

Сохранятся ли данные, если прервать операцию?
Всё, что успело записаться до открытия текущей транзакции, сохранится. Незавершённая транзакция откатится целиком, поэтому документ останется в прежнем состоянии, а не «наполовину проведённым».
Можно ли отменить проведение группы документов, запущенное обработкой?
Остановить процесс можно через Ctrl+Break или отмену фонового задания. Уже проведённые к этому моменту документы останутся проведёнными, проверьте их по журналу документов.
Чем удаление сеанса отличается от удаления соединения в консоли кластера?
Сеанс — это работа пользователя с базой, соединение — канал связи с рабочим процессом. Для зависшего пользователя завершайте сеанс: так освобождается лицензия и снимаются его блокировки.
Освобождается ли лицензия после принудительного завершения сеанса?
Да, лицензия, которую занимал сеанс, освобождается вместе с ним. Проверить можно в списке сеансов консоли кластера или командой rac session list --licenses.
Почему Ctrl+Break работает в одной обработке и не работает в другой?
Прерывание срабатывает только там, где код его проверяет. Если обработка написана без такой проверки, комбинация бессильна до конца операции.