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