Повторяющиеся логины пользователей

13.01.20

Администрирование - Роли и права

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

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

Наименование Файл Версия Размер
Повторяющиеся логины пользователей.:
.epf 10,56Kb
0
.epf 10,56Kb Скачать

Задача возникла в результате того, что я работаю в специфической организации,
где часто идет ротация пользователей(
например аудиторы заходят или фискалы, за раз до 50-60 пользователей). В результате довольно
частая ситуация появляются в базе пользователи с одинаковыми логинами и их надо отлавливать периодически.
Эта обработка дает возможность это делать, плюс парочка дополнительных
возможностей, просмотр всех пользователей и просмотр работающих пользователей. Обработка используется на практике. 

 

Представляю скриншоты которые показывают три закладки на форме обработки:

 

1. Отображены все пользователи

2. Отображены двойные логины

3. Отображены работающие пользователи

Программа запускается как внешняя обработка:

&НаКлиенте
Процедура ПриОткрытии(Отказ)

		ОбработкаСписка();

КонецПроцедуры

    На форме обработки имеется кнопка "Инструкция", которая запускает процедуру ИнструкцияПоЭксплуатации(Команда):

&НаКлиенте
 Процедура ИнструкцияПоЭксплуатации(Команда)
//Процедура выводит текстовый файл Инструкция по эксплуатации     
    Инструкция="          Инструкция на обработку двойной логин."+Символы.ПС+" 
    |1. На закладке ""Все пользователи"" отображаются все пользователи базы."+Символы.ПС+"
    |2. На закладке ""Двойные логины"" отображаются пользователи с повторяющимися логинами (выбираются только действующие пользователи)."+Символы.ПС+"
    |3. На закладке ""Список рабочих пользователей"" отображаются только действующие пользователи";
    
    Предупреждение(Инструкция);
    
КонецПроцедуры

    Следующая процедура заполняет три закладки, которые указаны выше на скриншотах.
Подробно работа процедуры описана в комментариях.

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

 

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121571    670    389    

710

Запрет доступа к данным по зарплате для БП 3.0 и КА 2.5

Зарплата Роли и права Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5700 руб.

27.05.2021    32715    204    89    

165

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    2962    12    1    

34

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3492    11    1    

33

Расширение для разграничения доступа к контрагентам и обработка для группового назначения доступа для Бухгалтерии (RLS) 3.0.143.42

Роли и права Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение предназначено для Бухгалтерии предприятия (версии ПРОФ и КОРП). Типовая конфигурация остается на поддержке. С помощью расширения менеджер по продажам будет иметь доступ к контрагентам и списку их документов только в случае, если он является для них ответственным. Пользователю с полными правами также доступна обработка «Назначение ответственных» для группового добавления/удаления ответственного в карточке контрагента. Есть версия данного расширения для клиентов Fresh - в магазине расширений (Fresh)

9360 руб.

14.09.2022    5756    7    4    

9

Роли для кладовщика

Логистика, склад и ТМЦ Роли и права Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

2520 руб.

21.05.2019    1692300    552    192    

133

Универсальная система оповещений в базе или по почте по произвольным условиям, расписанием, ролям и пользователям (Расширение / конфигурация для платформ 8.3.6+, для ЛЮБЫХ баз)

Роли и права Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Данная система разработана как альтернатива стандартной системе напоминаний. Но имеет ряд существенных преимуществ: отображение в базе или с отправкой по почте, свое расписание, возможность фильтрации по ролям и пользователям, формирование своих запросов и макетов, шаблоны писем, работа в фоне. А также может блокировать работу пользователей при заданных условиях. Может работать в составе любой конфигурации. Имеется справка с описанием возможностей. (Обновление от 20.02.2024, версия 2.2, расширение)

18000 руб.

29.11.2019    24688    13    8    

33
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. DJDUH 17 14.01.20 11:44 Сейчас в теме
А консоль 1С чем не подходит? или я не понял смысл этой обработки.
2. bryantsev.yury 37 14.01.20 12:22 Сейчас в теме
(1)Смысл этой обработки следующий:
В реальных базах идет большой оборот пользователей, возникают ситуации
когда появляются пользователи с одинаковыми логинами.
для выявления таких ситуаций была создана эта обработка, плюс дополнительная возможность просмотреть всех пользователей и просмотреть
действующих пользователей.
4. chng 20.05.20 19:21 Сейчас в теме
(2) ИМХО ваша стратегия больбы с проблемой это какойто костыль в попытке устранить последствия, а бороться надо с причиной.
Попробуйте использовать в качестве логина, ФИО полностью и без сокращений! Лучше один раз убедить начальство принять такие правила, чем постоянно ожидать прерывания на устранение этих дублей...
У нас это правило, пользовательИБ=ФИЗ лицо за 6 лет при 4000 сотрудников в зупе, полные однофамильцы (причем не родственники) встретились всего несколько раз.
3. bryantsev.yury 37 14.01.20 12:34 Сейчас в теме
(1) Прошу уточнить какую консоль Вы имеете в виду.
5. bryantsev.yury 37 21.05.20 10:10 Сейчас в теме
chng Вы совершенно правы , это костыль, но пользователь так работает и по
другому работать не хочет, "Клиент всегда прав" или "Маемо, что маемо"
Оставьте свое сообщение