Как расположить колонки в табличном поле обычной формы 1С при сложной многоуровневой шапке?

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

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

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

Почему стандартная верстка ломается на сложных структурах?

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

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

Решение 1. Метод "фальш-колонок" (визуальное выравнивание)

Это самый быстрый и изящный способ решить задачу в рамках существующего табличного поля без изменения логики работы с данными. Суть метода заключается в искусственном выравнивании сетки за счет добавления невидимых (пустых) колонок, которые заполнят пустующие уровни под нашей одиночной колонкой.

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

  1. Добавьте в табличную часть или таблицу значений все необходимые рабочие колонки.
  2. Для правильной настройки высоты всей шапки перейдите в свойства Табличного поля и установите свойство ВысотаШапки в значение 3. Это критически важно, так как при стандартной высоте в 1 или 2 уровня элементы просто перекроют друг друга.
  3. Для первой подчиненной группы колонок настройте свойство Положение: для первой строки подчиненных колонок укажите На следующей строке, а для последующих строк внутри этой группы — В той же колонке или На следующей строке в зависимости от требуемой вложенности.
  4. Теперь перейдем к выравниванию правой одиночной колонки. Чтобы она не "уплывала" вниз, нам нужно создать под ней пустые ячейки-заглушки на нижних уровнях.
  5. Добавьте две новые вспомогательные колонки (назовем их фальш-колонками). Для каждой из них в свойствах оставьте поле Данные пустым.
  6. Очистите текст заголовка у фальш-колонок и снимите флажок ОтображатьВШапке. Это скроет их границы в верхней части таблицы, визуально объединив их с вышестоящей колонкой.
  7. Установите для этих фальш-колонок свойство Положение в значение В той же колонке и расположите их строго под вашей одиночной колонкой.
  8. Чтобы пользователи не могли случайно нарушить структуру шапки, обязательно установите фиксированную ширину для всех колонок и отключите свойство ИзменятьРазмер.

Программная маскировка фальш-колонок через обработчики событий

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

Рассмотрим пример кода, который делает вспомогательные ячейки полностью невидимыми для пользователя:


Процедура ТабличноеПолеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    // Укажем имена наших вспомогательных колонок
    ФальшКолонки = Новый Массив;
    ФальшКолонки.Добавить("ФальшКолонка1");
    ФальшКолонки.Добавить("ФальшКолонка2");
    
    Для Каждого ИмяКолонки Из ФальшКолонки Цикл
        Ячейка = ОформлениеСтроки.Ячейки[ИмяКолонки];
        Ячейка.ОтображатьТекст = Ложь;
        Ячейка.ОтображатьФлажок = Ложь;
        Ячейка.ОтображатьКартинку = Ложь;
        // Окрашиваем фон ячейки в цвет фона таблицы для слияния
        Ячейка.ЦветФона = ЭлементыФормы.ТабличноеПоле.ЦветФона;
    КонецЦикла;
КонецПроцедуры

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

Решение 2. Использование Табличного документа для интерактивного ввода

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

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

Разберем, как сделать работу с табличным документом интерактивной:

  1. Разработайте макет табличного документа с нужной структурой шапки. Здесь вы можете объединять ячейки как угодно по вертикали и горизонтали, рисовать любые границы и использовать любые цвета.
  2. Для ячеек, предназначенных для ввода данных, установите свойство СодержитЗначение в значение Истина и укажите необходимый тип данных (например, Число, Строка или СправочникСсылка). Это превратит ячейку в полноценное поле ввода.
  3. Чтобы реализовать добавление и удаление строк, добавьте в макет специальные области-кнопки (например, ячейки с текстом "Добавить строку" или "Удалить"). Назначьте этим ячейкам уникальные значения в свойстве ПараметрРасшифровки.
  4. Напишите обработчик события Выбор для табличного документа. При клике на интерактивные зоны считывайте значение расшифровки и выполняйте нужные действия с данными.

Посмотрим на пример реализации добавления новой строки через обработку расшифровки табличного документа:


Процедура ТабличныйДокументВыбор(Элемент, Область, СтандартнаяОбработка)
    Если Область.ПараметрРасшифровки = "ДобавитьСтроку" Тогда
        СтандартнаяОбработка = Ложь;
        // Вызываем функцию добавления новой строки в наш внутренний массив или ТЗ
        ДобавитьНовуюСтрокуДанных();
        // Перерисовываем табличный документ с учетом новых данных
        ОбновитьИнтерфейсТабличногоДокумента();
    ИначеЕсли Область.ПараметрРасшифровки = "УдалитьТекущуюСтроку" Тогда
        СтандартнаяОбработка = Ложь;
        УдалитьТекущуюСтрокуДанных(Область.Строка);
        ОбновитьИнтерфейсТабличногоДокумента();
    КонецЕсли;
КонецПроцедуры

Решение 3. Кардинальный подход — переход на Управляемые формы

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

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

Проанализируем последовательность действий в управляемых формах:

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

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

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

← На главную