Текущее время: Пн, июл 23 2018, 06:07

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


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


ВНИМАНИЕ!

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



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

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

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


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

Зарегистрирован:
Чт, мар 09 2006, 11:12
Сообщения: 561
Откуда: Волгодонск
Пол: Мужской
новый синтаксис 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
Сообщения: 205
Пол: Мужской
Очень люблю использовать такую конструкцию в коде. Она позволят избавится от грамоздких и многократно вложенных 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
Сообщения: 25
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
Сообщения: 137
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
Сообщения: 324
Цитата:
И про вложенность не понял, почему не


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

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
Сообщения: 205
Пол: Мужской
Я то что написал, то и имел ввиду. Внутри 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
Сообщения: 2927
Откуда: Москва
SAPer написал:
Я то что написал, то и имел ввиду.

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

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


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

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

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

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

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


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

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

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


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

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

это не я :shumlol:

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


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

Зарегистрирован:
Ср, сен 06 2017, 00:56
Сообщения: 324
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 часа


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

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


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

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