|   |   | 
| 
 | Как работает неявное преобразование типов внутри платформы? | ☑ | ||
|---|---|---|---|---|
| 0
    
        ssalikoff 09.07.19✎ 14:54 | 
        Добрый день!
 После недавнего обновления платформы до 8.3.15.1489 и релиза УТ до 11.4.8.84 в базе обнаружилась проблема: в списке заказов клиентов в уже закрытых и отработанных заказах процент оплаты и отгрузки стал отображаться 99%. Стал разбираться. Нашёл проблемное место. Оно находится в процедуре ТаблицаСостоянийЗаказов() модуля менеджера РС СостоянияЗаказовКлиентов. Проблема в запросе, точнее в возвращаемом им значении. Я выкинул всё лишнее из запроса, оставил только саму суть: ВЫБРАТЬ ЗаказыОстатки.ЗаказКлиента КАК ЗаказКлиента, СУММА(ЗаказыОстатки.СуммаРасход) КАК СуммаРасход ПОМЕСТИТЬ ВТ ИЗ РегистрНакопления.ЗаказыКлиентов.ОстаткиИОбороты(, , , , ЗаказКлиента = &Заказ) КАК ЗаказыОстатки СГРУППИРОВАТЬ ПО ЗаказыОстатки.ЗаказКлиента ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.СуммаРасход * 100 / Документ.СуммаДокумента КАК ПроцентОтгрузки ИЗ Документ.ЗаказКлиента КАК Документ ЛЕВОЕ СОЕДИНЕНИЕ ВТ КАК ВТ ПО Документ.Ссылка = ВТ.ЗаказКлиента ГДЕ Документ.Ссылка = &Заказ ВТ.СуммаРасход равна 10840.00 и Документ.СуммаДокумента равна 10840.00. Однако ВТ.СуммаРасход * 100 / Документ.СуммаДокумента возвращает значение 99.9999756 Что это значит? Я не могу это объяснить и обращаюсь к вам за помощью. Если поменять порядок операций, и сначала поделить, а потом умножить, тогда всё в норме: ВТ.СуммаРасход / Документ.СуммаДокумента * 100 = 100 Если сделать так: ВЫРАЗИТЬ(ВТ.СуммаРасход КАК Число(15,2)) * 100 / Документ.СуммаДокумента, то снова всё в порядке. В конфигураторе тип данных обоих операндов Число(15,2), на всяких случай проверил в MSSQL, там тип данных numeric(15,2) | |||
| 1
    
        Admin_Net_1C 09.07.19✎ 14:57 | 
        (0) забавно. Подпишусь на тему, интересен ход расследования )     | |||
| 2
    
        vis_tmp 09.07.19✎ 15:11 | 
        (0)На hotline написал, пример выслал?     | |||
| 3
    
        ssalikoff 09.07.19✎ 15:12 | 
        (2)подписки нету, ничего выслать не могу     | |||
| 4
    
        ДенисЧ 09.07.19✎ 15:14 | 
        Тут вроде совсем недавно в одной из тем проскакивало... Похоже, баг платформы.
 Или, как они пишут "поведение платформы приведено к ожидаемому" ))) | |||
| 5
    
        Вафель 09.07.19✎ 15:14 | 
        скуль или файловая?     | |||
| 6
    
        ssalikoff 09.07.19✎ 15:15 | 
        (5) MSSQL
 Хотел в файловом варианте проверить, но не могу: ограничение размера базы не даёт. | |||
| 7
    
        Ёпрст гуру 09.07.19✎ 15:17 | 
        (5) >>>на всяких случай проверил в MSSQL, там тип данных numeric(15,2)     | |||
| 8
    
        Вафель 09.07.19✎ 15:17 | 
        на скуле вроде не может быть такой ошибки. не флоаты же     | |||
| 9
    
        Вафель 09.07.19✎ 15:18 | 
        хотя это ВТ же. может 1с накосячила с типами временных     | |||
| 10
    
        ssalikoff 09.07.19✎ 15:18 | 
        (8) Конечно. Поэтому и написал сюда. У меня нет идей, подумал, может здесь кто подкинет мысль     | |||
| 11
    
        Ёпрст гуру 09.07.19✎ 15:19 | 
        (0) 
 если тут делаешь Выразить(СУММА(ЗаказыОстатки.СуммаРасход) как Число(15,2)) КАК СуммаРасход тоже поди норм ? | |||
| 12
    
        ssalikoff 09.07.19✎ 15:19 | 
        (9) Я переписал запрос без временной таблицы, заменив её подзапросом. Проблема осталась. Так что проблема не во временной таблице     | |||
