Обработка в 1С повисла: останавливаем и запускаем заново без потери данных

· 9 мин

Содержание

Закрыли месяц, запустили «Групповую обработку справочников» на 40 тысяч номенклатуры, а через двадцать минут окно не отвечает, курсор крутится, пользователи звонят. Знакомо? Перезапустить обработку в 1С можно почти всегда без перезагрузки сервера: сначала пробуем прервать её изнутри клиента (Ctrl+Break), потом завершаем сеанс в консоли кластера, и только потом трогаем процессы ОС.

Главное в этой ситуации — понять, что именно висит: сама обработка (долгий цикл), ожидание блокировки или упавший клиент. От этого зависит, чем её останавливать и можно ли запускать повторно. Ниже порядок действий от безопасного к жёсткому.

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

Сначала выясните: зависла или просто работает

Прервать нормально работающую обработку — значит потерять проделанное. Проверьте три признака:

  • 🔹 Нагрузка на сервер. Если процесс rphost (серверная база) или 1cv8 (файловая) грузит процессор, обработка считает. Если нагрузки нет, а окно стоит, она, скорее всего, ждёт блокировку.
  • 🔹 Диск и СУБД. У клиент-серверной базы загляните в монитор активности СУБД: растёт ли число прочитанных строк, есть ли запросы в состоянии ожидания.
  • 🔹 Прогресс-индикатор. Многие обработки пишут «Обработано N из M» в строку состояния. Сравните два замера с интервалом в минуту.

Практическое правило: если за 10–15 минут нет ни нагрузки, ни изменения счётчика, обработка не работает , и её можно останавливать.

Остановка прямо из клиента

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

Ctrl+Break

В толстом клиенте и в тонком клиенте нажмите Ctrl+Break (на ноутбуках часто Fn+Ctrl+Pause). Платформа покажет запрос на прерывание текущей операции. Подтвердите. Прерывание срабатывает на границе вызова серверной процедуры, поэтому ждать реакции иногда нужно до минуты.

Окно «Выполняется длительная операция»

Если появилась форма с кнопкой отмены, жмите её. Для фоновых операций, запущенных из БСП, отмена штатно передаётся в фоновое задание.

Закрытие окна не помогает

Крестиком в углу вы только закрываете форму: серверная часть может продолжать работать. Поэтому после закрытия обязательно проверьте список сеансов (следующий раздел), иначе при повторном запуске получите две копии одной обработки и конфликт блокировок.

Если клиент вообще не реагирует и окно «Не отвечает» — идите сразу к консоли кластера. Клиентская часть уже потеряна, а серверный сеанс жив.

Завершение сеанса в консоли кластера

Для клиент-серверной базы это основной рабочий инструмент. Запустите консоль администрирования серверов 1С (она входит в состав платформы или ставится отдельно) и откройте кластер.

Как найти нужный сеанс

  1. Раскройте ветку Центральные серверы 1С:Предприятия → ваш сервер → Кластеры → кластер.
  2. Перейдите в Информационные базы → нужная база → Сеансы.
  3. Найдите пользователя и приложение. У зависшей обработки обычно большое значение в колонках про время вызова и потреблённое процессорное время.
  4. Выделите сеанс и посмотрите на текущий вызов: если вызов длится десятки минут, это он.

Что нажимать

  • «Завершить сеанс» — штатный сигнал. Дождитесь 1–2 минут.
  • «Завершить соединение» в ветке Соединения — если сеанс не уходит.
  • «Завершить процесс» (в ветке Рабочие процессы) — крайняя мера: падает весь рабочий процесс, а с ним сеансы всех, кто на нём сидит. Делайте только вне рабочего времени.

Ту же операцию можно сделать из командной строки через утилиту rac при запущенной службе ras:

rac cluster list
rac session list --cluster=<идентификатор_кластера>
rac session terminate --session=<идентификатор_сеанса> --cluster=<идентификатор_кластера>

Это удобно, когда нужно автоматизировать зачистку «висяков» по расписанию.

Не завершайте процесс rphost у обработки, которая прямо сейчас пишет данные в большой транзакции. Откат и восстановление после аварийного завершения займёт больше времени, чем ожидание.

Файловая база: что делать без консоли кластера

В файловом варианте кластера нет. Остановка идёт по цепочке:

  1. Ctrl+Break в клиенте, где запущена обработка.
  2. Если окно не отвечает — завершить процесс 1cv8.exe этого пользователя в диспетчере задач (смотрите по имени пользователя и по тому, какой процесс грузит процессор).
  3. Проверить, что в папке базы не остался файл блокировки 1Cv8.cdn: пока в базе есть живые сеансы, он нужен, а вот при нуле подключений его наличие подскажет, что сеанс завершился некорректно.
  4. Зайти в базу и проверить в списке активных пользователей (Администрирование → Активные пользователи), что сеанс исчез.

