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