Почему в расширении 1С не видно добавленное перечисление и как это исправить

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

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

Выясним основную причину проблемы

Проанализируем механику работы расширений. Главная причина, по которой вы не видите добавленное перечисление в списке типов, заключается в иерархии метаданных. Платформа строго следит за целостностью данных. Если вы заимствовали объект из основной конфигурации (например, справочник Номенклатура) в расширение и пытаетесь добавить ему новый реквизит, либо изменить тип существующего реквизита основной конфигурации на тип из расширения — система этого не позволит.

Логика платформы такова: основная конфигурация «не знает» о существовании расширения. Если расширение будет отключено или удалено, реквизит основной конфигурации, ссылающийся на тип из расширения, станет некорректным (битым). Поэтому в окне выбора типа данных объекты расширения просто фильтруются, чтобы разработчик не мог создать потенциально опасную связь.

Способ 1: Создание реквизита непосредственно в расширении

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

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

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

Способ 2: Использование примитивных типов и списка выбора

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

Выполним следующие шаги:

  1. Создайте в расширении реквизит с типом Число или Строка.
  2. В свойствах поля формы для этого реквизита установите режим СписокВыбора.
  3. Заполните список выбора необходимыми значениями (например, «0 — Значение1», «1 — Значение2»).

Пример программного заполнения списка выбора в модуле формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЭлементСписка = Элементы.МоеПолеВыбора.СписокВыбора;
    ЭлементСписка.Добавить(0, "Первый вариант");
    ЭлементСписка.Добавить(1, "Второй вариант");
КонецПроцедуры

Способ 3: Проверка режима совместимости и фильтров

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

ЗначениеВыбора = Перечисления.МоеНовоеПеречислениеИзРасширения.Значение1;

Если вы пытаетесь обратиться к нему через Метаданные основной конфигурации, вы получите Неопределено.

Особенности работы с версией платформы 8.3.18.1208

Рассмотрим специфику версии, указанной в вопросе. Версия 8.3.18 имеет свои особенности в работе с кэшем метаданных. Если вы создали объект, но он не появляется в списках, попробуйте выполнить следующие «оздоровительные» действия:

  1. Сохраните изменения в расширении и закройте конфигуратор.
  2. Очистите временные файлы (кэш) текущего пользователя 1С.
  3. Запустите конфигуратор снова и проверьте наличие объекта.

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

Подведем итоги

Мы выяснили, что «невидимость» перечисления — это не ошибка, а защитный механизм 1С. Чтобы успешно использовать новые типы данных:

Следуя этим правилам, вы обеспечите стабильную работу системы и избежите проблем при обновлении или отключении модификаций.

← На главную