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