Un método útil para esa parte del CALL FUNCTION, cuando el SY-SUBRC es distinto de 0, pasarla directamente a una estructura de tipo BAPIRET2.
En este ejemplo se utiliza para la llamada una Función de OM que permite obtener el siguiente número disponible para la creación de objetos, que también es bastante útil.
CALL FUNCTION 'RH_GET_NEXT_NUMBER'
EXPORTING
action = 'GIVE'
ext_number = l_objid
otype = 'D'
plvar = '01'
IMPORTING
number = l_objid
EXCEPTIONS
invalid_action = 1
number_must_be_zero = 2
invalid_object = 3
no_external_interval_found = 4
no_internal_interval_found = 5
invalid_number = 6
no_more_numbers_available = 7
OTHERS = 8.
IF sy-subrc <> 0.
PERFORM get_message USING sy-msgty sy-msgid sy-msgno
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
CHANGING e_return.
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_message
*&---------------------------------------------------------------------*
FORM get_message USING type id num m1 m2 m3 m4
CHANGING e_ret STRUCTURE bapiret2.
CALL FUNCTION 'BALW_BAPIRETURN_GET2'
EXPORTING
type = type
cl = id
number = num
par1 = m1
par2 = m2
par3 = m3
par4 = m4
IMPORTING
return = e_ret.
ENDFORM. " get_message