1С тормозит и зависает: почему и как найти причину

Дата: 18.09.2026 23:23:09
производительность
диагностика
администрирование
технологический журнал
тест Гилёва
Комментарий:
0
Платформа:
8.3
Конфигурация:
Любая
Формы:
Любые

Когда 1С тормозит, первая мысль — купить сервер помощнее или «почистить базу». Нередко деньги уходят мимо причины: виноваты бывают сеть до файловой базы, антивирус, фоновое задание, блокировка между пользователями или неудачный запрос в доработке. Бывает и так, что 1С зависает на минуту-другую, а потом «отпускает».

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

Шаг 1. Опишите, что именно медленно

Специалисту важнее всего точное описание симптома: что медленно (вся программа, запуск, документ или отчёт), у кого, когда (постоянно, в определённые часы, после обновления) и насколько (засеките секунды).

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

Шаг 2. Узнайте, какая у вас база: файловая или клиент-серверная

Строка соединения с базой видна в «Справка → О программе» (в «Такси» — меню с тремя полосками) и в окне выбора баз под списком.

  • File="..." — файловая: все данные в одном файле 1Cv8.1CD на компьютере или сетевом диске.
  • Srvr="..."; Ref="..." — клиент-серверная: сервер 1С и отдельная СУБД (MS SQL Server, PostgreSQL).
  • ws="http://..." — подключение через веб-сервер; какая база за ним, уточните у администратора.

Файловая база хорошо работает, пока пользователей немного и они в одной локальной сети. В файловом режиме каждый компьютер сам читает файл базы по сети, поэтому на медленном канале 1С тормозит по сети тем сильнее, чем больше людей работают одновременно; Wi-Fi и VPN — частый источник жалоб.

Шаг 3. Что можно безопасно проверить самому

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

  1. Перезапуск и сравнение. Перезапустите 1С, не помогло — компьютер. Быстро на соседнем компьютере — дело в рабочем месте; быстро под другим пользователем — в правах и настройках.
  2. Кэш. Служебный кэш 1С иногда портится. Сбросьте его разовым запуском с параметром /ClearCache (в окне выбора баз: «Изменить» → дополнительные параметры запуска), потом параметр уберите. Данные базы это не затрагивает.
  3. Ресурсы. В Диспетчере задач посмотрите загрузку процессора, памяти и диска, а в Проводнике — свободное место там, где лежит база или работает сервер. Если что-то загружено почти на 100%, 1С будет медленной с любой базой.
  4. Антивирус. Проверка каждого обращения к файлу базы заметно замедляет файловый вариант. Попросите администратора добавить в исключения папку базы и кэш 1С, а на сервере — каталоги сервера 1С и файлы СУБД.
  5. Время тормозов. Сверьте его с расписанием резервного копирования, обмена с сайтом, выгрузки на маркетплейсы, обновления полнотекстового индекса. В конфигурациях на БСП задания видны в «Регламентных и фоновых заданиях»; расписание меняйте вместе с программистом.
  6. Обновление. После обновления конфигурации на БСП часть данных дообрабатывается в фоне (отложенное обновление), и пока оно идёт, система работает медленнее. Тормоза остались и после него — зовите программиста.
  7. «Зависшие» сеансы. После аварийного закрытия сеанс может остаться на сервере и держать лицензию или блокировку. Их видно в списке «Активные пользователи» (БСП) или в консоли кластера.

1С зависает: что делать, если программа зависла прямо сейчас

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

  • Спросите коллег: если встали все, вероятно, дело в блокировке или перегруженном сервере, и снятие процесса у вас не поможет.
  • Ctrl+Break срабатывает, только если операция сама проверяет прерывание, — так бывает в обработках с долгими циклами. Проведение, закрытие месяца или отчёт на сервере так не остановить.
  • Снимайте задачу через Диспетчер задач только в крайнем случае: в файловой базе аварийное завершение во время записи может повредить файл базы, а в клиент-серверной сервер может продолжить вызов без вас и держать блокировки до его окончания.

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

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

Замер производительности

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

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

Если непонятно, что тормозит, или проблема плавающая, включайте технологический журнал. Его настраивает файл logcfg.xml в каталоге conf платформы там, где выполняется серверный код: на сервере 1С, а для файловой базы — на компьютере пользователя или на веб-сервере публикации. Пример собирает все события дольше 5 секунд и отдельно — таймауты и взаимоблокировки управляемых блокировок.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <!-- Все события дольше 5 секунд -->
  <log location="D:\techlog\long" history="24">
    <event>
      <ne property="Name" value=""/>
      <ge property="Durationus" value="5000000"/>
    </event>
    <property name="all"/>
  </log>
  <!-- Таймауты и взаимоблокировки управляемых блокировок -->
  <log location="D:\techlog\locks" history="24">
    <event>
      <eq property="Name" value="TTIMEOUT"/>
    </event>
    <event>
      <eq property="Name" value="TDEADLOCK"/>
    </event>
    <property name="all"/>
  </log>
