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