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