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

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

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

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

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

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

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

Что такое динамический список и когда он нужен

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

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

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

Создание реквизита формы типа «ДинамическийСписок»

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

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

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

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

Вывод списка на форму и настройка колонок

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

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

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

Произвольный запрос: соединения, виртуальные таблицы, параметры

Когда данные нужно получить из нескольких таблиц или из виртуальной таблицы регистра (например, «Остатки» регистра накопления), включите у реквизита свойство «Произвольный запрос» и нажмите кнопку открытия конструктора. Текст запроса пишется на встроенном языке запросов 1С — с соединениями, группировками и параметрами.

Пример запроса для списка товаров с остатками:

ВЫБРАТЬ

Номенклатура.Ссылка КАК Номенклатура,

Номенклатура.Артикул КАК Артикул,

ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток

ИЗ

Справочник.Номенклатура КАК Номенклатура

ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК Остатки

ПО Остатки.Номенклатура = Номенклатура.Ссылка

ГДЕ

НЕ Номенклатура.ПометкаУдаления

Два правила критичны. Первое: даже при произвольном запросе желательно оставить заполненной «Основную таблицу» — тогда работают стандартные команды «Создать», «Изменить», пометка на удаление и корректное позиционирование на объекте. Без основной таблицы эти возможности отключаются. Второе: параметры запроса (например, &Период) нужно установить до первого отображения данных, иначе список выдаст ошибку.

Параметры устанавливаются программно в обработчике ПриСозданииНаСервере:

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

СписокТоваров.Параметры.УстановитьЗначениеПараметра("Период", ТекущаяДатаСеанса());

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

Отборы, сортировка и обновление списка

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

&НаСервере

Процедура УстановитьОтборПоСкладу(Склад)

ЭлементОтбора = СписокТоваров.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад");

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

ЭлементОтбора.ПравоеЗначение = Склад;

ЭлементОтбора.Использование = Истина;

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

Сортировка по умолчанию задаётся в свойстве «Порядок» реквизита или программно через СписокТоваров.Порядок.Элементы. Пользователь может менять сортировку сам, если у таблицы не отключена соответствующая команда. Для принудительного обновления данных после изменений в базе вызывайте Элементы.СписокТоваров.Обновить() на клиенте — например, после записи связанного документа.

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

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

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

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

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

Открытие формы
Норма

Список заполнен, ошибок нет

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

Ошибка компоновки или пустой список при наличии данных

Отбор и сортировка
Норма

Применяются мгновенно, данные корректны

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

Ошибка «Поле не найдено» или неверный результат

Двойной щелчок по строке
Норма

Открывается форма объекта

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

Ничего не происходит — не задана основная таблица

Типичные ошибки и ограничения

Наиболее частая проблема — ошибка «Поле не найдено» при открытии формы. Она возникает, когда в настройках отбора, порядка или условного оформления указано поле, отсутствующее в запросе. Лечится синхронизацией списка полей и настроек.

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

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

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

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

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

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

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

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

Как обновить динамический список после записи документа?

Вызовите на клиенте метод Элементы.ИмяСписка.Обновить() — например, в обработчике ОбработкаОповещения, который срабатывает при закрытии формы документа. Альтернатива — включить динамическое считывание данных, но это создаёт постоянную нагрузку на базу.

Почему в списке с произвольным запросом не работает кнопка «Создать»?

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

Как сделать отбор, который видит и меняет пользователь?

Используйте настройки списка: свойство «Настройки» динамического списка содержит пользовательские отборы, доступные через кнопку «Ещё — Настроить список». Чтобы отбор был виден сразу, добавьте его элементы в пользовательские настройки программно или разместите на форме связанные поля отбора.

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

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