Как программно завершить сеансы пользователей в файловой базе 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При обслуживании файловых информационных баз 1С (обновление конфигурации, создание резервных копий, проведение регламентных процедур) часто возникает задача быстро отключить всех активных пользователей. В отличие от клиент-серверного варианта, где администратор управляет сеансами через консоль кластера серверов или утилиту rac, в файловом режиме стандартные методы ПрекратитьРаботуСистемы() и ЗавершитьРаботуСистемы() действуют исключительно в рамках текущего клиентского сеанса. Проанализируем, почему так происходит, и разберем работающие способы решения этой задачи.

Ограничения файлового режима работы 1С

Выясним причину, по которой нельзя одной встроенной процедурой принудительно разорвать соединения других пользователей в файловой базе:

  1. Отсутствие централизованного управляющего процесса. В файловом варианте каждый запущенный клиентский процесс (1cv8.exe или 1cv8c.exe) напрямую работает с общим файлом базы данных 1Cv8.1CD через файловые блокировки операционной системы. У платформы нет единого сервера или службы, которой можно передать команду на сброс подключений.
  2. Файл блокировки соединений. Создание файла 1Cv8.cdn (или использование параметра запуска /UC) лишь блокирует установку новых соединений к базе, но никак не закрывает уже запущенные программы пользователей.
  3. Динамическое обновление конфигурации. Предложение платформы отключить пользователей при реструктуризации базы работает только в клиент-серверном режиме через обращение к рабочему процессу кластера. В файловой базе при наличии активных пользователей обновить конфигурацию базы данных монопольно невозможно.

Вариант 1. Завершение сеансов через типовые механизмы БСП

Если база данных разработана на основе типовой конфигурации (например, «1С:Бухгалтерия», «1С:Управление торговлей», «1С:ERP») или в нее внедрена «Библиотека стандартных подсистем» (БСП), в ней уже присутствует фоновый обработчик ожидания. В этом случае перезапуск базы пользователям не требуется.

Рассмотрим, как работает данный механизм:

  1. На клиентских рабочих местах при старте системы автоматически подключается периодический обработчик ожидания.
  2. Обработчик с заданной периодичностью опрашивает константы или служебные параметры блокировки работы пользователей.
  3. Администратор запускает базу в режиме предприятия и открывает обработку «Блокировка работы пользователей» (раздел «Администрирование» — «Обслуживание»).
  4. При установке блокировки обработчик ожидания на стороне клиента считывает сигнал, выводит предупреждение и штатно вызывает процедуру:

// Пример вызова завершения работы на клиенте
ПрекратитьРаботуСистемы(Ложь);

Также БСП поддерживает запуск базы администратором из командной строки со специальным параметром, инициирующим закрытие остальных пользователей:


1cv8c.exe ENTERPRISE /F "C:\Bases\MyBase" /N "Администратор" /P "Пароль" /C ЗавершитьРаботуПользователей

Вариант 2. Сброс сеансов при публикации базы на веб-сервере

Если файловая база данных опубликована на веб-сервере (IIS или Apache) для работы через тонкие или веб-клиенты, отключение всех активных пользователей выполняется перезапуском службы веб-сервера.

Разберем по шагам действия для веб-серверов:

  1. Для Microsoft IIS: выполним команду перезапуска пула приложений или веб-службы целиком через командную строку от имени администратора: iisreset
  2. Для Apache: перезапустим службу httpd через оснастку служб Windows или командную строку: net stop "Apache2.4" && net start "Apache2.4"

После перезапуска пула веб-сервера все клиентские веб-сессии мгновенно разрываются, и доступ к файлу 1Cv8.1CD освобождается.

Вариант 3. Принудительное закрытие сетевых дескрипторов (SMB)

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

Важно: этот способ является экстренным. Если в момент принудительного разрыва дескриптора пользователь выполнял транзакционную запись данных, существует риск нарушения целостности файла 1Cv8.1CD. Используйте его только при необходимости аварийного доступа.

Посмотрим на команды, выполняемые на файл-сервере под управлением Windows Server:

  1. Через утилиту командной строки openfiles: openfiles /disconnect /a * /d 1Cv8.1CD
  2. Через командлет PowerShell (для Windows Server 2012 и новее):
    
    Get-SmbOpenFile | Where-Object { $_.Path -like "*1Cv8*" } | Close-SmbOpenFile -Force
    

Вариант 4. Завершение сеансов на сервере терминалов (RDP)

Когда пользователи работают в файловой базе через удаленный рабочий стол (RDP), администратор терминального сервера может централизованно завершить их сессии или конкретные процессы 1cv8.exe и 1cv8c.exe.

Разберем команды для завершения процессов:

  1. Завершение всех процессов тонкого клиента на сервере: taskkill /F /IM 1cv8c.exe
  2. Завершение сеансов конкретных пользователей по идентификатору сессии:
    
    // Просмотр активных сессий
    query session
    
    // Сброс нужной сессии по её ID
    rwinsta 3
    
  3. Удаленное завершение процесса на рабочей станции пользователя по локальной сети: taskkill /S ИмяКомпьютера /U Домен\Администратор /P Пароль /IM 1cv8c.exe /F

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

← На главную