FUNCTION {{p}}dlv_price IMPORTING iv_service TYPE string iv_weight TYPE decfloat34 iv_distance TYPE decfloat34 EXPORTING ev_skip TYPE abap_bool CHANGING cv_price TYPE decfloat34 EXCEPTIONS invalid_weight. ev_skip = abap_false. IF iv_weight <= 0. RAISE invalid_weight. ENDIF. IF iv_distance > 300. ev_skip = abap_true. RETURN. ENDIF. CASE iv_service. WHEN 'EX'. cv_price = round( val = 12 + iv_distance * '0.60' + iv_weight * '1.50' dec = 2 mode = cl_abap_math=>round_half_up ). IF cv_price < 6. cv_price = 6. ENDIF. WHEN 'ST'. cv_price = round( val = 5 + iv_distance * '0.30' + iv_weight * '0.80' dec = 2 mode = cl_abap_math=>round_half_up ). IF cv_price < 6. cv_price = 6. ENDIF. WHEN OTHERS. ev_skip = abap_true. cv_price = 0. ENDCASE. ENDFUNCTION.