Как программно установить привязки элементов на обычной форме в 1С 8.2 (на примере БП 2.0)?

Программист 1С v8.3 (Обычные формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

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

Основы программного добавления элементов

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


// Добавляем надпись
ЭлементФормы_НадписьПроверен = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Надпись"), "ФР_НадписьПроверен", Истина);
ЭлементФормы_НадписьПроверен.Заголовок = "Проверен";
ЭлементФормы_НадписьПроверен.Верх = 100; // Условные координаты
ЭлементФормы_НадписьПроверен.Лево = 600;
ЭлементФормы_НадписьПроверен.Ширина = 50;
ЭлементФормы_НадписьПроверен.Высота = 19;

// Добавляем флажок
ЭлементФормы_Проверен = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Флажок"), "ФР_Проверен", Истина);
ЭлементФормы_Проверен.Верх = 100;
ЭлементФормы_Проверен.Лево = 585;
ЭлементФормы_Проверен.Ширина = 15;
ЭлементФормы_Проверен.Высота = 19;

Важный нюанс: как только мы вызываем метод УстановитьПривязку хотя бы для одной границы, автоматический механизм расстановки привязок 1С для этого элемента отключается. Это означает, что нам придется вручную определить поведение для всех четырех сторон (Лево, Право, Верх, Низ), иначе элемент может повести себя непредсказуемо.

Синтаксис метода УстановитьПривязку

Для управления поведением границ используется метод УстановитьПривязку. Рассмотрим его параметры подробнее, так как именно здесь кроется большинство ошибок:

УстановитьПривязку(Граница, ПривязываемыйЭлемент, ПривязываемаяГраница, ПропорциональныйЭлемент, ПропорциональнаяГраница)

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

Разбор практического решения

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


// Установим привязку левой границы флажка к правой границе существующего элемента (например, Флажок1)
ЭлементФормы_Проверен.УстановитьПривязку(ГраницаЭлементаУправления.Лево, ЭлементыФормы.Флажок1, ГраницаЭлементаУправления.Право);

// Установим привязку правой границы флажка к правой границе всей формы
// Для этого вторым параметром передаем Неопределено или саму форму
ЭлементФормы_Проверен.УстановитьПривязку(ГраницаЭлементаУправления.Право, ЭтаФорма, ГраницаЭлементаУправления.Право);

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

Типичные ошибки и последствия

Выясним, что произойдет, если привязки настроены неверно. Как справедливо отмечено в обсуждении, форма будет вести себя «отвратно» при изменении масштаба. Основные проблемы:

Алгоритм правильной настройки привязок

Рассмотрим пошагово правильную последовательность действий при программной работе с формой:

  1. Определяем контейнер: Решаем, куда добавляем элемент (на саму форму или на конкретную страницу Панели).
  2. Задаем геометрию: Указываем Лево, Верх, Ширина и Высота. Это критически важно сделать до вызова привязок.
  3. Настраиваем горизонталь: Устанавливаем привязки для Лево и Право.
  4. Настраиваем вертикаль: Устанавливаем привязки для Верх и Низ.
  5. Проверяем растягивание: Для текстовых полей и таблиц не забываем устанавливать свойства РастягиватьПоГоризонтали = Истина.

Посмотрим на пример из сообщения №12 с исправлениями. Автор пытался привязать надпись к табличной части и панели. Чтобы это работало корректно, код должен выглядеть примерно так:


// Привязываем левый край к табличной части
ЭлементФормы_НадписьПреверен.УстановитьПривязку(ГраницаЭлементаУправления.Лево, ЭлементыФормы.ЗатратыВТабличнойЧасти, ГраницаЭлементаУправления.Лево);

// Привязываем правый край (жестко к левому, чтобы ширина не менялась при растягивании)
ЭлементФормы_НадписьПреверен.УстановитьПривязку(ГраницаЭлементаУправления.Право, ЭлементыФормы.ЗатратыВТабличнойЧасти, ГраницаЭлементаУправления.Лево);

// Привязываем верх к верхней границе табличной части (чтобы двигалась вместе с ней)
ЭлементФормы_НадписьПреверен.УстановитьПривязку(ГраницаЭлементаУправления.Верх, ЭлементыФормы.ЗатратыВТабличнойЧасти, ГраницаЭлементаУправления.Верх);

// Привязываем низ к верху той же табличной части
ЭлементФормы_НадписьПреверен.УстановитьПривязку(ГраницаЭлементаУправления.Низ, ЭлементыФормы.ЗатратыВТабличнойЧасти, ГраницаЭлементаУправления.Верх);

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

Советы по отладке

Поскольку в коде трудно визуализировать итоговый результат, рекомендуем использовать проверенный прием: временно назначьте создаваемому элементу яркий цвет фона (например, Элемент.ЦветФона = ЦветаСтиля.ОсобыйТекст). Запустите программу и попробуйте потянуть за края окна. Если цветной прямоугольник ведет себя адекватно — не исчезает и не перекрывает важные данные — значит, привязки настроены верно.

И помните, что механизм УстановитьПривязку является наследием платформы 8.2 для обычных форм. В управляемых формах (8.3) этот процесс автоматизирован через группы и свойства растягивания, но знание классических методов необходимо для поддержки исторических конфигураций, таких как БП 2.0 или УПП 1.3.

← На главную