ФормированиеСообщенияПользователю (БСП)

Автор: 1С
ОбщийМодуль.ПользователиСлужебный
БСП

Формирование сообщения пользователю. Формирует сообщение о результатах переноса пользователя.

// Формирует сообщение о результатах переноса пользователя.
//
// Параметры:
//  МассивПользователей - Массив - пользователи, которых нужно перенести в новую группу.
//  ГруппаПриемник      - СправочникСсылка.ГруппыПользователей - группа, в которую переносятся
//                        пользователи.
//  Перемещение         - Булево - если Истина, то пользователь удаляется из старой группы.
//  МассивНеПеремещенныхПользователей - Массив - пользователи, которых не удалось переместить в группу.
//  ГруппаИсточник      - СправочникСсылка.ГруппыПользователей - группа, из которой происходит
//                        перенос пользователей.
//
// ВозвращаемоеЗначение:
//  Строка - Сообщение пользователю.
//
Функция ФормированиеСообщенияПользователю(МассивПользователей, ГруппаПриемник,
	                                      Перемещение, МассивНеПеремещенныхПользователей, ГруппаИсточник = Неопределено) Экспорт
	
	КоличествоПользователей = МассивПользователей.Количество();
	НаименованиеГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаПриемник, "Наименование");
	СообщениеПользователю = Неопределено;
	КоличествоНеПеремещенныхПользователей = МассивНеПеремещенныхПользователей.Количество();
	
	УведомлениеПользователя = Новый Структура;
	УведомлениеПользователя.Вставить("Сообщение");
	УведомлениеПользователя.Вставить("ЕстьОшибки");
	УведомлениеПользователя.Вставить("Пользователи");
	
	Если КоличествоНеПеремещенныхПользователей > 0 Тогда
		
		СвойстваГруппыПриемника = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
			ГруппаПриемник, "Назначение, Наименование");
		
		НаименованиеГруппы = СвойстваГруппыПриемника.Наименование;
		НазначениеГруппыВнешнихПользователей = СвойстваГруппыПриемника.Назначение.Выгрузить();
		
		МассивПредставлений = Новый Массив;
		Для Каждого СтрокаНазначения Из НазначениеГруппыВнешнихПользователей Цикл
			
			МассивПредставлений.Добавить(НРег(Метаданные.НайтиПоТипу(
				ТипЗнч(СтрокаНазначения.ТипПользователей)).Синоним));
			
		КонецЦикла;
		
		ПредставлениеТипаОбъектаАвторизации = СтрСоединить(МассивПредставлений, ", ");
		
		Если КоличествоНеПеремещенныхПользователей = 1 Тогда
			
			СвойстваНеПеремещенногоПользователя = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
				МассивНеПеремещенныхПользователей[0], "Наименование, ОбъектАвторизации");
			
			Предмет = СвойстваНеПеремещенногоПользователя.Наименование;
			
			ТипВнешнегоПользователя = ТипЗнч(СвойстваНеПеремещенногоПользователя.ОбъектАвторизации);
			ОписаниеТипаСсылки = Новый ОписаниеТипов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипВнешнегоПользователя));
			Значение = ОписаниеТипаСсылки.ПривестиЗначение(Неопределено);
		
			Отбор = Новый Структура("ТипПользователей", Значение);
			ТипПользователяСовпадаетСГруппой = (НазначениеГруппыВнешнихПользователей.НайтиСтроки(Отбор).Количество() = 1);
			
			УведомлениеПользователя.Пользователи = Неопределено;
			
			Если ТипПользователяСовпадаетСГруппой Тогда
				СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Пользователь ""%1"" не может быть включен в группу ""%2"",
					           |т.к. у группы стоит признак ""Все пользователи заданного типа"".'"),
					Предмет, НаименованиеГруппы) + Символы.ПС;
			Иначе
				СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Пользователь ""%1"" не может быть включен в группу ""%2"",
					           |т.к. в состав ее участников входят только %3.'"),
					Предмет, НаименованиеГруппы, ПредставлениеТипаОбъектаАвторизации) + Символы.ПС;
			КонецЕсли;
		Иначе
			УведомлениеПользователя.Пользователи = СтрСоединить(МассивНеПеремещенныхПользователей, Символы.ПС);
			
			СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Не все пользователи могут быть включены в группу ""%1"",
				           |т.к. в состав ее участников входят только %2
				           |или у группы стоит признак ""Все пользователи заданного типа"".'"),
				НаименованиеГруппы,
				ПредставлениеТипаОбъектаАвторизации);
		КонецЕсли;
		
		УведомлениеПользователя.Сообщение = СообщениеПользователю;
		УведомлениеПользователя.ЕстьОшибки = Истина;
		
		Возврат УведомлениеПользователя;
	КонецЕсли;
	
	Если КоличествоПользователей = 1 Тогда
		
		СтрокаОбъект = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(МассивПользователей[0], "Наименование");
		
		Если ГруппаПриемник = Справочники.ГруппыПользователей.ВсеПользователи
		 Или ГруппаПриемник = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда
			
			СтрокаДействие = НСтр("ru = 'исключен из группы'");
			НаименованиеГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаИсточник, "Наименование");
			
		ИначеЕсли Перемещение Тогда
			СтрокаДействие = НСтр("ru = 'перемещен в группу'");
		Иначе
			СтрокаДействие = НСтр("ru = 'включен в группу'");
		КонецЕсли;
		
		СообщениеПользователю = НСтр("ru = '""%1"" %2 ""%3""'");
		
	ИначеЕсли КоличествоПользователей > 1 Тогда
		
		СтрокаОбъект = Формат(КоличествоПользователей, "ЧДЦ=0") + " "
			+ ПользователиСлужебныйКлиентСервер.ПредметЦелогоЧисла(КоличествоПользователей,
				"", НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'"));
		
		Если ГруппаПриемник = Справочники.ГруппыПользователей.ВсеПользователи Тогда
			СтрокаДействие = НСтр("ru = 'исключены из группы'");
			НаименованиеГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГруппаИсточник, "Наименование");
			
		ИначеЕсли Перемещение Тогда
			СтрокаДействие = НСтр("ru = 'перемещены в группу'");
		Иначе
			СтрокаДействие = НСтр("ru = 'включены в группу'");
		КонецЕсли;
		СообщениеПользователю = НСтр("ru = '%1 %2 ""%3""'");
	КонецЕсли;
	
	Если СообщениеПользователю <> Неопределено Тогда
		СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеПользователю,
			СтрокаОбъект, СтрокаДействие, НаименованиеГруппы);
	КонецЕсли;
	
	УведомлениеПользователя.Сообщение = СообщениеПользователю;
	УведомлениеПользователя.ЕстьОшибки = Ложь;
	
	Возврат УведомлениеПользователя;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ТекстДляАдминистратора (БСП)

ПриФормированииСообщения (БСП)

СобытиеЖурналаРегистрации (БСП)

СобытиеЖурналаРегистрацииПротокол (БСП)

СформироватьСообщение (БСП)

ПодготовитьСообщениеПоШаблону (БСП)

TurboConf ИР адаптер 2.53