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

В этой статье разберём 5 проверенных способов блокировки — от штатных инструментов платформы до ручных методов для экстренных ситуаций. Особое внимание уделим типичным ошибкам, которые приводят к сбоям, и альтернативным решениям для распределённых систем. Также вы узнаете, как проверить, действительно ли база заблокирована, и что делать, если блокировка «зависла».

1. Штатная блокировка через Конфигуратор

Самый надёжный и рекомендуемый способ — использование встроенных инструментов 1С:Предприятия. Он подходит для большинства версий платформы (8.3.20+), включая облачные и файловые базы. Главное преимущество: платформа сама контролирует процесс и предотвращает конфликты.

Чтобы заблокировать базу:

  1. Откройте Конфигуратор от имени администратора (права Администрирование обязательны).
  2. Перейдите в меню Администрирование → Блокировка регламентных заданий и сеансов.
  3. Установите флажок Блокировать подключение новых сеансов и нажмите Выполнить.
  4. Дождитесь завершения текущих сеансов (или принудительно отключите их через Активные пользователи).

⚠️ Внимание: Если в базе работают фоновые задачи (например, обмен данными с сайтом), их нужно остановить вручную через Регламентные задания. Иначе блокировка может не сработать.

Закрыть все сеансы пользователей|Остановить регламентные задания|Проверить права администратора|Создать резервную копию базы-->

2. Блокировка через файл 1Cv8.lck

В файловых базах (и некоторых клиент-серверных) блокировка осуществляется с помощью файла 1Cv8.lck, который создаётся в каталоге базы. Этот метод полезен, если нет доступа к Конфигуратору или нужно экстренно заблокировать базу без запуска .

Инструкция:

  1. Найдите папку с базой (например, C:\Bases\Trade).
  2. Создайте пустой файл с именем 1Cv8.lck (расширение не указывайте!).
  3. Убедитесь, что у файла нет атрибута Только чтение.

⚠️ Внимание: В клиент-серверном варианте файл 1Cv8.lck должен находиться на сервере , а не на локальной машине. Также проверьте, что у сервиса ragent есть права на запись в папку.

Что если файл 1Cv8.lck уже существует?

Если файл 1Cv8.lck уже есть в папке, это означает, что база заблокирована другим пользователем или процессом. Удалите файл (предварительно убедившись, что это не мешает текущим операциям), а затем создайте его заново. В редких случаях файл может быть "залочен" антивирусом — добавьте папку с базой в исключения.

3. Блокировка через SQL-сервер (для клиент-серверных баз)

Для баз на Microsoft SQL Server или PostgreSQL можно заблокировать доступ на уровне СУБД. Этот метод эффективен, если нужно полностью отсечь все подключения, включая сервисные. Однако он требует знания SQL и прав доступа к серверу.

Пример команды для MS SQL:

ALTER DATABASE [YourBaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

Чтобы разблокировать:

ALTER DATABASE [YourBaseName] SET MULTI_USER;

⚠️ Внимание: Команда ROLLBACK IMMEDIATE принудительно завершает все транзакции, что может привести к потере несохранённых данных. Используйте её только в крайних случаях.

СУБД Команда блокировки Команда разблокировки
Microsoft SQL Server ALTER DATABASE [Base] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ALTER DATABASE [Base] SET MULTI_USER
PostgreSQL ALTER DATABASE "Base" CONNECTION LIMIT 0; ALTER DATABASE "Base" CONNECTION LIMIT -1;
IBM DB2 FORCE APPLICATIONS ALL (затем DEACTIVATE DATABASE Base) ACTIVATE DATABASE Base

4. Блокировка через регламентные задания

Если нужно временно ограничить доступ (например, на время обновления), можно использовать регламентное задание с запретом подключений. Этот метод мягче, чем полная блокировка, и позволяет гибко управлять временем доступа.

Алгоритм:

  1. В Конфигураторе откройте Регламентные задания.
  2. Создайте новое задание с типом Выполнить код.
  3. Вставьте следующий код:
    Попытка
    

    Блокировка = Новый БлокировкаДанных;

    Блокировка.Заблокировать("ОсновнаяБлокировка", 0);

    Исключение

    КонецПопытки;

  4. Настройте расписание (например, на 5 минут) и запустите задание.

⚠️ Внимание: Этот метод не блокирует уже активные сеансы. Он только препятствует созданию новых. Для полной блокировки комбинируйте его с другими способами.

Через Конфигуратор|Файл 1Cv8.lck|SQL-команды|Регламентные задания|Другой способ-->

5. Экстренная блокировка через отключение сервисов

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

Для Windows:

net stop "1C:Enterprise 8.3 Server Agent"

net stop "1C:Enterprise 8.3 Server"

Для Linux:

sudo systemctl stop srv1cv83

sudo systemctl stop ragent

⚠️ Внимание: После остановки сервисов все пользователи будут отключены без сохранения данных. Используйте этот метод только если другие способы недоступны.

💡

Перед экстренной остановкой сервисов проверьте, нет ли в данный момент критичных операций (например, закрытия месяца в бухгалтерии). Для этого используйте журнал событий или мониторинг SQL-запросов.

Типичные ошибки и как их избежать

Даже опытные администраторы иногда допускают ошибки при блокировке баз. Вот самые распространённые:

  • 🔹 Блокировка без резервной копии. Всегда создавайте бэкап перед любыми манипуляциями с базой. Используйте инструменты вроде 1C:Backup или скрипты на PowerShell.
  • 🔹 Игнорирование активных сеансов. Если не дождаться завершения текущих операций, можно потерять данные или повредить транзакции.
  • 🔹 Неправильные права доступа. Убедитесь, что учётная запись, под которой вы блокируете базу, имеет роль sysadmin (для SQL) или Администрирование).
  • 🔹 Забытый файл 1Cv8.lck. После завершения работ обязательно удалите его, иначе база останется заблокированной.

