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