При переходе на новые версии платформы 1С:Предприятие (начиная с 8.3.10) разработчики часто сталкиваются с неприятной особенностью: в настройках динамического списка на управляемой форме внезапно исчезают поля на закладке Группировка. Это может выглядеть как ошибка платформы, однако на самом деле это результат изменения логики работы ядра системы и ужесточения требований к структурам данных. Рассмотрим подробно, почему это происходит и как вернуть привычный функционал группировки.
Первая и самая простая ситуация, которую мы разберем, связана с механизмом кеширования метаданных в самой среде разработки. Проанализируем типичный сценарий: вы создаете новый динамический список, вставляете текст запроса, переходите на закладку Группировка и видите пустое окно, хотя поля в запросе явно присутствуют.
Выясним причину: Конфигуратору требуется «подтверждение» схемы запроса, чтобы обновить список доступных полей для группировки и сортировки. В версиях 8.3.10+ этот процесс иногда не срабатывает «на лету».
Решение по шагам:
Более глубокая причина кроется в свойстве ОсновнаяТаблица объекта ДинамическийСписок. Платформа 1С проектировалась для работы с огромными массивами данных, которые подгружаются порциями (динамическое считывание). Чтобы группировка работала корректно, системе необходимо знать, какая таблица является «базисом» для получения данных и идентификации строк.
Рассмотрим ситуацию: если вы используете произвольный запрос, но не указали ОсновнаяТаблица, платформа не может гарантировать уникальность записей. Без уникального ключа (такого как Ссылка или КлючЗаписи) построение дерева группировок становится технически невозможным, так как системе не к чему «привязать» раскрывающиеся ветки группировки.
Проанализируем требования платформы:
Наиболее сложный случай — использование виртуальных таблиц (например, РегистрНакопления.Остатки или РегистрБухгалтерии.ОстаткиИОбороты). Начиная с версии 8.3.10, 1С официально ограничивает использование этих таблиц в качестве основных, если требуется группировка.
Разберем, почему это происходит. Для построения группировки динамическому списку нужно выполнить два действия:</1>
В случае с виртуальными таблицами данных «в чистом виде» в базе не существует — они вычисляются на лету. У записей виртуальных таблиц нет постоянного уникального ключа. Если бы платформа разрешила группировку по таким таблицам, это привело бы к катастрофическому падению производительности при каждом скроллинге или раскрытии узла списка.
Посмотрим на список таблиц, для которых группировка будет недоступна или ограничена:
ДвиженияССубконто).Если задача требует обязательного наличия группировки данных, которые изначально находятся в виртуальной таблице, рассмотрим несколько вариантов решения.
Вариант 1: Использование физической таблицы как основной
Вместо выбора виртуальной таблицы в качестве основной, попробуем построить запрос к физической таблице (например, к списку номенклатуры или документам), а данные из виртуальной таблицы подтянуть через ЛЕВОЕ СОЕДИНЕНИЕ. В этом случае свойство ОсновнаяТаблица будет указывать на справочник, и группировка станет доступной.
Пример структуры запроса:
ВЫБРАТЬ
СправочникНоменклатура.Ссылка КАК Номенклатура,
СправочникНоменклатура.Код КАК Код,
ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК Остаток
ИЗ
Справочник.Номенклатура КАК СправочникНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, ) КАК ТоварыНаСкладахОстатки
ПО СправочникНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
В данном примере укажем Справочник.Номенклатура как основную таблицу. Группировка по полям справочника снова заработает.
Вариант 2: Трюк с временным переключением запроса
Существует «хитрый» способ, упомянутый опытными разработчиками, который позволяет иногда обойти интерфейсные блокировки (однако используйте его с осторожностью):
Важно: Этот метод может привести к ошибкам выполнения в режиме «Предприятие», если платформа не сможет сопоставить ключи записей. Помните, что крестики на полях группировки после такого маневра сигнализируют о том, что механизм работает в нештатном режиме.
Подводя итог, можно сказать, что исчезновение группировок в 8.3.10 — это не баг, а реализация строгой политики производительности. Чтобы группировка всегда была доступна, придерживайтесь правила: всегда указывайте основную таблицу, имеющую уникальную ссылку, и избегайте использования виртуальных таблиц в качестве корневого источника данных для динамического списка.