ИменаРеквизитовИсточникаСодержащихСубъект (БСП)

Автор: 1С
ОбщийМодуль.ЗащитаПерсональныхДанныхПовтИсп
БСП

Имена реквизитов источника содержащих субъект. Возвращает полные имена реквизитов объекта метаданных содержащего персональные данные по его полному имени.

// Возвращает полные имена реквизитов объекта метаданных содержащего персональные данные по его полному имени.
//
// Параметры:
//	ИмяИсточника - Строка - полное имя источника метаданных. Например: "Справочник.ФизическиеЛица".
//
// Возвращаемое значение
//	Массив - массив строк. Например: "ФизическоеЛицо" или "ФизическиеЛица.ФизическоеЛицо".
//
Функция ИменаРеквизитовИсточникаСодержащихСубъект(ИмяИсточника) Экспорт
	
	ИменаРеквизитовСодержащихСубъект = Новый Массив;
	МетаданныеПоТипамСубъекта = ЗащитаПерсональныхДанныхПовтИсп.МетаданныеПоТипамСубъекта();
	
	МетаданныеИсточника = Метаданные.НайтиПоПолномуИмени(ИмяИсточника);
	ИсточникЭтоРегистр = ОбщегоНазначения.ЭтоРегистр(МетаданныеИсточника);
	ТипыСсылкиИсточника = ?(ИсточникЭтоРегистр, Новый Массив, МетаданныеИсточника.СтандартныеРеквизиты.Ссылка.Тип.Типы());
	ИсточникИмеетВладельца = ОбщегоНазначения.ЭтоСправочник(МетаданныеИсточника) И МетаданныеИсточника.Владельцы.Количество() > 0;
	
	ПоляСведений = ИменаПолейСведенийОПерсональныхДанныхОбъекта(ИмяИсточника);
	ПоляДоступа = ПоляСведений.ПоляДоступа;
	ПоляРегистрации = ПоляСведений.ПоляРегистрации;
	
	ИменаТЧСодержащихСведения = Новый Массив;
	
	Если Не ИсточникЭтоРегистр Тогда
		
		ИменаТабличныхЧастей = Новый Массив;
		ТабличныеЧасти = МетаданныеИсточника.ТабличныеЧасти;
		
		Для Каждого ТабличнаяЧасть Из ТабличныеЧасти Цикл
			ИменаТабличныхЧастей.Добавить(ТабличнаяЧасть.Имя);
		КонецЦикла;
		
		ИменаТЧСодержащихСведения = ИменаТЧОбъектаСодержащихСведенияОПерсональныхДанных(ИменаТабличныхЧастей, ПоляДоступа);
		
	КонецЕсли;
	
	Для Каждого ТипСубъектаИМетаданные Из МетаданныеПоТипамСубъекта Цикл
		
		ТипСубъекта = ТипСубъектаИМетаданные.Ключ;
		МетаданныеСубъекта = ТипСубъектаИМетаданные.Значение;
		
		ИменаРеквизитовИсточника = Новый Массив;
		ИменаРеквизитовТЧИсточника = Новый Соответствие;
		
		Если ИсточникЭтоРегистр Тогда
			
			ИменаИзмеренийТипа = ЗащитаПерсональныхДанных.ИменаИзмеренийРегистраПоТипу(МетаданныеИсточника, ТипСубъекта);
			ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаРеквизитовИсточника, ИменаИзмеренийТипа);
			
		Иначе
			
			Если ТипыСсылкиИсточника.Найти(ТипСубъекта) <> Неопределено Тогда
				ИменаРеквизитовИсточника.Добавить("Ссылка");
			Иначе
				
				Если ИсточникИмеетВладельца Тогда
					
					Если МетаданныеИсточника.Владельцы.Содержит(МетаданныеСубъекта) Тогда
						ИменаРеквизитовИсточника.Добавить("Владелец");
					КонецЕсли;
					
				КонецЕсли;
				
				Если ИменаРеквизитовИсточника.Количество() = 0 Тогда
					
					ИменаРеквизитовТипа = ЗащитаПерсональныхДанных.ИменаРеквизитовПоТипу(МетаданныеИсточника, ТипСубъекта);
					ОбщегоНазначенияКлиентСервер.ДополнитьМассив(ИменаРеквизитовИсточника, ИменаРеквизитовТипа);
					
				КонецЕсли;
				
			КонецЕсли;
			
			Для Каждого ИмяТабличнойЧасти Из ИменаТЧСодержащихСведения Цикл
				
				ИменаРеквизитовТЧТипа = ЗащитаПерсональныхДанных.ИменаРеквизитовТЧОбъектаПоТипу(МетаданныеИсточника, ИмяТабличнойЧасти, ТипСубъекта, Истина);
				Если ИменаРеквизитовТЧТипа.Количество() > 0 Тогда
					ИменаРеквизитовТЧИсточника.Вставить(ИмяТабличнойЧасти, ИменаРеквизитовТЧТипа);
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЕсли;
		
		Для Каждого ИмяРеквизита Из ИменаРеквизитовИсточника Цикл
			
			Если ПоляРегистрации.Найти(ИмяРеквизита) <> Неопределено Тогда
				ИменаРеквизитовСодержащихСубъект.Добавить(ИмяРеквизита);
			КонецЕсли;
			
		КонецЦикла;
		
		Для Каждого ТЧИРеквизиты Из ИменаРеквизитовТЧИсточника Цикл
			
			ИменаРеквизитовТЧ = ТЧИРеквизиты.Значение;
			Для Каждого ИмяРеквизита Из ИменаРеквизитовТЧ Цикл
				
				Если ПоляРегистрации.Найти(ИмяРеквизита) <> Неопределено Тогда
					ИменаРеквизитовСодержащихСубъект.Добавить(ИмяРеквизита);
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЦикла;
		
		Если ИменаРеквизитовСодержащихСубъект.Количество() > 0 Тогда
			Прервать;
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Новый ФиксированныйМассив(ИменаРеквизитовСодержащихСубъект);
	
КонецФункции

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

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

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

ИменаИсточниковПерсональныхДанных (БСП)

СтруктураПоМенеджеруЗаписи (БСП)

ИменаРеквизитовПоТипу (БСП)

ИмяСобытияОповещенияОЗагрузки (БСП)

ПриЗаполненииСпискаРеквизитовИсточникаСДатамиДляНапоминания (БСП)

ИменаРеквизитовТЧОбъектаПоТипу (БСП)

ИмяРеквизитаОрганизация (БСП)

TurboConf - расширение Конфигуратора 1С