Предлагаю на рассмотрение небольшую обработку, она бывает очень полезна , когда надо быстро и в удобоваримом виде посмотреть какие базы у Вас есть на сервере. Обработка запускается как внешняя из любой базы , результатом является список всех баз на 1с сервере, также если в описании баз установлена отметка например "Рабочая база", она выводится на закладку (смотри скриншот). Ниже дается описание кода, данный код может использоваться как процедура в других мультибазовых программах .
Обработка предназначена для работы в клиент-серверных базах и тестировалась на платформе 8.3.14.1854.
1. Запуск обработки производится через процедуру ПриОткрытии(Отказ), которая запускает на сервере процедуру СоздатьСписокБаз1().
Код процедуры:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВерсияКонфигурации=ПолучитьВерсиюКонфигурации();
СоздатьСписокБаз1();
КонецПроцедуры
2. Процедура СоздатьСписокБаз1() создает соединение с агентом и выгружает кластеры серверов, если кластеры серверов существуют в массив выгружаются
данные баз, которые в свою очередь перемещаются в таблицу значений БазыСервера.
Код процедуры:
&НаСервере
Процедура СоздатьСписокБаз1()
//Процедура создает список баз ******************************************************************************************
БазыСервера.Очистить(); //Очищаем таблицу БазыСервера
Сервер=СерверПолучить(); //Через функцию СерверПолучить() получаем адрес сервера
Попытка
COMСоединитель = Новый COMОбъект("V83.COMConnector"); //V83.COMConnector создаем объект для подсоединения
Исключение
Сообщить("Ошибка создания "+ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
СоединениеСАгентом = COMСоединитель.ConnectAgent("tcp://"+Сервер); //Создаем соединение с агентом
Исключение
Если СтрНайти(Сервер, ":") > 1 Тогда
Сообщить(" Проверьте номер порта. " + ОписаниеОшибки());
Сообщить("Хост+Порт "+Сервер);
Иначе
Сообщить("Ошибка создания агента сервера. " + ОписаниеОшибки());
КонецЕсли;
Возврат;
КонецПопытки;
КластерыСерверов = СоединениеСАгентом.GetClusters().Выгрузить(); //Выгружаем кластеры серверов
СоединениеСАгентом.Authenticate(КластерыСерверов[0], "", "");
Если КластерыСерверов.Количество() > 0 Тогда //Если кластеры серверов существуют то выгружаем базы
Базы = СоединениеСАгентом.GetInfoBases(КластерыСерверов[0]).Выгрузить();
КонецЕсли;
КОМИмяБазы="";
Индекс = Базы.ВГраница();
ИндексМассива=0;
Номер = 0;
Для Каждого База Из Базы Цикл
Номер=Номер+1;
СтрБазыСервера=БазыСервера.Добавить();
СтрБазыСервера.Номер = Номер;
СтрБазыСервера.НазваниеБазы = База.Name;
СтрБазыСервера.ОписаниеБазы = База.Descr;
СтрБазыСервера.ИмяСервера = Сервер;
КонецЦикла;
//Следующая часть кода помогает определить когда была сделана запись,
//это дает возможность определить когда приблизительно была создана база.
//В данной программе эта часть кода не работает, но может быть полезна при использовании
//в другой программе.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Подразделения.Ссылка КАК Ссылка
|ИЗ
| Справочник.Подразделения КАК Подразделения" ;
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл //Выбираем результат запроса в цикле
ПодразделениеСсылка = Выборка.Ссылка;
КонецЦикла;
//ДатаСозданияСслки=ДатаСозданияСсылки(ПодразделениеСсылка);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Вспомогательные функции и процедуры**********************************************************************************
Данная функция служит для получения сервера , может также использоваться в других программах.
&НаСервере
Функция СерверПолучить()
ИБ = СтрокаСоединенияИнформационнойБазы();
П1 = Сред(ИБ, 7, 32);
СерверПорт = Лев(П1, СтрНайти(П1, "Ref")-3);
СерверБазы= СерверПорт;
//Отчет.ТекущаяБаза= Сред(ИБ,СтрНайти(ИБ,";")+6,((СтрДлина(ИБ)-(СтрНайти(ИБ,";")+6)))-1);
ДвоеточиеПоложение = СтрНайти(СерверПорт, ":");
Если ДвоеточиеПоложение=0 Тогда
Сервер = СерверПорт;
Иначе
Сервер = Лев(СерверПорт, ДвоеточиеПоложение-1)+":"+СтрЗаменить((Число(Сред(СерверПорт, ДвоеточиеПоложение+1, 4)) -1), Символы.НПП, "");
КонецЕсли;
Сервер = Сервер;
Возврат Сервер;
КонецФункции
Функция вычисляет когда была создана ссылка, с ее помощью можно приблизительно вычислить дату создания базы,
это иногда бывает полезно.
&НаСервере
Функция ДатаСозданияСсылки(ПодразделениеСсылка)
Ссылка=ПодразделениеСсылка;
ГУИД = Ссылка.УникальныйИдентификатор();
Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
Разрядность = СтрДлина(Строка16);
ЧислоСек = 0;
Для Позиция = 1 По Разрядность Цикл
ЧислоСек = ЧислоСек + Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
КонецЦикла;
ЧислоСек = ЧислоСек / 10000000;
Возврат Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек;
КонецФункции
Функция получает версию конфигурации.
&НаСервере
Функция ПолучитьВерсиюКонфигурации()
СистемнаяИнформация = Новый СистемнаяИнформация;
ВерсияПлатформы = СистемнаяИнформация.ВерсияПриложения;
ВерсияКонфигурации = Метаданные.Версия;
Длина=СтрДлина(ВерсияКонфигурации)-4;
Версия=Сред(ВерсияКонфигурации,5,Длина);
ВерсияЧисло=Число(Версия);
Если ВерсияЧисло>= 10 Тогда
Сообщить(ВерсияКонфигурации);
КонецЕсли;
Возврат ВерсияКонфигурации;
КонецФункции
Как я писал выше, обработка может использоваться как составная часть в других программах, поэтому код программы несколько избыточен.