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

30.01.20

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Изменение имени домена для выбранных пользователей информационной базы.:
.epf 10,35Kb
9 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

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

5,5 тысячи пользователей в единой базе 1С, розница в режиме 24/7 и SLA 99,98% – в таких условиях любая авария быстро превращается в очереди на кассах, потерю денег и давление со стороны бизнеса. Показываем, как выстроить процесс аварийно-восстановительных работ: от первых алертов и базового скрининга системы до подключения команды, проверки гипотез и дебрифа после инцидента. Разбираем, как метрики, дашборды, техжурнал, Zabbix, Prometheus, Grafana, Telegram-боты и скрипты помогают не гадать, а быстро находить причину проблемы. На реальных авариях объясняем, почему «быстро» не должно означать «рискованно», как работа над ошибками снижает панику и почему каждая авария может сделать систему надежнее.

11.08.2026    1906    jul.dolganova    8    

22

Администрирование СУБД Пароли Системный администратор 1С 8.3 1С:Розница 2 1С:Управление производственным предприятием Абонемент ($m)

Пароль пользователя СУБД лежит в 1CV8Clst.lst обратимо: кто читает папку srvinfo - достаёт пароли SQL всех баз кластера, минуя права 1С. Обработка показывает, у каких баз пароль извлекается, помечает слабые и выдаёт план защиты. К СУБД не подключается, ничего не пишет - только читает файл.

10 стартмани

06.08.2026    877    13    nedomolkov.ivan    0    

7

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

Прогнал набор диагностических скриптов на двух рабочих базах: боевой с 580 сеансами и малонагруженной. Разбираю пять находок: статистика 97-дневной давности, 598 запросов со сканами, журнал транзакций в 73 % от данных, tempdb в один файл и 81 % ожиданий на параллелизме, который чинить не надо. Плюс три грабли, из-за которых самописный диагностический скрипт падает на чужом сервере. Семь рабочих скриптов внутри, копируются в SSMS как есть.

05.08.2026    1240    nedomolkov.ivan    8    

8

Администрирование СУБД Журнал регистрации Системный администратор Программист 1С 8.3 Бесплатно (free)

Журнал регистрации на нагруженной базе перестаёт открываться: файлы растут на гигабайты в день, просмотр виснет, история недоступна. Рассказываю, как мы вынесли журнал трёх продуктивных баз в ClickHouse: 35 млрд событий, поиск всех ошибок за сутки — 0,11 секунды, привычная форма журнала для пользователей и падение числа ошибок в проде в 23 раза за полгода. Архитектура, схема таблицы, грабли интеграции и все цифры с прода.

04.08.2026    1507    nedomolkov.ivan    0    

8

Администрирование СУБД 1С 8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

База 1С:ERP размером 646 Гб, полное маскирование за 5 часов - без создания промежуточной незащищенной копии. Разбираем бесплатный pg_anon на сквозном примере с реального продуктива.

27.07.2026    2748    Tantor    16    

13

HighLoad оптимизация Администрирование СУБД Программист Россия Бесплатно (free)

Если вы работаете с 1С на PostgreSQL и жалуетесь на тормоза — скорее всего, дело в join predicate pushdown, которого в стандартном PostgreSQL нет. В MS SQL Server этот механизм работает «из коробки», и при миграции именно запросы к виртуальным таблицам 1С бьют по производительности сильнее всего. В этой статье — реальный кейс от Postgres Professional с разбором плана выполнения, ручным экспериментом и доработкой планировщика СУБД, которая ускорила запросы от 22 до 54 000 раз.

16.06.2026    9201    postgres_professional    13    

12

HighLoad оптимизация Администрирование СУБД Системный администратор Программист 1С:Предприятие 8 Бесплатно (free)

Вышел релиз СУБД Tantor Postgres 18, и мы хотим рассказать о его новых возможностях для работы с приложениями на платформе "1С:Предприятие". В обзоре разберем улучшения планировщика, по традиции коснемся работы временных таблиц и не обойдем вниманием вспомогательные утилиты, которые упрощают поиск и диагностику проблем в высоконагруженных системах. За каждым пунктом - реальные запросы 1С, реальные рабочие базы и сотни часов тестирования!

16.06.2026    3607    Tantor    7    

10

Администрирование СУБД Системный администратор Программист 1С:Предприятие 8 Россия Бесплатно (free)

База 1С за несколько лет эксплуатации разрослась, - стала большой, медленно работает, требует много места и времени для копирования и прочего обслуживания. Нужна ли обязательно свертка или можно обойтись более «мягкими» средствами. Делюсь своим опытном как для новых конфигураций, так и для старых УПП, УТ 10…

01.06.2026    8316    2ncom    30    

11
Для отправки сообщения требуется регистрация/авторизация