Особенности таблиц и списков управляемого приложения 1С

Для оптимизации производительности, механизм управляемых форм [УФ] использует порционное чтение данных с сервера на Клиент.

Таблицы формы

Для отображения несовместимых с клиентом типов (таблицы значений) используются реквизиты с типом значения Данные формы коллекция.

Ключевой особенностью данных реквизитов является то, что они получают данные с Сервера на Клиент порциями по 35 строк.

Например, если в таблице содержится 1000 строк, то при прокрутке таблицы, мы будем порционально получать каждые 35. А если мы обрабатываем сразу всю таблицу, например, добавляем «!» для значения колонки, то все строки будут прочитаны порциями по 35.

Курс 1С: Эксперт. Реквизиты управляемых форм. Порциональное получение данных
Порциональное получение данных

Динамический список

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

Курс 1С: Эксперт. Реквизиты управляемых форм. Динамический список
Реквизиты управляемых форм. Динамический список

Можем посмотреть запрос в СУБД:

  1. Получаем данные последней строки;
  2. Получаем 25, у которых колонка сортировки = последней колонке, но ссылка > текущей ссылки.
  3. Получаем 25, у которых колонка сортировки > (или < в зависимости от направления) текущего значения.
  4. Получаем значения колонок для вывода для выбранных из п.п. 2-3 данных (ничего лишнего).

Признак «динамическое считывание данных» выполняет получение 1000 строк, а далее порционный вывод по 22.

Курс 1С: Эксперт .Реквизиты управляемых форм. Динамический список 2
Динамический список без признака динамическое считывание данных

Процедура «При получении данных на Сервере»

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

Курс 1С: Эксперт. Динамический список При получении данных на сервере
Динамический список При получении данных на сервере

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

&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)

    // 01. Инициализация запроса.
    Запрос              =    Новый Запрос;

    Запрос.Текст        =
    "ВЫБРАТЬ
    |    вл_Обороты.Контрагент             КАК Контрагент,
    |    СУММА(вл_Обороты.СуммаЗакупок)    КАК СуммаЗакупок,
    |    СУММА(вл_Обороты.СуммаПродаж)     КАК СуммаПродаж
    |ИЗ
    |    (ВЫБРАТЬ
    |        Контрагент КАК Контрагент,
    |        СуммаОборот КАК СуммаЗакупок,
    |        0 КАК СуммаПродаж
    |    ИЗ
    |        РегистрНакопления.Закупки.Обороты(, , , Контрагент В (&Ключи))
    |
    |    ОБЪЕДИНИТЬ ВСЕ
    |
    |    ВЫБРАТЬ
    |        Контрагент,
    |        0,
    |        СуммаОборот
    |    ИЗ
    |        РегистрНакопления.Продажи.Обороты(, , , Контрагент В (&Ключи))) КАК вл_Обороты
    |
    |СГРУППИРОВАТЬ ПО
    |    вл_Обороты.Контрагент";

    Запрос.УстановитьПараметр("Ключи", Строки.ПолучитьКлючи());

    // 02. Получение результата и анализ.
    ЗапросРезультат    =    Запрос.Выполнить();

    Если ЗапросРезультат.Пустой() Тогда
        Возврат;
    КонецЕсли;
    
    // 03. Обработка данных заполнения динамического списка.
    ЗапросВыборка      =      ЗапросРезультат.Выбрать();

    Пока Выборка.Следующий() Цикл
        ДанныеСтроки = Строки[ЗапросВыборка.Контрагент];
        ДанныеСтроки.Данные["СуммаЗакупок"]    =    ЗапросВыборка.СуммаЗакупок;
        ДанныеСтроки.Данные["СуммаПродаж"]     =    ЗапросВыборка.СуммаПродаж;
    КонецЦикла;

КонецПроцедуры

Важным является тот факт, что при таком заполнении значений, мы не можем выполнять отбор или сортировку списка по значениям колонки.

Данная тема подробнее рассматривается в пакете видео-курса «Секреты 1С: Эксперта» Шаг 1. Занятие 02-01 Управляемое приложение.

Константин Ефимов | 1С: Эксперт. Фриланс Вьетнам

КОНСТАНТИН ЕФИМОВ
Комментарии и вопросы