Меню

Сортировать:

Новое Популярное
Многоуровневая концепция проектирования ролей (2)

Комментарий от  

Иван Борунов

  |  08 мая 2022, 17:40

SAP_BC_ENDUSER - стаандартная роль, уровння компании...?
Практика освоения ABAP CDS для непрограммистов. Часть 1 (2)

Комментарий от  

Сергей Разин

  |  14 апреля 2022, 11:20

Начинал изучение CDS с данной статьи. Поэтому выражаю автору большую благодарность за понятный, прекрасно структурированный материал, за всесторонний охват и детальную проработку тем.  
REDUCE: не помнИ типизацию, а пОмни про нее (4)

Комментарий от  

Олег Башкатов

  |  03 апреля 2022, 23:07

Виталий Глущенко 03 апреля 2022, 21:13

>>нет. получаемый ответ будет 604, а точный ответ 602.25.
>>PS. Слово "правильный" я бы заменил на точный/неточный. если требуемая точность - до сотен, то все варианты "правильные".
 
да, правильный/неправильный - плохая формулировка, но и точный/неточный тоже не хочу называть, потому что иногда в задаче требуется получить неточный результат, но он правильный по требованиям задачи.
 
Поясню, что я имел ввиду выше. В описанных примерах рассматривается ситуация когда из-за незнания как работает reduce можно получить несколько конвертаций и на каждой из них потерять точность сильнее, чем это ожидалось.
Грубо говоря конвертации у нас происходят:
  1. в строке next к типу переменной _rX_tot_am приводится тип переменной _ord_lineX-netwr;
  2. на выходе из reduce результат расчета в переменной _rX_tot_am приводится к типу указанному после reduce ...( );
  3. при присвоении переменной lv_total_amount результат шага 2 приводится к типу переменной lv_total_amount;
Предположим, что тип _ord_lineX-netwr и тип lv_total_amount у меня указан правильно(он может быть одинаковым, а может быть разным). Обычно моя задача выполнить все калькуляции и конвертацию с максимальной точностью. В таком случае хорошо, когда на шагах 1 и 2 и 3 все операции выполняются с одиним и тем же типом и лучше всего, когда это тип переменной lv_total_amount. Это важно потому что делает конструкцию менее капризной к смене типов переменных и таким образом избежать "детских" ошибок при модификации кода в будущем, когда в одном месте тип поменяли, а в другом забыли.
 
Иногда бывает, что нужно выполнять вычисления с большей точностью, чем мы потом будем хранить результат, в там случае в конструкции
    init _r4_tot_am = value #( )
я бы заменил # на явно заданный тип большей точности, но только там, а остальное оставил бы как есть, по той же самой причине, что бы конвертаций было как можно меньше.
 
>>нет. подсчет идет точный, но результат 6.0225000000000000E+02 уж очень странный для переменной total_amount )))
Почему? вполне нормальный результат, типичная экспоненциальная запись. В SAP в целом не часто используется тип float, но если в рамках задачи это требуется, то почему нет, в точности мы тут не потеряли, хотя могли и существенно.
 
>>а что подразумеваете под "2 и 3 считают неправильно"?
развернуто ответил выше, если кратко неправильным считаю, то что при смене типа его приходится менять в 3-х местах, что в будущем может привести к ошибкам.

Во 1ых, спасибо за развернутый комментарий.
 
Но в одном месте - я не совсем понял его.
Вы говорите, как я Вас понял (и я с Вами полностью согласен), что калькуляцию нужно выполнить с максимальной точностью, а вот дать результат в том формате, который запрашивается.
Но ведь, если мы будем зависеть от исходной переменной lv_total_amount, то мы как раз-таки и рискуем "понизить" нашу точность вычислений. и вот целочисленное решение задачи в статье должно быть 602, а не 604. Потому что точное 602.25  и из него int = 602, а если мы "унаследуем неявно" целочисленный тип из lv_total_amount, то получим 604.
 
Вы какой подход поддерживаете:
1) неявное наследование типа из запрашиваемой переменной
2) явное указание типизации при вычислениях
3) возвращаемый тип из reduce делаем наследуемым (после ключевого слова reduce берем из целевого результата через #), а внутри повышаем точность до разумного уровня явной типизацией.
REDUCE: не помнИ типизацию, а пОмни про нее (4)

Комментарий от  

Виталий Глущенко

  |  03 апреля 2022, 21:13

Олег Башкатов 31 марта 2022, 20:57

Спасибо!
Ваш подход классный! и здорово дополняет копилку тонкостей reduce )
 
>>> lv_total_amount поменять тип на i, то тест 1 начинает работать правильно
нет. получаемый ответ будет 604, а точный ответ 602.25.
PS. Слово "правильный" я бы заменил на точный/неточный. если требуемая точность - до сотен, то все варианты "правильные".
 
>>> а 2 и 3 считают неправильно, а если меняем тип на f
нет. подсчет идет точный, но результат 6.0225000000000000E+02 уж очень странный для переменной total_amount )))
а что подразумеваете под "2 и 3 считают неправильно"?

