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