| 13
    
        ssalikoff 09.07.19✎ 15:20 | 
        (11) Да, тоже всё нормально     | |||
| 14
    
        Ёпрст гуру 09.07.19✎ 15:20 | 
        (12) ОстаткиИОбороты - это тоже временная     | |||
| 15
    
        Ёпрст гуру 09.07.19✎ 15:21 | 
        именно в ней и косяк     | |||
| 16
    
        ssalikoff 09.07.19✎ 15:21 | 
        (12) В этом смысле да, согласен     | |||
| 17
    
        Вафель 09.07.19✎ 15:22 | 
        на хотлайн нужно писать     | |||
| 18
    
        ssalikoff 09.07.19✎ 15:22 | 
        Вот интересно, если это такой косяк платформы, то это должно вылезти боком в тысяче мест. Странно, что никакого визга не слышно.     | |||
| 19
    
        Вафель 09.07.19✎ 15:23 | 
        (18) ни один вменяемый 15 релиз не ставит     | |||
| 20
    
        Ёпрст гуру 09.07.19✎ 15:24 | 
        Это, на всякий, в регистре ЗаказыОстатки ресурс Сумма, какой тип имеет ?     | |||
| 21
    
        Lama12 09.07.19✎ 15:25 | 
        (0)В зарегистрированных ошибках видел недавно. Но вроде они отчитались что исправили ее.     | |||
| 22
    
        ssalikoff 09.07.19✎ 15:25 | 
        (20)  ОпределяемыйТип.ДенежнаяСуммаЛюбогоЗнака     | |||
| 23
    
        ssalikoff 09.07.19✎ 15:26 | 
        (20) Число (15,2)     | |||
| 24
    
        Ёпрст гуру 09.07.19✎ 15:29 | 
        Ну.. тут тока в профайлере посмотреть реальный запрос, во что там ОстаткиИОбороты  разворачивается. Раньше, там cast-ов было понапихано мама не горюй ..     | |||
| 25
    
        ssalikoff 09.07.19✎ 15:34 | 
        (24) Попробую это сделать     | |||
| 26
    
        fisher 09.07.19✎ 15:43 | 
        (0) Похоже на баг. Каждый раз когда приходит время обновлять платформу, внимательно читаю баг-листы и форумы и содрогаюсь. Обычно в итоге выбирается какой-то стабильный билд из релиза предыдущего актуальному. А то и пред-предыдущего.     | |||
| 27
    
        тарам пам пам 09.07.19✎ 16:03 | 
        (21) Номер ошибки 10212223, если интересно. Статус пока что висит "принято к исправлению".     | |||
| 28
    
        ssalikoff 09.07.19✎ 16:24 | 
        (27) Спасибо, тарам пам пам!
 Теперь можно успокоиться, всё стало понятно. Непонятно лишь, почему эта ошибка не находится в разделе «Публикуемые ошибки продукта "Технологическая платформа" версии 8.3.15.1489». Я там всё перечитал, но не нашёл нужного. А по номеру ошибки всё нашлось | |||
| 29
    
        Сияющий в темноте 09.07.19✎ 19:48 | 
        Вычисления делаются в double,а результат переводится в нужный тип,вот и ходим по граблям.
 кстати,в win10 перестало правильно работать округление,и выводит даже в VbScript кучу знаков после запятой-чай проблема не на стороне 1с,а в системной библиотеке. Фронтол суммы нс win10 в результат при копейках очень очаровательно пишет,что парсер давится. | |||
| 30
    
        mkalimulin 10.07.19✎ 08:13 | 
        (0) Компьютер не способен считать точно. Вы этого не знали?     | |||
| 31
    
        Сияющий в темноте 10.07.19✎ 08:23 | 
        Компьютер способен.
 типы Currency и Decimal специально для этого. только нужно понимать,что когда мы сумму умножаем на количество и три дробных знака плюс два должны перейти в два,то будет округление,не по тому,что компьютер тае хочет,а потому,что у денежных величин два знака после запятой и в документе нельзя указать три знака. а вот уже правила округления каждый выбирает,как ему больше нравится. | |||
| 32
    
        xXeNoNx 10.07.19✎ 08:32 | 
        Они не могут ответить как инициализируются параметры страницы при новый ТабличныйДокумент, а ТС хочет что бы ему это сказали...
 По поводу сабжа, то ошибка эта зарегана и исправляется, если уже не исправлена... | |||
| 33
    
        xXeNoNx 10.07.19✎ 08:34 | 
        (0) ты не первый
 https://partners.v8.1c.ru/forum/topic/1838099 | |||
| 34
    
        xXeNoNx 10.07.19✎ 08:35 | 
        Ошибка номер 10212223     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |