Выполнение кода и создание пользователя сразу в нескольких базах

Публикация № 1075520

Администрирование - Защита, права, пароли

6
Выполнение кода сразу в нескольких базах по com-соединению, без обменов.

Обработка позволяет в нескольких базах выполнить произвольный код, или создать пользователя.
Для подключения используется платформенный v8ComConnector. Для выполнения кода используется метод ОбщегоНазначения.ВыполнитьВБезопасномРежиме() из БСП.

Список баз читается из окна запуска (ibases.v8i). Логин и пароль на вход в базы указываем вверху формы. В таблице баз логин и пароль указываем только если они отличаются от введенных выше.

Upd 27.06.2019: в новой версии обработки добавлен флаг "не отключать соединения" - все соединения помещаются в переменную "МассивСоединений" &НаКлиенте, для очистки переменной (закрытия соединений) используется кнопка "Очистить все соединения".
Для целей тестирования нагрузки на процессор при обеспечении ненулевого числа сеансов в базах - используется кнопка "поддерживать ненулевое число сеансов в базе". При нажатии подключается обработчик ожидания, и с интервалом в минуту для сохраненных соединений выполняется запрос числа пользовательских сеансов в базе; если сеансы есть - com-соединение отключается, если подключения в МассивеСоединений нет - выполняется новое соединение и проверка.

Отказ от ответственности. Работает только для серверных баз (код для файловых баз не допилен). Тестировалось только на БП 3.0.70.61, скорее всего взлетит на ЗУП 3.0, но не на ERP (в части создания пользователя). Тип подключения Application использовался в процессе разработки, сейчас не работает. Используйте Com-connector.

P.s. Обработка была создана с целью отключения регламентных заданий и ненужного функционала в большом числе копий баз.
Вот примеры кода для указанных задач:

 
ОтключитьСпаркРиски					= Истина;
ОтключитьПроверкуКонтрагентовЕГРН 	= Истина;
ОтключитьНовости 			 		= Истина;
ОтключитьОтправкуСтатистики			= Истина;
ОтключитьОценкуПроизводительности 	= Истина;//ВыполнятьЗамерыПроизводительности

ОтключитьПроизвольныеРегламентные = Истина;//только те, которые не зависят от констант или функциональных опций
ИменаПроизвольныхРегламентных = Новый Массив;
ИменаПроизвольныхРегламентных.Добавить("ВсеОбновленияНовостей");

ОтключитьПолнотекстовыйПоиск = Ложь;//отключать только после остальных, т.к. требует монопольный режим, иначе выдает ошибку

#Область Отлючить_отправку_статистики_в_1с
Если ОтключитьОтправкуСтатистики Тогда
	ЦентрМониторингаРазрешитьОтправлятьДанные = 2;
	
	//код из обработки ПанельАдминистрированияБСП.Форма.ИнтернетПоддержкаИСервисы.РазрешитьОтправлятьДанныеПриИзменении()

	Если ЦентрМониторингаРазрешитьОтправлятьДанные = 2 Тогда
		ПараметрыЦентраМониторингаЗапись = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Ложь, Ложь);
	ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 1 Тогда
		ПараметрыЦентраМониторингаЗапись = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Ложь, Истина);
	ИначеЕсли ЦентрМониторингаРазрешитьОтправлятьДанные = 0 Тогда
		ПараметрыЦентраМониторингаЗапись = Новый Структура("ВключитьЦентрМониторинга, ЦентрОбработкиИнформацииОПрограмме", Истина, Ложь);
	КонецЕсли;

	
		МодульЦентрМониторингаСлужебный = ОбщегоНазначения.ОбщийМодуль("ЦентрМониторингаСлужебный");

		МодульЦентрМониторингаСлужебный.УстановитьПараметрыЦентраМониторингаВнешнийВызов(ПараметрыЦентраМониторингаЗапись);
		

			МодульЦентрМониторингаСлужебный.УдалитьРегламентноеЗаданиеВнешнийВызов("СборИОтправкаСтатистики");

КонецЕсли;
#КонецОбласти

#Область ОтключениеПроизвольногоРегламентного
Если ОтключитьПроизвольныеРегламентные Тогда
	
	Изменения = Новый Структура("Использование", Ложь);
	
	Для каждого ИмяРегламентного Из ИменаПроизвольныхРегламентных Цикл
		
		ИмяПредопределенного = ИмяРегламентного;
		
		Фильтр = Новый Структура("Метаданные", ИмяПредопределенного);
		Найденные = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр);
		Задание = ?(Найденные.Количество() = 0, Неопределено, Найденные[0]);

		Если Задание <> Неопределено Тогда
			РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения);
		КонецЕсли;
		
	КонецЦикла;
	
КонецЕсли;
#КонецОбласти

#Область СПАРК_Риски
Если ОтключитьСпаркРиски Тогда
	Константы.ИспользоватьСервисСПАРКРиски.Установить(Ложь);//и всё, дальше сработает подписка ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции (она же выключает)
	ОбновитьПовторноИспользуемыеЗначения();
