Как убрать системный параметр Период и переопределить параметры виртуальных таблиц в отчете на СКД

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

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

Причина появления дублирующих параметров в СКД

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


ВЫБРАТЬ
    ЦеныНоменклатурыСрезПоследних.Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ПериодСебестоимости, ) КАК ЦеныНоменклатурыСрезПоследних

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

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

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

  1. Откроем конструктор запроса в наборе данных схемы компоновки данных.
  2. Перейдем на вкладку Компоновка данных, затем на подвкладку Таблицы.
  3. Выделим виртуальную таблицу и нажмем кнопку Параметры виртуальной таблицы (или настроим их непосредственно в тексте запроса).
  4. Укажем имя своего параметра в фигурных скобках.

Посмотрим на пример текста запроса с расширением СКД:


ВЫБРАТЬ
    Цены.Номенклатура КАК Номенклатура,
    Цены.Цена КАК Цена
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&ПериодСебестоимости)}, ) КАК Цены

Для регистров накопления переопределение параметров периода остатков и оборотов выглядит следующим образом:


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

При таком подходе СКД не будет генерировать системный параметр Период, а создаст только указанные в фигурных скобках параметры.

Способ 2. Ограничение доступности и вычисление параметров по формуле

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

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

Решение проблем с отображением новых колонок и ресурсов

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

Платформа 1С сохраняет пользовательские настройки формы отчета во внутреннем хранилище настроек. Если в схему добавлено новое поле, сохраненный пользовательский вариант по-прежнему содержит старый список выбранных полей. Для решения этой проблемы выполним следующие действия:

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

Устранение фантомных пустых группировок (NULL)

При объединении нескольких наборов данных или использовании левых соединений (ЛЕВОЕ СОЕДИНЕНИЕ) в отчет могут попадать пустые строки или фантомные группировки со значениями NULL, по которым выводятся лишние итоги.

Разберем по шагам, как исключить пустые группировки:

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

Корректный расчет процентного соотношения к итогу в СКД

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

Расчет процентов необходимо настраивать строго на вкладке Ресурсы с использованием агрегатной функции ВычислитьВыражение:

  1. Перейдем на вкладку Ресурсы.
  2. Добавим поле (например, ПроцентОтИтога).
  3. В поле выражения для расчета доли от общего итога всего отчета укажем формулу:

Сумма(КоличествоВыпуск) / ВычислитьВыражение("Сумма(КоличествоВыпуск)", "", "ОбщийИтог") * 100

Если требуется рассчитать процент относительно вышестоящей группы в иерархической структуре, укажем область расчета:


Сумма(КоличествоВыпуск) / ВычислитьВыражение("Сумма(КоличествоВыпуск)", "РодительВИерархии") * 100

Такой подход обеспечивает корректный расчет долей на каждом уровне группировки без искажения сумм и промежуточных итогов.

← На главную