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

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

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

Понимание проблемы: почему простое добавление не работает?

Когда мы создаем табличное поле на форме и привязываем его к реквизиту типа ТаблицаЗначений, платформа 1С фиксирует структуру этого реквизита на этапе конфигурации. Программное добавление колонки в ЭлементыФормы.ТабличноеПоле.Колонки создает лишь визуальное отображение на форме, но «под капотом» у источника данных — реквизита формы — этой колонки нет. В результате данные не могут быть записаны в структуру объекта. Чтобы решить эту проблему, разберем два основных подхода.

Способ №1: Использование независимой таблицы значений

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

  1. Создайте на форме элемент управления ТабличноеПоле, но не указывайте его «Данные» в свойствах (или оставьте пустым).
  2. В модуле формы создайте переменную для хранения таблицы, например: Перем МояТаблица;
  3. В процедуре ПриОткрытии или при инициализации данных создайте структуру таблицы:

МояТаблица = Новый ТаблицаЗначений;
МояТаблица.Колонки.Добавить("Номенклатура");
МояТаблица.Колонки.Добавить("ЦенаБазовая", Новый ОписаниеТипов("Число"));
// Добавляем динамические колонки
Для Каждого Стр Из СписокЦен Цикл
    МояТаблица.Колонки.Добавить("Цена" + Стр.Идентификатор, Новый ОписаниеТипов("Число"));
КонецЦикла;

После подготовки структуры таблицы, мы привязываем её к элементу формы:


ЭлементыФормы.ТабличноеПоле1.Значение = МояТаблица;
ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();

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

Способ №2: Метод «Болванок» (фиксированная структура)

Если по каким-то причинам вы хотите сохранить привязку к реквизиту формы, воспользуйтесь методом заранее созданных колонок. Это классический прием для обычных форм.

Суть метода заключается в том, что в конфигураторе вы заранее создаете максимально возможное количество колонок (например, Цена1, Цена2, ..., Цена10). В режиме работы пользователя вы управляете только их видимостью и заголовками.

Разберем алгоритм действий:

  1. Создайте в табличной части реквизита 10 колонок-болванок.
  2. При открытии формы циклом проходите по списку доступных видов цен.
  3. Для каждого вида цены делайте колонку видимой:

Колонка = ЭлементыФормы.ТабличноеПоле.Колонки["Цена" + Индекс];
Колонка.Видимость = Истина;
Колонка.Заголовок = ТекущийВидЦены.Наименование;

Этот метод считается более «безопасным» для стандартных отчетов, так как структура данных формы остается неизменной, а управление интерфейсом сводится к настройке свойств элементов Колонки.

Важные рекомендации по оптимизации

При работе с динамическими таблицами всегда учитывайте следующие моменты:

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

← На главную