Доброго времени суток, меня зовут Тимур. Я являюсь разработчиком на 1С платформе и так получилось что я разбираюсь в Web технологиях, моим любимым языком является PHP, и я подумал почему бы не сделать программное средство для администрирования 1С через web.

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

Например, чтобы проверить включены ли регламентные базы вам постребуется выполнить несколько команд

//Получаем список всех кластеров и находим нужный идентификатор
rac cluster list 

//Получаем список баз и также ищем идентификатор базы в списке
rac localhost:1545 infobase summary list --cluster=123179cb-ec79-45c5-853d-e8570c1235f8 --cluster-user=admin --cluster-pwd=password

//И только после этого получаем состояние базы
rac localhost:1545 infobase info --cluster=123179cb-ec79-45c5-853d-e8570c1235f8 --infobase=e34feedc-f813-4e83-af69-7a3214beb111 --cluster-user=admin --cluster-pwd=password --infobase-user=user --infobase-pwd=password

Быстрее войти в Администрирование и посмотреть в программе эти параметры.

О компоненте я задумался чтобы самому администрировать 1С немного удобнее, а через Web интерфейс было бы вообще идеально. Вот список возможностей которые я реализовал в своей библиотеке:

  • Просмотр, создание, изменение, удаление кластеров

  • Просмотр списка, добавление и изменение баз данных

  • Возможность управление администраторами кластера

  • Просмотр соединений и их удаление

  • Просмотр сеансов с базой данных и их удаление

  • Блокировка и включение выполнения регламентных заданий

  • Блокировка и включение на новые сеансы с базой данных

    И это еще не весь список

Установка RacWorker

Установить её можно с помощью команды composer

composer require timurikvx/rac-worker

также дистрибутив доступен на Github по ссылке

https://github.com/timurikvx/rac-worker

Использование

Вообще вся документация описана на Github, здесь я приведу пару примеров работы с ней

Для начала работы нужно инициализировать классы аутентификации в кластере (если нужно) и в базе данных

//Создание администратора кластера
$clusterAgent = new ClusterAgent('name', 'password');

//Создание администратора базы данных
$infobaseUser = new InfobaseUser('name', 'password');

Далее создаем экземпляр класса RacWorker именно через него осуществляется все взаимодействие с компонентой RAC

$version = '8.3.23.2137'; //Версия 1С платформы
$host = 'localhost'
$port = 1545

//Требуется указать архитектуру приложения
//RacArchitecture::X86_64
//RacArchitecture::X64
  
$worker = new RacWorker($version, $host, $port, RacArchitecture::X86_64);
//$worker->cluster - функции для управления кластерами
//$worker->connection - функции для управления соединениями
//$worker->process - функции для управления процессами кластера
//$worker->server - функции для управления рабочими серверами кластера
//$worker->infobase - функции для управления базами данных
//$worker->session - функции для управления саенсами баз данных
//$worker->agent - функции для управления администраторами сервера

Теперь мы можем получить кластеры сервера

//Получение всех кластеров сервера
$clusters = $worker->cluster->list(); //array<ClusterEntity::class>

//Получение первого кластера, на случай если он единственный
$cluster = $worker->cluster->first(); //ClusterEntity::class|null

//Получаем кластер по его имени
$cluster = $worker->cluster->getByName('Имя кластера'); //ClusterEntity::class|null

И вот теперь нам пригодится авторизация администратора если он имеется

//Устанавливаем авторизацию созданную ранее на экземпляр кластера класса ClusterEntity
$cluster->setUser($clusterUser);

После этого мы можем перейти к базам данных

//Получаем список баз кластера
$error = '' //Выходной параметр ошибки
$infobases = $worker->infobase->list($cluster, $error); //array<InfobaseShortEntity::class>

//Ищем базу по имени
$error = '';
$infobase = $worker->infobase->getByName('Имя базы данных', $cluster, $error); //InfobaseShortEntity::class|null

//Поучаем первую базу из списка
$error = '';
$infobase = $worker->infobase->first($cluster, $error); //InfobaseShortEntity::class|null

//Подробная информация о базе
$error = '';
$infobase = $worker->infobase->info($cluster, $infobase, $error); //InfobaseEntity::class|null

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

$infobase->setUser($infobaseUser); //$infobaseUser - мы создали ранее (см. выше) 

Получаем список сеансов базы данных и удаляем их

$error = '';
//Список сеансов с базой данных
$list = $worker->session->list($cluster, $infobase, $error);

//Список сеансов с базой данных по идентификатору приложения
$list = $worker->session->getByAppID('1CV8', $cluster, $infobase, $error);

//Список сеансов с базой данных по имени хоста
$list = $worker->session->getByHost('host', $cluster, $infobase, $error);

foreach ($list as $session){
     $worker->session->remove($cluster, $session, 'Сообщение пользователю', $error);
}

Вот краткий список возможностей библиотеки, я не описал работу с серверами, соединениями и процессами. Полная документация доступна на Github по ссылке в начале статьи

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

В будущем планирую на основе этой библиотеки сделать удобный обновлятор баз данных как через web интерфейс так и через командный

Спасибо что дочитали, буду рад комментариям, всего наилучшего

Комментарии (13)


  1. XLeshiy
    31.07.2025 14:51

    А спящие сеансы автоматически может удалять?


    1. timmy88 Автор
      31.07.2025 14:51

      Любые))


      1. XLeshiy
        31.07.2025 14:51

        О, супер, посмотрю. Стопитцот тебе в карму, добрый человек)


        1. timmy88 Автор
          31.07.2025 14:51

          Уже катаю обновлятор 1С через php


      1. XLeshiy
        31.07.2025 14:51

        Удаление сеансов с базой данных

        $error = '';
        foreach ($sessions as $session){
             $worker->session->remove($cluster, $session, 'Сообщение пользователя', $error);
        }

        Это все, а как отобрать спящие?


        1. timmy88 Автор
          31.07.2025 14:51

          Смотря что значит спящие, у которых нет соединения или зависли? Если по времени, получаешь полный список и отбираешь которые нужно удалить, там есть поле ДатаНачала


          1. XLeshiy
            31.07.2025 14:51

            Вот такие, если смотреть в консоли кластера
            Вот такие, если смотреть в консоли кластера


            1. timmy88 Автор
              31.07.2025 14:51

              А вот оно как, слушай надо посмотреть самому, по идее я брал все поля которые доступны сеансам


              1. XLeshiy
                31.07.2025 14:51

                Это поле в консоли по умолчанию отключено, как и многие другие


                1. timmy88 Автор
                  31.07.2025 14:51

                  Я посмотрю на днях, если не все поля, я новый релиз выпущу


                1. timmy88 Автор
                  31.07.2025 14:51

                  метод isHypernate получает это у сеанса


                  1. XLeshiy
                    31.07.2025 14:51

                    Осталось разобраться, как этим пользоваться) Не силен в php(

                    Можно на гитхабе инструкцию хотя бы в общих словах?)


  1. CyrK
    31.07.2025 14:51

    А как быть без кластеров? Если файловые базы опубликованы на web-сервере.