При настройке отчетов в системе компоновки данных (СКД) часто возникает задача вывести разницу, сумму или результат умножения нескольких колонок (например, посчитать отклонение Кол А - Кол Б). Проанализируем, можно ли задать такую формулу непосредственно в списке выбранных полей и какими штатными способами платформа 1С позволяет выполнять расчеты между полями.
Разберем поведение платформы: напрямую ввести произвольное арифметическое выражение или формулу в окне «Выбранные поля» (как в режиме Конфигуратор, так и в пользовательском режиме 1С:Предприятие) невозможно. Эта секция предназначена исключительно для управления составом и порядком отображения уже существующих полей компоновки.
В выбранные поля можно добавлять только:
% в группе, % по горизонтали, % в общем итоге).Автополе.Если вам требуется сложить, вычесть или умножить значения колонок, рассмотрим правильные способы решения этой задачи.
Если отчет уже готов и его нельзя дорабатывать в конфигураторе, настроим расчет прямо в пользовательском интерфейсе с помощью механизма пользовательских полей. Разберем по шагам:
Отклонение количества).Для расчета по строкам укажем выражение в поле «Выражение детальных записей»:
[Кол А] - [Кол Б]
Для корректного расчета итогов по группировкам и общего итога отчета обязательно укажем агрегатную функцию в поле «Выражение итоговых записей»:
Сумма([Кол А]) - Сумма([Кол Б])
После сохранения настройки созданное поле появится в общем списке доступных полей, и его можно будет перетащить или добавить в «Выбранные поля» отчета.
Если вы разрабатываете отчет в схеме компоновки данных, правильнее заложить формулу на уровне структуры схемы. Разберем порядок действий:
РазностьКоличества) и понятный «Заголовок».Кол_А - Кол_Б
Чтобы поле корректно суммировалось в группировках и общих итогах отчета, перейдем на вкладку «Ресурсы» и настроим итоговый расчет. Добавим поле РазностьКоличества и укажем выражение:
Сумма(РазностьКоличества)
или:
Сумма(Кол_А) - Сумма(Кол_Б)
После этого поле РазностьКоличества станет доступно на вкладке «Настройки» в списке полей для добавления в выбранные поля отчета.
Посмотрим на ситуацию со стороны оптимизации производительности: если исходные поля Кол_А и Кол_Б формируются в наборе данных типа «Запрос», расчет разности эффективнее всего перенести на уровень СУБД.
Пример фрагмента запроса:
ВЫБРАТЬ
Остатки.Номенклатура КАК Номенклатура,
Остатки.КоличествоПлан КАК Кол_А,
Остатки.КоличествоФакт КАК Кол_Б,
(Остатки.КоличествоПлан - Остатки.КоличествоФакт) КАК РазностьКоличества
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
В этом случае поле РазностьКоличества сразу появится в наборе данных. На вкладке «Ресурсы» останется лишь назначить для него функцию Сумма(РазностьКоличества) и сразу использовать в выбранных полях без лишних настроек вычисляемых выражений.