Изменение имени домена для выбранных пользователей информационной базы

30.01.20

База данных - Администрирование СУБД

Предлагаю Вашему вниманию обработку используемую в реальном производственном процессе на нашем предприятии. Задача переименования доменов возникла при реорганизации предприятия, имена некоторых доменов для удобства решено было изменить, но при таком количестве пользователей изменение имен доменов штатными средствами выглядело нереально. Было решено создать обработку для изменения имен доменов Информационной базы. Обработка предназначена для работы в клиент-серверных базах и тестировалась на платформе 8.3.14.1854. Работает в режиме внешней обработки.

Скачать исходный код

Наименование Файл Версия Размер
Изменение имени домена для выбранных пользователей информационной базы.:
.epf 10,35Kb
7
.epf 10,35Kb 7 Скачать

   Алгоритм работы обработки выглядит так:
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;
			КонецЦикла; 
КонецЕсли;				
 			УстановитьПривилегированныйРежим(Ложь);
 
КонецПроцедуры

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

См. также

Ошибка "Запись не найдена в менеджере имен базы данных" с катастрофическими последствиями и её лечение

Администрирование СУБД Системный администратор Платформа 1С v8.3 Бесплатно (free)

Ситуация: при обновлении серверной базы данных произошёл сбой и теперь невозможно войти ни в конфигуратор, ни в 1С:Предприятие по причине ошибки, вынесенной в заголовок. Рецепт лечения.

24.05.2024    325    Kernelbug    4    

6

Куда же деваются файлы из 1С

Администрирование СУБД Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

При хранении файлов в томах на диске они иногда исчезают. Разбираемся, почему.

23.05.2024    5884    human_new    15    

28

Установка и примеры использования 1С:Исполнитель на РедОС

Администрирование СУБД Системный администратор Платформа 1С v8.3 Бесплатно (free)

Краткое описание шагов по установке, настройке и применению инструмента 1С:Исполнитель на операционной системе РедОС, а также по борьбе с некоторыми возникающими ошибками.

06.05.2024    571    artemusII    0    

1

Нестандартное решение пересчета итогов

Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Статья для тех, кто столкнулся с необходимостью пересчета итогов для "больших таблиц" и нет возможности поставить на паузу ИБ для проведения работ.

25.04.2024    2263    virustam    31    

11

Идентификация пользователя не выполнена

Администрирование СУБД Системный администратор Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Иногда в конфигурации 1С:Бухгалтерский учет v3.0 возникает ситуация, когда программа всем пользователям выдает предупреждение, что авторизация не выполнена и работа программы будет завершена. Данная инструкция позволяет решить возникшую проблему.

24.04.2024    702    Yan_Malyakov    0    

3

Устранение ошибки выполнения скрипта "Создать сервис RAGENT" в ЦКК

Администрирование СУБД Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free)

В статье показано, как устранить ошибку выполнения скрипта "Создать сервис RAGENT" в системах 1С:Центр контроля качества или в 1С:Центр автоматизации. Будет полезна администраторам ЦКК и ЦА, которые только начали знакомство с этими системами.

18.04.2024    441    artemusII    0    

7

Долгая реструктуризация, замеры времени и очистка Ветис. Розница 2.3

HighLoad оптимизация Администрирование СУБД Системный администратор Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Бесплатно (free)

При подготовке к обновлению возникли проблемы на стадии тестирования и исправления базы данных, также при создании файлов РИБ для магазинов.

16.04.2024    484    xKaskadx    4    

2

Установка и получение лицензии на базовую конфигурацию 1С на Mac OS

Администрирование СУБД Системный администратор Платформа 1С v8.3 Бесплатно (free)

Установить купленную базовую конфигурацию 1С и получить лицензию на MAC OS не так просто, как кажется на первый взгляд и как хотелось бы. Официально в системных требованиях на базовую конфигурации 1С пишет всякие виндовсы и пару-тройку линуксов. МакОс там нет. В статье расскажу, как все-таки поставить на Мак базовую конфигурацию 1С.

11.04.2024    501    pahmutov    0    

3
Оставьте свое сообщение