Программа 1С перестала отвечать: прерываем операцию, снимаем зависший сеанс и блокировки

· 9 мин

Содержание

Если 1С зависла на долгой операции, сначала нажмите Ctrl+Break: платформа предложит прервать выполнение, и транзакция откатится без потерь. Не помогло за 5–10 минут — снимите процесс 1cv8.exe или 1cv8c.exe в диспетчере задач (файловая база) либо удалите сеанс в консоли администрирования сервера (клиент-серверная). Если зависли сразу несколько пользователей, ищите блокировку: её держит чей-то сеанс или соединение с СУБД.

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

С чего начать, если 1С зависла

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

Убедитесь, что программа действительно висит

Откройте диспетчер задач (Ctrl+Shift+Esc) и найдите процесс клиента:

  • 🖥️ 1cv8.exe — толстый клиент и Конфигуратор;
  • 💻 1cv8c.exe — тонкий клиент;
  • 📊 загрузка процессора и диска выше нуля — программа работает, просто долго.

Если процесс грузит процессор или диск, это не зависание, а долгая операция: закрытие месяца , перепроведение, выгрузка .dt, обновление конфигурации . Её лучше дождаться. Если счётчики стоят на нуле несколько минут, а окно помечено «Не отвечает», — переходите к прерыванию.

Прервите операцию штатно

  1. Нажмите Ctrl+Break (на ноутбуках без клавиши Break — Ctrl+Fn+B или Ctrl+Pause, зависит от модели).
  2. На вопрос о прерывании ответьте «Да».
  3. Подождите: откат большой транзакции занимает столько же времени, сколько она выполнялась.

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

В открытом поле ввода Ctrl+Z отменяет ввод текста. Для документа это не работает: проведённый документ отменяют командой «Отмена проведения» в форме или списке, лишний элемент — пометкой на удаление.

Решите, что делать с данными

Прерванная или оборванная транзакция в 1С откатывается целиком. Документ, который проводился в момент зависания, останется в состоянии до начала проведения. Проверьте его после восстановления работы и проведите заново.

Как снять зависшую 1С в файловом режиме

В файловой базе нет консоли сеансов: каждый пользователь открывает файл 1Cv8.1CD напрямую. Снять зависание — значит закрыть процесс, который держит файл.

Снятие процесса на своём компьютере

  1. В диспетчере задач выделите 1cv8.exe или 1cv8c.exe.
  2. Нажмите «Снять задачу».
  3. Запустите 1С заново и проверьте последний документ.

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

Если база лежит на сетевой папке

Бывает, процесс уже снят, а база не открывается: ошибка про то, что файл занят, или монопольный режим недоступен. Файловый сервер ещё держит файл открытым от имени «мёртвого» подключения.

На компьютере, где лежит база:

  1. Нажмите Win+R, введите compmgmt.msc.
  2. Откройте Служебные программы → Общие папки → Открытые файлы.
  3. Найдите 1Cv8.1CD и закройте его для нужного пользователя.

То же из командной строки администратора:

openfiles /query /fo table | findstr /i 1Cv8.1CD

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

Проверка базы после аварийного закрытия

Если после снятия процесса база ругается на ошибки или открывается с предупреждением, проверьте её:

  • 🔧 Конфигуратор → Администрирование → Тестирование и исправление — логическая проверка. Нужен монопольный доступ: все пользователи должны выйти.
  • 🧰 утилита chdbfl.exe из каталога bin платформы — физическая проверка файла 1Cv8.1CD при закрытой базе.

Перед любым исправлением сделайте копию папки базы. Режим исправления может удалить битые ссылки — потом их уже не вернуть.

Зависшие сеансы на сервере 1С:Предприятия

В клиент-серверной базе закрыть окно на своём компьютере недостаточно. Сеанс на сервере может остаться и продолжить держать блокировки.

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

  1. Откройте «Администрирование серверов 1С Предприятия».
  2. Разверните Кластер → Информационные базы → <база> → Сеансы.
  3. Отсортируйте по колонке пользователя или времени начала. Найдите зависший сеанс.
  4. Правой кнопкой → «Удалить».

Если удалённый сеанс сразу появляется снова или не уходит, посмотрите ветку «Соединения» той же базы и разорвите соединение зависшего клиента.

Через утилиту rac

Если консоли нет под рукой, то же делается командной строкой. Нужна запущенная служба ras (по умолчанию порт 1545):

rac cluster list
rac session list --cluster=<id_кластера>
rac session terminate --cluster=<id_кластера> --session=<id_сеанса>

Остальные параметры смотрите в справке rac help session.

Если не уходит весь рабочий процесс

Когда зависают все пользователи одного рабочего сервера, а процесс rphost.exe занял память или процессор, его можно завершить через консоль (Кластер → Рабочие процессы) или диспетчер задач.

Завершение rphost обрывает все сеансы, которые на нём работают, не только зависший. Перезапуск службы «Агент сервера 1С:Предприятия 8.3» обрывает вообще всех. Делайте это после предупреждения пользователей или вне рабочего времени.

Если в базу никого не пускает

Сообщение Начало сеанса с информационной базой запрещено — это не зависание, а включённая блокировка. Её снимают:

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

Блокировки в СУБД: кто держит данные

Классический симптом: у одного пользователя «висит» проведение, у остальных через 20 секунд вылетает ошибка Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки. Виновник — транзакция, которая держит записи и не завершается.

Сначала ищите её в консоли сервера 1С: сеанс с самым долгим временем вызова или большим числом блокировок. Если 1С не показывает виновника, смотрите на уровне СУБД.

MS SQL Server

