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