Как составить выражение и сложить или вычесть колонки в выбранных полях СКД?

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

При настройке отчетов в системе компоновки данных (СКД) часто возникает задача вывести разницу, сумму или результат умножения нескольких колонок (например, посчитать отклонение Кол А - Кол Б). Проанализируем, можно ли задать такую формулу непосредственно в списке выбранных полей и какими штатными способами платформа 1С позволяет выполнять расчеты между полями.

Ограничения таблицы «Выбранные поля»

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

В выбранные поля можно добавлять только:

  1. Доступные поля набора данных и их реквизиты через точку.
  2. Вычисляемые поля схемы компоновки данных.
  3. Пользовательские поля, созданные пользователем или разработчиком в настройках.
  4. Системные предопределенные поля расчета процентов (например, % в группе, % по горизонтали, % в общем итоге).
  5. Группы выбранных полей (в колонке, вместе, вертикально) и элемент Автополе.

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

Способ 1. Создание пользовательского поля-выражения (в режиме пользователя)

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

  1. В форме отчета откроем форму изменения варианта (кнопка «Еще» → «Прочее» → «Изменить вариант...» или панель «Настройки» в расширенном режиме).
  2. Перейдем на вкладку «Пользовательские поля».
  3. Нажмем кнопку «Добавить» и выберем пункт «Новое поле-выражение».
  4. Зададим понятный заголовок поля (например, Отклонение количества).
  5. Заполним формулы для детальных и итоговых записей. В синтаксисе пользовательских полей имена колонок обязательно заключаются в квадратные скобки:

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

[Кол А] - [Кол Б]

Для корректного расчета итогов по группировкам и общего итога отчета обязательно укажем агрегатную функцию в поле «Выражение итоговых записей»:

Сумма([Кол А]) - Сумма([Кол Б])

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

Способ 2. Вычисляемые поля и ресурсы (в Конфигураторе)

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

  1. Откроем схему компоновки данных и перейдем на вкладку «Вычисляемые поля».
  2. Добавим новую строку: укажем «Путь к данным» (например, РазностьКоличества) и понятный «Заголовок».
  3. В колонке «Выражение» напишем формулу без квадратных скобок:

Кол_А - Кол_Б

Чтобы поле корректно суммировалось в группировках и общих итогах отчета, перейдем на вкладку «Ресурсы» и настроим итоговый расчет. Добавим поле РазностьКоличества и укажем выражение:

Сумма(РазностьКоличества)

или:

Сумма(Кол_А) - Сумма(Кол_Б)

После этого поле РазностьКоличества станет доступно на вкладке «Настройки» в списке полей для добавления в выбранные поля отчета.

Способ 3. Вычисление разности в тексте запроса

Посмотрим на ситуацию со стороны оптимизации производительности: если исходные поля Кол_А и Кол_Б формируются в наборе данных типа «Запрос», расчет разности эффективнее всего перенести на уровень СУБД.

Пример фрагмента запроса:


ВЫБРАТЬ
    Остатки.Номенклатура КАК Номенклатура,
    Остатки.КоличествоПлан КАК Кол_А,
    Остатки.КоличествоФакт КАК Кол_Б,
    (Остатки.КоличествоПлан - Остатки.КоличествоФакт) КАК РазностьКоличества
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки

В этом случае поле РазностьКоличества сразу появится в наборе данных. На вкладке «Ресурсы» останется лишь назначить для него функцию Сумма(РазностьКоличества) и сразу использовать в выбранных полях без лишних настроек вычисляемых выражений.

← На главную