Часто перед разработчиками встает задача: у нас есть «плоская» таблица значений, в которой содержатся данные по номенклатуре и множество числовых показателей (например, 26 колонок с количествами), и нам необходимо вывести эти данные в отчет, сохранив иерархическую структуру номенклатуры с итогами по группам. Давайте разберем, как грамотно подойти к решению этой задачи.
Самый прямой путь — это использовать возможности встроенного языка Запрос. Чтобы получить иерархию, нам недостаточно просто передать таблицу значений в запрос. Необходимо правильно связать данные вашей таблицы со справочником Номенклатура.
МенеджерВременныхТаблиц. Это позволит системе проиндексировать данные и эффективно объединить их с основной базой.ЛЕВОЕ СОЕДИНЕНИЕ вашей временной таблицы со справочником Номенклатура. Именно на этом этапе мы получаем возможность использовать иерархические свойства справочника.ИТОГИ. Используйте конструкцию ИТОГИ ПО Номенклатура ИЕРАРХИЯ. Это заставит систему автоматически рассчитать суммы по всем числовым полям (вашим колонкам «Количество1» и т.д.) для каждого родительского элемента в иерархии.Важно помнить: если в вашей исходной таблице присутствуют только конечные элементы (товары), запрос не «узнает» о группах, пока вы не обеспечите связь с иерархической структурой справочника. При выводе результата используйте метод Выборка.Уровень(), чтобы правильно оформлять отступы в табличном документе.
Если количество полей велико (26 и более), работа с обычным запросом может стать трудоемкой. В таких случаях мы рекомендуем использовать СКД, которая берет на себя всю рутину по вычислению итогов и оформлению.
Номенклатура. В свойствах этой группировки в поле «Тип иерархии» установите значение «Иерархия».ИТОГИ в запросе.Разберем преимущество этого метода: вам не нужно вручную следить за уровнями вывода в табличный документ. СКД самостоятельно обработает структуру данных и выведет отчет в нужном виде, сохраняя иерархию и итоги по каждой группе.
Независимо от выбранного способа, при выводе большого количества колонок в макет, следуйте этим советам:
Избегайте жесткой привязки: Не старайтесь создавать макет с 26 фиксированными ячейками. Мы рекомендуем использовать механизм параметров в макете. При обходе выборки передавайте значения колонок в соответствующие параметры.
Оптимизируйте данные: Если таблица содержит избыточно много строк, перед передачей в запрос примените метод ТЗ.Свернуть(). Это позволит значительно ускорить работу запроса и уменьшить потребление оперативной памяти.
Таким образом, мы видим, что задача вывода иерархии для плоской таблицы — это стандартная задача, которая решается либо через ИТОГИ ПО ИЕРАРХИЯ в классическом запросе, либо через СКД. Выбирайте СКД, если хотите сократить объем кода и избежать ошибок при формировании итогов, и классический запрос — если вам нужен полный контроль над каждым шагом формирования табличного документа.