1С 8.3 зависла и не отвечает: от кэша до бесконечного цикла в коде

· 10 мин

Содержание

Зацикливание 1С 8.3 почти всегда лечится в таком порядке: сначала очистка кэша (запуск с ключом /ClearCache или удаление папок кэша в профиле), затем проверка блокировок и зависших сеансов, затем технологический журнал. Если 1С висит у одного пользователя — виноват кэш, настройки или антивирус на его компьютере. Если зависание системы видят все — ищите блокировку, долгий запрос или цикл в коде на сервере.

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

Первичная диагностика: что именно зависло в 1С

Первые пять минут уходят на то, чтобы понять масштаб. От этого зависит, куда смотреть дальше.

Ответьте на четыре вопроса:

  1. Висит у одного или у всех? Попросите коллегу открыть ту же базу. Если у него работает — проблема локальная.
  2. Когда именно? При запуске, при открытии конкретной формы, при проведении документа, при формировании отчёта, при обмене.
  3. Что с процессором? Откройте диспетчер задач (Ctrl+Shift+Esc) и найдите процесс 1cv8.exe (толстый клиент) или 1cv8c.exe (тонкий). На сервере смотрите rphost.exe.
  4. Файловая база или клиент-серверная? Это видно в списке баз: путь к каталогу или строка вида Srvr="server";Ref="base".
СимптомНагрузкаВероятная причина
«Не отвечает», одно ядро загружено полностьюВысокая на клиентеЦикл в клиентском коде, тяжёлая форма
Клиент ждёт, rphost.exe грузит процессорВысокая на сервереДолгий запрос, цикл на сервере
Ожидание, нагрузки почти нетНизкаяБлокировка, сеть, внешняя компонента, COM
Бесконечная загрузка при стартеРазнаяКэш, расширения, антивирус, сеть
Зависает только у одного пользователяРазнаяКэш, настройки пользователя, антивирус

Как прервать зависшую операцию

Попробуйте Ctrl+Break. Если операция выполняется на клиенте, 1С спросит, прервать ли её. Серверный вызов так обычно не прервать: клиент ждёт ответа от сервера.

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

Очистка кэша и временных файлов 1С

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

Способ 1. Ключ /ClearCache

Самый безопасный вариант. Ничего руками удалять не нужно.

  1. Откройте окно запуска 1С и выделите базу.
  2. Нажмите Изменить, пройдите до последней страницы.
  3. В поле «Дополнительные параметры запуска» впишите /ClearCache.
  4. Нажмите Готово и запустите базу.

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

Способ 2. Удаление папок кэша вручную

Нужен, если база не стартует даже с ключом. Закройте все сеансы 1С на компьютере и откройте по очереди две папки:

%APPDATA%\1C\1cv8
%LOCALAPPDATA%\1C\1cv8

Внутри лежат папки с длинными именами вида a3f1c2d4-... — по одной на каждую базу. Их можно удалить: 1С создаст их заново при следующем входе.

Не трогайте файлы ibases.v8i и 1cestart.cfg в %APPDATA%\1C\1CEStart. Это список баз пользователя. Удалите их — придётся заново добавлять все базы.

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

@echo off
taskkill /IM 1cv8.exe /F
taskkill /IM 1cv8c.exe /F
for /d %%D in ("%APPDATA%\1C\1cv8\*-*") do rd /s /q "%%D"
for /d %%D in ("%LOCALAPPDATA%\1C\1cv8\*-*") do rd /s /q "%%D"
echo Кэш 1С очищен

Маска *-* выбирает только папки с GUID в имени и не задевает служебные каталоги.

Настройки пользователя

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

Технологический журнал: ищем, где 1С крутится

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

Журнал включают файлом logcfg.xml. Его кладут в каталог conf платформы, например C:\Program Files\1cv8\conf. На клиент-серверной базе — на сервере 1С, на файловой — на компьютере пользователя. Платформа подхватывает файл без перезапуска, обычно в течение минуты.

Пример настройки под поиск зависаний:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\1C_TJ" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <event>
      <eq property="name" value="TTIMEOUT"/>
    </event>
    <event>
      <eq property="name" value="TDEADLOCK"/>
    </event>
    <event>
      <eq property="name" value="CALL"/>
      <gt property="duration" value="10000000"/>
    </event>
    <property name="all"/>
  </log>
</config>

Что ловит каждый блок:

  • 🔴 EXCP — исключения, в том числе те, что код перехватил и проглотил;
  • ⏳ TTIMEOUT — превышено время ожидания блокировки;
  • 🔒 TDEADLOCK — взаимоблокировка двух транзакций;
  • 🐢 CALL дольше 10 секунд — длительность в журнале 8.3 указывается в микросекундах, поэтому 10000000 и есть 10 секунд.

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

Журнал быстро растёт. Включайте его на время воспроизведения ошибки и выключайте, удалив logcfg.xml. Параметр history="24" хранит файлы сутки, но место на диске проверяйте сами.

Отладчик: поймать цикл на месте

Если у вас есть доступ к Конфигуратору, цикл в коде быстрее найти отладчиком. Запустите базу из Конфигуратора клавишей F5, воспроизведите зависание и в меню Отладка выберите Прервать. Отладчик остановится на текущей строке, а окно Стек вызовов покажет, откуда она вызвана.

Типичные находки:

  • 🔁 Пока ... Цикл, условие выхода которого никогда не меняется;
  • 🔁 обработчик ПриИзменении, который меняет то же поле и снова себя вызывает;
  • 🔁 запрос внутри цикла по тысячам строк документа;
  • 🔁 рекурсия при обходе иерархического справочника, где элемент оказался своим же родителем.

COM-соединение и внешние компоненты

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

COM-соединение

Внешние программы подключаются к базе через V83.COMConnector. Зависание здесь бывает по трём причинам:

  1. Версия коннектора не совпадает с версией сервера. После обновления платформы зарегистрируйте компоненту новой версии от имени администратора:
regsvr32 "C:\Program Files\1cv8\8.3.xx.xxxx\bin\comcntr.dll"

Вместо 8.3.xx.xxxx подставьте номер установленной платформы.

  1. Разрядность. 32-разрядная программа не видит 64-разрядный comcntr.dll, и наоборот. Регистрируйте компоненту той же разрядности, что и вызывающая программа.
  2. Соединения не закрываются. Каждое COM-соединение — отдельный сеанс. Внешний скрипт открывает их в цикле и не освобождает, сеансы копятся, сервер начинает тормозить. Проверьте список сеансов (раздел ниже): много сеансов с типом «COM-соединение» — признак именно этого.

Внешние компоненты и оборудование

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

Проверка простая: отключите устройство в разделе Администрирование → Подключаемое оборудование (снимите флажок использования у экземпляра) и повторите операцию. Перестало виснуть — обновите драйвер или обратитесь к поставщику оборудования.

Блокировки и сеансы: когда 1С ждёт другого пользователя

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

Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки

Кто сейчас в базе

В пользовательском режиме откройте Все функции → Стандартные → Активные пользователи. Если пункта «Все функции» нет в меню, включите его в Сервис и настройки → Параметры. Список показывает, кто работает и с какого компьютера.

На клиент-серверной базе информации больше. Откройте консоль администрирования серверов и пройдите: кластер → Информационные базы → ваша база → Сеансы или Блокировки. В узле Блокировки видно, какой сеанс что держит. Долго висящий сеанс с захваченными объектами — первый подозреваемый.

Сеансы можно получить и из командной строки, если запущена служба ras:

rac cluster list
rac session list --cluster=<id-кластера>

Список всех параметров rac выводит rac help.

Как снять зависший сеанс

  1. Выясните у пользователя, что он делает. Иногда это законная долгая операция — закрытие месяца или перепроведение.
  2. Если человек недоступен, а сеанс держит базу, удалите его в консоли через контекстное меню сеанса.
  3. Если рабочий процесс rphost.exe продолжает грузить процессор, его можно перезапустить через перезапуск службы агента сервера 1С.

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

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

У файловой базы нет консоли сеансов. Зависший процесс 1cv8.exe на одном из компьютеров может держать файл 1Cv8.1CD. Найдите этот компьютер по списку активных пользователей и закройте 1С на нём. Если данные повреждены после аварийного завершения, запустите в Конфигураторе Администрирование → Тестирование и исправление, предварительно выгрузив копию базы .

Антивирус и брандмауэр: скрытая причина зависаний

Антивирус проверяет каждое обращение 1С к файлам базы и кэша. На файловой базе в сети это даёт подвисания на каждом действии и бесконечную загрузку при старте.

Что добавить в исключения антивируса

ГдеЧто исключить
Компьютер пользователя%APPDATA%\1C, %LOCALAPPDATA%\1C, каталог платформы C:\Program Files\1cv8
Компьютер пользователяПроцессы 1cv8.exe, 1cv8c.exe, 1cv8s.exe
Файловая базаКаталог базы с файлом 1Cv8.1CD на сервере, где он лежит
Сервер 1СКаталог кластера srvinfo, процессы ragent.exe, rmngr.exe, rphost.exe
Сервер СУБДКаталоги файлов данных и журналов транзакций

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

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

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

  • 🔌 1540 — агент сервера;
  • 🔌 1541 — менеджер кластера;
  • 🔌 1560–1591 — диапазон рабочих процессов по умолчанию. Его задают в свойствах рабочего сервера, и если диапазон меняли, открывайте тот, что указан там.

Проверить порт можно из PowerShell на компьютере пользователя:

Test-NetConnection server1c -Port 1541

TcpTestSucceeded : True — порт доступен.

Если ничего не помогло

Диагностика: выберите симптом

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

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

Сколько ждать, прежде чем снимать зависшую 1С?
Для обычных действий хватит 5–10 минут. Закрытие месяца, перепроведение и обновление базы могут идти часами — их не прерывайте, особенно обновление конфигурации.
Почему после снятия процесса 1С пишет, что база занята?
На сервере ещё живёт сеанс прерванного клиента. Он завершится сам после таймаута или его удаляет администратор в консоли сервера.
Очистка кэша удаляет данные базы?
Нет. Кэш хранится на компьютере пользователя отдельно от базы. Пропадут только локальные копии форм и метаданных — 1С загрузит их заново.
Помогает ли добавить памяти на компьютер?
Только если процесс 1cv8c.exe действительно упирается в память. При бесконечном цикле или ожидании блокировки дополнительная память ничего не даст.
Можно ли включить технологический журнал на рабочем сервере?
Можно, с узким фильтром событий, как в примере выше, и на ограниченное время. Полный журнал без фильтров быстро забьёт диск и замедлит сервер.