Как добавить и сделать видимым реквизит в форме списка через расширение в 1С

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

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

Добавление формы и реквизита в расширение

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

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

Настройка пользовательской видимости

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

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

  1. Откроем свойства нужного элемента формы в расширении.
  2. Найдем пункт Пользовательская видимость и нажмем ссылку «Открыть».
  3. Убедимся, что для всех ролей (или для нужных нам) установлены флажки в колонке «Видимость».
  4. Важно: Даже если вы работаете под полными правами (Администратор), платформа проверяет настройки видимости для каждой конкретной роли, указанной в метаданных.

Проблема динамического списка: свойство «Использовать всегда»

Если форма списка базируется на ДинамическомСписке, платформа старается оптимизировать SQL-запрос. Если поле не выведено на форму визуально, 1С может просто не выбирать эти данные из базы. Рассмотрим ситуацию, когда мы пытаемся программно управлять видимостью элемента, но данных в нем нет.

Чтобы гарантировать наличие данных, необходимо найти основной реквизит формы (обычно это Список), зайти в его настройки и в списке полей для нужного реквизита Организация взвести флаг Использовать всегда. Это заставит платформу включать поле в запрос к СУБД независимо от визуального состояния элементов формы.

Влияние функциональных опций

Выясним причину, по которой даже программная установка видимости может игнорироваться. В типовых конфигурациях (таких как ERP, УТ или БП) многие реквизиты (например, Подразделение или Организация) жестко привязаны к Функциональным опциям.

Проанализируем алгоритм проверки:

  1. Найдем реквизит в дереве метаданных основной конфигурации.
  2. Перейдем на закладку Функциональные опции в свойствах реквизита.
  3. Если реквизит включен в какую-либо опцию (например, «МногофирменныйУчет»), то при выключенной константе поле будет недоступно на уровне платформы.

Если функциональная опция отключает реквизит, то код ЭтаФорма.Элементы.Организация.Видимость = Истина; не сработает, так как объект управления фактически исключен из состава формы на этапе компиляции.

Программное управление видимостью в расширении

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


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Устанавливаем безусловную видимость элемента
    Попытка
        ЭлементОрганизация = Элементы.Найти("Организация");
        Если ЭлементОрганизация <> Неопределено Тогда
            ЭлементОрганизация.Видимость = Истина;
        КонецЕсли;
    Исключение
        // Обработка исключения, если элемент не найден
    КонецПопытки;
КонецПроцедуры

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

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

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

Разберем, как сбросить эти настройки:

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

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

Итоги и рекомендации

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

← На главную