К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как в 1С программно добавить группу колонок

Как программно добавить группу колонок в таблицу формы 1С: методы Добавить, ГруппаКолонок, ГруппировкаКолонок, примеры кода, типичные ошибки и проверка результата.

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

Программное создание элемента выполняется в серверном контексте, обычно в обработчике ПриСозданииНаСервере или в отдельной процедуре формирования колонок. Используется метод Элементы.Добавить(), где первым параметром передаётся имя нового элемента, вторым — тип Тип("ГруппаФормы"), третьим — родительский элемент, то есть таблица формы.

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

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

Где и когда создавать группу колонок программно

Программное создание элементов формы доступно только на сервере. Поэтому весь код размещается в директиве &НаСервере — в обработчике ПриСозданииНаСервере или в процедуре, вызываемой из него. Из клиентского контекста напрямую добавлять элементы нельзя: потребуется серверный вызов.

Типовые ситуации, когда группа колонок нужна именно программно:

  • состав колонок зависит от настроек пользователя или вида операции;
  • колонки создаются по данным динамического списка, таблицы значений или внешнего файла;
  • одна и та же форма используется для разных режимов с разной структурой таблицы;
  • нужно объединить логически связанные колонки (например, «Количество», «Цена», «Сумма») под общим заголовком «Расчёт».

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

Пошаговое создание группы колонок

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

Порядок действий
  1. 1
    Определите таблицу формы-родителя, например Элементы.Товары
  2. 2
    Создайте группу: Элементы.Добавить("ГруппаРасчет", Тип("ГруппаФормы"), Элементы.Товары)
  3. 3
    Установите Вид = ВидГруппыФормы.ГруппаКолонок и заголовок группы
  4. 4
    Добавьте колонки типа ПолеФормы, указывая группу как родителя
  5. 5
    Проверьте отображение в режиме предприятия

Минимальный рабочий код:

&НаСервере

Процедура СоздатьГруппуКолонок()

// 1. Создаём группу внутри таблицы "Товары"

Группа = Элементы.Добавить("ГруппаРасчет", Тип("ГруппаФормы"), Элементы.Товары);

Группа.Вид = ВидГруппыФормы.ГруппаКолонок;

Группа.Заголовок = "Расчёт";

Группа.Группировка = ГруппировкаКолонок.Горизонтальная;

// 2. Добавляем колонки внутрь группы

КолонкаКоличество = Элементы.Добавить("ТоварыКоличество", Тип("ПолеФормы"), Группа);

КолонкаКоличество.Вид = ВидПоляФормы.ПолеВвода;

КолонкаКоличество.ПутьКДанным = "Объект.Товары.Количество";

КолонкаСумма = Элементы.Добавить("ТоварыСумма", Тип("ПолеФормы"), Группа);

КолонкаСумма.Вид = ВидПоляФормы.ПолеВвода;

КолонкаСумма.ПутьКДанным = "Объект.Товары.Сумма";

КонецПроцедуры

Обратите внимание на ПутьКДанным: он указывает на реквизит данных формы, а не на элемент. Если реквизит тоже создаётся программно, его нужно добавить заранее через ИзменитьРеквизиты(), иначе привязка не сработает.

Настройка группировки и отображения

Свойство Группировка определяет, как колонки располагаются внутри группы. От него зависит итоговая вёрстка таблицы.

Варианты группировки колонок

Горизонтальная

Колонки идут подряд слева направо под общим заголовком. Стандартный вариант для объединения связанных полей.

Вертикальная

Колонки размещаются друг над другом в одной ячейке. Подходит для компактного показа, например количество над суммой.

ВЯчейке

Несколько полей в одной ячейке строки. Используется редко, требует аккуратной настройки отображения.

БезОбъединения

Группа существует логически, но колонки визуально не объединяются. Полезно для программного управления видимостью сразу нескольких колонок.

Дополнительно полезны свойства ОтображатьЗаголовок (скрывает общий заголовок группы), ОтображатьВШапке и ФиксацияВТаблице — последнее позволяет закрепить группу колонок слева при горизонтальной прокрутке широкой таблицы.

Если заголовок группы не задан, платформа покажет пустую шапку над объединёнными колонками. Это выглядит как ошибка вёрстки, поэтому заголовок лучше заполнять всегда, даже если планируется его скрыть.

Программное добавление колонок в уже существующую группу

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

&НаСервере

Процедура ДобавитьКолонкуВГруппу(ИмяКолонки, ПутьКДанным)

Группа = Элементы.Найти("ГруппаРасчет");

Если Группа = Неопределено Тогда

Возврат; // группы нет — добавлять некуда

