Разработка интерфейсов на обычных формах в 1С часто преподносит сюрпризы, особенно когда дело касается нетипового отображения данных. Одной из наиболее трудоемких задач является построение сложных, многоуровневых шапок табличных полей. Стандартный механизм позиционирования колонок отлично справляется с простыми двухстрочными таблицами, но начинает вести себя непредсказуемо, как только требуется создать асимметричную трехстрочную структуру.
Рассмотрим классическую проблему: нам необходимо расположить элементы так, чтобы под общей шапкой находились две подчиненные колонки, одна из которых делится еще на две строки, а рядом располагалась независимая одиночная колонка. При попытке настроить такое расположение стандартными свойствами Положение мы сталкиваемся с тем, что правая колонка либо уходит вниз, либо перескакивает на самый верхний уровень, искажая всю сетку таблицы. Выясним причину такого поведения платформы и детально разберем три практических метода решения этой задачи.
Для начала проанализируем, как работает алгоритм размещения колонок в обычных формах 1С. Платформа использует жесткую сетку, которая рассчитывается автоматически на основе свойств порядка обхода и свойства Положение (возможные значения: Новая колонка, На следующей строке, В той же колонке).
Когда мы пытаемся создать трехуровневую иерархию, алгоритм позиционирования не может самостоятельно сопоставить высоту сложной вертикальной группы ячеек с высотой одиночной соседней колонки. Платформа пытается "втиснуть" одиночную колонку в один из существующих уровней сетки. В результате мы получаем либо пустоты, либо неконтролируемый сдвиг элементов управления.
Это самый быстрый и изящный способ решить задачу в рамках существующего табличного поля без изменения логики работы с данными. Суть метода заключается в искусственном выравнивании сетки за счет добавления невидимых (пустых) колонок, которые заполнят пустующие уровни под нашей одиночной колонкой.
Разберем по шагам, как реализовать этот метод на практике:
ВысотаШапки в значение 3. Это критически важно, так как при стандартной высоте в 1 или 2 уровня элементы просто перекроют друг друга.Положение: для первой строки подчиненных колонок укажите На следующей строке, а для последующих строк внутри этой группы — В той же колонке или На следующей строке в зависимости от требуемой вложенности.Данные пустым.ОтображатьВШапке. Это скроет их границы в верхней части таблицы, визуально объединив их с вышестоящей колонкой.Положение в значение В той же колонке и расположите их строго под вашей одиночной колонкой.ИзменятьРазмер.Чтобы фальш-колонки выглядели максимально естественно и не выделялись на фоне реальных данных, мы можем программно скрыть их границы и очистить оформление. Для этого воспользуемся событием ПриВыводеСтроки табличного поля.
Рассмотрим пример кода, который делает вспомогательные ячейки полностью невидимыми для пользователя:
Процедура ТабличноеПолеПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Укажем имена наших вспомогательных колонок
ФальшКолонки = Новый Массив;
ФальшКолонки.Добавить("ФальшКолонка1");
ФальшКолонки.Добавить("ФальшКолонка2");
Для Каждого ИмяКолонки Из ФальшКолонки Цикл
Ячейка = ОформлениеСтроки.Ячейки[ИмяКолонки];
Ячейка.ОтображатьТекст = Ложь;
Ячейка.ОтображатьФлажок = Ложь;
Ячейка.ОтображатьКартинку = Ложь;
// Окрашиваем фон ячейки в цвет фона таблицы для слияния
Ячейка.ЦветФона = ЭлементыФормы.ТабличноеПоле.ЦветФона;
КонецЦикла;
КонецПроцедуры
Благодаря этому коду пустые выравнивающие ячейки полностью сольются с общим фоном таблицы, создавая иллюзию идеально объединенной по вертикали структуры.
Если структура вашей таблицы крайне динамична или требует еще более сложного визуального оформления, стандартное табличное поле может стать ограничением. В таких ситуациях отличной альтернативой выступает ТабличныйДокумент.
Многие разработчики отказываются от использования табличного документа на формах ввода, считая, что в нем сложно реализовать привычные функции добавления и удаления строк. Однако это заблуждение. Современные механизмы платформы позволяют превратить табличный документ в полноценное и удобное рабочее пространство.
Разберем, как сделать работу с табличным документом интерактивной:
СодержитЗначение в значение Истина и укажите необходимый тип данных (например, Число, Строка или СправочникСсылка). Это превратит ячейку в полноценное поле ввода.ПараметрРасшифровки.Выбор для табличного документа. При клике на интерактивные зоны считывайте значение расшифровки и выполняйте нужные действия с данными.Посмотрим на пример реализации добавления новой строки через обработку расшифровки табличного документа:
Процедура ТабличныйДокументВыбор(Элемент, Область, СтандартнаяОбработка)
Если Область.ПараметрРасшифровки = "ДобавитьСтроку" Тогда
СтандартнаяОбработка = Ложь;
// Вызываем функцию добавления новой строки в наш внутренний массив или ТЗ
ДобавитьНовуюСтрокуДанных();
// Перерисовываем табличный документ с учетом новых данных
ОбновитьИнтерфейсТабличногоДокумента();
ИначеЕсли Область.ПараметрРасшифровки = "УдалитьТекущуюСтроку" Тогда
СтандартнаяОбработка = Ложь;
УдалитьТекущуюСтрокуДанных(Область.Строка);
ОбновитьИнтерфейсТабличногоДокумента();
КонецЕсли;
КонецПроцедуры
Если архитектура вашего решения позволяет использовать управляемые формы (например, конфигурация работает в режиме совместимости или поддерживает гибридный режим), то данную задачу лучше всего решить именно там.
В управляемом интерфейсе разработчик полностью избавлен от необходимости "играть" со свойствами размещения отдельных элементов. Позиционирование колонок реализуется через специальный объект — Группа колонок.
Проанализируем последовательность действий в управляемых формах:
Группу колонок.Группировка. Установите значение В ячейке (для расположения элементов друг под другом в рамках одной колонки) или Горизонтальная / Вертикальная в зависимости от требуемой структуры шапки.Мы рассмотрели три принципиально разных подхода к решению проблемы сложной верстки в 1С. Метод "фальш-колонок" идеально подойдет для быстрой доработки существующих обычных форм без изменения логики хранения данных. Использование табличного документа предоставит вам максимальную свободу в дизайне, если форма носит скорее отчетно-аналитический характер. Переход на управляемые формы — это наиболее современное и надежное решение, которое навсегда избавит вас от ручной настройки пикселей и сетки таблиц.