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

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

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

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

У вас зоопарк баз? Реально много баз? Если да - милости прощу к шалашу.

Итак, имеем много баз, при приеме на работу очередного финансиста для него надо создать пользователя в каждой базе. А потом он увольняется и надо выпилить его отовсюду (хотя-бы пометить на удаление).

Для первой задачи пригодится вкладка "новый пользователь", а для второй "код".

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

Обработка выполняет подключение по 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]);
	
		Если Задание <> Неопределено Тогда
			РегламентныеЗаданияСервер.ИзменитьЗадание(Задание, Изменения);
		КонецЕсли;
	КонецЕсли;
КонецЕсли;

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

 

 

 

0

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

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

См. также

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

Избранное Подписка Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение