Как правильно вычислить модуль числа в запросе 1С

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

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

Почему возникают пустые значения в запросе

Чаще всего при попытке вычислить модуль числа через ВЫБОР разработчики забывают про секцию ИНАЧЕ. В языке запросов 1С, если условие не выполняется (например, число положительное) и секция ИНАЧЕ не указана, система неявно возвращает значение NULL.

Это приводит к критической ошибке при суммировании: в языке запросов 1С любая арифметическая операция с NULL (например, NULL + 100) дает в результате NULL. В итоге вся итоговая колонка оказывается пустой, хотя данные в системе присутствуют.

Разбираем правильный синтаксис

Чтобы избежать появления NULL, необходимо всегда указывать ветку ИНАЧЕ. Если нам нужно превратить отрицательное число в положительное, а положительное оставить без изменений, мы должны явно указать это в запросе.

Рассмотрим структуру выражения для вычисления модуля:


ВЫБОР
    КОГДА НачальныйОстаток < 0 
    ТОГДА -НачальныйОстаток 
    ИНАЧЕ НачальныйОстаток 
КОНЕЦ

В этом примере мы «просим» систему проверить значение: если оно меньше нуля, мы умножаем его на -1 (или просто ставим минус перед полем), а если число положительное или равно нулю, мы возвращаем его исходное значение через ИНАЧЕ. Такой подход гарантирует, что мы всегда получим числовое значение, которое можно корректно просуммировать.

Пошаговое решение задачи суммирования

Допустим, у нас есть несколько полей, которые мы хотим просуммировать по модулю. Чтобы получить итоговый результат, нам нужно применить логику ВЫБОР к каждому слагаемому отдельно. Проанализируем алгоритм:

  1. Для каждого числового поля в запросе создаем конструкцию ВЫБОР ... ИНАЧЕ ... КОНЕЦ.
  2. Убеждаемся, что в каждом блоке ВЫБОР присутствует ключевое слово КОГДА перед условием.
  3. Обязательно добавляем секцию ИНАЧЕ, чтобы при положительных значениях мы не получали NULL.
  4. Складываем полученные выражения с помощью знака «+».

Давайте посмотрим, как будет выглядеть итоговый запрос для нашей задачи:


ВЫБОР
    КОГДА НачальныйОстаток < 0 ТОГДА -НачальныйОстаток ИНАЧЕ НачальныйОстаток
КОНЕЦ +
ВЫБОР
    КОГДА Приход < 0 ТОГДА -Приход ИНАЧЕ Приход
КОНЕЦ +
ВЫБОР
    КОГДА Расход < 0 ТОГДА -Расход ИНАЧЕ Расход
КОНЕЦ +
ВЫБОР
    КОГДА КонечныйОстаток < 0 ТОГДА -КонечныйОстаток ИНАЧЕ КонечныйОстаток
КОНЕЦ КАК СуммаПоМодулю

Важные советы при работе с запросами

При написании подобных конструкций важно помнить о следующих нюансах:

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

← На главную