Я то что написал, то и имел ввиду. Внутри 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.