Не первый раз вижу удивление начинающих разработчиков, когда они видят в продуктивном стандартном коде строки вида:
IF 1 = 2. MESSAGE e035(crm_bupa_bol). ENDIF.
Так в чём же дело?
Часто бывает удобно иметь явный вызов сообщения об ошибке для удобства навигации от кода ошибки к тексту программы (Where-is-used). И поэтому данная конструкция тупа, но своё дело делает. А чуть ниже или чуть выше этой строки есть рабочий, но неявный вызов сообщения:
CALL METHOD lr_global_messages->add_message
EXPORTING
iv_msg_type = ‘E’
iv_msg_id = ‘CRM_BUPA_BOL’
iv_msg_number = 035
iv_show_only_once = abap_true.
Опытные разработчики могут более красиво выйти из такой ситуации, если воспользуются конструкцией MESSAGE INTO, например так:
data: lv_message type text250.
message e450(zin) into lv_message with lv_param1.
perform collect_message using …….
+
form collect_message using …
clear gt_errors.
gt_errors-type = sy-msgty.
gt_errors-msgid = sy-msgid.
gt_errors-msgno = sy-msgno.
…
append gt_errors.
endform.
PS. Да, в данном примере используется старомодная подпрограмма, вместо современного ООП. Я знаю.