Как изменить или скрыть значение в общих итогах отчета СКД?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с Системой компоновки данных (СКД) в 1С разработчики часто сталкиваются с необходимостью кастомизировать вывод итоговых данных. Типичная задача: для некоторых строк отчета (например, определенных счетов учета) в детальных записях сумму выводить нужно, а вот в колонке или строке общего итога по этим же счетам выводить суммарное значение не требуется — вместо него должен отображаться прочерк или пустая ячейка. Попытки решить эту задачу «в лоб» через простое условное оформление часто заканчиваются неудачей. В этой статье мы подробно разберем, почему так происходит, и рассмотрим несколько надежных способов реализации этой логики.

Почему стандартное условное оформление по реквизиту не работает в общих итогах?

Рассмотрим ситуацию, с которой часто сталкиваются начинающие разработчики. В условном оформлении задается условие вида Счет.Реквизит = Истина, оформляемым полем выбирается Сумма, а в области использования указывается флажок В общем итоге. При формировании отчета система игнорирует это оформление и все равно выводит числовой итог.

Выясним причину такого поведения СКД. Строка общего итога находится на самом верхнем уровне иерархии отчета. На этом уровне группировка по полю Счет отсутствует. Для СКД в строке общего итога значение поля Счет равно Не определено (или NULL), так как система не может сопоставить одну итоговую строку со множеством разных счетов из детальных записей. Следовательно, выражение Счет.Реквизит = Истина в строке общего итога всегда возвращает значение Ложь, и условное оформление просто не применяется. Чтобы обойти это ограничение, нам придется использовать более гибкие механизмы платформы.

Способ 1. Изменение выражения ресурса и ограничение расчета по группировкам

Это самый гибкий программируемый метод, который позволяет напрямую управлять математикой расчета итогов. Мы можем настроить ресурс таким образом, чтобы для обычных строк он рассчитывался по стандартной формуле, а для общего итога — по специальному условию. Выполним настройку по шагам:

  1. Перейдем на вкладку Ресурсы в схеме компоновки данных.
  2. Добавим поле Сумма в список ресурсов первый раз. В колонке Выражение укажем стандартную формулу Сумма(Сумма). В колонке Рассчитывать по... выберем все группировки отчета, кроме общего итога (например, укажем конкретное поле группировки Счет).
  3. Добавим поле Сумма в список ресурсов второй раз. Это поле будет отвечать исключительно за расчет общего итога.
  4. В колонке Выражение для второй строки пропишем условие, которое будет проверять реквизиты записей. Поскольку на уровне общего итога мы обязаны использовать агрегатные функции, применим функцию Максимум или Минимум для проверки реквизита:

ВЫБОР 
    КОГДА Максимум(Счет.ИсключитьИзИтогов) = Истина 
        ТОГДА NULL 
    ИНАЧЕ Сумма(Сумма) 
КОНЕЦ
  1. В колонке Рассчитывать по... для этой строки снимем все флажки и оставим активным только флажок Общий итог.

При такой настройке детальные строки будут выводить честные математические суммы, а в общем итоге система проверит, есть ли среди выбранных счетов те, у которых установлен признак исключения. Если такие счета есть, общий итог вернет пустую ячейку (NULL).

Способ 2. Настройка условного оформления через проверку заполненности поля

Если нам не нужно менять логику математического сложения, а требуется лишь визуально скрыть итог (заменить число на прочерк) в финальной таблице, мы можем обойти ограничение с отсутствием группировки в общих итогах. Для этого в условии оформления нужно проверять не значение реквизита конкретного счета, а сам факт того, что мы находимся в строке общего итога.

Проанализируем этот алгоритм:

  1. Перейдем в настройки отчета на вкладку Условное оформление и добавим новый элемент.
  2. На вкладке Оформление выберем свойство Текст и укажем значение "-" (прочерк). Также можно настроить цвет текста или выравнивание.
  3. На вкладке Условие добавим проверку: Счет Не заполнено. Так как в строке общего итога группировочное поле Счет гарантированно пустое, это условие сработает только для итоговых строк.
  4. На вкладке Оформляемые поля выберем наше поле Сумма.
  5. На вкладке Дополнительно в области использования снимем все флажки и установим только один — В общем итоге (также можно указать В группировках, если требуется скрыть промежуточные итоги).

Этот способ крайне прост в реализации и не требует написания сложных формул в ресурсах, однако он подходит только для тех случаев, когда прочерк нужно выводить всегда, независимо от того, какие именно счета попали в итоговую выборку.

Способ 3. Использование свойств формата для вывода прочерков

Если в результате применения первого способа выражение ресурса для общего итога возвращает значение 0 или NULL, мы можем красиво представить это в отчете стандартными средствами форматирования 1С. Рассмотрим, как избавиться от некрасивых пустых полей или нулей:

Система автоматически заменит все пустые и нулевые значения в выбранных колонках на аккуратные прочерки, сохраняя при этом исходный числовой тип данных в схеме компоновки, что важно для последующего экспорта отчета в форматы табличных документов (например, в Excel).

Способ 4. Вычисление итогов с помощью функции "ВычислитьВыражение"

Для реализации максимально сложной бизнес-логики, когда решение о выводе общего итога зависит от комплексного анализа детальных записей выборки, мы можем использовать встроенную функцию СКД ВычислитьВыражение. Рассмотрим пример выражения ресурса для общего итога:

ВычислитьВыражение("Сумма(Сумма)", , "ОбщийИтог")

С помощью этого механизма мы можем собирать массив значений со всего отчета, анализировать наличие определенных элементов программно прямо в выражении СКД и гибко управлять выводом итогового значения без необходимости прибегать к доработке общего модуля конфигурации на встроенном языке 1С.

Способ 5. Использование индивидуальных макетов оформления

Когда стандартных механизмов условного оформления и работы с ресурсами не хватает (например, когда по требованиям заказчика прочерк в общем итоге должен быть выровнен строго по центру, а числовые показатели в детальных строках — по правому краю ячейки), на помощь приходит механизм индивидуальных макетов оформления СКД.

Разберем этот вариант по шагам:

  1. Перейдем на вкладку Макеты в схеме компоновки данных.
  2. Добавим макет группировки и выберем тип макета — Макет общего итога.
  3. В созданной области макета оформим ячейку нужным образом: установим границы, выравнивание элементов, цвет и шрифт.
  4. В свойствах ячейки укажем параметр (например, ПараметрСуммаИтог).
  5. В таблице параметров макета свяжем созданный параметр с выражением, в котором пропишем условие проверки данных. Например, вернем текстовую строку "-" или вычисленное числовое значение в зависимости от переданных в отчет параметров.

Использование макетов гарантирует стопроцентный контроль над визуальным представлением итоговых строк отчета и позволяет решать самые сложные дизайнерские задачи, обходя любые платформенные ограничения стандартного вывода компоновщика результатов.

← На главную