К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как добавить таблицу на форму 1С

Как добавить таблицу на форму в 1С: табличная часть, таблица значений и динамический список. Пошаговая инструкция, код, ошибки и проверка результата.

Таблица на форме 1С — один из самых частых элементов интерфейса: через неё пользователь вводит товары в документе, просматривает список сотрудников или анализирует остатки. Способ добавления таблицы зависит от того, откуда берутся данные: из табличной части объекта, из таблицы значений, создаваемой программно, или из запроса к базе данных. Ниже разобраны все три сценария для управляемых форм, которые используются в современных конфигурациях на платформе 1С:Предприятие 8.3.

Работа ведётся в конфигураторе: нужно открыть форму объекта, добавить реквизит формы подходящего типа, перетащить его в дерево элементов и настроить колонки. Ключевой принцип управляемых форм — сначала данные (реквизит), потом отображение (элемент формы). Если добавить только элемент без реквизита, таблица не будет связана с данными и останется пустой.

Перед изменением типовой конфигурации сделайте резервную копию информационной базы и по возможности дорабатывайте форму через расширение конфигурации — это сохранит возможность обновления. Все примеры ниже применимы к управляемым формам; для обычных форм (старые конфигурации на 8.2) логика похожа, но элементы добавляются прямо в редакторе формы без разделения на реквизиты и дерево элементов.

Выбор типа таблицы под задачу

В управляемой форме табличные данные выводятся тремя основными способами, и выбор определяет весь дальнейший порядок работы. Табличная часть объекта подходит, когда данные хранятся в самом документе или справочнике — например, перечень товаров в накладной. Таблица значений нужна для временных, рассчитываемых данных: результатов обработки, подбора, сравнения. Динамический список используют для отображения данных из базы с возможностью отбора и сортировки без загрузки всей выборки в память.

Сравнение вариантов

Табличная часть объекта

Данные хранятся в объекте и записываются вместе с ним. Подходит для строк документа. Ограничение: объект должен существовать в конфигурации и иметь табличную часть.

Таблица значений (реквизит формы)

Временные данные, заполняются программно. Гибкость максимальна, но данные живут только пока открыта форма и не сохраняются сами по себе.

Динамический список

Данные читаются из базы запросом, поддерживают отбор и сортировку. Подходит для списков и подборов. Ограничение: редактирование строк напрямую в таблице обычно недоступно.

Частая ошибка новичков — пытаться вывести список документов через таблицу значений, загружая туда тысячи строк запросом. Это замедляет открытие формы и расходует память. Для таких задач предназначен динамический список: он подгружает данные порциями по мере прокрутки.

Добавление табличной части объекта на форму

Если у документа или справочника уже есть табличная часть, вывести её на форму проще всего. Откройте форму объекта в конфигураторе, в правой части окна редактора формы найдите панель реквизитов, разверните узел «Объект» — внутри будет табличная часть со своими полями. Перетащите её мышью в дерево элементов формы в нужное место, например после поля «Комментарий».

Порядок действий
  1. 1
    Откройте конфигуратор и найдите нужный документ или справочник в дереве конфигурации
  2. 2
    Откройте основную форму объекта двойным щелчком
  3. 3
    В панели реквизитов разверните «Объект» и найдите табличную часть
  4. 4
    Перетащите табличную часть в дерево элементов формы
  5. 5
    При необходимости отключите лишние колонки в свойствах таблицы или добавьте недостающие перетаскиванием полей
  6. 6
    Сохраните конфигурацию и проверьте форму в режиме предприятия

После перетаскивания платформа автоматически создаст таблицу с колонками по всем реквизитам табличной части. Лишние колонки удалите или снимите у них видимость: в свойствах колонки есть флажок «Видимость». Ширину и положение колонок пользователь сможет менять сам, если у таблицы включён соответствующий режим — он задан по умолчанию.

Проверка результата проста: откройте документ в режиме предприятия, добавьте строку в таблицу кнопкой «Добавить» и заполните её. Если строка сохраняется вместе с документом и видна после повторного открытия — таблица работает корректно.

Таблица значений как реквизит формы

Когда данные не хранятся в объекте, а рассчитываются или загружаются на время работы с формой, создают собственный реквизит формы. В редакторе формы перейдите на вкладку «Реквизиты» и нажмите «Добавить реквизит». Укажите имя, например «ТаблицаПодбора», и тип «ТаблицаЗначений». После этого реквизит появится в списке, но без колонок — их нужно добавить отдельно.

Колонки добавляются как подчинённые реквизиты: выделите созданную таблицу в списке реквизитов, нажмите «Добавить реквизит» и задайте имя и тип каждой колонки — «Номенклатура» (СправочникСсылка.Номенклатура), «Количество» (Число), «Цена» (Число) и так далее. Состав типов важен: если колонке «Количество» назначить тип «Строка», итоги и сортировка по ней будут работать неправильно.

Затем перетащите реквизит из панели в дерево элементов формы. Платформа создаст элемент «Таблица» со связью с данными. После этого таблицу можно заполнять программно, например в обработчике «ПриСозданииНаСервере»:

bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НоваяСтрока = ТаблицаПодбора.Добавить();
    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Услуга");
    НоваяСтрока.Количество = 1;
    НоваяСтрока.Цена = 1000;
КонецПроцедуры

Для редактируемой таблицы проверьте свойство элемента «ИзменятьСоставСтрок» — оно должно быть включено, чтобы пользователь мог добавлять и удалять строки. Если таблица нужна только для просмотра, установите свойство «ТолькоПросмотр» у элемента формы, это уберёт лишние кнопки и защитит данные от случайного изменения.

Динамический список на форме

Динамический список добавляют, когда нужно показать актуальные данные из базы: список заказов, остатки, историю изменений. В панели реквизитов формы добавьте реквизит типа «ДинамическийСписок», затем в его свойствах откройте настройку запроса. Для простых случаев достаточно указать основную таблицу — например, «Документ.ЗаказКлиента»; платформа сформирует запрос автоматически.

Если нужны отборы или соединения, включите флажок «Произвольный запрос» и напишите текст запроса в конструкторе. Помните: в произвольном запросе динамического списка обязательно наличие ключевого поля (обычно «Ссылка»), иначе платформа не сможет корректно позиционироваться по строкам и работать с выделением.

Перетащите реквизит в дерево элементов, как и в предыдущих случаях. Колонки динамического списка формируются по полям запроса; лишние можно скрыть. Для отбора добавьте на форму элементы, связанные с параметрами запроса, либо используйте стандартную настройку списка, доступную пользователю через меню «Ещё».

Если динамический список должен реагировать на изменения в базе, включите у реквизита свойство «Автообновление» или обновляйте его программно через Элементы.Список.Обновить(). Без этого пользователь увидит устаревшие данные после записи документа в другом окне.
ПЗ
Практическое замечание

Настройка внешнего вида и поведения таблицы

После добавления таблицы настройте её свойства под сценарий работы пользователя. Основные параметры находятся в палитре свойств элемента формы: «ПоложениеКоманднойПанели» (где показывать кнопки добавления и удаления), «Шапка» (нужны ли заголовки колонок), «Высота» и «РастягиватьПоВертикали». Для компактных форм командную панель часто убирают, оставляя контекстное меню.

Для колонок полезны свойства «Ширина», «АвтоотметкаНезаполненного» и «Формат». Формат числовых колонок задаётся строкой вида «ЧДЦ=2» — две цифры после запятой. Если колонка должна быть недоступна для редактирования, установите ей «ТолькоПросмотр» — это надёжнее, чем обработка событий изменения.

Итоги по колонкам включаются через свойство таблицы «Подвал» и свойство колонки «ПутьКДанным» с настройкой отображения итога. Обратите внимание: итоги автоматически считаются только для табличных частей и таблиц значений; для динамического списка итоги по всей выборке платформа не считает, их нужно получать отдельным запросом.

