Округление в запросе 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. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Pete:
ВЫРАЗИТЬ( 10/3 КАК (Число(10,2)) КАК РезультатДеления // система разве возвратит значение 3.3?
А не 3.33?
Кирилл:
Да, вы правы, это опечатка
Kavay:
Спасибо помогло
Владислав:
А если нужно целую часть «Обрезать»?
Кирилл:
Число = Число — Окр(Число);
Аноним:
Окр — это метод в запросе?
Аноним:
Если нужно обрезать, тогда так
Выразить(НашеЧисло — 0.5 Как Число(10, 0)),
Выразить(НашеЧисло — 0.05 Как Число(10, 1)),
Выразить(НашеЧисло — 0.005 Как Число(10, 2))
И тд.
Кирилл:
Если в запросе:
10/3 — ВЫРАЗИТЬ( 10/3 КАК (Число(10,0))
esqado:
ВЫРАЗИТЬ( КАК Число( , <количество символов после запятой))
ДО или ПЕРЕД?
foz:
ДО и ПЕРЕД — это не одно и то же ли?
esqado:
ВЫРАЗИТЬ(Поле КАК Число(количество символов до перед запятой, количество символов после запятой))
В знаках «больше/меньше» текст пропал.
wuso:
«ВЫРАЗИТЬ(Поле КАК Число(количество символов до перед запятой, количество символов после запятой))»
По-моему в первым параметром указывается всего количество знаков, а во второй части сколько из них после запятой
Аноним:
Очень похоже: однозначно первое число должно быть больше второго, иначе возникает ошибка.
[email protected]:
Запрос 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
unnamsa:
ВЫБРАТЬ ВЫРАЗИТЬ(0 — 0.5 КАК ЧИСЛО(15, 0))
возвращает -1.
ewg:
исправьте уже ошибку: Выразить как число: первый параметр это не число символов перед запятой, а число символов всего вместе с запятой!
ым:
Например, округление в запросе 1С до сотых:
ВЫРАЗИТЬ( 10/3 КАК (Число(10,2)) КАК РезультатДеления // система возвратит значение 3.3
— нехватает одной скобки и результат 3.33