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