При разработке расширений конфигурации многие разработчики сталкиваются с тем, что при попытке добавить новый реквизит в объект метаданных (например, в Документ или Справочник) в списке доступных типов данных отсутствует тип Характеристика. В этой статье мы подробно разберем, почему возникает такая ситуация и какими способами можно добиться нужного результата, не нарушая целостность конфигурации.
Прежде всего, давайте проанализируем, почему платформа ведет себя подобным образом. Тип Характеристика — это не примитивный тип данных, а составной ссылочный тип, который напрямую связан с ПланВидовХарактеристик. В архитектуре расширений существуют строгие правила проверки типов, направленные на обеспечение безопасности данных. Когда мы создаем новый реквизит в расширении, конфигуратор может ограничивать выбор типов, чтобы предотвратить создание ссылочных структур, которые могут стать некорректными при обновлении основной конфигурации.
Часто проблема кроется в настройках Режима совместимости расширения. Если ваш режим совместимости жестко зафиксирован на устаревших версиях платформы, функциональные возможности расширений будут ограничены.
Расширения конфигурации.Режим совместимости.Не использовать.Разработчики фирмы 1С постоянно совершенствуют механизм расширений. Как показывает практика, во многих версиях платформы (начиная с 8.3.16 и выше, а в 8.3.18+ особенно) функционал работы с характеристиками был расширен. Если вы используете устаревшую версию платформы, первым делом рекомендуется обновить её до актуального релиза. Это самый надежный способ получить штатную поддержку типов Характеристика в расширениях.
Существуют ситуации, когда тип Характеристика технически возможен, но конфигуратор его «скрывает» или выдает ошибку. В таких случаях некоторые разработчики используют прямой ввод типа через конфигуратор (в свойствах реквизита можно попробовать задать путь к ПланВидовХарактеристикСсылка вручную). Однако будьте осторожны: это может привести к очистке данных. Если вы пошли на такой шаг, будьте готовы к тому, что существующие данные потребуют восстановления.
В случае потери данных, вам поможет использование инструментов для загрузки данных в формате XML. Рассмотрим пример того, как можно восстановить данные с помощью обработки Выгрузка и загрузка данных XML:
// Пример логики обработки загрузки для корректной записи характеристик
ОбъектыXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
СписокОбъктовXTDO = Новый СписокЗначений;
Для каждого Свойство Из ОбъектыXDTO.свойства Цикл
Если Свойство.ВерхняяГраница = 1 Тогда
СписокОбъктовXTDO.Добавить(ОбъектыXDTO.получить(Свойство), СтрЗаменить(Свойство.имя, "DocumentObject_", ""));
иначе
Список = ОбъектыXDTO.ПолучитьСписок(Свойство);
Для каждого Объект Из Список Цикл
СписокОбъктовXTDO.Добавить(Объект, СтрЗаменить(Свойство.имя, "DocumentObject_", ""));
КонецЦикла;
КонецЕсли;
КонецЦикла;
Этот метод позволяет программно перенести значения в реквизиты, которые стали недоступны после изменения структуры метаданных в расширении.
Если правка реквизита в расширении вызывает критические ошибки или проблемы с обновлениями, пересмотрите подход к реализации задачи:
Форму. В реквизитах формы выбор типа Характеристика доступен всегда.Регистр сведений в расширении, где будет храниться связь вашего объекта (документа или справочника) с необходимым значением характеристики. Это наиболее безопасный и гибкий метод, который не затрагивает структуру метаданных основной конфигурации.Подводя итог, можно сказать, что решение зависит от конкретной версии платформы и требуемой задачи. Всегда начинайте с проверки режима совместимости и обновления платформы, а в случае возникновения сложностей — используйте создание дополнительных регистров для хранения данных.