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