</config>

Durationus задаётся в микросекундах (5000000 — 5 секунд), history — в часах хранения. <property name="all"/> пишет все свойства события, включая контекст — строку модуля, откуда пришёл вызов; TTIMEOUT и TDEADLOCK показывают, кто кого ждал.

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

Тест Гилёва: что показывает и чего нет

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

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

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

Быстрая самодиагностика обработкой

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

Код обходится без СтрШаблон, СтрНайти и СтрСоединить: обработка компилируется в режиме совместимости конфигурации, а ниже 8.3.6 (УТ 10.3, УПП) эти функции дают ошибку «Процедура или функция с указанным именем не определена». Форма управляемая, и в обычном приложении такой конфигурации она может не открыться. Тогда запустите базу в режиме управляемого приложения: тонким клиентом или толстым с параметром /RunModeManagedApplication (там же, где /ClearCache), а после проверки параметр уберите. Если старая конфигурация в этом режиме не стартует, обойдитесь замером и техжурналом.

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

// Внешняя обработка «Быстрая диагностика»: модуль управляемой формы.
// На форме одна команда ВыполнитьДиагностику с действием — одноимённой процедурой.
// Платформа 8.3. Строковые функции 8.3.6 не используются, поэтому код подходит
// и для конфигураций в режиме совместимости 8.2. Запускайте под администратором;
// конфигурацию на обычных формах откройте в режиме управляемого приложения.

&НаКлиенте
Процедура ВыполнитьДиагностику(Команда)

	Результат = Новый ТекстовыйДокумент;

	// 1. Пустой вызов сервера: задержка между клиентом и сервером 1С
	КоличествоВызовов = 20;
	Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
	Для Номер = 1 По КоличествоВызовов Цикл
		ПустойВызовСервера();
	КонецЦикла;
	Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало;
	Результат.ДобавитьСтроку("Пустой вызов сервера: "
		+ Формат(Длительность / КоличествоВызовов, "ЧДЦ=1; ЧН=0")
		+ " мс в среднем (вызовов: " + Формат(КоличествоВызовов, "ЧГ=0") + ")");

	// 2. Замеры и сведения, которые собираются на сервере
	Для Каждого ТекстСтроки Из ДиагностикаНаСервере() Цикл
		Результат.ДобавитьСтроку(ТекстСтроки);
	КонецЦикла;

	Результат.Показать("Быстрая диагностика 1С");

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

&НаСервереБезКонтекста
Процедура ПустойВызовСервера()
	// Намеренно пусто: измеряем только накладные расходы на вызов
КонецПроцедуры

