|
1С. Проверка на ошибку округления "22003" в запросе. | ☑ | ||
---|---|---|---|---|
0
1СобакаИли2
12.12.23
✎
12:16
|
Добрый день.
ВЫРАЗИТЬ((Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 КАК ЧИСЛО(5, 2)) Возникает ситуация, когда число не вмещается в (5,2). Расширение знаком не нужно. Ошибка возникает в момент, когда при установке цен была допущена ошибка. Можно ли проверить получается ли системе выразить число, если да выводить: ВЫРАЗИТЬ((Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 КАК ЧИСЛО(5, 2)) Если нет, указывать на проблемную номенклатуру |
|||
1
Лиза777
12.12.23
✎
12:24
|
а как вы хотите прям в запросе проверить в прям в запросе вывести сообщение об ошибке что ли?
Можно же проверить цену ДО запроса и вывести соответствующее сообщение. Или цены проверить в другом запросе тоже можно ДО этого |
|||
2
shuhard
12.12.23
✎
12:25
|
(0) что-то мешает проверить вхождение в интервал ?
|
|||
3
Timon1405
12.12.23
✎
12:43
|
выбор когда (Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 > 999 тогда "ругаемся"
иначе ВЫРАЗИТЬ((Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 КАК ЧИСЛО(5, 2)) конец |
|||
4
bolobol
12.12.23
✎
12:47
|
(3) >=999.995
|
|||
5
1СобакаИли2
12.12.23
✎
13:04
|
(1) В запросе. Номенклатуры много, цен много, также присутствуют доработки с наценками. Жертвовать производительностью, чтобы данные выбирать ДО и проверять нет необходимости.
|
|||
6
1СобакаИли2
12.12.23
✎
13:05
|
(2) Так ведь задача в этом, мешает отсутствие опыта
|
|||
7
1СобакаИли2
12.12.23
✎
13:06
|
(3) Спасибо, логика понятна, проверю
|
|||
8
1СобакаИли2
12.12.23
✎
13:06
|
(4) Почему .995, а не .9, или .999?
|
|||
9
vde69
12.12.23
✎
13:13
|
когда ВЫРАЗИТЬ((Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 КАК ЧИСЛО(5, 2)) <> ВЫРАЗИТЬ((Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 КАК ЧИСЛО(10, 2)) Тогда
"хрень" иначе ВЫРАЗИТЬ((Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 КАК ЧИСЛО(5, 2)) |
|||
10
1СобакаИли2
12.12.23
✎
13:14
|
(4) Понял, из-за выражения 5.2, два знака после запятой.
Тогда почему > .995, а не >.994. Ведь > .994 это и есть .995, которое округляется |
|||
11
1СобакаИли2
12.12.23
✎
13:16
|
(9) А разве, если выражение ВЫРАЗИТЬ((Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 КАК ЧИСЛО(5, 2)) не выполниться ошибки не будет при сравнении?
|
|||
12
vde69
12.12.23
✎
13:19
|
не будет, выразить это каст в скуле, каст числа просто отбросит лишние разряды и все, никакой ошибки не должно быть (разумеется если кастуем число а не что-то другое)
|
|||
13
vde69
12.12.23
✎
13:21
|
вот если у тебя БазоваяЦенаСрав = 0 тогда будет ошибка....
или если любая из других переменных будет например = "неопределено" или "null" тогда то-же ошибка |
|||
14
1СобакаИли2
12.12.23
✎
13:58
|
(12) Вы не правы, ошибка 22003 при данном сравнении
|
|||
15
1СобакаИли2
12.12.23
✎
14:25
|
(12) Ведь ошибка возникает в СУБД, в момент преобразования к типу число, а для сравнения необходимо преобразовать.
Тогда, рабочим вариантом остается сравнение с числом до преобразования, аля: выбор когда (Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 > 999.994 тогда "ругаемся" иначе ВЫРАЗИТЬ((Цена - БазоваяЦена) / БазоваяЦенаСрав * 100 КАК ЧИСЛО(5, 2)) конец |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |