При работе с файловыми базами данных 1С:Предприятие 8 в локальной сети системные администраторы часто сталкиваются с крайне неприятной проблемой. При попытке запустить программу на втором или последующих компьютерах система зависает, после чего выдает ошибку: «не удалось зафиксировать файл для открытия» или «ошибка совместного доступа к файлу». При этом на основном компьютере (где физически лежит база) 1С может работать без каких-либо сбоев.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем взаимосвязь работы сетевых протоколов Windows и платформы 1С, а также по шагам разберем проверенные методы ее устранения.
Для начала выясним причину разного поведения платформ. Часто можно заметить, что старая версия 1С 7.7, расположенная в той же сетевой папке, открывается и функционирует абсолютно нормально, в то время как 1С 8.3 наотрез отказывается запускаться. Дело здесь в принципиальном различии архитектуры хранения данных:
1Cv8.1CD. Когда пользователь запускает программу, платформа пытается захватить и заблокировать определенные диапазоны байт (механизм byte-range locking) внутри этого огромного файла, используя системные вызовы Windows API (в частности, функцию LockFileEx). Если сетевой протокол операционной системы некорректно обрабатывает блокировку хотя бы одного сегмента файла, вся база становится недоступной для совместного использования.Интересен также симптом, когда сеть резко «вспыхивает» (наблюдается всплеск сетевой активности) с интервалом ровно в две минуты, после чего программа выдает ошибку. Две минуты — это стандартный системный таймаут ожидания освобождения файловой блокировки в протоколах SMB. Клиентский ПК отправляет запрос на сервер, сервер пытается монополизировать доступ к файлу, но из-за зависших процессов или некорректного сетевого кэширования не получает ответа. По истечении 120 секунд Windows разрывает сессию ожидания по таймауту, сообщая пользователю о невозможности зафиксировать файл.
Рассмотрим по шагам, как решить эту проблему, двигаясь от самых простых и очевидных действий к глубоким системным настройкам.
Очень часто виновниками блокировки файла базы данных становятся «зависшие» фоновые сессии самой платформы 1С. Даже если на экране пользователя нет открытых окон программы, процессы могут оставаться активными в памяти компьютера-хоста (где лежит база) или на клиентских машинах.
Выполним очистку зависших процессов:
1cv8.exe или 1cv8c.exe.Для автоматизации этой процедуры на всех компьютерах локальной сети можно использовать командную строку (cmd), запущенную от имени администратора. Выполните команду:
taskkill /F /IM 1cv8.exe
taskkill /F /IM 1cv8c.exe
После принудительного завершения процессов обязательно зайдите в папку с базой данных 1С и удалите все временные файлы блокировок. Платформа создает их автоматически при входе пользователей и должна удалять при выходе. Если произошел сбой, файлы остаются и блокируют систему. Удалите файлы со следующими расширениями (сам файл базы 1Cv8.1CD трогать нельзя!):
*.1CL или *.1Cv8.1CL (основные файлы блокировки базы данных);*.cdn (файл блокировки установки новых соединений);*.lck (файлы блокировок служебных папок);1Cv8FTxt или 1Cv8JobScheduler, если они заблокированы.Если на компьютерах пользователей установлены разные версии технологической платформы 1С:Предприятие (например, на сервере стоит 8.3.13.1513, а на клиенте обновили до более свежей версии), это неизбежно приведет к ошибкам совместного доступа. Разные версии платформ могут использовать слегка отличающиеся механизмы сетевой блокировки файла 1Cv8.1CD.
Проанализируем установленные версии программного обеспечения:
Современные операционные системы Windows (начиная с Windows 7 и Windows Server 2008) по умолчанию используют протоколы SMBv2 и SMBv3. В этих протоколах реализован механизм агрессивного кэширования метаданных и так называемые оппортунистические блокировки (Opportunistic Locks, или Oplocks). Они призваны ускорить работу с файлами по сети, но для монолитного файла СУБД 1С они губительны: клиентский ПК захватывает файл в свой локальный кэш, а хост считает, что файл занят монопольно.
Для решения этой проблемы нам потребуется внести изменения в системный реестр Windows.
Выполним настройку на компьютере-хосте (где физически лежит папка с базой):
regedit и нажмите Enter.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters.EnableOplocks и присвойте ему значение 0.Выполним настройку на клиентских компьютерах (с которых подключаются к базе):
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters.0:
DirectoryCacheLifetime (установите значение 0);FileInfoCacheLifetime (установите значение 0);FileNotFoundCacheLifetime (установите значение 0).После внесения изменений в реестр обязательно перезагрузите все измененные компьютеры. Это заставит Windows обращаться к сетевому файлу напрямую, минуя некорректно работающие механизмы кэширования сетевых папок.
Если проблема с блокировками и двухминутными зависаниями началась после обновления роутера (например, Mikrotik) или попытки настроить VPN, причина кроется в некорректной маршрутизации сетевых пакетов или конфликтах протокола IPv6.
При включенном VPN-подключении в системе появляются виртуальные сетевые адаптеры. Windows по умолчанию отдает приоритет протоколу IPv6 над стандартным IPv4. При попытке обратиться к сетевой папке по имени компьютера (например, \\SERVER\1c_base) операционная система пытается разрешить имя через IPv6, зависает на виртуальном адаптере VPN, ждет таймаут и только потом переключается на IPv4. Это и вызывает лавинообразное накопление ошибок совместного доступа.
Выполним оптимизацию сетевых настроек:
\\Server-PC\1c_base на \\192.168.1.100\1c_base. Это исключит фазу долгого и нестабильного распознавания сетевых имен (DNS/NetBIOS).Для быстрого отключения IPv6 на всех адаптерах через PowerShell (запущенный от имени администратора) можно использовать следующую команду:
Disable-NetAdapterBinding -Name "*" -ComponentID ms_tcpip6
После изменения сетевого оборудования роутер мог переназначить тип вашей локальной сети. Если операционная система определила сеть как «Общедоступную» (Public) вместо «Частной» (Private), встроенный брандмауэр Windows (Windows Defender Firewall) начинает жестко блокировать транзитные сетевые запросы к портам SMB (в частности, порт 445), даже если в настройках брандмауэр числится отключенным.
Выясним и исправим сетевой профиль:
Также важно перепроверить права доступа на саму папку с базой данных. На компьютере-хосте зайдите в свойства папки с базой:
Мы подробно проанализировали системную проблему совместного доступа к файловой базе 1С 8.3 по сети. Для гарантированного устранения ошибки «не удалось зафиксировать файл для открытия» мы рекомендуем придерживаться следующего алгоритма действий:
1cv8.exe на всех компьютерах и удалить файлы блокировок (*.1CL, *.cdn).Выполнение этих шагов позволит обеспечить стабильную и быструю работу файловой базы 1С в вашей локальной сети без досадных сбоев и блокировок файлов.