Как обеспечить сквозное горизонтальное выравнивание элементов на управляемых формах 1С

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

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

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

Способ 1. Создание структуры из горизонтальных групп (строчный подход)

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

Выполним следующие шаги для реализации этого метода:

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

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

Способ 2. Использование декораций-заглушек для сохранения высоты

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

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

  1. В каждую колонку рядом с основным реквизитом добавим элемент вида Декорация — Надпись.
  2. Оставим заголовок декорации пустым.
  3. В коде формы создадим процедуру, которая будет управлять видимостью пары «Реквизит — Декорация».

Рассмотрим пример кода для управления видимостью поля СчетПлательщика:


&НаСервере
Процедура УстановитьВидимостьРеквизита(ИмяРеквизита, ЗначениеВидимости)
    
    // Управляем основным полем
    Элементы[ИмяРеквизита].Видимость = ЗначениеВидимости;
    
    // Управляем декорацией-заглушкой, которая держит место
    ИмяДекорации = "Декорация_" + ИмяРеквизита;
    Если Элементы.Найти(ИмяДекорации) <> Неопределено Тогда
        Элементы[ИмяДекорации].Видимость = Не ЗначениеВидимости;
    КонецЕсли;
    
КонецПроцедуры

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

Способ 3. Замена скрытия управлением доступностью или цветом

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

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

Вариант Б: «Невидимый» текст. Это более хитрый прием. Мы можем использовать Условное оформление формы, чтобы сделать текст элемента невидимым. Проанализируем настройки:

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

Способ 4. Группа с видом «Управление составом»

В современных версиях платформы 1С v8.3 у групп появилось свойство ВидГруппы. Если мы выберем вариант, имитирующий таблицу, платформа будет стараться выравнивать элементы во вложенных группах друг относительно друга.

Посмотрим на настройки свойств:

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

Способ 5. Использование элемента формы «Таблица» (для сложных случаев)

Если количество реквизитов велико (как в нашем примере — 15 и более), а требования к выравниванию жесткие, можно рассмотреть использование элемента формы Таблица. Это радикальный шаг, но он дает 100% гарантию сквозного выравнивания.

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

  1. Создадим на форме таблицу значений (или реквизит объекта типа список) с колонками ЛевоеЗначение и ПравоеЗначение.
  2. Добавим таблицу на форму.
  3. Чтобы таблица не выглядела как классический список, отключим у нее:
    • Отображение заголовков (Шапка = Ложь).
    • Командную панель.
    • Линии сетки.
    • Полосы прокрутки.

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

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

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

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

← На главную