Как в измерении регистра в расширении получить тип СправочникСсылка?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке расширений конфигурации 1С многие специалисты сталкиваются с архитектурным ограничением: платформа не позволяет напрямую назначать тип СправочникСсылка для реквизитов или измерений объектов, созданных внутри расширения. Давайте разберем, с чем это связано и какие методы решения существуют на сегодняшний день.

Понимание природы ограничения

Основная причина заключается в изоляции метаданных. В момент проектирования расширения объекты основной конфигурации и объекты самого расширения находятся в разных областях видимости. Конфигуратор 1С стремится предотвратить циклические зависимости и ошибки типизации, поэтому накладывает строгие рамки на использование ссылочных типов, чья структура может измениться при обновлении основной конфигурации.

Решение 1: Использование определяемых типов

Наиболее корректным и поддерживаемым способом является использование механизма ОпределяемыеТипы. Если перед вами стоит задача типизировать измерение регистра, следуйте этим шагам:

  1. В основной конфигурации создайте (или выберите существующий) ОпределяемыйТип, который включает все необходимые вам справочники.
  2. В расширении добавьте этот ОпределяемыйТип в расширяемые объекты.
  3. В составе определяемого типа в расширении укажите нужные справочники, в том числе и те, которые вы создали внутри самого расширения.
  4. Установите тип измерения регистра в значение этого ОпределяемогоТипа.

Этот метод считается «штатным», так как он проходит все проверки целостности платформы и не вызывает проблем при обновлении конфигурации.

Решение 2: Работа с идентификаторами объектов метаданных

Если вам требуется максимальная гибкость (например, когда тип ссылки заранее неизвестен), можно реализовать схему работы через справочник ИдентификаторыОбъектовМетаданных. Суть метода заключается в следующем:

  1. Измерение регистра хранит не саму ссылку, а УникальныйИдентификатор (UUID) и ссылку на ИдентификаторОбъектаМетаданных.
  2. В коде 1С вы программно определяете тип объекта по идентификатору и восстанавливаете ссылку.

Пример программного получения ссылки:


// Пример логики восстановления ссылки в RunTime
ТипОбъекта = ИдентификаторыОбъектовМетаданных.ПолучитьТипПоИдентификатору(Выборка.Идентификатор);
Ссылка = ОбщегоНазначения.ПолучитьСсылкуПоУникальномуИдентификатору(Выборка.UUID, ТипОбъекта);

Этот подход позволяет избежать привязки к конкретным метаданным в Конфигураторе, однако помните, что работа с такими данными в запросах может потребовать программной конвертации или использования временных таблиц.

Решение 3: Программное манипулирование метаданными (осторожно)

Существует метод принудительного изменения типа через прямое редактирование XML-файлов расширения. При выгрузке расширения в файлы, вы можете найти описание структуры измерения и вручную указать требуемый тип.

Внимание: Этот метод является опасным. После загрузки таких метаданных обратно в Конфигуратор, тип в интерфейсе может отображаться как пустой, а платформа может выдавать ошибки проверки при попытке обновления конфигурации. Мы рекомендуем использовать этот метод только для сложных интеграционных задач и только если вы полностью контролируете процесс тестирования.

Практический совет по определению типов

Если вам необходимо программно получить описание типов, включающее типы из расширения, можно использовать следующий пример функции:


Функция ПолучитьОписаниеТиповВсеСсылки(ВключаяТипыРасширений = Истина) Экспорт
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку("<TypeDescription xmlns=""http://v8.1c.ru/8.1/data/core"">
    | <TypeSet xmlns:cc=""http://v8.1c.ru/8.1/data/enterprise/current-config"">cc:AnyRef</TypeSet>
    |</TypeDescription>");
    Результат = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
    // Дополнительная логика для учета расширений
    Возврат Результат;
КонецФункции

Заключение

Подводя итоги, важно помнить, что архитектура расширений 1С постоянно эволюционирует. Рекомендуем отдавать предпочтение определяемым типам как наиболее стабильному решению. Избегайте использования «хаков» с XML, если задача может быть решена штатными средствами конфигуратора, так как это минимизирует риски возникновения «технического долга» при будущих обновлениях платформы или конфигурации.

← На главную