Зависшая блокировка базы 1С: когда файл .1CL можно стереть, а когда нельзя

· 10 мин

Содержание

В файловой базе 1С 8.3 файл блокировки называется 1Cv8.1CL и лежит в одной папке с 1Cv8.1CD. Удалять его можно только тогда, когда базу не держит ни один процесс: все пользователи вышли, 1cv8.exe и веб-сервер её не используют. Если Windows не даёт стереть файл — значит, блокировка живая, и удалять нужно не файл, а причину.

Типичная ситуация: вечером свет моргнул, утром бухгалтер открывает базу и получает Ошибка совместного доступа к файлу '1Cv8.1CL'. 32(0x00000020): Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. Или администратор хочет обновить конфигурацию , а программа пишет, что в базе есть другие пользователи, хотя все давно ушли домой. Ниже — порядок действий без риска для данных, отдельно для файлового и клиент-серверного варианта.

Какие файлы блокировки создаёт 1С и что в них хранится

Файловая база — это папка с несколькими файлами. Не всё, что лежит рядом с 1Cv8.1CD, можно трогать.

Файл или папкаЧто этоМожно удалять?
1Cv8.1CDСами данные и конфигурация❌ Никогда
1Cv8.1CLФайл блокировки: отмечает, что с базой кто-то работает✅ Только когда базу никто не держит
*.lckСлужебные файлы блокировки, которые иногда остаются после сбоя✅ На тех же условиях
1Cv8tmp.1CDВременный файл, появляется при реструктуризации и тестировании⚠️ Только если операция точно не идёт
1Cv8LogЖурнал регистрации❌ Не трогать ради блокировки

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

Сам по себе оставшийся файл 1Cv8.1CL редко мешает. Мешает процесс, который его держит. Поэтому главный шаг — найти этот процесс.

Как понять, что база действительно заблокирована зависшим сеансом

Перед удалением чего-либо проверьте, что блокировка именно «мёртвая», а не принадлежит работающему коллеге.

Признаки зависшей блокировки:

  • 🔒 при входе появляется ошибка совместного доступа к 1Cv8.1CL или 1Cv8.1CD;
  • 👥 Конфигуратор не может установить монопольный режим, хотя пользователи говорят, что вышли;
  • 🕐 в списке активных пользователей висит сеанс человека, который ушёл несколько часов назад;
  • 💥 перед этим был сбой: отключение питания, перезагрузка терминального сервера, обрыв VPN.

Где посмотреть, кто в базе. В самой программе: в БП 3.0 и ЗУП 3.1 — Администрирование → Обслуживание → Активные пользователи. В Конфигураторе — меню Администрирование → Активные пользователи. Если в списке только вы, а ошибка остаётся — базу держит процесс без сеанса пользователя: фоновый 1cv8.exe, веб-сервер или антивирус.

Кто держит файл на уровне Windows. Это самый точный способ:

  1. На компьютере, где лежит папка с базой, откройте compmgmt.msc → Общие папки → Открытые файлы. Там видно, какой пользователь с какого компьютера открыл 1Cv8.1CD и 1Cv8.1CL.
  2. Либо в командной строке от имени администратора выполните net file — команда покажет открытые по сети файлы и их идентификаторы.
  3. Если база лежит на том же компьютере, где запускается 1С, откройте Монитор ресурсов (resmon) → вкладка ЦП → поле Связанные дескрипторы и введите 1Cv8. Монитор покажет процесс, который держит файл.

Удаление файла блокировки в файловой базе: пошагово

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

Шаг 1. Сделайте копию папки базы

Скопируйте всю папку с 1Cv8.1CD в другое место. Если файл данных сейчас занят, копия может получиться неполной — тогда сначала выполните шаги 2–3 и только потом копируйте. Это единственная операция в инструкции, где без резервной копии нельзя.

Шаг 2. Закройте процессы 1С

Попросите пользователей выйти. Затем проверьте, что не осталось «висящих» процессов:

tasklist /v /fi "imagename eq 1cv8.exe"
tasklist /v /fi "imagename eq 1cv8c.exe"

Ключ /v выводит имя пользователя Windows, под которым запущен процесс. На терминальном сервере это сразу показывает, чей сеанс завис. Процесс конкретного пользователя можно завершить в Диспетчере задач на вкладке Пользователи или командой:

taskkill /pid 4812 /f

Номер 4812 здесь условный — подставьте PID из вывода tasklist.

