FUNCTION {{p}}sewer_fee IMPORTING iv_tank_litres TYPE i iv_distance_km TYPE i iv_mains_sewer TYPE abap_bool EXPORTING ev_skip TYPE abap_bool CHANGING cv_fee TYPE decfloat34 EXCEPTIONS invalid_litres. CONSTANTS c_base_fee TYPE decfloat34 VALUE '75'. CONSTANTS c_step_fee TYPE decfloat34 VALUE '20'. CONSTANTS c_step_litres TYPE i VALUE 500. CONSTANTS c_km_rate TYPE decfloat34 VALUE '1.5'. CONSTANTS c_travel_max TYPE decfloat34 VALUE '60'. CONSTANTS c_fee_max TYPE decfloat34 VALUE '900'. DATA lv_steps TYPE i. DATA lv_travel TYPE decfloat34. ev_skip = abap_true. IF iv_tank_litres < 1. RAISE invalid_litres. ENDIF. IF iv_mains_sewer = abap_true. ev_skip = abap_true. RETURN. ENDIF. cv_fee = c_base_fee. IF iv_tank_litres > 1000. lv_steps = ( iv_tank_litres - 1001 ) DIV c_step_litres + 1. cv_fee = cv_fee + lv_steps * c_step_fee. ENDIF. IF iv_distance_km > 0. lv_travel = iv_distance_km * c_km_rate. IF lv_travel > c_travel_max. lv_travel = c_travel_max. ENDIF. cv_fee = cv_fee + lv_travel. ENDIF. IF cv_fee > c_fee_max. cv_fee = c_fee_max. ENDIF. ENDFUNCTION.