Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

Округление в запросе 1С 8.3

Очень часто в запросах 1С 8.3 необходимо округлить значение «на лету», непосредственно в запросе. Сделать это очень просто. Для этого используется конструкция «Выразить()». Округление проходит по арифметическим правилам (в большую или меньшую сторону, в зависимости от последнего символа).

пример округления

Синтаксис оператора:

ВЫРАЗИТЬ(<Поле> КАК Число(<количество символов до перед запятой> , <количество символов после запятой))

Обычно используется:

  • для денежных средств (15, 2);
  • для количества товара, в том числе весового — (15,3);
  • для курсов валют — (10, 4).

Например, округление в запросе 1С до сотых:

ВЫРАЗИТЬ( 10/3 КАК (Число(10,2)) КАК РезультатДеления // система возвратит значение 3.3

Для округления до целых необходимо указать вторым параметром ноль:

ВЫРАЗИТЬ( 10/3 КАК (Число(10,0)) КАК РезультатДеления // система возвратит значение 3

Другие статьи по языку запросов 1С

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 18 на “Округление в запросе 1С 8.3
  1. ВЫРАЗИТЬ( 10/3 КАК (Число(10,2)) КАК РезультатДеления // система разве возвратит значение 3.3?
    А не 3.33?

    Ответить

  2. Спасибо помогло

    Ответить

  3. А если нужно целую часть «Обрезать»?

    Ответить

    • Число = Число — Окр(Число);

      Ответить

      • Окр — это метод в запросе?

        Ответить

    • Если нужно обрезать, тогда так
      Выразить(НашеЧисло — 0.5 Как Число(10, 0)),
      Выразить(НашеЧисло — 0.05 Как Число(10, 1)),
      Выразить(НашеЧисло — 0.005 Как Число(10, 2))
      И тд.

      Ответить

  4. Если в запросе:
    10/3 — ВЫРАЗИТЬ( 10/3 КАК (Число(10,0))

    Ответить

  5. ВЫРАЗИТЬ( КАК Число( , <количество символов после запятой))

    ДО или ПЕРЕД?

    Ответить

    • ДО и ПЕРЕД — это не одно и то же ли?

      Ответить

  6. ВЫРАЗИТЬ(Поле КАК Число(количество символов до перед запятой, количество символов после запятой))

    В знаках «больше/меньше» текст пропал.

    Ответить

    • «ВЫРАЗИТЬ(Поле КАК Число(количество символов до перед запятой, количество символов после запятой))»

      По-моему в первым параметром указывается всего количество знаков, а во второй части сколько из них после запятой

      Ответить

      • Очень похоже: однозначно первое число должно быть больше второго, иначе возникает ошибка.

        Ответить

  7. Запрос 1С округляет по математическим правилам. Поэтому, представленный перевод из даты в строку не всегда отрабатывает корректно. Пример: 29.08.1995
    Добавил немного, чтобы округления возвращали необходимые значения.
    ПОДСТРОКА(«0123456789», ДЕНЬ(&Дата) / 10 + 0.5, 1),
    ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * ДЕНЬ(&Дата))) / 6 + 0.5, 1),
    «/»,
    ПОДСТРОКА(«0123456789», МЕСЯЦ(&Дата) / 10 + 0.5, 1),
    ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, 6 * МЕСЯЦ(&Дата))) / 6 + 0.5, 1),
    «/»,
    ПОДСТРОКА(«0123456789», ГОД(&Дата) / 1000 + 0.5, 1),
    ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.06 — 0.5)) / 6 + 0.5, 1),
    ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 0.6 — 0.5)) / 6 + 0.5, 1),
    ПОДСТРОКА(«0123456789», СЕКУНДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, ГОД(&Дата) * 6 — 0.5)) / 6 + 0.5, 1)

    Ответить

    • Неправильно, для «29.08.1995» запрос вернет:

      Поле1 Поле2 Поле3 Поле4 Поле5 Поле6 Поле7 Поле8 Поле9 Поле10
      2 8 / 0 7 / 1 9 8 4

      Ответить

  8. ВЫБРАТЬ ВЫРАЗИТЬ(0 — 0.5 КАК ЧИСЛО(15, 0))

    возвращает -1.

    Ответить

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

    Ответить

  10. Например, округление в запросе 1С до сотых:

    ВЫРАЗИТЬ( 10/3 КАК (Число(10,2)) КАК РезультатДеления // система возвратит значение 3.3
    — нехватает одной скобки и результат 3.33

    Ответить

Добавить комментарий:

Ваш адрес email не будет опубликован.