КонецЕсли;
#КонецОбласти

#Область ПроверкаКонтрагентовЕГРН
Если ОтключитьПроверкуКонтрагентовЕГРН Тогда
	Константы.ИспользоватьПроверкуКонтрагентов.Установить(Ложь);//и всё, дальше сработает подписка ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции (она же выключает)
	ОбновитьПовторноИспользуемыеЗначения();
КонецЕсли;
#КонецОбласти

#Область Новости
Если ОтключитьНовости Тогда
	Константы.РазрешенаРаботаСНовостями.Установить(Ложь);//и всё, дальше сработает подписка ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции (она же выключает)
	ОбновитьПовторноИспользуемыеЗначения();
КонецЕсли;
#КонецОбласти

#Область ОценкаПроизводительности
Если ОтключитьОценкуПроизводительности Тогда
	Константы.ВыполнятьЗамерыПроизводительности.Установить(Ложь);//и всё, дальше сработает подписка ВключитьРегламентноеЗаданиеПриИзмененииФункциональнойОпции (она же выключает)
	ОбновитьПовторноИспользуемыеЗначения();
КонецЕсли;
#КонецОбласти

#Область Отключить_ППД

//код из обработки ПанельАдминистрированияБСП.Форма.ОбщиеНастройки.СохранитьЗначениеРеквизита()

Если ОтключитьПолнотекстовыйПоиск Тогда
	ИспользоватьПолнотекстовыйПоиск = Ложь;//Гладилов, 19.06.2019. Добавлено
	Попытка
		Если ИспользоватьПолнотекстовыйПоиск Тогда
			ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Разрешить);
		Иначе
			ПолнотекстовыйПоиск.УстановитьРежимПолнотекстовогоПоиска(РежимПолнотекстовогоПоиска.Запретить);
		КонецЕсли;
	Исключение
		ЗаписьЖурналаРегистрации(
		НСтр("ru = 'Полнотекстовый поиск'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
		УровеньЖурналаРегистрации.Ошибка,
		,
		,
		ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		//Возврат "НеУдалосьУстановитьРежимПолнотекстовогоПоиска";
		ВызватьИсключение "НеУдалосьУстановитьРежимПолнотекстовогоПоиска";
	КонецПопытки;
	КонстантаИмя = "ИспользоватьПолнотекстовыйПоиск";
	//НаборКонстант.ИспользоватьПолнотекстовыйПоиск = ИспользоватьПолнотекстовыйПоиск;
	
	// Включение/отключение зависимых регламентных заданий.
	Изменения = Новый Структура("Использование", ИспользоватьПолнотекстовыйПоиск);
	
	//Задание = РегламентныеЗаданияНайтиПредопределенное("ОбновлениеИндексаППД");
	ИмяПредопределенного = "ОбновлениеИндексаППД";
	Фильтр = Новый Структура("Метаданные", ИмяПредопределенного);
	Найденные = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр);
	Задание = ?(Найденные.Количество() = 0, Неопределено, Найденные[0]);
	
	Если Задание <> Неопределено Тогда
		РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения);
	КонецЕсли;
	
	//Задание = РегламентныеЗаданияНайтиПредопределенное("СлияниеИндексаППД");
	ИмяПредопределенного = "СлияниеИндексаППД";
	Фильтр = Новый Структура("Метаданные", ИмяПредопределенного);
	Найденные = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр);
	Задание = ?(Найденные.Количество() = 0, Неопределено, Найденные[0]);
	
	Если Задание <> Неопределено Тогда
		РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения);
	КонецЕсли;
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
		//Изменения.Использование = Изменения.Использование И НаборКонстант.ИзвлекатьТекстыФайловНаСервере;
		
		//Задание = РегламентныеЗаданияНайтиПредопределенное("ИзвлечениеТекста");
		ИмяПредопределенного = "ИзвлечениеТекста";
		Фильтр = Новый Структура("Метаданные", ИмяПредопределенного);
		Найденные = РегламентныеЗаданияСервер.НайтиЗадания(Фильтр);
		Задание = ?(Найденные.Количество() = 0, Неопределено, Найденные[0]);
	
		Если Задание <> Неопределено Тогда
			РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения);
		КонецЕсли;
	КонецЕсли;
КонецЕсли;

#КонецОбласти

 

 

 

6

Скачать файлы

Наименование Файл Версия Размер
Выполнение кода и создание пользователя сразу в нескольких базах (2 версия):
.epf 17,37Kb
27.06.19
3
.epf 17,37Kb 3 Скачать
Выполнение кода и создание пользователя в нескольких базах:
.epf 16,19Kb
10.06.19
3
.epf 16,19Kb 3 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. cmpros78 34 12.09.19 11:59 Сейчас в теме
Доброго дня. Две версии обработки, в чем отличия?
Оставьте свое сообщение