При работе с типовыми конфигурациями на базе обычных форм, такими как Управление производственным предприятием (УПП) 1.3, специалисты часто сталкиваются с особенностями работы Универсального отчета. Одной из наиболее частых задач является изменение визуального представления группировок. По умолчанию 1С выводит иерархические группировки (например, Контрагент -> Номенклатура) в одной колонке в виде «лесенки». Однако для последующей обработки данных в Excel или по требованию заказчика часто требуется «плоская» таблица, где каждая группировка занимает отдельный столбец.
В этой статье мы подробно разберем, как решить эту задачу несколькими способами: от простых настроек интерфейса до программной корректировки поведения построителя отчета.
Рассмотрим самый быстрый способ, который не требует глубокого изменения программного кода отчета, но позволяет мгновенно получить результат в интерфейсе. Этот метод основан на «обмане» механизма группировок построителя.
Проанализируем ситуацию: если мы добавляем измерения через ДобавитьИзмерениеСтроки, построитель жестко закрепляет их иерархическое отображение. Чтобы обойти это, выполним следующие шаги:
Почему это работает? Когда мы отключаем группировки, построитель перестает строить дерево. Включая «детальные записи», мы заставляем отчет выводить каждую строку результата запроса. А поскольку мы добавили нужные измерения в «дополнительные поля», они отображаются как обычные колонки в строке данных. В итоге мы получаем требуемый вид:
ООО Рога и Копыта | Ручка шариковая | 1
Если нам важно сохранить именно механизм группировок (например, для корректного расчета итогов по иерархии), но при этом изменить их визуальное расположение, мы можем воспользоваться свойствами объекта ПостроительОтчета, который лежит в основе Универсального отчета.
Разберем, как это реализовать в коде. У объекта ПостроительОтчета есть свойство РазмещениеГруппировок. Мы можем установить его программно перед формированием отчета. Рассмотрим пример кода:
// В модуле отчета найдем место, где инициализируется УниверсальныйОтчет
УниверсальныйОтчет.ПостроительОтчета.РазмещениеГруппировок = РазмещениеГруппировокПостроителяОтчета.ВОтдельныхКолонках;
Использование этого метода позволяет оставить структуру группировок нетронутой. В этом случае 1С сама распределит Контрагента и Номенклатуру по разным столбцам, сохраняя при этом возможность сворачивать и разворачивать узлы дерева, если это необходимо. Это наиболее «чистый» технический подход.
Часто программисты сталкиваются с ситуацией, когда поле (например, Контрагент) добавлено в дополнительные поля, но не отображается в отчете. Выясним причину этой проблемы. В Построителе отчета существует ограничение: одно и то же поле не может одновременно выступать и в роли группировки, и в роли дополнительного поля в некоторых режимах вывода.
Если вы пытаетесь вывести поле, которое уже задействовано в УниверсальныйОтчет.ДобавитьИзмерениеСтроки(), построитель может его игнорировать в секции дополнительных полей. Поэтому для реализации Метод 1 крайне важно сначала исключить поле из списка измерений.
В обсуждении упоминалось, что перенос отчета на Систему компоновки данных (СКД) привел к некорректному расчету итогов. Проанализируем, почему это происходит. В Универсальном отчете (на базе построителя) расчет остатков и оборотов по виртуальным таблицам автоматизирован. При переходе на СКД программисты часто забывают настроить Роли полей.
Для корректного расчета итогов в СКД необходимо:
НачалоПериода и КонецПериода для виртуальных таблиц в тексте запроса.Если эти настройки не выполнены, СКД будет просто суммировать остатки по всем строкам, что приведет к завышенным суммам при наличии нескольких группировок (дублирование итогов).
Для получения плоского отчета в Универсальном отчете наиболее эффективны два пути:
УниверсальныйОтчет.ПостроительОтчета.РазмещениеГруппировок в значение ВОтдельныхКолонках.Оба способа позволяют избежать сложной переработки отчета на СКД и обеспечивают удобную выгрузку данных в формат Excel для дальнейшего анализа.