При разработке отчетов на платформе «1С:Предприятие 8» с использованием Системы компоновки данных (СКД) программисты часто сталкиваются с неожиданным поведением условного оформления. Типичная ситуация: вы настраиваете условное оформление для строки общего итога, хотите вывести туда определенное значение из поля компоновки (например, итоговую сумму документа), но вместо ожидаемого числа (например, 100 000) система выводит в макет сухое текстовое имя самого поля — СуммаДокумента.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы платформы «1С» и рассмотрим четыре надежных практических способа решения, которые помогут вам получить идеальный подвал отчета без костылей и ошибок.
Для начала давайте разберемся, из-за чего ломается стандартный механизм условного оформления. Когда мы в параметре условного оформления «Текст» выбираем не статическую строку, а «Поле компоновки данных», платформа должна динамически вычислить это значение в контексте выводимой строки.
Однако на уровне общих итогов (Grand Total) этот механизм дает сбой по двум ключевым причинам:
8.3.13, например 8.3.13.1690). В этих версиях механизм сопоставления полей условного оформления для областей итогов и заголовков работает некорректно.Ниже мы подробно рассмотрим четыре различных метода решения этой задачи. Выберите тот, который наилучшим образом подходит для структуры вашего отчета.
---
Если стандартное условное оформление не работает из-за особенностей платформы, наиболее правильным архитектурным решением будет создание собственного макета для подвала отчета. Это гарантирует стопроцентный результат на любом релизе платформы.
Давайте разберем процесс создания собственного макета по шагам:
ИтогиНашегоОтчета).ИтогиНашегоОтчета), а в поле «Тип макета» выберите «Общий итог подвал».ИтоговаяСумма.ИтоговаяСумма с выражением СКД. В поле «Выражение» введите формулу расчета:
Сумма(СуммаДокумента)
При таком подходе СКД гарантированно рассчитает выражение на уровне общего итога и выведет числовое значение, полностью проигнорировав любые сбои условного оформления.
---
Часто разработчики пытаются использовать условное оформление там, где на самом деле нужно правильно настроить расчет ресурсов. Типичный пример: в детальных записях строки округляются до копеек, а в общем итоге должна выводиться чистая сумма документов без погрешностей округления строк.
В этом случае мы можем настроить раздельный расчет на вкладке «Ресурсы»:
СуммаДокумента) в таблицу ресурсов дважды.
Округлить(Сумма(СуммаДокумента), 2)
В колонке «Рассчитывать по» оставьте это поле пустым или укажите все группировки, кроме общих итогов.
Сумма(СуммаДокумента)
Таким образом, платформа автоматически применит правильную формулу для общего итога, и вам не придется искусственно подменять текст в подвале через условное оформление.
---
Если ваша задача — просто изменить текстовый формат вывода поля (например, добавить к сумме валюту "руб." или применить специфическое форматирование чисел), то использовать для этого условное оформление не обязательно. Гораздо эффективнее настроить «Выражение представления».
Рассмотрим этот процесс подробнее:
СуммаДокумента).
Формат(СуммаДокумента, "ЧДЦ=2; ЧГ=3") + " руб."
Если логика представления сложная, вы можете вызвать функцию общего модуля (при условии, что у модуля установлен флаг «Клиент (управляемое приложение)» или «Вызов сервера»):
МойОбщийМодульСервер.СформироватьПредставлениеСуммы(СуммаДокумента)
Платформа применит это представление ко всем областям отчета, включая детальные строки, группировки и общие итоги, обеспечивая единообразие данных без конфликтов с макетами.
---
Если вам критически важно применить условное оформление по сложному условию именно в общем итоге, но платформа упорно подставляет имя поля, можно применить архитектурный обходной путь с использованием вычисляемого поля-флага.
Давайте реализуем схему, которая позволит системе четко определять контекст вывода:
ЭтоОбщийИтог.Ложь.Истина.ЭтоОбщийИтог Равно Истина.Благодаря этому нехитрому приему СКД корректно отработает условие во время компоновки результата, так как проверка будет проходить в стандартном контексте вычисления полей ресурсов, что позволит избежать бага с выводом имени переменной.
Мы детально изучили проблему отображения технических имен полей вместо рассчитанных показателей в общих итогах СКД. Наиболее технологичным и расширяемым решением является создание индивидуального макета общего итога (Решение 1). Оно полностью снимает зависимость от текущего релиза платформы 1С и предоставляет разработчику абсолютный контроль над визуальным отображением и логикой расчета подвала отчета.