Ошибка 121 в 1С: почему программа теряет связь с файлом базы и что с этим делать

· 10 мин

Содержание

«Превышен таймаут семафора» в 1С — это не ошибка самой программы, а сообщение Windows с кодом 121 (0x00000079, ERROR_SEM_TIMEOUT). Оно значит, что операция чтения или записи файла не завершилась за отведённое время: сеть, сетевая папка или диск не ответили вовремя. Исправлять нужно канал до файла: кабель, сетевую карту, общий ресурс, диск сервера, антивирус.

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

Что такое семафор и при чём тут блокировки 1С

Семафор — объект синхронизации Windows. Через такие объекты система ждёт завершения операций ввода-вывода, в том числе сетевых. Если ответа нет дольше предела, Windows прерывает ожидание и возвращает программе код 121. Платформа 1С просто показывает этот текст пользователю.

Отсюда главный вывод: к управляемым и транзакционным блокировкам 1С эта ошибка напрямую не относится. Их легко спутать по слову «таймаут».

СообщениеЧья ошибкаЧто значит
Превышен таймаут семафораWindows (код 121)Файл или сетевой ресурс не ответил вовремя
Превышено время ожидания захвата блокировки / Конфликт блокировок при выполнении транзакцииПлатформа 1СДанные заняты другим сеансом
Удаленный хост принудительно разорвал существующее подключениеWindows (сеть)Обрыв TCP-соединения
Сеанс отсутствует или удаленСервер 1ССеанс завершён на сервере

Блокировки участвуют в другом смысле. Файловая база блокирует таблицы целиком. Пока один пользователь долго пишет в базу через медленную сеть, остальные ждут. Чем больше и дольше операции ввода-вывода по сети, тем выше шанс, что одна из них не уложится в лимит.

Откуда берётся ошибка: основные причины

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

  • 🔌 Нестабильная сеть. Wi-Fi, повреждённый кабель, перегретый или дешёвый коммутатор, плохой порт. Один потерянный пакет не страшен, серия — уже таймаут.
  • 💤 Энергосбережение сетевой карты. Windows отключает адаптер «для экономии энергии», и связь пропадает на секунды.
  • 🌐 Работа через VPN или по удалённой сети. Файловая база через интернет — заведомо плохая схема: задержки и обрывы гарантированы.
  • 💽 Проблемы диска на сервере. Переназначенные секторы, умирающий HDD, перегруженный RAID, засыпающий NAS. Диск отвечает медленно — клиент не дожидается.
  • 🛡️ Антивирус. Проверка 1Cv8.1CD при каждом обращении задерживает чтение и запись. Иногда так ведёт себя и модуль «сетевой защиты».
  • 📦 Перегрузка общего ресурса. Одновременно идёт резервное копирование , синхронизация облака или копирование больших файлов на тот же диск.
  • 🖥️ Перенаправленные диски RDP. Пользователь в терминале сохраняет выгрузку или открывает файл с \\tsclient\C. Такой канал медленный и рвётся при любой просадке связи.

В клиент-серверном варианте сеансы обмениваются с сервером 1С по TCP, а не читают файл базы по сети. Там ошибка 121 обычно возникает на файловых операциях: выгрузка .dt в сетевую папку, обмен данными через общий каталог, загрузка файлов из сетевого пути, технологический журнал на сетевом диске.

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

Как найти виновника по журналам Windows и 1С

Сначала зафиксируйте точный текст окна. В нём есть путь к файлу: по нему сразу видно, база это, временный файл или выгрузка. Скриншот с временем ошибки сэкономит половину диагностики.

Журнал событий Windows

Откройте eventvwr.msc → Журналы Windows → Система на компьютере пользователя и на сервере с базой. Отфильтруйте события за минуты вокруг сбоя.

  1. На клиенте ищите предупреждения от источников, связанных с сетью: драйвер адаптера, Tcpip, mrxsmb, сообщения о потере связи с сетевым ресурсом.
  2. На сервере смотрите события источника disk (например, код 153 — повтор операции ввода-вывода) и сброса контроллера хранилища (код 129). Это признак проблем с диском или массивом.
  3. Сравните время: если события на сервере совпадают с ошибкой у пользователей, причина на стороне хранения.

Проверка сети

Простой длительный пинг выявляет обрывы, которые не видно глазом:

ping -t 192.168.1.10
ping -n 500 -l 1400 192.168.1.10

Оставьте первую команду на 15–20 минут в рабочее время. Даже 1–2% потерь или скачки задержки до сотен миллисекунд в локальной сети — уже проблема. Вторая команда шлёт крупные пакеты: на плохом кабеле они теряются заметнее.

Доступность общего ресурса по протоколу SMB проверяет PowerShell:

Test-NetConnection 192.168.1.10 -Port 445

Журнал регистрации и технологический журнал

В журнале регистрации 1С отфильтруйте события с уровнем «Ошибка» за нужный период. Там видно, у какого пользователя и на каком действии упал сеанс.

Если ошибка редкая, включите технологический журнал на сбор исключений. Файл logcfg.xml кладут в каталог conf установленной платформы:

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="C:\1C_techlog" history="48">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <property name="all"/>
  </log>
</config>

Каталог журнала держите на локальном диске и с запасом места. После диагностики удалите logcfg.xml, иначе журнал продолжит расти.

Настройка таймаутов SMB, сетевой карты и кластера

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

