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