Алгоритм работы обработки выглядит так:
1. При нажатии кнопки "Создать список доменов" на закладке формы появляется список доменов, на котором необходимо галочками отметить домены, предназначенные для изменения.
2. В строку ввода "Новое имя домена" необходимо записать имя домена, на которое будут изменены отмеченные домены.
3. После нажатия кнопки "Переименовать домены" запускается процедура переименования, по окончании обработки выйдет сообщение о количестве переименованных пользователей.
Перейдем к рассмотрению программного кода.
Процедура "ИнструкцияПоЭксплуатации" описывает порядок действий при пользовании обработкой.
Код процедуры:
&НаКлиенте
Процедура ИнструкцияПоЭксплуатации(Команда)
//Процедура выводит текстовый файл Инструкция по эксплуатации
Инструкция=" Инструкция для обработки переименование доменов."+Символы.ПС+"
|1. В строку ""Новое имя домена"" запишите новое имя домена."+Символы.ПС+"
|2. Нажмите кнопку ""Создать список доменов"", на экране появится список доменов для данной базы."+Символы.ПС+"
| Выберите те домены которые вы хотите изменить (поставте галочки)."+Символы.ПС+"
|3. Нажмите кнопку ""Переименовать домены"", по окончании обработки выйдет сообщение о количестве переименованных пользователей.";
Предупреждение(Инструкция);
КонецПроцедуры
Процедура "ПриОткрытииОбработки" запускает процедуру "СозданиеСпискаДоменов", результатом работы которой является список доменов базы.
Код процедуры:
&НаКлиенте
Процедура ПриОткрытииОбработки(Команда)
ОчиститьСообщения();
СозданиеСпискаДоменов();
Сообщить("Список доменов создан,выберите нужные домены для переименования.");
КонецПроцедуры
Процедуры "СозданиеСпискаДоменов" и "ЗаполняемТаблицуВсеДомены" заполняют таблицу значений "ВсеДомены", в которую вносятся все домены пользователей базы.
Код процедуры:
&НаСервере
Процедура СозданиеСпискаДоменов()
//Создаем Массив пользователей Информационной Базы для создания списка доменов ************************
ВсеДомены.Очистить();
ТаблицаДоменов.Очистить();
Выборка= ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ЭлементМассива Из Выборка Цикл
ПользовательУникльныйИдентификатор=ЭлементМассива.УникальныйИдентификатор;
ЗаполняемТаблицуВсеДомены(ПользовательУникльныйИдентификатор);
КонецЦикла;
ЗаполняемТаблицуТаблицаДоменов();
КонецПроцедуры
&НаСервере
Процедура ЗаполняемТаблицуВсеДомены(ПользовательУникльныйИдентификатор)
УстановитьПривилегированныйРежим(Истина);
//Заполняем таблицу ВсеДомены ************************************************************************
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользовательУникльныйИдентификатор);
ФИО1 = ПользовательИБ.ПолноеИмя;
ДоменЛогин=ПользовательИБ.ПользовательОС;
ДлинаДомена=СтрДлина(ДоменЛогин);
СчетчикБукв=3;
Буква="";
ИмяДоменаВТаблице="";
Буква=Сред(ДоменЛогин,СчетчикБукв,1);
Пока НЕ Буква="\" И СчетчикБукв < ДлинаДомена Цикл
ИмяДоменаВТаблице=ИмяДоменаВТаблице+Буква;
СчетчикБукв=СчетчикБукв+1;
Буква=Сред(ДоменЛогин,СчетчикБукв,1);
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
Строка=ВсеДомены.Добавить();
Строка.ИменаДоменов=ИмяДоменаВТаблице;
КонецПроцедуры
Процедура "ЗаполняемТаблицуТаблицаДоменов" заполняет таблицу значений "ТаблицаДоменов", которая выводится на закладке формы для выбора изменяемого имени домена.
Код процедуры:
&НаСервере
Процедура ЗаполняемТаблицуТаблицаДоменов()
УстановитьПривилегированныйРежим(Истина);
//Заполняем таблицу ВсеДомены ************************************************************************
ПустойДомен="";
СчетчикДоменов=1;
ВД = РеквизитФормыВЗначение("ВсеДомены",Тип("ТаблицаЗначений")); //Выгружаем Табличный реквизит формы в переменную
Запрос = Новый Запрос;
МВТ=Новый МенеджерВременныхТаблиц; //Создаем МенеджерВременныхТаблиц
Запрос.МенеджерВременныхТаблиц=МВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ВД1.ИменаДоменов КАК ИмяДомена
|ПОМЕСТИТЬ ВТДанные
|ИЗ
| &ВД1 КАК ВД1
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТДанные.ИмяДомена КАК ИмяДомена
|ИЗ
| ВТДанные КАК ВТДанные
|ГДЕ
| ВТДанные.ИмяДомена <> &ПустойДомен
|
|СГРУППИРОВАТЬ ПО
| ВТДанные.ИмяДомена"
;
Запрос.УстановитьПараметр("ПустойДомен",ПустойДомен);
Запрос.УстановитьПараметр("ВД1",ВД);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл //Выбираем результат запроса в цикле
Строка=ТаблицаДоменов.Добавить();
Строка.Номер=СчетчикДоменов;
Строка.ИмяДомена=Выборка.ИмяДомена;
СчетчикДоменов=СчетчикДоменов+1;
КонецЦикла;
КонецПроцедуры
Процедура "КнопкаВыполнить" запускает процедуру изменения имени домена "ИзменениеИмениДомена" которая собственно изменяет выбранные имена доменов пользователей.
Код процедуры:
&НаКлиенте
Процедура КнопкаВыполнить(Команда)
Сообщить("Начато изменение имен доменов.");
НовоеИмяДомена=ИмяДомена;
Если НовоеИмяДомена="" Тогда
Сообщить("Введите Новое Имя Домена, без него программа не работает");
Возврат;
КонецЕсли;
ИзменениеИмениДомена(НовоеИмяДомена);
Сообщить("Имена доменов изменены.");
КонецПроцедуры
&НаСервере
Процедура ИзменениеИмениДомена(НовоеИмяДомена)
//Создаем Массив пользователей Информационной Базы для изменения доменов *****************************
КоличествоПользователей=0;
Выборка= ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ЭлементМассива Из Выборка Цикл
ПользовательУникльныйИдентификатор=ЭлементМассива.УникальныйИдентификатор;
ИзменениеИмениДомена1(ПользовательУникльныйИдентификатор,НовоеИмяДомена,КоличествоПользователей);
КонецЦикла;
Сообщить("Изменены домены у "+КоличествоПользователей+" пользователей.");
КонецПроцедуры
&НаСервере
Процедура ИзменениеИмениДомена1(ПользовательУникльныйИдентификатор,НовоеИмяДомена,КоличествоПользователей)
УстановитьПривилегированныйРежим(Истина);
//Разбиваем ДоменЛогин на ДоменПользователя и ЛогинПользователя
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользовательУникльныйИдентификатор);
ФИО1 = ПользовательИБ.ПолноеИмя;
ДоменЛогин=ПользовательИБ.ПользовательОС;
Если НЕ ДоменЛогин="" Тогда
ДлинаДомена=СтрДлина(ДоменЛогин);
ДоменПользователя="";
ЛогинПользователя="";
Буква="";
СчетчикБукв=3;
Буква=Сред(ДоменЛогин,СчетчикБукв,1);
ФлагДЛ="Д";
Пока СчетчикБукв <= ДлинаДомена Цикл
Если Буква="\" Тогда
ФлагДЛ="Л";
СчетчикБукв=СчетчикБукв+1;
Буква=Сред(ДоменЛогин,СчетчикБукв,1);
Иначе
Если ФлагДЛ="Д" Тогда
ДоменПользователя=ДоменПользователя+Буква;
СчетчикБукв=СчетчикБукв+1;
Буква=Сред(ДоменЛогин,СчетчикБукв,1);
КонецЕсли;
Если ФлагДЛ="Л" Тогда
ЛогинПользователя=ЛогинПользователя+Буква;
СчетчикБукв=СчетчикБукв+1;
Буква=Сред(ДоменЛогин,СчетчикБукв,1);
КонецЕсли;
КонецЕсли;
КонецЦикла;
//Смотрим стоит ли у домена галочка выбора
ТД = РеквизитФормыВЗначение("ТаблицаДоменов",Тип("ТаблицаЗначений")); //Выгружаем Табличный реквизит формы в переменную
Запрос = Новый Запрос;
МВТ=Новый МенеджерВременныхТаблиц; //Создаем МенеджерВременныхТаблиц
Запрос.МенеджерВременныхТаблиц=МВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ТД1.ИмяДомена КАК ИмяДомена,
| ТД1.ОтметкаВыбора КАК ОтметкаВыбора
|ПОМЕСТИТЬ ВТДанные
|ИЗ
| &ТД1 КАК ТД1
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТДанные.ИмяДомена КАК ИмяДомена,
| ВТДанные.ОтметкаВыбора КАК ОтметкаВыбора
|ИЗ
| ВТДанные КАК ВТДанные
|ГДЕ
| ВТДанные.ИмяДомена = &ДоменПользователя
| И ВТДанные.ОтметкаВыбора = ИСТИНА"
;
Запрос.УстановитьПараметр("ДоменПользователя",ДоменПользователя);
Запрос.УстановитьПараметр("ТД1",ТД);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл //Выбираем результат запроса в цикле
ДоменЛогин="\\"+НовоеИмяДомена+"\"+ЛогинПользователя;
ПользовательИБ.ПользовательОС =ДоменЛогин;
ПользовательИБ.Записать();
КоличествоПользователей=КоличествоПользователей+1;
КонецЦикла;
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Обработка особенно актуальна для случая, когда пользователи имеют аутентификацию операционной системы и работают через консоль.