Как скрыть поле в управляемой форме 1С, сохранив за ним пустое место

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

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

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

Метод 1: Использование декорации-заглушки

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

Рассмотрим пошагово, как это реализовать:

  1. Добавим на форму элемент вида Декорация — Надпись.
  2. Разместим её непосредственно рядом (или в той же группе) со скрываемым полем.
  3. В свойстве Текст декорации не указываем ничего или вставляем неразрывный пробел (символ с кодом 160), чтобы платформа не «схлопнула» пустую строку.
  4. Установим декорации такие же параметры ширины и высоты, как у скрываемого поля (если они заданы явно).

Теперь разберем программную часть. Чтобы управление было бесшовным, нам необходимо синхронизировать видимость. Посмотрим на пример кода:


&НаКлиенте
Процедура УправлениеВидимостью(ПоказыватьПоле)
    // Скрываем или показываем основное поле
    Элементы.НомерТелефона.Видимость = ПоказыватьПоле;
    
    // Инвертируем видимость для декорации-пустышки
    Элементы.ДекорацияПустышка.Видимость = НЕ ПоказыватьПоле;
КонецПроцедуры

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

Метод 2: Трюк с прозрачностью через условное оформление

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

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

  1. Перейдем на вкладку «Условное оформление» в редакторе формы.
  2. Добавим новое правило.
  3. В оформлении выберем следующие параметры:
    • ЦветТекста — выберите цвет фона формы (обычно «Белый» или системный цвет «Фон формы»).
    • ЦветФона — аналогично фону формы.
    • ЦветРамки — аналогично фону формы.
  4. В условии укажем ситуацию, при которой поле должно «исчезнуть».
  5. В оформляемых полях выберем наше целевое поле.

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

Метод 3: Использование Группы-Страницы

Рассмотрим более сложный, но надежный способ резервирования места — использование элементов типа Группа — Страницы. Этот метод идеально подходит, если вам нужно скрыть целый блок полей.

Разберем алгоритм действий:

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

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


&НаКлиенте
Процедура СкрытьБлокДанных()
    // Переключаемся на пустую страницу
    Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ПустаяСтраница;
КонецПроцедуры

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

Метод 4: Свойства Доступность и ТолькоПросмотр

Иногда задача «скрыть, чтобы никто не занимал место» может быть решена через изменение состояния поля, а не его полную невидимость. Рассмотрим вариант, когда поле остается видимым, но выглядит «пустым».

Если мы установим Элементы.ИмяПоля.Доступность = Ложь, поле станет серым, но сохранит свои размеры. Если же нам нужно, чтобы оно выглядело именно как пустое пространство, мы можем комбинировать очистку значения и блокировку:


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

Метод 5: Фиксация размеров группы

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

Важное примечание: Этот метод работает нестабильно в разных версиях платформы 1С v8.3, так как алгоритм компоновки Managed Form приоритетнее пользовательских установок высоты. Поэтому рекомендуется всегда использовать комбинированный подход с декорацией-заглушкой как наиболее гарантированный результат.

Заключение и рекомендации

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

Выберем наиболее подходящий путь:

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

← На главную