Почему реквизит не отображается на форме при значении Видимость = Истина?

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

В практике разработки на платформе 1С:Предприятие 8.3 (особенно в типовых конфигурациях вроде УТ 11, ERP или КА) программисты часто сталкиваются с загадочным поведением элементов формы. Ситуация выглядит так: вы добавили колонку в таблицу или поле на форму, в конфигураторе свойство Видимость включено, отладчик в режиме 1С:Предприятие также бодро рапортует, что Элементы.ИмяПоля.Видимость = Истина, но пользователь в упор не видит этого поля. Более того, при попытке «Установить стандартные настройки» в окне «Изменить форму» поле исчезает снова.

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

Причина 1: Пользовательская видимость в конфигураторе

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

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

Как это работает:

  1. Если для роли пользователя снята галочка в колонке «Видимость», то при первом открытии формы (или при сбросе настроек на стандартные) элемент будет скрыт.
  2. При этом свойство Видимость в программном коде всё равно может быть Истина. Это происходит потому, что программная видимость управляет «физической» возможностью отображения, а пользовательская — настройкой «по умолчанию» для конкретного профиля прав.
  3. Кнопка «Установить стандартные настройки» в режиме предприятия возвращает форму именно к тому состоянию, которое задано в этой матрице в конфигураторе.

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

Причина 2: Функциональные опции (ФО)

Если пользовательская видимость включена, но поля все равно нет, следующим шагом проверим Функциональные опции. В 1С:УТ 11 это фундаментальный механизм управления интерфейсом.

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

Разберем, как проверить это влияние:

  1. Найдите реквизит объекта (не формы!), который отображается в колонке.
  2. Посмотрите список «Входит в функциональные опции» через контекстное меню поиска ссылок в конфигураторе.
  3. Проверьте значение константы, к которой привязана эта функциональная опция, в режиме «Все функции» (или «Функции для технического специалиста»).

Причина 3: Программное изменение формы в процедуре ПриСозданииНаСервере

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Вызов общего модуля, который настраивает видимость колонок 
    // в зависимости от настроек пользователя или параметров учета
    УправлениеТорговлейСервер.УстановитьВидимостьОбъектов(ЭтаФорма);
    
    // Или прямое управление
    Элементы.ТоварыНоменклатураАртикул.Видимость = ПолучитьНастройкуВидимостиАртикула();
    
КонецПроцедуры

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

Причина 4: Влияние родительских групп

Часто программисты забывают, что видимость — это иерархическое свойство. Разберем пример: колонка Артикул находится внутри группы колонок ГруппаНоменклатура. Если у ГруппаНоменклатура свойство Видимость установлено в Ложь, то никакие манипуляции с дочерним элементом Артикул не заставят его появиться на экране.

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

Элементы.ТоварыНоменклатураАртикул.Родитель.Видимость

Причина 5: Условное оформление формы

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

Проверьте вкладку «Условное оформление» в окне редактирования формы в конфигураторе. Также не забудьте про программную установку оформления:


ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыНоменклатураАртикул");

// Условие может быть всегда Истина
ЭлементУсловия = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Количество");
ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементУсловия.ПравоеЗначение = 0;

Причина 6: Расширения конфигурации

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

Причина 7: «Залипание» настроек в хранилище данных

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

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

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

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

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

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

← На главную