Почему СКД выводит имя поля вместо значения в общих итогах и как это исправить

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

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

В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем внутренние механизмы платформы «1С» и рассмотрим четыре надежных практических способа решения, которые помогут вам получить идеальный подвал отчета без костылей и ошибок.

Выясняем причину: почему вместо значения выводится имя поля?

Для начала давайте разберемся, из-за чего ломается стандартный механизм условного оформления. Когда мы в параметре условного оформления «Текст» выбираем не статическую строку, а «Поле компоновки данных», платформа должна динамически вычислить это значение в контексте выводимой строки.

Однако на уровне общих итогов (Grand Total) этот механизм дает сбой по двум ключевым причинам:

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

Ниже мы подробно рассмотрим четыре различных метода решения этой задачи. Выберите тот, который наилучшим образом подходит для структуры вашего отчета.

---

Решение 1. Использование макетов компоновки (Самый надежный метод)

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

Давайте разберем процесс создания собственного макета по шагам:

  1. Перейдите на вкладку «Настройки» в схеме компоновки данных.
  2. Выберите нужную группировку или таблицу, для которой необходимо кастомизировать итоги. Нажмите на нее правой кнопкой мыши, выберите «Установить имя» и задайте уникальное имя (например, ИтогиНашегоОтчета).
  3. Перейдите на вкладку «Макеты».
  4. Нажмите кнопку «Добавить макет» и выберите пункт «Добавить макет группировки».
  5. В появившемся диалоговом окне в поле «Имя группировки» укажите заданное ранее имя (ИтогиНашегоОтчета), а в поле «Тип макета» выберите «Общий итог подвал».
  6. В сетке макета выделите область ячеек, которая будет отвечать за вывод итогов, и оформите их визуально (задайте границы, цвета, шрифты).
  7. Для ячейки, где должна выводиться сумма, в свойствах укажите тип заполнения «Параметр» и назовите его, например, ИтоговаяСумма.
  8. В таблице параметров макета (в нижней части вкладки «Макеты») свяжите созданный параметр ИтоговаяСумма с выражением СКД. В поле «Выражение» введите формулу расчета:

Сумма(СуммаДокумента)

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

---

Решение 2. Раздельный расчет ресурсов для детальных записей и итогов

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

В этом случае мы можем настроить раздельный расчет на вкладке «Ресурсы»:

  1. Перейдите на вкладку «Ресурсы» вашей схемы компоновки.
  2. Добавьте ваше поле (например, СуммаДокумента) в таблицу ресурсов дважды.
  3. Для первой строки укажите обычное выражение расчета, например:

Округлить(Сумма(СуммаДокумента), 2)

В колонке «Рассчитывать по» оставьте это поле пустым или укажите все группировки, кроме общих итогов.

  1. Для второй строки ресурса в колонке «Рассчитывать по» выберите строго значение «Общий итог».
  2. В поле «Выражение» напишите формулу прямого суммирования без предварительного округления:

Сумма(СуммаДокумента)

Таким образом, платформа автоматически применит правильную формулу для общего итога, и вам не придется искусственно подменять текст в подвале через условное оформление.

---

Решение 3. Использование выражения представления поля

Если ваша задача — просто изменить текстовый формат вывода поля (например, добавить к сумме валюту "руб." или применить специфическое форматирование чисел), то использовать для этого условное оформление не обязательно. Гораздо эффективнее настроить «Выражение представления».

Рассмотрим этот процесс подробнее:

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

Формат(СуммаДокумента, "ЧДЦ=2; ЧГ=3") + " руб."

Если логика представления сложная, вы можете вызвать функцию общего модуля (при условии, что у модуля установлен флаг «Клиент (управляемое приложение)» или «Вызов сервера»):

МойОбщийМодульСервер.СформироватьПредставлениеСуммы(СуммаДокумента)

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

---

Решение 4. Вычисляемые поля и обход ограничений области применения

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

Давайте реализуем схему, которая позволит системе четко определять контекст вывода:

  1. Перейдите на вкладку «Вычисляемые поля» и добавьте новое поле с именем ЭтоОбщийИтог.
  2. На вкладке «Ресурсы» добавьте это поле в список ресурсов. Настройте расчет следующим образом:
  3. Перейдите в настройки условного оформления вашего отчета.
  4. Создайте новое правило оформления. В качестве условия укажите: ЭтоОбщийИтог Равно Истина.
  5. В параметрах оформления укажите нужный цвет, шрифт или текст. При этом в области использования условного оформления укажите «Везде» вместо «В общем итоге».

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

Резюме

Мы детально изучили проблему отображения технических имен полей вместо рассчитанных показателей в общих итогах СКД. Наиболее технологичным и расширяемым решением является создание индивидуального макета общего итога (Решение 1). Оно полностью снимает зависимость от текущего релиза платформы 1С и предоставляет разработчику абсолютный контроль над визуальным отображением и логикой расчета подвала отчета.

← На главную