Частые ошибки и их устранение

Самая распространённая проблема — таблица видна на форме, но пустая. Причины: реквизит не заполнен программно (для таблицы значений), у динамического списка слишком жёсткий отбор, либо элемент формы не связан с реквизитом — проверьте свойство «ПутьКДанным» элемента таблицы, там должно быть имя вашего реквизита.

Вторая типичная ситуация — ошибка «Поле объекта не обнаружено» при открытии формы. Она возникает, когда в модуле формы код обращается к реквизиту или колонке, которых нет: например, колонку удалили, а код забыли поправить. Проверяйте соответствие имён в коде и в дереве реквизитов.

Типичные ошибки
01
Добавлен элемент формы без реквизита — таблица отображается, но не хранит и не показывает данные
02
У динамического списка в произвольном запросе нет ключевого поля Ссылка — ломается позиционирование и выделение строк
03
Числовые колонки созданы с типом Строка — итоги и сортировка работают неверно
04
Загрузка тысяч строк в таблицу значений вместо динамического списка — форма открывается медленно
05
Изменения внесены напрямую в типовую конфигурацию без расширения — сложности при обновлении

Проверка результата

После изменений обновите конфигурацию базы данных (клавиша F7 в конфигураторе) и запустите режим предприятия. Откройте форму и пройдите полный сценарий: добавление строки, редактирование, удаление, сохранение объекта и повторное открытие. Для динамического списка дополнительно проверьте отборы и сортировку по колонкам.

Контрольные точки

Как проверить результат

Отображение таблицы
Норма

Таблица видна, колонки подписаны, ширина адекватна

Тревожный признак

Таблица пустая без возможности добавить строку или колонки без заголовков

Связь с данными
Норма

Строки сохраняются и видны после повторного открытия

Тревожный признак

Данные пропадают после записи или закрытия формы

Редактирование
Норма

Можно добавить, изменить и удалить строку

Тревожный признак

Кнопки недоступны или появляется ошибка при добавлении

Производительность
Норма

Форма открывается быстро, прокрутка плавная

Тревожный признак

Открытие занимает секунды, список подвисает

Итог

Что важно запомнить

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

Частые вопросы

Как добавить таблицу на форму, не меняя конфигурацию?

Используйте расширение конфигурации: в конфигураторе выберите «Конфигурация — Расширения конфигурации», создайте новое расширение, заимствуйте нужную форму и добавьте реквизит и элемент таблицы в ней. Типовая конфигурация при этом не изменяется и остаётся на поддержке.

Почему в таблице значений не видно кнопки «Добавить»?

Проверьте два свойства элемента таблицы: «ИзменятьСоставСтрок» должно быть включено, а «ТолькоПросмотр» — выключено. Также убедитесь, что командная панель таблицы не скрыта настройкой «ПоложениеКоманднойПанели».

Можно ли вывести на форму две таблицы с разными данными?

Да, ограничений нет: создайте два реквизита формы (например, две таблицы значений или табличную часть и динамический список) и перетащите оба в дерево элементов. Разместите их в группе со страницами или одну под другой, настроив растягивание по вертикали.

Как заполнить таблицу значений из запроса?

Выполните запрос на сервере и загрузите результат: ТаблицаПодбора.Загрузить(Запрос.Выполнить().Выгрузить()). Важно, чтобы имена и типы колонок реквизита формы совпадали с полями выборки запроса, иначе часть данных не перенесётся.

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

Сортировка доступна только по полям, присутствующим в запросе списка и не вычисляемым сложным образом. Если поле получено выражением или соединением без индекса, платформа может запретить сортировку. Добавьте поле в запрос напрямую из таблицы или настройте порядок в настройках списка.

Как добавить таблицу на форму внешней обработки?

Принцип тот же: откройте форму обработки в конфигураторе, добавьте реквизит формы типа «ТаблицаЗначений» с колонками и перетащите его в дерево элементов. У внешних обработок нет табличных частей объекта, поэтому используются таблицы значений или динамические списки.