При обновлении платформы и повышении режима совместимости (например, с версии 8.3.6 на 8.3.14 и выше) разработчики нередко сталкиваются с ситуацией, когда типовые или доработанные отчеты на Системе компоновки данных (СКД) внезапно перестают функционировать. В консоли запросов такой запрос может отрабатывать корректно, однако при попытке открытия формы отчета система выдает ошибку вида Недопустимое поле для группировки. Давайте разберемся, почему это происходит и как это исправить. Для извлечения и отладки текста запроса непосредственно из схемы компоновки данных можно использовать консоль запросов с поддержкой чтения схем СКД.
Основная причина кроется в ужесточении проверки типов данных при выполнении запросов в новых версиях платформы 1С. В режиме совместимости 8.3.6 система была более лояльна к неявным приведениям типов. В более современных версиях механизмы оптимизации запросов и построения группировок требуют строгого соответствия типов данных.
Чаще всего проблема возникает, если в настройках СКД или в тексте запроса используется Параметр, тип значения которого определен как Строка неограниченной длины, и этот параметр участвует в операциях группировки или логических конструкциях ВЫБОР КОГДА.
Если вы столкнулись с ошибкой в отчете после смены режима совместимости, выполните следующие действия:
Параметры. Проверьте, какие параметры используются в запросе. Если параметр имеет тип Строка без ограничения длины, это потенциальная точка сбоя.Строка на Строка(200) (или другой подходящий размер). Это заставит платформу интерпретировать значение как фиксированный тип, что необходимо для корректной работы индексированных полей и группировок.Рассмотрим ситуацию, где в запросе используется конструкция ВЫБОР КОГДА, которая подставляет строковые значения в поле группировки. В старых версиях системы это работало без нареканий, но в 8.3.14 и выше может вызвать ошибку типизации.
Изначальный вариант кода, который может приводить к сбою:
ВЫБОР
КОГДА НЕ Продажи.ЗаказКлиента.Сделка.ВидСделки ЕСТЬ NULL ТОГДА
Продажи.ЗаказКлиента.Сделка.ВидСделки.Наименование
КОГДА Продажи.ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента ИЛИ
Продажи.ЗаказКлиента ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента ТОГДА
&СтрокаПродажиПоЗаказам
ИНАЧЕ
&СтрокаПродажиБезЗаказов
КОНЕЦ КАК ВидСделки
Для исправления ситуации необходимо убедиться, что параметры &СтрокаПродажиПоЗаказам и &СтрокаПродажиБезЗаказов имеют фиксированную длину. Также рекомендуется использовать принудительное приведение:
ВЫРАЗИТЬ(ВЫБОР
КОГДА НЕ Продажи.ЗаказКлиента.Сделка.ВидСделки ЕСТЬ NULL ТОГДА
Продажи.ЗаказКлиента.Сделка.ВидСделки.Наименование
КОГДА Продажи.ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента ТОГДА
&СтрокаПродажиПоЗаказам
ИНАЧЕ
&СтрокаПродажиБезЗаказов
КОНЕЦ КАК СТРОКА(200)) КАК ВидСделки
Помимо СКД, повышение режима совместимости затрагивает и другие аспекты разработки. Разберем, на что еще стоит обратить внимание:
Элементы.ИмяЭлемента.Видимость), убедитесь, что элементы корректно инициализированы в текущем жизненном цикле формы.Библиотеки Стандартных Подсистем (БСП). Если ваша версия БСП не поддерживает новый режим совместимости, обновление платформы приведет к массовым ошибкам. В таких случаях сначала обновите конфигурацию до актуального релиза.Помните, что при возникновении подобных ошибок самым информативным инструментом является Технологический журнал. В нем вы сможете увидеть реальную причину исключения, которая часто скрыта за общим сообщением Ошибка в запросе набора данных.
Таким образом, переход на новые режимы совместимости требует дисциплины в типизации данных и внимательного отношения к коду форм. Придерживайтесь строгого определения типов, и ваши отчеты будут работать стабильно в любых версиях платформы 1С.