Почему при добавлении новых значений в перечисление через расширение они не отображаются в тонком клиенте?

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

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

Причина 1: Статическое заполнение свойства «Список выбора»

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

Выясним, как это работает: когда список пуст, система при открытии формы динамически считывает все доступные значения перечисления (включая те, что добавлены расширением). Если же разработчик типового решения или вы сами ранее добавили туда конкретные элементы вручную, этот список становится статичным. Новые значения из расширения в него «сами по себе» не попадут.

Для решения этой задачи выполним следующие действия:

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

Причина 2: Свойства заимствованного перечисления и «Назначение»

Рассмотрим механизм заимствования объектов. Когда мы добавляем новые значения в перечисление через расширение, крайне важно проверить свойства самого объекта в расширении. Посмотрим на свойство Назначение (Purpose). Для того чтобы расширение корректно дополняло существующий объект, оно должно иметь значение Дополнение.

Также проанализируем заполнение синонимов. В 1С:Предприятии, особенно в Тонком клиенте, пользователь видит не имя объекта, а его синоним. Если вы добавили значение в расширение, но забыли указать синоним для языка интерфейса пользователя, значение может отобразиться как пустая строка. Это часто создает иллюзию того, что данные отсутствуют, хотя физически они есть в базе.

Причина 3: Кэширование данных на стороне клиента и сервера

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

Если после обновления расширения изменения не видны, попробуем запустить программу с параметром /ClearCache. Если это не помогает, проанализируем ситуацию на стороне сервера. В некоторых случаях требуется перезапуск службы 1С:Предприятия или удаление временных файлов в каталоге srvinfo на сервере, чтобы заставить систему пересчитать состав расширений.

Причина 4: Программное формирование списка в «ПриСозданииНаСервере»

В сложных конфигурациях, таких как 1С:ERP или 1С:Комплексная автоматизация, разработчики часто прибегают к программному управлению интерфейсом. Разберем пример, когда список доступных значений перечисления ограничивается кодом в процедуре ПриСозданииНаСервере.

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


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

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


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

Причина 5: Безопасный режим расширения

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

Причина 6: Использование механизмов БСП (Библиотеки Стандартных Подсистем)

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

Разберем, что делать в этом случае: часто помогает запуск обработки ОбновлениеВспомогательныхДанных или простое обновление конфигурации с параметром /UpdateDBCfg. Также проверьте, не используются ли в форме механизмы «подбора», которые обращаются к программным модулям, не учитывающим изменения в расширении.

Причина 7: Режим совместимости платформы

Не стоит забывать и про режим совместимости основной конфигурации. Работа с метаданными в расширениях существенно дорабатывалась от версии к версии (8.3.10, 8.3.14 и далее). Если ваша база работает в старом режиме совместимости, возможности расширений могут быть ограничены на уровне ядра платформы. Проанализируем версию совместимости: если она ниже 8.3.10, работа с перечислениями через расширения может сопровождаться ошибками отображения в Тонком клиенте.

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

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

← На главную