Почему заимствованный ПВХ не отображается в типе «Характеристика» в расширении 1С?

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

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

Анализ причин ограничения

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

Решение проблемы: обновление платформы и изменение режима совместимости

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

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

Рассмотрим, почему это критически важно. В режиме совместимости 8.3.19 при попытке расширить ПВХ вы получите ошибку вида: Изменение типа в расширениях недопустимо в режиме совместимости 8.3.19 и ниже. Это ограничение платформы, которое нельзя обойти «кодом», не меняя настроек самого расширения.

Важные рекомендации при работе с расширениями

Прежде чем приступать к отключению режима совместимости, проанализируйте риски:

Альтернативные подходы к архитектуре

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

  1. Программная реализация связей. Вы можете отказаться от использования типа данных Характеристика в реквизитах. Вместо этого реализуйте логику связки «Вид — Значение» через обычные реквизиты (например, ВидХарактеристики и ЗначениеХарактеристики) и управляйте процессом выбора значений программно через событие ПриИзменении или ОбработкаВыбора в форме объекта.
  2. Создание собственного ПВХ. Если расширение вводит новый функционал, который не обязан «дружить» с типовыми характеристиками, создайте свой собственный ПланВидовХарактеристик непосредственно в расширении. Это самый чистый путь, который гарантированно будет работать без ошибок платформы.

Разберем пример кода для программной реализации фильтрации, если вы решите не использовать встроенный механизм:


Процедура ЗначениеХарактеристикиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    // Программный выбор типа данных в зависимости от выбранного вида характеристики
    ТипЗначения = ОбщегоНазначения.ПолучитьТипЗначенияХарактеристики(Объект.ВидХарактеристики);
    // Открытие формы выбора или вызов стандартного механизма для конкретного типа
    // ...
КонецПроцедуры

Мы выяснили, что основной причиной проблемы является устаревший режим совместимости платформы. Переход на версию 8.3.20+ решает задачу «из коробки», но требует внимательного отношения к архитектуре. Если же обновление невозможно, используйте программную реализацию логики характеристик, что позволит сохранить стабильность работы всей системы.

← На главную