Почему не появляется разделитель между таблицами управляемой формы 1С и как это исправить?

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

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

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

Причины поведения платформы 1С

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

  1. Непосредственная смежность растягиваемых элементов: разделитель создается только между двумя объектами, расположенными непосредственно друг за другом в иерархии элементов. Поле ввода, находящееся между таблицами, сбивает эту последовательность.
  2. Способность к вертикальному растяжению: разделитель имеет смысл только между элементами, у которых свойство РастягиватьПоВертикали находится в значении Истина или Авто. Обычные поля ввода по умолчанию имеют фиксированную высоту (1 строка) и не растягиваются по вертикали, что блокирует алгоритм автосоздания разделителя.
  3. Влияние видимости: когда у промежуточного поля свойство Видимость принимает значение Ложь, платформа полностью исключает его из расчетов компоновки. В результате таблицы становятся иерархически смежными, и разделитель мгновенно восстанавливается.

Способ 1. Иерархическая группировка элементов (основное решение)

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

Суть метода заключается в структурировании дерева элементов формы с помощью стандартных групп (без отображения рамки и заголовков):

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

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

Способ 2. Вынос поля из зоны разделения таблиц

Рассмотрим альтернативные варианты размещения элементов, если добавление дополнительных групп нежелательно или усложняет структуру формы:

  1. Перенос в командную панель таблицы: промежуточный реквизит можно разместить в командной панели верхней или нижней таблицы, задействовав командную панель как шапку табличной части.
  2. Перемещение в шапку или подвал формы: если поле ввода не привязано строго к контексту конкретной таблицы, его рационально вынести в общую шапку формы над табличным блоком или под него.
  3. Использование сворачиваемой группы: поместим промежуточные реквизиты в специальную группу со свойством Поведение = Свертываемая. При сворачивании такой группы таблицы снова окажутся смежными, и между ними появится разделитель.

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

← На главную