Для оптимизации производительности, механизм управляемых форм [УФ] использует порционное чтение данных с сервера на Клиент.
Таблицы формы
Для отображения несовместимых с клиентом типов (таблицы значений) используются реквизиты с типом значения Данные формы коллекция.
Ключевой особенностью данных реквизитов является то, что они получают данные с Сервера на Клиент порциями по 35 строк.
Например, если в таблице содержится 1000 строк, то при прокрутке таблицы, мы будем порционально получать каждые 35. А если мы обрабатываем сразу всю таблицу, например, добавляем «!» для значения колонки, то все строки будут прочитаны порциями по 35.

Динамический список
Динамический список получает данные порциями по 25.

Можем посмотреть запрос в СУБД:
- Получаем данные последней строки;
- Получаем 25, у которых колонка сортировки = последней колонке, но ссылка > текущей ссылки.
- Получаем 25, у которых колонка сортировки > (или < в зависимости от направления) текущего значения.
- Получаем значения колонок для вывода для выбранных из п.п. 2-3 данных (ничего лишнего).
Признак «динамическое считывание данных» выполняет получение 1000 строк, а далее порционный вывод по 22.

Процедура «При получении данных на Сервере»
Для динамического списка доступна процедура (&НаСервереБезКонтекста): «При получении данных на сервере». В этой процедуре мы можем заполнять произвольные значения колонок только для тех строк, которые были получены.

Например, мы можем полные обороты закупок для контрагента. Для начала мы добавляем колонки в динамический список: «0 КАК СуммаЗакупок, 0 КАК СуммаПродаж». Выводим колонки в элемент формы списка и далее в процедуре При получении данных, заполняем значения:
&НаСервереБезКонтекста Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) // 01. Инициализация запроса. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | вл_Обороты.Контрагент КАК Контрагент, | СУММА(вл_Обороты.СуммаЗакупок) КАК СуммаЗакупок, | СУММА(вл_Обороты.СуммаПродаж) КАК СуммаПродаж |ИЗ | (ВЫБРАТЬ | Контрагент КАК Контрагент, | СуммаОборот КАК СуммаЗакупок, | 0 КАК СуммаПродаж | ИЗ | РегистрНакопления.Закупки.Обороты(, , , Контрагент В (&Ключи)) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Контрагент, | 0, | СуммаОборот | ИЗ | РегистрНакопления.Продажи.Обороты(, , , Контрагент В (&Ключи))) КАК вл_Обороты | |СГРУППИРОВАТЬ ПО | вл_Обороты.Контрагент"; Запрос.УстановитьПараметр("Ключи", Строки.ПолучитьКлючи()); // 02. Получение результата и анализ. ЗапросРезультат = Запрос.Выполнить(); Если ЗапросРезультат.Пустой() Тогда Возврат; КонецЕсли; // 03. Обработка данных заполнения динамического списка. ЗапросВыборка = ЗапросРезультат.Выбрать(); Пока Выборка.Следующий() Цикл ДанныеСтроки = Строки[ЗапросВыборка.Контрагент]; ДанныеСтроки.Данные["СуммаЗакупок"] = ЗапросВыборка.СуммаЗакупок; ДанныеСтроки.Данные["СуммаПродаж"] = ЗапросВыборка.СуммаПродаж; КонецЦикла; КонецПроцедуры
Важным является тот факт, что при таком заполнении значений, мы не можем выполнять отбор или сортировку списка по значениям колонки.
Данная тема подробнее рассматривается в пакете видео-курса «Секреты 1С: Эксперта» Шаг 1. Занятие 02-01 Управляемое приложение.