Текущее время: Пн, окт 22 2018, 04:56

Часовой пояс: UTC + 4 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: DATA(var) - неприятный сюрприз
СообщениеДобавлено: Вт, дек 22 2015, 18:57 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, июн 15 2007, 17:24
Сообщения: 98
Недавно, ну как недавно пяти лет еще не прошло, в языке появились автоматические переменные, объявляемые как DATA(var) = ...
Я обрадовался, наконец то можно объявлять по месту, держись, C#, мы тебя догоним.
Правда, все оказалось "как обычно", эта та же переменная, что и просто DATA var, scope ее ровно такой же здоровенный, никаких локальных в пределах цикла переменных нет. Синтаксический сахар, ну да и то ладно, используем.

А вот сегодня пишут мне - у тебя расчет какой-то странный (считается банальщина - кол-во * цену, суммируется в разном порядке). И тут возникает прикол, который можно продемонстрировать на этом:

data x type p DECIMALS 2.
data y type p DECIMALS 3.
x = '1.44'.
y = '1.445'.
data(z) = x * y.

Какого типа переменная Z? C# и прочие хаскели подсказывают нам, что должен быть p decimal 5. Хелп самого абапа говорит - "The date type of the variable is determined by the operand type. It must be possible to derive this type statically in full.". Ну что, вроде статически все определимо, предупреждений нет, проблем быть не должно.

Фиг!
Z = 2 и тип Z = P DECIMALS 0.
Произошел самый что ни на есть каст в целое, с округлением.
Я, честно говоря, в шоке. В тот момент, когда другие языки уже окучивают по полной шаблоны/ФП/ПМ и прочее и прочее, нам предлагается какое-то студенческое поделие.

PS. На предыдущих страницах не нашел вроде...


Последний раз редактировалось Николай Рыжов Чт, дек 24 2015, 02:09, всего редактировалось 4 раз(а).

Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DATA(var) - неприятный сюрприз  Тема решена
СообщениеДобавлено: Ср, дек 23 2015, 11:29 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 14:06
Сообщения: 113
Однако...
Можно закостылить, засунув умножение в EXACT :lol: Это если заранее не объявлять переменную.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DATA(var) - неприятный сюрприз
СообщениеДобавлено: Чт, дек 24 2015, 05:38 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 10:41
Сообщения: 148
А можно ещё написать так:
Code:
data(z) = CONV wrbtr( x * y ).


Но вообще да, подлянка. Спасибо, что поделились.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: DATA(var) - неприятный сюрприз
СообщениеДобавлено: Чт, дек 24 2015, 23:38 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, июн 15 2007, 17:24
Сообщения: 98
Кстати, уровень исполнения можно даже и по хелпу увидеть:

The date type of the variable is determined by the operand type. It must be possible to derive this type statically in full.

Знаю, знаю, что помощь и код пишут совершенно разные люди. Но это вот всё символизирует.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DATA(var) - неприятный сюрприз
СообщениеДобавлено: Пт, дек 25 2015, 17:07 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 14:06
Сообщения: 113
К слову о подлянках... Вспомнил случай. В выражении вида x = menge * abs( wrbtr ) (где х определен ранее), словил от abs() округление до целого :shock:


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DATA(var) - неприятный сюрприз
СообщениеДобавлено: Пн, фев 01 2016, 21:38 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 16:54
Сообщения: 77
Ну в сапчике даже в стандартных саповских названиях переменных и функций можно встретить грамматические ошибки токо так. Там тоже не боги работают :)

_________________
F5-F6-F7-F8


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: DATA(var) - неприятный сюрприз
СообщениеДобавлено: Чт, ноя 23 2017, 11:21 
Начинающий
Начинающий

Зарегистрирован:
Пн, ноя 20 2017, 18:38
Сообщения: 1
Sam Stone написал(а):
К слову о подлянках... Вспомнил случай. В выражении вида x = menge * abs( wrbtr ) (где х определен ранее), словил от abs() округление до целого :shock:
Нельзя ли подробнее?
Какого типа объявлена Х,
какого menge?

Я пробую, не округляется ничего.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: DATA(var) - неприятный сюрприз
СообщениеДобавлено: Чт, ноя 23 2017, 12:49 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 18:44
Сообщения: 994
Откуда: что и все
Пол: Мужской
строители велосипедов решили вывод типов сделать "как менеджер сказал".

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: DATA(var) - неприятный сюрприз
СообщениеДобавлено: Чт, ноя 23 2017, 13:28 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Пт, янв 18 2008, 11:34
Сообщения: 704
Откуда: Tashkent -> Astana -> Moscow
Пол: Мужской
Думаю вот эта оговорка объясняет такую "не совсем стандартную" реализацию инлайн объявлений (без EXACT)
Цитата:
If more than one equally valid operand type is possible in the same declaration position, the recommended preferred data type is generally used.

видно в вашем случае как раз это и был рекомендованный тип :gigi:

_________________
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. (Э. Йодан)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: DATA(var) - неприятный сюрприз
СообщениеДобавлено: Чт, ноя 23 2017, 13:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 19:21
Сообщения: 1149
Работа с целочисленными значениями - рекомендации лучших собаководов.

_________________
я твой сап эфай внедрял
BAdI-позитив


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB