|   |   | 
| 
 | 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)) конец | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |