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

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

Как добавить список в форму 1С

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

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

В управляемых формах (платформа 8.3) основной инструмент — реквизит формы типа «ДинамическийСписок» или «ТаблицаЗначений», который затем связывается с элементом формы «Таблица». В обычных формах (8.2 и ранее) применяются элементы «ТабличноеПоле» с привязкой к данным. Далее разберём оба подхода на практике.

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

Выбор типа списка: динамический список, таблица значений или табличная часть

Прежде чем открывать конструктор формы, определите, откуда берутся данные и как пользователь будет с ними работать. От этого зависит тип реквизита и весь дальнейший сценарий настройки.

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

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

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

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

Таблица значений

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

Табличная часть

Строки объекта, хранятся вместе с ним. Подходит для товаров в документе, состава справочника. Требует изменения структуры метаданных.

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

Как добавить динамический список в управляемую форму

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

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

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

ВЫБРАТЬ

Реализация.Ссылка КАК Ссылка,

Реализация.Дата КАК Дата,

Реализация.Номер КАК Номер

ИЗ

Документ.РеализацияТоваровУслуг КАК Реализация

ГДЕ

Реализация.Контрагент = &Контрагент

Параметр «Контрагент» нужно установить программно в обработчике «ПриСозданииНаСервере» формы, иначе запрос вернёт пустой результат или ошибку параметра.

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

Как добавить таблицу значений и заполнить её программно

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

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

Заполнение выполняется кодом в серверной процедуре:

&НаСервере

Процедура ЗаполнитьТаблицу()

НоваяСтрока = ТаблицаДанных.Добавить();

НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("000000001");

НоваяСтрока.Количество = 5;

КонецПроцедуры

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

Как добавить табличную часть в объект конфигурации

Табличная часть — это не просто элемент формы, а часть структуры метаданных. Чтобы её добавить, откройте объект (документ или справочник) в конфигураторе, перейдите на вкладку «Данные», найдите раздел «Табличные части» и нажмите «Добавить». Задайте имя, например «Товары», и создайте реквизиты табличной части: колонки с типами данных.

После добавления колонок откройте форму объекта и перетащите табличную часть из списка реквизитов в дерево элементов. Платформа создаст таблицу с командной панелью, кнопками добавления и удаления строк.

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

Настройка связи списка с основным объектом формы

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

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

Добавление списка в обычную форму (платформа 8.2 и ранее)

В обычных формах логика другая: используется элемент управления «ТабличноеПоле». В редакторе формы выберите в меню «Форма» → «Вставить элемент управления» → «ТабличноеПоле», затем в свойствах укажите источник данных: табличную часть объекта, таблицу значений или объект типа «СписокСправочника» / «СписокДокументов».

Для списка справочника или документов в обычной форме создаётся реквизит формы соответствующего типа (например, «СправочникСписок.Номенклатура»), и табличное поле привязывается к нему через свойство «Данные». Отбор настраивается через свойство «Отбор» реквизита списка.

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

Проверка результата и типичные ошибки

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

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

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

Отображение списка на форме
Норма

Таблица видна, колонки соответствуют реквизиту

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

Таблицы нет — реквизит не перенесён в элементы формы

Наполнение данными
Норма

Строки соответствуют запросу и отбору

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

Пусто — не задан параметр запроса или нет данных

Обновление после записи
Норма

Новые документы появляются в списке

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

Список устарел — включите автообновление или обновляйте программно

Типичные ошибки
01
Реквизит создан, но не перенесён в элементы формы — список не отображается.
02
Параметр запроса не установлен — динамический список пустой или ошибка при открытии.
03
Не указана основная таблица динамического списка — не работают стандартные команды открытия и создания.
04
Попытка редактировать динамический список как таблицу значений — изменения не сохраняются.
05
Изменение типового объекта без расширения и резервной копии — риск потери данных при обновлении.

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

Итог

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

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

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

Как добавить список в форму без программирования?

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

Почему динамический список не даёт редактировать строки?

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

Как вывести на форму два списка одновременно?

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

Можно ли добавить список в форму через расширение конфигурации?

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

Чем список значений отличается от таблицы значений в форме?

Список значений — простая коллекция «значение + представление», подходит для выбора из вариантов и отображается как одноколоночный список. Таблица значений — многоколоночная структура с типизированными колонками, пригодная для полноценных табличных данных на форме.

Список добавлен, но колонки отображаются в неправильном порядке. Что делать?

Порядок колонок на форме определяется порядком подчинённых элементов в дереве элементов формы, а не порядком в запросе. Перетащите колонки в дереве элементов в нужной последовательности или настройте видимость и порядок программно через свойства элементов.