Разработка и Конфигурация · 12 мин
Как вывести таблицу на форму 1С
Как вывести таблицу значений или табличную часть на форму 1С: реквизиты формы, динамический список, программное заполнение, настройка колонок и типичные ошибки.
Вывод таблицы на форму — одна из базовых задач при разработке в 1С:Предприятии. В зависимости от задачи таблица может быть табличной частью документа, реквизитом формы типа «ТаблицаЗначений», динамическим списком или деревом значений. У каждого варианта свой механизм привязки данных, свои ограничения и типовые ошибки.
Главный принцип управляемых форм 1С: элемент формы не хранит данные сам, а лишь отображает реквизит формы через свойство «ПутьКДанным». Поэтому последовательность всегда одинаковая: сначала создаётся реквизит нужного типа, затем на форму добавляется элемент «Таблица», который ссылается на этот реквизит, и только потом таблица заполняется данными.
Ниже разобраны все основные способы: от простого перетаскивания табличной части в конфигураторе до программного создания колонок и заполнения таблицы значений запросом. Материал ориентирован на управляемые формы (тонкий клиент, веб-клиент), так как именно они используются в современных конфигурациях.
Какие типы таблиц можно вывести на форму
Прежде чем добавлять элементы, определите, какие данные должна показывать таблица. От этого зависит выбор реквизита и способ заполнения.
- Табличная часть объекта — данные хранятся в самом документе или справочнике и сохраняются вместе с ним. Подходит для строк документа: товары, услуги, начисления.
- Реквизит формы «ТаблицаЗначений» — временные данные, живут только пока открыта форма. Используется для подбора, промежуточных расчётов, результатов запросов.
- Динамический список — таблица на основе запроса к базе данных с автоматическим обновлением, отбором и сортировкой. Основной способ показа списков документов и справочников.
- Дерево значений — иерархический вариант таблицы, например для группировки товаров по категориям.
Сравнение вариантов
Данные сохраняются в базе вместе с объектом; не подходит для временных вычислений
Гибкое программное заполнение; данные теряются при закрытии формы
Автоматическое обновление и отборы; сложнее редактировать данные вручную
Иерархическое отображение; требует заполнения с вложенными строками
Вывод табличной части документа или справочника
Самый простой сценарий: у объекта уже есть табличная часть, и её нужно показать на форме. Откройте форму объекта в конфигураторе, в правой панели «Реквизиты» раскройте узел «Объект» и найдите нужную табличную часть, например «Товары».
Перетащите табличную часть мышью в дерево элементов формы (левая панель) в нужное место — обычно после полей шапки. Конфигуратор предложит добавить колонки автоматически. Платформа создаст элемент «Таблица» со свойством ПутьКДанным = «Объект.Товары» и подчинённые элементы-колонки для каждого реквизита.
Если форма создаётся с нуля через конструктор, достаточно отметить табличную часть флажком — колонки будут добавлены автоматически. После этого данные загружаются и сохраняются платформой без единой строки кода: при записи документа строки табличной части уходят в базу вместе с ним.
Вывод таблицы значений через реквизит формы
Когда данные не привязаны к объекту (результат запроса, подбор, временный расчёт), создаётся собственный реквизит формы. В редакторе формы нажмите «Добавить реквизит», задайте имя, например «ТаблицаПодбора», и выберите тип «ТаблицаЗначений».
Затем выделите созданный реквизит и добавьте в него колонки — это делается кнопкой «Добавить колонку реквизита» в панели реквизитов. Для каждой колонки укажите имя и тип: «Строка», «Число», «СправочникСсылка.Номенклатура» и т.д. Тип колонки важен: он определяет, какое поле ввода появится при редактировании ячейки.
После этого перетащите реквизит «ТаблицаПодбора» в дерево элементов формы. Платформа создаст таблицу с колонками, соответствующими колонкам реквизита. Форма готова к отображению, осталось заполнить данные.
- 1Откройте форму в конфигураторе и добавьте реквизит типа «ТаблицаЗначений»
- 2Добавьте в реквизит колонки с нужными именами и типами
- 3Перетащите реквизит в дерево элементов формы — появится элемент «Таблица»
- 4Проверьте, что у элемента таблицы ПутьКДанным указывает на ваш реквизит
- 5Заполните таблицу данными в коде и откройте форму для проверки
Программное заполнение таблицы данными
Заполнение выполняется в модуле формы, обычно в обработчике «ПриСозданииНаСервере» или по команде пользователя. Ключевой момент: в управляемой форме реквизит «ТаблицаЗначений» на сервере представлен объектом ДанныеФормыКоллекция, поэтому для загрузки готовой таблицы значений используется метод ЗначениеВРеквизитФормы().
Типовой код заполнения из запроса выглядит так:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Товар,
| Номенклатура.Код КАК Код
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
ТЗ = Запрос.Выполнить().Выгрузить();
ЗначениеВРеквизитФормы(ТЗ, "ТаблицаПодбора");
КонецПроцедуры
Имена колонок выгружаемой таблицы значений должны совпадать с именами колонок реквизита формы — иначе данные не попадут в нужные колонки или вызовут ошибку. Если таблица заполняется построчно в цикле, можно обращаться к реквизиту напрямую: НоваяСтрока = ТаблицаПодбора.Добавить(); НоваяСтрока.Товар = ТекущийТовар;
Для заполнения по команде (например, кнопка «Обновить») создайте команду формы, перетащите её на командную панель таблицы и в обработчике повторите тот же код заполнения.
Программное создание таблицы и колонок
Иногда структура таблицы заранее неизвестна — например, колонки зависят от настроек пользователя или периода (месяцы как колонки). В этом случае реквизиты и элементы создаются кодом в «ПриСозданииНаСервере».
&НаСервере
Процедура СоздатьТаблицуПрограммно()
// 1. Добавляем реквизит-таблицу
Добавляемые = Новый Массив;
Добавляемые.Добавить(Новый РеквизитФормы("ТаблицаДанных",
Новый ОписаниеТипов("ТаблицаЗначений")));
ИзменитьРеквизиты(Добавляемые);
// 2. Добавляем колонки реквизита
Колонки = Новый Массив;
Колонки.Добавить(Новый РеквизитФормы("Товар",
Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(150)), "ТаблицаДанных"));
Колонки.Добавить(Новый РеквизитФормы("Сумма",
Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)), "ТаблицаДанных"));
ИзменитьРеквизиты(Колонки);
// 3. Создаём элемент формы
Таблица = Элементы.Добавить("ТаблицаДанных", Тип("ТаблицаФормы"));
Таблица.ПутьКДанным = "ТаблицаДанных";
ПолеТовар = Элементы.Добавить("ТаблицаДанныхТовар", Тип("ПолеФормы"), Таблица);
ПолеТовар.ПутьКДанным = "ТаблицаДанных.Товар";
ПолеТовар.Вид = ВидПоляФормы.ПолеВвода;
КонецПроцедуры
Обратите внимание на порядок: сначала ИзменитьРеквизиты(), и только потом добавление элементов. Элементы нельзя привязать к реквизитам, которых ещё не существует. Также программно созданные реквизиты и элементы не сохраняются между вызовами сервера в том виде, как статические, — пересоздавать их нужно при каждом создании формы.
Вывод данных через динамический список
Для отображения данных из базы с отборами и сортировкой удобнее динамический список. Добавьте реквизит формы типа «ДинамическийСписок», в его свойствах включите «Произвольный запрос» и задайте текст запроса. Перетащите реквизит на форму — колонки создадутся по полям запроса.
Преимущества: платформа сама обновляет данные при изменениях в базе, поддерживает стандартные отборы, сортировку по клику на заголовок и постраничную загрузку больших объёмов. Недостаток — данные динамического списка нельзя редактировать прямо в ячейках, только открывая объект.
Отборы удобно задавать через параметры запроса: Список.Параметры.УстановитьЗначениеПараметра("Склад", ВыбранныйСклад); — список обновится автоматически без перезаполнения вручную.
Настройка внешнего вида таблицы
После вывода таблицы обычно требуется доработать её представление. Основные свойства элемента «Таблица»:
- Шапка и подвал — свойства «Шапка» и «Подвал» включают отображение заголовков и итогов. Для показа суммы по колонке у колонки реквизита заполните свойство «ПутьКДаннымПодвала» или включите автоподсчёт.
- ТолькоПросмотр — запрещает редактирование, полезно для таблиц-отчётов.
- Командная панель — у таблицы есть автозаполняемая панель с кнопками «Добавить», «Удалить», «Найти»; её можно отключить или дополнить своими командами.
- Условное оформление — через настройку формы или кодом можно раскрасить строки по условию, например выделить красным отрицательные остатки.
- Высота и ширина — свойства «Высота», «РастягиватьПоВертикали» управляют поведением при изменении размера окна.
Для итогов по числовой колонке таблицы значений достаточно в конфигураторе у колонки реквизита установить флажок в поле «Итог» (свойство «ПутьКДаннымПодвала») — платформа посчитает сумму автоматически при изменении строк.
Если таблица должна только показывать данные без редактирования, сразу ставьте свойство ТолькоПросмотр = Истина и убирайте лишние кнопки командной панели. Это избавит пользователей от случайных изменений и вопросов «почему не сохранилось» — ведь реквизит формы не записывается в базу сам по себе.
Типичные ошибки и проверка результата
Большинство проблем при выводе таблицы сводится к нескольким повторяющимся причинам:
Проверку результата выполняйте в таком порядке: сначала откройте форму в режиме предприятия и убедитесь, что таблица видна и колонки на месте. Затем проверьте заполнение — данные соответствуют запросу, типы колонок корректны (ссылки открываются, числа выровнены вправо). После этого протестируйте интерактивность: добавление и удаление строк, отборы, итоги в подвале.
Как проверить результат
Таблица отображается с колонками и заголовками
Таблицы нет или она пустая — проверить ПутьКДанным
Строки соответствуют результату запроса
Колонки пустые — имена полей не совпадают с колонками реквизита
Сумма пересчитывается при изменении строк
Подвал пуст — не настроен ПутьКДаннымПодвала у колонки
Частые вопросы
Можно ли вывести таблицу на форму без изменения конфигурации?
Нет, добавление элементов на форму требует доработки в конфигураторе. Альтернатива без изменения конфигурации — внешняя обработка с собственной формой, где таблица создаётся так же, через реквизит формы. Внешние обработки подключаются через механизм дополнительных отчётов и обработок и не меняют типовую конфигурацию.
Чем таблица значений на форме отличается от динамического списка?
Таблица значений — это данные в памяти формы: их можно свободно редактировать, но они не обновляются сами и исчезают при закрытии. Динамический список — это «живой» запрос к базе: он обновляется при изменении данных, поддерживает отборы, но не позволяет редактировать строки напрямую.
Почему при заполнении возникает ошибка «Недопустимое значение» в ЗначениеВРеквизитФормы?
Чаще всего типы или имена колонок выгружаемой таблицы не совпадают с колонками реквизита формы. Проверьте, что в запросе используются псевдонимы, совпадающие с именами колонок, и что состав колонок идентичен — лишние колонки в выгрузке тоже могут вызывать проблемы.
Как вывести иерархические данные?
Используйте реквизит типа «ДеревоЗначений» и элемент формы «Таблица» с видом «Дерево». Заполнение выполняется через вложенные строки: у каждой строки дерева есть коллекция «Строки», куда добавляются дочерние элементы. Для загрузки готового дерева применяется тот же метод ЗначениеВРеквизитФормы.
Как сделать, чтобы данные таблицы сохранялись вместе с документом?
Для этого данные должны храниться в табличной части объекта, а не в реквизите формы. Если данные сначала собираются во временную таблицу, при записи перенесите их в табличную часть документа: очистите табличную часть и загрузите строки методом Загрузить() в обработчике ПередЗаписью или по команде.
Можно ли вывести одну и ту же таблицу на несколько закладок формы?
Да, один реквизит может быть связан с несколькими элементами формы на разных страницах — у каждого элемента укажите один и тот же ПутьКДанным. Учтите, что это будут два представления одних данных: изменения в одной таблице отобразятся в другой.
Что важно запомнить
Таблица на форме 1С всегда отображает реквизит формы через свойство ПутьКДанным. Создайте реквизит (табличная часть, ТаблицаЗначений или ДинамическийСписок), перетащите его в элементы формы, затем заполните данными через ЗначениеВРеквизитФормы или запрос. Проверяйте совпадение имён колонок и правильную последовательность при программном создании.