Энергосбережение адаптера

  1. Откройте devmgmt.msc → Сетевые адаптеры → свойства адаптера.
  2. На вкладке Управление электропитанием снимите флажок «Разрешить отключение этого устройства для экономии энергии».
  3. На вкладке Дополнительно отключите энергоэффективный Ethernet, если такой параметр есть (название зависит от производителя карты, например Energy Efficient Ethernet или Green Ethernet).
  4. В схеме электропитания Windows выберите режим «Высокая производительность» на компьютерах, где работают с базой.

Таймаут сеанса SMB на клиенте

У клиента SMB есть параметр SessionTimeout — сколько секунд он ждёт ответа сервера. Значение по умолчанию — 60. Посмотреть и изменить его можно в PowerShell от имени администратора:

Get-SmbClientConfiguration | Select-Object SessionTimeout
Set-SmbClientConfiguration -SessionTimeout 120 -Force

Тот же параметр хранится в реестре:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"SessionTimeout"=dword:00000078

0x78 — это 120 секунд. Изменение применяют на каждом клиенте, после чего перезагружают компьютер или перезапускают службу «Рабочая станция».

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

Что можно настроить в кластере 1С

В клиент-серверной схеме параметры кластера на ошибку 121 почти не влияют: она возникает в файловой операции, а не в протоколе 1С. Полезно другое:

  • 📁 не размещать каталог кластера, временные файлы и технологический журнал на сетевых дисках;
  • 📤 выгружать .dt и делать файловые обмены сначала на локальный диск сервера, а копировать в сетевое хранилище отдельным заданием;
  • 🔢 при настройке портов помнить схему: клиент идёт к агенту (1540), затем к менеджеру кластера (1541) и рабочим процессам из диапазона, заданного в свойствах рабочего сервера. Файрвол между ними должен пропускать весь этот диапазон.

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

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

Длинные операции в файловой базе

  • ⏳ Не держите транзакцию открытой, пока идёт чтение внешних файлов или обращение к сети. Сначала подготовьте данные, потом коротко запишите.
  • 📊 Тяжёлые отчёты за годы в файловой базе по сети читают гигабайты. Ставьте их формирование на компьютер рядом с базой или на терминальный сервер .
  • 🗂️ Временные файлы создавайте через ПолучитьИмяВременногоФайла() — они ложатся в локальный временный каталог, а не в сетевую папку.

Повтор файловой операции

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

Функция КопироватьСПовтором(Источник, Приемник, Попыток = 3)
	
	Для Номер = 1 По Попыток Цикл
		Попытка
			КопироватьФайл(Источник, Приемник);
			Возврат Истина;
		Исключение
			ЗаписьЖурналаРегистрации("Копирование файла",
				УровеньЖурналаРегистрации.Предупреждение, , ,
				СтрШаблон("Попытка %1 из %2: %3", Номер, Попыток, ОписаниеОшибки()));
		КонецПопытки;
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции

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

Регламенты по расписанию

Разведите по времени резервное копирование, синхронизацию облака, полную проверку антивирусом и рабочие часы. Если копия базы снимается в 13:00, а сотрудники в это время проводят документы, ошибки появятся ровно в обед.

Что делать администратору, если сбой уже случился

Ошибка в момент записи может оставить файл базы в несогласованном состоянии. Действуйте по порядку.

  1. Попросите всех выйти из базы. Посмотрите, кто ещё подключён: в Конфигураторе Администрирование → Активные пользователи. Предупредите, что несохранённые документы пропадут.
  2. Скопируйте файл 1Cv8.1CD в другое место, пока никто не работает . Без копии никаких проверок и исправлений не запускайте.
  3. Проверьте диск сервера. Сначала без исправлений: chkdsk D:. Если есть ошибки файловой системы — исправление планируйте в нерабочее время, на системном диске оно требует перезагрузки.
  4. Проверьте базу 1С. В каталоге bin платформы есть утилита chkdbfs.exe для физической проверки файла базы. Логическую проверку выполняют в Конфигураторе: Администрирование → Тестирование и исправление. Обоим режимам нужен монопольный доступ.
  5. Перенесите базу на локальный диск, если сеть явно сбоит, а работать надо сегодня. Например, на терминальный сервер, куда пользователи заходят по RDP.
  6. Запишите время, пользователей и действия, при которых шла ошибка. Это материал для поиска причины по журналам.

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

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

Как не допустить повтора: профилактика и мониторинг

Самое надёжное лечение — убрать работу с файлом базы по сети.

РешениеКогда подходитМинусы
Терминальный сервер (RDP), база на его локальном SSD3–15 пользователей, удалённые сотрудникиНужны лицензии Windows на терминальный доступ
Клиент-серверный вариант (сервер 1С + СУБД)От 10–15 пользователей, крупные базыСтоимость лицензий сервера 1С, нужен администратор
Публикация на веб-сервереРабота через браузер и тонкий клиент по интернетуНужна настройка веб-сервера и защиты
Файловая база в сетевой папке1–3 пользователя в одной проводной сетиЧувствительна к любому сбою сети и диска

Что держать на контроле

Ежемесячная проверка инфраструктуры под 1С
Выполнено: 0 / 7

В исключения антивируса добавляют каталоги баз и файлы с расширением .1CD. Если политика безопасности запрещает исключения, хотя бы отключите проверку при чтении для этих файлов.

Для мониторинга подойдут любые средства, которые уже есть в компании: Zabbix, PRTG или встроенный в Windows «Монитор ресурсов». Главное — смотреть задержку диска и потери пакетов, а не только загрузку процессора.

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

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