§ 6.4. Динамический список: таблица, которая показывает базу

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

1. Что это такое

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

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

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

Табличная часть и таблица значений хранят строки. Динамический список хранит вопрос к базе, а строки получает в ответ.

Строже: у этого реквизита заданы основная таблица — или текст запроса, если он написан вручную, — отбор, порядок и оформление; по ним платформа строит запрос, выполняет его и приносит строки.

2. Основная таблица: что показывать

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

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

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

3. Запрос на сервере, строки на клиенте

Принцип клиента и сервера виден здесь нагляднее, чем где бы то ни было.

клиент: показать товары
   │
сервер: запрос к базе
   │
клиент: получил строки,
        которые видны на экране

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

4. Почему список нельзя записать

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

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

Отсюда граница, которую стоит держать в голове: в табличной части правка строки — это правка документа; в динамическом списке правка строки — это правка другой записи, открытой из списка.

5. Сколько списков в форме

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

гдекакой реквизит
форма списка товаровосновной реквизит «Список»
карточка контрагентадополнительный реквизит — список его поступлений

Во втором случае форма говорит о контрагенте, а список показывает связанные с ним записи — те самые «данные помимо записи», о которых шла речь в главе о данных, только берутся они из базы.

6. Как узнать динамический список в чужой форме

Признаки читаются по путям и типам.

признакгде смотреть
реквизит формы типа «динамический список»список реквизитов
путь таблицы — имя этого реквизитасвойства таблицы
пути колонок — «Список.Наименование»свойства колонок
у таблицы нет кнопок добавления строккомандная панель таблицы

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

7. В Предприятии

Опыт на то, что строки берутся из базы.

  1. Откройте список товаров. Найдите: есть ли кнопка «Записать», можно ли поменять наименование прямо в строке.
Здесь будет снимок экранасписок товаров в Предприятии, командная панель без кнопки записи
  1. Откройте двойным щелчком ручку шариковую, поменяйте наименование на «Ручка шариковая синяя» и запишите.

  2. Вернитесь в список: строка показывает новое наименование.

  3. Верните прежнее наименование «Ручка шариковая» и запишите: база серии должна остаться прежней.

  4. Отсортируйте список по коду и обратно по наименованию. Сортировка меняет только порядок показа — в базе ничего не произошло.

Главное в одном абзаце

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


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

Контрольные вопросы

  1. Где живут строки динамического списка и чем это отличает его от табличной части и таблицы значений?
  2. Что такое основная таблица динамического списка?
  3. Как здесь проявляется декларативность?
  4. Почему список из ста тысяч товаров открывается быстро?
  5. Почему у формы списка нет кнопки «Записать»?
  6. Может ли динамический список быть не основным реквизитом формы? Приведите пример.
  7. Как узнать динамический список в чужой форме?

Упражнения

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

Своё: где строки. Для каждой таблицы скажите, где живут её строки: товары в поступлении; список контрагентов; остатки по складам в карточке товара; поступления в карточке контрагента.

Ловушка: «отсортировал — испортил базу». Пользователь боится сортировать список товаров по артикулу: «вдруг товары перемешаются». Что вы объясните?

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

На чтение. В карточке склада есть таблица с путём «ТоварыНаСкладе», и в списке реквизитов формы у этого реквизита тип «динамический список». Что показывает таблица и почему её не записывают вместе со складом?

Ответы — в конце части.