Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как работает неявное преобразование типов внутри платформы?

Как работает неявное преобразование типов внутри платформы?
Я
   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)
 
 
   Admin_Net_1C
 
1 - 09.07.19 - 14:57
(0) забавно. Подпишусь на тему, интересен ход расследования )
   vis_tmp
 
2 - 09.07.19 - 15:11
(0)На hotline написал, пример выслал?
   ssalikoff
 
3 - 09.07.19 - 15:12
(2)подписки нету, ничего выслать не могу
   ДенисЧ
 
4 - 09.07.19 - 15:14
Тут вроде совсем недавно в одной из тем проскакивало... Похоже, баг платформы.
Или, как они пишут "поведение платформы приведено к ожидаемому" )))
   Вафель
 
5 - 09.07.19 - 15:14
скуль или файловая?
   ssalikoff
 
6 - 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с накосячила с типами временных
   ssalikoff
 
10 - 09.07.19 - 15:18
(8) Конечно. Поэтому и написал сюда. У меня нет идей, подумал, может здесь кто подкинет мысль
   Ёпрст
 
11 - 09.07.19 - 15:19
(0)

если тут делаешь
Выразить(СУММА(ЗаказыОстатки.СуммаРасход) как Число(15,2)) КАК СуммаРасход 

тоже поди норм ?
   ssalikoff
 
12 - 09.07.19 - 15:19
(9) Я переписал запрос без временной таблицы, заменив её подзапросом. Проблема осталась. Так что проблема не во временной таблице
   ssalikoff
 
13 - 09.07.19 - 15:20
(11) Да, тоже всё нормально
   Ёпрст
 
14 - 09.07.19 - 15:20
(12) ОстаткиИОбороты - это тоже временная
   Ёпрст
 
15 - 09.07.19 - 15:21
именно в ней и косяк
   ssalikoff
 
16 - 09.07.19 - 15:21
(12) В этом смысле да, согласен
   Вафель
 
17 - 09.07.19 - 15:22
на хотлайн нужно писать
   ssalikoff
 
18 - 09.07.19 - 15:22
Вот интересно, если это такой косяк платформы, то это должно вылезти боком в тысяче мест. Странно, что никакого визга не слышно.
   Вафель
 
19 - 09.07.19 - 15:23
(18) ни один вменяемый 15 релиз не ставит
   Ёпрст
 
20 - 09.07.19 - 15:24
Это, на всякий, в регистре ЗаказыОстатки ресурс Сумма, какой тип имеет ?
   Lama12
 
21 - 09.07.19 - 15:25
(0)В зарегистрированных ошибках видел недавно. Но вроде они отчитались что исправили ее.
   ssalikoff
 
22 - 09.07.19 - 15:25
(20)  ОпределяемыйТип.ДенежнаяСуммаЛюбогоЗнака
   ssalikoff
 
23 - 09.07.19 - 15:26
(20) Число (15,2)
   Ёпрст
 
24 - 09.07.19 - 15:29
Ну.. тут тока в профайлере посмотреть реальный запрос, во что там ОстаткиИОбороты  разворачивается. Раньше, там cast-ов было понапихано мама не горюй ..
   ssalikoff
 
25 - 09.07.19 - 15:34
(24) Попробую это сделать
   fisher
 
26 - 09.07.19 - 15:43
(0) Похоже на баг. Каждый раз когда приходит время обновлять платформу, внимательно читаю баг-листы и форумы и содрогаюсь. Обычно в итоге выбирается какой-то стабильный билд из релиза предыдущего актуальному. А то и пред-предыдущего.
   тарам пам пам
 
27 - 09.07.19 - 16:03
(21) Номер ошибки 10212223, если интересно. Статус пока что висит "принято к исправлению".
   ssalikoff
 
28 - 09.07.19 - 16:24
(27) Спасибо, тарам пам пам!
Теперь можно успокоиться, всё стало понятно.

Непонятно лишь, почему эта ошибка не находится в разделе «Публикуемые ошибки продукта "Технологическая платформа" версии 8.3.15.1489».
Я там всё перечитал, но не нашёл нужного. А по номеру ошибки всё нашлось
   Сияющий в темноте
 
29 - 09.07.19 - 19:48
Вычисления делаются в double,а результат переводится в нужный тип,вот и ходим по граблям.
кстати,в win10 перестало правильно работать округление,и выводит даже в VbScript кучу знаков после запятой-чай проблема не на стороне 1с,а в системной библиотеке.
Фронтол суммы нс win10 в результат при копейках очень очаровательно пишет,что парсер давится.
   mkalimulin
 
30 - 10.07.19 - 08:13
(0) Компьютер не способен считать точно. Вы этого не знали?
 
 
   Сияющий в темноте
 
31 - 10.07.19 - 08:23
Компьютер способен.
типы Currency и Decimal специально для этого.
только нужно понимать,что когда мы сумму умножаем на количество и три дробных знака плюс два должны перейти в два,то будет округление,не по тому,что компьютер тае хочет,а потому,что у денежных величин два знака после запятой и в документе нельзя указать три знака.
а вот уже правила округления каждый выбирает,как ему больше нравится.
   xXeNoNx
 
32 - 10.07.19 - 08:32
Они не могут ответить как инициализируются параметры страницы при новый ТабличныйДокумент, а ТС хочет что бы ему это сказали...
По поводу сабжа, то ошибка эта зарегана и исправляется, если уже не исправлена...
   xXeNoNx
 
33 - 10.07.19 - 08:34
   xXeNoNx
 
34 - 10.07.19 - 08:35
Ошибка номер 10212223


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.