>>нет. получаемый ответ будет 604, а точный ответ 602.25.
>>PS. Слово "правильный" я бы заменил на точный/неточный. если требуемая точность - до сотен, то все варианты "правильные".
 
да, правильный/неправильный - плохая формулировка, но и точный/неточный тоже не хочу называть, потому что иногда в задаче требуется получить неточный результат, но он правильный по требованиям задачи.
 
Поясню, что я имел ввиду выше. В описанных примерах рассматривается ситуация когда из-за незнания как работает reduce можно получить несколько конвертаций и на каждой из них потерять точность сильнее, чем это ожидалось.
Грубо говоря конвертации у нас происходят:
  1. в строке next к типу переменной _rX_tot_am приводится тип переменной _ord_lineX-netwr;
  2. на выходе из reduce результат расчета в переменной _rX_tot_am приводится к типу указанному после reduce ...( );
  3. при присвоении переменной lv_total_amount результат шага 2 приводится к типу переменной lv_total_amount;
Предположим, что тип _ord_lineX-netwr и тип lv_total_amount у меня указан правильно(он может быть одинаковым, а может быть разным). Обычно моя задача выполнить все калькуляции и конвертацию с максимальной точностью. В таком случае хорошо, когда на шагах 1 и 2 и 3 все операции выполняются с одиним и тем же типом и лучше всего, когда это тип переменной lv_total_amount. Это важно потому что делает конструкцию менее капризной к смене типов переменных и таким образом избежать "детских" ошибок при модификации кода в будущем, когда в одном месте тип поменяли, а в другом забыли.
 
Иногда бывает, что нужно выполнять вычисления с большей точностью, чем мы потом будем хранить результат, в там случае в конструкции
    init _r4_tot_am = value #( )
я бы заменил # на явно заданный тип большей точности, но только там, а остальное оставил бы как есть, по той же самой причине, что бы конвертаций было как можно меньше.
 
>>нет. подсчет идет точный, но результат 6.0225000000000000E+02 уж очень странный для переменной total_amount )))
Почему? вполне нормальный результат, типичная экспоненциальная запись. В SAP в целом не часто используется тип float, но если в рамках задачи это требуется, то почему нет, в точности мы тут не потеряли, хотя могли и существенно.
 
>>а что подразумеваете под "2 и 3 считают неправильно"?
развернуто ответил выше, если кратко неправильным считаю, то что при смене типа его приходится менять в 3-х местах, что в будущем может привести к ошибкам.
REDUCE: не помнИ типизацию, а пОмни про нее (4)

Комментарий от  

Олег Башкатов

  |  31 марта 2022, 20:57

Виталий Глущенко 31 марта 2022, 20:09

я бы написал вот так
lv_total_amount = reduce #(
    init _r4_tot_am = value #( )
    for _ord_line4 in lt_order_line
    next _r4_tot_am = _r4_tot_am + _ord_line4-netwr
).
break-point.
 
потому что если в определении переменой lv_total_amount поменять тип на i, то тест 1 начинает работать правильно, а 2 и 3 считают неправильно, а если меняем тип на f, то все 3 варианта не работают. В данном же коде тип определяется на основании типа lv_total_amount.

Спасибо!
Ваш подход классный! и здорово дополняет копилку тонкостей reduce )
 
>>> lv_total_amount поменять тип на i, то тест 1 начинает работать правильно
нет. получаемый ответ будет 604, а точный ответ 602.25.
PS. Слово "правильный" я бы заменил на точный/неточный. если требуемая точность - до сотен, то все варианты "правильные".
 
>>> а 2 и 3 считают неправильно, а если меняем тип на f
нет. подсчет идет точный, но результат 6.0225000000000000E+02 уж очень странный для переменной total_amount )))
а что подразумеваете под "2 и 3 считают неправильно"?
REDUCE: не помнИ типизацию, а пОмни про нее (4)

Комментарий от  

Виталий Глущенко

  |  31 марта 2022, 20:09

я бы написал вот так
lv_total_amount = reduce #(
    init _r4_tot_am = value #( )
    for _ord_line4 in lt_order_line
    next _r4_tot_am = _r4_tot_am + _ord_line4-netwr
).
break-point.
 
потому что если в определении переменой lv_total_amount поменять тип на i, то тест 1 начинает работать правильно, а 2 и 3 считают неправильно, а если меняем тип на f, то все 3 варианта не работают. В данном же коде тип определяется на основании типа lv_total_amount.
Значения логических переменных в контексте чистого кода ABAP (1)

Комментарий от  

Олег Башкатов

  |  06 февраля 2022, 12:40

случай undefined - интересный. жаль, что авторы дают рекомендации, но не дают решений.
 
мои решения такие.
1) Если необходимо различать true / false и undefined, то можно использовать:
'+' - Знак плюса
'-' - знак минуса
' ' - пробел
 
2) или (что чаще) - возникает ситуация undefined - делать Exception с соответствующим сообщением. true/false - оставлять как abap_true / abap_false.
Обработка строк в контексте чистого кода ABAP (1)

Комментарий от  

Александр Носов

  |  31 января 2022, 07:43

Забавно, информации об авторах больше чем полезной нагрузки.
BADI – Технология внедрения бизнес расширений / дополнений (2)

Комментарий от  

Алексей Герасименко

  |  07 января 2022, 14:36

Добрый день!
 
Подскажите, пожалуйста, не совсем понял: о какой проблеме хранения глобальных переменных, которую не решало Classic BAdI и смогло решить New BAdI, идёт речь.
 
И, если можно, более подробно вот об этом предложении про Classic BAdI: "...однако проблемы в одной из наследуемых реализаций могли поломать работу всех пользовательских расширений." Это же и для New BAdI справедливо, разве нет?
Аутсорсинг 2-й и 3-й линии поддержки IT-систем. Организация процесса поддержки аналитических систем. История успеха (1)

Комментарий от  

Олег Башкатов

  |  26 декабря 2021, 21:29

Спасибо за интересную статью и Ваш опыт!
 
Если можете, то прокомментируйте, пожалуйста следующее:
>>> В первую очередь была проведена работа над оптимизацией и повышению стабильности периодических заданий.
 
Для того, чтобы сделать оптимизационное изменение в системе - нужно ли было проходить через "рутинные процедуры" заказчика или была какая-то упрощенная схема по этим изменениям?
Инструкция по созданию отчёта в транзакции SQVI (8)

Комментарий от  

Алексей Науменко

  |  25 декабря 2021, 18:11

Добрый день! можно ли и если да то как - выгрузить в формате SQL запроса - схему составленную в SQVI ? (с учетом например ограничений  - задаваемых на селекционном экране для отмеченных галочками полей)? есть ли такая возможность?
Когда возникает системный дамп MEMORY_NO_MORE_PAGING (2)

Комментарий от  

Сергей Рязанов

  |  17 декабря 2021, 11:35

Спасибо за информацию. А есть инструменты, чтобы отслеживать не просто историю потребления Page Area, а узнать какая программа потребляет больше всех? Чтобы идти не к программистам вообще, а к конкретному.
Практические советы и рекомендации внедрения решения S4 Retail 1610 (блок учета финансов и контроллинга) (1)

Комментарий от  

Ирина Степаник

  |  07 декабря 2021, 20:04

Добрый день, Олеся, подскажите по активации Регистра материалов для Retail S4.
Чистый ABAP. Учёт исторических особенностей ABAP для обратной совместимости (2)

Комментарий от  

Олег Башкатов

  |  26 ноября 2021, 00:04

Олег Башкатов 25 ноября 2021, 23:56

в каком бы регистре не именовать counter - уже можно использовать конструкции вида
COUNTER += 1.

появляется с 754 (в том числе для строк && )
help.sap.com/doc/abapdocu_754_index_htm
Чистый ABAP. Учёт исторических особенностей ABAP для обратной совместимости (2)

Комментарий от  

Олег Башкатов

  |  25 ноября 2021, 23:56

в каком бы регистре не именовать counter - уже можно использовать конструкции вида
COUNTER += 1.
Использование механизма разграничения (Accrual Engine) для ведения параллельного учета (7)

Комментарий от  

Фуркат Юсупов

  |  22 ноября 2021, 13:21

Рисунки не отображаются.
Введение в безопасность системы SAP* (10)

Комментарий от  

Елена Рыбакова

  |  08 ноября 2021, 10:02

Максим Мельник 31 января 2020, 13:09

Назначение функционала мне понятен и часть его я уверен, что знаю. Полагал, что есть специфические настройки, которые на курсах и на Help-е SAP-а нет. Например столкнулся с событиями безопасности в SAP NW и HANA 2.0. Если мне администрация сайта даст возможность, то поделюсь с сообществом своими изысканиями.

Максим, добрый день! Немного запоздало пишу, но свяжитесь с администрацией сайта по поводу вашего желания поделиться своим опытом, написав на почту sapland@sapland.ru. Будем очень рады :)
Введение в безопасность системы SAP* (10)

Комментарий от  

Юрий Нечитайлов

  |  03 ноября 2021, 18:46

Мади Татубаев 02 ноября 2021, 20:35

Всем привет.
Кто подскажет. Есть полный перевод данной книги?

Мади, здравствуйте!
Остальные главы книги пока не переводили. По крайней мере на данный момент.
Тем временем SAP PRESS выпустил ещё ряд книг по безопасности.
sap-press.com/sap-hana-20-security-guide_4982
sap-press.com/sap-successfactors-admin-center-user-management-security-and-data-maintenance_4228
sap-press.com/security-for-sap-cloud-systems_4908
sap-press.com/implementing-sap-fiori-3-security_5398
sap-press.com/sap-hana-20-administration_5287
Вас интересует какой-то конкретный вопрос или предметная область в целом?
Введение в безопасность системы SAP* (10)

Комментарий от  

Мади Татубаев

  |  02 ноября 2021, 20:35

Всем привет.
Кто подскажет. Есть полный перевод данной книги?