При разработке отчетов на системе компоновки данных (СКД) часто возникает задача изменить стандартное поведение компоновщика. По умолчанию 1С выводит общие итоги в конце таблицы, однако бизнес-требования могут диктовать иное: вывести итог в самом начале или даже «разорвать» список ресурсов, вставив суммирующую колонку посередине. Разберем подробно, как реализовать такие требования, используя стандартные механизмы и продвинутые методы настройки.
Прежде чем приступать к сложным манипуляциям, проанализируем возможности стандартного функционала СКД. Если задача заключается в том, чтобы перенести итоги из конца отчета в его начало, нам достаточно изменить всего один параметр в настройках схемы.
Разберем по шагам, где найти эту настройку:
Расположение итогов по горизонтали.Для этого параметра доступны следующие значения:
Этот метод идеально подходит, если нужно просто поменять «лево» и «право» для суммирующих показателей. Однако, если нужно поставить итог «посередине» между двумя конкретными ресурсами, этот способ не поможет.
Если нам требуется нестандартное расположение (например: Ресурс1, Итог, Ресурс2), наиболее эффективным методом будет отказ от использования стандартного механизма итогов в пользу вычисляемых полей. Рассмотрим ситуацию, когда у нас есть «Количество» и «Цена», и мы хотим видеть «Сумму» (как итог произведения) строго между ними или в определенном месте списка.
Проанализируем алгоритм действий:
ИтоговаяСумма.Количество * Цена.Сумма(ИтоговаяСумма).ИтоговаяСумма в нужном порядке среди других полей.В этом случае 1С будет воспринимать это поле как обычный ресурс. Мы сможем двигать его вверх и вниз по списку, тем самым располагая «итог» в любом месте среди колонок. При этом в Других настройках параметр Расположение итогов по горизонтали можно установить в значение Нет, чтобы система не дублировала данные в конце отчета.
Бывают случаи, когда отчет представляет собой кросс-таблицу, и нам нужно вывести итоги после определенной группы измерений. Выясним, как это сделать через структуру настроек.
Посмотрим на пример структуры:
Отчет
Таблица
Колонки
Группировка1 (например, Склад)
Группировка2 (например, ТипТовара)
В СКД можно настроить расположение итогов персонально для каждой группировки. Если мы выделим Группировку1 в дереве настроек и в ее Других настройках установим Расположение итогов по горизонтали = Конец, то итог по этой группе отобразится сразу после завершения данных этой группы, но перед началом данных следующей группы, если они логически разделены. Это создает визуальный эффект «итогов посередине» в сложных иерархических отчетах.
Если ни один из вышеперечисленных способов не позволяет добиться желаемого визуального результата (например, требуется сложная шапка с объединением ячеек, где итог вписан в специфическую область), нам придется использовать Макеты.
Рассмотрим, как это работает:
Макет группировки или Макет заголовка группировки.Важно: При использовании макетов вы полностью берете на себя ответственность за отрисовку таблицы. Это самый трудоемкий путь, так как при добавлении нового поля в отчет макет придется перерисовывать вручную, но это дает 100% контроль над позиционированием колонок.
Иногда программисты применяют «хитрый» прием с созданием пустых группировок для визуального разделения данных. Рассмотрим ситуацию, когда нужно вставить разделитель или итог между блоками данных.
В запросе или в вычисляемых полях можно создать поле-константу:
"" КАК ПустаяГруппировка
Добавив такую группировку в структуру колонок таблицы, мы можем управлять выводом итогов для этой «пустой» сущности. Это позволяет манипулировать сеткой отчета, вставляя дополнительные столбцы с итогами там, где стандартная логика СКД этого не предполагает.
Выбор метода зависит от конкретной задачи:
Расположение итогов по горизонтали.Используя эти инструменты, вы сможете реализовать практически любую геометрию отчета, делая его максимально удобным для конечного пользователя.