В современных реалиях администрирования систем на базе «1С:Предприятие» использование устаревшей технологии COM-соединения становится всё более проблематичным. Это связано как с переходом на 64-битные системы, так и с необходимостью кроссплатформенного управления серверами. Основным инструментом для решения этих задач сегодня является связка RAS (Remote Administration Service) и RAC (Remote Administration Console). В этой статье мы подробно разберем, как программно взаимодействовать с реестром кластера, создавать и обновлять информационные базы, а также управлять сеансами, используя встроенные средства платформы и внешние утилиты.
Прежде чем переходить к коду, проанализируем архитектуру решения. Сервис ras является посредником между вашим программным кодом и агентом сервера ragent. Он слушает определенный порт (по умолчанию 1545) и принимает команды по проприетарному протоколу. Утилита rac — это консольный клиент, который умеет общаться с ras. Начиная с версии платформы 8.3.14, встроенный язык 1С получил прямые объекты для работы с этим сервисом, что избавляет нас от необходимости регистрировать DLL или использовать COM-объекты.
Рассмотрим наиболее современный и «чистый» способ — использование объекта АдминистрированиеСервера. Этот метод позволяет работать с кластером непосредственно из кода 1С (например, из обработки или фонового задания). Для работы этого кода необходимо, чтобы на сервере был запущен процесс ras.
Разберем по шагам процесс получения списка информационных баз:
&НаСервере
Процедура ПолучитьСписокБазНаСервере()
// Указываем адрес сервера RAS и порт
Агент = Новый АдминистрированиеСервера("localhost", "1545");
// Выполняем аутентификацию (если на уровне кластера заданы администраторы)
// Если администраторов нет, метод вызывается без параметров
Агент.ВыполнитьАутентификацию();
// Получаем массив кластеров, зарегистрированных на данном сервере
Кластеры = Агент.ПолучитьКластеры();
Для Каждого Кластер Из Кластеры Цикл
// Для каждого кластера получаем интерфейс администрирования
АдминистрированиеКластера = Кластер;
АдминистрированиеКластера.ВыполнитьАутентификацию();
// Получаем список информационных баз
Базы = АдминистрированиеКластера.ПолучитьИнформационныеБазы();
Для Каждого База Из Базы Цикл
Сообщить("Найдена база: " + База.Имя + " на сервере БД: " + База.СерверБазыДанных);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Важный нюанс: если ваша платформа ниже версии 8.3.14, попытка создать объект АдминистрированиеСервера вызовет ошибку «Тип не определен». В этом случае необходимо либо обновить платформу, либо использовать способы, описанные ниже.
Одной из самых частых задач является автоматическое создание базы в кластере. Для этого мы используем метод СоздатьИнформационнуюБазу. Выясним, какие параметры для этого необходимы. Нам потребуется заполнить свойства объекта ИнформационнаяБазаОболочка.
// Пример создания базы
НоваяБаза = АдминистрированиеКластера.СоздатьОбъектИнформационнаяБаза();
НоваяБаза.Имя = "New_Accounting_Base";
НоваяБаза.Описание = "База создана автоматически";
НоваяБаза.СУБД = "PostgreSQL"; // Или "MSSQLServer"
НоваяБаза.СерверБазыДанных = "db_server_name";
НоваяБаза.ИмяБазыДанных = "db_name_on_sql";
НоваяБаза.ПользовательБазыДанных = "postgres";
НоваяБаза.ПарольПользователяБазыДанных = "secure_password";
НоваяБаза.СоздатьБазуДанных = Истина; // Платформа сама создаст базу на SQL-сервере
// Режим создания: Создать (физически на СУБД) или Зарегистрировать (только в кластере)
Режим = РежимСозданияИнформационнойБазы.Создать;
АдминистрированиеКластера.СоздатьИнформационнуюБазу(НоваяБаза, Режим);
Если нам нужно управлять кластером извне (например, через скрипты PowerShell или Python) или если мы используем старую версию платформы, на помощь приходит утилита rac.exe. Она располагается в каталоге bin установленной платформы.
Проанализируем основные команды, которые можно выполнять программно через запуск внешнего приложения:
rac cluster list localhost:1545rac infobase --cluster=[ID_кластера] summary list localhost:1545
rac infobase update --infobase=[ID_базы] --sessions-deny=on --permission-code=123 --cluster=[ID_кластера] localhost:1545
Совет для автоматизации: В новых версиях платформы утилита поддерживает параметр --format=json. Это позволяет получать результат выполнения команды в структурированном виде, который легко парсится любым современным языком программирования, включая 1С (через ЧтениеJSON).
Для тех, кто предпочитает писать скрипты автоматизации на языке 1С, но вне контекста тяжелой конфигурации, существует проект OneScript. Библиотека irac представляет собой мощную обертку над rac.exe. Она позволяет оперировать объектами «Кластер», «ИнформационнаяБаза» и «Сеанс» без необходимости вручную парсить текстовые строки вывода консоли.
Пример логики на OneScript с использованием irac:
// Подключаем библиотеку
#Использовать irac
АдресСервиса = "localhost:1545";
Менеджер = Новый МенеджерRAC(АдресСервиса);
Кластер = Менеджер.ПолучитьКластеры()[0];
Менеджер.УстановитьТекущийКластер(Кластер.ID);
Базы = Менеджер.ПолучитьИнформационныеБазы();
Для Каждого База Из Базы Цикл
Если База.Name = "TestDB" Тогда
Сообщить("Удаляем тестовую базу...");
Менеджер.УдалитьИнформационнуюБазу(База.ID, РежимУдаленияИнформационнойБазы.ОставитьВБД);
КонецЕсли;
КонецЦикла;
Важно понимать принципиальное различие: через RAS/RAC мы управляем реестром кластера, а не содержимым базы.
Что МОЖНО сделать через RAS:
Чего НЕЛЬЗЯ сделать через RAS:
Для управления пользователями внутри информационной базы (назначение прав, ролей) без использования COM-соединения следует использовать OData (Universal HTTP REST API) или собственные HTTP-сервисы, опубликованные в конкретной базе. Это единственный надежный способ «достучаться» до внутренней логики конфигурации без прямой привязки к Windows-технологиям.
Рассмотрим вопрос безопасности. При программном вызове rac.exe пароли часто передаются в открытом виде как аргументы командной строки. Проанализируем, как этого избежать:
АдминистрированиеСервера внутри 1С является наиболее безопасным, так как пароли передаются в рамках сессии защищенного протокола взаимодействия с RAS.Резюмируя, переход на программное управление через RAS делает вашу систему администрирования более гибкой и готовой к работе в Linux-окружении, полностью избавляя от проблем, связанных с настройкой DCOM и регистрацией библиотек comcntr.