ЗначенияСвойств (БСП)

Автор: 1С
ОбщийМодуль.УправлениеСвойствами
БСП

Значения свойств. Возвращает значения дополнительных свойств объектов.

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

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

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

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

ЗначениеСвойстваБИП (БСП)

УстановитьЗначениеСвойстваБИП (БСП)

ЗначениеСвойства (БСП)

ДополнительныеЗначенияСвойства (БСП)

СвойствоСтруктуры (БСП)

Работа со значением свойства

ПолучитьСписокЗначенийСвойств (БСП)

ТипЗначенияСодержитЗначенияСвойств (БСП)

1С Менеджер конфигураций