При разработке программных модулей в «1С:Предприятие» часто возникает задача получить пустую ссылку определенного типа данных (например, справочника или документа), имея в распоряжении только объект типа ОписаниеТипов. Рассмотрим подробно, какими способами можно решить эту задачу, а также проанализируем основные нюансы и ограничения платформы.
Самый простой и эффективный способ получить пустую ссылку из объекта ОписаниеТипов — вызов его встроенного метода ПривестиЗначение() без передачи параметров.
Если ОписаниеТипов содержит только один ссылочный тип (например, СправочникСсылка.Номенклатура), то метод возвращает значение по умолчанию для этого типа, то есть пустую ссылку.
Рассмотрим пример кода:
// Создаем описание типов для одного справочника
ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
// Получаем пустую ссылку метода ПривестиЗначение()
ПустаяСсылка = ОписаниеТипа.ПривестиЗначение();
В результате в переменной ПустаяСсылка будет находиться значение СправочникСсылка.Номенклатура.ПустаяСсылка(), что полностью решает поставленную задачу без обращения к менеджерам объектов.
Проанализируем поведение метода ПривестиЗначение(), если объект ОписаниеТипов описывает составной тип (содержит несколько разных типов данных):
ПривестиЗначение() без параметров платформа вернет значение по умолчанию для первого типа из списка описанных типов.Неопределено, вызов метода вернет Неопределено.Если вам необходимо обнулить значение или получить пустую ссылку для конкретного типа из составного ОписаниеТипов, разберем по шагам следующий алгоритм:
ОписаниеТипов.Типы().ОписаниеТипов, передав массив из одного этого типа.ПривестиЗначение() у временного объекта.Посмотрим на пример реализации данного алгоритма:
// Массив всех типов из исходного ОписанияТипов
МассивТипов = ИсходноеОписаниеТипов.Типы();
Для Каждого ТекущийТип Из МассивТипов Цикл
// Создаем массив с одним конкретным типом
МассивОдногоТипа = Новый Массив;
МассивОдногоТипа.Добавить(ТекущийТип);
// Формируем временное описание типов для одиночного типа
ВременноеОписание = Новый ОписаниеТипов(МассивОдногоТипа);
// Получаем пустую ссылку или значение по умолчанию для текущего типа
ПустаяСсылкаТипа = ВременноеОписание.ПривестиЗначение();
КонецЦикла;
Если известен конкретный Тип из массива типов, получить пустую ссылку можно через обращение к менеджеру соответствующего объекта метаданных.
Рассмотрим следующий пример кода:
// Получаем первый тип из ОписанияТипов
ИскомыйТип = ИсходноеОписаниеТипов.Типы()[0];
// Находим объект метаданных по типу
ОбъектМетаданных = Метаданные.НайтиПоТипу(ИскомыйТип);
Если ОбъектМетаданных <> Неопределено Тогда
ИмяОбъекта = ОбъектМетаданных.Имя;
// Получаем пустую ссылку через менеджер справочников
ПустаяСсылка = Справочники[ИмяОбъекта].ПустаяСсылка();
КонецЕсли;
Выясним частую ошибку разработчиков: в «1С:Предприятие» нельзя получить пустую ссылку через конструкцию Новый(Тип). Конструктор `Новый` предназначен для создания системных и универсальных объектов (таких как Структура, Массив, Соответствие). Попытка вызвать `Новый` для ссылочного типа (например, СправочникСсылка...) приведет к вызову ошибки выполнения программы.