Многие технические специалисты и системные администраторы сталкиваются с ситуацией, когда пользователь штатно закрывает программу 1С:Предприятие, визуальное окно исчезает, но в «Диспетчере задач» продолжает висеть процесс 1cv8.exe или 1cv8c.exe. При этом процесс может потреблять от 15% до 30% ресурсов центрального процессора (что обычно соответствует полной загрузке одного ядра). Такая проблема особенно характерна для файловых баз и актуальных версий платформы, начиная с 8.3.15 и выше. Разберем детально, почему это происходит и как с этим бороться.
Для начала проанализируем ситуацию: почему процесс не завершается? Просто так приложение висеть не будет — оно либо выполняет бесконечный цикл операций, либо ожидает освобождения ресурса. Чтобы «заглянуть под капот» платформы в момент выхода, нам необходимо настроить Технологический журнал (ТЖ). Это единственный достоверный способ увидеть, на чем именно спотыкается процесс.
Создадим файл logcfg.xml в папке conf (обычно это C:\Program Files\1cv8\conf или C:\Program Files (x86)\1cv8\conf) и настроим сбор событий исключений и работы с базой данных. Рассмотрим пример конфигурации для отлова ошибок:
<config xmlns="http://v8.1c.ru/7.4/get/logcfg">
<log location="C:\1C_Logs" history="2">
<event>
<eq property="name" value="EXCP"/>
</event>
<event>
<eq property="name" value="DBV8DBENG"/>
</event>
<property name="all"/>
</log>
</config>
Проанализируем полученные логи. Часто там можно встретить сообщения следующего вида: DatabaseException8, Descr="Не удалось заблокировать запись. Действие не выполнено 'ACTIVEUSERS'". Выясним причину этой ошибки. В файловом режиме работы список активных пользователей хранится непосредственно внутри файла 1Cv8.1cd в служебной таблице ACTIVEUSERS. При выходе программа пытается удалить запись о текущем сеансе из этой таблицы. Если в этот момент другой процесс (например, зависшее ранее фоновое задание или другой экземпляр программы) держит блокировку на этой таблице, закрывающийся процесс уходит в бесконечный цикл ожидания, создавая ту самую нагрузку на процессор.
Разберем еще один важный аспект — регламентные задания в файловой базе. В отличие от серверного варианта, где за выполнение заданий отвечает менеджер кластера, в файловом режиме роль «планировщика» берет на себя один из запущенных клиентских сеансов. Рассмотрим ситуацию: вы закрываете программу, но в этот момент в фоне запустилось задание «Извлечение текста файлов для поиска» или «Обновление индекса полнотекстового поиска».
Процесс не может завершиться, пока не закончит выполнение текущей транзакции или операции индексации. Критически важно понимать, что даже если вы отключили задание в интерфейсе, платформа на уровне ядра может пытаться завершить низкоуровневые операции с файлами индексов в папке 1Cv8FTxt. Если файлы индекса повреждены, процесс может «зациклиться» на попытке их прочитать или обновить.
Для решения этой проблемы выполним следующие шаги:
1Cv8FTxt из каталога информационной базы. При следующем запуске платформа пересоздаст структуру, если поиск будет включен.Проанализируем записи в ТЖ, содержащие тег HASP. Часто зависание происходит на операциях NETHASP_READBLOCK или NETHASP_LASTSTATUS. Это указывает на то, что при выходе программа пытается корректно вернуть лицензию менеджеру лицензий (License Manager), но не получает ответа. Это может быть связано с особенностями работы драйверов Sentinel (SafeNet) в современных версиях Windows 10/11.
Выясним, как стабилизировать работу защиты:
C:\ProgramData\1C\licenses.nhsrv.ini с корректными настройками адреса сервера лицензий, чтобы исключить задержки на широковещательных запросах при выходе.В платформе 8.3.18 и выше активно развивается механизм «Глобального поиска». Он создает локальные индексы для каждого пользователя в его профиле (папка %AppData%\1C\1cv8\). При закрытии программы 1С сбрасывает накопленные данные из оперативной памяти в эти файлы. Если файлов кэша стало слишком много или они имеют сложную структуру, запись может занимать значительное время, при этом визуальное окно программы уже будет закрыто.
Посмотрим, как очистка кэша помогает в данной ситуации. Рассмотрим стандартный алгоритм:
1cv8.exe через диспетчер задач или командой taskkill /f /im 1cv8*.%AppData%\1C\1cv8\
%LocalAppData%\1C\1cv8\
Проанализируем ситуацию с точки зрения операционной системы. В момент выхода 1С активно изменяет файлы базы данных (*.1cd, *.1cl) и временные файлы. Антивирус может расценить массовое изменение файлов как подозрительную активность и заблокировать к ним доступ для проверки. В результате 1С не может завершить транзакцию записи в таблицу ACTIVEUSERS или обновить файл блокировок, уходя в состояние бесконечного ожидания.
Чтобы исключить этот фактор, выполним настройку исключений антивируса:
*.1cd, *.1cl, *.pff, *.grs в список доверенных.1cv8.exe, 1cv8c.exe и 1cv8s.exe в исключения (проверка активности процессов).1C.Разберем ситуацию, когда проблема вызвана багом самой платформы. Из практики известно, что в некоторых сборках (например, в линейке 8.3.18.12xx и некоторых релизах 8.3.21) наблюдались проблемы с высвобождением потоков (threads) при использовании внешних компонент. Если ваша конфигурация активно использует торговое оборудование (сканеры, кассы) или специфические внешние компоненты (например, для печати штрихкодов), они могут блокировать завершение процесса.
Проанализируем используемое оборудование и обновим драйверы до наиболее актуальных версий, сертифицированных для текущей версии платформы. Также, если проблема носит массовый характер, рекомендуется рассмотреть переход на более стабильный «исправительный» релиз платформы (например, переход с 8.3.18 на стабильные сборки 8.3.22 или выше, где многие проблемы управления потоками были решены).
Подводя итог, можно сказать, что «зависание» процесса 1С — это чаще всего следствие невозможности корректно завершить запись в служебные таблицы файловой базы или проблемы с индексацией данных. Выясним основные шаги для профилактики:
chdbfl.exe, чтобы исключить логическую порчу таблицы ACTIVEUSERS.Соблюдение этих правил и внимательный анализ Технологического журнала позволят вам быстро локализовать и устранить причину некорректного завершения работы программы.