&НаСервереБезКонтекста
Функция ДиагностикаНаСервере()

	Строки = Новый Массив;

	// Режим работы базы и компьютер, на котором выполняется серверный код
	ФайловаяБаза = (Найти(ВРег(СтрокаСоединенияИнформационнойБазы()), "FILE=") = 1);
	Если ФайловаяБаза Тогда
		Строки.Добавить("Файловая база, серверный код выполняется на компьютере " + ИмяКомпьютера());
	Иначе
		Строки.Добавить("Клиент-серверная база, сервер 1С: " + ИмяКомпьютера());
	КонецЕсли;

	// Вычисления без обращения к базе: скорость одного потока процессора
	Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
	Сумма = 0;
	Для Номер = 1 По 1000000 Цикл
		Сумма = Сумма + Номер % 7;
	КонецЦикла;
	Строки.Добавить("Цикл из 1 000 000 операций: "
		+ Формат(ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало, "ЧГ=0; ЧН=0") + " мс");

	// Серия коротких запросов: задержка до СУБД или до файла базы
	ИмяСправочника = "";
	Для Каждого ОбъектМетаданных Из Метаданные.Справочники Цикл
		ИмяСправочника = ОбъектМетаданных.Имя;
		Прервать;
	КонецЦикла;

	Если ЗначениеЗаполнено(ИмяСправочника) Тогда
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 Т.Ссылка КАК Ссылка ИЗ Справочник." + ИмяСправочника + " КАК Т";
		КоличествоЗапросов = 100;
		Попытка
			Начало = ТекущаяУниверсальнаяДатаВМиллисекундах();
			Для Номер = 1 По КоличествоЗапросов Цикл
				Запрос.Выполнить();
			КонецЦикла;
			Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - Начало;
			Строки.Добавить("Короткий запрос к базе: "
				+ Формат(Длительность / КоличествоЗапросов, "ЧДЦ=2; ЧН=0")
				+ " мс в среднем (запросов: " + Формат(КоличествоЗапросов, "ЧГ=0") + ")");
		Исключение
			Строки.Добавить("Запрос к справочнику не выполнен: " + ОписаниеОшибки());
		КонецПопытки;
	КонецЕсли;

	// Сеансы: кто сейчас в базе и с какого времени
	Попытка
		Сеансы = ПолучитьСеансыИнформационнойБазы();
		Строки.Добавить("Сеансов в базе: " + Формат(Сеансы.Количество(), "ЧГ=0; ЧН=0"));
		Для Каждого Сеанс Из Сеансы Цикл
			ИмяПользователя = "";
			Если Сеанс.Пользователь <> Неопределено Тогда
				ИмяПользователя = Сеанс.Пользователь.Имя;
			КонецЕсли;
			Строки.Добавить("  №" + Формат(Сеанс.НомерСеанса, "ЧГ=0")
				+ " | " + ПредставлениеПриложения(Сеанс.ИмяПриложения)
				+ " | " + ИмяПользователя
				+ " | " + Сеанс.ИмяКомпьютера
				+ " | с " + Формат(Сеанс.НачалоСеанса, "ДЛФ=DT"));
		КонецЦикла;
	Исключение
		Строки.Добавить("Список сеансов недоступен: " + ОписаниеОшибки());
	КонецПопытки;

	// Активные фоновые задания: что сейчас выполняется «за кадром»
	Попытка
		Отбор = Новый Структура("Состояние", СостояниеФоновогоЗадания.Активно);
		АктивныеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
		Строки.Добавить("Активных фоновых заданий: " + Формат(АктивныеЗадания.Количество(), "ЧГ=0; ЧН=0"));
		Если ФайловаяБаза Тогда
			Строки.Добавить("  (файловая база: видны только задания, запущенные в этом процессе)");
		КонецЕсли;
		Для Каждого Задание Из АктивныеЗадания Цикл
			Строки.Добавить("  " + Задание.Наименование
				+ " | " + Задание.ИмяМетода
				+ " | запущено " + Формат(Задание.Начало, "ДЛФ=DT"));
		КонецЦикла;
	Исключение
		Строки.Добавить("Список фоновых заданий недоступен: " + ОписаниеОшибки());
	КонецПопытки;

	Возврат Строки;

КонецФункции
  • ПустойВызовСервера() ничего не делает: время уходит только на передачу вызова, и в удалённом офисе оно заметно больше, чем в локальной сети.
  • ВЫБРАТЬ ПЕРВЫЕ 1 повторяется с данными уже в кэше: в клиент-серверной базе это в основном задержка между сервером 1С и СУБД, в файловой — скорость доступа к файлу базы (для сетевой папки вместе с сетью).
  • Цикл вычислений не обращается к базе: это скорость одного потока процессора там, где выполняется серверный код.

Типичные ошибки

  • «Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки». Это не медленный сервер, а ожидание: одна транзакция держит данные, другая не дождалась. Лечится изменением кода, а не железом.
  • «Сеанс отсутствует или удален». Сеанс завершили в консоли кластера, перезапустили сервер или рабочий процесс, либо оборвалась связь, например по VPN. Перезапустите клиент; если ошибка регулярная — смотрите журнал регистрации и техжурнал.
  • Забыли про RLS. У администратора отчёт строится быстро, у менеджера — медленно: ограничения на уровне записей добавляют условия в каждый запрос. Помогает пересмотр настройки прав доступа.

Разбор первой ошибки — как найти, кто кого ждёт, и переписать код — в статье про конфликт блокировок в 1С.

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

Почему 1С медленно работает только у одного сотрудника?

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

Поможет ли переход с файловой базы на клиент-серверную?

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

Как ускорить работу 1С без программиста?

Частично: сбросьте кэш, добавьте папку базы в исключения антивируса, перенесите резервное копирование на нерабочее время и не работайте с файловой базой через Wi-Fi и VPN. Если медленно проводится конкретный документ или строится отчёт, дело в коде, и это работа программиста.

Сколько стоит диагностика?

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

Когда проще заказать

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

По теме

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.


1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.