Стандартная обработка от 1С "Управление серверами" (StandardServersManagement) в целом довольно удобна - главное ее преимущество для меня - это возможность работать с серверами разных версий. Но есть и неудобства - список серверов невозможно упорядочить по своему желанию.
Возможность добавить сервера в нужном порядке существует только при начальном добавлении. Если вы сохраните/восстановите настройки, то порядок будет произвольным. И это обусловлено архитектурно. Добавленные сервера хранятся в настройках в виде структуры, порядок размещения элементов в структуре не гарантируется. Соответственно после добавления вы никак не можете изменить порядок серверов.
Предлагается небольшая доработка - возможность "двигать" сервера вверх/вниз по дереву, и сохранять/восстанавливать дерево серверов с сохранением порядка.
Вы можете сохранить встроенную обработку в файл - она входит в состав платформы. Как это сделать - можно посмотреть в публикации на инфостарт Получение обработок платформы.
Либо можете скачать уже модифицированную обработку.
План изменений:
- В основной форме "MainForm" добавляем две новых команды: "СдвинутьВверх", "СдвинутьВниз"
- Добавляем кнопки команд на форму
- Прописываем обработчики "сдвига" строк дерева
- Добавляем в сохраняемые настройки массив с порядком серверов
- При чтении настроек получаем массив порядка и используем его при построении дерева
Начнем с конца, т.к. именно в этом вся соль доработки - построение дерева с учетом порядка.
Вносим изменения в процедуру FillClusterTreeConnectionList - Заполнить дерево кластеров.
При получении настроек в переменную ConnectionSettingsToAdministrationServers получаем наши настройки порядка в переменную МассивПорядок:
....
....
//Вставка
МассивПорядок = Неопределено;
//КонецВставки
If (Metadata.ScriptVariant = Metadata.ObjectProperties.ScriptVariant.English) Then
ConnectionSettingsToAdministrationServers = CommonSettingsStorage.Load("Common/AdministrationServersConnectionsParameters", "");
//Вставка
МассивПорядок = CommonSettingsStorage.Load("Common/AdministrationServersConnectionsParameters_Order", "");
//КонецВставки
ElsIf (Metadata.ScriptVariant = Metadata.ObjectProperties.ScriptVariant.Russian) Then
ConnectionSettingsToAdministrationServers = CommonSettingsStorage.Load("Общее/ПараметрыПодключенияСерверовАдминистрирования", "");
//Вставка
МассивПорядок = CommonSettingsStorage.Load("Общее/ПорядокПодключенияСерверовАдминистрирования", "");
//КонецВставки
EndIf;
далее в этой же процедуре перед циклом обхода полученной коллекции ConnectionSettingsToAdministrationServers перебираем нашу коллекцию МассивПорядок, получаем имя сервера, если находим его в стандартных настройках, то добавляем в дерево.
//Вставка
Если МассивПорядок <> Неопределено Тогда
Для Каждого КлючИмяСервера ИЗ МассивПорядок Цикл
ЗначениеConnectionLine = ConnectionSettingsToAdministrationServers.Получить(КлючИмяСервера);
Если ЗначениеConnectionLine <> Неопределено Тогда
NewConnection = ConnectionTable.Add();
NewConnection.Name = КлючИмяСервера;
If (Metadata.ScriptVariant = Metadata.ObjectProperties.ScriptVariant.English) Then
NewConnection.ServerAdministrationAddress = ЗначениеConnectionLine.Address;
NewConnection.ServerAdministrationPort = ЗначениеConnectionLine.Port;
ElsIf (Metadata.ScriptVariant = Metadata.ObjectProperties.ScriptVariant.Russian) Then
NewConnection.ServerAdministrationAddress = ЗначениеConnectionLine.Адрес;
NewConnection.ServerAdministrationPort = ЗначениеConnectionLine.Порт;
EndIf;
NewConnection.Login = "";
NewConnection.Password = "";
КонецЕсли;
КонецЦикла;
Иначе
МассивПорядок = Новый Массив;
КонецЕсли;
//КонецВставки
Другими словами мы повторяем стандартную процедуру добавления серверов, только делаем это в нужном нам порядке.
Далее идет стандартный цикл обхода коллекции. Мы пропускаем добавление строк, которые добавили на предыдущем шаге. Добавлены будут только те сервера, которых нет в нашем массиве порядка.
For each ConnectionLine In ConnectionSettingsToAdministrationServers Do
//Вставка
КлючИмяСервера = МассивПорядок.Найти(ConnectionLine.Key);
Если КлючИмяСервера <> Неопределено Тогда
Продолжить;
КонецЕсли;
//КонецВставки
Переходим к сохранению настроек порядка.
Делаем это в процедуре "SavingAdministrationConsoleSettings". В самом начале процедуры вставляем свой код - подготавливаем коллекцию МассивПорядок и сохраняем ее в настройках:
&AtServer
Procedure SavingAdministrationConsoleSettings(ConnectionSettings)
....
....
//Вставка
//Создадим массив и поместим туда значения в том порядке, в каком у нас они расположены в дереве
ВерхняяКоллекцияДерева = ClusterTree.ПолучитьЭлементы();
МассивПорядок = New Array();
Если ВерхняяКоллекцияДерева.Количество() > 0 Тогда
СтрокаЦентральныйСервер = ВерхняяКоллекцияДерева[0];
КолллекцияСерверов = СтрокаЦентральныйСервер.ПолучитьЭлементы();
Для Каждого СтрокаСервера ИЗ КолллекцияСерверов Цикл
ИмяСервераКлюч = СтрокаСервера.Name;
ЗначениеConnection = ConnectionSettings.Получить(ИмяСервераКлюч);
Если ЗначениеConnection <> Неопределено Тогда
МассивПорядок.Add(ИмяСервераКлюч);
КонецЕсли;
КонецЦикла;
КонецЕсли;
If (Metadata.ScriptVariant = Metadata.ObjectProperties.ScriptVariant.English) Then
CommonSettingsStorage.Save("Common/AdministrationServersConnectionsParameters_Order", "", МассивПорядок);
ElsIf (Metadata.ScriptVariant = Metadata.ObjectProperties.ScriptVariant.Russian) Then
CommonSettingsStorage.Save("Общее/ПорядокПодключенияСерверовАдминистрирования", "", МассивПорядок);
EndIf;
//КонецВставки
Основное дело сделано. Остались мелочи - добавляем процедуры для обработки нажатия на кнопки сдвига вверх/вниз:
&НаКлиенте
Процедура СдвинутьЭлементДерева(Направление)
ВерхняяКоллекцияЭлементов = ClusterTree.ПолучитьЭлементы();
Если ВерхняяКоллекцияЭлементов.Количество() > 0 Тогда
СтрокаЦентральныйСервер = ВерхняяКоллекцияЭлементов[0];
ТекСтрока = Элементы.ClusterTree.ТекущаяСтрока;
ТекДанные = ClusterTree.НайтиПоИдентификатору(ТекСтрока);
Родитель = ТекДанные.ПолучитьРодителя();
Если Родитель = СтрокаЦентральныйСервер Тогда
ЭлементыРодителя = Родитель.ПолучитьЭлементы();
ИндексТекЭлемента = ЭлементыРодителя.Индекс(ТекДанные);
ЭлементыРодителя.Сдвинуть(ИндексТекЭлемента,Направление);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СдвинутьВверх(Команда)
СдвинутьЭлементДерева(-1);
КонецПроцедуры
&НаКлиенте
Процедура СдвинутьВниз(Команда)
СдвинутьЭлементДерева(1);
КонецПроцедуры
Если вы все делаете самостоятельно, то нужно решить, как встраивать обработку - либо в состав конфигурации, либо через внешние отчеты и обработки.
Таким образом теперь стандартная обработка стала немного удобнее.
Если вы скачаете готовый файл, то обработку нужно добавить в базу через механизм дополнительных обработок. Стандартное подключение через БСП: Админстрирование / Печатные формы, отчеты и обработки / Дополнительные отчеты и обработки / Добавить... Выбираете скачанный файл, указываете размещение (например, Администрирование) и указываете пользователей, кому будет доступна обработка - в общем все стандартно.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.466
Вступайте в нашу телеграмм-группу Инфостарт