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