Округление результатов в запросах 1С - тонкий нюанс разработки, который часто упускают из виду программисты. Однако правильное использование инструментов округления помогает решить многие практические задачи: от корректного отображения сумм в отчетах до повышения быстродействия запросов. В этой статье мы подробно разберем, как грамотно округлять числа в запросах 1С для повышения качества разработки.
Базовые способы округления в 1С
Для округления чисел в 1С предусмотрена встроенная функция Окр(). Это основной и наиболее удобный инструмент для округления результатов вычислений и значений реквизитов.
Функция Окр()
Функция Окр() принимает один обязательный параметр - число для округления. По умолчанию округление происходит до целого числа. Например:
Окр(4.6) = 5 Окр(-2.3) = -2
Чтобы указать точность округления, используется второй необязательный параметр. Например, округление с точностью до десятых:
Окр(3.1415, 0.1) = 3.1
Округление до сотых:
Окр(3.1415, 0.01) = 3.14
Также во втором параметре можно указывать правило округления. Например, для округления в меньшую сторону используется значение -1:
Окр(4.6, -1) = 4
Для округления в большую сторону соответственно 1:
Окр(4.2, 1) = 5
Примеры использования Окр()
Рассмотрим несколько примеров применения функции Окр() в различных ситуациях.
Округление суммы документа до целых рублей:
СуммаДок = Окр(Документ.Сумма, 1)
Округление средней стоимости товара с точностью до копеек:
СрСтоимость = Окр(Товары.Цена / Товары.Количество, 0.01)
Округление процентной ставки до двух знаков после запятой:
Ставка = Окр(ИсходнаяСтавка, 0.01)
Таким образом, с помощью функции Окр() можно решать широкий круг задач, связанных с округлением чисел в 1С.
Решение распространенных задач округления
Рассмотрим несколько распространенных задач, возникающих при разработке в системе 1С, и способы их решения с использованием округления.
Округление суммы документа до целых рублей
При работе с документами, такими как счета, накладные, акты, часто возникает необходимость округлить их суммы до целых значений в рублях. Для этого можно воспользоваться функцией Окр():
Процедура ОкруглитьСуммуДокумента() СуммаДок = Документ.Сумма; ОкругленнаяСумма = Окр(СуммаДок, 1); Документ.Сумма = ОкругленнаяСумма; КонецПроцедуры
Здесь мы сохраняем исходную сумму, округляем ее до целого значения с помощью Окр() и присваиваем округленную сумму обратно документу.
Округление количества товаров до целых единиц
При работе с остатками и поступлением товаров также часто требуется округление до целых значений. Допустим, при списании товара с остатков:
Процедура СписатьТовар() КоличИсходное = Товар.Остаток; КоличСписанное = Документ.Количество; ОкругленноеКолич = Окр(КоличИсходное - КоличСписанное, 1); Товар.Остаток = ОкругленноеКолич; КонецПроцедуры
Здесь мы вычитаем из исходного остатка товара количество по документу, округляем результат до целого и записываем обратно в остаток товара.
Округление среднего значения показателя за период
При анализе данных часто приходится округлять усредненные или агрегированные значения. Например, среднюю себестоимость товара за месяц:
СрСебестоимость = Окр(Сумма(Документы.Себестоимость) / Количество(Документы), 2);
Здесь мы делим сумму себестоимости всех документов за месяц на их количество с округлением до сотых.
Округление процентной ставки до десятых долей
При работе с процентными ставками также часто необходимо округление до определенной точности. Например:
Ставка = Окр(ИсходнаяСтавка, 0.1);
Это позволяет округлить ставку до десятых долей процента.
Таким образом, округление с помощью Окр() помогает решать многие задачи обработки данных в 1С.
"1с округление в запросе"
Округление результатов вычислений непосредственно в запросах 1С также является полезным инструментом разработчика. Для этого служит отдельная функция.
Функция Выразить()
В отличие от процедурного кода, в запросах 1С для округления используется функция Выразить(). Она позволяет привести результат выражения к определенному типу данных, в том числе округлить числовое значение.
Синтаксис:
ВЫРАЗИТЬ(Выражение КАК ТипДанных)
Например, округление до целого:
ВЫРАЗИТЬ(Сумма / Количество КАК ЧИСЛО(10))
Здесь мы делим сумму на количество и округляем результат до целого числа с 10 знаками в целой части.
Аналогично можно указать любую другую точность округления, например:
ВЫРАЗИТЬ(Сумма / Количество КАК ЧИСЛО(10, 2))
В этом случае округление будет до сотых.
Особенности округления NULL значений
При округлении в запросах нужно учитывать возможность получения NULL значений. Например:
ВЫРАЗИТЬ(НЕОПРЕДЕЛЕНО КАК ЧИСЛО(10))
Вернет NULL вместо округленного числа. Чтобы этого избежать, можно использовать функцию обхода NULL:
ВЫРАЗИТЬ(ЕСТЬНУЛЛ(НЕОПРЕДЕЛЕНО, 0) КАК ЧИСЛО(10))
Она заменит NULL на ноль и позволит корректно округлить результат.
Рекомендации по выбору точности
При использовании Выразить() для округления в запросах следует:
- Указывать минимально необходимую точность округления
- Учитывать требования к разрядности данных в отчетах
- Тестировать запросы на разных типах СУБД
- Анализировать планы запросов на предмет производительности
Грамотное применение функции позволяет оптимизировать работу запросов.
"1с 8 округление в запросе"
Начиная с платформы 1С:Предприятия 8.3.15 появилась возможность округления результатов прямо в запросах. Это упростило решение многих задач.
Новые функции в версии 8.3.15
Были добавлены следующие функции для округления:
- Окр() - округление с параметрами
- Ceil() - округление в большую сторону до целого
- Floor() - округление в меньшую сторону до целого
- Round() - округление до целого по правилам
Это избавило от необходимости использовать дополнительные вычисления в коде модулей для округления данных.
Примеры использования
Теперь для округления суммы документов можно писать:
Выбрать Окр(Сумма(Документы.Сумма), 1) Из Документы
А для округления количества товаров до целого:
Выбрать Floor(Товары.Остаток) Из Товары
Это сильно упростило формирование отчетов с округленными данными.
Выводы
Поддержка округления в запросах на уровне платформы с версии 8.3.15 значительно ускоряет разработку и улучшает читаемость кода.