Администрирование файловых баз 1С всегда сопряжено с определенными трудностями. В отличие от клиент-серверного варианта, где мы можем легко зайти в консоль администрирования кластера и завершить любые активные сеансы одной кнопкой, в файловом режиме у нас нет выделенного сервера приложений. База представляет собой набор файлов на диске (или в сетевой папке), а управление сеансами распределено между клиентскими приложениями. Выгнать пользователей для проведения резервного копирования, обновления конфигурации или монопольного обслуживания становится непростой задачей.
В рамках данной статьи мы подробно разберем, как автоматизировать этот процесс средствами командной строки (CMD/BAT и PowerShell), используя системные утилиты Windows и штатные механизмы самой платформы 1С. Мы научимся создавать файлы блокировки, сбрасывать зависшие сетевые дескрипторы и безопасно завершать процессы 1С, включая запущенные сеансы Конфигуратора.
Мало кто знает, но разработчики платформы 1С предусмотрели штатный и безопасный способ блокировки файловых баз. Проанализируем, как это работает. При установке блокировки соединений через консоль или программно, в каталоге файловой базы данных создается специальный маркерный файл с именем 1Cv8.cdn.
Рассмотрим структуру этого файла. Это обычный текстовый документ в кодировке UTF-8, содержащий массив параметров разметки 1С. В общем виде строка в файле выглядит следующим образом:
{1,20261010180000,20261010200000,"База закрыта на техническое обслуживание","КодРазрешения",""}
Разберем параметры по шагам:
1 — блокировка включена, 0 — выключена).ГГГГММДДЧЧММСС. Если мы хотим заблокировать базу немедленно, можно передать значение 00010101000000.Выясним, как этот файл заставляет пользователей выйти. В современные конфигурации 1С на базе Библиотеки стандартных подсистем (БСП) встроен специальный фоновый обработчик ожидания. Каждое запущенное клиентское приложение периодически проверяет каталог базы на наличие файла 1Cv8.cdn. Как только файл обнаружен, активируется сценарий штатного завершения работы: пользователю выводится предупреждение, дается время на сохранение документов, после чего сеанс корректно закрывается.
Давайте посмотрим на пример скрипта на CMD, который создает такой файл блокировки автоматически:
@echo off
chcp 65001 > nul
set "base_path=D:\1C_Bases\MyBase"
set "cdn_file=%base_path%\1Cv8.cdn"
echo {1,00010101000000,00010101000000,"Внимание! База заблокирована для проведения технических работ. Пожалуйста, сохраните данные.","MySecretCode",""} > "%cdn_file%"
echo Файл блокировки успешно создан.
Штатный механизм прекрасен, но имеет один критический недостаток: он не сработает, если у пользователя завис сеанс, открыто модальное окно, или если в базе открыт Конфигуратор. Конфигуратор полностью игнорирует файл 1Cv8.cdn и продолжает держать монопольный доступ к таблицам базы данных. В таких ситуациях нам на помощь приходит системная утилита taskkill.
Если пользователи работают локально или в режиме терминального сервера (RDP) на одном компьютере, мы можем принудительно завершить их процессы. Проанализируем команду:
taskkill /f /im 1cv8*
Однако этот метод является слишком грубым. Он принудительно завершит абсолютно все процессы 1С на сервере, даже если другие пользователи работают в других, не связанных базах. Чтобы завершить процессы точечно, только для конкретной папки с базой, мы можем воспользоваться утилитой Handle от Microsoft Sysinternals.
Рассмотрим пошаговый алгоритм точечного закрытия:
handle.exe и помещаем её в системную папку.1Cv8.1CD в нашей целевой папке.PID).Посмотрим на пример BAT-скрипта, реализующего эту логику:
@echo off
set "base_dir=D:\1C_Bases\MyBase"
for /f "tokens=3,4 delims=: " %%i in ('handle.exe -nobanner "%base_dir%" ^| findstr /i "1cv8.exe"') do (
echo Завершаем процесс PID %%i, удерживающий базу...
taskkill /PID %%i /F
)
Если база расположена на общем сетевом ресурсе (сетевой папке) и пользователи подключаются к ней со своих рабочих мест по протоколу SMB, то физически процессы 1cv8.exe запущены на их локальных компьютерах. Запустить на их машинах taskkill удаленно может быть невозможно из-за ограничений прав доступа. В этом случае мы должны "разорвать" сетевые дескрипторы файлов на файловом сервере.
Ни в коем случае не стоит использовать команду net share /delete, так как это полностью удалит общий доступ к папке, и настраивать права доступа к ресурсу придется заново. Вместо этого применим более точечные методы.
Вариант А: Использование PowerShell (рекомендуемый современный метод)
В современных версиях Windows Server есть мощные командлеты для управления сетевыми сессиями SMB. Мы можем найти все открытые файлы базы данных 1Cv8.1CD и принудительно закрыть доступ именно к ним, не затрагивая другие сетевые папки и файлы.
Рассмотрим команду PowerShell:
Get-SmbOpenFile | Where-Object {$_.Path -like "*1Cv8.1CD*"} | Close-SmbOpenFile -Force
Этот скрипт мгновенно разорвет сетевое соединение для всех пользователей, у которых открыта данная база, освободив монопольный доступ.
Вариант Б: Использование классической утилиты openfiles в CMD
Если нам доступна только командная строка CMD, мы можем использовать встроенную утилиту openfiles. Обратите внимание, что для её корректной работы на сервере должен быть включен мониторинг локальных открытых файлов. Включается он командой openfiles /local on (требуется один перезапуск сервера).
Для отключения пользователей выполним следующую команду:
openfiles /disconnect /op "D:\1C_Bases\MyBase\1Cv8.1CD" /id *
После того как мы успешно выгнали всех пользователей и заблокировали базу с помощью 1Cv8.cdn, нам зачастую требуется выполнить автоматическое резервное копирование (выгрузку .dt) или обновление конфигурации. Но как запустить Конфигуратор, если база жестко заблокирована нами же?
Для этого в строке запуска исполняемого файла платформы 1С мы должны обязательно передать специальный ключ /UC. В качестве параметра к этому ключу указывается код разрешения, который мы ранее прописали в файле блокировки.
Посмотрим на пример команды запуска резервного копирования:
"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" DESIGNER /F "D:\1C_Bases\MyBase" /N "Администратор" /P "ПарольАдмина" /UC "MySecretCode" /DumpIB "D:\Backups\BaseBackup.dt" /OUT "D:\Backups\log.txt" -NoTruncate
Использование ключа /UC MySecretCode позволяет Конфигуратору успешно игнорировать файл блокировки и выполнить возложенную на него задачу. По завершении всех работ не забудьте удалить файл 1Cv8.cdn из папки базы данных, чтобы пользователи снова смогли войти в систему.
Объединим все полученные знания в один универсальный пакетный файл (BAT), который выполнит весь цикл обслуживания базы без участия администратора:
@echo off
chcp 65001 > nul
set "BASE_PATH=D:\1C_Bases\MyBase"
set "CDN_PATH=%BASE_PATH%\1Cv8.cdn"
set "PLATFORM_PATH=C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe"
set "BACKUP_PATH=D:\Backups\backup_%date%.dt"
set "SECRET_CODE=Maintenance2026"
echo [Шаг 1] Блокируем базу для новых подключений...
echo {1,00010101000000,00010101000000,"База заблокирована для проведения автоматического резервного копирования.","%SECRET_CODE%",""} > "%CDN_PATH%"
echo [Шаг 2] Ожидаем 5 минут, пока БСП штатно завершит активные сеансы...
timeout /t 300 /nobreak
echo [Шаг 3] Принудительно закрываем зависшие локальные процессы и Конфигуратор...
for /f "tokens=3,4 delims=: " %%i in ('handle.exe -nobanner "%BASE_PATH%" ^| findstr /i "1cv8.exe"') do (
taskkill /PID %%i /F
)
echo [Шаг 4] Сбрасываем сетевые сессии к файлу базы данных по сети...
powershell -Command "Get-SmbOpenFile | Where-Object {$_.Path -like '*1Cv8.1CD*'} | Close-SmbOpenFile -Force"
echo [Шаг 5] Запускаем выгрузку информационной базы в обход блокировки...
"%PLATFORM_PATH%" DESIGNER /F "%BASE_PATH%" /N "Admin" /P "Pass" /UC "%SECRET_CODE%" /DumpIB "%BACKUP_PATH%" /OUT "D:\Backups\log.txt"
echo [Шаг 6] Снимаем блокировку (удаляем файл cdn)...
del /f /q "%CDN_PATH%"
echo Обслуживание базы успешно завершено!
pause
Используя данный комплексный подход, мы можем настроить планировщик задач Windows (Task Scheduler) на выполнение этого скрипта в ночное время. Это гарантирует стабильное создание резервных копий и проведение регламентных работ без необходимости ручного отключения зависших пользователей. Для регулярного обслуживания нескольких типовых баз в автоматическом режиме применяют программу для автоматического обновления и архивирования баз 1С.