Округление

1. BigBoss 2 11.01.17 11:06 Сейчас в теме
Здравствуйте. Есть отчет, данные берутся запросом. Допустим в ячейке выводиться число 15 114,7. Если я в конструкторе форматной строки в свойствах ячейки делаю так:
ЧДЦ=0


то выводиться 15 115. А нужно 15 114. Т.е убрать числа после запятой, без округления. Можно ли так сделать при помощи конструктора форматной строки?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. fromtomike 48 11.01.17 11:42 Сейчас в теме
(1)В Формат(...) работает стандартный механизм округления, т.е. в большую сторону.
Если округлять до целых нужно в меньшую полагаю подойдет такой способ:
От исходного числа отнимаем 0.5
Далее все как было раньше
Формат(15114.7-0.5, "ЧДЦ=0") = 15114
Формат(15114.2-0.5, "ЧДЦ=0") = 15114
4. fromtomike 48 11.01.17 11:43 Сейчас в теме
(1) И даже так:
Формат(15114-0.5, "ЧДЦ=0") = 15114
2. корум 287 11.01.17 11:37 Сейчас в теме
(0) Насколько помню, там можно писать арифметические и строковые функции.
Цел(ТвоеЧисло) поможет
5. BigBoss 2 11.01.17 11:54 Сейчас в теме
Допустим пишу так:
Область.параметры.сумма = Формат(Выборка.Сумма-0.5, "ЧДЦ=0");
???
Сейчас попробую
6. spacecraft 11.01.17 11:56 Сейчас в теме
(5) зачем так извращаться?
в (2) уже ответили:
Область.параметры.сумма = Цел(Выборка.Сумма)
7. BigBoss 2 16.01.17 11:17 Сейчас в теме
Решил делать округление в запросе, если округлять в коде то всё было ок, но если в запросе пишу так:
СУММА(ВЫРАЗИТЬ(ЕСТЬNULL(Итоговая.Оплата, 0) КАК ЧИСЛО(15, 2))) КАК Оплата


выводит 58 184,51 а нужно 58 184. Можно ли так округлить в запросе?
8. kuzev 47 16.01.17 11:19 Сейчас в теме
9. BigBoss 2 16.01.17 11:24 Сейчас в теме
(8) нет, тогда выводиться 58 185, а нужно 58 184
10. Sokar 16.01.17 11:27 Сейчас в теме
// по умолчанию округление работает в большую сторону
Сообщить(Окр(1.5, 0)); // 2
// а если указать третьим параметром 0, то в меньшую
Сообщить(Окр(1.5, 0, 0)); // 1


не дочитал, что это запрос... так что пост анулирован... сорри
11. BigBoss 2 16.01.17 11:37 Сейчас в теме
(10)

Окр


Можно использовать в запросе?
12. BigBoss 2 16.01.17 11:42 Сейчас в теме
(10) а в запросе можно такое сделать? Там вроде только
выразить.. как число ()


используют, но округляет не как 58 184, а 58 185
16. Sashares 34 16.01.17 11:50 Сейчас в теме
(10)
// а если указать третьим параметром 0, то в меньшую
Сообщить(Окр(1.5, 0, 0)); // 1

Вы удивитесь результату выражения Сообщить(Окр(1.51, 0, 0));
28. Sokar 16.01.17 12:50 Сейчас в теме
13. Sokar 16.01.17 11:45 Сейчас в теме
КОГДА ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 0)) > Поле ТОГДА
ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 0)) - 1
ИНАЧЕ ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 0)) КОНЕЦ
18. BigBoss 2 16.01.17 11:53 Сейчас в теме
(13)
КОГДА ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 0)) > Поле ТОГДА
ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 0)) - 1
ИНАЧЕ ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 0)) КОНЕЦ


работает, но теперь выводиться -1 там где было 0


21. BigBoss 2 16.01.17 12:18 Сейчас в теме
(18) У меня синтаксическую ошибку выдаёт :
синтаксическая ошибка "ВЫБРАТЬ"

