1.11 Отборы в динамическом списке по табличным частям
❓ 1.11 Как в динамическом списке работают отборы по табличным частям и невидимым полям?
📚 Документация
Заголовок раздела «📚 Документация»ИТС: Платформа — Настройки списка. Отбор
— https://its.1c.ru/db/v8327doc#bookmark:utx:TI000000212
ИТС: Платформа — Динамический список
— https://its.1c.ru/db/v8327doc#bookmark:dev:TI000000395
ИТС: Платформа — Работа с динамическим списком
— https://its.1c.ru/db/v8327doc#bookmark:dev:TI000000447
ИТС: Стандарты разработки — Ограничения при использовании динамических списков
— https://its.1c.ru/db/v8std#content:489:hdoc
ИТС: Стандарты разработки — Особенности реализации команд для форм списков
— https://its.1c.ru/db/v8std#content:495:hdoc
🧠 Краткая теория
Заголовок раздела «🧠 Краткая теория»Списки на управляемых формах реализованы с помощью динамического списка.
Динамический список основан на механизме Системы компоновки данных (СКД).
Динамический список оптимизирован для получения и отображения порций данных, а не всей выборки целиком.
Способы получения данных
Заголовок раздела «Способы получения данных»В зависимости от настроек динамический список может получать данные тремя способами:
1. Постраничное чтение без кеширования
Заголовок раздела «1. Постраничное чтение без кеширования»Считывание из базы данных выполняется порциями с количеством элементов данных, несколько превышающим количество строк, одновременно отображаемых списком, но не менее 20.
Кеширование данных на сервере не выполняется.
2. Порционное чтение с кешированием
Заголовок раздела «2. Порционное чтение с кешированием»Выборка данных по 1000 элементов из базы данных.
Данные кешируются на сервере.
3. Чтение с нарастающим объёмом данных
Заголовок раздела «3. Чтение с нарастающим объёмом данных»Сначала 1000 строк, затем 2000, 3000 и так далее.
Данные кешируются на сервере до 1 000 000 строк.
Это наименее оптимальный способ с точки зрения памяти и производительности.
От чего зависит способ считывания данных
Заголовок раздела «От чего зависит способ считывания данных»Способ считывания данных определяется настройками динамического списка:
- Основная таблица
- Свойство «Динамическое считывание данных»
- Вид ключа

Вид ключа
Заголовок раздела «Вид ключа»Вид ключа используется для формирования ключа строки динамического списка, чтобы платформа могла однозначно идентифицировать строку данных.
Если строку нельзя однозначно идентифицировать, динамический список не может работать в оптимальном режиме чтения данных.
Простыми словами: платформа не понимает, от какой именно строки нужно продолжать чтение следующей порции данных.
Поэтому она не может эффективно запрашивать данные частями и вынуждена использовать менее оптимальный вариант работы.
Виды ключей:
- Авто — вид ключа платформа пытается определить автоматически, исходя из свойства «Поля ключа» и заполненности свойства «Основная таблица»
- Значение поля — уникальная строка определяется по значению одного поля
- Ключ строки — уникальная строка определяется по набору полей
- Номер строки — строку невозможно однозначно идентифицировать
Как работает вид ключа «Авто»
Заголовок раздела «Как работает вид ключа «Авто»»Если основная таблица не указана, платформа определяет вид ключа по свойству «Поля ключа»:
- если поля ключа не заданы — используется вид ключа «Номер строки»
- если в полях ключа указано одно значение — используется вид ключа «Значение поля»
- если в полях ключа указано несколько значений — используется вид ключа «Ключ строки»
Если основная таблица указана, используемый вид ключа зависит от используемой таблицы.
Общие правила выбора способа
Заголовок раздела «Общие правила выбора способа»В упрощённом виде:
- Если указана основная таблица и включено «Динамическое считывание данных» → Способ 1
- Если указана основная таблица и «Динамическое считывание данных» выключено → Способ 2
- Если используется виртуальная таблица регистров (кроме СрезПервых/СрезПоследних) → Способ 3
- Если используется произвольный запрос → способ определяется видом ключа
| Вид ключа | Динамическое считывание включено | Динамическое считывание выключено |
|---|---|---|
| Значение поля | Способ 1 | Способ 2 |
| Ключ строки | Способ 1 | Способ 2 |
| Номер строки | Не применимо | Способ 3 |
Как это связано с отборами
Заголовок раздела «Как это связано с отборами»Так как динамический список построен на механизме СКД, отбор в нём можно настроить только по тем полям, которые используются самим списком.
Команда «Настроить список» открывает пользовательские настройки списка, где можно задать:
- отбор
- сортировку
- группировку
- условное оформление
Если список строится по основной таблице, то возможности отбора определяются данными, которые платформа получает для этого списка.
Если список строится произвольным запросом, то возможности отбора зависят от того, какие поля включены в запрос.
Поле может не отображаться в таблице формы, но при этом всё равно участвовать в отборе.
Поэтому для отбора:
- по данным табличных частей
- по связанным данным
- по реквизитам, которые не показываются в таблице формы
нужно, чтобы эти поля участвовали в данных динамического списка.
На практике для этого часто используют произвольный запрос, в который явно добавляют нужные поля.
⚠️ Ключевые моменты
Заголовок раздела «⚠️ Ключевые моменты»Чтобы в динамическом списке работали отборы по табличным частям и по реквизитам, которые не отображаются в форме:
- список должен быть построен на динамическом списке
- нужные поля должны участвовать в источнике данных списка
- при использовании произвольного запроса эти поля нужно явно включить в запрос
- отборы настраиваются через команду «Настроить список»
- если строка списка не может быть корректно идентифицирована, динамический список будет работать менее эффективно