⚠️ Внимание: Если после блокировки база перестала открываться, проверьте:

  • Наличие файла 1Cv8.lck в папке (удалите его).
  • Статус сервисов (перезапустите их).
  • Журналы событий Windows или SQL Server на ошибки.
💡

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

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

Чтобы убедиться, что блокировка сработала, выполните следующие шаги:

  1. Попробуйте подключиться к базе через 1С:Предприятие в режиме пользователя. Должно появиться сообщение: База данных заблокирована администратором.
  2. Для клиент-серверных баз проверьте статус в SQL Server Management Studio:
    SELECT name, state_desc FROM sys.databases WHERE name = 'YourBaseName';

    Если state_desc = OFFLINE или SINGLE_USER, блокировка активна.

  3. Убедитесь, что файл 1Cv8.lck существует (для файловых баз) и не заблокирован другим процессом.

⚠️ Внимание: В распределённых системах (например, с резервными серверами) блокировку нужно проверять на всех узлах. Иначе пользователи могут подключиться через другой сервер.

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

Можно ли заблокировать базу, если в ней работает пользователь с правами администратора?

Да, но только если вы используете методы на уровне SQL-сервера или остановки сервисов. Штатная блокировка через Конфигуратор не сработает, так как администратор может отменить её из своего сеанса. В таких случаях:

  1. Попросите администратора завершить работу.
  2. Используйте SQL-команду KILL {session_id} для принудительного отключения.
Что делать, если после блокировки база не открывается даже для администратора?

Скорее всего, проблема в одном из следующих факторов:

  • 🔹 Файл 1Cv8.lck остался в папке (удалите его).
  • 🔹 Сервис ragent не запущен (проверьте в services.msc).
  • 🔹 База переведена в режим SINGLE_USER на SQL-сервере (верните в MULTI_USER).

Если ничего не помогает, восстановите базу из резервной копии.

Как заблокировать базу на определенное время (например, с 23:00 до 6:00)?

Используйте комбинацию регламентного задания и SQL-триггера:

  1. Создайте задание в SQL Server Agent, которое выполнит ALTER DATABASE [Base] SET SINGLE_USER в 23:00.
  2. Настройте второе задание на 6:00 с командой ALTER DATABASE [Base] SET MULTI_USER.
  3. В добавьте регламентное задание, которое будет уведомлять пользователей о предстоящей блокировке за 30 минут.
Можно ли заблокировать только часть базы (например, один справочник)?

Нет, штатными средствами невозможно заблокировать отдельные объекты (справочники, документы). Однако можно:

  • 🔹 Ограничить права пользователей на редактирование конкретных данных через роли.
  • 🔹 Использовать БлокировкаДанных в коде для временной блокировки записей.
  • 🔹 Выгрузить нужные данные в отдельную базу и работать с ней.
Как заблокировать базу в облачном сервисе (1С:Fresh, 1С:Линк)?

В облачных решениях прямая блокировка недоступна. Вместо этого:

  • 🔹 Используйте режим обслуживания в личном кабинете 1С:Fresh.
  • 🔹 Ограничьте доступ пользователей через настройки ролей.
  • 🔹 Свяжитесь с технической поддержкой для временной приостановки работы базы.

⚠️ Внимание: В облаке невозможно использовать файлы 1Cv8.lck или SQL-команды.