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