Как убрать автоматически создаваемые параметры П1, П2 в системе компоновки данных (СКД)?

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

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

Почему появляются «лишние» параметры П1, П2?

Для начала проанализируем ситуацию с точки зрения работы генератора запросов СКД. Когда мы пишем запрос к виртуальным таблицам (например, РегистрНакопления.Продажи.Обороты), платформа 1С стремится максимально оптимизировать исполняемый SQL-код. Если параметры виртуальной таблицы (Начало периода, Конец периода и др.) не заданы жестко или не сопоставлены с конкретными параметрами схемы компоновки, система создает внутренние переменные-заглушки.

Рассмотрим подробнее основные причины возникновения таких параметров:

  1. Использование виртуальных таблиц без явных параметров. Если в тексте запроса вы просто указываете имя таблицы, например, РегистрНакопления.ОстаткиИОбороты(,, Авто), СКД понимает, что для получения корректных данных ей все равно нужны даты начала и окончания. Она генерирует свои внутренние параметры П1 и П2, чтобы передать в них значения периодов.
  2. Механизм автозаполнения. Флаг Автозаполнение на закладке «Наборы данных» заставляет СКД самостоятельно анализировать структуру таблиц. Видя виртуальную таблицу, система автоматически добавляет стандартные параметры, и если находит несоответствие имен или типов, создает дубликаты с техническими именами.
  3. Неправильная настройка на вкладке «Компоновка данных». В конструкторе запроса существует специальная вкладка для настройки СКД, о которой часто забывают. Параметры, указанные в основном тексте запроса, и параметры компоновки — это разные сущности в глазах платформы.

Способ 1. Настройка параметров через вкладку «Компоновка данных»

Это самый правильный и «чистый» способ избавиться от лишних имен. Рассмотрим его по шагам:

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

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

Способ 2. Использование фигурных скобок в тексте запроса

Выясним причину, почему иногда параметры дублируются, даже если они указаны в тексте. Рассмотрим пример кода, который может провоцировать ошибку:


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

В данном случае параметры &Начало и &Конец являются обязательными. Однако СКД может добавить к ним свои условия в расширении языка запросов. Чтобы полностью контролировать процесс, мы можем использовать синтаксис фигурных скобок, который указывает системе, что управление параметром передается механизму компоновки:


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

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

Способ 3. Визуальное скрытие параметров (Ограничение доступности)

Иногда возникают ситуации, когда параметры П1, П2 создаются платформой для внутренних нужд (например, при сложных соединениях с вложенными запросами к виртуальным таблицам), и победить их программно через настройки запроса крайне сложно. В этом случае мы можем прибегнуть к интерфейсному решению.

Рассмотрим алгоритм действий в схеме СКД:

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

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

&Период.ДатаНачала

и

&Период.ДатаОкончания соответственно.

Работа с флагом «Автозаполнение»

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

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

Это трудоемкий путь, но он гарантирует, что в итоговый запрос не попадет ни одного символа, который не был бы вами санкционирован. Система перестанет автоматически «додумывать» параметры виртуальных таблиц.

Использование консоли компоновки данных для диагностики

Если вы выполнили все настройки, но параметры все равно мешают или отчет выдает ошибку «Несоответствие типов», мы рекомендуем воспользоваться специализированными инструментами. Существуют внешние обработки — Консоль компоновки данных.

Разберем, как она помогает:

  1. Загрузите вашу схему в консоль.
  2. Нажмите кнопку «Исполняемый запрос».
  3. Вы увидите реальный текст SQL-запроса, который СКД отправляет в СУБД.

Именно в этом тексте вы увидите строки типа ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&П1, ). Это поможет вам точно определить, какая именно таблица в вашем сложном запросе генерирует лишний параметр. Часто оказывается, что разработчик настроил параметры для основной таблицы, но забыл про небольшое соединение в подразделе ГДЕ или в условии связи.

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

← На главную