Как в отчете СКД вывести два числовых ресурса через слэш в одну ячейку?

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

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

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

Выясним причину появления «лесенки» при группировке строк

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

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

Способ 1. Использование функции общего модуля в ресурсах СКД

Рассмотрим вариант решения, предложенный в обсуждении: вызов экспортной функции общего модуля в выражении ресурса.

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

Функция КонкатенацияПолей(Поле1, Поле2) Экспорт
    Возврат "" + Поле1 + "/" + Поле2;
КонецФункции
  1. Перейдем в схему компоновки данных на вкладку Ресурсы.
  2. Добавим поле в список ресурсов. В колонке Выражение вызовем созданную функцию: ИмяОбщегоМодуля.КонкатенацияПолей(К1, К2). Обратите внимание: просто очищать формулу нельзя, обязательно должно быть указано корректное выражение вычисления ресурса.

Способ 2. Вычисление строки средствами языка выражений СКД (без изменения конфигурации)

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

  1. На вкладке Ресурсы добавляем новое поле (или используем имя одного из числовых показателей, например, К1, либо предварительно созданное вычисляемое поле).
  2. В колонке Выражение используем явное приведение к строке с применением агрегатных функций: Строка(Сумма(К1)) + " / " + Строка(Сумма(К2)) или с точным форматированием чисел: Формат(Сумма(К1), "ЧДЦ=0") + " / " + Формат(Сумма(К2), "ЧДЦ=0")
  3. Использование агрегатных функций Сумма или Максимум защитит отчет от синтаксических ошибок в тех случаях, когда на пересечение группировок строки и колонки попадает более одной детальной записи из запроса.

Способ 3. Оформление через макет поля с шаблоном заполнения

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

  1. На вкладке Ресурсы объявляем оба поля К1 и К2 стандартными числовыми ресурсами с выражением Сумма(К1) и Сумма(К2).
  2. Переходим на вкладку Макеты и нажимаем Добавить макет поля.
  3. Выбираем поле, для которого настраивается визуальное представление.
  4. В редакторе макета выделяем ячейку, открываем ее свойства и устанавливаем свойство Заполнение в значение Шаблон.
  5. В текст ячейки вводим шаблон: [К1] / [К2].

Главное достоинство этого подхода заключается в том, что данные в схеме компоновки остаются полноценными числами. Это позволяет избежать проблем с лексикографической сортировкой (когда строка "10/2" при сортировке по алфавиту оказывается раньше, чем "2/1") и дает возможность параллельно рассчитывать корректные математические итоги.

Особенности расчета итогов для строковых ресурсов

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

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

← На главную