Текущее время: Вт, сен 25 2018, 18:40

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 87 ]  На страницу Пред.  1, 2, 3, 4, 5, 6
Автор Сообщение
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Ср, сен 06 2017, 15:09 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 337
LAT написал(а):
Я имел в виду проверить "обернется в строковый литерал уже маленькими", а не работу PrettyPrinter.

хмм. действительно, макрос переводит в верхний регистр. Не знал.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Пн, окт 23 2017, 18:04 
Менеджер
Менеджер
Аватара пользователя

Зарегистрирован:
Чт, мар 09 2006, 11:12
Сообщения: 563
Откуда: Волгодонск
Пол: Мужской
новый синтаксис OPEN SQL использование COALESCE и CASE в комбинации
Code:
  SELECT
     COALESCE( ( CASE vbrk~fksto WHEN 'X' THEN 'X' END ), ( CASE vbrk~sfakn WHEN ' ' THEN ' ' ELSE 'S' END ) ) AS stor " X - сторнирован; S - сторнирующий
  FROM vbrk

т.е удалось проанализировать два поля и вывести один результат

_________________
Изображение Попытка не пытка


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Чт, июл 12 2018, 13:30 
Специалист
Специалист

Зарегистрирован:
Вт, авг 17 2004, 09:47
Сообщения: 207
Пол: Мужской
Очень люблю использовать такую конструкцию в коде. Она позволят избавится от грамоздких и многократно вложенных if.
Code:
do 1 times.
 
  check a = b.

  check n = m.

  check x = y.

  do something here.

enddo.

_________________
Абап в телеграмме
https://t.me/sapabap


Последний раз редактировалось SAPer Пт, июл 13 2018, 13:35, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Чт, июл 12 2018, 14:32 
Ассистент
Ассистент

Зарегистрирован:
Пт, фев 01 2013, 11:27
Сообщения: 28
SAPer написал:
Очень люблю использовать такую конструкцию в коде. Она позволят избавится от многократно вложенных if.
Code:
do 1 times.
 
  check a = b.

  check n = m.

  check x = y.

  do something here.

enddo.


По мне тут на 80% звоночек, что этот кусок кода стоит обернуть в отдельный метод со значащим названием :wink:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Пт, июл 13 2018, 07:38 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 10:38
Сообщения: 138
Rizor написал(а):
SAPer написал:
Очень люблю использовать такую конструкцию в коде. Она позволят избавится от многократно вложенных if.
Code:
do 1 times.
 
  check a = b.

  check n = m.

  check x = y.

  do something here.

enddo.


По мне тут на 80% звоночек, что этот кусок кода стоит обернуть в отдельный метод со значащим названием :wink:

И про вложенность не понял, почему не
Code:
IF a = b AND n = m AND x = y.
  do something here.
ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Пт, июл 13 2018, 10:27 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 337
Цитата:
И про вложенность не понял, почему не


Думаю автор имел в виду

Code:
do 1 times.
 
  check a = b.
"  что-то деллаем
  check n = m.
"что-то делаем
  check x = y.
"что-то делаем

enddo.


вместо

Code:
if a = b.

  "do some action
    if n = m.
      "do someeaction
        if x = y.
          "do someaction
       enddif.
    endif
endif


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Пт, июл 13 2018, 13:31 
Специалист
Специалист

Зарегистрирован:
Вт, авг 17 2004, 09:47
Сообщения: 207
Пол: Мужской
Я то что написал, то и имел ввиду. Внутри DO делаем последовательные проверки и в конце какой то код. Код отработает, если пойдут все условия.

Данный подход для меня позволяет:
1. Избежать написания громоздких IF с множеством условий. Например одно из условий может быть вызов метода. И их может быть несколько.
2. Избежать написания вложенных IF.
3. Удобство отладки. При отладке сразу понятно какое условие не прошло.

Минусы - код немного получается длиннее.

Пример реального кода:
Code:
  " Проверка на максимальную стоимость
  do 1 times.

    check lr_bid->s_header-src_object_type ne zcl_doc_static=>pp.

    " конкурс должен быть активной версией
    check lr_bid->s_header-version_type eq zcl_doc_static=>version_active.

    " Проверка этапа
    check lr_bid->s_header-object_id eq lr_bid->s_header-zz_hist_doc_id.

    " Проверка на включенность закупки в план
    check lr_bid->s_header-zz_plan_excl_x eq abap_false.

    " Проверка локального флага
    check zcl_oos_notice_static=>is_enabled( lr_bid->guid ) eq abap_true.

    " Для компании сравниваем с 500.000, для ДЗО с 100.000
    if zcl_doc_static=>is_dzo( lr_bid->guid ) eq abap_false.
      check lr_bid->s_header-total_value gt zcl_constants=>value( 'BUS2200/MAX_VALUE_WO_PP' ).
    else.
      check lr_bid->s_header-total_value gt zcl_constants=>value( 'BUS2200/DZO_MIN_VALUE' ).
    endif.

    message e015 into zcl=>dummy.
    zcl_message_static=>add_message(
      changing
        ct_messages = ct_messages ).

  enddo.

_________________
Абап в телеграмме
https://t.me/sapabap


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Пт, июл 20 2018, 01:55 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 17:44
Сообщения: 2931
Откуда: Москва
SAPer написал:
Я то что написал, то и имел ввиду.

Имелось ввиду, что вместо do..enddo можно было написать method..endmethod.
И было бы элегантнее и кода бы меньше было ;)

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Пт, июл 20 2018, 10:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 19:21
Сообщения: 1142
Удав написал(а):
SAPer написал:
Я то что написал, то и имел ввиду.

Имелось ввиду, что вместо do..enddo можно было написать method..endmethod.
И было бы элегантнее и кода бы меньше было ;)

do 1 times часто пишут там где нельзя объявлять свои блоки (энхансменты и т.д.) но при этом надо писать независимые условия (проверки).

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Пт, июл 20 2018, 15:02 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 21:32
Сообщения: 2453
Пол: Мужской
Kengur написал(а):
do 1 times часто пишут там где нельзя объявлять свои блоки (энхансменты и т.д.) но при этом надо писать независимые условия (проверки).
это вы зря - объявлять может и нельзя, а использовать - можно. Как раз в энхансментах лучше бы заворачивать свой код в ФМы или методы и только вызывать из энхансмента - так и сопровождать проще, и при апгрейде головной боли меньше.
А рекомендация Удава к do..enddo прямого отношения не имеет, просто видно что есть блок кода, который выполняет определенную функцию. И это блок явно напрашивается на вынос в отдельный метод.

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Пт, июл 20 2018, 15:13 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 19:21
Сообщения: 1142
ArmAnn написал:
это вы зря

это не я :shumlol:

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Полезные трюки ABAP
СообщениеДобавлено: Пт, июл 20 2018, 16:02 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 337
ArmAnn написал:
А рекомендация Удава к do..enddo прямого отношения не имеет, просто видно что есть блок кода, который выполняет определенную функцию. И это блок явно напрашивается на вынос в отдельный метод.


порой это надо сильно рефакторить, так как блок в Do enddo может использовать дофига локальных переменных.

Code:
FORM myForm.
DATA: a,b,c,d,e,f.

",,,,

Do 1 times.

   a = b  = 'X'.
enddo.



Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 87 ]  На страницу Пред.  1, 2, 3, 4, 5, 6

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


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

Сейчас этот форум просматривают: Mail.RU Bot


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

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