Ошибка 121 в 1С: почему программа теряет связь с файлом базы и что с этим делать
Содержание
«Превышен таймаут семафора» в 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 → Система на компьютере пользователя и на сервере с базой. Отфильтруйте события за минуты вокруг сбоя.
- На клиенте ищите предупреждения от источников, связанных с сетью: драйвер адаптера,
Tcpip,mrxsmb, сообщения о потере связи с сетевым ресурсом. - На сервере смотрите события источника
disk(например, код 153 — повтор операции ввода-вывода) и сброса контроллера хранилища (код 129). Это признак проблем с диском или массивом. - Сравните время: если события на сервере совпадают с ошибкой у пользователей, причина на стороне хранения.
Проверка сети
Простой длительный пинг выявляет обрывы, которые не видно глазом:
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, сетевой карты и кластера
Таймаут можно немного увеличить, но это лечит симптом. Если диск или сеть действительно сбоят, ошибка просто станет реже и превратится в «подвисания».
Энергосбережение адаптера
- Откройте
devmgmt.msc→Сетевые адаптеры→ свойства адаптера. - На вкладке
Управление электропитаниемснимите флажок «Разрешить отключение этого устройства для экономии энергии». - На вкладке
Дополнительноотключите энергоэффективный Ethernet, если такой параметр есть (название зависит от производителя карты, например Energy Efficient Ethernet или Green Ethernet). - В схеме электропитания 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, а сотрудники в это время проводят документы, ошибки появятся ровно в обед.
Что делать администратору, если сбой уже случился
Ошибка в момент записи может оставить файл базы в несогласованном состоянии. Действуйте по порядку.
- Попросите всех выйти из базы. Посмотрите, кто ещё подключён: в Конфигураторе
Администрирование→Активные пользователи. Предупредите, что несохранённые документы пропадут. - Скопируйте файл
1Cv8.1CDв другое место, пока никто не работает . Без копии никаких проверок и исправлений не запускайте. - Проверьте диск сервера. Сначала без исправлений:
chkdsk D:. Если есть ошибки файловой системы — исправление планируйте в нерабочее время, на системном диске оно требует перезагрузки. - Проверьте базу 1С. В каталоге
binплатформы есть утилитаchkdbfs.exeдля физической проверки файла базы. Логическую проверку выполняют в Конфигураторе:Администрирование→Тестирование и исправление. Обоим режимам нужен монопольный доступ. - Перенесите базу на локальный диск, если сеть явно сбоит, а работать надо сегодня. Например, на терминальный сервер, куда пользователи заходят по RDP.
- Запишите время, пользователей и действия, при которых шла ошибка. Это материал для поиска причины по журналам.
При «Тестировании и исправлении» с удалением битых ссылок данные могут измениться необратимо. Сначала запускайте режим только проверки и анализируйте отчёт.
Если после сбоя база не открывается с сообщением о повреждении файла, не пытайтесь «восстанавливать» её поверх рабочего файла. Работайте с копией, а оригинал держите нетронутым.
Как не допустить повтора: профилактика и мониторинг
Самое надёжное лечение — убрать работу с файлом базы по сети.
| Решение | Когда подходит | Минусы |
|---|---|---|
| Терминальный сервер (RDP), база на его локальном SSD | 3–15 пользователей, удалённые сотрудники | Нужны лицензии Windows на терминальный доступ |
| Клиент-серверный вариант (сервер 1С + СУБД) | От 10–15 пользователей, крупные базы | Стоимость лицензий сервера 1С, нужен администратор |
| Публикация на веб-сервере | Работа через браузер и тонкий клиент по интернету | Нужна настройка веб-сервера и защиты |
| Файловая база в сетевой папке | 1–3 пользователя в одной проводной сети | Чувствительна к любому сбою сети и диска |
Что держать на контроле
В исключения антивируса добавляют каталоги баз и файлы с расширением .1CD. Если политика безопасности запрещает исключения, хотя бы отключите проверку при чтении для этих файлов.
Для мониторинга подойдут любые средства, которые уже есть в компании: Zabbix, PRTG или встроенный в Windows «Монитор ресурсов». Главное — смотреть задержку диска и потери пакетов, а не только загрузку процессора.