В процессе администрирования систем на платформе 1С:Предприятие часто возникает необходимость автоматизировать рутинные операции. Одной из таких задач является получение актуального списка всех информационных баз, зарегистрированных на кластере серверов. Это может потребоваться для создания скриптов мониторинга, массового обновления конфигураций или при проектировании защищенной IT инфраструктуры предприятия для формирования отчетов по использованию ресурсов. В данной статье мы подробно разберем, как реализовать эту задачу программными средствами.
Проанализируем наиболее распространенный метод, который заключается в использовании COM-объекта V83.COMConnector. Этот способ позволяет подключиться к агенту сервера 1С и получить доступ к объектам администрирования. Рассмотрим по шагам, как это реализовать в коде.
Прежде всего, нам необходимо создать экземпляр COM-объекта и установить соединение с сервером. Для этого используются методы ConnectAgent и GetClusters. Выясним причину, почему это важно: без подключения к агенту мы не сможем получить доступ к списку кластеров, в которых «живут» наши базы.
Разберем пример кода для получения списка баз:
Процедура ПолучитьСписокБазНаСервере()
СерверИмя = "ИмяВашегоСервера"; // Например, "Server1C"
Порт = "1540"; // Порт агента сервера по умолчанию
Попытка
// Создаем объект коннектора
Connector = Новый COMОбъект("V83.COMConnector");
// Подключаемся к агенту сервера
ServerAgent = Connector.ConnectAgent(СерверИмя + ":" + Порт);
// Получаем массив кластеров (обычно он один, но может быть несколько)
МассивКластеров = ServerAgent.GetClusters();
Для Каждого ТекущийКластер Из МассивКластеров Цикл
// Проходим авторизацию в кластере, если установлены логин/пароль администратора
ServerAgent.Authenticate(ТекущийКластер, "", "");
// Получаем список информационных баз в данном кластере
СписокБаз = ServerAgent.GetInfoBases(ТекущийКластер);
Для Каждого ИнфоБаза Из СписокБаз Цикл
Сообщить("Найдена база: " + ИнфоБаза.Name + " (Описание: " + ИнфоБаза.Descr + ")");
КонецЦикла;
КонецЦикла;
Исключение
Сообщить("Ошибка при получении списка баз: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
В данном примере мы используем объект IServerAdmin, который возвращается методом ConnectAgent. Обратите внимание на метод GetInfoBases — именно он возвращает коллекцию объектов, содержащих свойства информационных баз, такие как Name (имя в кластере), Descr (описание) и DbName (имя базы в СУБД).
Рассмотрим подробнее технические требования для работы этого кода. Часто программисты сталкиваются с тем, что объект V83.COMConnector не создается. Проанализируем основные причины:
comcntr.dll. Это делается через командную строку от имени администратора. Если вам нужно автоматизировать подобные действия, изучите, как осуществляется командная строка Windows и выполнение команд CMD из кода 1С.USR1CV8), должен иметь права на доступ к серверу 1С и кластеру.Если использование COM-объектов по каким-то причинам невозможно (например, в среде Linux или при запрете использования COM), проанализируем альтернативный вариант — использование Remote Administration Service (RAS). Это особенно актуально, если вы используете сценарий python для автоматизации установки 1С и службы RAS в операционных системах на базе ядра Linux.
RAS — это серверная служба, которая предоставляет программный интерфейс для управления кластером. Взаимодействие с ней обычно происходит через консольную утилиту rac.exe. Посмотрим на пример команды, которая позволяет получить список баз через командную строку:
rac infobase --cluster=<ID_кластера> summary list <адрес_сервера>:1545
Для реализации этого метода из кода 1С мы можем использовать объект ЗапуститьПриложение. Также для удобства администрирования может пригодиться внешняя утилита для запуска консоли кластера серверов любых версий. Посмотрим на логику работы через RAS:
rac cluster list.cluster-id.infobase summary list.Разберем, почему этот метод считается более современным. Он не привязан к реестру Windows и COM-технологиям, что делает его кроссплатформенным. Однако он требует запущенной службы ras на сервере (по умолчанию порт 1545).
Выясним, какой метод выбрать в зависимости от ситуации. Если ваша задача решается внутри конфигурации 1С на Windows-сервере, использование V83.COMConnector будет наиболее быстрым и простым в реализации способом. Мы получаем типизированные объекты 1С, с которыми удобно работать напрямую в коде.
Если же вы строите систему внешнего мониторинга или работаете в среде Astra Linux, то использование rac будет верным решением. В таких сценариях часто требуется не только чтение данных, но и активное управление, например, установка и снятие блокировок у БД на сервере под Linux.
Важный совет по безопасности: Никогда не храните пароли администратора кластера в открытом коде. Рекомендуем использовать Параметры Сеанса или защищенные хранилища для передачи учетных данных в методы Authenticate.
Посмотрим на структуру объекта информационной базы, который мы получаем. Помимо имени, объект содержит важные свойства:
dbms — тип используемой СУБД (например, MSSQLServer или PostgreSql).dbServerName — адрес сервера баз данных.dbName — физическое имя базы в СУБД.sessionsDeny — установлен ли запрет на установку соединений.Проанализировав эти свойства, вы сможете построить мощный инструмент для аудита всей инфраструктуры 1С. Для более продвинутой автоматизации, например, управления перезапусками процессов, можно дополнительно использовать конструктор Cron расписания. Использование объектной модели администрирования открывает широкие возможности, выходящие далеко за рамки простого получения списка имен баз.