Отчеты и Аналитика · 13 мин
Как округлить ресурс в СКД 1С
Как округлить ресурс в СКД 1С: выражение итога, функция Выразить, вычисляемые поля, формат числа в настройках. Пошаговые способы с примерами кода и типичными ошибками.
Ресурс в системе компоновки данных (СКД) — это числовое поле, по которому отчет считает итоги: сумму, количество, среднее. На практике итоговые значения часто получаются с длинной дробной частью: например, средняя цена 1453,333333 или сумма с копейками там, где нужны целые рубли. Округлить такой ресурс можно несколькими способами, и выбор зависит от того, где именно должно произойти округление — в запросе, в выражении ресурса, в вычисляемом поле или только при выводе на экран.
Ключевой момент, который нужно понять сразу: округление отображения и округление значения — разные вещи. Формат числа в настройках отчета меняет только вид числа в ячейке, но итоги и дальнейшие вычисления используют исходное значение. Если округленные значения должны участвовать в расчетах или суммироваться, округлять нужно само значение — через выражение ресурса или вычисляемое поле.
Ниже разобраны все рабочие способы: от простейшего форматирования до округления в запросе и на языке выражений СКД, с указанием ограничений каждого варианта и типичных ошибок.
Где в СКД вообще округляется ресурс: обзор точек вмешательства
СКД обрабатывает данные в несколько этапов, и округление можно встроить на любом из них. Первый этап — запрос набора данных: здесь округление выполняется средствами языка запросов до того, как данные попали в компоновку. Второй этап — вычисляемые поля, которые рассчитываются на языке выражений СКД уже после получения данных. Третий — выражение ресурса, где агрегируются итоги по группировкам. Четвертый — оформление, то есть формат вывода числа, который влияет только на отображение.
Выбор точки определяется задачей. Если округленное значение должно попадать в итоги по группам и в общий итог, округлять нужно как можно раньше — в запросе или вычисляемом поле, иначе сумма округленных значений не совпадет с округленной суммой. Если требуется только «красивый» вывод, достаточно формата.
Как выбрать способ округления
Способ 1: округление в выражении ресурса на закладке «Ресурсы»
Самый прямой ответ на вопрос «как округлить ресурс» — изменить выражение ресурса. Откройте схему компоновки данных, перейдите на закладку «Ресурсы», найдите нужное поле и отредактируйте колонку «Выражение». По умолчанию там стоит что-то вроде Сумма(СуммаОборот). Оберните выражение в функцию Выразить с указанием нужной разрядности:
Выразить(Сумма(СуммаОборот), "Число(15, 0)")
Функция Выразить в языке выражений СКД работает аналогично оператору ВЫРАЗИТЬ в языке запросов: приведение к типу с меньшей точностью выполняет округление по арифметическим правилам. Число(15, 0) округлит до целых, Число(15, 2) — до двух знаков после запятой. Обратите внимание: тип указывается строкой в кавычках, и общая длина числа должна быть достаточной, иначе при переполнении значение может быть обрезано.
Важно понимать порядок вычисления: сначала СКД агрегирует детальные записи (считает сумму), затем применяет округление к уже готовому итогу. Поэтому сумма округленного итога по группам может расходиться с округленным общим итогом — это нормальное следствие того, что округляется каждый итог отдельно.
Способ 2: округление в запросе набора данных
Если округленные значения должны участвовать во всех последующих расчетах и итогах, правильнее округлить данные на уровне запроса. В тексте запроса набора данных используется оператор ВЫРАЗИТЬ:
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
ВЫРАЗИТЬ(Продажи.СуммаОборот КАК ЧИСЛО(15, 0)) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи
При таком подходе в компоновку попадают уже округленные детальные значения, и функция Сумма в ресурсах складывает именно их. Итог по группе будет равен сумме округленных строк, что часто требуется в финансовых отчетах, где расхождение «копеек» между деталировкой и итогом недопустимо.
Ограничение способа: округление применяется ко всем строкам безусловно. Если разные строки требуют разной точности, придется добавлять условную логику через ВЫБОР ... КОГДА в запросе либо переходить к вычисляемым полям. Также помните, что округление в запросе выполняется на каждой детальной записи до группировки — при больших объемах данных это немного увеличивает время выполнения, хотя на практике разница обычно незаметна.
Способ 3: вычисляемые поля и функции округления
Вычисляемые поля находятся на одноименной закладке схемы компоновки и рассчитываются на языке выражений СКД для каждой строки. Добавьте поле, укажите путь к данным (например, СуммаОкругленная) и выражение:
Выразить(СуммаОборот, "Число(15, 2)")
Для более гибких сценариев доступна условная конструкция. Например, округление до целых только для крупных сумм и до двух знаков для мелких:
Выбор
Когда СуммаОборот >= 1000
Тогда Выразить(СуммаОборот, "Число(15, 0)")
Иначе Выразить(СуммаОборот, "Число(15, 2)")
Конец
После создания вычисляемого поля его нужно добавить в ресурсы (если по нему требуются итоги) и в выбранные поля настроек отчета. Типичная ошибка — создать вычисляемое поле, но забыть включить его в ресурсы: тогда в группировках поле останется пустым, потому что СКД не знает, как его агрегировать.
Способ 4: округление только отображения через формат числа
Когда значение должно остаться точным, а округлить нужно только вывод, используется строка форматирования. Есть два места, где её можно задать. Первое — закладка «Наборы данных», колонка с параметрами редактирования поля, свойство «Формат». Второе — настройки отчета: выделите поле в выбранных полях и задайте условное оформление с параметром «Формат».
Строка формата строится по правилам конструктора форматной строки 1С. Для округления отображения до двух знаков используется, например:
ЧДЦ=2; ЧРД=,; ЧН=0,00
Здесь ЧДЦ — число десятичных знаков, ЧРД — разделитель дробной части, ЧН — представление нуля. Для целых чисел укажите ЧДЦ=0. Помните: формат влияет только на визуальное представление. При выгрузке отчета в Excel в ячейку попадет исходное неокругленное значение с примененным форматом отображения — в зависимости от настроек Excel пользователь может увидеть полную точность в строке формул.
Сравнение способов округления
Самый простой, но меняет только отображение; итоги и выгрузки содержат исходные значения
Округляет готовые итоги; детальные записи остаются точными, возможны расхождения между группами и общим итогом
Округляет каждую строку до компоновки; итоги согласованы с деталями, но безусловное применение ко всем строкам
Гибкая условная логика на языке СКД; требует добавления поля в ресурсы и выбранные поля
Округление среднего и других агрегатных функций
Чаще всего проблема длинных дробных частей возникает именно со средним: Среднее(Цена) почти всегда дает много знаков после запятой. Округление выполняется тем же способом — оборачиванием агрегатной функции в Выразить:
Выразить(Среднее(Цена), "Число(15, 2)")
То же относится к функциям Максимум, Минимум и пользовательским выражениям вроде Сумма(СуммаОборот) / Сумма(КоличествоОборот). Для средневзвешенных показателей, рассчитываемых делением одного ресурса на другой, округляйте всё выражение целиком, а не каждый операнд по отдельности — иначе накапливается двойная погрешность.
Отдельный случай — проценты. Если ресурс вычисляется как доля, умноженная на сто, сначала выполните весь расчет, и только финальный результат оберните в Выразить с нужной точностью, обычно один-два знака.
Проверка результата и контроль расхождений
После внедрения округления обязательно проверьте отчет на контрольном примере с заранее известным результатом. Возьмите небольшой период или одну группировку, где итог можно посчитать вручную, и сравните: совпадает ли округленный итог с ожидаемым, сходятся ли суммы по группам с общим итогом.
Обратите внимание на граничные значения: числа вида 0,5, 2,5, 10,5 покажут, как именно работает округление. В 1С приведение типа округляет арифметически — 0,5 уходит вверх до 1. Если учетная политика требует иного правила (например, всегда в меньшую сторону), стандартного Выразить недостаточно — понадобится собственная арифметика в выражении, например вычитание 0,5 перед округлением вверх, или вынос расчета в общий модуль с вызовом функции из выражения СКД.
Как проверить результат
При округлении в запросе итог равен сумме округленных строк
Итог отличается от суммы строк — округление применено к итогу, а не к строкам
Превратилось в 1 (арифметическое округление)
Превратилось в 0 — значит, используется отсечение, а не округление, проверьте выражение
Ячейки содержат ожидаемую точность
В строке формул видны длинные дроби — округлен только формат, а не значение
Расходится с суммой итогов групп не более чем на ожидаемую погрешность округления
Расхождение заметно больше — вероятно двойное округление или ошибка в выражении
Ограничения и когда стоит привлечь разработчика
Все описанные способы доступны в конструкторе схемы компоновки и не требуют модификации конфигурации, если отчет внешний или схема редактируется в режиме предприятия через «Изменить вариант» с расширенными настройками (где это разрешено правами). Однако есть ситуации, где возможностей закладок СКД не хватает.
Нестандартные правила округления (банковское округление, округление до кратного — например, до 0,5 или до 10), округление с накоплением погрешности по строкам, а также случаи, когда округленное значение должно записываться обратно в базу, решаются программно: через функции общих модулей, вызываемые из выражений СКД, или через программную компоновку отчета. Такие доработки меняют поведение учетных данных, поэтому их стоит выполнять на копии базы и согласовывать с тем, кто отвечает за отчетность.
Часто задаваемые вопросы
Почему после округления сумма по группам не равна общему итогу?
Потому что округление в выражении ресурса применяется к каждому итогу независимо: групповой итог и общий итог округляются от своих исходных значений. Если требуется полное совпадение, округляйте детальные строки в запросе или вычисляемом поле — тогда сумма округленных строк даст согласованный итог.
Как округлить ресурс до двух знаков, а не до целых?
В функции Выразить укажите нужную разрядность: Выразить(Сумма(СуммаОборот), "Число(15, 2)"). Второй параметр в скобках — количество знаков после запятой. Для формата отображения используйте строку ЧДЦ=2 в оформлении поля.
Можно ли округлить ресурс без изменения схемы компоновки?
Да, если достаточно округления отображения. В режиме предприятия откройте настройки отчета, добавьте условное оформление для нужного поля и задайте параметр «Формат» с требуемой точностью. Значение при этом останется исходным, изменится только вид числа.
Выразить отсекает дробную часть вместо округления — в чем причина?
Приведение к числу в 1С выполняет арифметическое округление, а не отсечение. Если вы наблюдаете отсечение, проверьте, не применяется ли где-то функция Цел() или целочисленное деление, и не задана ли нулевая точность на промежуточном этапе — например, поле уже округлено до целых в запросе, а вы пытаетесь получить копейки в ресурсе.
Как округлить до тысяч, чтобы отчет показывал суммы в тысячах рублей?
Разделите значение на 1000 и округлите результат: Выразить(Сумма(СуммаОборот) / 1000, "Число(15, 1)"). Один знак после запятой сохранит наглядность. Добавьте в заголовок поля пометку «тыс. руб.», чтобы пользователи правильно трактовали цифры.
Работает ли округление в ресурсах для иерархических группировок?
Да, выражение ресурса применяется на каждом уровне иерархии независимо. Учтите, что итог по родительскому элементу округляется от суммы исходных значений всех его детальных записей, а не от суммы уже округленных итогов подчиненных уровней, поэтому между уровнями возможны расхождения на величину погрешности округления.
Что важно запомнить
Округление ресурса в СКД делается через Выразить в выражении ресурса, в запросе набора данных или в вычисляемом поле — в зависимости от того, должны ли округленные значения участвовать в итогах. Формат числа меняет только отображение. После настройки проверьте отчет на контрольном примере и граничных значениях 0,5, а для регламентированной отчетности согласуйте правило округления с бухгалтерией.