Почему в динамическом списке не работает группировка в режиме совместимости 8.3.10 и выше

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переходе на новые версии платформы 1С:Предприятие (начиная с 8.3.10) разработчики часто сталкиваются с неприятной особенностью: в настройках динамического списка на управляемой форме внезапно исчезают поля на закладке Группировка. Это может выглядеть как ошибка платформы, однако на самом деле это результат изменения логики работы ядра системы и ужесточения требований к структурам данных. Рассмотрим подробно, почему это происходит и как вернуть привычный функционал группировки.

Причина 1: Особенность обновления метаданных в Конфигураторе

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

Выясним причину: Конфигуратору требуется «подтверждение» схемы запроса, чтобы обновить список доступных полей для группировки и сортировки. В версиях 8.3.10+ этот процесс иногда не срабатывает «на лету».

Решение по шагам:

  1. Введите текст запроса или выберите таблицу в настройках динамического списка.
  2. Нажмите кнопку ОК, чтобы закрыть окно настройки списка.
  3. Снова откройте настройку этого же динамического списка.
  4. Перейдите на закладку Группировка — теперь поля должны появиться в списке доступных.

Причина 2: Отсутствие или некорректная настройка Основной таблицы

Более глубокая причина кроется в свойстве ОсновнаяТаблица объекта ДинамическийСписок. Платформа 1С проектировалась для работы с огромными массивами данных, которые подгружаются порциями (динамическое считывание). Чтобы группировка работала корректно, системе необходимо знать, какая таблица является «базисом» для получения данных и идентификации строк.

Рассмотрим ситуацию: если вы используете произвольный запрос, но не указали ОсновнаяТаблица, платформа не может гарантировать уникальность записей. Без уникального ключа (такого как Ссылка или КлючЗаписи) построение дерева группировок становится технически невозможным, так как системе не к чему «привязать» раскрывающиеся ветки группировки.

Проанализируем требования платформы:

Причина 3: Ограничения при работе с виртуальными таблицами

Наиболее сложный случай — использование виртуальных таблиц (например, РегистрНакопления.Остатки или РегистрБухгалтерии.ОстаткиИОбороты). Начиная с версии 8.3.10, 1С официально ограничивает использование этих таблиц в качестве основных, если требуется группировка.

Разберем, почему это происходит. Для построения группировки динамическому списку нужно выполнить два действия:</1>

  1. Выбрать все уникальные значения поля, по которому строится группировка.
  2. При раскрытии группировки выбрать детальные записи, соответствующие этому значению.

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

Посмотрим на список таблиц, для которых группировка будет недоступна или ограничена:

Как обойти ограничение: Практические советы

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

Вариант 1: Использование физической таблицы как основной

Вместо выбора виртуальной таблицы в качестве основной, попробуем построить запрос к физической таблице (например, к списку номенклатуры или документам), а данные из виртуальной таблицы подтянуть через ЛЕВОЕ СОЕДИНЕНИЕ. В этом случае свойство ОсновнаяТаблица будет указывать на справочник, и группировка станет доступной.

Пример структуры запроса:


ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    СправочникНоменклатура.Код КАК Код,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Остаток
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки
        ПО СправочникНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура

В данном примере укажем Справочник.Номенклатура как основную таблицу. Группировка по полям справочника снова заработает.

Вариант 2: Трюк с временным переключением запроса

Существует «хитрый» способ, упомянутый опытными разработчиками, который позволяет иногда обойти интерфейсные блокировки (однако используйте его с осторожностью):

  1. Установите в качестве основной таблицы обычный справочник.
  2. Настройте группировки на закладке Группировка.
  3. Вернитесь на закладку Запрос и измените его на работу с виртуальной таблицей, сохранив названия полей.

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

Резюме

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

← На главную