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