Администрирование платформы 1С:Предприятие часто требует автоматизации рутинных задач, среди которых перезагрузка клиентских приложений занимает особое место. Операторы могут забыть закрыть программу после завершения работы, что блокирует проведение регламентных операций, таких как резервное копирование или обновление конфигурации.

Существует несколько проверенных способов инициировать перезапуск сессии без прямого вмешательства человека. Выбор конкретного метода зависит от архитектуры информационной базы — работаете ли вы с файловым вариантом или клиент-серверной версией на SQL.

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

Анализ архитектуры перед автоматизацией

Прежде чем писать скрипты, необходимо четко понимать, как именно пользователи подключаются к базе. В файловом режиме все данные хранятся в одном каталоге, и процесс 1cv8.exe удерживает монопольный доступ к файлам.

В клиент-серверном варианте ситуация сложнее. Здесь участвуют рабочие процессы (rphost), которые управляются сервером 1С. Простое завершение процесса на клиенте может не освободить соединения на стороне сервера, что приведет к зависанию сеансов в консоли администрирования.

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

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

Точная идентификация типа подключения позволит выбрать правильный набор ключей командной строки или методов COM-объекта.

📊 Какой режим работы 1С вы используете чаще?
Файловый вариант
Клиент-серверный (SQL)
Веб-клиент через браузер
Не знаю/Смешанный

Использование ключей командной строки

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

Ключ /F указывает путь к файловой базе, а /S — строку подключения к серверу. Однако для перезапуска критически важен параметр /C (завершить работу после выполнения) или использование внешних обработок.

Часто возникает задача: закрыть все окна 1С и открыть одно конкретное. Для этого используется связка команд. Сначала мы убиваем процесс, затем запускаем новый экземпляр с нужными правами.

Пример команды для запуска в фоновом режиме с отключением интерфейса:

"C:\Program Files\1cv8\8.3.22.1234\bin\1cv8.exe" ENTERPRISE /S server\db /N Admin /P password /Execute "C:\Scripts\CloseAll.epf"

Здесь параметр /Execute позволяет запустить внешнюю обработку, которая может выполнить любые действия внутри системы, включая анализ активных пользователей.

💡

Используйте полный путь к исполняемому файлу в скриптах, так как переменные среды PATH могут отличаться в разных сессиях планировщика задач.

Если ваша цель — просто перезагрузить тонкий клиент, можно воспользоваться комбинацией ключей, запрещающей запуск главного окна сразу.

Автоматизация через VBScript и WSH

Для создания полноценного сценария перезапуска лучше всего подходит язык VBScript. Он позволяет взаимодействовать с объектной моделью WMI (Windows Management Instrumentation) для поиска и уничтожения процессов.

Скрипт должен последовательно выполнить три действия: найти все процессы с именем 1cv8.exe или 1cv8c.exe, завершить их и через небольшую паузу запустить приложение заново.

Ниже представлен алгоритм работы такого скрипта. Он использует коллекцию процессов операционной системы для фильтрации по имени владельца.

  • 🔍 Инициализация объекта Win32_Process для доступа к списку задач.
  • 🛑 Циклический перебор и завершение процессов, принадлежащих текущему или указанному пользоватlu.
  • ⏳ Принудительная задержка (Sleep) на 3-5 секунд для освобождения системных ресурсов.
  • 🚀 Запуск нового экземпляра через метод Run объекта WScript.Shell.

Важно учитывать, что завершение процесса через WMI эквивалентно нажатию кнопки "Завершить задачу" в диспетчере. Это может привести к потере несохраненных данных, если пользователь не был предупрежден.

☑️ Подготовка скрипта перезапуска

Выполнено: 0 / 4

Управление сеансами через COM-соединение

Более цивилизованный подход к перезапуску в клиент-серверном варианте — использование COM-объекта V83.COMConnector. Этот метод позволяет подключиться к серверу 1С как администратор и корректно закрыть сеансы.

Для работы этого метода на машине, где запускается скрипт, должен быть установлен компонент "COM-соединение" из дистрибутива платформы. Без него создать объект не удастся.

Процесс выглядит следующим образом: скрипт создает объект коннектора, подключается к кластеру серверов, получает список активных сеансов и вызывает метод Close для каждого из них.

Метод Объект Описание действия
Connect V83.COMConnector Установка связи с кластером серверов
GetSessions Cluster Получение массива активных подключений
Close Session Корректное завершение работы пользователя
Lock InfoBase Блокировка входа для новых пользователей

Использование COM-интерфейса гарантирует, что транзакции будут завершены, а соединения с СУБД корректно разорваны. Это предпочтительный метод для серверных скриптов обслуживания.

Что делать если COM-объект не создается?

Убедитесь, что версия платформы, от которой регистрировался COM-объект, совпадает с разрядностью скрипта (32 или 64 бита). Попробуйте перерегистрировать компоненты через утилиту regsvr32.

Работа с сервисом сервера 1С

Иногда требуется не просто закрыть клиентов, а полностью перезапустить службу Агент сервера 1С:Предприятия. Это необходимо при зависании рабочих процессов или изменении конфигурации кластера.

Управление службой осуществляется через стандартные средства Windows или утилиту net. Команда остановки службы автоматически завершит все связанные процессы.

net stop "Agent 1C:Enterprise v8.3 Server"

timeout /t 10

net start "Agent 1C:Enterprise v8.3 Server"

Такой подход является "тяжелой артиллерией". Он приводит к разрыву всех соединений мгновенно. Используйте его только в том случае, если штатные методы закрытия сеансов не сработали.

После старта службы может потребоваться время на инициализацию рабочих процессов. Скрипт должен учитывать эту задержку перед попыткой подключения пользователей.

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

Обработка ошибок и логирование

Любой скрипт автоматизации должен уметь сообщать о результатах своей работы. Слепое выполнение команд может привести к ситуации, когда база оказалась недоступной, а администратор об этом не узнал.

Реализуйте запись логов в текстовый файл с указанием даты и времени каждого этапа. Фиксируйте коды возврата процессов: если команда завершения вернула ошибку, это сигнал для проверки.

В VBScript для записи в файл используется объект Scripting.FileSystemObject. Создавайте новый файл логов каждый день или дописывайте в существующий, чтобы хранить историю инцидентов.

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

💡

Отсутствие логирования превращает автоматизацию в "черный ящик". Всегда фиксируйте результат выполнения скрипта перезапуска для последующего аудита.

FAQ: Частые вопросы по перезапуску

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

Да, можно, но только принудительно завершив процесс. Корректное закрытие через COM-объект попросит пользователя сохранить данные, но если он не ответит, сеанс зависнет. В скриптах автоматизации обычно используют принудительное завершение.

Почему после перезапуска скрипт выдает ошибку "Монопольный режим недоступен"?

Это означает, что не все фоновые процессы или скрытые сеансы были завершены. Проверьте консоль управления кластером серверов 1С на наличие "висящих" соединений и завершите их вручную или увеличьте таймаут в скрипте перед захватом монопольного режима.

Как перезапустить конкретную информационную базу в кластере?

Через COM-соединение нужно получить объект конкретной базы данных по UUID или имени, вызвать метод Lock для запрета новых подключений, затем CloseSessions, выполнить нужные действия и снять блокировку.

Безопасно ли использовать taskkill для завершения 1cv8.exe?

Использование команды taskkill /F безопасно для операционной системы, но опасно для данных 1С. Это аналог выдергивания шнура питания. Данные в оперативной памяти не сохранятся. Используйте это только как крайнюю меру.