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