КонецЕсли;

НоваяКолонка = Элементы.Добавить(ИмяКолонки, Тип("ПолеФормы"), Группа);

НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;

НоваяКолонка.ПутьКДанным = ПутьКДанным;

КонецПроцедуры

Проверка через Элементы.Найти() обязательна: если группа отсутствует (например, её удалили при доработке формы), обращение напрямую Элементы.ГруппаРасчет вызовет ошибку исполнения и форма не откроется.

Перемещение существующих колонок в группу

Иногда колонки уже есть в таблице (созданы в конфигураторе), а объединить их в группу нужно программно — например, по условию. Для этого используется метод Элементы.Переместить(), который меняет родителя элемента.

Элементы.Переместить(Элементы.ТоварыЦена, ГруппаРасчет);

Элементы.Переместить(Элементы.ТоварыСумма, ГруппаРасчет);

Порядок перемещения определяет порядок колонок внутри группы: элемент встаёт в конец списка подчинённых. Если нужна конкретная позиция, третьим параметром Переместить() передаётся элемент, перед которым следует разместить перемещаемый.

Учтите ограничение: переместить можно только элементы одной таблицы. Перенести колонку из одной таблицы формы в другую нельзя — потребуется удалить её и создать заново с новым родителем и путём к данным.

Проверка результата и типичные ошибки

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

Контрольные точки

Как проверить результат

Заголовок группы в шапке таблицы
Норма

Общий заголовок отображается над объединёнными колонками

Тревожный признак

Пустая область шапки или заголовок отсутствует

Данные в колонках группы
Норма

Значения заполнены и редактируются

Тревожный признак

Колонки пустые — неверный ПутьКДанным

Порядок колонок
Норма

Колонки идут в ожидаемой последовательности

Тревожный признак

Порядок нарушен — проверьте очерёдность добавления

Типичные ошибки
01
Не установлено свойство Вид = ВидГруппыФормы.ГруппаКолонок — группа создаётся как обычная группа формы и ломает вёрстку таблицы
02
Колонки добавлены в таблицу, а не в группу — родитель указан неверно, группировка не работает
03
ПутьКДанным ссылается на несуществующий реквизит — колонка пустая или форма не открывается
04
Добавление выполняется на клиенте — ошибка недоступности метода, нужен серверный контекст
05
Повторное добавление элемента с тем же именем при повторном вызове процедуры — ошибка дублирования

Отдельная ловушка — повторное выполнение кода. Если процедура создания колонок вызывается не только в ПриСозданииНаСервере, но и, например, при изменении настроек, перед добавлением удаляйте ранее созданные элементы через Элементы.Удалить() или проверяйте их наличие.

FAQ

Можно ли создать группу колонок в обычной форме (не управляемой)?

В обычных формах используется другой объект — табличное поле с коллекцией Колонки, и понятия «группа колонок» там нет в том же виде. Объединение колонок под общим заголовком в обычных формах недоступно штатно; при необходимости стоит рассмотреть перевод формы на управляемый режим.

Как скрыть или показать всю группу колонок сразу?

Установите свойство Видимость у самой группы: Элементы.ГруппаРасчет.Видимость = Ложь. Все вложенные колонки скроются вместе с ней, изменять видимость каждой по отдельности не требуется.

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

Чаще всего неверно указан ПутьКДанным или реквизит формы не создан. Для таблицы объекта путь выглядит как Объект.Товары.Сумма, для реквизита формы типа «ТаблицаЗначений» — ИмяРеквизита.ИмяКолонки. Проверьте, что реквизит существует и путь указан без опечаток.

Можно ли вложить одну группу колонок в другую?

Да, платформа допускает вложенные группы колонок: родителем новой группы указывается другая группа с видом «ГруппаКолонок». На практике глубокую вложенность лучше избегать — шапка таблицы становится многоуровневой и трудной для восприятия.

Как удалить программно созданную группу вместе с колонками?

Достаточно вызвать Элементы.Удалить(Элементы.ГруппаРасчет) — вложенные колонки удалятся вместе с родителем. Реквизиты формы при этом не удаляются; если они тоже создавались динамически, уберите их через ИзменитьРеквизиты().

Работает ли добавление группы в расширении конфигурации?

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

Итог

Что важно запомнить

Группа колонок создаётся на сервере методом Элементы.Добавить с типом ГруппаФормы и обязательной установкой Вид = ВидГруппыФормы.ГруппаКолонок. Колонки добавляются с указанием группы как родителя и корректного пути к данным. Проверяйте уникальность имён, контекст исполнения и заполнение данных после внедрения.