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