You are on page 1of 4

method IF_ISU_MR_MONI_CUSTDAT~TO_SCREEN.

*-------------------------------*
* DATA DECLARATION
*-------------------------------*
DATA:
lv_mrexp TYPE eablh-i_zwsterw,
lv_conexp TYPE eablh-i_verberw,
lv_exit TYPE flag,
lt_prv_eabl TYPE eabl_tab,
ls_prv_eabl TYPE eabl,
ls_prv_eablg TYPE eablg,
ls_eabl TYPE eabl,
lv_cons_v TYPE dberchz-v_abrmenge,
lv_cons_n TYPE dberchz-n_abrmenge.

*-------------------------------*
* LOGIC SECTION
*-------------------------------*
CHECK cs_eabl_alv-ablstat NE '0'.

"Read previous meter read doc


READ TABLE gt_prv_eabl INTO ls_prv_eabl
WITH KEY ablbelnr = is_eabl-ablbelnr.
IF sy-subrc IS NOT INITIAL.
CLEAR lt_prv_eabl.
SELECT * APPENDING TABLE lt_prv_eabl
FROM eabl
WHERE equnr EQ is_eabl-equnr.
IF lt_prv_eabl IS NOT INITIAL.
APPEND LINES OF lt_prv_eabl TO gt_prv_eabl.
SELECT * APPENDING TABLE gt_prv_eablg
FROM eablg
FOR ALL ENTRIES IN lt_prv_eabl
WHERE ablbelnr EQ lt_prv_eabl-ablbelnr.
ENDIF.
ENDIF.

CLEAR ls_prv_eabl.
SORT gt_prv_eabl BY equnr zwnummer adat DESCENDING atim DESCENDING.
LOOP AT gt_prv_eabl INTO ls_prv_eabl
WHERE equnr EQ cs_eabl_alv-equnr
AND zwnummer EQ cs_eabl_alv-zwnummer
AND ( adat LT is_eabl-adat
OR ( adat EQ is_eabl-adat
AND atim LT is_eabl-atim ) )
AND ablbelnr NE is_eabl-ablbelnr.
EXIT.
ENDLOOP.

"No point calculating consumption if not installed


IF cs_eabl_alv-anlage IS INITIAL.
EXIT.
ENDIF.

"Field 1: Calculate Consumption


IF ls_prv_eabl IS NOT INITIAL.
"If previous read is removal/move out read, no point of calculating
consumption
CLEAR lv_exit.
LOOP AT gt_prv_eablg INTO ls_prv_eablg
WHERE ablbelnr EQ ls_prv_eabl-ablbelnr
AND ( ablesgr EQ '22' "Removal Read
OR ablesgr EQ '03' )"Move Out Read
AND anlage IS NOT INITIAL .
lv_exit = abap_true.
EXIT.
ENDLOOP.
IF lv_exit IS NOT INITIAL.
EXIT.
ENDIF.

"Determine Consumption
CLEAR: lv_cons_v, lv_cons_n, ls_eabl.
SELECT SINGLE * INTO ls_eabl
FROM eabl
WHERE ablbelnr EQ cs_eabl_alv-ablbelnr.

CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'


EXPORTING
x_geraet = cs_eabl_alv-geraet
x_equnr = cs_eabl_alv-equnr
x_zwnummer = cs_eabl_alv-zwnummer
x_adat = cs_eabl_alv-adat
x_v_zwstndab = ls_eabl-v_zwstndab
x_n_zwstndab = ls_eabl-n_zwstndab
x_v_zwstvor = ls_prv_eabl-v_zwstndab
x_n_zwstvor = ls_prv_eabl-n_zwstndab
IMPORTING
y_v_abrmenge = lv_cons_v
y_n_abrmenge = lv_cons_n
EXCEPTIONS
general_fault = 1
zwstandab_missing = 2
zwstand_missing = 3
parameter_missing = 4
no_inst_structure = 5
no_ratetyp = 6
no_gas_proc = 7
OTHERS = 8.
IF sy-subrc IS NOT INITIAL.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.

CALL FUNCTION 'ISU_METER_DBDATA_TRANSFORM'


EXPORTING
x_v_format = lv_cons_v
x_n_format = lv_cons_n
x_stanzvor = cs_eabl_alv-stanzvor
x_stanznac = cs_eabl_alv-stanznac
IMPORTING
y_b_zwstand = cs_eabl_alv-zzconsmpt
EXCEPTIONS
not_valid = 1
OTHERS = 2.
IF sy-subrc IS NOT INITIAL.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDIF.
"Field 2: Calculate Expected Meter Reading
CALL FUNCTION 'ISU_REGISTER_EXTRAPOLATION'
EXPORTING
x_equnr = cs_eabl_alv-equnr
x_zwnummer = cs_eabl_alv-zwnummer
x_adatsoll = cs_eabl_alv-adatsoll
x_actual = space
x_ablbelnr = cs_eabl_alv-ablbelnr
x_read_all_eabl = 'X'
x_ablesgr = cs_eabl_alv-ablesgr
IMPORTING
y_zwsterw = lv_mrexp
y_verberw = lv_conexp
EXCEPTIONS
not_found = 1
system_error = 2
rate_not_found = 3
rate_without_operand = 4
parameter_missing = 5
not_valid = 6
not_qualified = 7
invalid_interval = 8
general_fault = 9
no_extrapolation = 10
no_period_found = 11
multiple_overflow = 12
OTHERS = 99.
IF sy-subrc IS NOT INITIAL.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
"Rounding
CALL FUNCTION 'ISU_REG_EXTRAPOL_STANZNAC'
EXPORTING
x_equnr = cs_eabl_alv-equnr
x_zwnummer = cs_eabl_alv-zwnummer
x_stanzvor = cs_eabl_alv-stanzvor
x_stanznac = cs_eabl_alv-stanznac
x_adat = cs_eabl_alv-adat
x_adatreal = ls_eabl-adattats
x_bp = ' '
IMPORTING
y_scr_mrexp = cs_eabl_alv-zzmrexp
CHANGING
xy_int_csptexp = lv_conexp
xy_int_mrexp = lv_mrexp
EXCEPTIONS
system_error = 1
not_found = 2
input_error = 3
internal_error = 4
OTHERS = 5.
IF sy-subrc IS NOT INITIAL.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

IF ls_prv_eabl-adat IS NOT INITIAL.


"Field 3: Number of days
cs_eabl_alv-zzdays = cs_eabl_alv-adat - ls_prv_eabl-adat + 1.
"Field 4: Average Consumption
"cs_eabl_alv-zzavgcons = lv_conexp / cs_eabl_alv-zzdays.
ENDIF.
ENDIF.
endmethod.

You might also like