Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.
Реализовано в версии 8.3.14.1565.
Динамические списки являются удобным инструментом для быстрого отображения и просмотра большого количества записей. Они получают и отображают данные порциями. Благодаря этому пользователи могут одинаково быстро работать и с маленькими, и с большими списками.
Динамическое считывание данных становится возможным благодаря тому, что списку указывается основная таблица. Ключевые поля этой таблицы используются платформой для однозначной идентификации строк списка. Например, если список отображает данные справочника или документа, то в качестве ключевого поля используется поле Ссылка. Если список отображает записи какого-нибудь регистра, то для идентификации отдельных строк платформа использует объекты, содержащие значения нескольких ключевых полей. Эти объекты имеют разные названия для разных таблиц, но у них есть общая часть – «КлючЗаписи». Например, РегистрСведенийКлючЗаписи.<имя регистра>, РегистрРасчетаКлючЗаписи.<имя регистра> и т.д.
Однако возможности динамических списков гораздо шире, чем просто «стандартное» получение данных из одной таблицы. Вы можете написать произвольный запрос для динамического списка. Такой запрос может получать данные из таблиц, которые «в обычной ситуации» не используются для непосредственного отображения в интерфейсе (например, из таблицы остатков регистра или из таблицы регистрации изменений). Также вы можете в произвольном запросе получать данные сразу из нескольких таблиц, соединяя их с помощью языка запросов.
С одной стороны это хорошо, потому что вы можете создавать списки, которые основаны на довольно сложных запросах. С другой стороны это может приводить к тому, что списки начинают работать неэффективно. Часто ситуация складывается таким образом, что для сложного запроса вы не можете выбрать основную таблицу.
В этой ситуации платформа не может считывать данные динамически. Так как в выборке отсутствуют ключевые поля, платформе приходится использовать в качестве них порядковый номер записи, и каждый раз считывать данные с начала, что может занимать значительное время и существенный объем памяти. Также в этой ситуации становится недоступной часть функциональности динамического списка. Например, не поддерживается группировка записей в списке. Кроме этого при обновлении списка текущая строка, с точки зрения пользователя, может самопроизвольно «перепрыгивать» на другую строку, если с момента предыдущего отображения данных количество предшествующих строк списка изменилось.
Для того чтобы устранить перечисленные недостатки и повысить производительность списков, мы добавили в платформу возможность указывать произвольные ключевые поля для запроса динамического списка. Например, вы можете выбрать данные из таблицы остатков регистра накопления, используя ключевые поля Товар и Склад.
Как вы видите, для произвольного запроса динамического списка появились возможности указать вид ключа, выбрать ключевые поля (из тех, которые доступны в тексте запроса), и включить динамическое считывание данных.
Вид ключа может быть указан следующим образом:
Таким образом, теперь, если вы выбираете для своего произвольного запроса вид ключа ЗначениеПоля или КлючСтроки, вам становятся доступны:
Также при использовании произвольных ключевых полей вы можете использовать объединения. Например, объединив записи из двух таблиц документов, вы получите достаточно эффективный запрос, который имитирует журнал документов:
Мы надеемся, что новые возможности помогут вам создавать функциональные и производительные динамические списки с произвольными запросами.