Как программно получить список баз сервера 1С и сравнить их с SQL-сервером?

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

При администрировании крупной инфраструктуры 1С часто возникает задача автоматической сверки баз, зарегистрированных в кластере серверов 1С, с фактическими базами данных на SQL-сервере. Это необходимо для выявления «сиротских» баз (которые есть в SQL, но удалены из 1С) или ошибочно настроенных подключений. В этой статье мы подробно разберем все доступные инструменты и программные интерфейсы (API) для взаимодействия с сервером 1С.

Вариант 1: Использование связки RAS и RAC

Наиболее современным и рекомендуемым способом управления кластером является использование серверов администрирования. Разберем эту связку подробнее.

RAS (Remote Administration Service) — это служба (исполняемый файл ras.exe), которая выступает в роли посредника между сервером 1С и внешними запросами. Она предоставляет программный интерфейс для управления кластером. Чтобы начать работу, необходимо запустить эту службу на стороне сервера 1С (по умолчанию используется порт 1545).

RAC (Remote Administration Client) — это консольная утилита (rac.exe), которая обращается к RAS и позволяет выполнять любые действия: создавать базы, удалять сеансы, изменять параметры кластера. Для решения нашей задачи по получению списка баз мы можем использовать следующую команду в командной строке или PowerShell:

rac infobase --cluster=<ID_кластера> summary list

Проанализируем ситуацию: утилита rac выводит текстовые данные, которые легко парсятся скриптами. Мы можем получить такие параметры, как name (имя базы в 1С) и db-name (имя базы в SQL). Это идеальный способ для системных администраторов, так как он не требует наличия установленной платформы 1С на клиенте (нужна только сама утилита rac).

Вариант 2: Программное управление через COM-соединение

Если задача решается внутри кода 1С или через внешнее Windows-приложение (например, скрипт VBScript или C#), наиболее удобным будет использование COMConnector. Рассмотрим пример кода, который позволяет подключиться к агенту сервера и перебрать все информационные базы.

Для начала создадим объект коннектора и установим соединение с рабочим процессом:


// Создаем объект для работы с сервером
Коннектор = Новый COMОбъект("v83.COMConnector.1");

// Соединяемся с агентом сервера (укажите адрес вашего сервера)
СерверАдрес = "ServerName:1540";
Агент = Коннектор.ConnectAgent(СерверАдрес);

// Получаем кластеры сервера
Кластеры = Агент.GetClusters();
// Обычно используется первый кластер в списке
Кластер = Кластеры.GetValue(0);

// Аутентификация в кластере (если установлены логин/пароль администратора)
Агент.Authenticate(Кластер, "", "");

// Получаем список всех информационных баз
СписокБаз = Агент.GetInfoBases(Кластер);

Теперь проанализируем, как извлечь нужные нам данные для сравнения с SQL. Каждая информационная база в полученном списке является объектом типа IInfoBaseInfo. Нам важны два свойства: dbName (имя базы в СУБД) и DBMS (тип СУБД).


Для Каждого ТекБаза Из СписокБаз Цикл
    ИмяВ1С = ТекБаза.Name;
    ИмяВSQL = ТекБаза.dbName;
    ТипСУБД = ТекБаза.DBMS;
    
    Сообщить("База 1С: " + ИмяВ1С + " соответствует базе SQL: " + ИмяВSQL);
КонецЦикла;

Этот метод позволяет получить полную информацию, включая регламентные задания и текущие подключения, используя дополнительные методы, такие как GetSessions.

Вариант 3: Официальное Java API для администрирования

Малоизвестный, но крайне мощный инструмент — библиотека администрирования на языке Java. В состав дистрибутива сервера 1С входят JAR-файлы (например, com.1c.v8.administration.jar). Рассмотрим преимущества этого подхода:

  1. Кроссплатформенность: В отличие от COM, этот API работает и в Windows, и в Linux.
  2. Производительность: Прямое взаимодействие с сервером через типизированные объекты Java происходит быстрее, чем парсинг вывода консоли.
  3. Интеграция: Это позволяет встраивать мониторинг 1С в корпоративные системы на Java или использовать экспортеры для Prometheus/Zabbix.

Для использования Java API вам потребуется настроить среду исполнения и подключить соответствующие библиотеки из каталога установки платформы. С помощью классов ClusterAdminConnector можно программно выполнять те же действия, что и через RAC, но на уровне полноценного объектно-ориентированного кода.

Вариант 4: Автоматизация через OneScript

Если вы хотите писать скрипты на языке 1С, но запускать их вне платформы, воспользуйтесь OneScript. В сообществе разработана отличная библиотека platform-admin, которая инкапсулирует в себе вызовы rac.

Разберем пример того, как это упрощает жизнь. Вам не нужно знать синтаксис командной строки rac, вы работаете с объектами:


// Пример на OneScript с использованием библиотеки platform-admin
Менеджер = Новый МенеджерКластера("localhost:1545");
Менеджер.Авторизоваться("admin", "password");

СписокБаз = Менеджер.ПолучитьИнформационныеБазы();
Для Каждого База Из СписокБаз Цикл
    // Сравниваем Имя базы в SQL с массивом имен из SQL-сервера
    Если SQLБазы.Найти(База.dbName) = Неопределено Тогда
        Сообщить("Внимание: база " + База.Name + " ссылается на отсутствующую базу SQL!");
    КонецЕсли;
КонецЦикла;

Сравнение методов и рекомендации

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

Важный момент по безопасности: Начиная с последних релизов платформы 8.3, при работе через RAS/RAC и COM-соединение, система требует обязательной аутентификации администратора кластера. Если администраторы не заданы, доступ может быть ограничен. Также помните, что для работы v83.COMConnector версия компоненты на сервере и клиенте должна строго совпадать.

Таким образом, полноценное API у сервера 1С существует в нескольких ипостасях, что позволяет гибко решать задачи автоматизации администрирования и сверки данных между 1С и СУБД.

← На главную