Почему отчет в СКД игнорирует параметры периода и как это исправить?

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

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

Рассмотрим подробно причины возникновения этой проблемы и разберем по шагам методы её решения, основываясь на практике работы с платформой 1С:Предприятие 8.3.

Метод 1. Использование расширения языка запросов СКД

Первая и самая частая причина — некорректное использование параметров в тексте запроса. Когда мы работаем с виртуальными таблицами, такими как ОстаткиИОбороты, СКД применяет механизм автозаполнения. Если мы просто указываем &НачалоПериода, система может конфликтовать с собственными внутренними механизмами установки параметров.

Проанализируем правильный синтаксис с использованием фигурных скобок {}. Эти скобки указывают СКД, что данное поле является частью расширения языка запросов компоновки данных. Если параметр в фигурных скобках не будет заполнен пользователем, СКД просто проигнорирует это условие, вместо того чтобы выдать ошибку.

Посмотрим на пример правильного оформления виртуальной таблицы в запросе:


ВЫБРАТЬ
    ЗаказыКлиентовОстаткиИОбороты.ЗаказКлиента,
    ЗаказыКлиентовОстаткиИОбороты.Номенклатура,
    ЗаказыКлиентовОстаткиИОбороты.ЗаказаноОборот
ИЗ
    РегистрНакопления.ЗаказыКлиентов.ОстаткиИОбороты({&НачалоПериода}, {&КонецПериода}, День, , ) КАК ЗаказыКлиентовОстаткиИОбороты

Использование фигурных скобок позволяет СКД более гибко управлять параметрами. Если вы используете стандартные имена &НачалоПериода и &КонецПериода, попробуйте также вариант с пустыми скобками в самом тексте запроса, если включена галочка Автозаполнение на закладке «Набор данных»:


ИЗ
    РегистрНакопления.ЗаказыКлиентов.ОстаткиИОбороты(, , День, , ) КАК ЗаказыКлиентовОстаткиИОбороты

В этом случае СКД самостоятельно подставит значения из параметров компоновки в параметры виртуальной таблицы по совпадению имен.

Метод 2. Проверка связи с типом СтандартныйПериод

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

Выполним следующие действия в конструкторе СКД:

  1. Перейдем на закладку Параметры.
  2. Найдем параметры НачалоПериода и КонецПериода.
  3. В колонке Выражение для параметра НачалоПериода пропишем: &ПериодОтчета.ДатаНачала.
  4. Для параметра КонецПериода пропишем: &ПериодОтчета.ДатаОкончания.
  5. Установим галочку Ограничение доступности для обоих параметров, чтобы пользователь видел только единое поле выбора периода.

Если этого не сделать, или если в выражении допущена ошибка (например, опечатка в слове ДатаОкончания), параметры останутся пустыми, и запрос выберет данные за все время.

Метод 3. Борьба с кэшированием настроек пользователя

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

Важный момент: если вы изменили состав параметров в схеме, старые настройки пользователя могут «перекрывать» новую логику. Система пытается применить сохраненные ранее (возможно, пустые или некорректные) значения параметров к новой структуре запроса.

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

Метод 4. Диагностика через вывод параметров в отчет

Чтобы понять, что именно «видит» система в момент формирования запроса, воспользуемся инструментами самодиагностики. Выведем значения параметров прямо в заголовок или подвал отчета.

Для этого в настройках варианта отчета (закладка «Дополнительные настройки») установим свойство Выводить параметры в значение Выводить. Теперь при формировании отчета под заголовком будет виден список всех параметров и их реальные значения. Если в этом списке вы видите пустые даты или даты, не соответствующие выбранному периоду, значит, проблема в связи параметров на закладке «Параметры» или в программной установке настроек (если используется код на языке 1С).

Метод 5. Особенности работы с виртуальной таблицей СрезПоследних

Разберем ситуацию, когда в запросе помимо оборотов используется соединение с регистром сведений (например, для получения цен номенклатуры). В исходном примере автора сообщения используется РегистрСведений.ЦеныНоменклатуры.СрезПоследних.

Нужно помнить, что у этой виртуальной таблицы есть свой параметр Период. Если его не заполнить, система будет брать актуальные цены на текущий момент (текущую дату), что может привести к замедлению запроса или логическим ошибкам. Рекомендуется передавать туда &КонецПериода:


ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонецПериода, ) КАК ЦеныНоменклатурыСрезПоследних

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

Резюме

Если ваш запрос в СКД игнорирует период, последовательно проверьте:

  1. Включена ли галочка Автозаполнение в наборе данных.
  2. Используются ли фигурные скобки {} в параметрах виртуальных таблиц.
  3. Связаны ли параметры НачалоПериода и КонецПериода с пользовательским параметром типа СтандартныйПериод.
  4. Сброшены ли пользовательские настройки в режиме «Предприятие» до стандартных.

Соблюдение этих правил гарантирует корректную фильтрацию данных и стабильную работу ваших отчетов.

← На главную