у меня запрос такого вида:
       |	СУММА(ЕСТЬNULL(Итоговая.Нагрузка, 0)) КАК Нагрузка,
                   |ВЫБРАТЬ 
                   |         ВЫБОР
                   |    КОГДА Оплата>= ВЫРАЗИТЬ(Итоговая.Оплата КАК ЧИСЛО(15, 0))
                   |    ТОГДА ВЫРАЗИТЬ(Итоговая.Оплата КАК ЧИСЛО(15, 0))
                   |      ИНАЧЕ ВЫРАЗИТЬ(Итоговая.Оплата КАК ЧИСЛО(15, 0)) - 1
                   |       КОНЕЦ
                   |ИЗ
	               |	(ВЫБРАТЬ
	           ..............далее продолжается текст запроса............
Показать
23. spacecraft 16.01.17 12:20 Сейчас в теме
(21) в данном случае Выбрать не нужно. Выбрать было раньше.
24. BigBoss 2 16.01.17 12:30 Сейчас в теме
(23) убрал Выбрать, ругалось что поле должно присутствовать в выборке, сделать так:
 |	СУММА(ЕСТЬNULL(Итоговая.Нагрузка, 0)) КАК Нагрузка,
				   |СУММА(ЕСТЬNULL(Итоговая.Оплата, 0)) КАК Оплата,
                   |     ВЫБОР
                   |    КОГДА Оплата >= ВЫРАЗИТЬ(Итоговая.Оплата КАК ЧИСЛО(15, 0))
                   |    ТОГДА ВЫРАЗИТЬ(Итоговая.ОплатаКАК ЧИСЛО(15, 0))
                   |      ИНАЧЕ ВЫРАЗИТЬ(Итоговая.ОплатаКАК ЧИСЛО(15, 0)) - 1
                   |       КОНЕЦ 
	               |ИЗ
	               |	(ВЫБРАТЬ
..............далее таекст запроса продолж..........
Показать


ругается
Поле не входит в группу "Итоговая.Оплата"
ИНАЧЕ ВЫРАЗИТЬ(<<?>>Итоговая.Оплата КАК ЧИСЛО(15, 0)) - 1
25. spacecraft 16.01.17 12:42 Сейчас в теме
(24)
|СУММА(ЕСТЬNULL(Итоговая.Нагрузка, 0)) КАК Нагрузка,
|СУММА(ЕСТЬNULL(Итоговая.Оплата, 0)) КАК Оплата,
|ВЫБОР
|    КОГДА СУММА(ЕСТЬNULL(Итоговая.Оплата, 0))>= ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(Итоговая.Оплата, 0)) КАК ЧИСЛО(15, 0))
|    ТОГДА ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(Итоговая.Оплата, 0)) КАК ЧИСЛО(15, 0))
|    ИНАЧЕ ВЫРАЗИТЬ(СУММА(ЕСТЬNULL(Итоговая.Оплата, 0)) КАК ЧИСЛО(15, 0)) - 1
|КОНЕЦ КАК Сумма
|ИЗ
Показать


Только зачем это делать в запросе, если проще в параметр табличного документа передавать значение через ОКР()?
26. Sokar 16.01.17 12:44 Сейчас в теме
(25)

очень часто требуется реализация именно на уровне запроса... например, если СКД, то никаких параметров табличного документа...
27. spacecraft 16.01.17 12:48 Сейчас в теме
(26) а прочитать исходный вопрос? (1) и (5)
30. spacecraft 16.01.17 12:57 Сейчас в теме
(26) конечно имелось ввиду не Окр(), а Цел() :)
В СКД это просто. Там есть Вычисляемые выражения и Цел() там работает.
29. BigBoss 2 16.01.17 12:50 Сейчас в теме
(25)
Только зачем это делать в запросе, если проще в параметр табличного документа передавать значение через ОКР()?


Можно, но потом как вывести "Итого"? там данные выводятся как раз через запрос
31. vadim1011985 99 16.01.17 12:57 Сейчас в теме
(29) Использовать Итоги Запроса и обходить запрос по группировкам
32. spacecraft 16.01.17 13:06 Сейчас в теме
(29) можно и без запроса.
Перед циклом обхода запроса создать переменную
СуммаИтого = 0;
И в цикле, при присваивании параметру:
Область.параметры.сумма = Цел(Выборка.Сумма);
СуммаИтого = СуммаИтого + Цел(Выборка.Сумма);

И в конце присваивание параметру Итого значение переменной СуммаИтого.
33. v3rter 16.01.17 14:59 Сейчас в теме
(32) Сумма целых (или округлений) не будет совпадать с целой частью (или округлением) суммы.
34. Sokar 16.01.17 15:15 Сейчас в теме
(33) это и не нужно... в (32) предложено было суммировать именно целые части, а не суммы и потом из нее выделять целое
14. v3rter 16.01.17 11:45 Сейчас в теме
А так?
выразить..-0.5 как число ()
15. Sokar 16.01.17 11:47 Сейчас в теме
//про целую часть числа

ВЫБРАТЬ
ВЫБОР
КОГДА &ТекЧисло > 0
ТОГДА ВЫРАЗИТЬ(&ТекЧисло - 0.5 КАК ЧИСЛО(15, 0))
ИНАЧЕ ВЫРАЗИТЬ(&ТекЧисло + 0.5 КАК ЧИСЛО(15, 0))
КОНЕЦ КАК Поле1
17. vis1984p 2 16.01.17 11:51 Сейчас в теме
Попробуйте СУММА(ВЫРАЗИТЬ(ЕСТЬNULL(Итоговая.Оплата, 0) КАК ЧИСЛО(15, 0))) КАК Оплата
19. kuzev 47 16.01.17 11:55 Сейчас в теме
ВЫБРАТЬ 
	ВЫБОР
		КОГДА Поле >= ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 0))
		ТОГДА ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 0))
		ИНАЧЕ ВЫРАЗИТЬ(Поле КАК ЧИСЛО(15, 0)) - 1
	КОНЕЦ
22. spacecraft 16.01.17 12:19 Сейчас в теме
(19) этот запрос не учитывает отрицательные числа. С ними подстава получится.
20. vadim1011985 99 16.01.17 12:03 Сейчас в теме
Не через запрос
Область.параметры.сумма = Формат(Выборка.Сумма-(Выборка.Сумма%1),"ЧДЦ=2"));
35. Craig 274 03.03.24 20:27 Сейчас в теме
с версии платформы 8.3.20. теперь в запросе есть функция:

Окр(Round) - округляет число до нужной разрядности
Цел(Int) - вычисляет целую часть числа, полностью отсекая дробную часть.

и к вопросу округлить в меньшую сторону можно следующим образом в запросе Цел(Сумма*100)*0.01)
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день