При обслуживании файловых информационных баз 1С (обновление конфигурации, создание резервных копий, проведение регламентных процедур) часто возникает задача быстро отключить всех активных пользователей. В отличие от клиент-серверного варианта, где администратор управляет сеансами через консоль кластера серверов или утилиту rac, в файловом режиме стандартные методы ПрекратитьРаботуСистемы() и ЗавершитьРаботуСистемы() действуют исключительно в рамках текущего клиентского сеанса. Проанализируем, почему так происходит, и разберем работающие способы решения этой задачи.
Выясним причину, по которой нельзя одной встроенной процедурой принудительно разорвать соединения других пользователей в файловой базе:
1cv8.exe или 1cv8c.exe) напрямую работает с общим файлом базы данных 1Cv8.1CD через файловые блокировки операционной системы. У платформы нет единого сервера или службы, которой можно передать команду на сброс подключений.1Cv8.cdn (или использование параметра запуска /UC) лишь блокирует установку новых соединений к базе, но никак не закрывает уже запущенные программы пользователей.Если база данных разработана на основе типовой конфигурации (например, «1С:Бухгалтерия», «1С:Управление торговлей», «1С:ERP») или в нее внедрена «Библиотека стандартных подсистем» (БСП), в ней уже присутствует фоновый обработчик ожидания. В этом случае перезапуск базы пользователям не требуется.
Рассмотрим, как работает данный механизм:
// Пример вызова завершения работы на клиенте
ПрекратитьРаботуСистемы(Ложь);
Также БСП поддерживает запуск базы администратором из командной строки со специальным параметром, инициирующим закрытие остальных пользователей:
1cv8c.exe ENTERPRISE /F "C:\Bases\MyBase" /N "Администратор" /P "Пароль" /C ЗавершитьРаботуПользователей
Если файловая база данных опубликована на веб-сервере (IIS или Apache) для работы через тонкие или веб-клиенты, отключение всех активных пользователей выполняется перезапуском службы веб-сервера.
Разберем по шагам действия для веб-серверов:
iisreset
httpd через оснастку служб Windows или командную строку:
net stop "Apache2.4" && net start "Apache2.4"
После перезапуска пула веб-сервера все клиентские веб-сессии мгновенно разрываются, и доступ к файлу 1Cv8.1CD освобождается.
Если база расположена в общей сетевой папке на сервере, к которой пользователи подключаются по протоколу SMB, сеансы можно сбросить на стороне файлового сервера путем закрытия открытых дескрипторов к файлам базы данных.
Важно: этот способ является экстренным. Если в момент принудительного разрыва дескриптора пользователь выполнял транзакционную запись данных, существует риск нарушения целостности файла 1Cv8.1CD. Используйте его только при необходимости аварийного доступа.
Посмотрим на команды, выполняемые на файл-сервере под управлением Windows Server:
openfiles:
openfiles /disconnect /a * /d 1Cv8.1CD
Get-SmbOpenFile | Where-Object { $_.Path -like "*1Cv8*" } | Close-SmbOpenFile -Force
Когда пользователи работают в файловой базе через удаленный рабочий стол (RDP), администратор терминального сервера может централизованно завершить их сессии или конкретные процессы 1cv8.exe и 1cv8c.exe.
Разберем команды для завершения процессов:
taskkill /F /IM 1cv8c.exe
// Просмотр активных сессий
query session
// Сброс нужной сессии по её ID
rwinsta 3
taskkill /S ИмяКомпьютера /U Домен\Администратор /P Пароль /IM 1cv8c.exe /F
Таким образом, если в самописной конфигурации заранее не был предусмотрен фоновый обработчик ожидания, завершить сеансы пользователей файловой базы исключительно средствами встроенного языка 1С «на лету» невозможно — в таких ситуациях необходимо использовать административные инструменты операционной системы или публикацию через веб-сервер.