При разработке расширений для конфигураций 1С разработчики часто сталкиваются с ситуацией, когда требуется использовать заимствованный ПланВидовХарактеристик (ПВХ) в качестве типа данных для реквизита. Однако при попытке выбора типа «Характеристика» в расширении, заимствованный ПВХ в списке доступных объектов попросту отсутствует. Давайте разберемся, почему это происходит и как решить данную задачу.
Основная сложность заключается в том, что тип Характеристика — это сложный составной тип данных, который жестко связан с конфигурацией метаданных. В старых версиях платформы (8.3.19 и ниже) механизм расширений имел строгие ограничения на изменение структуры данных, заимствованных из основной конфигурации. Платформа 1С в режиме совместимости блокирует возможность корректного отображения и использования заимствованных характеристик, так как не может гарантировать целостность ссылочных типов внутри расширения.
Для того чтобы функционал стал доступен, необходимо выполнить следующие шаги:
Рассмотрим, почему это критически важно. В режиме совместимости 8.3.19 при попытке расширить ПВХ вы получите ошибку вида: Изменение типа в расширениях недопустимо в режиме совместимости 8.3.19 и ниже. Это ограничение платформы, которое нельзя обойти «кодом», не меняя настроек самого расширения.
Прежде чем приступать к отключению режима совместимости, проанализируйте риски:
ПланВидовХарактеристик. Необходимо убедиться, что все объекты (справочники, документы), которые входят в состав этого ПВХ как «Тип значения характеристик», также доступны в расширении.Если вы ограничены в обновлении платформы или режима совместимости, попробуйте рассмотреть следующие архитектурные приемы:
Характеристика в реквизитах. Вместо этого реализуйте логику связки «Вид — Значение» через обычные реквизиты (например, ВидХарактеристики и ЗначениеХарактеристики) и управляйте процессом выбора значений программно через событие ПриИзменении или ОбработкаВыбора в форме объекта.ПланВидовХарактеристик непосредственно в расширении. Это самый чистый путь, который гарантированно будет работать без ошибок платформы.Разберем пример кода для программной реализации фильтрации, если вы решите не использовать встроенный механизм:
Процедура ЗначениеХарактеристикиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Программный выбор типа данных в зависимости от выбранного вида характеристики
ТипЗначения = ОбщегоНазначения.ПолучитьТипЗначенияХарактеристики(Объект.ВидХарактеристики);
// Открытие формы выбора или вызов стандартного механизма для конкретного типа
// ...
КонецПроцедуры
Мы выяснили, что основной причиной проблемы является устаревший режим совместимости платформы. Переход на версию 8.3.20+ решает задачу «из коробки», но требует внимательного отношения к архитектуре. Если же обновление невозможно, используйте программную реализацию логики характеристик, что позволит сохранить стабильность работы всей системы.