Как в отчете СКД вывести дополнительную строку с пересчетом сумм под исходной строкой?

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

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

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

Почему стандартный механизм ресурсов СКД создает отдельную колонку

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

Если разработчик пытается решить задачу «в лоб» — добавляет в группировку подчиненную строку детальных записей, очищает в ней заголовки и выводит вычисляемое поле в ресурсы, СКД все равно выделяет под вычисляемое поле новый столбец правее основных колонок. Попытка убрать поле из выбранных полей группировки верхнего уровня и оставить только в детальных записях часто приводит либо к полному исчезновению значения, либо к смещению разметки ячеек.

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

Способ 1. Подмена значения через условное оформление и детальные записи

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

Пошаговый алгоритм реализации:

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

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

Ограничения способа: подмена параметра Текст меняет только визуальное строковое представление ячейки в табличном документе. При выгрузке отчета в Microsoft Excel значение в этой строке может трактоваться как текст, а не как числовое поле, что потребует дополнительного преобразования форматов при попытке суммирования ячеек в сторонней программе.

Способ 2. Двухстрочный вывод в рамках одной ячейки через макет поля

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

Пошаговый порядок настройки:

  1. На вкладке Вычисляемые поля создайте поле СуммаВТенге с формулой расчета.
  2. Перейдите на вкладку Макеты схемы компоновки данных и нажмите кнопку Добавить макет поля.
  3. В окне выбора поля укажите СуммаДоговора, а в поле Группировка укажите группировку Договор.
  4. В появившейся таблице макета выделите ячейку и откройте ее свойства. В свойстве Заполнение переключите значение со Значение на Шаблон.
  5. В поле текста шаблона введите две строки с параметрами в квадратных скобках:

[СуммаДоговора]
[СуммаВТенге]

В окне параметров макета для каждого из параметров можно индивидуально настроить форматирование (разделители групп, количество знаков после запятой, валютный постфикс). Для того чтобы визуально отделить вторую строку, перед нижним параметром можно добавить текстовую приставку, например: KZT: [СуммаВТенге].

Условия применения и ограничения: данный способ не создает дополнительных строк в отчете, исключает проблемы с задвоением итоговых сумм и гарантирует стабильную ширину столбцов. Однако объединение двух показателей в одной ячейке делает невозможным раздельное автосуммирование средствами табличного документа 1С или формулами Excel.

Способ 3. Формирование строк на уровне набора данных в запросе

Когда требуется, чтобы вторая строка была полноценной строкой таблицы с числовым типом данных для всех выгрузок и расчетов, пересчет переносят на уровень набора данных запроса с помощью оператора ОБЪЕДИНИТЬ ВСЕ.

Пример структуры текста запроса:


ВЫБРАТЬ
    Договоры.Ссылка КАК Договор,
    Договоры.Владелец КАК Контрагент,
    1 КАК ПорядокСтроки,
    Договоры.Сумма КАК Сумма,
    "Основная сумма (руб.)" КАК ОписаниеПоказателя
ИЗ
    Справочник.ДоговорыКонтрагентов КАК Договоры

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Договоры.Ссылка КАК Договор,
    Договоры.Владелец КАК Контрагент,
    2 КАК ПорядокСтроки,
    ВЫРАЗИТЬ(Договоры.Сумма * &КурсТенге КАК ЧИСЛО(15, 2)) КАК Сумма,
    "В том числе в KZT" КАК ОписаниеПоказателя
ИЗ
    Справочник.ДоговорыКонтрагентов КАК Договоры

В настройках СКД структура строится следующим образом: группировка Контрагент -> группировка Договор -> подчиненная группировка по полю ПорядокСтроки (или детальные записи с сортировкой по ПорядокСтроки). В выбранные поля выводится стандартное поле Сумма.

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

Особенности расчета итогов и агрегатных функций

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

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

Рекомендации по выбору решения

Выбор конкретного варианта зависит от бизнес-требований к отчету:

← На главную