Команда taskkill /im 1cv8.exe /f завершит 1С у всех пользователей сервера, а не только у зависшего. На терминальном сервере так делать можно только когда в базах никто не работает.

Шаг 3. Закройте сетевые дескрипторы

Если база лежит в общей папке, файл может держать не процесс на сервере, а клиент с другого компьютера, у которого оборвалась сеть. Найдите строку с 1Cv8.1CD или 1Cv8.1CL в Общие папки → Открытые файлы, щёлкните правой кнопкой и выберите закрытие файла. То же через командную строку:

net file
net file 1342 /close

Здесь 1342 — идентификатор из первой колонки вывода net file.

Шаг 4. Удалите файл блокировки

Откройте папку базы и удалите 1Cv8.1CL (и файлы .lck, если они там есть). Если Windows пишет, что файл открыт в другой программе, — вернитесь к шагам 2–3: кто-то его ещё держит. Не пытайтесь удалить такой файл утилитами принудительного удаления: блокировку они снимут, но процесс продолжит писать в базу.

Шаг 5. Проверьте базу

Запустите 1С в режиме Предприятия. Если база открылась, работа восстановлена. Если появились ошибки чтения данных, запустите Конфигуратор, Администрирование → Тестирование и исправление — это уже следствие сбоя, а не файла блокировки. Для тестирования нужен монопольный доступ, поэтому в базе в этот момент не должно быть никого.

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

Как снять блокировку в клиент-серверной базе 1С

В клиент-серверном варианте файлов 1Cv8.1CL нет: данные хранит СУБД, а сеансы и соединения учитывает кластер серверов 1С. Удалять что-либо в каталоге srvinfo ради «блокировки» не нужно и опасно. Блокировку снимают завершением сеансов.

Через консоль администрирования серверов

  1. Запустите Администрирование серверов 1С Предприятия.
  2. Раскройте Центральные серверы 1С:Предприятия → <сервер> → Кластеры → <кластер> → Информационные базы → <база>.
  3. Откройте узел Сеансы. Найдите зависший сеанс по имени пользователя, компьютеру и времени начала.
  4. Через контекстное меню удалите сеанс. Пользователь, если он ещё работал, получит сообщение о завершении работы.
  5. Если нужно освободить базу полностью, проверьте ещё узел Соединения.

Чтобы на время работ никто не зашёл заново, откройте свойства информационной базы, включите Блокировка начала сеансов включена, задайте сообщение и Код разрешения. Администратор затем входит с параметром запуска /UC<код>, например /UC1234.

Через утилиту rac

Если графической консоли нет под рукой, те же действия выполняются утилитой rac. Для неё должна быть запущена служба ras. Порядок такой:

rac cluster list
rac infobase summary list --cluster=<uuid-кластера>
rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Идентификаторы берите из вывода предыдущей команды. Если на кластере задан администратор, добавьте --cluster-user и --cluster-pwd. Параметры остальных подкоманд смотрите в справке rac help.

Завершение сеанса обрывает работу пользователя: несохранённый документ пропадёт, проведение прервётся. Прерванная транзакция откатится, данные не испортятся, но работу придётся повторить.

Если база висит на уровне СУБД

Иногда сеанс в кластере уже удалён, а запросы ждут друг друга внутри СУБД. Это не «файл блокировки», а блокировки данных. В Microsoft SQL Server блокирующие соединения видны процедурой sp_who2 (колонка BlkBy). Завершать соединения на стороне СУБД вручную стоит только администратору базы данных и только после того, как стало ясно, чей это процесс.

Чем различаются способы снятия блокировки

СпособКогда применятьЧто потеряется
Штатный выход пользователейВсегда первымНичего
Завершение работы пользователей из программыНужно освободить базу для обновленияНесохранённые данные у тех, кто не успел выйти
Закрытие файла через Открытые файлы / net fileКлиент отвалился по сети, файловая базаРабота этого клиента
taskkill зависшего процессаПроцесс висит на терминальном сервереРабота этого сеанса
Удаление сеанса в консоли или racКлиент-серверная базаРабота удалённого сеанса
Удаление 1Cv8.1CLФайл остался после сбоя, процессов нетНичего, если проверка сделана

Автоматическое снятие блокировок перед регламентными работами

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

Для файловой базы подойдёт пакетный файл, который запускается планировщиком Windows перед копированием. Он пытается удалить 1Cv8.1CL и по результату понимает, свободна ли база. Удалить занятый файл Windows не даст, поэтому сценарий сам по себе безопасен:

