Почему перестают работать отчеты СКД при смене режима совместимости в 1С?

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

При обновлении платформы и повышении режима совместимости (например, с версии 8.3.6 на 8.3.14 и выше) разработчики нередко сталкиваются с ситуацией, когда типовые или доработанные отчеты на Системе компоновки данных (СКД) внезапно перестают функционировать. В консоли запросов такой запрос может отрабатывать корректно, однако при попытке открытия формы отчета система выдает ошибку вида Недопустимое поле для группировки. Давайте разберемся, почему это происходит и как это исправить. Для извлечения и отладки текста запроса непосредственно из схемы компоновки данных можно использовать консоль запросов с поддержкой чтения схем СКД.

Анализ причин возникновения ошибки

Основная причина кроется в ужесточении проверки типов данных при выполнении запросов в новых версиях платформы 1С. В режиме совместимости 8.3.6 система была более лояльна к неявным приведениям типов. В более современных версиях механизмы оптимизации запросов и построения группировок требуют строгого соответствия типов данных.

Чаще всего проблема возникает, если в настройках СКД или в тексте запроса используется Параметр, тип значения которого определен как Строка неограниченной длины, и этот параметр участвует в операциях группировки или логических конструкциях ВЫБОР КОГДА.

Пошаговое решение проблемы

Если вы столкнулись с ошибкой в отчете после смены режима совместимости, выполните следующие действия:

  1. Проверьте параметры СКД: Перейдите в схему компоновки данных и откройте вкладку Параметры. Проверьте, какие параметры используются в запросе. Если параметр имеет тип Строка без ограничения длины, это потенциальная точка сбоя.
  2. Приведите типы параметров к фиксированной длине: Попробуйте изменить тип параметра с Строка на Строка(200) (или другой подходящий размер). Это заставит платформу интерпретировать значение как фиксированный тип, что необходимо для корректной работы индексированных полей и группировок.
  3. Используйте оператор ВЫРАЗИТЬ в запросе: Если изменение параметров не дает результата или логика запроса требует специфических преобразований, примените приведение типов непосредственно в тексте запроса СКД.

Пример исправления запроса

Рассмотрим ситуацию, где в запросе используется конструкция ВЫБОР КОГДА, которая подставляет строковые значения в поле группировки. В старых версиях системы это работало без нареканий, но в 8.3.14 и выше может вызвать ошибку типизации.

Изначальный вариант кода, который может приводить к сбою:


ВЫБОР 
    КОГДА НЕ Продажи.ЗаказКлиента.Сделка.ВидСделки ЕСТЬ NULL ТОГДА 
        Продажи.ЗаказКлиента.Сделка.ВидСделки.Наименование 
    КОГДА Продажи.ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента ИЛИ 
          Продажи.ЗаказКлиента ССЫЛКА Документ.ЗаявкаНаВозвратТоваровОтКлиента ТОГДА 
        &СтрокаПродажиПоЗаказам 
    ИНАЧЕ 
        &СтрокаПродажиБезЗаказов 
КОНЕЦ КАК ВидСделки

Для исправления ситуации необходимо убедиться, что параметры &СтрокаПродажиПоЗаказам и &СтрокаПродажиБезЗаказов имеют фиксированную длину. Также рекомендуется использовать принудительное приведение:


ВЫРАЗИТЬ(ВЫБОР 
    КОГДА НЕ Продажи.ЗаказКлиента.Сделка.ВидСделки ЕСТЬ NULL ТОГДА 
        Продажи.ЗаказКлиента.Сделка.ВидСделки.Наименование 
    КОГДА Продажи.ЗаказКлиента ССЫЛКА Документ.ЗаказКлиента ТОГДА 
        &СтрокаПродажиПоЗаказам 
    ИНАЧЕ 
        &СтрокаПродажиБезЗаказов 
КОНЕЦ КАК СТРОКА(200)) КАК ВидСделки

Дополнительные рекомендации при повышении режима совместимости

Помимо СКД, повышение режима совместимости затрагивает и другие аспекты разработки. Разберем, на что еще стоит обратить внимание:

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

Таким образом, переход на новые режимы совместимости требует дисциплины в типизации данных и внимательного отношения к коду форм. Придерживайтесь строгого определения типов, и ваши отчеты будут работать стабильно в любых версиях платформы 1С.

← На главную