Когда обработку запускали по сети с чужого компьютера, процесс нужно убивать именно там: на вашем компьютере его нет.

Блокировки и журнал регистрации: почему она встала

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

Ожидание управляемой блокировки

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

Блокировки на уровне СУБД

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

Журнал регистрации

Откройте Администрирование → Журнал регистрации (или меню Конфигуратора Администрирование → Журнал регистрации) и настройте отбор:

Что искатьКак отфильтровать
Ошибки в момент зависанияУровень «Ошибка», период ±15 минут
Действия конкретного пользователяПоле «Пользователь»
Тайм-ауты и дедлокиСобытие «Тайм-аут блокировки» / «Взаимная блокировка» в поиске по тексту

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

Если журнал отключён или в нём мало данных, включите в настройках технологического журнала события TLOCK и TTIMEOUT на время тестового прогона. Файлы журнала быстро растут, поэтому ограничьте период и папку.

Режим Конфигуратора: отладка и запуск из файла

Когда обработка внешняя или вы её дорабатываете, удобнее запускать её из Конфигуратора.

  1. Файл → Открыть → выберите файл .epf.
  2. Поставьте точку останова (F9) на строке перед основным циклом.
  3. Запустите отладку (F5). Платформа откроет клиента и остановится на точке.
  4. Идите по шагам (F11 — с заходом, F10 — без захода) и смотрите значения в окне Вычислить выражение (Shift+F9).

Если обработка уже зависла в режиме отладки, нажмите кнопку Прервать на панели отладки — это аналог Ctrl+Break и остановит выполнение на текущей строке, показав, где именно она стоит. Сразу видно, какая процедура или запрос тормозит.

Сам Конфигуратор тоже может занимать лицензию и блокировать монопольный доступ: если база нужна другим, закройте его после отладки.

Фоновые и регламентные задания

Часть обработок запускается не вручную, а регламентным заданием, например «Загрузка курсов валют» или собственная выгрузка. Такая обработка висит в сеансе без пользовательского окна.

Где смотреть:

  • 🔹 В программе на БСП — раздел Администрирование → Обслуживание → Регламентные и фоновые задания. Название и положение пункта зависит от конфигурации; если не нашли, воспользуйтесь поиском по форме.
  • 🔹 В консоли кластера — сеансы с типом приложения «Фоновое задание».

Что делать:

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

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

Остановить — половина дела. Второй запуск должен пройти чище первого.

Что проверить до повторного запуска

  • ✅ Что осталось от первой попытки: часть документов могла быть уже проведена или изменена. Откройте журнал регистрации и найдите, на каком элементе прервалось.
  • ✅ Нет ли оставшихся блокировок и «зависших» сеансов пользователя.
  • ✅ Резервная копия базы. Групповые изменения не откатить одним нажатием.

Как сделать запуск надёжнее

ПриёмЗачем
Запускать по частям (по периоду, по группе, по 1–5 тысяч элементов)Короткая транзакция реже упирается в блокировки и тайм-ауты
Запускать в нерабочее времяНет конкуренции с пользователями за регистры
Отключить регламентные задания на время прогонаНе будет второго экземпляра и конкуренции за данные
Сначала на копии базыВидно время работы и объём изменений
Пересчитать итоги и обновить статистику СУБД перед тяжёлой обработкойЗапросы идут по актуальным планам

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

Профилактика: чтобы обработка не вешала базу

Большинство зависаний повторяются по одним и тем же причинам.

  • 🔹 Одна огромная транзакция. Цикл на сотни тысяч записей внутри НачатьТранзакцию() держит блокировки всё время. Дробите на пакеты и фиксируйте после каждого.
  • 🔹 Запрос в цикле. Выборка на каждой итерации тормозит на порядки. Вынесите запрос за цикл и работайте с таблицей значений.
  • 🔹 Нет отбора. Обработка проходит по всей базе, хотя нужен один период. Добавьте параметры отбора.
  • 🔹 Нехватка ресурсов. Сервер без свободной памяти уходит в своп, и всё замирает. Следите за оперативной памятью на рабочем процессе.
  • 🔹 Устаревшее обслуживание базы. Раз в неделю обновляйте статистику СУБД, раз в месяц проверяйте индексы и размер журналов.
  • 🔹 Старая платформа. Часть известных зависаний исправляется в обновлениях платформы; сверьте версию у себя с актуальной на сайте поддержки.

Если зависание повторяется на одной и той же обработке, включайте технологический журнал и замеряйте производительность: стандартные инструменты 1С (Центр контроля технологического журнала, «Замер производительности») покажут медленный запрос или блокировку.

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

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