-- кто кого блокирует
SELECT session_id, blocking_session_id, wait_type, wait_time,
       DB_NAME(database_id) AS db, command
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0;

-- быстрый обзор: колонка BlkBy
EXEC sp_who2;

В колонке blocking_session_id — номер сеанса-виновника. Его хост и программу видно в sp_who2. Завершают командой KILL <номер>.

PostgreSQL

SELECT pid, pg_blocking_pids(pid) AS blocked_by, state,
       now() - xact_start AS duration, left(query, 80) AS query
FROM pg_stat_activity
WHERE cardinality(pg_blocking_pids(pid)) > 0;

-- сначала мягко отменить запрос
SELECT pg_cancel_backend(<pid>);
-- если не помогло - разорвать соединение
SELECT pg_terminate_backend(<pid>);

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

СпособКогда применятьЧто потеряется
Ctrl+Breakоперация на клиенте, окно отвечает на клавишитолько прерванная операция
Снять 1cv8.exe / 1cv8c.exeфайловая база, окно «Не отвечает»несохранённые данные пользователя
Удалить сеанс в консоли или racсерверная база, сеанс держит блокировкутранзакция одного пользователя
KILL / pg_terminate_backendвиновника не видно в 1Странзакция одного соединения
Завершить rphost, перезапустить агентзавис весь рабочий процессработа всех пользователей процесса или сервера
Диагностика: выберите симптом

Журналы: почему 1С зависла

Сняли зависание — разберитесь, откуда оно. Иначе завтра повторится в то же время.

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

Открывается в пользовательском режиме через Администрирование → Обслуживание или в Конфигураторе: Администрирование → Журнал регистрации.

Что искать:

  • 🕒 события за 10–15 минут до зависания — кто что проводил или выгружал;
  • ❌ события с уровнем «Ошибка» — аварийные завершения сеансов, ошибки транзакций;
  • 🔁 регламентные задания, которые стартовали в момент зависания: обмен, загрузка курсов, обновление полнотекстового индекса.

Технологический журнал

Журнал регистрации не показывает, на каком запросе стояла база. Для этого включают технологический журнал: файл logcfg.xml в каталоге conf платформы (например, C:\Program Files\1cv8\conf\). Платформа подхватывает его без перезапуска.

Минимальная настройка для поиска блокировок:

<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\1C_TechLog" history="24">
    <event><eq property="name" value="TLOCK"/></event>
    <event><eq property="name" value="TTIMEOUT"/></event>
    <event><eq property="name" value="TDEADLOCK"/></event>
    <event><eq property="name" value="EXCP"/></event>
    <property name="all"/>
  </log>
</config>
  • TLOCK — установка управляемых блокировок;
  • TTIMEOUT — превышение времени ожидания: в событии видно, чей сеанс мешал;
  • TDEADLOCK — взаимоблокировка двух транзакций;
  • EXCP — исключения, в том числе аварийные завершения процессов.

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

Как не допустить повторного зависания 1С

Таймауты и параметры базы

  • ⏱️ Время ожидания блокировки данных. В Конфигураторе: Администрирование → Параметры информационной базы. По умолчанию 20 секунд. Увеличивать его — не лечение: пользователи просто дольше ждут перед ошибкой. Меняют только когда тяжёлые операции законно идут дольше.
  • 🧹 Проблемные процессы. В свойствах кластера есть флажок принудительного завершения проблемных процессов и лимит памяти рабочих процессов. Сервер сам перезапустит процесс, который «распух», вместо того чтобы висеть всем.
  • 🌙 Регламентные задания. Тяжёлые задания — обновление полнотекстового индекса, обмены, пересчёт итогов — переносите на ночь.

Обслуживание и окружение

  • 🗄️ на MS SQL и PostgreSQL — регулярное обновление статистики и обслуживание индексов: устаревшая статистика даёт медленные планы запросов, а с ними долгие транзакции;
  • 🛡️ исключения в антивирусе для папки файловой базы, каталога кэша клиента и каталога srvinfo сервера;
  • 💾 в файловом режиме — не больше 3–5 одновременных активных пользователей; если больше — переходите на клиент-серверный вариант;
  • 🔄 при странных зависаниях клиента — запуск с ключом /ClearCache или очистка кэша в окне запуска.

Порядок работы пользователей

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

Частые вопросы о зависании 1С

Можно ли отменить последнее действие в 1С, как в Word?
Общей кнопки отмены нет. Ввод в поле до записи отменяет Ctrl+Z или закрытие формы без сохранения. Записанный документ отменяют проведением назад («Отмена проведения»), элемент справочника — пометкой на удаление. Если в базе включено версионирование объектов, прежнюю версию можно посмотреть и восстановить из истории изменений.
Сколько ждать, прежде чем снимать зависшую 1С?
Если процесс грузит процессор или диск — до завершения операции. Если счётчики на нуле, достаточно 5–10 минут. Закрытие месяца в крупной базе может идти час и больше, и это нормально.
Потеряются ли данные, если снять процесс 1С в диспетчере задач?
Незаписанные изменения в открытых формах пропадут. Записанные данные останутся, незавершённая транзакция откатится. В файловой базе есть небольшой риск повреждения файла, если процесс сняли во время записи.
Почему после удаления сеанса в консоли пользователь снова «висит»?
Клиент мог переподключиться автоматически и повторить тот же вызов. Попросите пользователя закрыть программу, затем удалите сеанс и соединение. Если вызов был долгим запросом, проверьте, не осталось ли соединения на стороне СУБД.
Почему 1С зависает каждый день в одно и то же время?
Почти всегда это регламентное задание или резервное копирование. Сверьте время по журналу регистрации и расписанию заданий, проверьте расписание бэкапа на сервере СУБД.