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