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