Страницы: 1 2 След.
RSS
Ошибка запроса в СКД
 

Коллеги, день добрый. Возникла следующая проблема при реализации отчета на СКД. Скажу сразу, что запрос для сбора данных тестировался с помощью обработки «Консоль запросов» для 1С. Странно, но получилось так, что выводимые данные результата запроса в консоли и реализованном отчете отличаются. В консоли результат стоит верный, в СКД –  неверный.

Конкретно, сумма из колонки «Полная оплата» в результате запроса консоли в результате отчета на СКД содержится в колонке «Без оплаты». В чем может быть причина такого?

 
Цитата
log написал:
Коллеги, день добрый. Возникла следующая проблема при реализации отчета на СКД. Скажу сразу, что запрос для сбора данных тестировался с помощью обработки «Консоль запросов» для 1С. Странно, но получилось так, что выводимые данные результата запроса в консоли и реализованном отчете отличаются. В консоли результат стоит верный, в СКД –  неверный.  Конкретно, сумма из колонки «Полная оплата» в результате запроса консоли в результате отчета на СКД содержится в колонке «Без оплаты». В чем может быть причина такого?
Здравствуйте. Могу предположить, что интерпретатор СКД и консоли все-​таки по-​разному воспринимают текст запроса. Другими словами СКД что-​то еще проделывает с запросом, в результате чего получается, что в 1С один и тот же запрос возвращает разные данные в консоли и СКД.
 

Вклинюсь в обсуждение. После обработки запроса СКД своим оптимизатором конечный запрос может получиться немного отличным от исходного. Одна из возможных и распространенных проблем  – это параметры типа «Дата» вида «дата и время» – банально – не совпадение временных периодов в параметрах запроса в консоли и передаваемых в параметры в СКД.

 

Понятно, спасибо. Добавлю еще, что в результате выполнения нескольких запросов данные пишутся во временную таблицу: Ссылка на документ, СуммаДокумента, Срок оплаты – это поле расчетное – рассчитывается на основании таблиц. Обратите внимание на так называемое «хитрое поле» Минимум. Данные таблицы формируются верно и так же верно выводятся через отчет СКД. Далее мне нужно собрать/сгруппировать данные по Сроку оплаты: Срок оплаты, СуммаДокумента – вот это уже СКД выводит неверно, теряется часть данных.

Даже если делаю простую выборку из таблицы – двух полей Срок оплаты и СуммаДокумента – она будет уже неверной. В чем проблема?

 
С СКД такое бывает, я тоже потратил на это кучу времени. Можно попробовать вместо временных таблиц использовать вложенные запросы, их она как раз не оптимизирует. Можно также как-то иначе попробовать исправить запрос, но это очень сложно, как понял, а без временных таблиц нормально получается.
 

Возможно в вашем случае тем самым «хитрым полем» окажется не Минимум, а Максимум для поля с типом значений «Дата» (дата со временем): МАКСИМУМ(РасчетыСКонтрагентамиОбороты.Период) КАК Период. Его СКД не обрабатывает прямо совсем.

 

Предположить могу, что решение проблемы может заключаться в замене временной таблицы, так как именно временные таблицы СКД и преобразует, на вложенный запрос. И как раз выражение Максимум сдержится в тексте запроса, который помещается во временную таблицу. Как известно, вложенные запросы по методике  –  это наименее производительный результат для СКД, чем временные таблицы, но других очевидных вариантов не остается.

 
Спасибо, но вариант с вложенным запросом не решил проблему. Хотя некоторым помогает решить, наверное.  
 
Возможно еще, что это ошибка платформы, я такую конструкцию ДОБАВИТЬКДАТЕ(&ДатаКон, МЕСЯЦ, ...) в отчетах на СКД использовал и работало нормально. Еще обратите внимание, в СКД есть свой оптимизатор запроса, который может менять исходный его текст. Из-за этого были случаи, когда при наложении определенных отборов в отчете оптимизатор выкидывал целую таблицу из запроса.
 

Кстати, забыл уточнить – имеют ли значение фигурные скобки? Почему с ними МКД выдает правильный результат, а без них – неправильный?

Страницы: 1 2 След.