@echo off
chcp 65001 >nul
set "BASE=D:\Bases\Buh"

if not exist "%BASE%\1Cv8.1CL" (
  echo База свободна
  exit /b 0
)

del /q "%BASE%\1Cv8.1CL" 2>nul

if exist "%BASE%\1Cv8.1CL" (
  echo База занята: в ней есть активный процесс
  exit /b 1
) else (
  echo Файл блокировки удален, база свободна
  exit /b 0
)

Код возврата 1 можно использовать в следующем шаге сценария: не запускать копирование, а отправить уведомление.

Для клиент-серверной базы автоматизация строится на rac: включить запрет начала сеансов, завершить оставшиеся сеансы, выполнить работы, снять запрет. Запрет включается командой rac infobase update с параметром --sessions-deny=on и кодом разрешения; точный набор параметров проверьте в rac help infobase для своей версии платформы.

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

Ошибки, из-за которых снятие блокировки заканчивается восстановлением базы

  • 🗑️ Удаление 1Cv8.1CD вместо 1Cv8.1CL. Имена отличаются одной буквой. Удалив файл данных, вы теряете базу целиком. Проверяйте расширение до нажатия Delete.
  • 🔨 Принудительное удаление занятого файла. Утилиты, которые «разблокируют» файл, закрывают дескриптор у работающего процесса. Тот продолжает запись в никуда — отсюда битые страницы в 1Cv8.1CD.
  • 🌐 Забытая веб-публикация. Если файловая база опубликована через IIS или Apache, её держит процесс веб-сервера, даже когда в браузере никто не работает . Для освобождения базы перезапустите пул приложений IIS или службу Apache.
  • 🧾 Удаление 1Cv8tmp.1CD во время реструктуризации. Если обновление конфигурации «зависло» на этапе обработки данных, оно может просто долго работать на большой базе. Прерывание этого этапа — прямой путь к тестированию и исправлению.
  • 🧹 Чистка srvinfo на работающем сервере. Кэш сеансов в каталоге кластера чистят только при остановленной службе агента сервера и только когда понятно, зачем. Для снятия блокировки одного пользователя это не нужно.

Как сделать, чтобы блокировки не зависали снова

Зависшая блокировка — почти всегда следствие внешнего сбоя. Сократить их число можно настройками рабочего места и сервера.

Профилактика зависших блокировок
Выполнено: 0 / 7

Пара пояснений к списку:

  • Антивирус. При проверке «на лету» он открывает 1Cv8.1CD и может держать файл, пока сканирует. Исключение для папки базы снимает и блокировки, и тормоза.
  • Терминальный сервер . Если пользователь закрыл окно RDP крестиком, его сеанс остаётся в состоянии «Отключён», а вместе с ним и запущенная 1С. Лимит для отключённых сеансов задаётся групповой политикой в разделе служб удалённых рабочих столов, ограничений сеансов по времени.
  • Облачная синхронизация. Яндекс Диск, OneDrive и похожие клиенты копируют файл базы, пока с ним работают. Это не только блокировки, но и риск получить конфликтную копию вместо рабочей.
  • Объём работы. Файловый вариант рассчитан на небольшие коллективы. Когда пользователей становится больше, зависания и блокировки появляются чаще, и правильнее переходить на сервер, а не чистить файлы каждую неделю.

Частые вопросы о блокировке базы 1С

Почему после удаления 1Cv8.1CL файл появился снова?
Это нормально. Платформа создаёт его при каждом входе в файловую базу. Удалять его надо было только как «осиротевший» после сбоя.
Можно ли удалить файл блокировки, если в базе работает один пользователь?
Windows не даст удалить файл, пока его держит процесс. Если удалось обойти это утилитой, сеанс пользователя рискует повредить данные. Попросите его выйти.
Есть ли файл блокировки у базы в облаке 1С:Фреш или у хостинг-провайдера?
Доступа к файлам там нет. Зависший сеанс снимает провайдер или администратор абонента через интерфейс сервиса; обращайтесь в поддержку.
Блокирует ли базу открытый Конфигуратор?
Сам по себе открытый Конфигуратор не мешает работе пользователей. Монопольный доступ нужен для отдельных операций: обновления конфигурации базы данных с реструктуризацией, загрузки файла .dt, тестирования и исправления.
Почему активные пользователи показывают сеанс, которого нет?
Сеанс мог зависнуть после обрыва связи. В файловой базе он исчезнет, когда завершится держащий процесс; в клиент-серверной — после удаления сеанса в консоли кластера.