Почему в консоли запросов и в СКД отображаются разные данные?

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

Ситуация, когда один и тот же запрос выдает корректные данные в консоли запросов, но возвращает странные или неверные результаты в Системе компоновки данных (СКД), — это классическая проблема, с которой сталкиваются разработчики 1С. Разберем по шагам, почему это происходит, и проанализируем технические нюансы, которые приводят к таким расхождениям.

Анализ исходного запроса

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


ВЫБРАТЬ
    РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РеализацияТоваровУслугТовары.Номенклатура.ВидНоменклатуры) КАК ВидНоменклатуры1,
    НАЧАЛОПЕРИОДА(РеализацияТоваровУслугТовары.Ссылка.Дата, МЕСЯЦ) КАК ПериодМесяц,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
            КОГДА РеализацияТоваровУслугТовары.Номенклатура.ВидНоменклатуры.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыНоменклатуры.ПустаяСсылка)
                ТОГДА РеализацияТоваровУслугТовары.Номенклатура.ВидНоменклатуры
            ИНАЧЕ ВЫБОР
                    КОГДА РеализацияТоваровУслугТовары.Номенклатура.ВидНоменклатуры.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ВидыНоменклатуры.ПустаяСсылка)
                        ТОГДА РеализацияТоваровУслугТовары.Номенклатура.ВидНоменклатуры.Родитель
                    ИНАЧЕ РеализацияТоваровУслугТовары.Номенклатура.ВидНоменклатуры.Родитель.Родитель
            КОНЕЦ
        КОНЕЦ) КАК ВидНоменклатуры2
ПОМЕСТИТЬ ВТ_Ассортимент
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
ГДЕ
    РеализацияТоваровУслугТовары.Ссылка.Проведен
    И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
СГРУППИРОВАТЬ ПО
    РеализацияТоваровУслугТовары.Ссылка,
    НАЧАЛОПЕРИОДА(РеализацияТоваровУслугТовары.Ссылка.Дата, МЕСЯЦ);

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Ассортимент.ПериодМесяц КАК ПериодМесяц,
    СРЕДНЕЕ(ВЫРАЗИТЬ(ВТ_Ассортимент.ВидНоменклатуры1 КАК ЧИСЛО(16, 2))) КАК ВидНоменклатуры1,
    СРЕДНЕЕ(ВЫРАЗИТЬ(ВТ_Ассортимент.ВидНоменклатуры2 КАК ЧИСЛО(16, 2))) КАК ВидНоменклатуры2
ИЗ
    ВТ_Ассортимент КАК ВТ_Ассортимент
СГРУППИРОВАТЬ ПО
    ВТ_Ассортимент.ПериодМесяц

В данном случае мы видим использование КОЛИЧЕСТВО(РАЗЛИЧНЫЕ) во временной таблице и последующее вычисление СРЕДНЕЕ в основном запросе. В консоли это отрабатывает линейно, а СКД вносит свои коррективы.

Причина 1: Механизм автозаполнения СКД

Одной из самых частых причин является включенный флаг Автозаполнение в наборе данных. Выясним, как это влияет на результат:

  1. СКД анализирует текст запроса и автоматически добавляет доступные поля, отборы и параметры.
  2. Если в настройках отчета пользователь добавил отбор по полю, которое участвует в группировке или расчете агрегатов, СКД может перестроить запрос так, что логика КОЛИЧЕСТВО(РАЗЛИЧНЫЕ) нарушится.
  3. Система компоновки может модифицировать даже временные таблицы, если сочтет, что какие-то поля там избыточны или необходимы дополнительные условия.

Рекомендация: попробуйте отключить Автозаполнение и вручную настроить поля и роли на вкладке «Компоновка данных» в конструкторе запроса.

Причина 2: Установка параметров дат

Проанализируем ситуацию с параметрами &Дата1 и &Дата2. В консоли запросов мы часто вручную выбираем дату и время (например, 31.12.2023 23:59:59). В СКД параметры могут передаваться как Дата (начало дня) или через стандартные периоды.

Если в консоли установлена дата конца периода с секундами, а в СКД — только дата (00:00:00), то документы за последний день периода просто не попадут в отчет СКД. Чтобы избежать этой ошибки, используйте функции в тексте запроса:


И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)

Это гарантирует, что границы периода будут интерпретированы одинаково в обоих инструментах.

Причина 3: Расчет ресурсов (Агрегатные функции)

Посмотрим на поле ВидНоменклатуры2. В запросе автора используется СРЕДНЕЕ. Если в СКД на вкладке Ресурсы для этого поля также указана функция Среднее, может возникнуть «математический диссонанс».

СКД рассчитывает итоги не по результатам выборки запроса, а выполняя дополнительные запросы для каждой группировки. Если в самом запросе уже есть группировка (как во временной таблице ВТ_Ассортимент), а в настройках СКД стоят свои группировки, данные могут «удваиваться» или некорректно усредняться.

Правильный подход: в запросе выбирать детальные данные, а все расчеты (сумма, количество, среднее) выносить исключительно на вкладку Ресурсы схемы компоновки. Это позволит СКД корректно вычислять итоги на разных уровнях иерархии.

Причина 4: Кэширование вариантов и настроек

Разберем ситуацию, когда изменения в схеме (запросе) сделаны, но в режиме «1С:Предприятие» отчет все равно выдает старые данные. Это связано с тем, что 1С сохраняет варианты отчета и настройки пользователя в системных таблицах или кэше.

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

Причина 5: Влияние RLS (Ограничение прав)

Важно помнить, что консоль запросов часто запускается под полными правами, а отчет СКД — под правами обычного пользователя. Если в базе настроен RLS (Record Level Security), система автоматически добавит скрытые условия в запрос СКД. Это приведет к тому, что часть документов будет отсечена из-за отсутствия прав на конкретную организацию, склад или контрагента.

Инструменты для диагностики

Для того чтобы окончательно выяснить причину, воспользуемся Консолью компоновки данных (из состава ИТС или инструментов разработчика). В отличие от обычной консоли запросов, она позволяет увидеть Итоговый запрос, который генерирует СКД после применения всех настроек, отборов и прав доступа. Сравните этот итоговый текст с тем, что вы запускаете в обычной консоли — различия в секции ГДЕ или СОЕДИНЕНИЕ сразу укажут на проблему.

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

← На главную