Sunteți pe pagina 1din 183

*----------------------------------------------------------------------*

* User Exit-Include for application form ZIS_U_BILL_LT_HT


*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form USER_EXIT_ZIS_U_START_EXIT
*&---------------------------------------------------------------------*
*& This exit is processed BEFORE anything is done or read in the
*& application form.
*& Use this Exit to initialize settings in the form, if required
*&---------------------------------------------------------------------*
FORM user_exit_zis_u_start_exit.
*BREAK-POINT.
CLEAR: lt_zbibd,
lv_opl,
v_anlage,
lv_matnr,
lv_adatsoll,
it_ettifn,
it_ettifn3,
sf_zbibd,
gt_bimd,
str_bimd,
sf_bimd,
meter_reading,
wa_charges,
tt_doc_item,
isu_bill,
lv_dps_leviabl_amt,
wa_inv,
it_dps,
wa_dps,
last_date,
lv_advance_pay,
tod_flag,
lv_lt_leg_adj,
wa_material,
lv_basis,
zextra,
1h1_rate,
2h1_rate,
3h1_rate,
energy_rate,
max_dem,
* spell_word,
rebate_rate,
cfac,
wa_conversion,
lv_bauklas,
zform_str,
lv_haus,
zmtcon,
gv_zcn3,
v_sc_belnr1,
mr_note,
priceclas,
lv_ab_date,
lv_end_date,
lv_month,
v_arrear_chrg,
it_dberdl,
flag_round,
v_pybl_bibd,
payment_acc,
last_budat,
last_rund,
neg_roundo,
it_fix,
curr_ab,
curr_bis,
creation_date,
* curr_mon,
v_anlage2,
it_eablg9,
it_eabl9,
v_z131,
wa_egerh,
pl_adj,
gv_logiknr,
lv_betrw2,
ls_fkk_instal,
movein_date1,
movein_date2,
mon_no,
sd_rel,
sd_rel_amt,
online_rebate,
v_oa_hrs,
open_access,
bluetooth.

ENDFORM. " USER_EXIT_ZIS_U_START_EXIT


*&---------------------------------------------------------------------*
*& USER_EXIT_DURING_HEADER
*&---------------------------------------------------------------------*
*& Use this form e.g. to prepare the data for the printing or
*& to perform summations
*& This exit is processed *DURING* a form_level-loop
*& X_INDEX denotes the current entry in the associated table
*&---------------------------------------------------------------------*
*& <--> X_DOC_HEADER
*&---------------------------------------------------------------------*
FORM user_exit_during_header
USING
x_doc_header TYPE g_type_str_doc_header
value(x_index) TYPE sy-tabix.
DATA: lv_dt1 TYPE char8,
lv_dt2 TYPE char8,
it_mob TYPE TABLE OF adr2,
wa_mob TYPE adr2.
DATA: v_doc_item TYPE TABLE OF erdz,
wa_vdoc TYPE erdz.
* BREAK-POINT.
CLEAR: lv_dt1,lv_dt2,it_mob,wa_mob,v_doc_item,
wa_vdoc.
**************Logic for Company Code and Text******************
lt_zbibd-company_code = wa_cont_acct-stdbk.
lt_zbibd-contract_account = wa_cont_acct-vkont.
lt_zbibd-invoiceno = x_doc_header-opbel.
lt_zbibd-due_date = x_doc_header-faedn.
lt_zbibd-partner = wa_bus_part-partner.
lt_zbibd-sub_contract = wa_bus_part-transpzone."sub contract new logic
**************Address and Name details*********************************
lt_zbibd-title = wa_bp_ad_bin-title_medi.
lt_zbibd-firstname = wa_bp_ad_bin-name1.
lt_zbibd-lastname = wa_bp_ad_bin-name2.
CONCATENATE wa_bp_ad_bin-name3 wa_bp_ad_bin-name4
INTO lt_zbibd-middle_name SEPARATED BY ''.
lt_zbibd-father_name = wa_bus_part-name_lst2. "father name

lt_zbibd-house_no = wa_bp_address-house_num1.
lt_zbibd-street = wa_bp_address-street.
CONCATENATE wa_bp_address-city1 wa_bp_address-city2 INTO lt_zbibd-city
SEPARATED BY ''.
* lt_zbibd-city = wa_bp_address-city1.
lt_zbibd-postl_cod1 = wa_bp_address-post_code1.
CONCATENATE wa_bp_address-str_suppl1 ',' wa_bp_address-
str_suppl2 INTO lt_zbibd-str_suppl1.
* lt_zbibd-str_suppl1 = wa_bp_address-str_suppl1.
* lt_zbibd-str_suppl2 = wa_bp_address-str_suppl2.
lt_zbibd-str_suppl3 = wa_bp_address-str_suppl3.

***added Logic for getting Consumer GST Number


SELECT SINGLE idnumber FROM BUT0ID INTO lt_zbibd-consumer_gst
WHERE partner = wa_bus_part-partner
and type = '000230'.
*******end of Logic for Consumer GST number

TRANSLATE: lt_zbibd-title TO UPPER CASE,


lt_zbibd-firstname TO UPPER CASE,
lt_zbibd-lastname TO UPPER CASE,
lt_zbibd-middle_name TO UPPER CASE,
lt_zbibd-father_name TO UPPER CASE,
lt_zbibd-house_no TO UPPER CASE,
lt_zbibd-street TO UPPER CASE,
lt_zbibd-city TO UPPER CASE,
lt_zbibd-postl_cod1 TO UPPER CASE,
lt_zbibd-str_suppl1 TO UPPER CASE,
lt_zbibd-str_suppl3 TO UPPER CASE.
********Bill Month************************************************8
lv_dt1 = x_doc_header-billing_period+0(4).
lv_dt2 = x_doc_header-billing_period+5(2).
mon_no = lv_dt2.
* curr_mon = lv_dt2.
SELECT SINGLE monam FROM t015m INTO lv_month WHERE monum = lv_dt2
AND spras EQ 'EN'.

CLEAR: lv_dt2,lv_datum,lv_header11.

lv_dt2 = lv_month+0(3).
CONCATENATE lv_dt2 '-' lv_dt1 INTO lv_datum.
lt_zbibd-bill_month = lv_datum.
TRANSLATE lt_zbibd-bill_month TO UPPER CASE.

************MOBILE NUMBER********************************************
SELECT * FROM adr2 INTO TABLE it_mob
WHERE addrnumber = wa_bus_part-addrnumber.
IF NOT it_mob IS INITIAL.
SORT it_mob BY consnumber DESCENDING.
LOOP AT it_mob INTO wa_mob.
IF wa_mob-r3_user = '2' OR wa_mob-r3_user = '3'.
lt_zbibd-mob_no = wa_mob-tel_number.
EXIT.
ELSEIF wa_mob-r3_user = '' OR wa_mob-r3_user = '1'.
lt_zbibd-mob_no = wa_mob-tel_number.
ENDIF.
ENDLOOP.
ENDIF.
FREE it_mob.
********************logic for Rate Category******added on 15.06.2016
IF NOT t_doc_item[] IS INITIAL.
v_doc_item = t_doc_item[].
DELETE v_doc_item WHERE erchbelnr IS INITIAL OR
tariftyp IS INITIAL.
SORT v_doc_item BY bis DESCENDING.
READ TABLE v_doc_item INTO wa_vdoc INDEX 1.
IF sy-subrc = 0.
lt_zbibd-tariff_type = wa_vdoc-tariftyp.
ENDIF.
FREE v_doc_item.
ENDIF.
**************logic ended for Rate Category******on 15.06.2016

*********PREVIOUS DOC HEADER DATE***********************


IF NOT wa_prev_doc_h-budat IS INITIAL AND wa_prev_doc_h-
intopbel IS INITIAL.
last_date = wa_prev_doc_h-budat + 1.
last_amnt = wa_prev_doc_h-total_amnt.
ENDIF.

**********************Document Creation Date*************************


creation_date = x_doc_header-erdat.

******************SBM Flag*************************************
IF sy-uname = 'SYS_SBM'. "cprog = 'ZRPT_SBM_INBOUND'.
lt_zbibd-sbm = 'X'.
ENDIF.
****************Getting Previous Doc ROUND,ROUNDO amount
*****added by TMKIRAND for ROUNDO value
IF NOT wa_prev_doc_h-opbel IS INITIAL.
** SELECT printdoc printdocline nettobtr FROM dberdl
** INTO TABLE it_dberdl WHERE printdoc = wa_prev_doc_h-opbel
** AND ( belzart = 'ROUNDO' OR belzart =
'ROUND' ).
SELECT SINGLE date_of_invoice pymt_on_account net_amt_pybl
FROM zbibd INTO (last_budat,payment_acc,v_arrear_chrg)
WHERE invoiceno = wa_prev_doc_h-opbel.
IF sy-subrc NE 0.
SELECT SINGLE date_of_invoice pymt_on_account net_amt_pybl
FROM zbibd_hist INTO (last_budat,payment_acc,v_arrear_chrg)
WHERE invoiceno = wa_prev_doc_h-opbel.
ENDIF.
v_pybl_bibd = v_arrear_chrg.
ENDIF.
*****end of code by TMKIRAND for ROUNDO value
******** Date of Billing*********
lt_zbibd-date_of_invoice = x_doc_header-budat.
v_creation_date = x_doc_header-erdat.
v_creation_time = x_doc_header-creation_time.

* SELECT SINGLE butxt FROM zcs_company INTO lv_header11 WHERE bukrs = wa_c
ont_acct-opbuk.
* End of Company code Logic

***********end of Barcode********************************
**********Print Document******************************

CLEAR: t_erdz,t_erdz1,t_erdz2,t_erdz3,t_erdz4,v_sc_belnr1.
lv_opl = x_doc_header-opbel.

*************Logic for Other Details***********************************88


CALL FUNCTION 'ISU_DB_ERDZ_SELECT_DOC'
EXPORTING
x_opbel = lv_opl
x_actual = 'X'
TABLES
yt_erdz = t_erdz
EXCEPTIONS
not_found = 1
not_qualified = 2
system_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

DELETE t_erdz WHERE belzart EQ 'Z99999' OR belzart = 'ACCINF'.

t_erdz1[] = t_erdz[].
t_erdz2[] = t_erdz[] .
t_erdz3[] = t_erdz[].
t_erdz4[] = t_erdz[].
CLEAR wa_erdz1.
READ TABLE t_erdz1 INTO wa_erdz1 INDEX 1.
v_sc_belnr1 = wa_erdz1-awkey.

LOOP AT t_erdz INTO wa_erdz .


IF ( ( wa_erdz-hvorg NE'Z100'
AND wa_erdz-hvorg NE'Z104'
AND wa_erdz-hvorg NE'Z106' )
AND wa_erdz-tvorg NE'0010' ) .

DELETE t_erdz4 WHERE hvorg = wa_erdz-hvorg.


ENDIF.
CLEAR wa_erdz.
ENDLOOP.

SORT t_erdz1 BY erchbelnr sc_belnr DESCENDING.


DELETE ADJACENT DUPLICATES FROM t_erdz1 COMPARING erchbelnr.

SORT t_erdz1 BY sc_belnr DESCENDING .


LOOP AT t_erdz1 INTO wa_erdz1 WHERE sc_belnr EQ ''.
DELETE t_erdz WHERE erchbelnr = wa_erdz1-erchbelnr.
ENDLOOP.

LOOP AT t_erdz4 INTO wa_erdz4 .


READ TABLE t_erdz INTO wa_erdz WITH KEY hvorg = wa_erdz4-hvorg.
IF sy-subrc NE 0.
APPEND wa_erdz4 TO t_erdz.
ENDIF.
CLEAR : wa_erdz4, wa_erdz.
ENDLOOP.

SORT t_erdz1 BY sc_belnr DESCENDING .

DELETE t_erdz2 WHERE programm NE 'DEMAND14' .


DELETE t_erdz2 WHERE belzart NE 'ZMTDMD'.

SORT t_erdz2 BY bis DESCENDING.


CLEAR: wa_erdz2,lv_belnr11,t_erchz.
READ TABLE t_erdz2 INTO wa_erdz2 INDEX 1.
lv_belnr11 = wa_erdz2-awkey.

CLEAR: lc_recorded,lv_other_charges,lv_other_charges2,lv_other_charges11.

******************TOTAL UNITS BILLED***************************************


CLEAR: lv_billed,v_sc_belnr1.
* SORT t_erdz1 BY bis DESCENDING.
* READ TABLE t_erdz1 INTO wa_erdz1 INDEX 1.
* v_sc_belnr1 = wa_erdz1-awkey.

IF NOT t_erdz1 IS INITIAL.

SELECT belnr belzart belzeile v_abrmenge n_abrmenge


FROM dberchz1 INTO TABLE t_dberchz1
FOR ALL ENTRIES IN t_erdz1
WHERE belnr = t_erdz1-erchbelnr "v_sc_belnr1
AND ( belzart = 'ZMMC'
OR belzart = 'ZENERG'
OR belzart = 'ZUNENG'
OR belzart = 'Z1H1'
OR belzart = 'Z2H1'
OR belzart = 'Z3H1'
OR belzart = 'ZBILUN' ).
ENDIF.
IF t_dberchz1 IS NOT INITIAL.
CLEAR lv_billed .
DELETE t_dberchz1 WHERE v_abrmenge LT 0.
LOOP AT t_dberchz1 INTO wa_dberchz11 WHERE belzart = 'ZMMC' OR
belzart = 'ZENERG' OR
belzart = 'Z1H1' OR
belzart = 'Z2H1' OR
belzart = 'Z3H1' OR
belzart = 'ZUNENG'.
lv_billed = lv_billed + wa_dberchz11-v_abrmenge
+ wa_dberchz11-n_abrmenge.
ENDLOOP.
CONDENSE lv_billed.
IF lv_billed EQ '0'.
LOOP AT t_dberchz1 INTO wa_dberchz11 WHERE belzart = 'ZBILUN'.
lv_billed = lv_billed + wa_dberchz11-v_abrmenge
+ wa_dberchz11-n_abrmenge.
ENDLOOP.
ENDIF.
ENDIF.
CONDENSE lv_billed.
lt_zbibd-tot_unit_billed = lt_zbibd-tot_unit_billed + lv_billed.

ENDFORM . " USER_EXIT_DURING_HEADER


*&---------------------------------------------------------------------*
*& Form USER_EXIT_BEFORE_DOC_ITEM
*&---------------------------------------------------------------------*
*& Use this form e.g. to sort table XYT_DOC_ITEM or to load
*& additional data from database
*& This exit is processed *BEFORE* looping at XYT_DOC_ITEM
*&---------------------------------------------------------------------*
*& <--> XYT_DOC_ITEM
*&---------------------------------------------------------------------*
FORM user_exit_before_doc_item
TABLES
xyt_doc_item TYPE g_type_tab_doc_item.
DATA : lt_dfkklocks TYPE TABLE OF dfkklocks,
lw_dfkklocks TYPE dfkklocks,
lt_dfkklock_h TYPE TABLE OF dfkklocksh,
lw_dfkklock_h TYPE dfkklocksh.

CLEAR: lv_daats,lv_daats_ab.
it_docitem = xyt_doc_item[].

DELETE it_docitem WHERE buchrel = '' AND opbel = lv_opl.


SORT it_docitem BY ab.

READ TABLE it_docitem INTO wa_docitem INDEX 1.


IF NOT wa_docitem-sc_belnr IS INITIAL.
SORT it_docitem BY bis DESCENDING.
READ TABLE it_docitem INTO wa_docitem INDEX 1.
lv_daats = wa_docitem-bis.
lv_daats_ab = wa_docitem-ab.
ELSE.
CLEAR it_docitem.
it_docitem = xyt_doc_item[].
DELETE it_docitem WHERE ab IS INITIAL.
DELETE it_docitem WHERE buchrel = '' AND opbel = lv_opl.
SORT it_docitem BY bis DESCENDING.

READ TABLE it_docitem INTO wa_docitem INDEX 1.


lv_daats = wa_docitem-bis.

SORT it_docitem BY ab.


READ TABLE it_docitem INTO wa_docitem INDEX 1.
lv_daats_ab = wa_docitem-ab.
ENDIF.
CLEAR it_docitem.

***************************************************************************
****************************
CLEAR : lt_dfkklocks,lt_dfkklock_h,t_dfkkop,
lw_dfkklocks,lw_dfkklock_h.

SELECT * FROM dfkkop INTO TABLE t_dfkkop WHERE vkont = lt_zbibd-


contract_account.
***********************kept in abeyance************************
*****************DFKKLOCKS used for currently LOCKED items*****************
*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
* SELECT * FROM dfkklocks
* INTO TABLE lt_dfkklocks
* WHERE lotyp = '02'
* AND ( proid EQ '09' OR proid EQ '10' )
* AND lockr EQ 'C'
* AND vkont EQ lt_zbibd-contract_account
* AND adatum LE v_creation_date.
* LOOP AT lt_dfkklocks INTO lw_dfkklocks.
* IF lw_dfkklocks-adatum EQ v_creation_date AND
* lw_dfkklocks-azeit GT v_creation_time.
* DELETE lt_dfkklocks INDEX sy-tabix.
* ENDIF.
* ENDLOOP.
* IF NOT lt_dfkklocks IS INITIAL.
* SORT lt_dfkklocks BY loobj1.
*
* LOOP AT lt_dfkklocks INTO lw_dfkklocks.
* IF lw_dfkklocks-proid = '09'.
* LOOP AT t_dfkkop INTO wa_dfkkop WHERE opbel = lw_dfkklocks-
loobj1+0(12)
* AND opupk = lw_dfkklocks-
loobj1+13(4).
* lt_zbibd-amt_abey_with_dps = lt_zbibd-amt_abey_with_dps +
* wa_dfkkop-betrw.
* ENDLOOP.
* ELSEIF lw_dfkklocks-proid = '10'.
* LOOP AT t_dfkkop INTO wa_dfkkop WHERE opbel = lw_dfkklocks-
loobj1+0(12)
* AND opupk = lw_dfkklocks-
loobj1+13(4)
* AND hvorg = 'Z121'.
* lt_zbibd-amt_abey_with_dps = lt_zbibd-amt_abey_with_dps +
* wa_dfkkop-betrw.
* ENDLOOP.
* ENDIF.
* ENDLOOP.
* ENDIF.
*
******************DFKKLOCKSH used for History LOCKED items*****************
* SELECT * FROM dfkklocksh
* INTO TABLE lt_dfkklock_h
* WHERE lotyp = '02'
* AND ( proid EQ '09' OR proid EQ '10' )
* AND lfdnr EQ '1'
* AND gpart EQ lt_zbibd-partner
* AND adatum LE v_creation_date
* AND ldatum GT v_creation_date.
* LOOP AT lt_dfkklock_h INTO lw_dfkklock_h.
* IF lw_dfkklock_h-adatum EQ v_creation_date AND
* lw_dfkklock_h-azeit GT v_creation_time.
* DELETE lt_dfkklock_h INDEX sy-tabix.
* ENDIF.
* IF lw_dfkklock_h-ldatum EQ v_creation_date AND
* lw_dfkklock_h-lzeit LT v_creation_time.
* DELETE lt_dfkklock_h INDEX sy-tabix.
* ENDIF.
* ENDLOOP.
*
* IF NOT lt_dfkklock_h IS INITIAL.
* SORT lt_dfkklock_h BY loobj1.
*
* LOOP AT lt_dfkklock_h INTO lw_dfkklock_h.
* IF lw_dfkklock_h-proid = '09'.
* LOOP AT t_dfkkop INTO wa_dfkkop WHERE opbel = lw_dfkklock_h-
loobj1+0(12)
* AND opupk = lw_dfkklock_h-
loobj1+13(4).
* lt_zbibd-amt_abey_with_dps = lt_zbibd-amt_abey_with_dps +
* wa_dfkkop-betrw.
* ENDLOOP.
* ELSEIF lw_dfkklock_h-proid = '10'.
* LOOP AT t_dfkkop INTO wa_dfkkop WHERE opbel = lw_dfkklock_h-
loobj1+0(12)
* AND opupk = lw_dfkklock_h-
loobj1+13(4)
* AND hvorg = 'Z121'.
* lt_zbibd-amt_abey_with_dps = lt_zbibd-amt_abey_with_dps +
* wa_dfkkop-betrw.
* ENDLOOP.
* ENDIF.
* ENDLOOP.
* ENDIF.
*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
ENDFORM . " USER_EXIT_BEFORE_DOC_ITEM
*&---------------------------------------------------------------------*
*& USER_EXIT_DURING_DOC_ITEM
*&---------------------------------------------------------------------*
*& Use this form e.g. to prepare the data for the printing or
*& to perform summations
*& This exit is processed *DURING* a form_level-loop
*& X_INDEX denotes the current entry in the associated table
*&---------------------------------------------------------------------*
*& <--> X_DOC_ITEM
*&---------------------------------------------------------------------*
FORM user_exit_during_doc_item
USING
x_doc_item TYPE g_type_str_doc_item
value(x_index) TYPE sy-tabix.

**********Logic for CONTRACT*******************************


IF lt_zbibd-contract IS INITIAL.
lt_zbibd-contract = wa_contract-vertrag.
ENDIF.

**************Logic for Connection Date*********************


IF movein_date1 IS INITIAL.
IF wa_contract-einzdat_alt IS NOT INITIAL.
movein_date1 = wa_contract-einzdat_alt.
ENDIF.
ENDIF.
********************DEDICATED FEEDER**************************
IF lt_zbibd-dedicated_feeder IS INITIAL.
IF wa_premise-zz_feeder IS NOT INITIAL.
lt_zbibd-dedicated_feeder = 'Y'.
ELSE.
lt_zbibd-dedicated_feeder = 'N'.
ENDIF.
ENDIF.

******************************CONVERSION FACTOR****************************
***
IF cfac IS INITIAL AND wa_conversion-
umwfakt IS NOT INITIAL AND wa_conversion-umwgrund EQ '7'.
cfac = wa_conversion-umwfakt.
ENDIF.

**************OLD ACCOUNT NUMBER********************************


IF lt_zbibd-old_acc_no IS INITIAL.
lt_zbibd-old_acc_no = wa_contract-vbez. "refer.
ENDIF.

*****************PREMISE TEXT*******************************
IF lt_zbibd-pss_name IS INITIAL AND wa_premise-zz_psstxt IS NOT INITIAL.
lt_zbibd-pss_name = wa_premise-zz_psstxt.
ENDIF.
***************LOGIC FOR FETCHING INSTALLATION*****************
IF v_anlage IS INITIAL AND wa_install-anlage IS NOT INITIAL
AND ( lv_daats BETWEEN wa_install-
ab AND wa_install-bis ).
v_anlage = wa_install-anlage.
lt_zbibd-mru = wa_install-ableinh.
ENDIF.

********************Logic for Rate Category***************added on 16.04.16


* IF NOT v_anlage IS INITIAL AND lt_zbibd-tariff_type IS INITIAL.
* SELECT SINGLE tariftyp FROM eanlh INTO lt_zbibd-
tariff_type WHERE anlage = v_anlage
* AND bis
= '99991231'.
* ENDIF.

**********************Premise number***************************
IF lv_premise IS INITIAL AND wa_premise-vstelle IS NOT INITIAL.
lv_premise = wa_premise-vstelle.
ENDIF.
*******************METER number and Meter Phase****************************
*******
IF lt_zbibd-meter_no IS INITIAL AND wa_equip-equnr IS NOT INITIAL
AND ( lv_daats BETWEEN wa_equip-ab AND wa_equip-
bis ).
* AND wa_equip-bis EQ '99991231'.
* BREAK-POINT.
lt_zbibd-meter_no = wa_equip-equnr.
lv_no = wa_equip-equnr. "wa_ablesebel-gernr.
SELECT SINGLE zwgruppe equnr logiknr FROM egerh INTO wa_egerh
WHERE equnr = lv_no AND bis = '99991231'.
* lv_egerh1 = wa_egerh-zwgruppe+0(1).
* IF lv_egerh1 = '1'.
* lt_zbibd-meter_phase = 'SINGLE PHASE'.
* ELSEIF lv_egerh1 = '3'.
* lt_zbibd-meter_phase = 'THREE PHASE'.
* ENDIF.
CLEAR: lv_no,lv_egerh1.
ENDIF.

*********************CONNECTION OBJECT FOR GETTING METER NOTE**************


***
IF NOT wa_conn_obj-haus IS INITIAL AND lv_haus IS INITIAL.
lv_haus = wa_conn_obj-haus.
ENDIF.
*******************METER MAKE***********************************
IF lt_zbibd-meter_make IS INITIAL AND wa_equip-herst IS NOT INITIAL
AND ( lv_daats BETWEEN wa_equip-ab AND wa_equip-
bis ).
* AND wa_equip-bis EQ '99991231'.
lt_zbibd-meter_make = wa_equip-herst.
ENDIF.
*******************************MR Note********************************
IF NOT wa_mr_note_t-tablhinw IS INITIAL AND zextra-mrnote IS INITIAL.
zextra-mrnote = wa_mr_note_t-tablhinw.
ENDIF.

*******************Meter RATIO****************************************
IF lt_zbibd-meter_ratio IS INITIAL AND ( NOT wa_equip-
zstromp IS INITIAL OR
NOT wa_equip-
zstroms IS INITIAL ).
text1 = wa_equip-zstromp.
text2 = wa_equip-zstroms.
dec1 = wa_equip-zstromp / wa_equip-zstroms.
tot1 = dec1.
CONDENSE:text1,text2,tot1.
CONCATENATE text1 '/' text2 INTO lt_zbibd-
meter_ratio RESPECTING BLANKS.
* CONCATENATE text1 '/' text2 ' = ' tot1 INTO lt_zbibd-
meter_ratio RESPECTING BLANKS.
CONDENSE lt_zbibd-meter_ratio.
CLEAR: text1,text2,dec1,tot1.
ENDIF.
**********************SUPPLY VOLTAGE***************************
IF lt_zbibd-supply_voltage IS INITIAL AND NOT wa_install-
spebene IS INITIAL
AND ( lv_daats BETWEEN wa_install-
ab AND wa_install-bis ).
* wa_install-
bis EQ '99991231'.
SELECT SINGLE text30 FROM te369t INTO lt_zbibd-supply_voltage
WHERE spebene = wa_install-spebene AND spras = 'EN'.
ENDIF.

***********below code commented as it takes lot of time in During Loop.


***********It been implemented in After Doc Loop.
IF wa_egerh-logiknr IS NOT INITIAL.
gv_logiknr = wa_egerh-logiknr.
ENDIF.
****************************************************

* IF lt_zbibd-route_sequence IS INITIAL AND wa_egerh-


logiknr IS NOT INITIAL AND
* lt_zbibd-mru IS NOT INITIAL.
**##################Logic for Route Sequence*******************************
**********
* CALL FUNCTION 'ZISU_DB_ELWEG_SELECT'
* EXPORTING
* x_ableinh = lt_zbibd-mru
* TABLES
* t_elweg = t_elweg
* EXCEPTIONS
* not_found = 1
* system_error = 2
* not_qualified = 3
* OTHERS = 4.
* IF sy-subrc <> 0.
** Implement suitable error handling here
* ENDIF.
* SORT t_elweg BY logiknr.
* READ TABLE t_elweg INTO wa_elweg WITH KEY logiknr = wa_egerh-
logiknr BINARY SEARCH.
* IF sy-subrc = 0.
* lt_zbibd-route_sequence = sy-tabix.
* CONDENSE lt_zbibd-route_sequence.
* ENDIF.
* CLEAR: t_elweg,wa_elweg.
**##################End of Logic for Route Sequence
* ENDIF.

* IF lv_eabl IS INITIAL.
* lv_eabl = wa_doc_item-ablbelnr.
* ENDIF.
IF bluetooth IS INITIAL.
IF wa_material-funklas = '1013'.
bluetooth = 'X'.
ENDIF.
ENDIF.

IF priceclas IS INITIAL AND wa_material-preiskla IS NOT INITIAL.


priceclas = wa_material-preiskla.
ENDIF.

IF mr_note IS INITIAL AND wa_ablesebel-ablhinw IS NOT INITIAL.


mr_note = wa_ablesebel-ablhinw.
ENDIF.

IF lv_matnr IS INITIAL.
lv_matnr = wa_material-matnr.
ENDIF.

IF lv_bauklas IS INITIAL.
lv_bauklas = wa_material-bauklas.
ENDIF.
**********Logic for Feeder Name*********
IF lt_zbibd-feeder_type IS INITIAL.
lv_feeder_code = wa_premise-zz_feeder.
CALL FUNCTION 'CONVERSION_EXIT_TPLNR_OUTPUT'
EXPORTING
input = lv_feeder_code
IMPORTING
output = lv_feeder_code.
SHIFT lv_feeder_code LEFT DELETING LEADING ' ' .
lv_feeder_code = lv_feeder_code+13(3).
lt_zbibd-feeder_type = lv_feeder_code.
CLEAR lv_feeder_code.

ENDIF.

***********LOGIC FOR DT CODE**********************************


IF lt_zbibd-dt_code IS INITIAL AND wa_premise-zz_dt IS NOT INITIAL
AND lt_zbibd-mru IS NOT INITIAL AND lt_zbibd-mru+4(1) NE '4'.
obj_temp = wa_premise-zz_dt.
CALL FUNCTION 'CONVERSION_EXIT_TPLNR_OUTPUT'
EXPORTING
input = obj_temp
IMPORTING
output = obj_temp
EXCEPTIONS
not_found = 1
OTHERS = 2.

lt_zbibd-dt_code = obj_temp+19(3).
CLEAR obj_temp.
ENDIF.

IF lv_adatsoll IS INITIAL AND wa_ablesebel-adatsoll IS NOT INITIAL.


lv_adatsoll = wa_ablesebel-adatsoll.
ENDIF.

IF lv_adatsoll LT wa_ablesebel-adatsoll.
lv_adatsoll = wa_ablesebel-adatsoll.
ENDIF.

IF wa_conn_obj-tplma IS NOT INITIAL.


IF lt_zbibd-feeder_name IS INITIAL.
* lv_adatsoll = wa_ablesebel-adatsoll.
obj_temp = wa_conn_obj-tplma.

CALL FUNCTION 'CONVERSION_EXIT_TPLNR_INPUT'


EXPORTING
input = obj_temp
* I_FLG_CHECK_INTERNAL = 'X'
IMPORTING
output = obj_temp
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'


EXPORTING
objectkey_imp = obj_temp
objecttable_imp = 'IFLOT'
classtype_imp = '003'
keydate = sy-datum
language = sy-langu
TABLES
alloclist = lt_alloclist
return = lt_return1.

READ TABLE lt_alloclist INTO ls_alloclist INDEX 1.


IF sy-subrc = 0.
CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
EXPORTING
class = ls_alloclist-classnum
classtext = 'X'
classtype = '003'
object = obj_temp
TABLES
t_class = lt_class
t_objectdata = lt_objectdata
EXCEPTIONS
no_classification = 1
no_classtypes = 2
invalid_class_type = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
READ TABLE lt_objectdata INTO wa_objectdata WITH KEY atnam = 'FEEDE
RAREATYPE'.
* lv_feeder = wa_objectdata-ausp1.
lt_zbibd-feeder_name = wa_objectdata-ausp1.
ENDIF.

CALL FUNCTION 'CONVERSION_EXIT_TPLNR_OUTPUT'


EXPORTING
input = obj_temp
IMPORTING
output = obj_temp.

*********************Pole no********************************
lt_zbibd-pole_no = obj_temp. "+24(4).
obj_temp = obj_temp+0(16).
CONDENSE lt_zbibd-pole_no.
CLEAR: lt_alloclist,ls_alloclist,lt_class,lt_objectdata,obj_temp.
ENDIF.

ENDIF.

IF wa_conn_obj-regiogroup IS NOT INITIAL.


IF lt_zbibd-sub_div_name IS INITIAL.
SELECT SINGLE description pol_rsgid_01 FROM zdm_rsg INTO
(sub_division,div) WHERE pol_rsgid_01 = wa_conn_obj-regiogroup.
SELECT SINGLE pol_rsgid_02 description FROM zdm_rsg INTO
(cir,division1) WHERE pol_rsgid_01 = div.
SELECT SINGLE description FROM zdm_rsg INTO circle1
WHERE pol_rsgid_01 = cir.
zone = circle1.
zone1 = cir+0(1).

lt_zbibd-sub_div_code = wa_conn_obj-regiogroup.
lt_zbibd-sub_div_name = sub_division.
lt_zbibd-division_code = div.
lt_zbibd-division_name = division1.
lt_zbibd-circle = circle1.

CLEAR: sub_division,div,division1,circle1,cir.
ENDIF.
ENDIF.
* BREAK-POINT.
***********LOGIC FOR ENERGY CALCULATIONS***********************************
***
IF x_doc_item-belzart NE 'Z99999' .
IF x_doc_item-belzart = 'ZOLPPI'.
* For Non HT cases online_rebate field is used for ZOLPPI and for HT cases
this field
* is used for Z148 line item ,
IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-
tariff_type+0(2) <> 'RT'.
lt_zbibd-online_rebate = lt_zbibd-online_rebate + x_doc_item-
nettobtr.
ENDIF.
online_rebate = online_rebate + x_doc_item-nettobtr.
ENDIF.
IF x_doc_item-sc_belnr = ''.

IF x_doc_item-belzart = 'ZRBATE' OR x_doc_item-belzart = 'ZSAPRB'.


lt_zbibd-ppi_leviable = lt_zbibd-ppi_leviable + x_doc_item-
nettobtr.
ELSEIF x_doc_item-belzart = 'ZBMUNT'.
lt_zbibd-minimum_unit = lt_zbibd-minimum_unit + x_doc_item-
i_abrmenge.
ELSEIF x_doc_item-belzart = 'Z85%CD'.
lt_zbibd-cont_dem_85 = lt_zbibd-cont_dem_85 + x_doc_item-
i_abrmenge.
ELSEIF x_doc_item-belzart = 'ZLEGRB'.
IF creation_date LE '20140903'.
lt_zbibd-other_charges = lt_zbibd-other_charges - x_doc_item-
nettobtr.
ELSE.
lt_zbibd-other_charges = lt_zbibd-other_charges + x_doc_item-
nettobtr. "+ sign used after Vishwajeeth said
ENDIF.
ELSEIF x_doc_item-belzart = 'ZLEMUN'.
lt_zbibd-tot_unit_billed = lt_zbibd-tot_unit_billed + x_doc_item-
i_abrmenge.
ELSEIF x_doc_item-belzart = 'ZMTCON'.
zmtcon = zmtcon + x_doc_item-i_abrmenge.
ENDIF.

IF x_doc_item-buchrel = 'X'.
* IF ( x_doc_item-belzart = 'ZENERG' OR x_doc_item-belzart = 'ZMMC') .

IF x_doc_item-belzart = 'ZENERG' OR x_doc_item-belzart = 'ZSAPEC'.


lv_basis = 'Actual'.
lt_zbibd-energy_charge = lt_zbibd-energy_charge +
x_doc_item-nettobtr.
IF x_doc_item-belzart = 'ZENERG'.
energy_rate = x_doc_item-preisbtr.
ENDIF.
ELSEIF x_doc_item-belzart = 'ZED' OR x_doc_item-belzart = 'ZSAPED'.
lt_zbibd-electricity_duty = lt_zbibd-electricity_duty +
x_doc_item-nettobtr.

ELSEIF x_doc_item-belzart = 'ZMMC' AND x_doc_item-nettobtr GT 0.


lv_basis = 'MMC'.
lt_zbibd-minimum_charge = lt_zbibd-minimum_charge + x_doc_item-
nettobtr.
ELSEIF ( x_doc_item-belzart = 'ZKWEXS' OR x_doc_item-
belzart = 'ZKVAEX' ).

lt_zbibd-excess_demand_chrg = lt_zbibd-
excess_demand_chrg + x_doc_item-nettobtr.
ELSEIF ( x_doc_item-belzart = 'ZFIX' OR x_doc_item-
belzart = 'ZKW' OR
x_doc_item-belzart = 'HP' OR x_doc_item-belzart = 'ZKVA').

lt_zbibd-fixed_demand_chrg = lt_zbibd-
fixed_demand_chrg + x_doc_item-nettobtr.
******added by KiranD B10K902722*****************************
****commented by TMKIRAND on 06.05.2017 for pl adj.*****
* IF lt_zbibd-tariff_type NE 'DS-IID' .
* wa_fix-rate = x_doc_item-tariftyp.
* wa_fix-belzart = x_doc_item-belzart.
* wa_fix-nettobtr = x_doc_item-nettobtr.
* wa_fix-ab = x_doc_item-ab.
* wa_fix-bis = x_doc_item-bis.
* wa_fix-belnr = x_doc_item-sc_belnr.
* APPEND wa_fix TO it_fix.
* CLEAR: wa_fix.
* ENDIF.
*******end of comment by TMKIRAND on 06.05.2017 for pl adj.*****
******end of addition by KiranD B10K902722*******************
* IF x_doc_item-belzart = 'ZFIX'.
max_dem = x_doc_item-preisbtr.
* ENDIF.
ELSEIF x_doc_item-belzart = 'ZMTRR' .
lt_zbibd-meter_rent = lt_zbibd-meter_rent + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZMCGST' .
lt_zbibd-meter_cgst = lt_zbibd-meter_cgst + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZMSGST' .
lt_zbibd-meter_sgst = lt_zbibd-meter_sgst + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZSTCCH' .
lt_zbibd-shunt_cap_charge = lt_zbibd-
shunt_cap_charge + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZMMCFN' .
wa_charges-others = wa_charges-others + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZFPCA' .
lt_zbibd-fppca_charges = lt_zbibd-fppca_charges + x_doc_item-
nettobtr.
ELSEIF x_doc_item-belzart = 'ZMTVAT' .
lt_zbibd-vat_on_meter_rent = lt_zbibd-
vat_on_meter_rent + x_doc_item-nettobtr.
* ELSEIF ( x_doc_item-belzart = 'ZSTAFF' OR x_doc_item-
belzart = 'ZBSFIX' ).
ELSEIF x_doc_item-belzart = 'ROUNDO' OR x_doc_item-
belzart = 'ROUND'.
* lv_incentive = lv_incentive + x_doc_item-nettobtr.
* Changes by TMSUDHAKARP #B10K902635
IF creation_date LE '20140910'.
IF x_doc_item-belzart = 'ROUNDO'.
IF x_doc_item-nettobtr LT '.5'.
neg_roundo = neg_roundo + x_doc_item-nettobtr.
ELSE.
* End changes by TMSUDHAKARP #B10K902635
IF last_date IS INITIAL.
ELSEIF x_doc_item-nettobtr LT '.5'.
ELSE.
lt_zbibd-incentive_charge = lt_zbibd-
incentive_charge + x_doc_item-nettobtr..
ENDIF.

ENDIF.
ENDIF.
ELSE.
neg_roundo = neg_roundo + x_doc_item-nettobtr.
ENDIF.
ELSEIF ( x_doc_item-belzart = 'ZIIPRB' OR x_doc_item-
belzart = 'ZIPDPS').
* wa_charges-mmc_rebate = wa_charges-mmc_rebate + x_doc_item-
nettobtr.
lt_zbibd-incentive_under_iip = lt_zbibd-
incentive_under_iip + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZVOLTA'.
lt_zbibd-voltage_surcharge = lt_zbibd-
voltage_surcharge + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'Z1H1'.
tod_flag = 'X'.
lv_basis = 'Actual'.
lt_zbibd-energy_charge_1h1 = lt_zbibd-
energy_charge_1h1 + x_doc_item-nettobtr.
1h1_rate = x_doc_item-preisbtr.
ELSEIF x_doc_item-belzart = 'Z2H1'.
tod_flag = 'X'.
lv_basis = 'Actual'.
lt_zbibd-energy_charge_2h1 = lt_zbibd-
energy_charge_2h1 + x_doc_item-nettobtr.
2h1_rate = x_doc_item-preisbtr.
ELSEIF x_doc_item-belzart = 'Z3H1'.
tod_flag = 'X'.
lv_basis = 'Actual'.
lt_zbibd-energy_charge_3h1 = lt_zbibd-
energy_charge_3h1 + x_doc_item-nettobtr.
3h1_rate = x_doc_item-preisbtr.
ELSEIF x_doc_item-belzart = 'ZSURCH'.
lt_zbibd-voltage_surcharge = lt_zbibd-
voltage_surcharge + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZTRNCH'.
lt_zbibd-transformer_rent = lt_zbibd-
transformer_rent + x_doc_item-nettobtr.
ELSEIF ( x_doc_item-belzart = 'ZPFSUR' OR x_doc_item-
belzart = 'ZPFREB' ).
lt_zbibd-pf_surchg_rebate = lt_zbibd-
pf_surchg_rebate + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZEDIIP' AND ( x_doc_item-
tariftyp+0(2) EQ 'HT' OR
x_doc_item-
tariftyp+0(2) EQ 'RT') .
lt_zbibd-remission = lt_zbibd-remission + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZEDIIP' AND ( x_doc_item-
tariftyp+0(2) NE 'HT' AND
x_doc_item-
tariftyp+0(2) NE 'RT') .
lt_zbibd-incentive_under_iip = lt_zbibd-
incentive_under_iip + x_doc_item-nettobtr.
* lt_zbibd-other_charges = lt_zbibd-other_charges + x_doc_item-
nettobtr.
* wa_fix-rate = x_doc_item-tariftyp.
* wa_fix-belzart = x_doc_item-belzart.
* wa_fix-nettobtr = x_doc_item-nettobtr.
* wa_fix-ab = x_doc_item-ab.
* wa_fix-bis = x_doc_item-bis.
* wa_fix-belnr = x_doc_item-sc_belnr.
* APPEND wa_fix TO it_fix.
* v_z131 = v_z131 + x_doc_item-nettobtr.
* CLEAR: wa_fix.
ELSEIF x_doc_item-belzart = 'ZDPS' OR x_doc_item-
belzart = 'ZPPI' OR x_doc_item-belzart = 'ZLEGRB'.
* Code inserted by venkat B10K907825
ELSEIF x_doc_item-belzart = 'ZREAOP'.
lt_zbibd-reactive_chrg = lt_zbibd-reactive_chrg + x_doc_item-
nettobtr.
open_access = 'X'.
ELSEIF x_doc_item-belzart = 'ZCSSOP'.
lt_zbibd-cross_subsidy = lt_zbibd-cross_subsidy + x_doc_item-
nettobtr.
* v_css_rate = x_doc_item-preisbtr.
* v_css_unit = x_doc_item-i_abrmenge.
ELSEIF x_doc_item-belzart = 'ZENGOV' OR x_doc_item-
belzart = 'ZFXGOV'.
lt_zbibd-gov_subsidy = lt_zbibd-gov_subsidy + x_doc_item-
nettobtr.
IF x_doc_item-belzart = 'ZENGOV' AND zextra-gov_sub IS INITIAL.
v_gov_sub = x_doc_item-preisbtr.

zextra-gov_sub = v_gov_sub.
CONDENSE zextra-gov_sub.
ENDIF.

* end of venkat B10K907825


ELSE.
lt_zbibd-other_charges = lt_zbibd-other_charges + x_doc_item-
nettobtr.
******added by KiranD B10K902722*****************************
wa_fix-rate = x_doc_item-tariftyp.
wa_fix-belzart = x_doc_item-belzart.
wa_fix-nettobtr = x_doc_item-nettobtr.
wa_fix-ab = x_doc_item-ab.
wa_fix-bis = x_doc_item-bis.
wa_fix-belnr = x_doc_item-sc_belnr.
APPEND wa_fix TO it_fix.
CLEAR: wa_fix.
IF x_doc_item-belzart = 'ZPLRB'.
v_z131 = v_z131 + x_doc_item-nettobtr.
ENDIF.
******end of addition by KiranD B10K902722*******************
ENDIF.
ENDIF.
ELSE.
IF x_doc_item-buchrel = 'X'.
IF x_doc_item-belzart = 'ZRBATE' OR
x_doc_item-belzart = 'ZMTDMD' OR
x_doc_item-belzart = 'ZMUNIT' OR
x_doc_item-belzart = 'ZMTCON'.
ELSEIF x_doc_item-belzart = 'ZFIX' OR
x_doc_item-
belzart = 'ZKW'. "uncommnted by TMKIRAND on 06.05.2017 for pl adj.
*****commented by TMKIRAND on 06.05.2017 for pl adj.*****
* IF lt_zbibd-tariff_type = 'DS-IIID' OR
** lt_zbibd-tariff_type = 'DS-
IID' OR "Commented by TMMANISHT on 6th April 2017 Request No:-B10K907840
** lt_zbibd-tariff_type = 'LTIS-
ID' OR "Commented by TMMANISHT on 6th April 2017 Request No:-B10K907840
** lt_zbibd-tariff_type = 'LTIS-
IID' OR "Commented by TMMANISHT on 6th April 2017 Request No:-B10K907840
* lt_zbibd-tariff_type = 'NDS-IID' OR
* lt_zbibd-tariff_type = 'NDS-IIID'.
* ELSE.
lt_zbibd-fixed_demand_chrg = lt_zbibd-
fixed_demand_chrg + x_doc_item-nettobtr.
*****added by KiranD B10K902722*****************************
* IF lt_zbibd-tariff_type NE 'DS-IID'.
* wa_fix-rate = x_doc_item-tariftyp.
* wa_fix-belzart = x_doc_item-belzart.
* wa_fix-nettobtr = x_doc_item-nettobtr.
* wa_fix-ab = x_doc_item-ab.
* wa_fix-bis = x_doc_item-bis.
* wa_fix-belnr = x_doc_item-sc_belnr.
* APPEND wa_fix TO it_fix.
* CLEAR: wa_fix.
* ENDIF.
* ENDIF.
*****end of comment by TMKIRAND on 06.05.2017 for pl adj.*****
******end of addition by KiranD B10K902722*******************
max_dem = x_doc_item-preisbtr.
ELSEIF x_doc_item-belzart = 'ZMTRR'.
lt_zbibd-meter_rent = lt_zbibd-meter_rent + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZMCGST' .
lt_zbibd-meter_cgst = lt_zbibd-meter_cgst + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZMSGST' .
lt_zbibd-meter_sgst = lt_zbibd-meter_sgst + x_doc_item-nettobtr.
ELSEIF x_doc_item-belzart = 'ZEDIIP'.
lt_zbibd-remission = lt_zbibd-remission + x_doc_item-nettobtr.
ELSE.
******added by KiranD B10K902722*****************************
wa_fix-rate = x_doc_item-tariftyp.
wa_fix-belzart = x_doc_item-belzart.
wa_fix-nettobtr = x_doc_item-nettobtr.
wa_fix-ab = x_doc_item-ab.
wa_fix-bis = x_doc_item-bis.
wa_fix-belnr = x_doc_item-sc_belnr.
APPEND wa_fix TO it_fix.
CLEAR: wa_fix.
******end of addition by KiranD B10K902722*******************
lt_zbibd-other_charges = lt_zbibd-other_charges + x_doc_item-
nettobtr.
ENDIF.
ELSEIF x_doc_item-belzart = 'ZRBATE' OR x_doc_item-
belzart = 'ZMMAMT' OR
x_doc_item-belzart = 'ZENERG'.
ELSEIF x_doc_item-belzart = 'ZLEMUN'.
lt_zbibd-tot_unit_billed = lt_zbibd-tot_unit_billed + x_doc_item-
i_abrmenge.
*********commented by TMKIRAND to fix problem in invoice '10006273226' on 2
5-11-15
* ELSE.
* lt_zbibd-other_charges = lt_zbibd-other_charges + x_doc_item-
nettobtr.
*******added by KiranD B10K902722*****************************
* wa_fix-rate = x_doc_item-tariftyp.
* wa_fix-belzart = x_doc_item-belzart.
* wa_fix-nettobtr = x_doc_item-nettobtr.
* wa_fix-ab = x_doc_item-ab.
* wa_fix-bis = x_doc_item-bis.
* wa_fix-belnr = x_doc_item-sc_belnr.
* APPEND wa_fix TO it_fix.
* CLEAR: wa_fix.
******end of addition by KiranD B10K902722*******************
*********end of comment by TMKIRAND to fix problem in invoice '10006273226'
on 25-11-15
ENDIF.
ENDIF.
*Start of Addition by TMMANISHT on 31st March 2014
* IF x_doc_item-belzart = 'ZLEG_EC'.
* lv_lt_leg_adj = 'X'.
* ENDIF.
*End of Addition by TMMANISHT on 31st March 2014
ENDIF.

********Meter Reading current date and Previous date***********************


*****88
IF meter_reading-current_date IS INITIAL OR
meter_reading-pre_date IS INITIAL.
IF x_doc_item-buchrel = 'X'.
meter_reading-current_date = x_doc_item-bis.
meter_reading-pre_date = x_doc_item-ab.
ENDIF.
ENDIF.

**************Logic for Energy Dues*******************************


CASE x_doc_item-belzart.
WHEN 'ACCINF' OR 'ACCMNT' OR 'SYNCDD'.

IF x_doc_item-xtotal_amnt = 'X'.
IF x_doc_item-hvorg = '0100'." AND
* ( x_doc_item-tvorg = '0010' OR x_doc_item-tvorg = '0020' OR
* x_doc_item-tvorg = '0011' OR x_doc_item-tvorg = '0021' OR
* x_doc_item-tvorg = '0038' OR x_doc_item-tvorg = '0048' OR
* x_doc_item-tvorg = '0016' OR x_doc_item-tvorg = '0026' ).
*****************Logic for Electricity Dues********************************
*
IF x_doc_item-tvorg = '0022' OR x_doc_item-tvorg = '0012'.
lt_zbibd-arrear_ed = lt_zbibd-arrear_ed + x_doc_item-nettobtr.
ELSE.
lt_zbibd-arrear_energy = lt_zbibd-arrear_energy + x_doc_item-
nettobtr.
ENDIF.
*****************Logic for Electricity Dues********************************
*
* ELSEIF x_doc_item-hvorg = '0100' AND
* ( x_doc_item-tvorg = '0022' OR x_doc_item-tvorg = '0012' ).
* lt_zbibd-arrear_ed = lt_zbibd-arrear_ed + x_doc_item-nettobtr.
ELSEIF x_doc_item-hvorg = 'ZCN2'." OR x_doc_item-hvorg = 'ZCN6'.
lt_zbibd-arrear_ed = lt_zbibd-arrear_ed + x_doc_item-nettobtr.

ELSEIF x_doc_item-hvorg = 'ZCN1'." OR x_doc_item-


hvorg = 'ZCN3' OR x_doc_item-hvorg = 'ZCN7'.
lt_zbibd-arrear_energy = lt_zbibd-arrear_energy + x_doc_item-
nettobtr.
ELSEIF x_doc_item-hvorg = 'Z123'.
* CLEAR lv_daats.
* lv_daats = lt_zbibd-date_of_invoice + 15.
* IF x_doc_item-faedn BETWEEN lt_zbibd-
date_of_invoice AND lv_daats.
* lt_zbibd-fppca_charges = lt_zbibd-fppca_charges + x_doc_item-
nettobtr.
* ELSEIF x_doc_item-faedn GT lv_daats.
* ELSE.
lt_zbibd-arrear_other_chg = lt_zbibd-
arrear_other_chg + x_doc_item-nettobtr.
* ENDIF.
**********LOGIC FOR PUNITIVE AMOUNT**********
ELSEIF x_doc_item-hvorg = 'Z114' OR x_doc_item-hvorg = 'Z115' OR
x_doc_item-hvorg = 'Z116'.
lt_zbibd-arrear_punitive_amt = lt_zbibd-
arrear_punitive_amt + x_doc_item-nettobtr.

************LOGIC FOR PUNITIVE DPS ********


ELSEIF x_doc_item-hvorg = 'Z120'.
lt_zbibd-arrear_punitive_dps = lt_zbibd-
arrear_punitive_dps + x_doc_item-nettobtr.

*******Message for Kept in Abeyance DPS*******


ELSEIF x_doc_item-hvorg = 'Z121' OR x_doc_item-hvorg = 'ZCN7'.
* wa_charges-abeyance_dps = wa_charges-abeyance_dps + x_doc_item-
nettobtr.
lt_zbibd-curr_dps_kept_on_abey = lt_zbibd-
curr_dps_kept_on_abey + x_doc_item-nettobtr.

* ELSEIF x_doc_item-hvorg = 'Z113' AND ( x_doc_item-


tvorg = '0010' OR
* x_doc_item-
tvorg = '0020' ).

***************DPS *********************************************
ELSEIF x_doc_item-hvorg = 'Z111' AND ( x_doc_item-tvorg = '0010' OR
x_doc_item-tvorg = '0020' ).
* wa_dps-date = x_doc_item-faedn.
* wa_dps-budat = x_doc_item-budat.
* wa_dps-dps = x_doc_item-nettobtr.
* wa_dps-item = x_doc_item-belzart.
* APPEND wa_dps TO it_dps.
ELSEIF x_doc_item-hvorg = 'ZCN4' OR x_doc_item-hvorg = 'ZDP1'.
wa_dps-date = x_doc_item-faedn.
wa_dps-budat = x_doc_item-budat.
wa_dps-dps = x_doc_item-nettobtr.
wa_dps-item = x_doc_item-hvorg.
APPEND wa_dps TO it_dps.
IF x_doc_item-hvorg = 'ZDP1'.
gv_zcn3 = gv_zcn3 + x_doc_item-nettobtr.
ENDIF.
ELSEIF x_doc_item-hvorg = '0080' AND x_doc_item-tvorg = '0010'.
IF x_doc_item-belzart = 'SYNCDD'.
****************0080, 0010 can be for Normal installment or FPPCA installme
nt.
*****below logic is written to check for FPPCA, if this fails then its Norm
al Instlment
SELECT SINGLE * FROM fkk_instpln_hist INTO ls_fkk_instal
WHERE rpnum = x_doc_item-ca_opbel.
IF sy-subrc = 0.
CLEAR ls_dfkk_instal.
SELECT SINGLE * FROM dfkkop INTO ls_dfkk_instal
WHERE opbel = ls_fkk_instal-opbel
AND hvorg = 'Z123'.
IF sy-subrc = 0.
lt_zbibd-fppca_charges = lt_zbibd-
fppca_charges + x_doc_item-nettobtr.
ELSE.
lt_zbibd-installment_amount = lt_zbibd-
installment_amount +
x_doc_item-nettobtr.
ENDIF.
ELSE.
lt_zbibd-installment_amount = lt_zbibd-installment_amount +
x_doc_item-nettobtr.
ENDIF.
ELSEIF x_doc_item-belzart = 'ACCINF' OR x_doc_item-
belzart = 'ACCMNT'.
lt_zbibd-arrear_other_chg = lt_zbibd-
arrear_other_chg + x_doc_item-nettobtr.
ENDIF.
ELSEIF x_doc_item-hvorg = 'ZCN9' AND x_doc_item-tvorg = '0020'.
CLEAR lv_daats.
lv_daats = lt_zbibd-date_of_invoice + 15.
IF x_doc_item-faedn BETWEEN lt_zbibd-
date_of_invoice AND lv_daats.
lt_zbibd-installment_amount = lt_zbibd-
installment_amount + x_doc_item-nettobtr.
ELSEIF x_doc_item-faedn GT lv_daats.
ELSE.
lt_zbibd-arrear_other_chg = lt_zbibd-
arrear_other_chg + x_doc_item-nettobtr.
ENDIF.
ELSEIF x_doc_item-hvorg = 'RUND' AND x_doc_item-tvorg = '0010'.
IF creation_date LE '20140910'.
IF last_budat EQ x_doc_item-budat AND payment_acc LT 0.
last_rund = last_rund + x_doc_item-nettobtr.
ENDIF.
ELSE.
last_rund = last_rund + x_doc_item-nettobtr.
ENDIF.

ELSEIF x_doc_item-hvorg = 'ZCN8' OR x_doc_item-hvorg = 'Z131'


OR x_doc_item-hvorg = 'Z134'
OR x_doc_item-hvorg = 'Z132'
OR x_doc_item-hvorg = 'ZOTS'.
IF creation_date GE '20140913'.
IF x_doc_item-hvorg = 'ZCN8'.
lt_zbibd-ppi_levied = lt_zbibd-ppi_levied + x_doc_item-
nettobtr.
ELSE.
*************BACK DATED REMISSION*********************
IF x_doc_item-hvorg = 'Z131' AND ( x_doc_item-
tvorg = '0040' OR
x_doc_item-
tvorg = '0050' ).
IF x_doc_item-budat BETWEEN last_date AND lt_zbibd-
date_of_invoice.
lt_zbibd-incentive_under_iip = lt_zbibd-
incentive_under_iip
+ x_doc_item-nettobtr.
ELSE.
lt_zbibd-arrear_other_chg = lt_zbibd-arrear_other_chg +
x_doc_item-nettobtr.
ENDIF.
ELSE.
IF x_doc_item-budat BETWEEN last_date AND lt_zbibd-
date_of_invoice.
lt_zbibd-other_charges = lt_zbibd-
other_charges + x_doc_item-nettobtr.

wa_fix-rate = x_doc_item-tariftyp.
wa_fix-belzart = x_doc_item-belzart.
wa_fix-nettobtr = x_doc_item-nettobtr.
wa_fix-ab = x_doc_item-ab.
wa_fix-bis = x_doc_item-bis.
wa_fix-belnr = x_doc_item-sc_belnr.
APPEND wa_fix TO it_fix.
CLEAR: wa_fix.
v_z131 = v_z131 + x_doc_item-nettobtr.
ELSE.
lt_zbibd-arrear_other_chg = lt_zbibd-
arrear_other_chg + x_doc_item-nettobtr.
ENDIF.
ENDIF.
ENDIF.
ELSE.
lt_zbibd-ppi_levied = lt_zbibd-ppi_levied + x_doc_item-
nettobtr.
ENDIF.
* IF x_doc_item-hvorg = 'Z131' OR x_doc_item-hvorg = 'Z134'.
* v_z131 = v_z131 + x_doc_item-nettobtr.
* ENDIF.

* lt_zbibd-ppi_levied = lt_zbibd-ppi_levied + x_doc_item-nettobtr.


* ELSEIF x_doc_item-hvorg = 'Z131'. "Added by TMKIRAND B10K902803
* lt_zbibd-other_charges = lt_zbibd-other_charges + x_doc_item-
nettobtr.
ELSEIF x_doc_item-hvorg = '0060' AND x_doc_item-tvorg = '0010'.
lv_advance_pay = lv_advance_pay + x_doc_item-nettobtr.
ELSEIF x_doc_item-hvorg = 'Z133' AND x_doc_item-tvorg = '0010'.
lt_zbibd-interest_sd = lt_zbibd-interest_sd + x_doc_item-
nettobtr.
ELSEIF x_doc_item-hvorg = 'Z133' OR x_doc_item-hvorg = '0025'
OR x_doc_item-hvorg = 'Z135'.
IF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-
tariff_type+0(2) = 'RT'.
lt_zbibd-interest_sd = lt_zbibd-interest_sd + x_doc_item-
nettobtr.
ELSE.
IF x_doc_item-belzart = 'SYNCDD'.
lt_zbibd-interest_sd = lt_zbibd-interest_sd + x_doc_item-
nettobtr.
ELSEIF x_doc_item-belzart = 'ACCMNT'.
lv_advance_pay = lv_advance_pay + x_doc_item-nettobtr.
ENDIF.
ENDIF.

ELSEIF x_doc_item-hvorg = 'Z148'.


IF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-
tariff_type+0(2) = 'RT'.
lt_zbibd-online_rebate = lt_zbibd-online_rebate + x_doc_item-
nettobtr.
ELSE.
lt_zbibd-arrear_other_chg = lt_zbibd-
arrear_other_chg + x_doc_item-nettobtr.
ENDIF.

ELSEIF x_doc_item-hvorg = 'Z150' AND ( lt_zbibd-


tariff_type+0(2) EQ 'HT' OR
lt_zbibd-
tariff_type+0(2) EQ 'RT') .
lt_zbibd-remission = lt_zbibd-remission + x_doc_item-nettobtr.
ELSE.
IF x_doc_item-hvorg NE '0020'. "Added on 22nd March 2014
lt_zbibd-arrear_other_chg = lt_zbibd-
arrear_other_chg + x_doc_item-nettobtr.
ELSEIF x_doc_item-hvorg EQ '0020' AND x_doc_item-tvorg = '0020'.
CLEAR: lv_daats,ls_fkk.
SELECT SINGLE * FROM fkk_sec INTO ls_fkk WHERE opbel = x_doc_it
em-ca_opbel.
* AND reason = '0007'
.
IF ls_fkk-reason = '0007'. "sy-subrc = 0.
lv_daats = lt_zbibd-date_of_invoice + 15.
IF x_doc_item-faedn BETWEEN lt_zbibd-
date_of_invoice AND lv_daats.
lt_zbibd-installment_amount = lt_zbibd-
installment_amount + x_doc_item-nettobtr.
ELSEIF x_doc_item-faedn GT lv_daats.
ELSE.
lt_zbibd-arrear_other_chg = lt_zbibd-
arrear_other_chg + x_doc_item-nettobtr.
ENDIF.
ELSEIF NOT ls_fkk-reason IS INITIAL.
lt_zbibd-arrear_other_chg = lt_zbibd-
arrear_other_chg + x_doc_item-nettobtr.
ENDIF.
ELSEIF x_doc_item-hvorg EQ '0020' AND x_doc_item-tvorg = '0010'.
lt_zbibd-incentive_under_iip = lt_zbibd-
incentive_under_iip + x_doc_item-nettobtr.
sd_rel = 'X'.
sd_rel_amt = sd_rel_amt + x_doc_item-nettobtr.
ENDIF.

ENDIF.

ENDIF.
IF x_doc_item-hvorg = 'Z111'. "AND ( x_doc_item-
tvorg = '0010' OR x_doc_item-tvorg = '0020' ).
wa_dps-date = x_doc_item-faedn.
wa_dps-budat = x_doc_item-budat.
wa_dps-dps = x_doc_item-nettobtr.
wa_dps-item = x_doc_item-hvorg.
APPEND wa_dps TO it_dps.
ELSEIF x_doc_item-hvorg = 'Z144'.
lt_zbibd-amt_abey_with_dps = lt_zbibd-
amt_abey_with_dps + x_doc_item-nettobtr.
* lt_zbibd-arrear_other_chg = lt_zbibd-
arrear_other_chg + x_doc_item-nettobtr.
ENDIF.
* Begin of changes by TMSUDHAKARP #B10K902635
* WHEN 'ROUNDO' .
* IF x_doc_item-hvorg = 'RUND'
* AND x_doc_item-tvorg = '0010'
* AND x_doc_item-nettobtr LT 0.
* v_arrear_chrg = v_arrear_chrg + x_doc_item-nettobtr.
* ENDIF.
* End of changes by TMSUDHAKARP #B10K902635
WHEN OTHERS.
ENDCASE.

ENDFORM . " USER_EXIT_DURING_DOC_ITEM


*&---------------------------------------------------------------------*
*& Form USER_EXIT_AFTER_DOC_ITEM
*&---------------------------------------------------------------------*
*& Use this form e.g. to set a new-page command or
*& to verify a sum field
*& This exit is processed *AFTER* a form_level-loop
*&---------------------------------------------------------------------*
FORM user_exit_after_doc_item.
* BREAK-POINT.
********Local Data Declaration*******************************
TYPES: BEGIN OF ty_wgruppe,
wgruppe TYPE egerh-wgruppe,
END OF ty_wgruppe.
TYPES: BEGIN OF ty_eastl,
anlage TYPE eastl-anlage,
logiknr TYPE eastl-logiknr,
bis TYPE eastl-bis,
ab TYPE eastl-ab,
END OF ty_eastl.
DATA: lwa_ettifn TYPE ettifn,
lit_ettifn TYPE STANDARD TABLE OF ettifn.
DATA: t_wgruppe TYPE STANDARD TABLE OF ty_wgruppe,
wa_wgruppe TYPE ty_wgruppe.
DATA: lt_eastl TYPE STANDARD TABLE OF ty_eastl,
ls_eastl TYPE ty_eastl,
lt_ewik TYPE STANDARD TABLE OF ewik,
ls_ewik TYPE ewik,
lt_abey TYPE TABLE OF zfica_abeyance,
ls_abey TYPE zfica_abeyance.
DATA: lv_text(10) TYPE c.
DATA: lv_dt TYPE tplnr,
lt_dt TYPE STANDARD TABLE OF alm_me_installed_equi,
ls_dt TYPE alm_me_installed_equi.
DATA: lt_ett TYPE STANDARD TABLE OF ettifn,
wa_ett LIKE LINE OF lt_ett,
wa_ett1 LIKE LINE OF lt_ett,
lv_indx TYPE sy-tabix.
DATA : lv_reading1 TYPE char10,
yr(2),
1c30(30),
2c30(30),
cnt TYPE sy-index,
wa_bimd1 TYPE zbimd,
lv_dt1 TYPE char10,
lv_dt2 TYPE char10,
cq_date TYPE dats,
dt1 TYPE dats,
lv_txt TYPE pltxt.
DATA: var1 TYPE decfloat16.
DATA: date20 TYPE sy-datum.
RANGES: rang FOR ettifn-operand.
DATA: lt_iettifn TYPE isu_iettifn,
wa_iettifn LIKE LINE OF lt_iettifn.
*+ CT/PT Ratio Logic****************
TYPES: BEGIN OF ty_eastl1,
anlage TYPE eastl-anlage,
logiknr TYPE eastl-logiknr,
bis TYPE eastl-bis,
END OF ty_eastl1.

TYPES: BEGIN OF ty_egerh,


equnr TYPE egerh-equnr,
bis TYPE egerh-bis,
kombinat TYPE egerh-kombinat,
logiknr TYPE egerh-logiknr,
wgruppe TYPE egerh-wgruppe,
END OF ty_egerh.

TYPES: BEGIN OF ty_egers,


equnr TYPE egers-equnr,
zspanns TYPE egers-zspanns,
zspannp TYPE egers-zspannp,
zstromp TYPE egers-zstromp,
zstroms TYPE egers-zstroms,

END OF ty_egers.

TYPES: BEGIN OF ty_ewik,


wgruppe TYPE ewik-wgruppe,
wtyp TYPE ewik-wtyp,
wspann TYPE ewik-wspann,
wstrom TYPE ewik-wstrom,
END OF ty_ewik.
*+chequ dishonour logic
TYPES: BEGIN OF ty_dfkkrh,
vkont TYPE dfkkrh-vkont,
rlbel TYPE dfkkrh-rlbel,
opbel TYPE dfkkrh-opbel,
betrr TYPE dfkkrh-betrr,
checf TYPE dfkkrh-checf,
END OF ty_dfkkrh,

BEGIN OF ty_dfkkrp,
aedat TYPE dfkkrp-aedat,
opbel TYPE dfkkrp-opbel,
END OF ty_dfkkrp,

BEGIN OF ty_dfkzp,
selw1 TYPE dfkkzp-selw1,
budat TYPE dfkkzp-budat,
valut TYPE dfkkzp-valut,
txtvw TYPE dfkkzp-txtvw,
chckn TYPE dfkkzp-chckn,
END OF ty_dfkzp.

DATA: it_dfkkrh TYPE TABLE OF ty_dfkkrh,


wa_dfkkrh TYPE ty_dfkkrh,
it_dfkkrp TYPE TABLE OF ty_dfkkrp,
wa_dfkkrp TYPE ty_dfkkrp,

it_dfkzp TYPE TABLE OF ty_dfkzp,


wa_dfkzp TYPE ty_dfkzp,

it_instal TYPE TABLE OF zinst_plan,


wa_instal TYPE zinst_plan.
*+chequ dishonour logic
DATA: it_eastl TYPE TABLE OF ty_eastl1,
wa_eastl TYPE ty_eastl1.

DATA: it_egerh TYPE TABLE OF ty_egerh,


wa_egerh TYPE ty_egerh.

DATA: it_egerh1 TYPE TABLE OF ty_egerh,


wa_egerh1 TYPE ty_egerh.

DATA: it_egers TYPE TABLE OF ty_egers,


wa_egers TYPE ty_egers.

DATA: it_ewik TYPE TABLE OF ty_ewik,


wa_ewik TYPE ty_ewik.

DATA: it_ewik1 TYPE TABLE OF ty_ewik,


wa_ewik1 TYPE ty_ewik.

DATA: zspanns TYPE egers-zspanns,


zspannp TYPE egers-zspannp,
zstromp TYPE egers-zstromp,
zstroms TYPE egers-zstroms,
wspann TYPE ewik-wspann,
wstrom TYPE ewik-wstrom,
wspann1 TYPE ewik-wspann,
wstrom1 TYPE ewik-wstrom,

zspannsc TYPE char20,


zspannpc TYPE char20,
zstrompc TYPE char20,
zstromsc TYPE char20,
wspannc TYPE char20,
wstromc TYPE char20,
wspann1c TYPE char20,
wstrom1c TYPE char20,
*+ CT/PT Ratio Logic****************
*+ HT feeder name/feeder code**************
wa_euiinstln TYPE euiinstln,
wa_euigrid TYPE euigrid,
wa_egrid TYPE egrid,
wa_egridt TYPE egridt,
wa_fdrtype TYPE zedm_fdrtype,
wa_iflotx TYPE iflotx.
*+ HT feeder name/feeder code**************
*Start of Addition by TMMANISHT on 29th March 2014

DATA : lv_lt_flag TYPE c,


lv_anlage TYPE eablg-anlage,
lv_ab TYPE ettifn-ab.

DATA : it_eabl5 TYPE TABLE OF eabl,


wa_eabl5 TYPE eabl,

it_eablg5 TYPE TABLE OF eablg,


wa_eablg5 TYPE eablg,
lwa_eablg5 TYPE eablg,

it_eablg6 TYPE TABLE OF eablg,


wa_eablg6 TYPE eablg.

DATA : lv_curr_mtr_rdng_date TYPE zbimd-curr_mtr_rdng_date,


lv_pre_mtr_rdng_date TYPE zbimd-pre_mtr_rdng_date,
lv_curr_mtr_rdng_reason TYPE zbimd-curr_mtr_rdng_reason,
lv_pre_mtr_rdng_reason TYPE zbimd-pre_mtr_rdng_reason,
lv_billed_mtr_rdng TYPE zbimd-billed_mtr_rdng,
lv_pre_mtr_rdng TYPE zbimd-pre_mtr_rdng,
lv_curr_mtr_rdng TYPE zbimd-curr_mtr_rdng,
lv_rdng_diff TYPE zbimd-rdng_diff,
lv_billed_consum TYPE zbimd-billed_consum,
lv_total_consum TYPE zbimd-total_consum,
lv_xblnr TYPE dfkkop-xblnr.

DATA : wa_zbimd6 TYPE zbimd.


DATA: temp2 TYPE TABLE OF erchc,
wa_temp2 TYPE erchc.
DATA: lwa_erch TYPE ty_erch,
lv_cnt11 TYPE sy-tabix,
read_text(70),
l_itline TYPE TABLE OF tline,
l_waline TYPE tline,
lv_thead TYPE thead.
*End of Addition by TMMANISHT on 29th March 2014

*Added on 22nd March 2014

TYPES : BEGIN OF ty_dfkkop5,


opbel TYPE dfkkop-opbel,
hvorg TYPE dfkkop-hvorg,
augbl TYPE dfkkop-augbl,
END OF ty_dfkkop5,

BEGIN OF ty_dfkkzp,
budat TYPE dfkkzp-budat,
klaeb TYPE dfkkzp-klaeb,
opbel TYPE dfkkzp-opbel,
ruebl TYPE dfkkzp-ruebl,
ruear TYPE dfkkzp-ruear,
END OF ty_dfkkzp,

BEGIN OF ty_dfkkko,
opbel TYPE dfkkko-opbel,
cpudt TYPE dfkkko-cpudt,
cputm TYPE dfkkko-cputm,
END OF ty_dfkkko.

DATA : wa_dfkkop5 TYPE ty_dfkkop5,


it_dfkkzp TYPE TABLE OF ty_dfkkzp,
wa_dfkkzp TYPE ty_dfkkzp,
it_dfkkko1 TYPE TABLE OF ty_dfkkko,
wa_dfkkko1 TYPE ty_dfkkko,
lv_mf TYPE zbimd-mult_fac.

*Code added by KiranD TR B10K902530


DATA: ls_dt1 TYPE char8,
ls_dt2 TYPE monum,"char8.
ls_mon1(3),
lv_opbel1 TYPE opbel_kk,
lv_index01 TYPE sy-tabix,
lv_result1 TYPE nettobtr,
lv_result2 TYPE nettobtr,
lv_dfix TYPE nettobtr.
*Code ended by KiranD TR B10K902530
*End of Addition on 22nd March 2014
CLEAR: "lv_ta31,lv_ta33,lv_tab,lv_yyy,lv_xxx,
1c30,2c30,lv_reading1,cnt,flag1,yr,cnt,wa_bimd1,
t_erchc22,t_erch_ammend,cq_date,dt1,rang,lt_iettifn,
lv_xblnr,lwa_erch,lv_cnt11,read_text,lv_mf,lv_opbel1,
lv_index01,ls_abey,lt_abey,lv_result2,lv_dfix,
wa_euiinstln,wa_euigrid,wa_egridt,wa_egrid,wa_iflotx,
it_dfkkrh, it_dfkkrp, it_dfkzp.
REFRESH rang.

IF v_anlage IS INITIAL.
v_anlage = v_anlage2.
ENDIF.

IF NOT lt_zbibd-sub_div_code IS INITIAL.


SELECT SINGLE account_no FROM zbi_ubgb_bgb
INTO zextra-ubgb_acc WHERE sub_div = lt_zbibd-sub_div_code.
ENDIF.

IF it_ettifn IS INITIAL AND v_anlage IS NOT INITIAL.


SELECT * FROM ettifn INTO TABLE it_ettifn WHERE anlage = v_anlage.
*Start of Addition by TMMANISHT on 29th March 2014
IF sy-subrc = 0.
it_ettifn3[] = it_ettifn[].
ENDIF.
*End of Addition by TMMANISHT on 29th March 2014
ENDIF.
*************************METER PHASE*************************************
LOOP AT it_ettifn INTO wa_ettifn WHERE ( operand = '1PH' OR operand = '3P
H'
OR operand = '1_PHASE' OR operan
d = '3_PHASE') AND
bis = '99991231' AND
ab LE lt_zbibd-
date_of_invoice AND
string3 = 'X'.
IF wa_ettifn-operand = '1PH' OR wa_ettifn-operand = '1_PHASE'.
lt_zbibd-meter_phase = 'SINGLE PHASE'.
ELSEIF wa_ettifn-operand = '3PH' OR wa_ettifn-operand = '3_PHASE'.
lt_zbibd-meter_phase = 'THREE PHASE'.
ENDIF.
ENDLOOP.

IF lt_zbibd-meter_phase IS INITIAL.
LOOP AT it_ettifn INTO wa_ettifn WHERE ( operand = '1PH' OR operand = '
3PH'
OR operand = '1_PHASE' OR oper
and = '3_PHASE') AND
bis = '99991231' AND
ab LE lt_zbibd-
date_of_invoice.
IF wa_ettifn-operand = '1PH' OR wa_ettifn-operand = '1_PHASE'.
lt_zbibd-meter_phase = 'SINGLE PHASE'.
ELSEIF wa_ettifn-operand = '3PH' OR wa_ettifn-operand = '3_PHASE'.
lt_zbibd-meter_phase = 'THREE PHASE'.
ENDIF.
EXIT.
ENDLOOP.
ENDIF.

IF gv_logiknr IS NOT INITIAL AND lt_zbibd-mru IS NOT INITIAL.


*##################Logic for Route Sequence********************************
*********
CALL FUNCTION 'ZISU_DB_ELWEG_SELECT'
EXPORTING
x_ableinh = lt_zbibd-mru
TABLES
t_elweg = t_elweg
EXCEPTIONS
not_found = 1
system_error = 2
not_qualified = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
SORT t_elweg BY logiknr.
READ TABLE t_elweg INTO wa_elweg WITH KEY logiknr = gv_logiknr BINARY S
EARCH.
IF sy-subrc = 0.
lt_zbibd-route_sequence = sy-tabix.
CONDENSE lt_zbibd-route_sequence.
ENDIF.
CLEAR: t_elweg,wa_elweg.
ENDIF.
*##################End of Logic for Route Sequence

*+ CT/PT Ratio Logic****************


IF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-tariff_type = 'RT'.
CLEAR: it_eastl,it_egerh,it_egers,it_egerh1,
it_ewik,it_ewik1.
IF NOT v_anlage IS INITIAL.
SELECT anlage
logiknr
bis
FROM eastl INTO TABLE it_eastl
WHERE anlage = v_anlage AND
bis = '99991231'.

SORT it_eastl BY logiknr.


IF it_eastl[] IS NOT INITIAL .
SELECT equnr
bis
kombinat
logiknr
FROM egerh INTO TABLE it_egerh
FOR ALL ENTRIES IN it_eastl
WHERE bis = '99991231' AND
kombinat = 'Z' AND
logiknr = it_eastl-logiknr.

ENDIF.

SORT it_egerh BY equnr.


IF it_egerh[] IS NOT INITIAL.

SELECT equnr
zspanns
zspannp
zstromp
zstroms
FROM egers INTO TABLE it_egers
FOR ALL ENTRIES IN it_egerh
WHERE equnr = it_egerh-equnr.

ENDIF.

IF it_eastl[] IS NOT INITIAL .


SELECT equnr
bis
kombinat
logiknr
wgruppe
FROM egerh INTO TABLE it_egerh1
FOR ALL ENTRIES IN it_eastl
WHERE bis = '99991231' AND
kombinat = 'W' AND
logiknr = it_eastl-logiknr.

ENDIF.

SORT it_egerh1 BY wgruppe.


IF it_egerh1[] IS NOT INITIAL.
SELECT wgruppe
wtyp
wspann
wstrom
FROM ewik INTO TABLE it_ewik
FOR ALL ENTRIES IN it_egerh1
WHERE wgruppe = it_egerh1-wgruppe AND
wtyp = '1'.

SORT it_ewik BY wspann wstrom DESCENDING.

ENDIF.
IF it_egerh1[] IS NOT INITIAL.
SELECT wgruppe
wtyp
wspann
wstrom
FROM ewik INTO TABLE it_ewik1
FOR ALL ENTRIES IN it_egerh1
WHERE wgruppe = it_egerh1-wgruppe AND
wtyp = '2'.

SORT it_ewik1 BY wspann wstrom ASCENDING.


ENDIF.

CLEAR:zspanns,zspannp,zstromp,zstroms,
wspann,wstrom,wspann1,wstrom1,
zspannsc,zspannpc,zstrompc,zstromsc,
wspannc,wstromc,wspann1c,wstrom1c.
LOOP AT it_eastl INTO wa_eastl.
"""""""""""""Meter Primary CT/PT Ratio, Meter Secondary CT/PT Rat
io"""""
READ TABLE it_egerh INTO wa_egerh WITH KEY logiknr = wa_eastl-
logiknr.
IF sy-subrc = 0.
READ TABLE it_egers INTO wa_egers WITH KEY equnr = wa_egerh-
equnr.
IF sy-subrc = 0.
zspanns = wa_egers-zspanns.
zspannp = wa_egers-zspannp.
zstromp = wa_egers-zstromp.
zstroms = wa_egers-zstroms.
ENDIF.
ENDIF.

""""""""""""MU Primary CT/PT Ratio"""""""""""""""""""""""""""""""""


""""""
READ TABLE it_egerh1 INTO wa_egerh1 WITH KEY logiknr = wa_eastl-
logiknr.
IF sy-subrc = 0.
LOOP AT it_ewik INTO wa_ewik WHERE wgruppe = wa_egerh1-wgruppe.
IF wa_ewik-wspann IS NOT INITIAL.
wspann = wa_ewik-wspann.
ENDIF.
IF wa_ewik-wstrom IS NOT INITIAL.
wstrom = wa_ewik-wstrom.
ENDIF.
CLEAR: wa_ewik.
ENDLOOP.
ENDIF.

""""""""""""""MU Secondary CT/PT Ratio"""""""""""""""""""""""""""""


""""""
READ TABLE it_egerh1 INTO wa_egerh1 WITH KEY logiknr = wa_eastl-
logiknr.
IF sy-subrc = 0.
LOOP AT it_ewik1 INTO wa_ewik1 WHERE wgruppe = wa_egerh1-wgruppe.
IF wa_ewik1-wspann IS NOT INITIAL.
wspann1 = wa_ewik1-wspann.
ENDIF.
IF wa_ewik1-wstrom IS NOT INITIAL.
wstrom1 = wa_ewik1-wstrom.
ENDIF.
CLEAR: wa_ewik1.
ENDLOOP.
ENDIF.

CLEAR: wa_eastl, wa_egerh, wa_egers,wa_egerh1.


ENDLOOP.

CLEAR lv_num1.
lv_num1 = zspannp .
IF lv_num1 CA '.'.
PERFORM delete_zero.
zspannpc = lv_num1.
ELSE.
zspannpc = zspannp.
CONDENSE zspannpc NO-GAPS.
ENDIF.

CLEAR lv_num1.
lv_num1 = zspanns .
IF lv_num1 CA '.'.
PERFORM delete_zero.
zspannsc = lv_num1.
ELSE.
zspannsc = zspanns.
CONDENSE zspannsc NO-GAPS.
ENDIF.

CLEAR lv_num1.
lv_num1 = zstromp .
IF lv_num1 CA '.'.
PERFORM delete_zero.
zstrompc = lv_num1.
ELSE.
zstrompc = zstromp.
CONDENSE zstrompc NO-GAPS.
ENDIF.

CLEAR lv_num1.
lv_num1 = zstroms .
IF lv_num1 CA '.'.
PERFORM delete_zero.
zstromsc = lv_num1.
ELSE.
zstromsc = zstroms.
CONDENSE zstromsc NO-GAPS.
ENDIF.

CLEAR lv_num1.
lv_num1 = wstrom .
IF lv_num1 CA '.'.
PERFORM delete_zero.
wstromc = lv_num1.
ELSE.
wstromc = wstrom.
CONDENSE wstromc NO-GAPS.
ENDIF.

CLEAR lv_num1.
lv_num1 = wstrom1 .
IF lv_num1 CA '.'.
PERFORM delete_zero.
wstrom1c = lv_num1.
ELSE.
wstrom1c = wstrom1.
CONDENSE wstrom1c NO-GAPS.
ENDIF.

CLEAR lv_num1.
lv_num1 = wspann .
IF lv_num1 CA '.'.
PERFORM delete_zero.
wspannc = lv_num1.
ELSE.
wspannc = wspann.
CONDENSE wspannc NO-GAPS.
ENDIF.

CLEAR lv_num1.
lv_num1 = wspann1 .
IF lv_num1 CA '.'.
PERFORM delete_zero.
wspann1c = lv_num1.
ELSE.
wspann1c = wspann1.
CONDENSE wspann1c NO-GAPS.
ENDIF.
IF zspannpc <> '0' AND zspannsc <> '0'.
CONCATENATE zspannpc zspannsc INTO zextra-mpt SEPARATED BY '/'.
ENDIF.
IF zstrompc <> '0' AND zstromsc <> '0'.
CONCATENATE zstrompc zstromsc INTO zextra-mct SEPARATED BY '/'.
ENDIF.
IF wstromc <> '0' AND wstrom1c <> '0'.
CONCATENATE wstromc wstrom1c INTO zextra-muct SEPARATED BY '/'.
ENDIF.
IF wspannc <> '0' AND wspann1c <> '0'.
CONCATENATE wspannc wspann1c INTO zextra-mupt SEPARATED BY '/'.
ENDIF.
* BREAK-POINT.
****************FeederName/Feeder Type for HT consumers***************
SELECT SINGLE * FROM euiinstln INTO wa_euiinstln
WHERE anlage = v_anlage AND dateto = '99991231'.
IF NOT wa_euiinstln-int_ui IS INITIAL.
SELECT SINGLE * FROM euigrid INTO wa_euigrid
WHERE int_ui = wa_euiinstln-int_ui
AND dateto = '99991231'.
IF NOT wa_euigrid-grid_id IS INITIAL.
SELECT SINGLE * FROM egridt INTO wa_egridt
WHERE grid_id = wa_euigrid-grid_id.
IF NOT wa_egridt-grid_name IS INITIAL.
lt_zbibd-feeder_name = wa_egridt-grid_name."(feeder code)
SELECT SINGLE * FROM zedm_fdrtype INTO wa_fdrtype
WHERE feedercode = wa_egridt-grid_name.
IF wa_fdrtype-feedertype = 'U'.
lt_zbibd-feeder_type = 'Urban'.
ELSEIF wa_fdrtype-feedertype = 'R'.
lt_zbibd-feeder_type = 'Rural'.
ELSEIF wa_fdrtype-feedertype = 'M'.
lt_zbibd-feeder_type = 'Mix'.
ENDIF.
* SELECT SINGLE * FROM iflotx INTO wa_iflotx
* WHERE tplnr = wa_egridt-grid_name.
* IF NOT wa_iflotx-pltxt IS INITIAL.
** lt_zbibd-feeder_text = wa_iflotx-pltxt.
* ENDIF.
ENDIF.
ENDIF.
ENDIF.
****************FeederName/Feeder Type for HT consumers***************
ENDIF.
ENDIF.
*+ CT/PT Ratio Logic****************

*+chequ dishonour logic


IF NOT lt_zbibd-contract_account IS INITIAL.
SELECT vkont rlbel opbel betrr checf
FROM dfkkrh INTO TABLE it_dfkkrh
WHERE vkont = lt_zbibd-contract_account.
IF NOT it_dfkkrh IS INITIAL.
DELETE it_dfkkrh WHERE rlbel IS INITIAL.
ENDIF.
IF NOT it_dfkkrh IS INITIAL.
SELECT aedat opbel FROM dfkkrp
INTO TABLE it_dfkkrp
FOR ALL ENTRIES IN it_dfkkrh
WHERE opbel = it_dfkkrh-opbel.
ENDIF.
IF NOT it_dfkkrp IS INITIAL.
CLEAR cnt.
SORT: it_dfkkrp BY aedat DESCENDING,
it_dfkkrh BY opbel.
LOOP AT it_dfkkrp INTO wa_dfkkrp.
cnt = lt_zbibd-date_of_invoice - wa_dfkkrp-aedat + 1.
IF cnt GT 180.
CLEAR cnt.
CONTINUE.
ELSE.
READ TABLE it_dfkkrh INTO wa_dfkkrh
WITH KEY opbel = wa_dfkkrp-opbel BINARY SEARCH.
IF sy-subrc = 0 AND wa_dfkkrh-checf NE ''.
SELECT selw1 budat valut txtvw chckn
FROM dfkkzp INTO TABLE it_dfkzp
WHERE chckn = wa_dfkkrh-checf.
IF sy-subrc = 0.
CLEAR: lv_dt1,lv_dt2.
READ TABLE it_dfkzp INTO wa_dfkzp
WITH KEY selw1 = wa_dfkkrh-vkont."INDEX 1.
IF sy-subrc = 0.
CONCATENATE wa_dfkzp-valut+6(2) wa_dfkzp-valut+4(2)
wa_dfkzp-valut+0(4) INTO lv_dt1 SEPARATED BY '.'.

CONCATENATE wa_dfkzp-budat+6(2) wa_dfkzp-budat+4(2)


wa_dfkzp-budat+0(4) INTO lv_dt2 SEPARATED BY '.'.
CONDENSE: lv_dt1,lv_dt2,wa_dfkkrh-checf,wa_dfkzp-txtvw.

CONCATENATE 'Your Chq. No' wa_dfkkrh-checf 'dated' lv_dt1


'paid on' lv_dt2 'vide Receipt No.' wa_dfkzp-txtvw
'has got dishonoured. Kindly pay in Cash. Your Cheque wil
l not be accepted.'
INTO zextra-chq_dishonr SEPARATED BY space.
EXIT.
ENDIF.

ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
*+chequ dishonour logic

******************Logic for Rate Category***************


* break bihartest1.
* SELECT SINGLE tariftyp FROM eanlh INTO lt_zbibd-
tariff_type WHERE anlage = v_anlage
* AND bis =
'99991231'.
IF lt_zbibd-tariff_type IS NOT INITIAL.
CALL FUNCTION 'ISU_DB_ETTAT_SINGLE'
EXPORTING
x_mandt = sy-mandt
x_spras = sy-langu
x_tariftyp = lt_zbibd-tariff_type
IMPORTING
y_ttypbez = lt_zbibd-tariff_desc.
ENDIF.

*****************Unmetered Flag**************************************
IF lt_zbibd-tariff_type = 'DS-IU' OR lt_zbibd-tariff_type = 'IAS-IIU' OR
lt_zbibd-tariff_type = 'IAS-IU' OR lt_zbibd-
tariff_type = 'KJ_BPL_RU' OR
lt_zbibd-tariff_type = 'NDS-IU' OR lt_zbibd-tariff_type = 'SS-II'.
lt_zbibd-unmetered = 'X'.
ENDIF.

****************************Installation***********************************
***
lt_zbibd-anlage = v_anlage.
****************Logic for LOAD AND DEMAND**********************************
**********
SELECT belnr FROM erchc INTO TABLE t_erchc22 WHERE opbel = wa_doc_header-
opbel.
IF NOT t_erchc22 IS INITIAL.
SELECT begabrpe endabrpe abrvorg sc_belnr_h FROM erch INTO TABLE t_erch
_ammend
FOR ALL ENTRIES IN t_erchc22 WHERE belnr = t_erchc22-belnr.

LOOP AT t_erch_ammend INTO wa_erch_ammend WHERE abrvorg = '03'.


lt_zbibd-finalbill = 'X'.
ENDLOOP.

SORT t_erch_ammend BY begabrpe ASCENDING.


READ TABLE t_erch_ammend INTO wa_erch_ammend INDEX 1 .
lv_ab_date = wa_erch_ammend-begabrpe.
CLEAR wa_erch_ammend .
*
SORT t_erch_ammend BY endabrpe DESCENDING.
READ TABLE t_erch_ammend INTO wa_erch_ammend INDEX 1 .
lv_end_date = wa_erch_ammend-endabrpe.

******added by KiranD B10K902722*****************************


curr_bis = lv_end_date.
curr_ab = wa_erch_ammend-begabrpe.
******end of addition by KiranD B10K902722*******************

********Bill Month************************************************8
IF lt_zbibd-bill_month IS INITIAL OR
lt_zbibd-bill_month EQ '-'.
CLEAR: lv_month,lv_dt1,lv_dt2.
lv_dt1 = curr_bis+0(4).
lv_dt2 = curr_bis+4(2).
mon_no = lv_dt2.
SELECT SINGLE monam FROM t015m INTO lv_month WHERE monum = lv_dt2
AND spras EQ 'EN'.

CLEAR: lv_dt2,lv_datum,lv_header11.

lv_dt2 = lv_month+0(3).
CONCATENATE lv_dt2 '-' lv_dt1 INTO lv_datum.
lt_zbibd-bill_month = lv_datum.
TRANSLATE lt_zbibd-bill_month TO UPPER CASE.
ENDIF.

CLEAR: tt_ettifn_1.

LOOP AT it_ettifn INTO wa_ettifn WHERE ( operand = 'SNC_LOD_KW' OR


operand = 'CON_LD_HP' OR
operand = 'CTR_DM_KW' OR
operand = 'CTR_DM_KVA' OR
operand = 'RCORDED_DM' ).
* AND ( ab LE lv_ab_date AND bis GE lv_end_date ) .
IF lv_end_date BETWEEN wa_ettifn-ab AND wa_ettifn-bis.
wa_ettifn_1-wert1 = wa_ettifn-wert1.
wa_ettifn_1-ab = wa_ettifn-ab.
wa_ettifn_1-bis = wa_ettifn-bis.
wa_ettifn_1-operand = wa_ettifn-operand.
APPEND wa_ettifn_1 TO tt_ettifn_1.
ENDIF.
ENDLOOP.

IF NOT tt_ettifn_1 IS INITIAL.


SORT tt_ettifn_1 BY bis DESCENDING.
* READ TABLE tt_ettifn_1 INTO wa_ettifn_1 INDEX 1.
LOOP AT tt_ettifn_1 INTO wa_ettifn_1.
IF wa_ettifn_1-operand = 'SNC_LOD_KW'.
lt_zbibd-connect_load_kw = wa_ettifn_1-wert1.
ELSEIF wa_ettifn_1-operand = 'CON_LD_HP'.
lt_zbibd-connect_load_hp = wa_ettifn_1-wert1.
ELSEIF wa_ettifn_1-operand = 'CTR_DM_KW'.
lt_zbibd-contract_demand_kw = wa_ettifn_1-wert1.
ELSEIF wa_ettifn_1-operand = 'CTR_DM_KVA'.
lt_zbibd-contract_demand_kv = wa_ettifn_1-wert1.
ELSEIF wa_ettifn_1-operand = 'RCORDED_DM'.
* lt_zbibd-rcorded_demand = wa_ettifn_1-wert1.
ENDIF.
ENDLOOP.
ENDIF.

CLEAR: tt_ettifn_1,wa_zdm_mmc.",lv_ta11,lv_ta22,lv_ta1,lv_ta2,lv_ta31,l
v_ta33.

************SET LEGACY_ADJ FLAG**************************


LOOP AT it_ettifn INTO wa_ettifn WHERE ( operand = 'LEGACY_ADJ' OR oper
and = 'LEG_ADJ_AP' )
AND ( bis BETWEEN lv_ab_date AND lv_
end_date )
AND string3 = 'X'.
lv_lt_leg_adj = 'X'.
EXIT.
ENDLOOP.
*******************LOGIC FOR METER ARRANGEMENT*****************************
***
LOOP AT it_ettifn INTO wa_ettifn WHERE ( operand = 'LTSM' OR operand =
'HTSM' ) AND
string3 = 'X' AND
( ( ab GE last_date AND ab L
E lv_adatsoll ) OR
bis = '99991231').
CASE wa_ettifn-operand.
WHEN 'LTSM'.
lt_zbibd-meter_arrangement = 'LT Side'.
EXIT.
* WHEN 'HTSM'.
* lt_zbibd-meter_arrangement = 'HT Side'.
* EXIT.
ENDCASE.
ENDLOOP.
IF lt_zbibd-meter_arrangement IS INITIAL.
lt_zbibd-meter_arrangement = 'HT Side'.
ENDIF.

********************SHUNT CAPACITOR INSTALLED******************************


*****
LOOP AT it_ettifn INTO wa_ettifn WHERE operand = 'SHUNT_INST' AND
( ab LE lv_ab_date AND bis GE lv_end_date ).
IF wa_ettifn-wert1 = '1.0000000'.
lt_zbibd-shunt_cap_flag = 'Yes'.
EXIT.
ENDIF.
ENDLOOP.
IF lt_zbibd-shunt_cap_flag IS INITIAL.
lt_zbibd-shunt_cap_flag = 'No'.
ENDIF.
ENDIF.

*****open access Hours***********************************


CLEAR: v_oa_hrs.
LOOP AT it_ettifn INTO wa_ettifn WHERE operand = 'REA_HR_OP' AND
ab GE lv_ab_date.
IF lv_ab_date GE wa_ettifn-ab AND lv_end_date LE wa_ettifn-bis.
v_oa_hrs = wa_ettifn-wert1.
EXIT.
ENDIF.
ENDLOOP.

****************Logic for Consumer Installation MOVEIN-DATE**************


IF NOT v_anlage IS INITIAL.
CLEAR:it_eablg5,wa_eablg5,lv_dt1.
SELECT * FROM eablg INTO TABLE it_eablg5
WHERE anlage = v_anlage
AND ( ablesgr = '06' OR ablesgr = '21').
IF NOT it_eablg5 IS INITIAL.
LOOP AT it_eablg5 INTO wa_eablg5 WHERE ablesgr = '06'.
lv_dt1 = wa_eablg5-adatsoll.
EXIT.
ENDLOOP.
DELETE it_eablg5 WHERE ablesgr = '06' OR adatsoll GT lv_dt1.
SORT it_eablg5 BY adatsoll.
READ TABLE it_eablg5 INTO wa_eablg5 WITH KEY ablesgr = '21'.
IF sy-subrc = 0.
movein_date2 = wa_eablg5-adatsoll.
CLEAR: it_eablg5,wa_eablg5.
ENDIF.
ENDIF.
ENDIF.

IF NOT movein_date1 IS INITIAL.


lt_zbibd-date_of_connection = movein_date1.
ELSE.
lt_zbibd-date_of_connection = movein_date2.
ENDIF.

IF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-tariff_type+0(2) = 'RT'.

ENDIF.
********************************************************

*************lOGIC FOR METER STATUS*******************************


CLEAR: t_eablg,t_eabl,wa_eabl,temp_eabl,temp_eablg.
SELECT SINGLE bill_status FROM zbibd INTO lt_zbibd-bill_status
WHERE invoiceno = lt_zbibd-invoiceno.
IF sy-subrc = 0.
ELSE.

IF NOT lv_adatsoll IS INITIAL.

CALL FUNCTION 'CCM_GO_BACK_MONTHS'


EXPORTING
currdate = lv_adatsoll
backmonths = '003'
IMPORTING
newdate = dt1.

SELECT ablbelnr
adatsoll
FROM eablg INTO TABLE temp_eablg
WHERE anlage = v_anlage
AND ( adatsoll LE lv_adatsoll AND adatsoll GE dt1 ).
LOOP AT temp_eablg INTO wa_eablg WHERE adatsoll = lv_adatsoll.
APPEND wa_eablg TO t_eablg.
ENDLOOP.
IF t_eablg IS NOT INITIAL.
SELECT ablbelnr equnr zwnummer adat
v_zwstand n_zwstand adatsoll ablhinw
aedat
FROM eabl
INTO TABLE temp_eabl
FOR ALL ENTRIES IN temp_eablg
WHERE ablbelnr = temp_eablg-ablbelnr.
* AND zwnummer = '001'.
LOOP AT temp_eabl INTO wa_eabl WHERE adatsoll = lv_adatsoll.
APPEND wa_eabl TO t_eabl.
ENDLOOP.
READ TABLE t_eabl INTO wa_eabl WITH KEY register = '001'.

IF sy-subrc EQ '0'.
IF wa_eabl-ablhinw = 'PA'.
lt_zbibd-meter_status = 'Premise Locked'.
ELSEIF wa_eabl-ablhinw = ''.
lt_zbibd-meter_status = 'Meter Ok'.
ELSE.
SELECT SINGLE tablhinw
FROM te259t
INTO lt_zbibd-meter_status
WHERE ablhinw = wa_eabl-ablhinw
AND spras EQ 'EN'.
ENDIF.
ENDIF.
IF lt_zbibd-meter_status IS NOT INITIAL.
IF wa_eabl-ablhinw EQ 'RR' OR
wa_eabl-ablhinw EQ 'OK' OR
wa_eabl-ablhinw EQ '' OR
wa_eabl-ablhinw EQ 'RO'.
lt_zbibd-bill_status = lv_basis.
ELSE.
* CONCATENATE 'AVERAGE(' zform_str-mrnote ')' INTO lt_zbibd-
bill_status.
* CONDENSE lt_zbibd-bill_status.
**New Logic added for BILL_STATUS by considering ZBMUNT and ZMTCON items
SELECT SINGLE tablhinw FROM te259t INTO zextra-mrnote
WHERE spras = 'EN' AND ablhinw = wa_eabl-ablhinw.
IF lt_zbibd-minimum_unit GT zmtcon AND lt_zbibd-
tariff_type <> 'DS-II' AND
lt_zbibd-
tariff_type <> 'DS-IID' .
CONCATENATE 'MMC(' zextra-mrnote ')' INTO lt_zbibd-
bill_status.
CONDENSE lt_zbibd-bill_status.
ELSEIF lv_basis = 'MMC' AND ( lt_zbibd-
tariff_type = 'KJ_BPL_RM' OR
lt_zbibd-
tariff_type = 'KJ_BPL_U' ).
CONCATENATE 'MMC(' zextra-mrnote ')' INTO lt_zbibd-
bill_status.
CONDENSE lt_zbibd-bill_status.
ELSE.
CONCATENATE 'Average(' zextra-mrnote ')' INTO lt_zbibd-
bill_status.
CONDENSE lt_zbibd-bill_status.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

IF NOT v_sc_belnr1 IS INITIAL.


* SELECT SINGLE ablhinw FROM dberchz2 INTO gv_note
* WHERE belnr = v_sc_belnr1 AND ablhinw <> ''.
ENDIF.

* CALL FUNCTION 'BAPI_MTRREADDOC_GETLIST'


* EXPORTING
* installation = v_anlage
* mrreason = '01'
* mrdocumenttype = '2'
* TABLES
* mrdocumentdata = gt_data.
*
* IF NOT gt_data IS INITIAL.
* SORT gt_data BY mrdateforbilling DESCENDING.
* DELETE gt_data WHERE mrdateforbilling GE lv_adatsoll.
* ENDIF.

IF NOT lv_haus IS INITIAL.


CLEAR zextra-mrnote.
SELECT SINGLE pltxt FROM iflotx INTO zextra-mrnote
WHERE tplnr = lv_haus.
ENDIF.

IF v_z131 <> lt_zbibd-other_charges.


pl_adj = 'X'.
ENDIF.

* IF NOT lt_zbibd-
other_charges IS INITIAL OR NOT lv_lt_leg_adj IS INITIAL.
IF pl_adj = 'X' OR NOT lv_lt_leg_adj IS INITIAL.
* IF v_z131 = lt_zbibd-other_charges.
* ELSE.
CONCATENATE '(PL Adj.)' lv_basis INTO lt_zbibd-
bill_status SEPARATED BY space .
* ENDIF.
ENDIF.
CLEAR lv_basis.

******added by KiranD B10K902722*****************************


* logic added to keep FIX/DEM charges only for current month and
* delete them from if they are from previous month.
* earlier month details shud not be seen in FIX/DEM charges and OTHER Charg
es
*****commented by TMKIRAND on 06.05.2017 for pl adj.*****
IF 1 = 2.
IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-
tariff_type+0(2) <> 'RT'
AND pl_adj = 'X' .
DELETE it_fix WHERE nettobtr IS INITIAL.
IF ( lt_zbibd-tariff_type = 'DS-IID' OR lt_zbibd-tariff_type = 'LTIS-
ID' OR
lt_zbibd-tariff_type = 'LTIS-IID' OR lt_zbibd-tariff_type = 'NDS-
IID' OR
lt_zbibd-tariff_type = 'NDS-IIID' OR lt_zbibd-
tariff_type = 'DSIII-D')
AND curr_ab NE lv_ab_date.
SORT it_fix BY belnr DESCENDING.
READ TABLE it_fix INTO wa_fix INDEX 1.
IF sy-subrc = 0.
IF wa_fix-belnr IS INITIAL.
ELSE.
LOOP AT it_fix INTO wa_fix WHERE bis LT curr_ab AND belnr = ''
AND
( belzart = 'ZFIX' OR belzart = 'ZKW' OR belzart = 'H
P' OR
belzart = 'ZKVA').
lt_zbibd-fixed_demand_chrg = lt_zbibd-fixed_demand_chrg -
wa_fix-nettobtr.
lv_dfix = lv_dfix + wa_fix-nettobtr.
ENDLOOP.
lt_zbibd-other_charges = lt_zbibd-other_charges + lv_dfix.
* LOOP AT it_fix INTO wa_fix WHERE bis LT curr_ab AND belnr NE ''
AND
* ( belzart = 'ZFIX' OR belzart = 'ZKW' OR belzart = 'HP
' OR
* belzart = 'ZKVA').
* lt_zbibd-other_charges = lt_zbibd-other_charges - wa_fix-
nettobtr.
* ENDLOOP.
ENDIF.
ENDIF.
ENDIF.

ENDIF.
ENDIF.
******end of addition by KiranD B10K902722*******************
*****************LOGIC FOR AREA TYPE************************************
SELECT SINGLE anlart FROM eanl INTO lv_area WHERE anlage = v_anlage.
IF lv_area = '1001'.
lt_zbibd-area_type = 'URBAN'.
ELSEIF lv_area = '1002'.
lt_zbibd-area_type = 'RURAL'.
ENDIF.

CALL FUNCTION 'ISU_DB_ETTIFN_SELECT_ACTIVE'


EXPORTING
x_anlage = v_anlage
* x_operand = 'TRANS_BRNT' "commented by Kiran 'MD' case
* X_SAISON =
x_ab = lv_ab_date
x_bis = lv_end_date
IMPORTING
* Y_COUNT =
* Y_ETTIFN =
y_iettifn = lt_iettifn
EXCEPTIONS
not_found = 1
not_qualified = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF NOT lt_iettifn IS INITIAL.
LOOP AT lt_iettifn INTO wa_iettifn WHERE operand = 'GRAMP' OR
operand = 'NAGPAL' OR
operand = 'MUNCOR' OR
operand = 'IAS_RF' OR operand
= 'IAS_UF'.
IF wa_iettifn-operand = 'GRAMP'.
lt_zbibd-area_type = 'Gram Panchayat'.
ELSEIF wa_iettifn-operand = 'NAGPAL'.
lt_zbibd-area_type = 'Nagar Palika'.
ELSEIF wa_iettifn-operand = 'MUNCOR'.
lt_zbibd-area_type = 'Municipal Corp.'.
ELSEIF wa_iettifn-operand = 'IAS_RF'.
lt_zbibd-area_type = 'Rural'.
ELSEIF wa_iettifn-operand = 'IAS_UF'.
lt_zbibd-area_type = 'Urban'.
ENDIF.
EXIT.
ENDLOOP.
ENDIF.
******************METER PROVIDED BY*******************************

* IF lt_zbibd-meter_rent IS INITIAL.
* lt_zbibd-meter_provided_by = 'CONSUMER'.
* ELSE.
* lt_zbibd-meter_provided_by = 'COMPANY'.
* ENDIF.

IF lt_zbibd-meter_rent IS NOT INITIAL OR priceclas IS NOT INITIAL.


* IF lt_iettifn IS NOT INITIAL OR mr_note = 'MD'.
* lt_zbibd-meter_provided_by = ''.
* ELSE.
lt_zbibd-meter_provided_by = 'COMPANY'.
* ENDIF.
ELSE.
lt_zbibd-meter_provided_by = 'CONSUMER'.
ENDIF.

*****************************SUB CONTRACT *********************************


******
**ADDED BY TMKIRAND TR#B10K902123 (ILS:41623)
* IF NOT lt_zbibd-mru IS INITIAL.
** IF lt_zbibd-mru+4(1) NE '4'.
** SELECT SINGLE ablfirma FROM te422 INTO lt_zbibd-
sub_contract WHERE termschl = lt_zbibd-mru.
** ELSE.
* SELECT SINGLE termtext ablfirma FROM te422
* INTO (lt_zbibd-dt_code,lt_zbibd-
sub_contract) WHERE termschl = lt_zbibd-mru.
** ENDIF.
* ENDIF.

IF lt_zbibd-sub_contract IS NOT INITIAL.


SELECT SINGLE description FROM zdm_rsg INTO zextra-sec_name
WHERE pol_rsgid_01 = lt_zbibd-sub_contract.
ENDIF.

**END OF CHANGES BY TMKIRAND TR#B10K902123 (ILS:41623)


***************************METERING UNIT PROVIDED BY(HT DISPLAY)***********
******************
IF NOT lv_bauklas IS INITIAL.
SELECT SINGLE baukltxt FROM te237t INTO lt_zbibd-
meter_unit_prov_by WHERE bauklas = lv_bauklas.
IF lt_zbibd-meter_unit_prov_by+0(4) = 'SBPD' OR lt_zbibd-
meter_unit_prov_by+0(4) = 'NBPD'.
lt_zbibd-meter_unit_prov_by = 'COMPANY'.
ELSE.
lt_zbibd-meter_unit_prov_by = 'CONSUMER'.
ENDIF.
ENDIF.
*******************************TRANSCAPACITY ******************************
********
CLEAR: lv_dt,lt_dt,ls_dt,obj_temp.
SELECT SINGLE zz_dt FROM evbs INTO lv_dt WHERE vstelle = lv_premise.
IF lv_dt IS NOT INITIAL.
CALL FUNCTION 'ALM_ME_FUNCLOC_INSTALLED_EQUI'
EXPORTING
i_funcloc = lv_dt
TABLES
t_funcloc_inst_equis = lt_dt.

READ TABLE lt_dt INTO ls_dt WITH KEY eqart = 'PM00020'.


IF sy-subrc = 0.
CLEAR obj_temp.
obj_temp = ls_dt-equnr.
ENDIF.

REFRESH: lt_alloclist, lt_return1.


IF obj_temp IS NOT INITIAL.
CALL FUNCTION 'BAPI_OBJCL_GETCLASSES'
EXPORTING
objectkey_imp = obj_temp
objecttable_imp = 'EQUI'
classtype_imp = '002'
* READ_VALUATIONS =
* KEYDATE = SY-DATUM
* LANGUAGE = SY-LANGU
TABLES
alloclist = lt_alloclist
* ALLOCVALUESCHAR =
* ALLOCVALUESCURR =
* ALLOCVALUESNUM =
return = lt_return1.

CLEAR: ls_alloclist,lt_class,lt_objectdata,wa_objectdata.
READ TABLE lt_alloclist INTO ls_alloclist INDEX 1.
IF sy-subrc = 0.
CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
EXPORTING
class = ls_alloclist-classnum
classtext = 'X'
classtype = '002'
object = obj_temp
TABLES
t_class = lt_class
t_objectdata = lt_objectdata.

READ TABLE lt_objectdata INTO wa_objectdata WITH KEY


atnam = 'METER_CAPACITY'. "CAPACITY_KVA'.
IF sy-subrc = 0.
lt_zbibd-trans_capicity = wa_objectdata-ausp1.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
**************************TRANSFORMER OWNER********************************
*****
CLEAR: lwa_ettifn,lit_ettifn.
LOOP AT it_ettifn INTO wa_ettifn WHERE operand = 'BSEB_TRANS'
AND ab LE lv_ab_date
AND bis GE lv_end_date.
lwa_ettifn = wa_ettifn.
APPEND lwa_ettifn TO lit_ettifn.
ENDLOOP.
SORT lit_ettifn BY bis DESCENDING.
READ TABLE lit_ettifn INTO lwa_ettifn INDEX 1.
IF sy-subrc = 0.
IF lwa_ettifn-string3 = 'X'.
lt_zbibd-trans_owner = 'Board'.
ELSE.
lt_zbibd-trans_owner = 'Consumer'.
ENDIF.
ELSE.
lt_zbibd-trans_owner = 'Consumer'.
ENDIF.

******************************POWER ON*************************************
*******
CLEAR: lwa_ettifn,lit_ettifn.
LOOP AT it_ettifn INTO wa_ettifn WHERE operand = 'POWER_ON'
AND ab LE lv_ab_date AND bis GE lv_end_date.
lt_zbibd-power_on_hours = wa_ettifn-wert1.
CONDENSE: lt_zbibd-power_on_hours.
ENDLOOP.
********************METERING RATIO*****************************************
*******
CLEAR: lt_eastl,t_wgruppe,wa_wgruppe,lt_ewik,ls_ewik,lv_text.
SELECT anlage logiknr bis ab FROM
eastl INTO TABLE lt_eastl
WHERE anlage = v_anlage
AND bis GE lv_end_date
AND ab LE lv_ab_date.

IF lt_eastl IS NOT INITIAL.


SELECT wgruppe
INTO TABLE t_wgruppe FROM egerh
FOR ALL ENTRIES IN lt_eastl
WHERE logiknr = lt_eastl-logiknr
AND kombinat = 'W'
AND wgruppe NE ' '.
IF sy-subrc = 0.
READ TABLE t_wgruppe INTO wa_wgruppe INDEX 1.
* IF sy-subrc = 0.
* lv_wgruppe = wa_wgruppe-wgruppe.
* ENDIF.
ENDIF.
ENDIF.
IF NOT wa_wgruppe-wgruppe IS INITIAL.
SELECT * FROM ewik INTO TABLE lt_ewik WHERE wgruppe = wa_wgruppe-
wgruppe
AND wtyp IN ('1', '2')
AND wstrom NE 0.
READ TABLE lt_ewik INTO ls_ewik WITH KEY wtyp = '1'.
IF sy-subrc = 0.
lv_text = ls_ewik-wstrom.
dec2 = ls_ewik-wstrom.
SHIFT lv_text LEFT DELETING LEADING ' '.
CONCATENATE lv_text '/' INTO lt_zbibd-metering_unit_ratio.
CLEAR lv_text.
ENDIF.

CLEAR ls_ewik.
READ TABLE lt_ewik INTO ls_ewik WITH KEY wtyp = '2'.
IF sy-subrc = 0.
lv_text = ls_ewik-wstrom.
SHIFT lv_text LEFT DELETING LEADING ' '.
CONCATENATE lt_zbibd-metering_unit_ratio lv_text INTO lt_zbibd-
metering_unit_ratio.
ENDIF.
* IF NOT ls_ewik-wstrom IS INITIAL.
* dec2 = dec2 / ls_ewik-wstrom.
* tot1 = dec2.
* CONDENSE tot1.
* CONCATENATE lt_zbibd-metering_unit_ratio ' = ' tot1 INTO lt_zbibd-
metering_unit_ratio." RESPECTING BLANKS.
* ELSE.
* tot1 = dec2.
* CONCATENATE lt_zbibd-metering_unit_ratio ' = ' tot1 INTO lt_zbibd-
metering_unit_ratio." RESPECTING BLANKS.
* ENDIF.

ENDIF.

************************LAST 11 MONTHS DETAILS LOGIC***********************


********
CLEAR: lt_ett,t_erch,t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1.
* BREAK-POINT.
**changes done on 24.06.2017
IF lt_zbibd-tariff_type+0(2) = 'DS' OR
lt_zbibd-tariff_type+0(3) = 'NDS'.
* rang-low = 'BILED_UNIT'.
* rang-high = 'BILED_UNIT'.
* rang-sign = 'I'.
* rang-option = 'EQ'.
* APPEND rang.
ELSE.
rang-low = 'BILED_UNIT'.
rang-high = 'BILED_UNIT'.
rang-sign = 'E'.
rang-option = 'EQ'.
APPEND rang.
ENDIF.

**end of changes 24.06.2017

IF lt_zbibd-tariff_type+0(2) = 'HT' OR
lt_zbibd-tariff_type+0(2) = 'RT'.
rang-low = 'BILED_KVAH'.
rang-high = 'BILED_KVAH'.
rang-sign = 'E'.
rang-option = 'EQ'.
APPEND rang.
ENDIF.

IF lt_zbibd-tariff_type+0(2) = 'LT'.
rang-low = 'MON_KVAH'.
rang-high = 'MON_KVAH'.
rang-sign = 'E'.
rang-option = 'EQ'.
APPEND rang.
ELSEIF lt_zbibd-tariff_type+0(2) = 'PU'.
rang-low = 'KVAH_CONS'.
rang-high = 'KVAH_CONS'.
rang-sign = 'E'.
rang-option = 'EQ'.
APPEND rang.
ELSEIF lt_zbibd-tariff_type+0(2) = 'DS' OR
lt_zbibd-tariff_type+0(3) = 'NDS'.
rang-low = 'MONTH_CONS'.
rang-high = 'MONTH_CONS'.
rang-sign = 'E'.
rang-option = 'EQ'.
APPEND rang.
ENDIF.

rang-low = 'BILL_BASIS'.
rang-high = 'BILL_BASIS'.
rang-sign = 'E'.
rang-option = 'EQ'.
APPEND rang.

rang-low = 'BILL_CONS'.
rang-high = 'BILL_CONS'.
rang-sign = 'E'.
rang-option = 'EQ'.
APPEND rang.
* ENDIF.

rang-low = 'RCORDED_DM'.
rang-high = 'RCORDED_DM'.
rang-sign = 'E'.
rang-option = 'EQ'.
APPEND rang.

lt_ett = it_ettifn.

IF lt_zbibd-tariff_type+0(2) = 'LT'.
CLEAR lv_wert11.
READ TABLE lt_ett INTO wa_ett WITH KEY operand = 'BILED_UNIT'
bis = '99991231'.
IF sy-subrc = 0.
IF '20170401' BETWEEN wa_ett-ab AND wa_ett-bis.
lv_wert11 = wa_ett-wert1.
READ TABLE lt_ett INTO wa_ett WITH KEY operand = 'MON_KVAH'
ab = wa_ett-ab.
IF sy-subrc = 0.
wa_ett-wert1 = wa_ett-wert1 + lv_wert11.
MODIFY lt_ett FROM wa_ett INDEX sy-tabix.
CLEAR wa_ett.
ENDIF.
ENDIF.
ENDIF.
ELSEIF lt_zbibd-tariff_type+0(2) = 'PU'.
CLEAR lv_wert11.
READ TABLE lt_ett INTO wa_ett WITH KEY operand = 'BILED_UNIT'
bis = '99991231'.
IF sy-subrc = 0.
IF '20170401' BETWEEN wa_ett-ab AND wa_ett-bis.
lv_wert11 = wa_ett-wert1.
READ TABLE lt_ett INTO wa_ett WITH KEY operand = 'KVAH_CONS'
ab = wa_ett-ab.
IF sy-subrc = 0.
wa_ett-wert1 = wa_ett-wert1 + lv_wert11.
MODIFY lt_ett FROM wa_ett INDEX sy-tabix.
CLEAR wa_ett.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

DELETE lt_ett WHERE bis = '99991231'.


SORT lt_ett BY operand ASCENDING bis DESCENDING.
* DELETE lt_ett WHERE operand NE 'MONTH_CONS'.
DELETE lt_ett WHERE operand IN rang.
DELETE lt_ett WHERE bis GE lv_end_date .
DELETE lt_ett WHERE ab GE curr_ab. " lv_ab_date.
*above commented (B10K902919) lv_ab_date because for Legacy PL to OK cases
, we get
*multiple BELNR's and because of which SAP BIL_UNITS are been deleted
READ TABLE lt_ett INTO wa_ett WITH KEY operand = 'RCORDED_DM'.
IF sy-subrc = 0.
LOOP AT lt_ett INTO wa_ett WHERE operand = 'RCORDED_DM'.
wa_ett-operand = 'ABCD'.
MODIFY lt_ett FROM wa_ett.
ENDLOOP.
ENDIF.

* IF lt_zbibd-meter_status = 'Premise Locked'.


IF lt_zbibd-tariff_type+0(2) = 'HT' OR
lt_zbibd-tariff_type+0(2) = 'RT'.
DELETE lt_ett WHERE operand = 'BILED_UNIT' AND
ab GE '20160401'.
DELETE lt_ett WHERE operand = 'BILED_KVAH' AND
ab LT '20160401'.
ENDIF.
IF lt_zbibd-tariff_type+0(2) = 'DS' OR
lt_zbibd-tariff_type+0(3) = 'NDS'.

ELSE.
LOOP AT lt_ett INTO wa_ett WHERE operand = 'BILED_UNIT' OR
operand = 'BILED_KVAH' OR
operand = 'MON_KVAH' OR
operand = 'KVAH_CONS'.
wa_ett-operand = 'MONTH_CONS'.
MODIFY lt_ett FROM wa_ett.
ENDLOOP.
ENDIF.
SORT lt_ett BY operand DESCENDING bis DESCENDING.

IF NOT lt_ett IS INITIAL.


SELECT belnr adatsoll sc_belnr_h billing_period FROM erch INTO TABLE t_
erch
FOR ALL ENTRIES IN lt_ett WHERE belnr = lt_ett-belnr.
SORT t_erch BY adatsoll DESCENDING.
ENDIF.
DELETE temp_eabl WHERE adatsoll GE lv_adatsoll OR register NE '006'.
SORT temp_eabl BY adat DESCENDING.

CLEAR: temp2,wa_temp2.
CALL FUNCTION 'ISU_DB_ERCHC_SELECT_OPBEL'
EXPORTING
x_opbel = lt_zbibd-invoiceno
TABLES
t_erchc = temp2
EXCEPTIONS
not_found = 1
system_error = 2
not_qualified = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

IF NOT temp2 IS INITIAL.


IF pl_adj IS INITIAL.
READ TABLE temp2 INTO wa_temp2 WITH KEY spcanc = 'X'.
IF sy-subrc = 0.
ELSE.
LOOP AT t_erch INTO wa_erch WHERE sc_belnr_h <> ''.
CLEAR: wa_erch-sc_belnr_h.
MODIFY t_erch FROM wa_erch INDEX sy-tabix.
ENDLOOP.
ENDIF.
ELSE.
READ TABLE t_erch INTO wa_erch WITH KEY sc_belnr_h = ''.
IF sy-subrc = 0.
lv_cnt11 = sy-tabix.
LOOP AT t_erch INTO wa_erch FROM lv_cnt11.
IF wa_erch-sc_belnr_h IS NOT INITIAL.
CLEAR: wa_erch-sc_belnr_h.
MODIFY t_erch FROM wa_erch INDEX sy-tabix.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.

*******************For FIRST MONTH***************************************


READ TABLE t_erch INTO wa_erch INDEX 1.
IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.

SORT t_dberchz22 BY belnr DESCENDING.


CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 1.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.
IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.
ELSEIF wa_ett-operand = 'BILL_CONS'.
READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'ABCD'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
lt_zbibd-rec_dem1 = wa_ett1-wert1.
CONDENSE lt_zbibd-rec_dem1.
CLEAR: dummy1.
SPLIT lt_zbibd-rec_dem1 AT '.' INTO lt_zbibd-rec_dem1 dummy1.
* CONCATENATE lt_zbibd-rec_dem1 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem1.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.

ENDIF.
ENDIF.
IF lv_units1 IS NOT INITIAL.
IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.
CALL FUNCTION 'ISP_GET_MONTH_NAME'
EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

********previous month recodred Demand******************


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'ABCD'
bis = wa_ett-bis.
IF sy-subrc = 0.
lv_indx = sy-tabix.
lt_zbibd-rec_dem1 = wa_ett1-wert1.
CONDENSE lt_zbibd-rec_dem1.
CLEAR: dummy1.
SPLIT lt_zbibd-rec_dem1 AT '.' INTO lt_zbibd-rec_dem1 dummy1.
* CONCATENATE lt_zbibd-rec_dem1 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem1.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
IF 1 = 2.
* IF lt_zbibd-rec_dem1 IS INITIAL.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
lt_zbibd-rec_dem1 = val2.
CONDENSE lt_zbibd-rec_dem1.
SPLIT lt_zbibd-rec_dem1 AT '.' INTO lt_zbibd-rec_dem1 dummy1.
* CONCATENATE lt_zbibd-rec_dem1 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem1.
ENDIF.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month1 = lv_tex1.
* IF NOT lv_wert11 IS INITIAL.
lt_zbibd-unit_consum1 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum1.
SPLIT lt_zbibd-unit_consum1 AT '.' INTO lt_zbibd-unit_consum1 dummy1.
* ELSE.
* lt_zbibd-unit_consum1 = ''.
* ENDIF.
IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.
CONCATENATE lt_zbibd-unit_consum1 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum1.
ENDIF.
lt_zbibd-bill_basis1 = lv_units1.
CONDENSE: lt_zbibd-unit_consum1.
* ENDIF.
**************************For SECOND MONTH*********************************
****
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 2.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.

SORT t_dberchz22 BY belnr DESCENDING.


CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 2.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.

READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.

ELSEIF wa_ett-operand = 'BILL_CONS'.


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'ABCD'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
lt_zbibd-rec_dem2 = wa_ett1-wert1.
CONDENSE lt_zbibd-rec_dem2.
CLEAR: dummy1.
SPLIT lt_zbibd-rec_dem2 AT '.' INTO lt_zbibd-rec_dem2 dummy1.
* CONCATENATE lt_zbibd-rec_dem2 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem2.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).

IF wa_erch-sc_belnr_h IS NOT INITIAL .


LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.
CALL FUNCTION 'ISP_GET_MONTH_NAME'
EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************2nd previous month recorded demand*********************


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'ABCD'
bis = wa_ett-bis.
IF sy-subrc = 0.
lv_indx = sy-tabix.
lt_zbibd-rec_dem2 = wa_ett1-wert1.
CONDENSE lt_zbibd-rec_dem2.
CLEAR: dummy1.
SPLIT lt_zbibd-rec_dem2 AT '.' INTO lt_zbibd-rec_dem2 dummy1.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
IF 1 = 2.
CLEAR: dem1,val2.
* IF lt_zbibd-rec_dem2 IS INITIAL.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2
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 <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem2 = val2.
CONDENSE lt_zbibd-rec_dem2.
SPLIT lt_zbibd-rec_dem2 AT '.' INTO lt_zbibd-rec_dem2 dummy1.
* CONCATENATE lt_zbibd-rec_dem2 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem2.
ENDIF.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month2 = lv_tex1.
* IF NOT lv_wert11 IS INITIAL.
lt_zbibd-unit_consum2 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum2.
SPLIT lt_zbibd-unit_consum2 AT '.' INTO lt_zbibd-unit_consum2 dummy1.
IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.
CONCATENATE lt_zbibd-unit_consum2 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum2.
ENDIF.
lt_zbibd-bill_basis2 = lv_units1.
CONDENSE:lt_zbibd-unit_consum2.
* ENDIF.
**************************For THIRD MONTH**********************************
***
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 3.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.

SORT t_dberchz22 BY belnr DESCENDING.


CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 3.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.

ELSEIF wa_ett-operand = 'BILL_CONS'.


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.

READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'ABCD'.


IF sy-subrc = 0.
lv_indx = sy-tabix.
lt_zbibd-rec_dem3 = wa_ett1-wert1.
CONDENSE lt_zbibd-rec_dem3.
CLEAR: dummy1.
SPLIT lt_zbibd-rec_dem3 AT '.' INTO lt_zbibd-rec_dem3 dummy1.
* CONCATENATE lt_zbibd-rec_dem3 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem3.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.

CALL FUNCTION 'ISP_GET_MONTH_NAME'


EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************3rd previous month recorded demand*********************


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'ABCD'
bis = wa_ett-bis.
IF sy-subrc = 0.
lv_indx = sy-tabix.
lt_zbibd-rec_dem3 = wa_ett1-wert1.
CONDENSE lt_zbibd-rec_dem3.
CLEAR: dummy1.
SPLIT lt_zbibd-rec_dem3 AT '.' INTO lt_zbibd-rec_dem3 dummy1.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
IF 1 = 2.
CLEAR: dem1,val2.
* IF lt_zbibd-rec_dem3 IS INITIAL.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem3 = val2.
CONDENSE lt_zbibd-rec_dem3.
SPLIT lt_zbibd-rec_dem3 AT '.' INTO lt_zbibd-rec_dem3 dummy1.
* CONCATENATE lt_zbibd-rec_dem3 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem3.
ENDIF.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month3 = lv_tex1.
* IF NOT lv_wert11 IS INITIAL.
lt_zbibd-unit_consum3 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum3.
SPLIT lt_zbibd-unit_consum3 AT '.' INTO lt_zbibd-unit_consum3 dummy1.

IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.


CONCATENATE lt_zbibd-unit_consum3 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum3.
ENDIF.
lt_zbibd-bill_basis3 = lv_units1.
* ENDIF.
CONDENSE:lt_zbibd-unit_consum3.
* BREAK-POINT.
**************************For FOURTH MONTH*********************************
****
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 4.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.

SORT t_dberchz22 BY belnr DESCENDING.


CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 4.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.

ELSEIF wa_ett-operand = 'BILL_CONS'.


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.

CALL FUNCTION 'ISP_GET_MONTH_NAME'


EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************4TH previous month recorded demand*********************


CLEAR: dem1,val2.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 =
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem4 = val2.
CONDENSE lt_zbibd-rec_dem4.
SPLIT lt_zbibd-rec_dem4 AT '.' INTO lt_zbibd-rec_dem4 dummy1.
CONCATENATE lt_zbibd-rec_dem4 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem4.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month4 = lv_tex1.
* IF NOT lv_wert11 IS INITIAL.
lt_zbibd-unit_consum4 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum4.
SPLIT lt_zbibd-unit_consum4 AT '.' INTO lt_zbibd-unit_consum4 dummy1.
* ELSE.
* lt_zbibd-unit_consum4 = ''.
* ENDIF.
IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.
CONCATENATE lt_zbibd-unit_consum4 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum4.
ENDIF.
lt_zbibd-bill_basis4 = lv_units1.
* ENDIF.
CONDENSE: lt_zbibd-unit_consum4.

**************************For FIFTH MONTH**********************************


***
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 5.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.

SORT t_dberchz22 BY belnr DESCENDING.


CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 5.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.

ELSEIF wa_ett-operand = 'BILL_CONS'.


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.
CALL FUNCTION 'ISP_GET_MONTH_NAME'
EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************5TH previous month recorded demand*********************


CLEAR: dem1,val2.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 =
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem5 = val2.
CONDENSE lt_zbibd-rec_dem5.
SPLIT lt_zbibd-rec_dem5 AT '.' INTO lt_zbibd-rec_dem5 dummy1.
CONCATENATE lt_zbibd-rec_dem5 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem5.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month5 = lv_tex1.
* IF NOT lv_wert11 IS INITIAL.
lt_zbibd-unit_consum5 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum5.
SPLIT lt_zbibd-unit_consum5 AT '.' INTO lt_zbibd-unit_consum5 dummy1.
* ELSE.
* lt_zbibd-unit_consum5 = ''.
* ENDIF.
IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.
CONCATENATE lt_zbibd-unit_consum5 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum5.
ENDIF.
lt_zbibd-bill_basis5 = lv_units1.
* ENDIF.
CONDENSE: lt_zbibd-unit_consum5.

**************************For SIXTH MONTH**********************************


***
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 6.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.
SORT t_dberchz22 BY belnr DESCENDING.
CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 6.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.

ELSEIF wa_ett-operand = 'BILL_CONS'.


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.

CALL FUNCTION 'ISP_GET_MONTH_NAME'


EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************6TH previous month recorded demand*********************


CLEAR: dem1,val2.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 =
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem6 = val2.
CONDENSE lt_zbibd-rec_dem6.
SPLIT lt_zbibd-rec_dem6 AT '.' INTO lt_zbibd-rec_dem6 dummy1.
CONCATENATE lt_zbibd-rec_dem6 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem6.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month6 = lv_tex1.
* IF NOT lv_wert11 IS INITIAL.
lt_zbibd-unit_consum6 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum6.
SPLIT lt_zbibd-unit_consum6 AT '.' INTO lt_zbibd-unit_consum6 dummy1.

IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.


CONCATENATE lt_zbibd-unit_consum6 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum6.
ENDIF.
lt_zbibd-bill_basis6 = lv_units1.
* ENDIF.
CONDENSE: lt_zbibd-unit_consum6.

**************************For SEVENTH MONTH********************************


*****
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 7.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.

SORT t_dberchz22 BY belnr DESCENDING.


CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 7.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.
ELSEIF wa_ett-operand = 'BILL_CONS'.
READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.

CALL FUNCTION 'ISP_GET_MONTH_NAME'


EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************7TH previous month recorded demand*********************


CLEAR: dem1,val2.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 =
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem7 = val2.
CONDENSE lt_zbibd-rec_dem7.
SPLIT lt_zbibd-rec_dem7 AT '.' INTO lt_zbibd-rec_dem7 dummy1.
CONCATENATE lt_zbibd-rec_dem7 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem7.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month7 = lv_tex1.
lt_zbibd-unit_consum7 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum7.
SPLIT lt_zbibd-unit_consum7 AT '.' INTO lt_zbibd-unit_consum7 dummy1.

IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.


CONCATENATE lt_zbibd-unit_consum7 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum7.
ENDIF.
lt_zbibd-bill_basis7 = lv_units1.
* ENDIF.
CONDENSE: lt_zbibd-unit_consum7.

**************************For EIGTH MONTH**********************************


***
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 8.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.

SORT t_dberchz22 BY belnr DESCENDING.


CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 8.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.

ELSEIF wa_ett-operand = 'BILL_CONS'.


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.

CALL FUNCTION 'ISP_GET_MONTH_NAME'


EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************8TH previous month recorded demand*********************


CLEAR: dem1,val2.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 =
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem8 = val2.
CONDENSE lt_zbibd-rec_dem8.
SPLIT lt_zbibd-rec_dem8 AT '.' INTO lt_zbibd-rec_dem8 dummy1.
CONCATENATE lt_zbibd-rec_dem8 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem8.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month8 = lv_tex1.
* IF NOT lv_wert11 IS INITIAL.
lt_zbibd-unit_consum8 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum8.
SPLIT lt_zbibd-unit_consum8 AT '.' INTO lt_zbibd-unit_consum8 dummy1.

IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.


CONCATENATE lt_zbibd-unit_consum8 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum8.
ENDIF.
lt_zbibd-bill_basis8 = lv_units1.
* ENDIF.
CONDENSE: lt_zbibd-unit_consum8.

**************************For NINTH MONTH**********************************


***
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 9.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.

SORT t_dberchz22 BY belnr DESCENDING.


CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 9.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.

ELSEIF wa_ett-operand = 'BILL_CONS'.


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.

CALL FUNCTION 'ISP_GET_MONTH_NAME'


EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************9TH previous month recorded demand*********************


CLEAR: dem1,val2.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 =
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem9 = val2.
CONDENSE lt_zbibd-rec_dem9.
SPLIT lt_zbibd-rec_dem9 AT '.' INTO lt_zbibd-rec_dem9 dummy1.
CONCATENATE lt_zbibd-rec_dem9 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem9.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month9 = lv_tex1.
* IF NOT lv_wert11 IS INITIAL.
lt_zbibd-unit_consum9 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum9.
SPLIT lt_zbibd-unit_consum9 AT '.' INTO lt_zbibd-unit_consum9 dummy1.

IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.


CONCATENATE lt_zbibd-unit_consum9 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum9.
ENDIF.
lt_zbibd-bill_basis9 = lv_units1.
* ENDIF.
CONDENSE: lt_zbibd-unit_consum9.

**************************For TENTH MONTH**********************************


***
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 10.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.
SORT t_dberchz22 BY belnr DESCENDING.
CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 10.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.

ELSEIF wa_ett-operand = 'BILL_CONS'.


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.

CALL FUNCTION 'ISP_GET_MONTH_NAME'


EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************10TH previous month recorded demand*********************


CLEAR: dem1,val2.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 =
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem10 = val2.
CONDENSE lt_zbibd-rec_dem10.
SPLIT lt_zbibd-rec_dem10 AT '.' INTO lt_zbibd-rec_dem10 dummy1.
CONCATENATE lt_zbibd-rec_dem10 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem10.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month10 = lv_tex1.

lt_zbibd-unit_consum10 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum10.
SPLIT lt_zbibd-unit_consum10 AT '.' INTO lt_zbibd-unit_consum10 dummy1.
* ELSE.
* lt_zbibd-unit_consum10 = ''.
* ENDIF.
IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.
CONCATENATE lt_zbibd-unit_consum10 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum10.
ENDIF.
lt_zbibd-bill_basis10 = lv_units1.
* ENDIF.
CONDENSE: lt_zbibd-unit_consum10.

**************************For ELEVENTH MONTH*******************************


******
CLEAR: t_dberchz22,yr,lv_tex1,lv_date1,
lv_wert11,lv_units1,1c30,2c30,wa_erch.

READ TABLE t_erch INTO wa_erch INDEX 11.


IF sy-subrc = 0.
IF wa_erch-sc_belnr_h IS NOT INITIAL .
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-sc_belnr_h.
ELSEIF lv_lt_leg_adj = 'X'.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-
belnr AND zwnummer EQ '001' AND ( ablhinw = 'PA' OR ablhinw = 'OK').
ELSE.
SELECT belnr ablhinw v_zwstdiff
FROM dberchz2 INTO TABLE t_dberchz22
WHERE belnr = wa_erch-belnr AND zwnummer EQ '001'.
ENDIF.

SORT t_dberchz22 BY belnr DESCENDING.


CONCATENATE wa_erch-month+0(4) wa_erch-month+5(2)
'15' INTO lv_date1.
ENDIF.
READ TABLE lt_ett INTO wa_ett INDEX 11.
IF sy-subrc = 0.
IF wa_ett-operand = 'MONTH_CONS'.
READ TABLE t_dberchz22 INTO wa_dberchz22 INDEX 1.

IF sy-subrc EQ 0.
lv_units1 = wa_dberchz22-ablhinw.
ENDIF.

ELSEIF wa_ett-operand = 'BILL_CONS'.


READ TABLE lt_ett INTO wa_ett1 WITH KEY operand = 'BILL_BASIS'.
IF sy-subrc = 0.
lv_indx = sy-tabix.
IF wa_ett1-wert1 = 1.
lv_units1 = 'ACTUAL'.
ELSEIF wa_ett1-wert1 = 2.
lv_units1 = 'MMC'.
ELSE.
lv_units1 = 'AVERAGE'.
ENDIF.
DELETE lt_ett INDEX lv_indx.
CLEAR lv_indx.
ENDIF.
ENDIF.
ENDIF.

IF lv_units1 IS NOT INITIAL.


IF lv_date1 IS INITIAL.
lv_date1 = wa_ett-bis.
ENDIF.
yr = lv_date1+2(2).
IF wa_erch-sc_belnr_h IS NOT INITIAL .
LOOP AT t_dberchz22 INTO wa_dberchz22 .
lv_wert11 = lv_wert11 + wa_dberchz22-v_zwstdiff .
ENDLOOP.
ELSE.
lv_wert11 = wa_ett-wert1.
ENDIF.

CALL FUNCTION 'ISP_GET_MONTH_NAME'


EXPORTING
date = lv_date1
language = 'E'
* MONTH_NUMBER = '00'
IMPORTING
* LANGU_BACK =
longtext = lv_tex1
* shorttext =
EXCEPTIONS
calendar_id = 1
date_error = 2
not_found = 3
wrong_input = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

***************11TH previous month recorded demand*********************


CLEAR: dem1,val2.
READ TABLE temp_eabl INTO wa_eabl WITH KEY adat = wa_ett-bis.
IF sy-subrc = 0.
dem1 = wa_eabl-read1.
CALL FUNCTION 'ISU_CONSUMPTION_DETERMINE'
EXPORTING
* X_GERAET =
x_equnr = lt_zbibd-meter_no
x_zwnummer = '006'
x_adat = wa_ett-bis
x_i_zwstndab = dem1
IMPORTING
y_i_abrmenge = val2 "lt_zbibd-rec_dem1
* Y_V_ABRMENGE =
* Y_N_ABRMENGE =
* Y_SVAL_USED =
* YT_ITHG =
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 =
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF val2 IS NOT INITIAL.
CLEAR dummy1.
lt_zbibd-rec_dem11 = val2.
CONDENSE lt_zbibd-rec_dem11.
SPLIT lt_zbibd-rec_dem11 AT '.' INTO lt_zbibd-rec_dem11 dummy1.
CONCATENATE lt_zbibd-rec_dem11 '.' dummy1+0(2) INTO lt_zbibd-
rec_dem11.
ENDIF.
ENDIF.

ENDIF.
IF yr IS NOT INITIAL.
lv_tex1 = lv_tex1+0(3).
CONCATENATE lv_tex1 '-' yr INTO lv_tex1.
ENDIF.

lt_zbibd-bill_month11 = lv_tex1.
* IF NOT lv_wert11 IS INITIAL.
lt_zbibd-unit_consum11 = lv_wert11.
CONDENSE: lt_zbibd-unit_consum11.
SPLIT lt_zbibd-unit_consum11 AT '.' INTO lt_zbibd-unit_consum11 dummy1.

IF NOT lv_units1 IS INITIAL AND wa_ett-operand NE 'BILL_CONS'.


CONCATENATE lt_zbibd-unit_consum11 '(' lv_units1 ')' INTO lt_zbibd-
unit_consum11.
ENDIF.
lt_zbibd-bill_basis11 = lv_units1.
* ENDIF.
CONDENSE: lt_zbibd-unit_consum11.

************************PREVIOUS PAYMENT DETAILS***************************


*****
CLEAR: it_payment,lv_rashi,lv_receipt,lv_receipt_date,it_payment1.
* IF last_date IS NOT INITIAL.
DATA: lv_txt1 TYPE dfkkzp-txtvw,
lv_cnt1 TYPE p.

CLEAR: lv_rashi.
*
* CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
* EXPORTING
* date = wa_doc_header-budat
* days = lv_days11
* months = lv_months11
* signum = '-'
* years = lv_years11
* IMPORTING
* calc_date = lv_date_2.

lv_cnt1 = 50.
CALL FUNCTION 'FKK_READ_LAST_PAYMENTS'
EXPORTING
i_vkont = lt_zbibd-contract_account
i_count = lv_cnt1
* i_exclude_returns = 'X' "commented by TMKIRAND
TABLES
t_payments = it_payment.

****added by TMKIRAND***********************
SORT it_payment BY cpudt DESCENDING cputm DESCENDING.
DELETE it_payment WHERE cpudt GT wa_doc_header-erdat.

LOOP AT it_payment INTO wa_it_payment WHERE cpudt = wa_doc_header-erdat.


IF wa_it_payment-cputm GT wa_doc_header-creation_time.
DELETE it_payment INDEX sy-tabix.
ENDIF.
ENDLOOP.
*****ended by TMKIRAND*************************

SORT it_payment BY budat DESCENDING .


* it_payment1 = it_payment. " commented by Kiran on 06.08.15

*Start of Addition on 22nd March 2014


CLEAR : wa_it_payment,
wa_dfkkop5,
wa_dfkkzp,wa_dfkkzp,
it_dfkkzp,it_dfkkko1.

IF NOT it_payment[] IS INITIAL.


SELECT budat
klaeb
opbel
ruebl
ruear
FROM dfkkzp
INTO TABLE it_dfkkzp
FOR ALL ENTRIES IN it_payment
WHERE opbel = it_payment-opbel.

SELECT budat
klaeb
opbel
ruebl
ruear
FROM dfkkzp
APPENDING TABLE it_dfkkzp
FOR ALL ENTRIES IN it_payment
WHERE klaeb = it_payment-opbel.
ENDIF.

SORT it_dfkkzp BY budat DESCENDING.


LOOP AT it_dfkkzp INTO wa_dfkkzp.
IF wa_dfkkzp-ruear IS NOT INITIAL.
SELECT SINGLE opbel cpudt cputm FROM dfkkko
INTO wa_dfkkko1
WHERE opbel = wa_dfkkzp-ruebl.
IF wa_dfkkko1-cpudt GT wa_doc_header-erdat.
lv_opbel1 = wa_dfkkzp-opbel.
CLEAR: lv_index01.
READ TABLE it_payment INTO wa_it_payment
WITH KEY opbel = wa_dfkkzp-opbel.
IF sy-subrc = 0.
lv_index01 = sy-tabix.
wa_it_payment-bukrs = 'X'.
MODIFY it_payment INDEX lv_index01 FROM wa_it_payment
TRANSPORTING bukrs.
ELSE.
READ TABLE it_payment INTO wa_it_payment
WITH KEY opbel = wa_dfkkzp-klaeb.
IF sy-subrc = 0.
lv_index01 = sy-tabix.
wa_it_payment-bukrs = 'X'.
MODIFY it_payment INDEX lv_index01 FROM wa_it_payment
TRANSPORTING bukrs.
ENDIF.
ENDIF.

ELSEIF wa_dfkkko1-cpudt EQ wa_doc_header-erdat.


IF wa_dfkkko1-cputm GT wa_doc_header-creation_time.
lv_opbel1 = wa_dfkkzp-opbel.
CLEAR: lv_index01.
READ TABLE it_payment INTO wa_it_payment
WITH KEY opbel = wa_dfkkzp-opbel.
IF sy-subrc = 0.
lv_index01 = sy-tabix.
wa_it_payment-bukrs = 'X'.
MODIFY it_payment INDEX lv_index01 FROM wa_it_payment
TRANSPORTING bukrs.
ELSE.
READ TABLE it_payment INTO wa_it_payment
WITH KEY opbel = wa_dfkkzp-klaeb.
IF sy-subrc = 0.
lv_index01 = sy-tabix.
wa_it_payment-bukrs = 'X'.
MODIFY it_payment INDEX lv_index01 FROM wa_it_payment
TRANSPORTING bukrs.
ENDIF.
ENDIF.
ELSE.
DELETE it_payment WHERE opbel = wa_dfkkzp-opbel.
ENDIF.
ELSE.
DELETE it_payment WHERE opbel = wa_dfkkzp-opbel.
ENDIF.
ELSE.
lv_opbel1 = wa_dfkkzp-opbel.
CLEAR: lv_index01.
READ TABLE it_payment INTO wa_it_payment
WITH KEY opbel = wa_dfkkzp-opbel.
IF sy-subrc = 0.
lv_index01 = sy-tabix.
wa_it_payment-bukrs = 'X'.
MODIFY it_payment INDEX lv_index01 FROM wa_it_payment
TRANSPORTING bukrs.
ELSE.
READ TABLE it_payment INTO wa_it_payment
WITH KEY opbel = wa_dfkkzp-klaeb.
IF sy-subrc = 0.
lv_index01 = sy-tabix.
wa_it_payment-bukrs = 'X'.
MODIFY it_payment INDEX lv_index01 FROM wa_it_payment
TRANSPORTING bukrs.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.

DELETE it_payment WHERE bukrs NE 'X'.


* READ TABLE it_payment INTO wa_it_payment
* WITH KEY opbel = wa_dfkkzp-opbel.

* IF sy-subrc EQ 0.
LOOP AT it_payment INTO wa_it_payment.
* READ TABLE it_dfkkop6 INTO wa_dfkkop6 WITH KEY augbl = wa_it_payment
-opbel.
* IF sy-subrc EQ 0.
APPEND wa_it_payment TO it_payment1. "added by Kiran on 06.08.15
IF last_date IS INITIAL.
IF wa_it_payment-budat LE wa_doc_header-budat.
lv_rashi = lv_rashi + wa_it_payment-betrw.
ELSE.
DELETE it_payment.
ENDIF.
ELSEIF ( wa_it_payment-budat GT last_date AND
wa_it_payment-budat LE wa_doc_header-budat ).
lv_rashi = lv_rashi + wa_it_payment-betrw.
ELSE.
DELETE it_payment.
ENDIF.
* ELSE.
* DELETE it_payment.
* ENDIF.
* CLEAR wa_dfkkop6.
ENDLOOP.

* ENDIF.

*End of Addition on 22nd March 2014


***********TO UPDATE LAST PAYMENT AMOUNT IN ZBIBD TABLE
IF lv_rashi IS NOT INITIAL.
READ TABLE it_payment INTO wa_it_payment INDEX 1.
IF sy-subrc = 0.
lv_receipt = wa_it_payment-opbel.
lv_receipt_date = wa_it_payment-budat.

lt_zbibd-last_pymt_amt = lv_rashi.
lt_zbibd-last_pymt_recpt_no = lv_receipt.
lt_zbibd-last_pymt_dt = lv_receipt_date.

lt_zbibd-pymt_amt = wa_it_payment-betrw.
lt_zbibd-pymt_recpt_no = lv_receipt.
lt_zbibd-pymt_dt = lv_receipt_date.

IF NOT lt_zbibd-pymt_recpt_no IS INITIAL.


CLEAR: lv_txt1.
SELECT SINGLE txtvw FROM dfkkzp INTO lv_txt1
WHERE opbel = lv_receipt.
lt_zbibd-pymt_recpt_no = lv_txt1.
lt_zbibd-last_pymt_recpt_no = lv_txt1.
ENDIF.
ENDIF.
ENDIF.

IF last_date IS INITIAL AND lv_rashi IS INITIAL.


SELECT * FROM zbi_migr_pymt INTO TABLE it_pymt
WHERE sap_ca = lt_zbibd-contract_account.
SORT it_pymt BY payment_date DESCENDING.
READ TABLE it_pymt INTO wa_pymt INDEX 1.
IF sy-subrc = 0.
lv_rashi = wa_pymt-payment_amt.
lv_receipt = wa_pymt-receiptno.
lv_receipt_date = wa_pymt-payment_date.
ENDIF.

lt_zbibd-last_pymt_amt = lv_rashi.
lt_zbibd-last_pymt_recpt_no = lv_receipt.
lt_zbibd-last_pymt_dt = lv_receipt_date.

lt_zbibd-pymt_amt = lv_rashi.
lt_zbibd-pymt_recpt_no = lv_receipt.
lt_zbibd-pymt_dt = lv_receipt_date.
ENDIF.

****TO SHOW LAST PAYMENT IN PRINT DOCUMENT


* READ TABLE it_payment1 INTO wa_it_payment INDEX 1.
IF lt_zbibd-pymt_amt IS INITIAL.
LOOP AT it_payment1 INTO wa_it_payment WHERE budat LE wa_doc_header-
budat.
lv_rashi = wa_it_payment-betrw.
lv_receipt = wa_it_payment-opbel.
lv_receipt_date = wa_it_payment-budat.
lt_zbibd-pymt_recpt_no = lv_receipt.
lt_zbibd-pymt_dt = lv_receipt_date.
lt_zbibd-pymt_amt = lv_rashi.

lt_zbibd-last_pymt_amt = lv_rashi.
lt_zbibd-last_pymt_recpt_no = lv_receipt.
lt_zbibd-last_pymt_dt = lv_receipt_date.

IF NOT lt_zbibd-pymt_recpt_no IS INITIAL.


CLEAR: lv_txt1.
SELECT SINGLE txtvw FROM dfkkzp INTO lv_txt1
WHERE opbel = lv_receipt.
lt_zbibd-pymt_recpt_no = lv_txt1.
lt_zbibd-last_pymt_recpt_no = lv_txt1.
ENDIF.
EXIT.
ENDLOOP.
ENDIF.

IF lt_zbibd-pymt_amt IS INITIAL.
SELECT * FROM zbi_migr_pymt INTO TABLE it_pymt
WHERE sap_ca = lt_zbibd-contract_account.
SORT it_pymt BY payment_date DESCENDING.
READ TABLE it_pymt INTO wa_pymt INDEX 1.
IF sy-subrc = 0.
lv_rashi = wa_pymt-payment_amt.
lv_receipt = wa_pymt-receiptno.
lv_receipt_date = wa_pymt-payment_date.
ENDIF.
lt_zbibd-pymt_amt = lv_rashi.
lt_zbibd-pymt_recpt_no = lv_receipt.
lt_zbibd-pymt_dt = lv_receipt_date.

lt_zbibd-last_pymt_amt = lv_rashi.
lt_zbibd-last_pymt_recpt_no = lv_receipt.
lt_zbibd-last_pymt_dt = lv_receipt_date.
ENDIF.

*****************************POWER FACTOR****************************
CLEAR: lv_power,staff_unit.
IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-
tariff_type+0(2) <> 'RT'.
LOOP AT it_ettifn INTO wa_ettifn WHERE operand = 'POWER_FACT'.
IF lv_end_date BETWEEN wa_ettifn-ab AND wa_ettifn-bis.
lv_power = wa_ettifn-wert1.
EXIT.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT it_ettifn INTO wa_ettifn WHERE ab LE lv_ab_date AND
bis GE lv_end_date AND
operand = 'POWER_FACT'.
lv_power = wa_ettifn-wert1.
EXIT.
ENDLOOP.
ENDIF.
lt_zbibd-power_factor = lv_power.
IF lt_zbibd-tariff_type = 'HTS-III_OP' OR lt_zbibd-tariff_type = 'HTS-
I_OP'.
ELSE.
IF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-
tariff_type+0(2) = 'RT'.
IF lv_daats_ab GE '20160401'.
CLEAR lt_zbibd-power_factor.
ENDIF.
ENDIF.
ENDIF.
******************STAFF CONSUMER ON**********************************
LOOP AT it_ettifn INTO wa_ettifn WHERE ab LE lv_ab_date AND
bis GE lv_end_date AND
operand = 'STAFF_UNIT'.
staff_unit = wa_ettifn-wert1.
EXIT.
ENDLOOP.

IF lt_zbibd-electricity_duty IS INITIAL.
SELECT wert1 ab operand FROM ettifn INTO TABLE t_ettifn4
WHERE anlage = v_anlage AND ( operand = 'CGOVT' OR operand = 'IIP_NOE
D').
IF NOT t_ettifn4 IS INITIAL.
READ TABLE t_ettifn4 INTO wa_ettifn4 INDEX 1.
lv_operand = wa_ettifn4-operand.
ENDIF.
ENDIF.
**************SECURITY DEPOSIT HELD OR REQUIRED***************************
CLEAR: t_dfkkop1,t_dfkkop2,lv_betrw,lv_daaat.",t_dfkkop.
* SELECT * FROM dfkkop INTO TABLE t_dfkkop WHERE vkont = lt_zbibd-
contract_account.

DELETE t_dfkkop WHERE augrd = '05'. " added by KiranD 06.09.14


t_dfkkop1 = t_dfkkop.
DELETE t_dfkkop1 WHERE hvorg NE '0020'.
LOOP AT t_dfkkop1 INTO wa_dfkkop1.
IF wa_dfkkop1-hvorg = '0020' AND wa_dfkkop1-tvorg = '0010' AND
wa_dfkkop1-augrs = '2' AND wa_dfkkop1-augst = ''.
IF wa_dfkkop1-faedn LE lt_zbibd-date_of_invoice. "wa_doc_header-
budat.
lt_zbibd-sec_dep_held = lt_zbibd-sec_dep_held + wa_dfkkop1-betrw.
ENDIF.
ELSEIF wa_dfkkop1-hvorg = '0020' AND wa_dfkkop1-tvorg = '0020' AND
wa_dfkkop1-augst = '' AND wa_dfkkop1-stakz = 'H'.
IF wa_dfkkop1-faedn LE lt_zbibd-date_of_invoice. "wa_doc_header-
budat.
lt_zbibd-sec_dep_req = lt_zbibd-sec_dep_req + wa_dfkkop1-betrw.
ENDIF.
ELSEIF wa_dfkkop1-hvorg = '0020' AND wa_dfkkop1-tvorg = '0010'.
IF wa_dfkkop1-budat LE lt_zbibd-date_of_invoice AND
( wa_dfkkop1-augbd GT lt_zbibd-date_of_invoice OR
wa_dfkkop1-augbd = '00000000' ). "wa_doc_header-budat.
lt_zbibd-sec_dep_held = lt_zbibd-sec_dep_held + wa_dfkkop1-betrw.
ENDIF.
ENDIF.
ENDLOOP.
CLEAR t_dfkkop1.

LOOP AT it_dps INTO wa_dps.


IF wa_dps-item = 'Z111' OR wa_dps-item = 'ZDP1'.
IF last_date IS INITIAL.
lt_zbibd-current_month_dps = lt_zbibd-current_month_dps + wa_dps-
dps.
ELSE.
IF wa_dps-budat BETWEEN last_date AND lt_zbibd-date_of_invoice.
lt_zbibd-current_month_dps = lt_zbibd-current_month_dps + wa_dps-
dps.
* ELSEIF wa_dps-date BETWEEN last_date AND lt_zbibd-date_of_invoice.
* lt_zbibd-current_month_dps = lt_zbibd-current_month_dps + wa_dps-
dps.
ELSE.
lt_zbibd-arrear_dps = lt_zbibd-arrear_dps + wa_dps-dps.
ENDIF.
ENDIF.
ELSE.
* IF last_date IS INITIAL.
* lt_zbibd-current_month_dps = lt_zbibd-current_month_dps + wa_dps-
dps.
* ELSE.
lt_zbibd-arrear_dps = lt_zbibd-arrear_dps + wa_dps-dps.
* ENDIF.
ENDIF.
ENDLOOP.

lt_zbibd-sec_dep_held = abs( lt_zbibd-sec_dep_held ).


****************Installment Amount History**********************
* BREAK-POINT.
t_dfkkop2[] = t_dfkkop1[] = t_dfkkop[].
* DELETE t_dfkkop1 WHERE faedn NE wa_doc_header-faedn.
SORT t_dfkkop1 BY blart.
DELETE t_dfkkop1 WHERE blart NE 'IP'.
SORT t_dfkkop1 BY opbel faedn .
**************************************
CLEAR: wa_dfkkop,lv_inst_no1,lv_inst_no.
LOOP AT t_dfkkop1 INTO wa_dfkkop.
lt_zbibd-inst_on_arrear = lt_zbibd-inst_on_arrear + wa_dfkkop-betrw.
ENDLOOP.
SORT t_dfkkop1 BY opupk DESCENDING.
READ TABLE t_dfkkop1 INTO wa_dfkkop INDEX 1 .
lv_inst_no1 = wa_dfkkop-opupk.
DELETE t_dfkkop1 WHERE faedn NE wa_doc_header-faedn.
* DELETE t_dfkkop1 WHERE augst = '9'.
IF NOT t_dfkkop1 IS INITIAL.
SORT t_dfkkop1 BY opupk DESCENDING.
READ TABLE t_dfkkop1 INTO wa_dfkkop INDEX 1 .
lv_inst_no = wa_dfkkop-opupk.
* lt_zbibd-installment_amount = wa_dfkkop-betrw.
PACK: lv_inst_no TO lv_inst_no,
lv_inst_no1 TO lv_inst_no1.
IF lv_inst_no1 IS NOT INITIAL AND
lv_inst_no IS NOT INITIAL.
CONCATENATE lv_inst_no '/' lv_inst_no1 INTO lt_zbibd-installment_no.
CONDENSE lt_zbibd-installment_no.
ENDIF.
ELSE.
CLEAR: lt_zbibd-inst_on_arrear.
ENDIF.

DELETE t_dfkkop2 WHERE faedn GT wa_doc_header-budat. "lv_datee.

***************LOGIC FOR INTEREST SD**************


* LOOP AT t_dfkkop2 INTO wa_dfkkop2 .
* IF wa_dfkkop2-augrd NE '05'
* AND ( wa_dfkkop2-hvorg = '0025' OR wa_dfkkop2-hvorg = 'Z133' )
* AND ( wa_dfkkop2-tvorg = '0010'
* OR wa_dfkkop2-tvorg = '0020')
* AND wa_dfkkop2-faedn LT wa_doc_header-budat.
* lt_zbibd-interest_sd = lt_zbibd-interest_sd + wa_dfkkop2-betrw.
*
* ENDIF.
* ENDLOOP.

************End of Installment and Interest**********


CLEAR wa_dfkkop2.
********lOGIC FOR PAYMENT IN ADVANCE ****
IF creation_date LE '20141011'.
LOOP AT t_dfkkop2 INTO wa_dfkkop2
WHERE hvorg = '0060'
AND ( tvorg = '0010' OR tvorg = '0020')
AND ( augst = '' OR ( augst = '9' AND augdt GE wa_doc_header-
erdat ) ) .

IF wa_dfkkop2-augst = '9' AND wa_dfkkop2-blart = 'TF'.


ELSE.
IF last_date IS INITIAL.
IF wa_dfkkop2-budat LE wa_doc_header-budat.
lt_zbibd-pymt_on_account = lt_zbibd-
pymt_on_account + wa_dfkkop2-betrw.
ENDIF.
ELSEIF ( wa_dfkkop2-budat GT last_date AND
wa_dfkkop2-budat LE wa_doc_header-budat ).
lt_zbibd-pymt_on_account = lt_zbibd-pymt_on_account + wa_dfkkop2-
betrw.
ENDIF.
ENDIF.
ENDLOOP.
ELSE.
lt_zbibd-pymt_on_account = lv_advance_pay.
ENDIF.
CLEAR t_dfkkop2.

t_dfkkop2[] = t_dfkkop[].
DELETE t_dfkkop2 WHERE budat LT last_date.
DELETE t_dfkkop2 WHERE budat GT lt_zbibd-date_of_invoice.
SORT t_dfkkop2 BY budat.
DELETE t_dfkkop2 WHERE augrd = '05'.

IF lt_zbibd-tariff_type+0(2) <> 'HT' AND


lt_zbibd-tariff_type+0(2) <> 'RT'.
LOOP AT t_dfkkop2 INTO wa_dfkkop2 WHERE ( hvorg = 'Z131'
OR hvorg = 'ZOTS'
OR hvorg = 'Z134').
lv_betrw2 = wa_dfkkop2-betrw + lv_betrw2.
ENDLOOP.

ELSE.
LOOP AT t_dfkkop2 INTO wa_dfkkop2 WHERE ( hvorg = 'Z132'
OR hvorg = 'ZOTS'
OR hvorg = 'Z137'
OR hvorg = 'Z120' ).
lv_betrw2 = wa_dfkkop2-betrw + lv_betrw2.
IF wa_dfkkop2-hvorg = 'Z132'.
lt_zbibd-message6 = 'X'.
ENDIF.
ENDLOOP.

ENDIF.

IF lv_betrw2 IS NOT INITIAL.


CLEAR: lv_thead,l_itline,l_waline,read_text.
lv_thead-tdid = 'FKK0'.
lv_thead-tdspras = 'EN'.
lv_thead-tdname = wa_dfkkop2-opbel.
lv_thead-tdobject = 'FKKKO'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
client = sy-mandt
id = lv_thead-tdid
language = lv_thead-tdspras
name = lv_thead-tdname
object = lv_thead-tdobject
TABLES
lines = l_itline
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
READ TABLE l_itline INTO l_waline INDEX 1.
IF sy-subrc = 0.
IF lv_betrw2 LT 0.
lv_betrw2 = lv_betrw2 * ( -1 ).
zextra-fi_mess1 = lv_betrw2.
CONDENSE zextra-fi_mess1.
CONCATENATE 'Rs.-' zextra-fi_mess1 INTO zextra-fi_mess1.
CONDENSE zextra-fi_mess1.
ELSEIF lv_betrw2 GT 0.
zextra-fi_mess1 = lv_betrw2.
CONDENSE zextra-fi_mess1.
CONCATENATE 'Rs.' zextra-fi_mess1 INTO zextra-fi_mess1.
CONDENSE zextra-fi_mess1.
ENDIF.

IF lt_zbibd-message6 = 'X'.
CLEAR: lt_zbibd-message6.
CONCATENATE zextra-fi_mess1 ':' l_waline-tdline
INTO lt_zbibd-z132_message SEPARATED BY space.
ENDIF.

CONCATENATE zextra-fi_mess1 'posted on bill' lt_zbibd-bill_month


'for Reason:'
l_waline-tdline INTO zextra-fi_mess1 SEPARATED BY space.
CONCATENATE '"' zextra-fi_mess1 '".' INTO zextra-fi_mess1.
ENDIF.
ENDIF.

* IF lt_zbibd-z132_message = 'X'.
* CLEAR lt_zbibd-z132_message.
** CONCATENATE 'Rs.'
* lt_zbibd-z132_message = zextra-fi_mess1.
* ENDIF.
* Code added by KiranD TR B10K902530
*Below Logic written for only 1 month for following SUB_DIV_CODE's
* FAAA/CBBA/CBBB/EAEE/DBBA
********Bill Month************************************************
* IF lt_zbibd-sub_div_code = 'FAAA' OR lt_zbibd-sub_div_code = 'CBBA' OR
* lt_zbibd-sub_div_code = 'CBBB' OR lt_zbibd-sub_div_code = 'EAEE' OR
* lt_zbibd-sub_div_code = 'DBBA'.
* CLEAR: ls_dt1,ls_dt2,ls_mon1,lv_month,lv_datum.
* ls_dt1 = lv_end_date+0(4).
* ls_dt2 = lv_end_date+4(2).
*
* SELECT SINGLE monam FROM t015m INTO lv_month WHERE monum = ls_dt2
* AND spras EQ 'EN'.
*
* CLEAR: lv_datum.
*
* ls_mon1 = lv_month+0(3).
* CONCATENATE ls_mon1 '-' ls_dt1 INTO lv_datum.
* lt_zbibd-bill_month = lv_datum.
* TRANSLATE lt_zbibd-bill_month TO UPPER CASE.
* ENDIF.
*End of Code by KiranD TR B10K902530
****************BILL DAYS LOGIC********************************************
**
lv_days = lv_end_date - lv_ab_date.
lt_zbibd-bill_days = lv_days + 1.
* If adjustment is there, then display TOTAL number of days along with
BILL_DAYS****************
CLEAR: lv_mtr_ab,lv_mtr_bis,lv_days1,gv_adj_days.
CLEAR: lv_dt1,lv_dt2,lv_pl_adjustment,lv_datum.
* IF NOT lt_zbibd-
other_charges IS INITIAL OR NOT lv_lt_leg_adj IS INITIAL.
IF pl_adj = 'X' OR NOT lv_lt_leg_adj IS INITIAL.
CLEAR it_tdoc.
LOOP AT t_doc_item INTO wa_tdoc WHERE zwnummer = '001' AND ablesgr NE '
91'.
APPEND wa_tdoc TO it_tdoc.
ENDLOOP.
SORT it_tdoc BY bis DESCENDING.
READ TABLE it_tdoc INTO wa_tdoc INDEX 1.
lv_mtr_bis = wa_tdoc-bis.
lv_mtr_ab = wa_tdoc-ab.

SORT it_tdoc BY ab.


READ TABLE it_tdoc INTO wa_tdoc INDEX 1.
IF wa_tdoc-ab IS INITIAL.
ELSE.
lv_mtr_ab = wa_tdoc-ab.
ENDIF.

IF lv_lt_leg_adj = 'X'.
DELETE it_ettifn3 WHERE operand NE 'LEG_EC' AND operand NE 'LEG_EC_AP
R' .
SORT it_ettifn3 BY ab .
READ TABLE it_ettifn3 INTO wa_ettifn3 INDEX 1.
lv_mtr_ab = wa_ettifn3-ab.
* lv_mtr_ab = gv_bis.
ENDIF.

IF wa_tdoc-ablesgrv = '06'.
CALL FUNCTION 'HR_AUPBS_MONTH_DAY'
EXPORTING
beg_da = lv_mtr_ab
end_da = lv_mtr_bis
IMPORTING
no_cal_day = lv_days1.

ELSE.
CALL FUNCTION 'HR_AUPBS_MONTH_DAY'
EXPORTING
beg_da = lv_mtr_ab
end_da = lv_mtr_bis
IMPORTING
no_cal_day = lv_days1.
* lv_days1 = lv_days1 - 1 .
ENDIF.
gv_adj_days = lv_days1.
* PACK gv_adj_days to gv_adj_days.
CONDENSE gv_adj_days.
IF wa_eabl IS NOT INITIAL.
IF wa_eabl-ablhinw = 'PL' OR wa_eabl-ablhinw = 'PA'.
CONCATENATE '*''Your meter reading has been estimated due to premis
e locked.'
'It will be adjusted in subsequent bill when actual meter read
ing is received .'
INTO lv_pl_message SEPARATED BY space.
ENDIF.
ENDIF.
*********************PL ADJUSTMENT MESSAGE********************************
lv_dt2 = lv_mtr_ab+4(2).
lv_dt1 = lv_mtr_ab+0(4).
SELECT SINGLE monam FROM t015m INTO lv_adjust WHERE monum = lv_dt2 AND
spras = 'EN'.
IF sy-subrc = 0.
CLEAR lv_dt2.
lv_dt2 = lv_adjust+0(3).
CONCATENATE lv_dt2 '-' lv_dt1 INTO lv_datum.
CONCATENATE 'Bill has been adjusted against the actual'
'consumption received in' lt_zbibd-bill_month
'month for billing period' lv_datum 'to' lt_zbibd-
bill_month
INTO lv_pl_adjustment SEPARATED BY space.
ENDIF.
CLEAR: lv_datum.

ELSE.
CLEAR it_tdoc.
LOOP AT t_doc_item INTO wa_tdoc WHERE zwnummer = '001' AND ablesgr NE '
91'.
APPEND wa_tdoc TO it_tdoc.
ENDLOOP.
SORT it_tdoc BY bis DESCENDING.
READ TABLE it_tdoc INTO wa_tdoc INDEX 1.
lv_mtr_bis = wa_tdoc-bis.
lv_mtr_ab = wa_tdoc-ab.
ENDIF.

********added by TMKIRAND for ROUNDO amount***************************


IF creation_date LE '20140910'.
IF last_date IS NOT INITIAL. " condition added B10K902687
IF lt_zbibd-last_pymt_amt IS NOT INITIAL.
v_arrear_chrg = v_arrear_chrg - lt_zbibd-last_pymt_amt.
IF v_arrear_chrg LE lt_zbibd-pymt_on_account.
lt_zbibd-pymt_on_account = v_arrear_chrg.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
********added by TMKIRAND for ROUNDO amount

*******************Arrear Energy Charge********************************


IF creation_date LE '20140910'.
IF lt_zbibd-last_pymt_amt IS INITIAL .
IF lt_zbibd-incentive_charge IS NOT INITIAL.
lt_zbibd-arrear_energy = lt_zbibd-arrear_energy + lt_zbibd-
incentive_charge.
ELSEIF last_rund IS NOT INITIAL.
lt_zbibd-arrear_energy = lt_zbibd-
arrear_energy + last_rund + neg_roundo.
ENDIF.
ENDIF.

****Added by TMKIRAND for ROUNDO amount


IF lt_zbibd-last_pymt_amt IS NOT INITIAL AND lt_zbibd-
last_pymt_amt LT v_pybl_bibd
AND ( lt_zbibd-last_pymt_dt BETWEEN last_date AND lt_zbibd-
date_of_invoice ).
lt_zbibd-arrear_energy = lt_zbibd-arrear_energy + lt_zbibd-
incentive_charge.
ENDIF.
ELSE.
lt_zbibd-arrear_energy = lt_zbibd-
arrear_energy + last_rund + neg_roundo.
ENDIF.
* IF payment_acc LT 0 AND lt_zbibd-last_pymt_amt IS INITIAL.
* lt_zbibd-arrear_energy = lt_zbibd-arrear_energy + payment_acc.
* ENDIF.
****Ended by TMKIRAND for ROUNDO amount

*******If Legacy Abeyance amount is already cleared by utility,


*then just for record we enter debit(Z146) and Credit(Z144) amount in SAP.
* When ever Z146 is there, then Z144 of same amount will/should be there.
* In doc overview of invoice, we excluded Z146, so that amount we need to
* get from DFKKOP table.So, whenever Z144 item is present, then we need to
search
* dfkkop for Z146, if that entry exists and if summation amount is ZERO,
* then there is no Abeyance Amount.
IF NOT lt_zbibd-amt_abey_with_dps IS INITIAL.
LOOP AT t_dfkkop INTO wa_dfkkop WHERE hvorg = 'Z146'.
lt_zbibd-amt_abey_with_dps = lt_zbibd-amt_abey_with_dps +
wa_dfkkop-betrw.
ENDLOOP.
* READ TABLE t_dfkkop INTO wa_dfkkop WITH KEY hvorg = 'Z146'.
* IF sy-subrc = 0.
* lt_zbibd-amt_abey_with_dps = lt_zbibd-amt_abey_with_dps +
* wa_dfkkop-betrw.
* ENDIF.
ENDIF.
*If Kept in abeyance amount is there, then that amount should be
* first deducted from Arrear ED. If result amount is greater than zero
* then continue ELSE deduct the result from Arrear EC. If again the
* result amount is greater than ZERO, then continue ELSE deduct the
* result from Arrear Others. If result is greater than ZERO then continue
* ELSE clear Arrear EC, Arrear ED, Arrear Other.
IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-
tariff_type+0(2) <> 'RT'.
IF NOT lt_zbibd-amt_abey_with_dps IS INITIAL.
CLEAR: lv_result1,lv_result2.
lv_result1 = lt_zbibd-arrear_ed + lt_zbibd-amt_abey_with_dps.
IF lv_result1 LT 0.
CLEAR lt_zbibd-arrear_ed.
lv_result2 = lv_result1.
lv_result1 = lt_zbibd-arrear_energy + lv_result1.
IF lv_result1 LT 0.
CLEAR lt_zbibd-arrear_energy.
lv_result2 = lv_result1.
lv_result1 = lt_zbibd-arrear_other_chg + lv_result1.
IF lv_result1 LT 0.
CLEAR lt_zbibd-arrear_other_chg.
lv_result2 = lv_result1.
lv_result1 = lt_zbibd-arrear_dps + lv_result1.
IF lv_result1 LT 0.
CLEAR lt_zbibd-arrear_dps.
lt_zbibd-pymt_on_account = lt_zbibd-pymt_on_account +
lv_result1.
ELSE.
lt_zbibd-arrear_dps = lt_zbibd-arrear_dps +
lv_result2.
ENDIF.
CLEAR: lv_result1,lt_zbibd-arrear_other_chg,
lt_zbibd-arrear_energy,lt_zbibd-arrear_ed,
lv_result2.
ELSE.
lt_zbibd-arrear_other_chg = lt_zbibd-arrear_other_chg +
lv_result2.
ENDIF.
ELSE.
lt_zbibd-arrear_energy = lt_zbibd-arrear_energy + lv_result2.
ENDIF.
ELSE.
lt_zbibd-arrear_ed = lt_zbibd-arrear_ed + lt_zbibd-
amt_abey_with_dps.
ENDIF.

ENDIF.
ENDIF.
**********************Total arrear amount**********************************
***
lt_zbibd-total_arrear = lt_zbibd-pymt_on_account + lt_zbibd-
arrear_energy +
lt_zbibd-arrear_ed + lt_zbibd-arrear_dps +
lt_zbibd-arrear_punitive_amt + lt_zbibd-
arrear_punitive_dps +
lt_zbibd-arrear_other_chg." +
* lt_zbibd-online_rebate.
* lt_zbibd-amt_abey_with_dps.
IF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-tariff_type+0(2) = 'RT'.
lt_zbibd-total_arrear = lt_zbibd-total_arrear + lt_zbibd-online_rebate.
ENDIF.

****************Current Month Bill Amount**********************************


****88
lt_zbibd-total_current_amount = lt_zbibd-curr_dps_kept_on_abey +
lt_zbibd-current_month_dps +
lt_zbibd-fixed_demand_chrg +
lt_zbibd-excess_demand_chrg +
lt_zbibd-energy_charge +
lt_zbibd-energy_charge_1h1 +
lt_zbibd-energy_charge_2h1 +
lt_zbibd-energy_charge_3h1 +
lt_zbibd-minimum_charge +
lt_zbibd-electricity_duty +
lt_zbibd-meter_rent +
lt_zbibd-meter_cgst +
lt_zbibd-meter_sgst +
lt_zbibd-vat_on_meter_rent +
lt_zbibd-shunt_cap_charge +
lt_zbibd-fppca_charges +
lt_zbibd-pf_surchg_rebate +
lt_zbibd-transformer_rent +
lt_zbibd-other_charges +
lt_zbibd-cross_subsidy +
lt_zbibd-reactive_chrg +
lt_zbibd-installment_amount +
lt_zbibd-adjustment_dr_cr +
*code added by venkat B10K907825
* lt_zbibd-gov_subsidy +
*End of B10K907825
lt_zbibd-voltage_surcharge -
lt_zbibd-curr_dps_kept_on_abey.

IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-


tariff_type+0(2) <> 'RT'.
lt_zbibd-total_current_amount = lt_zbibd-total_current_amount +
lt_zbibd-gov_subsidy.
ENDIF.
**************GRAND TOTAL = ARREAR TOTAL + CURRENT TOTAL*******************
********
lt_zbibd-current_arrear_tot = lt_zbibd-total_current_amount + lt_zbibd-
total_arrear.

IF lt_zbibd-tariff_type+0(2) = 'HT' AND lt_zbibd-


energy_charge IS NOT INITIAL.
PERFORM convert_currency USING energy_rate CHANGING zextra-energy.
CLEAR dummy1.
SPLIT zextra-energy AT '.' INTO zextra-energy dummy1.
CONCATENATE zextra-energy '.' dummy1+0(2) INTO zextra-energy.
CONDENSE zextra-energy.
CONCATENATE '@ ' zextra-energy INTO zextra-energy SEPARATED BY space.
ENDIF.
*************************Energy Charge for HT(1H1+2H1+3H1)*****************
********
lt_zbibd-energy_charge = lt_zbibd-energy_charge_1h1 + lt_zbibd-
energy_charge_2h1 +
lt_zbibd-energy_charge_3h1 + lt_zbibd-
energy_charge.
*********************Net Amount Payable**************************
lt_zbibd-net_amt_pybl = lt_zbibd-total_arrear +
lt_zbibd-total_current_amount +
lt_zbibd-interest_sd +
lt_zbibd-remission +
lt_zbibd-incentive_under_iip +
lt_zbibd-ppi_levied.
IF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-tariff_type+0(2) = 'RT'.
lt_zbibd-net_amt_pybl = lt_zbibd-net_amt_pybl + lt_zbibd-gov_subsidy.
ENDIF.

* IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-


tariff_type+0(2) <> 'RT'.
* lt_zbibd-net_amt_pybl = lt_zbibd-net_amt_pybl - lt_zbibd-
amt_abey_with_dps .
* ENDIF.
**********************Amount payable witn in due date***************
lt_zbibd-net_amt_pbl_by_due_dt = ceil( lt_zbibd-net_amt_pybl + lt_zbibd-
ppi_leviable ).
CLEAR: var1.

IF lt_zbibd-net_amt_pbl_by_due_dt LE 0.
lt_zbibd-net_amt_pbl_btwn_due_dt = lt_zbibd-net_amt_pbl_by_due_dt.
lt_zbibd-amt_pybl_aftr_due_date = lt_zbibd-net_amt_pbl_by_due_dt.
ELSE.
*********************Amount Payable between due date***************

lt_zbibd-net_amt_pbl_btwn_due_dt = ceil( lt_zbibd-net_amt_pybl ).


*****************Amount payable after due date***********************
CLEAR:lv_dps_leviabl_amt,var1.
lv_dps_leviabl_amt = ( lt_zbibd-net_amt_pybl -
( lt_zbibd-curr_dps_kept_on_abey + lt_zbibd-
current_month_dps +
lt_zbibd-arrear_dps + lt_zbibd-
arrear_punitive_dps ) ).
IF lv_dps_leviabl_amt < 0 .
lv_dps_leviabl_amt = 0.
ENDIF.

lt_zbibd-amt_pybl_aftr_due_date = ceil( lt_zbibd-


net_amt_pybl + ( lv_dps_leviabl_amt * c_015 ) ).
ENDIF.
*changes by venkat
CLEAR:lv_online_re1.
lv_tot_am = lt_zbibd-net_amt_pbl_by_due_dt.
lv_online_re1 = online_rebate."lt_zbibd-online_rebate.
IF lv_online_re1 LT 0.
lv_online_re1 = lv_online_re1 * -1.
ENDIF.
lv_onlin_re = lv_online_re1.

IF NOT online_rebate IS INITIAL.


CONCATENATE lt_zbibd-due_date+6(2) '.' lt_zbibd-
due_date+4(2) '.' lt_zbibd-due_date+0(4) INTO lv_duedate.
CONDENSE :lv_tot_am,lv_onlin_re.
CONCATENATE 'Pay Rs' lv_tot_am 'by' lv_duedate 'online to get Rs'
lv_onlin_re 'extra rebate' INTO zextra-
online_rebate SEPARATED BY space.
ENDIF.
*end of changes
**+Installment Message logic
IF NOT lt_zbibd-contract_account IS INITIAL.
SELECT * FROM zinst_plan INTO TABLE it_instal
WHERE vkont = lt_zbibd-contract_account.
IF NOT it_instal IS INITIAL.
SORT it_instal BY end_date DESCENDING.
DELETE it_instal WHERE end_date LT lt_zbibd-date_of_invoice OR
start_date GT lt_zbibd-date_of_invoice.
LOOP AT it_instal INTO wa_instal.
IF lt_zbibd-date_of_invoice
BETWEEN wa_instal-start_date AND wa_instal-end_date.
CLEAR: lv_num1,wspannc.
wa_instal-inst_amt = wa_instal-inst_amt + lt_zbibd-
total_current_amount.
wa_instal-inst_amt = ceil( wa_instal-inst_amt ).
lv_num1 = wa_instal-inst_amt.
IF lv_num1 CA '.'.
PERFORM delete_zero.
wspannc = lv_num1.
ELSE.
wspannc = wa_instal-inst_amt.
CONDENSE wspannc NO-GAPS.
ENDIF.
CONCATENATE 'Minimum Installment Payable Rs.' wspannc
INTO zextra-instal_mess.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.

**+Installment Message logic


*****************Meter Details Logic***********************
* BREAK-POINT.
CLEAR: it_tdoc,lv_dt1.
it_tdoc = t_doc_item[].
* sort it_tdoc by bis DESCENDING.
*********************METER DETAILS FOR MOVE-
IN & METER CHANGE CASES*************
DELETE it_tdoc WHERE geraet IS INITIAL OR
sc_belnr NE '' OR
zwnummer EQ ''." OR
* ( belzart = 'IDPEAK' OR belzart = 'IDAVER').

SORT it_tdoc BY bis DESCENDING.


READ TABLE it_tdoc INTO wa_tdoc INDEX 1.
IF sy-subrc = 0.
lv_dt1 = wa_tdoc-bis.
ENDIF.

SORT it_tdoc BY geraet zwnummer.


CLEAR: gt_bimd,lv_reading_mtr,wa_bimd."lv_lt_leg_adj.
IF lv_daats_ab GE '20160401'.
IF lt_zbibd-tariff_type+0(2) = 'HT' OR
lt_zbibd-tariff_type+0(2) = 'RT'.
DELETE it_tdoc WHERE "zwnummer = '01' OR
zwnummer = '02' OR
zwnummer = '03' OR
zwnummer = '04'.
ENDIF.
ENDIF.
* break tmkirand.

IF lt_zbibd-tariff_type+0(2) = 'LT' OR
lt_zbibd-tariff_type+0(2) = 'PU'.
IF '20170401' BETWEEN lv_ab_date AND lv_end_date.
IF pl_adj = 'X'.
DELETE it_tdoc WHERE zwnummer = '001' AND ablhinw = 'OK' AND
ablesgr = '01'.
* DELETE it_tdoc WHERE zwnummer = '002'.
ELSE.
DELETE it_tdoc WHERE zwnummer = '001'." or zwnummer = '002'.
ENDIF.
ELSEIF lv_end_date LT '20170401'.
ELSE.
DELETE it_tdoc WHERE zwnummer = '001'." or zwnummer = '002'.
ENDIF.
ENDIF.

***After Govt Subsidy Price change on 18.04.2018, for PL(Adj) cases


***meter Chart was showing wrong due to Reading Proration with this period.
***
* IF pl_adj = 'X'.
* IF '20180418' BETWEEN lv_ab_date and lv_end_date.
* DELETE it_tdoc WHERE istablart = '03'.
* ENDIF.
* ENDIF.
IF pl_adj = 'X'.
IF '20180418' BETWEEN lv_ab_date and lv_end_date.
DATA: temp_itdoc TYPE TABLE OF erdz,
watemp_itdoc TYPE erdz,
vv_index TYPE sy-tabix,
vv_index2 TYPE sy-tabix.
CLEAR: temp_itdoc,watemp_itdoc,vv_index,vv_index2.
temp_itdoc = it_tdoc.
LOOP AT it_tdoc INTO wa_tdoc WHERE istablartva = '03'.
vv_index = sy-tabix.
READ TABLE temp_itdoc INTO watemp_itdoc WITH KEY istablart = '03'
erchbelnr = wa_tdoc-
erchbelnr.
IF sy-subrc = 0.
vv_index2 = sy-tabix.
wa_tdoc-i_zwstvor = watemp_itdoc-i_zwstvor.
wa_tdoc-ab = watemp_itdoc-ab.
wa_tdoc-i_abrmenge = wa_tdoc-i_abrmenge + watemp_itdoc-
i_abrmenge.
wa_tdoc-i_zwstdiff = wa_tdoc-i_zwstdiff + watemp_itdoc-
i_zwstdiff.
MODIFY it_tdoc FROM wa_tdoc INDEX vv_index TRANSPORTING
i_zwstvor ab i_abrmenge i_zwstdiff.
CLEAR vv_index.
DELETE it_tdoc WHERE istablart = '03' AND erchbelnr = wa_tdoc-
erchbelnr.
CLEAR vv_index2.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.

LOOP AT it_tdoc INTO wa_tdoc.


IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-
tariff_type+0(2) <> 'RT' AND
lt_zbibd-tariff_type+0(2) <> 'LT' AND lt_zbibd-
tariff_type+0(2) <> 'PU'.
lv_lt_flag = 'X'. "Added by TMMANISHT on 29th March 2014
CLEAR: flag1,it1_eabl,wa1_eabl.
cnt = cnt + 1.
IF wa_tdoc-zwnummer = '1' OR wa_tdoc-zwnummer = '2' OR
wa_tdoc-zwnummer = '3' OR wa_tdoc-zwnummer = '4' OR
wa_tdoc-zwnummer = '5' OR wa_tdoc-zwnummer = '6'.
IF wa_tdoc-ablhinw = 'PL' OR wa_tdoc-ablhinw = 'NB' OR
wa_tdoc-ablhinw = 'UF' OR wa_tdoc-ablhinw = 'MD' OR
wa_tdoc-ablhinw = 'MB' OR wa_tdoc-ablhinw = 'MM' OR
wa_tdoc-ablhinw = 'NF' OR wa_tdoc-ablhinw = 'NM' OR
wa_tdoc-ablhinw = 'RN' OR wa_tdoc-ablhinw = 'UB'.

CLEAR it1_eabl.
SELECT zwnummer adat zz_v_zwstand zz_n_zwstand FROM eabl INTO TAB
LE it1_eabl
WHERE equnr = wa_tdoc-
geraet AND adat LE lv_dt1."wa_tdoc-bis.
SORT it1_eabl BY register ASCENDING adat DESCENDING.
READ TABLE it1_eabl INTO wa1_eabl INDEX 1.
IF sy-subrc = 0 AND wa_tdoc-zwnummer = '1'.
wa_bimd-pre_mtr_rdng = wa1_eabl-zz_v_zwstand.
wa_bimd-curr_mtr_rdng = wa1_eabl-zz_v_zwstand.
ENDIF.
DELETE it1_eabl WHERE register EQ '002'.
READ TABLE it1_eabl INTO wa1_eabl INDEX 2.
wa_bimd-pre_mtr_rdng_date = wa1_eabl-adat.

***********Added by Kiran TR
IF wa_tdoc-zwnummer = '2' AND wa_tdoc-ablhinw = 'MD'.
wa_bimd-pre_mtr_rdng = lt_zbibd-contract_demand_kw.
wa_bimd-curr_mtr_rdng = lt_zbibd-contract_demand_kw.
ENDIF.
***********End of addition by Kiran TR
flag1 = 'X'.
ELSE.
IF lv_lt_leg_adj = 'X' AND wa_tdoc-zwnummer = '1'.
lv_anlage = v_anlage.
CLEAR: it_eabl5,it_eablg5.

CALL FUNCTION 'ISU_DB_EABL_SELECT_INSTALL'


EXPORTING
x_anlage = lv_anlage
TABLES
ty_eabl = it_eabl5
ty_eablg = it_eablg5
EXCEPTIONS
not_found = 1
system_error = 2
not_qualified = 3
invalid_interval = 4
path_invalid = 5
date_invalid = 6
internal_error = 7
OTHERS = 8.
* ENDIF.
*******************added by TMKIRAND TR B10K902772************************
*******
IF it_eabl9 IS INITIAL.
it_eabl9 = it_eabl5.
ENDIF.
IF it_eablg9 IS INITIAL.
it_eablg9 = it_eablg5.
ENDIF.

**********Logic to incorporate First and Last bill in same bill


IF lt_zbibd-finalbill = 'X'.
SORT it_eablg5 BY adatsoll DESCENDING.
LOOP AT it_eablg5 INTO wa_eablg5 WHERE ablesgr = '03'.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = wa_ea
blg5-ablbelnr.
IF sy-subrc = 0.
wa_bimd-curr_mtr_rdng_date = wa_eabl5-adat.
wa_bimd-curr_mtr_rdng = wa_eabl5-v_zwstand.
ENDIF.
READ TABLE it_eablg5 INTO wa_eablg5 WITH KEY ablesgr = '06'
.
IF sy-subrc = 0.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = wa_
eablg5-ablbelnr.
IF sy-subrc = 0.
wa_bimd-pre_mtr_rdng_date = wa_eabl5-adat.
wa_bimd-pre_mtr_rdng = wa_eabl5-v_zwstand.
ENDIF.
ENDIF.
ENDLOOP.
wa_bimd-rdng_diff = wa_bimd-curr_mtr_rdng - wa_bimd-
pre_mtr_rdng.
IF wa_bimd-rdng_diff LT 0.
CLEAR: wa_bimd-rdng_diff,wa_bimd-pre_mtr_rdng.
ENDIF.
wa_bimd-billed_consum = wa_bimd-rdng_diff.
wa_bimd-mult_fac = '1.00'.
ELSE.
*******************Ended by TMKIRAND TR B10K902772************************
*******
LOOP AT it_eablg5 INTO wa_eablg5.
IF wa_eablg5-ablesgr = '01' OR wa_eablg5-ablesgr = '06'.
IF wa_eablg5-adatsoll > lv_adatsoll.
DELETE it_eablg5 WHERE ablbelnr = wa_eablg5-
ablbelnr AND
ablesgr = wa_eablg5-ablesgr .
ENDIF.
ELSE.
DELETE it_eablg5 WHERE ablbelnr = wa_eablg5-ablbelnr AND
ablesgr = wa_eablg5-ablesgr.
ENDIF.
ENDLOOP.
SORT it_eablg5 BY adatsoll DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_eablg5 COMPARING adatsoll.
DELETE it_eablg5 WHERE adatsoll LT lv_ab_date AND adatsoll GT
lv_end_date.
* DELETE it_eablg5 WHERE adatsoll GT lv_end_date.
CLEAR: lv_indx,lwa_eablg5.
LOOP AT it_eablg5 INTO wa_eablg5.
* lv_indx = lv_indx + 1.
lwa_eablg5 = wa_eablg5.
AT FIRST.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = lwa
_eablg5-ablbelnr.
IF sy-subrc = 0.
wa_bimd-curr_mtr_rdng_date = wa_eabl5-adat.
wa_bimd-curr_mtr_rdng = wa_eabl5-v_zwstand.
ENDIF.
ENDAT.

AT LAST.
* IF wa_eablg5-ablesgr = '09'.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = lwa
_eablg5-ablbelnr.
* ablhinw = 'OK'.
IF sy-subrc = 0.
wa_bimd-pre_mtr_rdng_date = wa_eabl5-adat. "lv_mtr_ab
wa_bimd-pre_mtr_rdng = wa_eabl5-zz_v_zwstand.
* EXIT.
ENDIF.
* ENDIF.
ENDAT.
ENDLOOP.
* ENDIF.
wa_bimd-rdng_diff = wa_bimd-curr_mtr_rdng - wa_bimd-
pre_mtr_rdng.
wa_bimd-billed_consum = wa_bimd-rdng_diff.
wa_bimd-mult_fac = '1.00'.

ENDIF.
ELSE.
IF wa_tdoc-ablesgr = '01'.
IF wa_tdoc-ablesgrv = '06' OR
wa_tdoc-ablesgrv = '21' OR
wa_tdoc-ablesgrv = '14'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSEIF wa_tdoc-ablesgrv = '01'.
IF wa_tdoc-sc_belnr IS INITIAL.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSE.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
IF wa_tdoc-i_abrmenge LT 0.
wa_bimd-rdng_diff = wa_bimd-rdng_diff - wa_tdoc-
i_zwstdiff.
ELSE.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-
i_zwstdiff.
ENDIF.
ENDIF.
* ELSEIF wa_tdoc-ablesgrv = '11' AND wa_tdoc-zwnummer = '3'.
* wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
* wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '22' OR wa_tdoc-ablesgr = '14'
OR wa_tdoc-ablesgr = '16'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '06'
OR wa_tdoc-ablesgrv = '14' OR wa_tdoc-ablesgrv = '11'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '03'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '14'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ENDIF.
******added by KiranD B10K902752*****************************
ELSEIF wa_tdoc-ablesgr = '10'.
IF wa_tdoc-ablesgrv = '01'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
******end of addition by KiranD B10K902752*******************
ENDIF.
ENDIF.
ENDIF.
ENDIF.

wa_bimd-invoiceno = lt_zbibd-invoiceno.
wa_bimd-contract_acc_no = lt_zbibd-contract_account.
SELECT SINGLE serge FROM equi INTO wa_bimd-
mnf_srl_no WHERE equnr = wa_tdoc-geraet.
wa_bimd-meter_no = wa_tdoc-geraet.
wa_bimd-register = wa_tdoc-zwnummer.
wa_bimd-bill_month = lt_zbibd-bill_month.
wa_bimd-date_of_invoice = lt_zbibd-date_of_invoice.
wa_bimd-meter_status = wa_tdoc-ablhinw.
wa_bimd-cur_mtr_type = wa_tdoc-istablart.
wa_bimd-curr_mtr_rdng_reason = wa_tdoc-ablesgr.
wa_bimd-billed_mtr_rdng = wa_tdoc-i_zwstndab.
* IF lv_lt_leg_adj = 'X'.
* ELSE.
wa_bimd-mult_fac = wa_tdoc-i_abrmenge / wa_tdoc-i_zwstdiff.
*Start of Addition by TMMANISHT on 12th April 2014
IF wa_bimd-mult_fac = '0.00'.
wa_bimd-mult_fac = '1.00'.
ENDIF.
*End of Addition by TMMANISHT on 12th April 2014
* ENDIF.
IF flag1 IS INITIAL.
IF lv_lt_leg_adj IS INITIAL.
wa_bimd-pre_mtr_rdng = wa_tdoc-i_zwstvor.
wa_bimd-curr_mtr_rdng = wa_tdoc-i_zwstand.
ELSEIF wa_tdoc-zwnummer = 2.
wa_bimd-pre_mtr_rdng = wa_tdoc-i_zwstvor.
wa_bimd-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
ENDIF.

wa_bimd-pre_mtr_rdng_reason = wa_tdoc-ablesgrv.
wa_bimd-pre_mtr_type = wa_tdoc-istablartva.
IF flag1 IS INITIAL.
IF lv_lt_leg_adj IS INITIAL.
IF last_date IS INITIAL.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab.
ELSE.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab - 1.
ENDIF.
ELSEIF wa_tdoc-zwnummer = 2.
IF last_date IS INITIAL.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab.
ELSE.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab - 1.
ENDIF.
ENDIF.
ENDIF.
IF lv_lt_leg_adj IS INITIAL.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-bis.
ELSEIF wa_tdoc-zwnummer = 2.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-bis.
ENDIF.
wa_bimd-uom = wa_tdoc-massbill.

IF lt_zbibd-meter_arrangement = 'LT Side'.


IF wa_tdoc-zwnummer = '001' OR wa_tdoc-zwnummer ='006'.
wa_bimd-trnsformr_loss = wa_bimd-billed_consum * '0.03'.
ENDIF.
ENDIF.
IF wa_bimd-trnsformr_loss IS NOT INITIAL.
wa_bimd-total_consum = wa_bimd-billed_consum + wa_bimd-
trnsformr_loss.
ELSE.
wa_bimd-total_consum = wa_bimd-billed_consum.
ENDIF.

IF cnt = 1.
APPEND wa_bimd TO gt_bimd.
ELSE.

READ TABLE gt_bimd INTO wa_bimd1 WITH KEY meter_no = wa_tdoc-geraet


register = wa_tdoc-
zwnummer.
IF sy-subrc = 0.
IF wa_bimd1-curr_mtr_rdng_date LT wa_bimd-curr_mtr_rdng_date.
wa_bimd1-curr_mtr_rdng_date = wa_bimd-curr_mtr_rdng_date.
IF wa_tdoc-ablesgr = '22' AND wa_tdoc-ablesgrv = '10'.
ELSE.
wa_bimd1-curr_mtr_rdng = wa_bimd-curr_mtr_rdng.
ENDIF.
IF pl_adj = 'X' AND lv_lt_leg_adj = ''.
wa_bimd1-billed_consum = wa_bimd-billed_consum.
wa_bimd1-rdng_diff = wa_bimd-rdng_diff.
ENDIF.
ENDIF.
IF pl_adj = 'X' AND lv_lt_leg_adj = ''." AND wa_tdoc-
istablart <> '03'.
IF wa_tdoc-ablesgr = '14'.
wa_bimd1-pre_mtr_rdng_date = wa_tdoc-ab - 1.
ELSEIF wa_bimd1-pre_mtr_rdng_date LT wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
ELSEIF wa_bimd1-pre_mtr_rdng_date GT wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
IF wa_tdoc-ablesgr = '22' AND wa_tdoc-ablesgrv = '10'.
ELSE.
wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
ENDIF.
IF lv_lt_leg_adj = 'X'.
IF wa_bimd1-pre_mtr_rdng_date LT wa_tdoc-ab.
wa_bimd1-pre_mtr_rdng_date = wa_tdoc-ab. "wa_bimd-
pre_mtr_rdng_date.
* wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
ENDIF.
* NEW CHANGES DONE BY KIRAN
*Multiple months consumption addition and for Leg Adj cases
IF lv_lt_leg_adj = 'X'.
wa_bimd1-billed_consum = wa_bimd1-billed_consum.
wa_bimd1-rdng_diff = wa_bimd1-rdng_diff.
ELSEIF pl_adj = 'X'." AND wa_tdoc-istablart <> '03'.
ELSE.
wa_bimd1-billed_consum = wa_bimd1-billed_consum +
wa_bimd-billed_consum.
wa_bimd1-rdng_diff = wa_bimd1-rdng_diff +
wa_bimd-rdng_diff.
ENDIF.
wa_bimd1-mnf_srl_no = wa_bimd-mnf_srl_no.
**********new changes by Kiran
IF wa_bimd1-curr_mtr_rdng_reason = '22' AND wa_tdoc-zwnummer = 1.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
IF wa_tdoc-zwnummer = 2.
IF wa_bimd1-curr_mtr_rdng > wa_tdoc-i_zwstand.
ELSE.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
ENDIF.
*********end of new changes
MODIFY gt_bimd FROM wa_bimd1 INDEX sy-tabix.
ELSE.
APPEND wa_bimd TO gt_bimd.
ENDIF.
* ENDIF.
ENDIF.
CLEAR: wa_bimd.
*********************METER DETAILS FOR LT* AND PUBWW CATEGORIES
ELSEIF lt_zbibd-tariff_type+0(2) = 'LT' OR lt_zbibd-
tariff_type+0(2) = 'PU'.
IF lv_end_date GT '20170401'.
lv_lt_flag = 'X'.
CLEAR: flag1,it1_eabl,wa1_eabl.
cnt = cnt + 1.
IF wa_tdoc-zwnummer = '1' OR wa_tdoc-zwnummer = '2' OR
wa_tdoc-zwnummer = '3' OR wa_tdoc-zwnummer = '4' OR
wa_tdoc-zwnummer = '5' OR wa_tdoc-zwnummer = '6'.
IF wa_tdoc-ablhinw = 'PL' OR wa_tdoc-ablhinw = 'NB' OR
wa_tdoc-ablhinw = 'UF' OR wa_tdoc-ablhinw = 'MD' OR
wa_tdoc-ablhinw = 'MB' OR wa_tdoc-ablhinw = 'MM' OR
wa_tdoc-ablhinw = 'NF' OR wa_tdoc-ablhinw = 'NM' OR
wa_tdoc-ablhinw = 'RN' OR wa_tdoc-ablhinw = 'UB'.

CLEAR it1_eabl.
SELECT zwnummer adat zz_v_zwstand zz_n_zwstand FROM eabl INTO T
ABLE it1_eabl
WHERE equnr = wa_tdoc-geraet AND adat LE lv_dt1.
SORT it1_eabl BY register DESCENDING adat DESCENDING.
DELETE it1_eabl WHERE register = '001'.
READ TABLE it1_eabl INTO wa1_eabl INDEX 1.
IF sy-subrc = 0 AND wa_tdoc-zwnummer = '3'.
wa_bimd-pre_mtr_rdng = wa1_eabl-zz_v_zwstand.
wa_bimd-curr_mtr_rdng = wa1_eabl-zz_v_zwstand.
ENDIF.
DELETE it1_eabl WHERE register EQ '002'.
READ TABLE it1_eabl INTO wa1_eabl INDEX 2.
wa_bimd-pre_mtr_rdng_date = wa1_eabl-adat.

***********Added by Kiran TR
IF wa_tdoc-zwnummer = '2' AND wa_tdoc-ablhinw = 'MD'.
wa_bimd-pre_mtr_rdng = lt_zbibd-contract_demand_kw.
wa_bimd-curr_mtr_rdng = lt_zbibd-contract_demand_kw.
ENDIF.
***********End of addition by Kiran TR
flag1 = 'X'.
ELSE.
IF lv_lt_leg_adj = 'X' AND wa_tdoc-zwnummer = '1'.
lv_anlage = v_anlage.
CLEAR: it_eabl5,it_eablg5.

CALL FUNCTION 'ISU_DB_EABL_SELECT_INSTALL'


EXPORTING
x_anlage = lv_anlage
TABLES
ty_eabl = it_eabl5
ty_eablg = it_eablg5
EXCEPTIONS
not_found = 1
system_error = 2
not_qualified = 3
invalid_interval = 4
path_invalid = 5
date_invalid = 6
internal_error = 7
OTHERS = 8.
* ENDIF.
*******************added by TMKIRAND TR B10K902772************************
*******
IF it_eabl9 IS INITIAL.
it_eabl9 = it_eabl5.
ENDIF.
IF it_eablg9 IS INITIAL.
it_eablg9 = it_eablg5.
ENDIF.
**********Logic to incorporate First and Last bill in same bill
IF lt_zbibd-finalbill = 'X'.
SORT it_eablg5 BY adatsoll DESCENDING.
LOOP AT it_eablg5 INTO wa_eablg5 WHERE ablesgr = '03'.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = wa_
eablg5-ablbelnr.
IF sy-subrc = 0.
wa_bimd-curr_mtr_rdng_date = wa_eabl5-adat.
wa_bimd-curr_mtr_rdng = wa_eabl5-v_zwstand.
ENDIF.
READ TABLE it_eablg5 INTO wa_eablg5 WITH KEY ablesgr = '0
6'.
IF sy-subrc = 0.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = w
a_eablg5-ablbelnr.
IF sy-subrc = 0.
wa_bimd-pre_mtr_rdng_date = wa_eabl5-adat.
wa_bimd-pre_mtr_rdng = wa_eabl5-v_zwstand.
ENDIF.
ENDIF.
ENDLOOP.
wa_bimd-rdng_diff = wa_bimd-curr_mtr_rdng - wa_bimd-
pre_mtr_rdng.
IF wa_bimd-rdng_diff LT 0.
CLEAR: wa_bimd-rdng_diff,wa_bimd-pre_mtr_rdng.
ENDIF.
wa_bimd-billed_consum = wa_bimd-rdng_diff.
wa_bimd-mult_fac = '1.00'.
ELSE.
*******************Ended by TMKIRAND TR B10K902772************************
*******
LOOP AT it_eablg5 INTO wa_eablg5.
IF wa_eablg5-ablesgr = '01' OR wa_eablg5-ablesgr = '06'.
IF wa_eablg5-adatsoll > lv_adatsoll.
DELETE it_eablg5 WHERE ablbelnr = wa_eablg5-
ablbelnr AND
ablesgr = wa_eablg5-ablesgr .
ENDIF.
ELSE.
DELETE it_eablg5 WHERE ablbelnr = wa_eablg5-
ablbelnr AND
ablesgr = wa_eablg5-ablesgr.
ENDIF.
ENDLOOP.
SORT it_eablg5 BY adatsoll DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_eablg5 COMPARING adatsol
l.
DELETE it_eablg5 WHERE adatsoll LT lv_ab_date AND adatsoll
GT lv_end_date.
* DELETE it_eablg5 WHERE adatsoll GT lv_end_date.
CLEAR: lv_indx,lwa_eablg5.
LOOP AT it_eablg5 INTO wa_eablg5.
* lv_indx = lv_indx + 1.
lwa_eablg5 = wa_eablg5.
AT FIRST.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = l
wa_eablg5-ablbelnr.
IF sy-subrc = 0.
wa_bimd-curr_mtr_rdng_date = wa_eabl5-adat.
wa_bimd-curr_mtr_rdng = wa_eabl5-v_zwstand.
ENDIF.
ENDAT.

AT LAST.
* IF wa_eablg5-ablesgr = '09'.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = l
wa_eablg5-ablbelnr.
* ablhinw = 'OK'.
IF sy-subrc = 0.
wa_bimd-pre_mtr_rdng_date = wa_eabl5-adat. "lv_mtr_ab
wa_bimd-pre_mtr_rdng = wa_eabl5-zz_v_zwstand.
* EXIT.
ENDIF.
* ENDIF.
ENDAT.
ENDLOOP.
* ENDIF.
wa_bimd-rdng_diff = wa_bimd-curr_mtr_rdng - wa_bimd-
pre_mtr_rdng.
wa_bimd-billed_consum = wa_bimd-rdng_diff.
wa_bimd-mult_fac = '1.00'.

ENDIF.
ELSE.
IF wa_tdoc-ablesgr = '01'.
IF wa_tdoc-ablesgrv = '06' OR
wa_tdoc-ablesgrv = '21' OR
wa_tdoc-ablesgrv = '14'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSEIF wa_tdoc-ablesgrv = '01'.
IF wa_tdoc-sc_belnr IS INITIAL.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSE.
wa_bimd-billed_consum = wa_bimd-
billed_consum + wa_tdoc-i_abrmenge.
IF wa_tdoc-i_abrmenge LT 0.
wa_bimd-rdng_diff = wa_bimd-rdng_diff - wa_tdoc-
i_zwstdiff.
ELSE.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-
i_zwstdiff.
ENDIF.
ENDIF.
ELSEIF wa_tdoc-ablesgrv = '11' AND wa_tdoc-zwnummer = '3'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '22' OR wa_tdoc-ablesgr = '14'
OR wa_tdoc-ablesgr = '16'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '06'
OR wa_tdoc-ablesgrv = '14' OR wa_tdoc-ablesgrv = '11'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-
i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '03'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '14'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ENDIF.
******added by KiranD B10K902752*****************************
ELSEIF wa_tdoc-ablesgr = '10'.
IF wa_tdoc-ablesgrv = '01'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-
i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
******end of addition by KiranD B10K902752*******************
ENDIF.
ENDIF.
ENDIF.
ENDIF.

wa_bimd-invoiceno = lt_zbibd-invoiceno.
wa_bimd-contract_acc_no = lt_zbibd-contract_account.
SELECT SINGLE serge FROM equi INTO wa_bimd-
mnf_srl_no WHERE equnr = wa_tdoc-geraet.
wa_bimd-meter_no = wa_tdoc-geraet.
wa_bimd-register = wa_tdoc-zwnummer.
wa_bimd-bill_month = lt_zbibd-bill_month.
wa_bimd-date_of_invoice = lt_zbibd-date_of_invoice.
wa_bimd-meter_status = wa_tdoc-ablhinw.
wa_bimd-cur_mtr_type = wa_tdoc-istablart.
wa_bimd-curr_mtr_rdng_reason = wa_tdoc-ablesgr.
wa_bimd-billed_mtr_rdng = wa_tdoc-i_zwstndab.
* IF lv_lt_leg_adj = 'X'.
* ELSE.
wa_bimd-mult_fac = wa_tdoc-i_abrmenge / wa_tdoc-i_zwstdiff.
*Start of Addition by TMMANISHT on 12th April 2014
IF wa_bimd-mult_fac = '0.00'.
wa_bimd-mult_fac = '1.00'.
ENDIF.
*End of Addition by TMMANISHT on 12th April 2014
* ENDIF.
IF flag1 IS INITIAL.
IF lv_lt_leg_adj IS INITIAL.
wa_bimd-pre_mtr_rdng = wa_tdoc-i_zwstvor.
wa_bimd-curr_mtr_rdng = wa_tdoc-i_zwstand.
ELSEIF wa_tdoc-zwnummer = 2.
wa_bimd-pre_mtr_rdng = wa_tdoc-i_zwstvor.
wa_bimd-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
ENDIF.

wa_bimd-pre_mtr_rdng_reason = wa_tdoc-ablesgrv.
wa_bimd-pre_mtr_type = wa_tdoc-istablartva.
IF flag1 IS INITIAL.
IF lv_lt_leg_adj IS INITIAL.
IF last_date IS INITIAL.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab.
ELSE.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab - 1.
IF wa_tdoc-zwnummer = '3' AND wa_tdoc-ablesgrv = '11'.
wa_bimd-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date + 1.
ENDIF.
ENDIF.
ELSEIF wa_tdoc-zwnummer = 2.
IF last_date IS INITIAL.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab.
ELSE.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab - 1.
ENDIF.
ENDIF.
ENDIF.
IF lv_lt_leg_adj IS INITIAL.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-bis.
ELSEIF wa_tdoc-zwnummer = 2.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-bis.
ENDIF.
wa_bimd-uom = wa_tdoc-massbill.

IF lt_zbibd-meter_arrangement = 'LT Side'.


IF wa_tdoc-zwnummer = '001' OR wa_tdoc-zwnummer ='006'.
wa_bimd-trnsformr_loss = wa_bimd-billed_consum * '0.03'.
ENDIF.
ENDIF.
IF wa_bimd-trnsformr_loss IS NOT INITIAL.
wa_bimd-total_consum = wa_bimd-billed_consum + wa_bimd-
trnsformr_loss.
ELSE.
wa_bimd-total_consum = wa_bimd-billed_consum.
ENDIF.

IF cnt = 1.
APPEND wa_bimd TO gt_bimd.
ELSE.
READ TABLE gt_bimd INTO wa_bimd1 WITH KEY meter_no = wa_tdoc-
geraet
register = wa_tdoc-
zwnummer.
IF sy-subrc = 0.
IF wa_bimd1-curr_mtr_rdng_date LT wa_bimd-curr_mtr_rdng_date.
wa_bimd1-curr_mtr_rdng_date = wa_bimd-curr_mtr_rdng_date.
IF wa_tdoc-ablesgr = '22' AND wa_tdoc-ablesgrv = '10'.
ELSE.
wa_bimd1-curr_mtr_rdng = wa_bimd-curr_mtr_rdng.
ENDIF.
IF pl_adj = 'X' AND lv_lt_leg_adj = ''.
wa_bimd1-billed_consum = wa_bimd-billed_consum.
wa_bimd1-rdng_diff = wa_bimd-rdng_diff.
ENDIF.
ENDIF.
IF pl_adj = 'X' AND lv_lt_leg_adj = ''.
IF wa_tdoc-ablesgr = '14'.
wa_bimd1-pre_mtr_rdng_date = wa_tdoc-ab - 1.
ELSEIF wa_bimd1-pre_mtr_rdng_date LT wa_bimd-
pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
ELSEIF wa_bimd1-pre_mtr_rdng_date GT wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
IF wa_tdoc-ablesgr = '22' AND wa_tdoc-ablesgrv = '10'.
ELSE.
wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
ENDIF.
IF lv_lt_leg_adj = 'X'.
IF wa_bimd1-pre_mtr_rdng_date LT wa_tdoc-ab.
wa_bimd1-pre_mtr_rdng_date = wa_tdoc-ab. "wa_bimd-
pre_mtr_rdng_date.
* wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
ENDIF.
* NEW CHANGES DONE BY KIRAN
*Multiple months consumption addition and for Leg Adj cases
IF lv_lt_leg_adj = 'X'.
wa_bimd1-billed_consum = wa_bimd1-billed_consum.
wa_bimd1-rdng_diff = wa_bimd1-rdng_diff.
ELSEIF pl_adj = 'X'. "lt_zbibd-other_charges IS NOT INITIAL.
ELSE.
wa_bimd1-billed_consum = wa_bimd1-billed_consum +
wa_bimd-billed_consum.
wa_bimd1-rdng_diff = wa_bimd1-rdng_diff +
wa_bimd-rdng_diff.
ENDIF.
wa_bimd1-mnf_srl_no = wa_bimd-mnf_srl_no.
**********new changes by Kiran
IF wa_bimd1-curr_mtr_rdng_reason = '22' AND wa_tdoc-
zwnummer = 1.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
IF wa_tdoc-zwnummer = 2.
IF wa_bimd1-curr_mtr_rdng > wa_tdoc-i_zwstand.
ELSE.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
ENDIF.
*********end of new changes
MODIFY gt_bimd FROM wa_bimd1 INDEX sy-tabix.
ELSE.
APPEND wa_bimd TO gt_bimd.
ENDIF.
* ENDIF.
ENDIF.
CLEAR: wa_bimd.
ELSE. " earlier to 01.04.2017

lv_lt_flag = 'X'.
CLEAR: flag1,it1_eabl,wa1_eabl.
cnt = cnt + 1.
IF wa_tdoc-zwnummer = '1' OR wa_tdoc-zwnummer = '2' OR
wa_tdoc-zwnummer = '3' OR wa_tdoc-zwnummer = '4' OR
wa_tdoc-zwnummer = '5' OR wa_tdoc-zwnummer = '6'.
IF wa_tdoc-ablhinw = 'PL' OR wa_tdoc-ablhinw = 'NB' OR
wa_tdoc-ablhinw = 'UF' OR wa_tdoc-ablhinw = 'MD' OR
wa_tdoc-ablhinw = 'MB' OR wa_tdoc-ablhinw = 'MM' OR
wa_tdoc-ablhinw = 'NF' OR wa_tdoc-ablhinw = 'NM' OR
wa_tdoc-ablhinw = 'RN' OR wa_tdoc-ablhinw = 'UB'.

CLEAR it1_eabl.
SELECT zwnummer adat zz_v_zwstand zz_n_zwstand FROM eabl INTO T
ABLE it1_eabl
WHERE equnr = wa_tdoc-
geraet AND adat LE lv_dt1."wa_tdoc-bis.
SORT it1_eabl BY register ASCENDING adat DESCENDING.
READ TABLE it1_eabl INTO wa1_eabl INDEX 1.
IF sy-subrc = 0 AND wa_tdoc-zwnummer = '1'.
wa_bimd-pre_mtr_rdng = wa1_eabl-zz_v_zwstand.
wa_bimd-curr_mtr_rdng = wa1_eabl-zz_v_zwstand.
ENDIF.
DELETE it1_eabl WHERE register EQ '002'.
READ TABLE it1_eabl INTO wa1_eabl INDEX 2.
wa_bimd-pre_mtr_rdng_date = wa1_eabl-adat.

***********Added by Kiran TR
IF wa_tdoc-zwnummer = '2' AND wa_tdoc-ablhinw = 'MD'.
wa_bimd-pre_mtr_rdng = lt_zbibd-contract_demand_kw.
wa_bimd-curr_mtr_rdng = lt_zbibd-contract_demand_kw.
ENDIF.
***********End of addition by Kiran TR
flag1 = 'X'.
ELSE.
IF lv_lt_leg_adj = 'X' AND wa_tdoc-zwnummer = '1'.
lv_anlage = v_anlage.
CLEAR: it_eabl5,it_eablg5.

CALL FUNCTION 'ISU_DB_EABL_SELECT_INSTALL'


EXPORTING
x_anlage = lv_anlage
TABLES
ty_eabl = it_eabl5
ty_eablg = it_eablg5
EXCEPTIONS
not_found = 1
system_error = 2
not_qualified = 3
invalid_interval = 4
path_invalid = 5
date_invalid = 6
internal_error = 7
OTHERS = 8.
* ENDIF.
*******************added by TMKIRAND TR B10K902772************************
*******
IF it_eabl9 IS INITIAL.
it_eabl9 = it_eabl5.
ENDIF.
IF it_eablg9 IS INITIAL.
it_eablg9 = it_eablg5.
ENDIF.

**********Logic to incorporate First and Last bill in same bill


IF lt_zbibd-finalbill = 'X'.
SORT it_eablg5 BY adatsoll DESCENDING.
LOOP AT it_eablg5 INTO wa_eablg5 WHERE ablesgr = '03'.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = wa_
eablg5-ablbelnr.
IF sy-subrc = 0.
wa_bimd-curr_mtr_rdng_date = wa_eabl5-adat.
wa_bimd-curr_mtr_rdng = wa_eabl5-v_zwstand.
ENDIF.
READ TABLE it_eablg5 INTO wa_eablg5 WITH KEY ablesgr = '0
6'.
IF sy-subrc = 0.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = w
a_eablg5-ablbelnr.
IF sy-subrc = 0.
wa_bimd-pre_mtr_rdng_date = wa_eabl5-adat.
wa_bimd-pre_mtr_rdng = wa_eabl5-v_zwstand.
ENDIF.
ENDIF.
ENDLOOP.
wa_bimd-rdng_diff = wa_bimd-curr_mtr_rdng - wa_bimd-
pre_mtr_rdng.
IF wa_bimd-rdng_diff LT 0.
CLEAR: wa_bimd-rdng_diff,wa_bimd-pre_mtr_rdng.
ENDIF.
wa_bimd-billed_consum = wa_bimd-rdng_diff.
wa_bimd-mult_fac = '1.00'.
ELSE.
*******************Ended by TMKIRAND TR B10K902772************************
*******
LOOP AT it_eablg5 INTO wa_eablg5.
IF wa_eablg5-ablesgr = '01' OR wa_eablg5-ablesgr = '06'.
IF wa_eablg5-adatsoll > lv_adatsoll.
DELETE it_eablg5 WHERE ablbelnr = wa_eablg5-
ablbelnr AND
ablesgr = wa_eablg5-ablesgr .
ENDIF.
ELSE.
DELETE it_eablg5 WHERE ablbelnr = wa_eablg5-
ablbelnr AND
ablesgr = wa_eablg5-ablesgr.
ENDIF.
ENDLOOP.
SORT it_eablg5 BY adatsoll DESCENDING.
DELETE ADJACENT DUPLICATES FROM it_eablg5 COMPARING adatsol
l.
DELETE it_eablg5 WHERE adatsoll LT lv_ab_date AND adatsoll
GT lv_end_date.
* DELETE it_eablg5 WHERE adatsoll GT lv_end_date.
CLEAR: lv_indx,lwa_eablg5.
LOOP AT it_eablg5 INTO wa_eablg5.
* lv_indx = lv_indx + 1.
lwa_eablg5 = wa_eablg5.
AT FIRST.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = l
wa_eablg5-ablbelnr.
IF sy-subrc = 0.
wa_bimd-curr_mtr_rdng_date = wa_eabl5-adat.
wa_bimd-curr_mtr_rdng = wa_eabl5-v_zwstand.
ENDIF.
ENDAT.

AT LAST.
* IF wa_eablg5-ablesgr = '09'.
READ TABLE it_eabl5 INTO wa_eabl5 WITH KEY ablbelnr = l
wa_eablg5-ablbelnr.
* ablhinw = 'OK'.
IF sy-subrc = 0.
wa_bimd-pre_mtr_rdng_date = wa_eabl5-adat. "lv_mtr_ab
wa_bimd-pre_mtr_rdng = wa_eabl5-zz_v_zwstand.
* EXIT.
ENDIF.
* ENDIF.
ENDAT.
ENDLOOP.
* ENDIF.
wa_bimd-rdng_diff = wa_bimd-curr_mtr_rdng - wa_bimd-
pre_mtr_rdng.
wa_bimd-billed_consum = wa_bimd-rdng_diff.
wa_bimd-mult_fac = '1.00'.

ENDIF.
ELSE.
IF wa_tdoc-ablesgr = '01'.
IF wa_tdoc-ablesgrv = '06' OR
wa_tdoc-ablesgrv = '21' OR
wa_tdoc-ablesgrv = '14'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSEIF wa_tdoc-ablesgrv = '01'.
IF wa_tdoc-sc_belnr IS INITIAL.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSE.
wa_bimd-billed_consum = wa_bimd-
billed_consum + wa_tdoc-i_abrmenge.
IF wa_tdoc-i_abrmenge LT 0.
wa_bimd-rdng_diff = wa_bimd-rdng_diff - wa_tdoc-
i_zwstdiff.
ELSE.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-
i_zwstdiff.
ENDIF.
ENDIF.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '22' OR wa_tdoc-ablesgr = '14'
OR wa_tdoc-ablesgr = '16'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '06'
OR wa_tdoc-ablesgrv = '14' OR wa_tdoc-ablesgrv = '11'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-
i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '03'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '14'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ENDIF.
******added by KiranD B10K902752*****************************
ELSEIF wa_tdoc-ablesgr = '10'.
IF wa_tdoc-ablesgrv = '01'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-
i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
******end of addition by KiranD B10K902752*******************
ENDIF.
ENDIF.
ENDIF.
ENDIF.

wa_bimd-invoiceno = lt_zbibd-invoiceno.
wa_bimd-contract_acc_no = lt_zbibd-contract_account.
SELECT SINGLE serge FROM equi INTO wa_bimd-
mnf_srl_no WHERE equnr = wa_tdoc-geraet.
wa_bimd-meter_no = wa_tdoc-geraet.
wa_bimd-register = wa_tdoc-zwnummer.
wa_bimd-bill_month = lt_zbibd-bill_month.
wa_bimd-date_of_invoice = lt_zbibd-date_of_invoice.
wa_bimd-meter_status = wa_tdoc-ablhinw.
wa_bimd-cur_mtr_type = wa_tdoc-istablart.
wa_bimd-curr_mtr_rdng_reason = wa_tdoc-ablesgr.
wa_bimd-billed_mtr_rdng = wa_tdoc-i_zwstndab.
* IF lv_lt_leg_adj = 'X'.
* ELSE.
wa_bimd-mult_fac = wa_tdoc-i_abrmenge / wa_tdoc-i_zwstdiff.
*Start of Addition by TMMANISHT on 12th April 2014
IF wa_bimd-mult_fac = '0.00'.
wa_bimd-mult_fac = '1.00'.
ENDIF.
*End of Addition by TMMANISHT on 12th April 2014
* ENDIF.
IF flag1 IS INITIAL.
IF lv_lt_leg_adj IS INITIAL.
wa_bimd-pre_mtr_rdng = wa_tdoc-i_zwstvor.
wa_bimd-curr_mtr_rdng = wa_tdoc-i_zwstand.
ELSEIF wa_tdoc-zwnummer = 2.
wa_bimd-pre_mtr_rdng = wa_tdoc-i_zwstvor.
wa_bimd-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
ENDIF.

wa_bimd-pre_mtr_rdng_reason = wa_tdoc-ablesgrv.
wa_bimd-pre_mtr_type = wa_tdoc-istablartva.
IF flag1 IS INITIAL.
IF lv_lt_leg_adj IS INITIAL.
IF last_date IS INITIAL.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab.
ELSE.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab - 1.
ENDIF.
ELSEIF wa_tdoc-zwnummer = 2.
IF last_date IS INITIAL.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab.
ELSE.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab - 1.
ENDIF.
ENDIF.
ENDIF.
IF lv_lt_leg_adj IS INITIAL.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-bis.
ELSEIF wa_tdoc-zwnummer = 2.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-bis.
ENDIF.
wa_bimd-uom = wa_tdoc-massbill.

IF lt_zbibd-meter_arrangement = 'LT Side'.


IF wa_tdoc-zwnummer = '001' OR wa_tdoc-zwnummer ='006'.
wa_bimd-trnsformr_loss = wa_bimd-billed_consum * '0.03'.
ENDIF.
ENDIF.
IF wa_bimd-trnsformr_loss IS NOT INITIAL.
wa_bimd-total_consum = wa_bimd-billed_consum + wa_bimd-
trnsformr_loss.
ELSE.
wa_bimd-total_consum = wa_bimd-billed_consum.
ENDIF.

IF cnt = 1.
APPEND wa_bimd TO gt_bimd.
ELSE.

READ TABLE gt_bimd INTO wa_bimd1 WITH KEY meter_no = wa_tdoc-


geraet
register = wa_tdoc-
zwnummer.
IF sy-subrc = 0.
IF wa_bimd1-curr_mtr_rdng_date LT wa_bimd-curr_mtr_rdng_date.
wa_bimd1-curr_mtr_rdng_date = wa_bimd-curr_mtr_rdng_date.
IF wa_tdoc-ablesgr = '22' AND wa_tdoc-ablesgrv = '10'.
ELSE.
wa_bimd1-curr_mtr_rdng = wa_bimd-curr_mtr_rdng.
ENDIF.
IF pl_adj = 'X' AND lv_lt_leg_adj = ''.
wa_bimd1-billed_consum = wa_bimd-billed_consum.
wa_bimd1-rdng_diff = wa_bimd-rdng_diff.
ENDIF.
ENDIF.
IF pl_adj = 'X' AND lv_lt_leg_adj = ''.
IF wa_tdoc-ablesgr = '14'.
wa_bimd1-pre_mtr_rdng_date = wa_tdoc-ab - 1.
ELSEIF wa_bimd1-pre_mtr_rdng_date LT wa_bimd-
pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
ELSEIF wa_bimd1-pre_mtr_rdng_date GT wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
IF wa_tdoc-ablesgr = '22' AND wa_tdoc-ablesgrv = '10'.
ELSE.
wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
ENDIF.
IF lv_lt_leg_adj = 'X'.
IF wa_bimd1-pre_mtr_rdng_date LT wa_tdoc-ab.
wa_bimd1-pre_mtr_rdng_date = wa_tdoc-ab. "wa_bimd-
pre_mtr_rdng_date.
* wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
ENDIF.
* NEW CHANGES DONE BY KIRAN
*Multiple months consumption addition and for Leg Adj cases
IF lv_lt_leg_adj = 'X'.
wa_bimd1-billed_consum = wa_bimd1-billed_consum.
wa_bimd1-rdng_diff = wa_bimd1-rdng_diff.
ELSEIF pl_adj = 'X'. "lt_zbibd-other_charges IS NOT INITIAL.
ELSE.
wa_bimd1-billed_consum = wa_bimd1-billed_consum +
wa_bimd-billed_consum.
wa_bimd1-rdng_diff = wa_bimd1-rdng_diff +
wa_bimd-rdng_diff.
ENDIF.
wa_bimd1-mnf_srl_no = wa_bimd-mnf_srl_no.
**********new changes by Kiran
IF wa_bimd1-curr_mtr_rdng_reason = '22' AND wa_tdoc-
zwnummer = 1.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
IF wa_tdoc-zwnummer = 2.
IF wa_bimd1-curr_mtr_rdng > wa_tdoc-i_zwstand.
ELSE.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
ENDIF.
*********end of new changes
MODIFY gt_bimd FROM wa_bimd1 INDEX sy-tabix.
ELSE.
APPEND wa_bimd TO gt_bimd.
ENDIF.
* ENDIF.
ENDIF.
CLEAR: wa_bimd.
ENDIF.
*******************METER DETAILS FOR HT CONSUMNER**************************
ELSE.
IF lv_daats_ab GE '20160401'.
* PERFORM meter_details_new_tariff.
CLEAR: flag1,it1_eabl,wa1_eabl.
cnt = cnt + 1.
IF wa_tdoc-zwnummer = '5' OR wa_tdoc-zwnummer = '6' OR
wa_tdoc-zwnummer = '8' OR wa_tdoc-zwnummer = '9' OR
wa_tdoc-zwnummer = '10' OR wa_tdoc-zwnummer = '1' OR
wa_tdoc-zwnummer = '11' OR wa_tdoc-zwnummer = '12'.

IF wa_tdoc-ablesgr = '01'.
IF wa_tdoc-ablesgrv = '06' OR
wa_tdoc-ablesgrv = '21' OR
wa_tdoc-ablesgrv = '14' OR
wa_tdoc-ablesgrv = '17' OR
wa_tdoc-ablesgrv = '11'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSEIF wa_tdoc-ablesgrv = '01'.
IF wa_tdoc-sc_belnr IS INITIAL.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSE.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
IF wa_tdoc-i_abrmenge LT 0.
wa_bimd-rdng_diff = wa_bimd-rdng_diff - wa_tdoc-
i_zwstdiff.
ELSE.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-
i_zwstdiff.
ENDIF.
ENDIF.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '22' OR wa_tdoc-ablesgr = '14'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '06'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '03'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '14'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '10'.
IF wa_tdoc-ablesgrv = '01'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
ENDIF.
ENDIF.

wa_bimd-invoiceno = lt_zbibd-invoiceno.
wa_bimd-contract_acc_no = lt_zbibd-contract_account.
SELECT SINGLE serge herst FROM equi INTO (wa_bimd-
mnf_srl_no,wa_bimd-meter_make)
WHERE equnr = wa_tdoc-
equnr. "geraet.
wa_bimd-meter_no = wa_tdoc-geraet.
wa_bimd-register = wa_tdoc-zwnummer.
wa_bimd-bill_month = lt_zbibd-bill_month.
wa_bimd-date_of_invoice = lt_zbibd-date_of_invoice.
wa_bimd-meter_status = wa_tdoc-ablhinw.
wa_bimd-cur_mtr_type = wa_tdoc-istablart.
wa_bimd-curr_mtr_rdng_reason = wa_tdoc-ablesgr.
wa_bimd-billed_mtr_rdng = wa_tdoc-i_zwstndab.
wa_bimd-mult_fac = wa_tdoc-i_abrmenge / wa_tdoc-i_zwstdiff.
IF wa_tdoc-zwnummer = '001'.
lv_mf = wa_bimd-mult_fac.
ENDIF.
IF wa_bimd-mult_fac = '0.00'.
wa_bimd-mult_fac = lv_mf.
ENDIF.
*Start of Addition by TMMANISHT on 12th April 2014
IF wa_bimd-mult_fac = '0.00'.
wa_bimd-mult_fac = '1.00'.
ENDIF.
*End of Addition by TMMANISHT on 12th April 2014
IF flag1 IS INITIAL.
wa_bimd-pre_mtr_rdng = wa_tdoc-i_zwstvor.
wa_bimd-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.

IF wa_tdoc-massbill = 'KVA' OR wa_tdoc-massbill = 'KW'.


CLEAR: wa_bimd-pre_mtr_rdng.
ENDIF.
wa_bimd-pre_mtr_rdng_reason = wa_tdoc-ablesgrv.
wa_bimd-pre_mtr_type = wa_tdoc-istablartva.
IF flag1 IS INITIAL.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab.
ENDIF.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-bis.
IF wa_tdoc-zwnummer ='006' AND wa_tdoc-ablesgr = '17 '.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-datum2.
ENDIF.
wa_bimd-uom = wa_tdoc-massbill.

IF lt_zbibd-meter_arrangement = 'LT Side'.


* IF wa_tdoc-zwnummer = '001' OR wa_tdoc-zwnummer ='006'.
IF wa_tdoc-zwnummer NE '006'.
wa_bimd-trnsformr_loss = wa_bimd-billed_consum * '0.03'.
ENDIF.
ENDIF.
IF wa_bimd-trnsformr_loss IS NOT INITIAL.
wa_bimd-total_consum = wa_bimd-billed_consum + wa_bimd-
trnsformr_loss.
ELSE.
wa_bimd-total_consum = wa_bimd-billed_consum.
ENDIF.

IF wa_tdoc-zwnummer = '001'.
IF wa_tdoc-ablesgrv NE '06'. "Added on 22nd March 2014
wa_bimd-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date - 1.
ENDIF. "Added on 22nd March 2014
ENDIF.
IF cnt = 1.
APPEND wa_bimd TO gt_bimd.
ELSE.

READ TABLE gt_bimd INTO wa_bimd1 WITH KEY meter_no = wa_tdoc-


geraet
register = wa_tdoc-
zwnummer.
IF sy-subrc = 0.
IF wa_bimd1-curr_mtr_rdng_date LT wa_bimd-curr_mtr_rdng_date.
wa_bimd1-curr_mtr_rdng_date = wa_bimd-curr_mtr_rdng_date.
wa_bimd1-curr_mtr_rdng = wa_bimd-curr_mtr_rdng.
wa_bimd1-mult_fac = wa_bimd-mult_fac.
wa_bimd1-trnsformr_loss = wa_bimd-trnsformr_loss.
wa_bimd1-total_consum = wa_bimd-total_consum.
ENDIF.
IF wa_bimd1-pre_mtr_rdng_date GT wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
IF wa_tdoc-massbill NE 'KVA'.
wa_bimd1-billed_consum = wa_bimd1-billed_consum + wa_bimd-
billed_consum.
wa_bimd1-rdng_diff = wa_bimd1-rdng_diff + wa_bimd-rdng_diff.
ENDIF.
wa_bimd1-mnf_srl_no = wa_bimd-mnf_srl_no.
**********new changes by Kiran
IF wa_bimd1-curr_mtr_rdng_reason = '22' AND wa_tdoc-
zwnummer = 1.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
IF wa_tdoc-zwnummer = 2.
IF wa_bimd1-curr_mtr_rdng > wa_tdoc-i_zwstand.
ELSE.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
ENDIF.
*********end of new changes
MODIFY gt_bimd FROM wa_bimd1 INDEX sy-tabix.
ELSE.
APPEND wa_bimd TO gt_bimd.
ENDIF.
* ENDIF.
ENDIF.
CLEAR: wa_bimd.
ELSE.

CLEAR: flag1,it1_eabl,wa1_eabl.
cnt = cnt + 1.
IF wa_tdoc-zwnummer = '1' OR wa_tdoc-zwnummer = '2' OR
wa_tdoc-zwnummer = '3' OR wa_tdoc-zwnummer = '4' OR
wa_tdoc-zwnummer = '5' OR wa_tdoc-zwnummer = '6'.
IF 1 = 2.
CLEAR it1_eabl.
SELECT zwnummer adat zz_v_zwstand zz_n_zwstand FROM eabl INTO T
ABLE it1_eabl
WHERE equnr = wa_tdoc-
geraet AND adat LE lv_dt1."wa_tdoc-bis.
SORT it1_eabl BY adat DESCENDING.
READ TABLE it1_eabl INTO wa1_eabl INDEX 1.
IF sy-subrc = 0 AND wa_tdoc-zwnummer = '1'.
wa_bimd-pre_mtr_rdng = wa1_eabl-zz_v_zwstand.
wa_bimd-curr_mtr_rdng = wa1_eabl-zz_v_zwstand.
ENDIF.
DELETE it1_eabl WHERE register EQ '002'.
READ TABLE it1_eabl INTO wa1_eabl INDEX 2.
wa_bimd-pre_mtr_rdng_date = wa1_eabl-adat.

***********Added by Kiran TR
IF wa_tdoc-zwnummer = '2' AND wa_tdoc-ablhinw = 'MD'.
wa_bimd-pre_mtr_rdng = lt_zbibd-contract_demand_kw.
wa_bimd-curr_mtr_rdng = lt_zbibd-contract_demand_kw.
ENDIF.
flag1 = 'X'.
ELSE.
IF wa_tdoc-ablesgr = '01'.
IF wa_tdoc-ablesgrv = '06' OR
wa_tdoc-ablesgrv = '21' OR
wa_tdoc-ablesgrv = '14' OR
wa_tdoc-ablesgrv = '17'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSEIF wa_tdoc-ablesgrv = '01'.
IF wa_tdoc-sc_belnr IS INITIAL.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ELSE.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
IF wa_tdoc-i_abrmenge LT 0.
wa_bimd-rdng_diff = wa_bimd-rdng_diff - wa_tdoc-
i_zwstdiff.
ELSE.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-
i_zwstdiff.
ENDIF.
ENDIF.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '22' OR wa_tdoc-ablesgr = '14'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '06'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '03'.
IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '14'.
wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
ENDIF.
ELSEIF wa_tdoc-ablesgr = '10'.
IF wa_tdoc-ablesgrv = '01'.
wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-i_zwstdiff.
wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

wa_bimd-invoiceno = lt_zbibd-invoiceno.
wa_bimd-contract_acc_no = lt_zbibd-contract_account.
SELECT SINGLE serge herst FROM equi INTO (wa_bimd-
mnf_srl_no,wa_bimd-meter_make)
WHERE equnr = wa_tdoc-
equnr. "geraet.
wa_bimd-meter_no = wa_tdoc-geraet.
wa_bimd-register = wa_tdoc-zwnummer.
wa_bimd-bill_month = lt_zbibd-bill_month.
wa_bimd-date_of_invoice = lt_zbibd-date_of_invoice.
wa_bimd-meter_status = wa_tdoc-ablhinw.
wa_bimd-cur_mtr_type = wa_tdoc-istablart.
wa_bimd-curr_mtr_rdng_reason = wa_tdoc-ablesgr.
wa_bimd-billed_mtr_rdng = wa_tdoc-i_zwstndab.
wa_bimd-mult_fac = wa_tdoc-i_abrmenge / wa_tdoc-i_zwstdiff.
IF wa_tdoc-zwnummer = '001'.
lv_mf = wa_bimd-mult_fac.
ENDIF.
IF wa_bimd-mult_fac = '0.00'.
wa_bimd-mult_fac = lv_mf.
ENDIF.
*Start of Addition by TMMANISHT on 12th April 2014
IF wa_bimd-mult_fac = '0.00'.
wa_bimd-mult_fac = '1.00'.
ENDIF.
*End of Addition by TMMANISHT on 12th April 2014
IF flag1 IS INITIAL.
wa_bimd-pre_mtr_rdng = wa_tdoc-i_zwstvor.
wa_bimd-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.

IF wa_tdoc-massbill = 'KVA' OR wa_tdoc-massbill = 'KW'.


CLEAR: wa_bimd-pre_mtr_rdng.
ENDIF.
wa_bimd-pre_mtr_rdng_reason = wa_tdoc-ablesgrv.
wa_bimd-pre_mtr_type = wa_tdoc-istablartva.
IF flag1 IS INITIAL.
wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab.
ENDIF.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-bis.
IF wa_tdoc-zwnummer ='006' AND wa_tdoc-ablesgr = '17 '.
wa_bimd-curr_mtr_rdng_date = wa_tdoc-datum2.
ENDIF.
wa_bimd-uom = wa_tdoc-massbill.

IF lt_zbibd-meter_arrangement = 'LT Side'.


* IF wa_tdoc-zwnummer = '001' OR wa_tdoc-zwnummer ='006'.
IF wa_tdoc-zwnummer NE '006'.
wa_bimd-trnsformr_loss = wa_bimd-billed_consum * '0.03'.
ENDIF.
ENDIF.
IF wa_bimd-trnsformr_loss IS NOT INITIAL.
wa_bimd-total_consum = wa_bimd-billed_consum + wa_bimd-
trnsformr_loss.
ELSE.
wa_bimd-total_consum = wa_bimd-billed_consum.
ENDIF.

IF wa_tdoc-zwnummer = '001'.
IF wa_tdoc-ablesgrv NE '06'. "Added on 22nd March 2014
wa_bimd-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date - 1.
ENDIF. "Added on 22nd March 2014
ENDIF.

IF cnt = 1.
APPEND wa_bimd TO gt_bimd.
ELSE.

READ TABLE gt_bimd INTO wa_bimd1 WITH KEY meter_no = wa_tdoc-


geraet
register = wa_tdoc-
zwnummer.
IF sy-subrc = 0.
IF wa_bimd1-curr_mtr_rdng_date LT wa_bimd-curr_mtr_rdng_date.
wa_bimd1-curr_mtr_rdng_date = wa_bimd-curr_mtr_rdng_date.
wa_bimd1-curr_mtr_rdng = wa_bimd-curr_mtr_rdng.
wa_bimd1-mult_fac = wa_bimd-mult_fac.
wa_bimd1-trnsformr_loss = wa_bimd-trnsformr_loss.
wa_bimd1-total_consum = wa_bimd-total_consum.
ENDIF.
IF wa_bimd1-pre_mtr_rdng_date GT wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
ENDIF.
IF wa_tdoc-massbill NE 'KVA'.
wa_bimd1-billed_consum = wa_bimd1-billed_consum + wa_bimd-
billed_consum.
wa_bimd1-rdng_diff = wa_bimd1-rdng_diff + wa_bimd-rdng_diff.
ENDIF.
wa_bimd1-mnf_srl_no = wa_bimd-mnf_srl_no.
**********new changes by Kiran
IF wa_bimd1-curr_mtr_rdng_reason = '22' AND wa_tdoc-
zwnummer = 1.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
IF wa_tdoc-zwnummer = 2.
IF wa_bimd1-curr_mtr_rdng > wa_tdoc-i_zwstand.
ELSE.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
ENDIF.
ENDIF.
*********end of new changes
MODIFY gt_bimd FROM wa_bimd1 INDEX sy-tabix.
ELSE.
APPEND wa_bimd TO gt_bimd.
ENDIF.
* ENDIF.
ENDIF.
CLEAR: wa_bimd.
ENDIF.
ENDIF.
ENDLOOP.

CLEAR: cnt,wa_bimd1,date20,lv_indx,lv_dt1.
IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-
tariff_type+0(2) <> 'RT'.
SORT gt_bimd BY curr_mtr_rdng_date DESCENDING register ASCENDING.
READ TABLE gt_bimd INTO wa_bimd WITH KEY register = '002'." INDEX 2.
IF sy-
subrc = 0. " AND mr_note = 'OK'. " MR Note commented by Kiran TR:B10K902697
lt_zbibd-rcorded_demand = wa_bimd-curr_mtr_rdng.
ENDIF.
ENDIF.

IF lv_end_date GE '20170401'.
IF lt_zbibd-tariff_type+0(2) = 'LT' OR
lt_zbibd-tariff_type+0(2) = 'PU'.
READ TABLE it_tdoc INTO wa_tdoc WITH KEY bis = lv_end_date
zwnummer = '002'.
IF sy-subrc = 0.
lt_zbibd-rcorded_demand = wa_tdoc-i_zwstand.
ENDIF.
DELETE gt_bimd WHERE register = '002'.
ENDIF.
ENDIF.

****when PL Adj case comes then previous month reading Date shud be last PL
date
****but Reading should be of Last OK reading ****************
***LT_ZBIBD-BILL_DAYS shud be of current month it self. **************
IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-
tariff_type+0(2) <> 'RT'.
* IF NOT lt_zbibd-other_charges IS INITIAL." AND lv_lt_leg_adj = 'X'.
IF pl_adj = 'X'.
IF lv_lt_leg_adj = ''.
LOOP AT gt_bimd INTO wa_bimd WHERE register = '001'.
************added by Kiran TR B10K902697
CLEAR:it2_eabl,lv_indx.
lv_indx = sy-tabix.
SELECT zwnummer adat ablhinw v_zwstand n_zwstand FROM eabl INTO T
ABLE it2_eabl
WHERE equnr = wa_bimd-meter_no
AND zwnummer = wa_bimd-register
AND adat LE wa_bimd-pre_mtr_rdng_date.
IF NOT it2_eabl IS INITIAL.
SORT it2_eabl BY adat DESCENDING.
LOOP AT it2_eabl INTO wa2_eabl WHERE ablhinw = 'OK'.
wa_bimd-pre_mtr_rdng = wa2_eabl-v_zwstand + wa2_eabl-
n_zwstand.
wa_bimd-billed_consum = wa_bimd-curr_mtr_rdng - wa_bimd-
pre_mtr_rdng.
wa_bimd-rdng_diff = wa_bimd-billed_consum.
MODIFY gt_bimd FROM wa_bimd INDEX lv_indx
TRANSPORTING pre_mtr_rdng billed_consum rdng_diff
.
EXIT.
ENDLOOP.
ENDIF.
CLEAR: it2_eabl,wa2_eabl.
************end of addition by Kiran TR B10K902697
IF wa_bimd-curr_mtr_rdng_date IS NOT INITIAL AND wa_bimd-
pre_mtr_rdng_date IS NOT INITIAL.
lt_zbibd-bill_days = wa_bimd-curr_mtr_rdng_date - wa_bimd-
pre_mtr_rdng_date." + 1.
* IF lt_zbibd-bill_days GT 31.
* lt_zbibd-bill_days = 31.
* ENDIF.
ENDIF.
EXIT.
ENDLOOP.
ELSE.
IF lt_zbibd-finalbill <> 'X'.
LOOP AT gt_bimd INTO wa_bimd WHERE register = '001'.
CLEAR lv_indx.
lv_indx = sy-tabix.
IF NOT it_eabl9 IS INITIAL.
SORT it_eabl9 BY adat DESCENDING.
SORT it_eablg9 BY ablbelnr DESCENDING." ablesgr DESCENDING.
DELETE it_eabl9 WHERE adat GT wa_bimd-pre_mtr_rdng_date.
LOOP AT it_eabl9 INTO wa_eabl9 WHERE ablhinw = 'OK'.
READ TABLE it_eablg9 INTO wa_eablg9 WITH KEY ablbelnr = wa_
eabl9-ablbelnr." BINARY SEARCH.
IF sy-subrc = 0.
CHECK wa_eablg9-ablesgr = '09'.
wa_bimd-pre_mtr_rdng = wa_eabl9-v_zwstand + wa_eabl9-
n_zwstand.
wa_bimd-billed_consum = wa_bimd-curr_mtr_rdng - wa_bimd-
pre_mtr_rdng.
wa_bimd-rdng_diff = wa_bimd-billed_consum.
MODIFY gt_bimd FROM wa_bimd INDEX lv_indx TRANSPORTING pr
e_mtr_rdng billed_consum rdng_diff.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR: it_eabl9,wa_eabl9.
IF wa_bimd-curr_mtr_rdng_date IS NOT INITIAL AND wa_bimd-
pre_mtr_rdng_date IS NOT INITIAL.
IF last_date IS INITIAL.
lt_zbibd-bill_days = wa_bimd-curr_mtr_rdng_date - wa_bimd-
pre_mtr_rdng_date + 1.
ELSE.
lt_zbibd-bill_days = wa_bimd-curr_mtr_rdng_date - wa_bimd-
pre_mtr_rdng_date.
ENDIF.
* IF lt_zbibd-bill_days GT 31.
* lt_zbibd-bill_days = 31.
* ENDIF.
ENDIF.
EXIT.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
* BREAK-POINT.
*******From 01.04.17 LT* & PUBWW billed on kvah. If PL Adj comes for
******earlier and current fiscal year, then both entires to be shown in PWB
*****form. How much was billed on KwH in earlier year and how much billed
*****on KVAH in current year. For that below logic is written
CLEAR wa_bimd1.
IF lt_zbibd-tariff_type+0(2) = 'LT' OR
lt_zbibd-tariff_type+0(2) = 'PU' AND pl_adj = 'X'.
IF '20170401' BETWEEN lv_ab_date AND lv_end_date.
DELETE it_tdoc WHERE zwnummer = '002'.
READ TABLE it_tdoc INTO wa_tdoc WITH KEY ablesgr = '16'.
IF sy-subrc = 0.
CLEAR wa_bimd1.

wa_bimd1-invoiceno = lt_zbibd-invoiceno.
wa_bimd1-contract_acc_no = lt_zbibd-contract_account.
SELECT SINGLE serge FROM equi INTO wa_bimd1-
mnf_srl_no WHERE equnr = wa_tdoc-geraet.

wa_bimd1-meter_no = wa_tdoc-geraet.
wa_bimd1-register = wa_tdoc-zwnummer.
wa_bimd1-bill_month = lt_zbibd-bill_month.
wa_bimd1-date_of_invoice = lt_zbibd-date_of_invoice.
wa_bimd1-meter_status = wa_tdoc-ablhinw.
wa_bimd1-cur_mtr_type = wa_tdoc-istablart.
wa_bimd1-curr_mtr_rdng_reason = wa_tdoc-ablesgr.
wa_bimd1-billed_mtr_rdng = wa_tdoc-i_zwstndab.
wa_bimd1-mult_fac = wa_tdoc-i_abrmenge / wa_tdoc-i_zwstdiff.
wa_bimd1-curr_mtr_rdng_date = wa_tdoc-bis.
wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
* ENDIF.

LOOP AT it_tdoc INTO wa_tdoc FROM sy-tabix + 1.


IF wa_tdoc-zwnummer = '001' AND wa_tdoc-ablhinw = 'PA'.
wa_bimd1-pre_mtr_rdng_date = wa_tdoc-ab.
wa_bimd1-pre_mtr_rdng = wa_tdoc-i_zwstvor.
ENDIF.
ENDLOOP.

wa_bimd1-billed_consum = wa_bimd1-curr_mtr_rdng - wa_bimd1-


pre_mtr_rdng.
wa_bimd1-rdng_diff = wa_bimd1-curr_mtr_rdng - wa_bimd1-
pre_mtr_rdng.
wa_bimd-total_consum = wa_bimd1-billed_consum.

READ TABLE gt_bimd INTO wa_bimd WITH KEY register = '001'.


IF sy-subrc = 0.
DELETE gt_bimd WHERE register = '001'.
wa_bimd = wa_bimd1.
APPEND wa_bimd TO gt_bimd.
CLEAR: wa_bimd,wa_bimd1.
ENDIF.
ENDIF.
ENDIF.

ENDIF.
CLEAR it_tdoc.
****************UNMETERED cases all meter details to be BLANKED************
********
IF creation_date LE '20140831'.
ELSE.
IF gt_bimd IS INITIAL.
CLEAR: lt_zbibd-power_factor,
* lt_zbibd-bill_days,
lt_zbibd-tot_unit_billed,
gv_adj_days,
lt_zbibd-meter_provided_by.
ENDIF.
ENDIF.

IF tod_flag IS INITIAL AND ( lt_zbibd-tariff_type+0(2) = 'HT' OR


lt_zbibd-tariff_type+0(2) = 'RT' ).
IF lv_daats_ab GE '20160401'.
DELETE gt_bimd WHERE register = '008' OR register = '009' OR register
= '010'.
ELSE.
DELETE gt_bimd WHERE register = '002' OR register = '003' OR register
= '004'.
ENDIF.
ENDIF.

**********Barcode value assignment******************************


CLEAR: t_te418,wa_te418.
IF lv_mtr_bis IS NOT INITIAL.
SELECT begabld FROM te418 INTO TABLE t_te418
WHERE adatsoll GT lv_mtr_bis AND termschl = lt_zbibd-mru.

SORT t_te418 BY begabld ASCENDING .


READ TABLE t_te418 INTO wa_te418 INDEX 1 .
lt_zbibd-next_schdl_dt_for_rdng = wa_te418-begabld.
ENDIF.

* BREAK-POINT.
*****************End of Meter details********************
CLEAR: enforc_date,mess_judge,mess_abey,lv_totall.
*******************Enforcement Date****************************************
*********
SELECT SINGLE zorderdate INTO enforc_date FROM zcs_enf_amnt
WHERE zcontract = lt_zbibd-contract_account.

******************Judgement and Abeyance Message***************************


**********

IF lt_zbibd-amt_abey_with_dps IS NOT INITIAL." AND lc_amount IS INITIAL.


SELECT * FROM zfica_abeyance INTO TABLE lt_abey
WHERE vkont = lt_zbibd-contract_account.
IF NOT lt_abey IS INITIAL.
LOOP AT lt_abey INTO ls_abey.
IF ls_abey-redat IS INITIAL.
ls_abey-redat = '99991231'.
ENDIF.
IF lt_zbibd-date_of_invoice BETWEEN ls_abey-erdat
AND ls_abey-redat.
MODIFY lt_abey FROM ls_abey INDEX sy-tabix
TRANSPORTING redat.
ELSE.
DELETE lt_abey INDEX sy-tabix.
ENDIF.
ENDLOOP.

ENDIF.
IF NOT lt_abey IS INITIAL.
READ TABLE lt_abey INTO ls_abey INDEX 1.
IF sy-subrc = 0.
lv_totall = ls_abey-betrw.
CONDENSE: lv_totall,ls_abey-full_name,ls_abey-free_text.
CONCATENATE '*' 'Kept in Abeyance of Rs.' lv_totall
'against' ls_abey-full_name 'due to "'
ls_abey-
free_text '"' INTO mess_judge SEPARATED BY space.
ENDIF.
READ TABLE lt_abey INTO ls_abey INDEX 2.
IF sy-subrc = 0.
lv_totall = ls_abey-betrw.
CONDENSE: lv_totall,ls_abey-full_name,ls_abey-free_text.
CONCATENATE mess_judge '. And Kept in Abeyance of Rs.' lv_totall
'against' ls_abey-full_name 'due to "'
ls_abey-
free_text '"' INTO mess_judge SEPARATED BY space.
ENDIF.
ENDIF.
* lt_zbibd-amt_abey_with_dps = abs( lt_zbibd-amt_abey_with_dps ).
* lv_totall = lt_zbibd-amt_abey_with_dps.
* CONDENSE: lv_totall,ls_abey-full_name,ls_abey-free_text.
* CONCATENATE '*' 'Kept in Abeyance of Rs.' lv_totall
* 'against' ls_abey-full_name 'due to "'
* ls_abey-free_text '"' INTO mess_judge SEPARATED BY space.
ENDIF.

IF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-tariff_type+0(2) = 'RT'.


IF NOT sd_rel_amt IS INITIAL.
lt_zbibd-incentive_under_iip = lt_zbibd-incentive_under_iip -
sd_rel_amt.
IF lv_ab_date LT '20170401'.
lt_zbibd-ppi_levied = lt_zbibd-ppi_levied + sd_rel_amt.
ENDIF.
ENDIF.
ENDIF.

IF sd_rel = 'X'.
** inorder to save the SD release amount in ZBIBD, we are using
** LT_ZBIBD-SEC_DEP_HELD field after 01.04.2017
CLEAR: mess_judge, lv_totall,lt_zbibd-sec_dep_held.
IF lv_ab_date GE '20170401'.
lt_zbibd-sec_dep_held = sd_rel_amt.
ENDIF.
IF sd_rel_amt LT 0.
sd_rel_amt = sd_rel_amt * -1.
ENDIF.
lv_totall = sd_rel_amt.
CONDENSE: lv_totall.
* CONCATENATE '-' lv_totall INTO lv_totall. CONDENSE lv_totall.
CONCATENATE 'SD release amount Rs.' lv_totall 'is adjusted in the bill.
'
INTO mess_judge SEPARATED BY space.
ENDIF.
* IF lt_zbibd-amt_abey_with_dps IS NOT INITIAL.
* CONCATENATE '*' 'Arrear amount includes kept in abeyance,if any.' INTO
mess_abey.
* ENDIF.
****************************PF Remard message for HT cases*****************
****
CLEAR: pf_remark.
IF NOT lt_zbibd-power_factor IS INITIAL.
IF lt_zbibd-power_factor LT '0.63'.
CONCATENATE 'Your average PF for this month is below 70% so you are h
ereby'
'requested to improve PF, failing which your power supply will be cu
t off after'
'expiry of 7 days from date of dispatch of bill as per clause 7.4(c)
of BESC 2007.'
INTO pf_remark SEPARATED BY ' '.
ENDIF.

ENDIF.

*********************Messages**********************************************
****
IF 1 = 2.
CLEAR: t_zmessage1,lv_zmessage,lv_zmessage1,lv_zmessage2.
SELECT * FROM zinv_msg INTO TABLE t_zmessage1 WHERE sub_div = lt_zbibd-
sub_div_name
AND zab LE wa_doc_header-
budat AND zbis GE wa_doc_header-budat.
LOOP AT t_zmessage1 INTO wa_zmessage1.
IF ( wa_zmessage1-ztariiftype = lt_zbibd-tariff_type ).
CASE wa_zmessage1-zpriority.
WHEN '1'.
IF wa_zmessage1-sequence EQ '1'.
lv_zmessage = wa_zmessage1-description.
ELSEIF wa_zmessage1-sequence EQ '2'.
lv_zmessage1 = wa_zmessage1-description.
ELSEIF wa_zmessage1-sequence EQ '3'.
lv_zmessage2 = wa_zmessage1-description.
ENDIF.

WHEN '2'.
IF lv_zmessage IS INITIAL AND
wa_zmessage1-sequence EQ '1'.
lv_zmessage = wa_zmessage1-description.
ELSEIF lv_zmessage1 IS INITIAL
AND lv_zmessage IS NOT INITIAL
AND wa_zmessage1-sequence EQ '1'.
lv_zmessage1 = wa_zmessage1-description.
ELSEIF lv_zmessage1 IS NOT INITIAL
AND lv_zmessage IS NOT INITIAL
AND wa_zmessage1-sequence EQ '2'.
lv_zmessage2 = wa_zmessage1-description.
ELSEIF lv_zmessage2 IS INITIAL
AND lv_zmessage1 IS NOT INITIAL
AND wa_zmessage1-sequence EQ '3'.
lv_zmessage2 = wa_zmessage1-description.
ENDIF.

WHEN '3'.
IF lv_zmessage IS INITIAL AND
wa_zmessage1-sequence EQ '1'.
lv_zmessage = wa_zmessage1-description.
ELSEIF lv_zmessage1 IS INITIAL
AND lv_zmessage IS NOT INITIAL
AND wa_zmessage1-sequence EQ '1'.
lv_zmessage1 = wa_zmessage1-description.
ELSEIF lv_zmessage2 IS INITIAL
AND lv_zmessage1 IS NOT INITIAL
AND wa_zmessage1-sequence EQ '2'.
lv_zmessage2 = wa_zmessage1-description.
ELSEIF lv_zmessage1 IS NOT INITIAL
AND lv_zmessage IS NOT INITIAL
AND wa_zmessage1-sequence EQ '3'.
lv_zmessage2 = wa_zmessage1-description.
ENDIF.
ENDCASE.

ELSE.

CASE wa_zmessage1-zpriority.
WHEN '1'.
IF wa_zmessage1-sequence EQ '1'.
lv_zmessage = wa_zmessage1-description.
ELSEIF wa_zmessage1-sequence EQ '2'.
lv_zmessage1 = wa_zmessage1-description.
ELSEIF wa_zmessage1-sequence EQ '3'.
lv_zmessage2 = wa_zmessage1-description.
ENDIF.

WHEN '2'.
IF lv_zmessage IS INITIAL AND
wa_zmessage1-sequence EQ '1'.
lv_zmessage = wa_zmessage1-description.
ELSEIF lv_zmessage1 IS INITIAL
AND lv_zmessage IS NOT INITIAL
AND wa_zmessage1-sequence EQ '1'.
lv_zmessage1 = wa_zmessage1-description.
ELSEIF lv_zmessage1 IS NOT INITIAL
AND lv_zmessage IS NOT INITIAL
AND wa_zmessage1-sequence EQ '2'.
lv_zmessage2 = wa_zmessage1-description.
ELSEIF lv_zmessage2 IS INITIAL
AND lv_zmessage1 IS NOT INITIAL
AND wa_zmessage1-sequence EQ '3'.
lv_zmessage2 = wa_zmessage1-description.
ENDIF.

WHEN '3'.
IF lv_zmessage IS INITIAL AND
wa_zmessage1-sequence EQ '1'.
lv_zmessage = wa_zmessage1-description.
ELSEIF lv_zmessage1 IS INITIAL
AND lv_zmessage IS NOT INITIAL
AND wa_zmessage1-sequence EQ '1'.
lv_zmessage1 = wa_zmessage1-description.
ELSEIF lv_zmessage2 IS INITIAL
AND lv_zmessage1 IS NOT INITIAL
AND wa_zmessage1-sequence EQ '2'.
lv_zmessage2 = wa_zmessage1-description.
ELSEIF lv_zmessage1 IS NOT INITIAL
AND lv_zmessage IS NOT INITIAL
AND wa_zmessage1-sequence EQ '3'.
lv_zmessage2 = wa_zmessage1-description.
ENDIF.
ENDCASE.
ENDIF.
CLEAR : wa_zmessage1.
ENDLOOP.

ENDIF.

ENDFORM. " USER_EXIT_AFTER_DOC_ITEM


*&---------------------------------------------------------------------*
*& Form USER_EXIT_ZIS_U_END_EXIT
*&---------------------------------------------------------------------*
*& This exit is processed AFTER the hierarchy has been processed.
*&
*& Use this Exit to check or set
* final settings in the form, if required.
*&---------------------------------------------------------------------*
FORM user_exit_zis_u_end_exit.

DATA: fname TYPE rs38l_fnam,


text(20),
lv_1(10),
l_inv TYPE dfkkop-xblnr,
flag_bapi,
dum(10),
trans_flag,
meter_flag TYPE i.
*wa_print_doc ISU_S_LAST_PRINT_DOC
DATA : itpdf LIKE tline OCCURS 100 WITH HEADER LINE,
v_spoolno LIKE tsp01-rqident.
DATA: cntr TYPE sy-index,
cntr2 TYPE sy-tabix,
dem_flag1,dem_flag2,dem_flag3,
dem_amt TYPE ettifn-wert1,
lv_amt90(15).

DATA: tmp_curr TYPE erdk_ext.

CLEAR: flag_bapi,wa_conversion,trans_flag,meter_flag,
dem_flag1,dem_flag2,dem_flag3,dem_amt,lv_amt90.
IF sy-uname = 'CRM_RFC'.
c-itcpo-tdpreview = 'X'.
ENDIF.
lt_zbibd-created_by = sy-uname.
lt_zbibd-created_on = sy-datum.
lt_zbibd-created_time = sy-uzeit.
isu_bill-t_doc_item = tt_doc_item.
lt_zbibd-energy_charge = lt_zbibd-energy_charge + lt_zbibd-
minimum_charge.

***************Billed Units shud not be displayed for RateCategory(KJ_BPL_R


M,KJ_BPL_U,IAS-IM)******
IF ( lt_zbibd-tariff_type = 'KJ_BPL_RM' OR lt_zbibd-
tariff_type = 'KJ_BPL_U' OR
lt_zbibd-tariff_type = 'IAS-IM') AND lt_zbibd-bill_status = 'MMC'.
* CLEAR: lt_zbibd-
tot_unit_billed. "commented as said by Vishwajeeth Bihar
ENDIF.
****Added by TMKIRAND for ROUNDO amount
** IF NOT it_dberdl IS INITIAL.
** LOOP AT it_dberdl INTO wa_dberdl WHERE amount GT 0.
** v_arrear_chrg = v_arrear_chrg + wa_dberdl-amount.
** ENDLOOP.
** ENDIF.
****end of code by TMKIRAND for ROUNDO amount

********************MODIFY ZBIBD, ZBIMD,ZINV_AMT TABLES********************


***
***********************FI DOCUMENT NUMBER**********************************
***
* BREAK-POINT.
LOOP AT xt_ranges1 WHERE low = 'EMLO'.
flag_bapi = 'X'.
ENDLOOP.

LOOP AT xt_ranges1 WHERE low = 'CRM'.


CLEAR: name.
name = '(SAPLZBAPI_ONLINE_BILL_PDF)WA_ZBIBD'.
CONDENSE name.
ASSIGN (name) TO <f2>.
IF sy-subrc IS INITIAL.
<f2> = lt_zbibd.
ENDIF.

CLEAR: name.
name = '(SAPLZBAPI_ONLINE_BILL_PDF)IT_ZBIMD'.
CONDENSE name.
ASSIGN (name) TO <f1>.
IF sy-subrc IS INITIAL.
<f1> = gt_bimd.
ENDIF.
ENDLOOP.
IF xt_ranges1-low = 'CRM'.
EXIT.
ENDIF.
**used Message10 variable in ZBIBD for Legacy Adjustment flag and Total Bil
ls Days
IF lv_lt_leg_adj = 'X' OR pl_adj = 'X'. "lt_zbibd-
other_charges IS NOT INITIAL.
CONCATENATE 'L' gv_adj_days INTO lt_zbibd-message10.
CONDENSE lt_zbibd-message10.
ELSE.
lt_zbibd-message10 = 'N'.
ENDIF.

****Bluetooth indicator for future reporting purpose******


**if message10 has value 'B' in it, then its a bluetooth meter
IF bluetooth = 'X'.
CONCATENATE lt_zbibd-message10 'B' INTO lt_zbibd-message10.
ENDIF.

*******************************************
IF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-tariff_type+0(2) = 'RT'.
CLEAR: it_ettifn3,cntr,dem_amt,dem_flag1,dem_flag2,dem_flag3.
it_ettifn3 = it_ettifn.
SORT it_ettifn3 BY ab DESCENDING.
DELETE it_ettifn3 WHERE operand NE 'RCORDED_DM'.
DELETE it_ettifn3 WHERE ab GT lv_ab_date.
IF NOT lt_zbibd-contract_demand_kv IS INITIAL.
LOOP AT it_ettifn3 INTO wa_ettifn3.
CLEAR dem_amt.
cntr = cntr + 1.
IF cntr GT 3.
EXIT.
ENDIF.
dem_amt = ( lt_zbibd-contract_demand_kv * 110 ) / 100.
IF wa_ettifn3-wert1 GT dem_amt.
IF cntr = 1.
dem_flag1 = 'X'.
ELSEIF cntr = 2.
dem_flag2 = 'X'.
ELSEIF cntr = 3.
dem_flag3 = 'X'.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
IF dem_flag1 = 'X' AND dem_flag2 = 'X' AND dem_flag3 = 'X'.
zextra-
dem_mess1 = 'M.D. > 110% C.D for 3 consecutive mths, Get added C.D sanction
ed or limit drawl'.
ENDIF.
ENDIF.
********From 01.04.2018 for LT* and PUBWW KW will be converted to KVA
***** we need to divide KW value with '0.9' & do upper roundingoff
* BREAK TMKIRAND.
IF lv_end_date GE '20180401' and ( lt_zbibd-tariff_type = 'PUBWW' or
lt_zbibd-tariff_type+0(2) = 'LT' ).
zextra-ltdem_kva = ceil( lt_zbibd-contract_demand_kw / '0.9' ) .
CONDENSE zextra-ltdem_kva.
ENDIF.

**************************************************************

CLEAR form_name.
IF c-itcpo-tdpreview NE 'X' AND flag_bapi EQ ''.
CLEAR: l_inv,wa_inv.
*below changes done by Kiran for tuning the program
l_inv = lt_zbibd-invoiceno.
UNPACK l_inv TO l_inv.
* SELECT SINGLE opbel FROM dfkkop INTO wa_inv-zfidoc WHERE xblnr = l_inv
* AND vtref NE ''.
DELETE t_dfkkop WHERE xblnr NE l_inv.
DELETE t_dfkkop WHERE vtref EQ ''.
IF NOT t_dfkkop IS INITIAL.
READ TABLE t_dfkkop INTO wa_dfkkop INDEX 1.
ENDIF.
wa_inv-zfidoc = wa_dfkkop-opbel.
wa_inv-mandt = sy-mandt.
wa_inv-zcontract_ac = lt_zbibd-contract_account.
wa_inv-zinv_no = lt_zbibd-invoiceno.
wa_inv-zamount1 = lt_zbibd-net_amt_pbl_by_due_dt.
wa_inv-zamount2 = lt_zbibd-ppi_leviable.
wa_inv-zamount3 = lt_zbibd-net_amt_pbl_btwn_due_dt.
wa_inv-zamount4 = lt_zbibd-amt_pybl_aftr_due_date.
wa_inv-zamount5 = lv_dps_leviabl_amt * c_015.
wa_inv-zdate = lt_zbibd-due_date.
* Code inserted by venkat B10K907825
wa_inv-rebate = online_rebate."lt_zbibd-online_rebate.
*End of venkat B10K907825
********when Re-print is done, then do not update ZINV_AMT table**********
IF wa_print_doc-erdk-druckdat IS NOT INITIAL.
CLEAR:tmp_curr.
CALL FUNCTION 'ISU_S_LAST_PRINT_DOC'
EXPORTING
x_vkont = wa_print_doc-erdk-vkont
IMPORTING
y_erdk_ext_cur = tmp_curr
EXCEPTIONS
not_found = 1
system_error = 2
not_qualified = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF tmp_curr-opbel = lt_zbibd-invoiceno.
DELETE FROM zinv_amt WHERE zcontract_ac EQ wa_doc_header-vkont.
MODIFY zinv_amt FROM wa_inv.
ENDIF.

ELSE.
DELETE FROM zinv_amt WHERE zcontract_ac EQ wa_doc_header-vkont.
MODIFY zinv_amt FROM wa_inv.
ENDIF.
************************************************************
MODIFY zbibd FROM lt_zbibd.
MODIFY zbimd FROM TABLE gt_bimd.

IF sy-uname = 'SYS_SBM'.
EXIT.
ENDIF.

IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-


tariff_type+0(2) <> 'RT'.

lt_zbibd-arrear_energy = lt_zbibd-arrear_energy +
lt_zbibd-arrear_ed.
lt_zbibd-arrear_other_chg = lt_zbibd-arrear_other_chg +
lt_zbibd-arrear_punitive_amt +
lt_zbibd-arrear_punitive_dps.
******added by KiranD B10K902752*****************************
* IF lt_zbibd-arrear_energy GT 0.
* CLEAR: lt_zbibd-pymt_on_account.
* ENDIF.
******end of addition by KiranD B10K902752*******************
lt_zbibd-other_charges = lt_zbibd-other_charges +
lt_zbibd-vat_on_meter_rent +
lt_zbibd-voltage_surcharge.
****Added by TMKIRAND for ROUNDO amount
****Ended by TMKIRAND for ROUNDO amount
ELSEIF lt_zbibd-tariff_type+0(2) = 'HT' or lt_zbibd-
tariff_type+0(2) = 'RT'.
lt_zbibd-meter_rent = lt_zbibd-meter_rent + lt_zbibd-meter_sgst +
lt_zbibd-meter_cgst.
ENDIF.

form_name = 'ZIS_LT_PRE_PRINTED'.
* form_name = 'ZIS_BILL_PRINT_ONLINE'.
ELSE.
*********Move to Smartform structure *********************************
IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-
tariff_type+0(2) <> 'RT'.

lt_zbibd-arrear_energy = lt_zbibd-arrear_energy +
lt_zbibd-arrear_ed.
lt_zbibd-arrear_other_chg = lt_zbibd-arrear_other_chg +
lt_zbibd-arrear_punitive_amt +
lt_zbibd-arrear_punitive_dps.
******added by KiranD B10K902752*****************************
* IF lt_zbibd-arrear_energy GT 0.
* CLEAR: lt_zbibd-pymt_on_account.
* ENDIF.
******end of addition by KiranD B10K902752*******************
lt_zbibd-other_charges = lt_zbibd-other_charges +
lt_zbibd-vat_on_meter_rent +
lt_zbibd-voltage_surcharge.
form_name = 'ZIS_BILL_PRINT_ONLINE'.
IF lv_end_date GE '20170701'.
form_name = 'ZIS_BILL_PRINT_ONLINE_2018'. "'ZIS_LT_PRE_PRINTED'.
ENDIF.
ELSEIF lt_zbibd-tariff_type+0(2) = 'HT' or lt_zbibd-
tariff_type+0(2) = 'RT'.
lt_zbibd-meter_rent = lt_zbibd-meter_rent + lt_zbibd-meter_sgst +
lt_zbibd-meter_cgst.
ENDIF.
ENDIF.

MOVE-CORRESPONDING lt_zbibd TO sf_zbibd.


******Clear fields if amounts are Initial*********************************
IF lt_zbibd-connect_load_hp IS INITIAL.
CLEAR sf_zbibd-connect_load_hp.
ENDIF.
IF lt_zbibd-connect_load_kw IS INITIAL.
CLEAR sf_zbibd-connect_load_kw.
ENDIF.
IF lt_zbibd-contract_demand_kw IS INITIAL.
CLEAR sf_zbibd-contract_demand_kw.
ENDIF.
IF lt_zbibd-contract_demand_kv IS INITIAL.
CLEAR sf_zbibd-contract_demand_kv.
ENDIF.

**************Min monthly units for Smartform********************


CLEAR: sf_zbibd-minimum_unit,lv_1.
IF lt_zbibd-minimum_unit IS NOT INITIAL.
lv_1 = lt_zbibd-minimum_unit.
SPLIT lv_1 AT '.' INTO lv_1 dummy1.
CONCATENATE lv_1 'Units/Month' INTO sf_zbibd-
minimum_unit SEPARATED BY space .
ELSE.
CONCATENATE '0.00' 'Units/Month' INTO sf_zbibd-
minimum_unit SEPARATED BY space .
ENDIF.

**************Convert Currency fields to Char type*************************


*****
PERFORM convert_currency USING lt_zbibd-sec_dep_held CHANGING sf_zbibd-
sec_dep_held.
PERFORM convert_currency USING lt_zbibd-sec_dep_req CHANGING sf_zbibd-
sec_dep_req.
PERFORM convert_currency USING lt_zbibd-
pymt_on_account CHANGING sf_zbibd-pymt_on_account.
PERFORM convert_currency USING lt_zbibd-arrear_energy CHANGING sf_zbibd-
arrear_energy.
PERFORM convert_currency USING lt_zbibd-arrear_ed CHANGING sf_zbibd-
arrear_ed.
PERFORM convert_currency USING lt_zbibd-arrear_dps CHANGING sf_zbibd-
arrear_dps.
PERFORM convert_currency USING lt_zbibd-
arrear_punitive_amt CHANGING sf_zbibd-arrear_punitive_amt.
PERFORM convert_currency USING lt_zbibd-
arrear_punitive_dps CHANGING sf_zbibd-arrear_punitive_dps.
PERFORM convert_currency USING lt_zbibd-
arrear_other_chg CHANGING sf_zbibd-arrear_other_chg.
PERFORM convert_currency USING lt_zbibd-total_arrear CHANGING sf_zbibd-
total_arrear.
PERFORM convert_currency USING lt_zbibd-
curr_dps_kept_on_abey CHANGING sf_zbibd-curr_dps_kept_on_abey.
PERFORM convert_currency USING lt_zbibd-
current_month_dps CHANGING sf_zbibd-current_month_dps.
PERFORM convert_currency USING lt_zbibd-
fixed_demand_chrg CHANGING sf_zbibd-fixed_demand_chrg.
PERFORM convert_currency USING lt_zbibd-
excess_demand_chrg CHANGING sf_zbibd-excess_demand_chrg.
PERFORM convert_currency USING lt_zbibd-energy_charge CHANGING sf_zbibd-
energy_charge.
PERFORM convert_currency USING lt_zbibd-
energy_charge_1h1 CHANGING sf_zbibd-energy_charge_1h1.
PERFORM convert_currency USING lt_zbibd-
energy_charge_2h1 CHANGING sf_zbibd-energy_charge_2h1.
PERFORM convert_currency USING lt_zbibd-
energy_charge_3h1 CHANGING sf_zbibd-energy_charge_3h1.
PERFORM convert_currency USING lt_zbibd-minimum_charge CHANGING sf_zbibd-
minimum_charge.
PERFORM convert_currency USING lt_zbibd-
electricity_duty CHANGING sf_zbibd-electricity_duty.
PERFORM convert_currency USING lt_zbibd-meter_rent CHANGING sf_zbibd-
meter_rent.
PERFORM convert_currency USING lt_zbibd-meter_cgst CHANGING sf_zbibd-
meter_cgst.
PERFORM convert_currency USING lt_zbibd-meter_sgst CHANGING sf_zbibd-
meter_sgst.
PERFORM convert_currency USING lt_zbibd-
vat_on_meter_rent CHANGING sf_zbibd-vat_on_meter_rent.
PERFORM convert_currency USING lt_zbibd-
shunt_cap_charge CHANGING sf_zbibd-shunt_cap_charge.
PERFORM convert_currency USING lt_zbibd-fppca_charges CHANGING sf_zbibd-
fppca_charges.
PERFORM convert_currency USING lt_zbibd-
pf_surchg_rebate CHANGING sf_zbibd-pf_surchg_rebate.
PERFORM convert_currency USING lt_zbibd-
transformer_rent CHANGING sf_zbibd-transformer_rent.
PERFORM convert_currency USING lt_zbibd-other_charges CHANGING sf_zbibd-
other_charges.
IF lt_zbibd-installment_amount IS INITIAL.
CLEAR sf_zbibd-installment_amount.
ELSE.
PERFORM convert_currency USING lt_zbibd-
installment_amount CHANGING sf_zbibd-installment_amount.
ENDIF.
PERFORM convert_currency USING lt_zbibd-inst_on_arrear CHANGING sf_zbibd-
inst_on_arrear.
PERFORM convert_currency USING lt_zbibd-
adjustment_dr_cr CHANGING sf_zbibd-adjustment_dr_cr.
PERFORM convert_currency USING lt_zbibd-
voltage_surcharge CHANGING sf_zbibd-voltage_surcharge.
PERFORM convert_currency USING lt_zbibd-
total_current_amount CHANGING sf_zbibd-total_current_amount.
PERFORM convert_currency USING lt_zbibd-interest_sd CHANGING sf_zbibd-
interest_sd.
PERFORM convert_currency USING lt_zbibd-
incentive_charge CHANGING sf_zbibd-incentive_charge.
PERFORM convert_currency USING lt_zbibd-
incentive_under_iip CHANGING sf_zbibd-incentive_under_iip.
PERFORM convert_currency USING lt_zbibd-
amt_abey_with_dps CHANGING sf_zbibd-amt_abey_with_dps.
PERFORM convert_currency USING lt_zbibd-net_amt_pybl CHANGING sf_zbibd-
net_amt_pybl.
PERFORM convert_currency USING lt_zbibd-ppi_leviable CHANGING sf_zbibd-
ppi_leviable.
PERFORM convert_currency USING lt_zbibd-ppi_levied CHANGING sf_zbibd-
ppi_levied.
PERFORM convert_currency USING lt_zbibd-
net_amt_pbl_by_due_dt CHANGING sf_zbibd-net_amt_pbl_by_due_dt.
PERFORM convert_currency USING lt_zbibd-
net_amt_pbl_btwn_due_dt CHANGING sf_zbibd-net_amt_pbl_btwn_due_dt.
PERFORM convert_currency USING lt_zbibd-
amt_pybl_aftr_due_date CHANGING sf_zbibd-amt_pybl_aftr_due_date.
PERFORM convert_currency USING lt_zbibd-remission CHANGING sf_zbibd-
remission.
* venkat
* IF lt_zbibd-tariff_type+0(2) = 'HT' or lt_zbibd-tariff_type+0(2) = 'RT'.
* lt_zbibd-gov_subsidy = abs( lt_zbibd-gov_subsidy ).
* ENDIF.
PERFORM convert_currency USING lt_zbibd-gov_subsidy CHANGING sf_zbibd-
gov_subsidy.
PERFORM convert_currency USING lt_zbibd-online_rebate CHANGING sf_zbibd-
online_rebate.
PERFORM convert_currency USING lt_zbibd-cross_subsidy CHANGING sf_zbibd-
cross_subsidy.
PERFORM convert_currency USING lt_zbibd-reactive_chrg CHANGING sf_zbibd-
reactive_chrg.

* venkat
IF lt_zbibd-last_pymt_amt IS INITIAL.
CLEAR sf_zbibd-last_pymt_amt.
ENDIF.

IF lt_zbibd-pymt_amt IS INITIAL.
CLEAR sf_zbibd-pymt_amt.
ENDIF.

PERFORM convert_currency USING lt_zbibd-cont_dem_85 CHANGING sf_zbibd-


cont_dem_85.
IF lt_zbibd-cont_dem_85 IS INITIAL.
sf_zbibd-cont_dem_85 = sf_zbibd-cont_dem_85+0(4).
ELSE.
sf_zbibd-cont_dem_85 = sf_zbibd-cont_dem_85+0(7).
ENDIF.
PERFORM convert_currency USING lt_zbibd-
current_arrear_tot CHANGING sf_zbibd-current_arrear_tot.

PERFORM convert_currency USING v_oa_hrs CHANGING zextra-oa_hrs.


CLEAR dummy1.
SPLIT zextra-oa_hrs AT '.' INTO zextra-oa_hrs dummy1.

* PERFORM convert_currency USING v_css_rate CHANGING zextra-css_rate.


* CLEAR dummy1.
* SPLIT zextra-css_rate AT '.' INTO zextra-css_rate dummy1.
* CONCATENATE zextra-css_rate '.' dummy1+0(2) INTO zextra-css_rate .
* CONDENSE zextra-css_rate.

IF lt_zbibd-sub_div_code = 'ECCA' OR lt_zbibd-sub_div_code = 'CBAA' OR


lt_zbibd-sub_div_code = 'CBAD' OR lt_zbibd-sub_div_code = 'ECDA' OR
lt_zbibd-sub_div_code = 'BABA' OR lt_zbibd-sub_div_code = 'ECBA' OR
lt_zbibd-sub_div_code = 'CAFA' OR "lt_zbibd-sub_div_code = 'FBAA' OR
lt_zbibd-sub_div_code = 'ECAA' OR lt_zbibd-sub_div_code = 'BBAA' OR
lt_zbibd-sub_div_code = 'BBAB' OR lt_zbibd-sub_div_code = 'DBBB' OR
lt_zbibd-sub_div_code = 'EADA' OR lt_zbibd-sub_div_code = 'EADD' OR
lt_zbibd-sub_div_code = 'ECDD'." OR lt_zbibd-sub_div_code = 'DBCC'.

IF NOT gv_zcn3 IS INITIAL


AND lt_zbibd-bill_month+0(8) = 'JUN-
2014'. " + TMSUDHAKARP #B10K902608
CLEAR text1.
PERFORM convert_currency USING gv_zcn3 CHANGING text1.
CONDENSE text1.
zextra-
mess1 = '* Current month DPS is inclusive of uncharged DPS of Rs.'.
CONCATENATE zextra-mess1 text1
'for May,2014.' INTO zextra-mess1 SEPARATED BY ''.
ENDIF.
ENDIF.

CLEAR text1.

*************BARCODE PRINTING WITH CA & AMOUNT


lv_amt90 = lt_zbibd-net_amt_pbl_btwn_due_dt.
CONDENSE lv_amt90.
CONCATENATE sf_zbibd-contract_account
lv_amt90 INTO sf_zbibd-bar_code.
SPLIT sf_zbibd-bar_code AT '.' INTO sf_zbibd-bar_code dummy1.
PACK sf_zbibd-bar_code TO sf_zbibd-bar_code.
CONDENSE sf_zbibd-bar_code.
* MOVE: lt_zbibd-contract_account TO sf_zbibd-bar_code.

IF lt_zbibd-fixed_demand_chrg IS NOT INITIAL.


PERFORM convert_currency USING max_dem CHANGING zextra-max_dem.
CLEAR dummy1.
SPLIT zextra-max_dem AT '.' INTO zextra-max_dem dummy1.
CONDENSE zextra-max_dem.
CONCATENATE '@ ' zextra-max_dem '/-per KVA' INTO zextra-
max_dem SEPARATED BY space.
ENDIF.

IF NOT lt_zbibd-energy_charge_1h1 IS INITIAL.


PERFORM convert_currency USING 1h1_rate CHANGING zextra-1h1.
CLEAR dummy1.
SPLIT zextra-1h1 AT '.' INTO zextra-1h1 dummy1.
CONCATENATE zextra-1h1 '.' dummy1+0(3) INTO zextra-1h1.
CONDENSE zextra-1h1.
CONCATENATE '@ ' zextra-1h1 INTO zextra-1h1 SEPARATED BY space.
ENDIF.

IF NOT lt_zbibd-energy_charge_2h1 IS INITIAL.


CLEAR dummy1.
PERFORM convert_currency USING 2h1_rate CHANGING zextra-2h1.
CLEAR dummy1.
SPLIT zextra-2h1 AT '.' INTO zextra-2h1 dummy1.
CONCATENATE zextra-2h1 '.' dummy1+0(3) INTO zextra-2h1.
CONDENSE zextra-2h1.
CONCATENATE '@ ' zextra-2h1 INTO zextra-2h1 SEPARATED BY space.
ENDIF.

IF NOT lt_zbibd-energy_charge_3h1 IS INITIAL.


CLEAR dummy1.
PERFORM convert_currency USING 3h1_rate CHANGING zextra-3h1.
CLEAR dummy1.
SPLIT zextra-3h1 AT '.' INTO zextra-3h1 dummy1.
CONCATENATE zextra-3h1 '.' dummy1+0(3) INTO zextra-3h1.
CONDENSE zextra-3h1.
CONCATENATE '@ ' zextra-3h1 INTO zextra-3h1 SEPARATED BY space.
ENDIF.

IF NOT lt_zbibd-pf_surchg_rebate IS INITIAL.


IF lt_zbibd-power_factor LE '1'.
IF lt_zbibd-power_factor BETWEEN '.9' AND '.95'.
rebate_rate = lt_zbibd-power_factor - '.9'.
rebate_rate = rebate_rate * '.5'.
ELSEIF lt_zbibd-power_factor GT '.95'.
rebate_rate = lt_zbibd-power_factor - '.95'.
rebate_rate = rebate_rate + '.025'.
ELSEIF lt_zbibd-power_factor GE '.8' AND lt_zbibd-
power_factor LT '.9'.
rebate_rate = '.9' - lt_zbibd-power_factor.
ELSEIF lt_zbibd-power_factor GT '0' AND lt_zbibd-
power_factor LT '.8'.
rebate_rate = '.8' - lt_zbibd-power_factor.
rebate_rate = ( rebate_rate * '1.5' ) + '.1'.
ENDIF.
rebate_rate = rebate_rate * 100.
PERFORM convert_currency USING rebate_rate CHANGING zextra-rebate.
CLEAR dummy1.
SPLIT zextra-rebate AT '.' INTO zextra-rebate dummy1.
CONCATENATE zextra-rebate '.' dummy1+0(2) '%' INTO zextra-rebate.
CONDENSE zextra-rebate.
CONCATENATE '@ ' zextra-rebate INTO zextra-rebate SEPARATED BY space.
ELSE.
lt_zbibd-power_factor = '1.00'.
zextra-rebate = '@ 7.5%'.
ENDIF.
ENDIF.

SPLIT: sf_zbibd-tot_unit_billed AT '.' INTO sf_zbibd-


tot_unit_billed dummy1.

CONDENSE: sf_zbibd-connect_load_hp,
sf_zbibd-connect_load_kw,
sf_zbibd-contract_demand_kw,
sf_zbibd-contract_demand_kv,
sf_zbibd-rcorded_demand,
sf_zbibd-bar_code,
sf_zbibd-power_factor,
sf_zbibd-cont_dem_85,
sf_zbibd-last_pymt_amt,
sf_zbibd-pymt_amt,
sf_zbibd-bill_status,
sf_zbibd-minimum_unit,
sf_zbibd-tot_unit_billed,
sf_zbibd-bill_days,
sf_zbibd-old_acc_no,
sf_zbibd-mob_no.

IF lt_zbibd-rcorded_demand IS NOT INITIAL.


IF lv_end_date GE '20180401' and ( lt_zbibd-tariff_type = 'PUBWW' or
lt_zbibd-tariff_type+0(2) = 'LT' ).
CONCATENATE sf_zbibd-rcorded_demand 'KVA' INTO sf_zbibd-
rcorded_demand SEPARATED BY space.
ELSE.
CONCATENATE sf_zbibd-rcorded_demand 'KW' INTO sf_zbibd-
rcorded_demand SEPARATED BY space.
ENDIF.
ENDIF.
IF sf_zbibd-connect_load_hp IS NOT INITIAL.
CONCATENATE sf_zbibd-connect_load_hp 'HP' INTO sf_zbibd-
connect_load_hp SEPARATED BY ''.
ELSEIF NOT sf_zbibd-connect_load_kw IS INITIAL.
CONCATENATE sf_zbibd-connect_load_kw 'KW' INTO sf_zbibd-
connect_load_kw SEPARATED BY ''.
ELSEIF NOT sf_zbibd-contract_demand_kw IS INITIAL.
CONCATENATE sf_zbibd-contract_demand_kw 'KW' INTO sf_zbibd-
contract_demand_kw." SEPARATED BY ''.
IF lv_end_date GE '20180401' and ( lt_zbibd-tariff_type = 'PUBWW' or
lt_zbibd-tariff_type+0(2) = 'LT' ).
CONCATENATE zextra-ltdem_kva 'KVA' INTO zextra-
ltdem_kva." SEPARATED BY ''.
CONCATENATE sf_zbibd-contract_demand_kw zextra-ltdem_kva INTO
sf_zbibd-contract_demand_kw SEPARATED BY '-'.
ENDIF.

ELSEIF NOT sf_zbibd-contract_demand_kv IS INITIAL.


CONCATENATE sf_zbibd-contract_demand_kv 'KVA' INTO sf_zbibd-
contract_demand_kv SEPARATED BY ''.
ENDIF.

zextra-creation_date = creation_date.
CONCATENATE sf_zbibd-sub_contract mon_no lt_zbibd-bill_month+6(2)
sf_zbibd-tariff_type sf_zbibd-invoiceno
INTO zextra-bill_no.
CONDENSE zextra-bill_no.
IF lt_zbibd-tariff_type+0(2) <> 'HT' AND lt_zbibd-
tariff_type+0(2) <> 'RT'.
*******************Copy Meter details data into Smartform type*************
**********************
IF lv_end_date GE '20170401'.
IF lt_zbibd-tariff_type+0(2) = 'LT' OR
lt_zbibd-tariff_type+0(2) = 'PU'.
IF pl_adj = 'X'.
ELSE.
SORT gt_bimd BY register.
ENDIF.
ELSE.
SORT gt_bimd BY register.
ENDIF.
ELSE.
SORT gt_bimd BY register.
ENDIF.

CLEAR dum.
LOOP AT gt_bimd INTO wa_bimd.
* IF last_date IS INITIAL and wa_bimd-register = '001'.
* wa_bimd-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date - 1.
* ENDIF.
MOVE-CORRESPONDING wa_bimd TO str_bimd.
PACK: str_bimd-meter_no TO str_bimd-meter_no.
* str_bimd-mnf_srl_no TO str_bimd-mnf_srl_no.
SPLIT str_bimd-pre_mtr_rdng AT '.' INTO str_bimd-pre_mtr_rdng dummy1.
SPLIT str_bimd-curr_mtr_rdng AT '.' INTO str_bimd-
curr_mtr_rdng dummy1.
SPLIT str_bimd-meter_no AT '.' INTO str_bimd-meter_no dummy1.
SPLIT str_bimd-billed_mtr_rdng AT '.' INTO str_bimd-
billed_mtr_rdng dummy1.
SPLIT str_bimd-rdng_diff AT '.' INTO str_bimd-rdng_diff dummy1.
SPLIT str_bimd-billed_consum AT '.' INTO str_bimd-
billed_consum dummy1.
SPLIT str_bimd-total_consum AT '.' INTO str_bimd-total_consum dummy1.
SPLIT str_bimd-avg_mmc_units AT '.' INTO str_bimd-
avg_mmc_units dummy1.
SPLIT str_bimd-mult_fac AT '.' INTO str_bimd-mult_fac dummy1.

CLEAR: dum.
dum = wa_bimd-curr_mtr_rdng_date.
CONCATENATE dum+6(2) '.' dum+4(2) '.' dum+2(2) INTO str_bimd-
curr_mtr_rdng_date.
CLEAR: dum.
dum = wa_bimd-pre_mtr_rdng_date.
CONCATENATE dum+6(2) '.' dum+4(2) '.' dum+2(2) INTO str_bimd-
pre_mtr_rdng_date.

CONDENSE: str_bimd-pre_mtr_rdng,
str_bimd-curr_mtr_rdng,
str_bimd-meter_no,
str_bimd-billed_mtr_rdng,
str_bimd-rdng_diff,
str_bimd-billed_consum,
str_bimd-total_consum,
str_bimd-avg_mmc_units,
str_bimd-mult_fac,
str_bimd-mnf_srl_no.

IF lv_end_date GE '20170401'.
IF lt_zbibd-tariff_type+0(2) = 'LT' OR
lt_zbibd-tariff_type+0(2) = 'PU'.
IF pl_adj = 'X' AND wa_bimd-register ='001'.
str_bimd-meter_no = 'KWH'.
ENDIF.
ENDIF.
ENDIF.
REPLACE FIRST OCCURRENCE OF '_dummy' IN str_bimd-
mnf_srl_no WITH '' IGNORING CASE.
REPLACE FIRST OCCURRENCE OF 'dummy' IN str_bimd-
mnf_srl_no WITH '' IGNORING CASE.
APPEND str_bimd TO sf_bimd.
ENDLOOP.
* BREAK-POINT.
********************WHEN ZEA60 IS EXECUTED, RAW FORM WILL BE CREATED AS SPO
OL
* ***************NEXT COMING FORMS WILL BE SAVED IN THE SAME SPOOL******
*****
IF c-itcpo-tdpreview NE 'X' AND flag_bapi EQ ''.
IF 1 = 1 and sy-tcode = 'EA60' AND lt_zbibd-
tariff_type+0(2) EQ 'LT' AND sy-batch NE 'X'.
output_options-tdcopies = c-itcpo-tdcopies.
output_options-tddest = 'ZHIN'."c-itcpo-tddest.
output_options-tdprinter = 'ZSWINCF'."c-itcpo-tdprinter.
output_options-tdnoprev = c-itcpo-
tdnoprev."PUT X HERE FOR SPOOL GENERATION
output_options-tdnoprint = c-itcpo-tdnoprint.
output_options-tdnewid = c-itcpo-
tdnewid."PUT X HERE FOR SPOOL GENERATION
output_options-tdimmed = c-itcpo-tdimmed.
output_options-tddelete = c-itcpo-tddelete.
output_options-tdlifetime = c-itcpo-tdlifetime.
output_options-tdarmod = '1'. "print_params-itcpo-tdarmod.
control-no_dialog = 'X'.

control-preview = ''."c-itcpo-tdpreview.
control-device = ''. "c-itcpp-tddevice.
control-getotf = 'X'."c-itcpo-
tdgetotf."DELETE X HERE FOR SPOOL GENERATION

CLEAR: job_output_info,name,l_document_output_info,l_job_output_opt
ions.
IF lv_end_date GE '20180401'.
form_name = 'ZIS_BILL_PRINT_ONLINE_2018'.
ELSE.
form_name = 'ZIS_BILL_PRINT_ONLINE'.
ENDIF.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'


EXPORTING
formname = form_name "'ZIS_BILL_PRINT_ONLINE' "form_n
ame
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = fname
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

CALL FUNCTION fname


EXPORTING
control_parameters = control
output_options = output_options
wa_zbibd = sf_zbibd
act_zbibd = lt_zbibd
gv_days = gv_adj_days
lv_pl_message = lv_pl_message
staff_unit = staff_unit
pl_adj = lv_pl_adjustment
mess_judge = mess_judge
mess_abey = mess_abey
mess1 = lv_zmessage
mess2 = lv_zmessage1
mess3 = lv_zmessage2
pl_flag = flag1
spool = spool
extra = zextra
gov_sub = v_gov_sub
IMPORTING
document_output_info = l_document_output_info
job_output_info = job_output_info " HERE WE GET SPOOL NUM
BER
job_output_options = l_job_output_options
TABLES
itbimd = sf_bimd
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.

CLEAR: pdf_table,pdf_fsize,lt_pdf_uc_data,l_cline,otf_table.
* BREAK-POINT.
REFRESH: it_pdf[].
otf_table = job_output_info-otfdata.
******************************************
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = pdf_fsize
TABLES
otf = otf_table
lines = pdf_table
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.
* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DATA: desktop TYPE string.
CALL METHOD cl_gui_frontend_services=>get_desktop_directory
CHANGING
desktop_directory = desktop
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
OTHERS = 3.
IF sy-subrc <> 0.
ENDIF.

CALL METHOD cl_gui_cfw=>update_view


EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
* desktop = 'C:\Users\41007210\Desktop\PRINT\'.
CONCATENATE desktop '\LTISPRINT\' sf_zbibd-sub_div_code '\'
sf_zbibd-invoiceno '.pdf' INTO desktop.
CONDENSE desktop.
cl_gui_frontend_services=>gui_download(
EXPORTING
filename = desktop
filetype = 'BIN'
CHANGING
data_tab = pdf_table ).
EXIT.
* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ELSE.
output_options-tdcopies = c-itcpo-tdcopies.
output_options-tddest = 'ZHIN'."c-itcpo-tddest.
output_options-tdprinter = 'ZSWINCF'."c-itcpo-tdprinter.
output_options-tdnoprev = 'X'."c-itcpo-
tdnoprev."PUT X HERE FOR SPOOL GENERATION
output_options-tdnoprint = c-itcpo-tdnoprint.
**** output_options-tdnewid = c-itcpo-
tdnewid."PUT X HERE FOR SPOOL GENERATION
output_options-tdimmed = c-itcpo-tdimmed.
output_options-tddelete = c-itcpo-tddelete.
output_options-tdlifetime = c-itcpo-tdlifetime.
output_options-tdarmod = '1'. "print_params-itcpo-tdarmod.
control-no_dialog = 'X'.

control-preview = ''."c-itcpo-tdpreview.
control-device = ''. "c-itcpp-tddevice.
control-getotf = ' '."c-itcpo-
tdgetotf."DELETE X HERE FOR SPOOL GENERATION
* control-no_close = 'X'.

IF printflag IS INITIAL.
output_options-tdnewid = 'X'.
gv_invoice = sf_zbibd-invoiceno.
gv_mru = sf_zbibd-mru.
gv_time = sf_zbibd-created_time.
CONCATENATE gv_invoice '_' gv_mru '_' gv_time INTO gv_title.
CONDENSE gv_title.
output_options-tdcovtitle = gv_title.
printflag = 'X'.
ELSE.
output_options-tdcovtitle = gv_title.
output_options-tdnewid = ''.
ENDIF.
spool = spool + 1.

CLEAR: job_output_info,name,l_document_output_info,l_job_output_opt
ions.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'


EXPORTING
formname = form_name "ZIS_LT_PRE_PRINTED
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = fname
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

CALL FUNCTION fname


EXPORTING
control_parameters = control
output_options = output_options
wa_zbibd = sf_zbibd
act_zbibd = lt_zbibd
gv_days = gv_adj_days
lv_pl_message = lv_pl_message
staff_unit = staff_unit
pl_adj = lv_pl_adjustment
mess_judge = mess_judge
mess_abey = mess_abey
mess1 = lv_zmessage
mess2 = lv_zmessage1
mess3 = lv_zmessage2
pl_flag = flag1
spool = spool
extra = zextra
IMPORTING
document_output_info = l_document_output_info
job_output_info = job_output_info " HERE WE GET SPOOL NUM
BER
job_output_options = l_job_output_options
TABLES
itbimd = sf_bimd
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.

EXIT.
ENDIF.
ELSE.

output_options-tdcopies = c-itcpo-tdcopies.
output_options-tddest = 'ZHIN'."c-itcpo-tddest.
output_options-tdprinter = 'ZSWINCF'."c-itcpo-tdprinter.
output_options-tdnoprev = c-itcpo-
tdnoprev."PUT X HERE FOR SPOOL GENERATION
output_options-tdnoprint = c-itcpo-tdnoprint.
output_options-tdnewid = c-itcpo-
tdnewid."PUT X HERE FOR SPOOL GENERATION
output_options-tdimmed = c-itcpo-tdimmed.
output_options-tddelete = c-itcpo-tddelete.
output_options-tdlifetime = c-itcpo-tdlifetime.
output_options-tdarmod = '1'. "print_params-itcpo-tdarmod.
control-no_dialog = 'X'.

control-preview = ''."c-itcpo-tdpreview.
control-device = ''. "c-itcpp-tddevice.
control-getotf = 'X'."c-itcpo-
tdgetotf."DELETE X HERE FOR SPOOL GENERATION

CLEAR: job_output_info,name,l_document_output_info,l_job_output_optio
ns.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'


EXPORTING
formname = form_name "ZIS_BILL_PRINT_ONLINE
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = fname
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

CALL FUNCTION fname


EXPORTING
control_parameters = control
output_options = output_options
wa_zbibd = sf_zbibd
act_zbibd = lt_zbibd
gv_days = gv_adj_days
lv_pl_message = lv_pl_message
staff_unit = staff_unit
pl_adj = lv_pl_adjustment
mess_judge = mess_judge
mess_abey = mess_abey
mess1 = lv_zmessage
mess2 = lv_zmessage1
mess3 = lv_zmessage2
pl_flag = flag1
spool = spool
extra = zextra
IMPORTING
document_output_info = l_document_output_info
job_output_info = job_output_info " HERE WE GET SPOOL NUMBE
R
job_output_options = l_job_output_options
TABLES
itbimd = sf_bimd
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
OTHERS = 5.
ENDIF.

* append LINES OF job_output_info-otfdata to job_output_info-otfdata.


CLEAR: pdf_table,pdf_fsize,lt_pdf_uc_data,l_cline,otf_table.
IF sy-uname = 'CRM_RFC'.
otf_table = job_output_info-otfdata.
yt_otf[] = otf_table[].
EXIT.
ENDIF.

LOOP AT xt_ranges1 WHERE low = 'EBILL'.


otf_table = job_output_info-otfdata.
yt_otf[] = otf_table[].
EXIT.
ENDLOOP.
IF xt_ranges1-low = 'EBILL'.
EXIT.
ENDIF.
* BREAK-POINT.
IF c-itcpo-tdpreview NE 'X'.
REFRESH: it_pdf[].
otf_table = job_output_info-otfdata.
******************************************
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = pdf_fsize
TABLES
otf = otf_table
lines = pdf_table
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.
* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
* DATA: desktop TYPE string.
* CALL METHOD cl_gui_frontend_services=>get_desktop_directory
* CHANGING
* desktop_directory = desktop
* EXCEPTIONS
* cntl_error = 1
* error_no_gui = 2
* OTHERS = 3.
* IF sy-subrc <> 0.
* ENDIF.
*
* CALL METHOD cl_gui_cfw=>update_view
* EXCEPTIONS
* cntl_system_error = 1
* cntl_error = 2
* OTHERS = 3.
** desktop = 'C:\Users\41007210\Desktop\PRINT\'.
* CONCATENATE desktop '\LTISPRINT\' sf_zbibd-sub_div_code '\'
* sf_zbibd-invoiceno '.pdf' INTO desktop.
* CONDENSE desktop.
* cl_gui_frontend_services=>gui_download(
* EXPORTING
* filename = desktop
* filetype = 'BIN'
* CHANGING
* data_tab = pdf_table ).
* EXIT.
* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

REFRESH lt_pdf_uc_data.
"convert PDF data into binary format

LOOP AT pdf_table INTO l_cline.


ASSIGN l_cline TO <l_xline> CASTING.
APPEND <l_xline> TO lt_pdf_uc_data.
ENDLOOP.

*********************E-Bill**********************************
LOOP AT xt_ranges1 WHERE low = 'EMLO'.
CLEAR: name.
name = '(SAPLZBAPI_ONLINE_BILL_PDF)MTAB'.
CONDENSE name.
ASSIGN (name) TO <f1>.
IF sy-subrc IS INITIAL.
<f1> = lt_pdf_uc_data[].
ENDIF.
ENDLOOP.
IF xt_ranges1-low = 'EMLO'.
EXIT.
ENDIF.
*********************End of E-Bill**********************************
********************************************************************
***** IF printflag IS INITIAL.
***** CLEAR: physicpath,filename,additional_parameters.
*****
***** CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
***** EXPORTING
***** client = sy-mandt
***** logical_path = logicpath
***** operating_system = sy-opsys "c_operating_sys "
***** file_name = c_dummy_file
***** IMPORTING
***** file_name_with_path = filename
***** EXCEPTIONS
***** path_not_found = 1
***** missing_parameter = 2
***** operating_system_not_found = 3
***** file_system_not_found = 4
***** OTHERS = 5.
***** IF sy-subrc <> 0.
****** Implement suitable error handling here
***** ENDIF.
***** REPLACE c_dummy_file WITH space INTO filename.
***** physicpath = filename.
***** CONCATENATE physicpath lt_zbibd-sub_div_code '_' sy-
datum+6(2) sy-datum+4(2) sy-datum+0(4)
***** INTO additional_parameters.
***** CONCATENATE physicpath sy-datum+6(2) '_' sy-datum+4(2) '_' sy-
datum+0(4)
***** INTO physicpath. "lt_zbibd-
sub_div_code '_'
***** printflag = 'X'.
***** ENDIF.
***** IF additional_parameters IS NOT INITIAL.
***** physicpath = additional_parameters.
***** CONCATENATE physicpath '_' lt_zbibd-
invoiceno '_LT.pdf' INTO physicpath.
***** CONDENSE physicpath.
***** OPEN DATASET physicpath FOR INPUT IN TEXT MODE ENCODING DEFAUL
T.
***** IF sy-subrc = 0.
***** DELETE DATASET physicpath.
***** ENDIF.
***** OPEN DATASET physicpath FOR OUTPUT IN BINARY MODE. "TEXT MODE
ENCODING DEFAULT. "BINARY MODE.
***** IF sy-subrc = 0.
***** LOOP AT lt_pdf_uc_data INTO wa_pdf_uc.
***** TRANSFER wa_pdf_uc TO physicpath.
***** ENDLOOP.
***** ENDIF.
***** CLOSE DATASET physicpath.
***** CLEAR: physicpath.
****** printflag = 'X'.
***** ENDIF.
*******************************************************************
* *******************************************************************
ELSE.
* BREAK-POINT.
*
* REFRESH: it_pdf[].
* otf_table = job_output_info-otfdata.
*
* CALL FUNCTION 'CONVERT_OTF'
* EXPORTING
* format = 'PDF'
* IMPORTING
* bin_filesize = pdf_fsize
* TABLES
* otf = otf_table
* lines = pdf_table
* EXCEPTIONS
* err_max_linewidth = 1
* err_format = 2
* err_conv_not_possible = 3
* OTHERS = 4.
*
* REFRESH lt_pdf_uc_data.
*
*
* LOOP AT pdf_table INTO l_cline.
* ASSIGN l_cline TO <l_xline> CASTING.
* APPEND <l_xline> TO lt_pdf_uc_data.
* ENDLOOP.
*
*
* DATA: T345 TYPE itcpo,
* spl TYPE ITCPP-TDSPOOLID.
* T345-tdcopies = c-itcpo-tdcopies.
* T345-tddest = 'ZHIN'."c-itcpo-tddest.
* T345-tdprinter = 'ZSWINCF'."c-itcpo-tdprinter.
* T345-tdnoprev = 'X'."c-itcpo-
tdnoprev."PUT X HERE FOR SPOOL GENERATION
* T345-tdnoprint = c-itcpo-tdnoprint.
* T345-tdnewid = 'X'."c-itcpo-tdnewid."PUT X HERE FOR SPOOL GENERATION
* T345-tdimmed = c-itcpo-tdimmed.
* T345-tddelete = c-itcpo-tddelete.
* T345-tdlifetime = c-itcpo-tdlifetime.
* T345-tdarmod = '1'. "print_params-itcpo-tdarmod.
** control-no_dialog = ' '.
* CALL FUNCTION 'PRINT_OTF'
* EXPORTING
* printoptions = T345
* IMPORTING
** OTF_PRINTER =
** OTF_DEVICETYPE =
** PRINT_SUCCESSFUL =
* SPOOLID = spl
* tables
* otf = lt_pdf_uc_data. "job_output_info-
otfdata.
* .

CALL FUNCTION 'HR_IT_DISPLAY_WITH_PDF'


TABLES
otf_table = job_output_info-otfdata.
ENDIF.
* ENDIF.
*********************E-Bill**********************************
* IF NOT xt_ranges IS INITIAL.
* IF NOT job_output_info-otfdata[] IS INITIAL.
* CLEAR: name.
* name = '(SAPLZBAPI_ONLINE_BILL_PDF)T_OTF_DATA'.
* CONDENSE name.
* ASSIGN (name) TO <f1>.
* IF sy-subrc IS INITIAL.
* MOVE job_output_info-otfdata[] TO <f1>.
* <f1> = job_output_info-otfdata[].
* ENDIF.
* ENDIF.
* ENDIF.
************************Smartoform for HT cases****************************
***

ELSEIF lt_zbibd-tariff_type+0(2) = 'HT' OR lt_zbibd-


tariff_type+0(2) = 'RT'.

*******************Copy Meter details data into Smartform type*************


**********************
DESCRIBE TABLE gt_bimd LINES meter_flag.
IF lt_zbibd-tariff_type = 'HTS-III_OP' OR
lt_zbibd-tariff_type = 'HTS-I_OP' .
IF meter_flag GT 8.
meter_flag = meter_flag / 8.
ELSE.
meter_flag = 1.
ENDIF.
ELSE.
IF tod_flag IS INITIAL.
IF meter_flag GT 6."3.
meter_flag = meter_flag / 6."3.
ELSE.
meter_flag = 1.
ENDIF.
ELSEIF meter_flag GT 6.
meter_flag = meter_flag / 6.
ELSE.
meter_flag = 1.
ENDIF.
ENDIF.
IF meter_flag GT 1.
zextra-annex = 'X'.
ENDIF.
IF lv_daats_ab GE '20160401'.
zextra-2016_flag = 'X'.
ENDIF.

DO meter_flag TIMES.
str_bimd-parameters = 'Date'.
str_bimd-register = '990'.
APPEND str_bimd TO sf_bimd.
IF lv_daats_ab GE '20160401'.

str_bimd-parameters = 'KVAH'.
str_bimd-register = '005'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = '1H1 (5:00 A.M. to 5:00 P.M.)'.


str_bimd-register = '008'. "'002'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = '2H1 (5:00 P.M. to 11:00 P.M.)'.


str_bimd-register = '009'. "003'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = '3H1 (11:00 P.M. to 5:00 A.M.)'.


str_bimd-register = '010'. "'004'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = 'KWH'.
str_bimd-register = '001'.
APPEND str_bimd TO sf_bimd.
IF lt_zbibd-tariff_type = 'HTS-III_OP' OR
lt_zbibd-tariff_type = 'HTS-I_OP'.
str_bimd-parameters = 'KWH OPENACCESS'.
str_bimd-register = '011'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = 'KVARH'.
str_bimd-register = '012'.
APPEND str_bimd TO sf_bimd.
ENDIF.

str_bimd-parameters = 'Max Demand Recorded (KVA)'.


str_bimd-register = '006'.
APPEND str_bimd TO sf_bimd.
ELSE.
str_bimd-parameters = 'KWH(H1)'.
str_bimd-register = '001'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = '1H1 (5:00 A.M. to 5:00 P.M.)'.


str_bimd-register = '002'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = '2H1 (5:00 P.M. to 11:00 P.M.)'.


str_bimd-register = '003'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = '3H1 (11:00 P.M. to 5:00 A.M.)'.


str_bimd-register = '004'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = 'KVAH'.
str_bimd-register = '005'.
APPEND str_bimd TO sf_bimd.

str_bimd-parameters = 'Max Demand Recorded (KVA)'.


str_bimd-register = '006'.
APPEND str_bimd TO sf_bimd.
ENDIF.

ENDDO.

CLEAR: cntr,trans_flag,cntr2.
IF cfac IS INITIAL.
cfac = 1.
ENDIF.

SORT gt_bimd BY meter_no register.


***********for MD case, current meter rdng is same as past rdng*******
LOOP AT gt_bimd INTO wa_bimd WHERE meter_status = 'MD'.
wa_bimd-curr_mtr_rdng = wa_bimd-pre_mtr_rdng.
wa_bimd-billed_mtr_rdng = wa_bimd-pre_mtr_rdng.
wa_bimd-avg_mmc_units = wa_bimd-total_consum.
CLEAR :wa_bimd-rdng_diff,wa_bimd-billed_consum,
wa_bimd-total_consum,wa_bimd-trnsformr_loss.
MODIFY gt_bimd FROM wa_bimd.
* ENDIF.
ENDLOOP.
*************************************************************
LOOP AT sf_bimd INTO str_bimd.
cntr = cntr + 1.
IF lt_zbibd-tariff_type = 'HTS-III_OP' OR
lt_zbibd-tariff_type = 'HTS-I_OP'.
IF cntr = 1 OR cntr = 10 OR cntr = 19 OR cntr = 28.
IF tod_flag IS INITIAL AND cntr LT 10.
READ TABLE gt_bimd INTO wa_bimd INDEX 1.
zextra-meter1 = wa_bimd-mnf_srl_no.
zextra-metermake1 = wa_bimd-meter_make.
ELSEIF tod_flag IS INITIAL AND cntr GT 9 AND cntr LT 19.
READ TABLE gt_bimd INTO wa_bimd INDEX 4.
zextra-meter2 = wa_bimd-mnf_srl_no.
zextra-metermake2 = wa_bimd-meter_make.
ELSEIF tod_flag IS INITIAL AND cntr GT 18 AND cntr LT 28.
READ TABLE gt_bimd INTO wa_bimd INDEX 7.
zextra-meter3 = wa_bimd-mnf_srl_no.
zextra-metermake3 = wa_bimd-meter_make.
ELSEIF tod_flag IS INITIAL AND cntr GT 27 AND cntr LT 37.
READ TABLE gt_bimd INTO wa_bimd INDEX 10.
zextra-meter4 = wa_bimd-mnf_srl_no.
zextra-metermake4 = wa_bimd-meter_make.
ELSE.
READ TABLE gt_bimd INTO wa_bimd INDEX cntr. "WITH KEY register
= '990'.
zextra-meter1 = wa_bimd-mnf_srl_no.
ENDIF.
str_bimd-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
str_bimd-curr_mtr_rdng_date = wa_bimd-curr_mtr_rdng_date.
* str_bimd-rdng_diff = wa_bimd-curr_mtr_rdng_date - wa_bimd-
pre_mtr_rdng_date.
str_bimd-pre_mtr_rdng = str_bimd-pre_mtr_rdng_date.
CONCATENATE str_bimd-pre_mtr_rdng+6(2) str_bimd-
pre_mtr_rdng+4(2) str_bimd-pre_mtr_rdng+0(4)
INTO str_bimd-pre_mtr_rdng SEPARATED BY '.'.
str_bimd-curr_mtr_rdng = str_bimd-curr_mtr_rdng_date.
CONCATENATE str_bimd-curr_mtr_rdng+6(2) str_bimd-
curr_mtr_rdng+4(2) str_bimd-curr_mtr_rdng+0(4)
INTO str_bimd-curr_mtr_rdng SEPARATED BY '.'.

CONDENSE: str_bimd-rdng_diff,str_bimd-curr_mtr_rdng,str_bimd-
pre_mtr_rdng.
MODIFY sf_bimd FROM str_bimd INDEX cntr.
CLEAR: str_bimd.
CONTINUE.
ENDIF.
ELSE.
IF cntr = 1 OR cntr = 8 OR cntr = 15 OR cntr = 22.
IF tod_flag IS INITIAL AND cntr LT 8.
READ TABLE gt_bimd INTO wa_bimd INDEX 1.
zextra-meter1 = wa_bimd-mnf_srl_no.
zextra-metermake1 = wa_bimd-meter_make.
ELSEIF tod_flag IS INITIAL AND cntr GT 7 AND cntr LT 15.
READ TABLE gt_bimd INTO wa_bimd INDEX 4.
zextra-meter2 = wa_bimd-mnf_srl_no.
zextra-metermake2 = wa_bimd-meter_make.
ELSEIF tod_flag IS INITIAL AND cntr GT 14 AND cntr LT 22.
READ TABLE gt_bimd INTO wa_bimd INDEX 7.
zextra-meter3 = wa_bimd-mnf_srl_no.
zextra-metermake3 = wa_bimd-meter_make.
ELSEIF tod_flag IS INITIAL AND cntr GT 21 AND cntr LT 29.
READ TABLE gt_bimd INTO wa_bimd INDEX 10.
zextra-meter4 = wa_bimd-mnf_srl_no.
zextra-metermake4 = wa_bimd-meter_make.
ELSE.
READ TABLE gt_bimd INTO wa_bimd INDEX cntr.
IF cntr LT 8.
zextra-meter1 = wa_bimd-mnf_srl_no.
zextra-metermake1 = wa_bimd-meter_make.
ELSEIF cntr GE 8 AND cntr LT 15.
zextra-meter2 = wa_bimd-mnf_srl_no.
zextra-metermake2 = wa_bimd-meter_make.
ELSEIF cntr GE 15 AND cntr LT 22.
zextra-meter3 = wa_bimd-mnf_srl_no.
zextra-metermake3 = wa_bimd-meter_make.
ELSEIF cntr GE 22 AND cntr LT 29.
zextra-meter4 = wa_bimd-mnf_srl_no.
zextra-metermake4 = wa_bimd-meter_make.
ENDIF.
ENDIF.
str_bimd-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
str_bimd-curr_mtr_rdng_date = wa_bimd-curr_mtr_rdng_date.
* str_bimd-rdng_diff = wa_bimd-curr_mtr_rdng_date - wa_bimd-
pre_mtr_rdng_date.
str_bimd-pre_mtr_rdng = str_bimd-pre_mtr_rdng_date.
CONCATENATE str_bimd-pre_mtr_rdng+6(2) str_bimd-
pre_mtr_rdng+4(2) str_bimd-pre_mtr_rdng+0(4)
INTO str_bimd-pre_mtr_rdng SEPARATED BY '.'.
str_bimd-curr_mtr_rdng = str_bimd-curr_mtr_rdng_date.
CONCATENATE str_bimd-curr_mtr_rdng+6(2) str_bimd-
curr_mtr_rdng+4(2) str_bimd-curr_mtr_rdng+0(4)
INTO str_bimd-curr_mtr_rdng SEPARATED BY '.'.
str_bimd-mnf_srl_no = wa_bimd-mnf_srl_no.
CONDENSE: str_bimd-rdng_diff,str_bimd-curr_mtr_rdng,str_bimd-
pre_mtr_rdng.
MODIFY sf_bimd FROM str_bimd INDEX cntr.
* wa_bimd-register = '777'.
* MODIFY gt_bimd FROM wa_bimd INDEX cntr TRANSPORTING register.
CLEAR: str_bimd.
CONTINUE.
ENDIF.
ENDIF.
READ TABLE gt_bimd INTO wa_bimd WITH KEY register = str_bimd-
register.
IF sy-subrc = 0.
cntr2 = sy-tabix.
wa_bimd-parameters = str_bimd-parameters.

IF NOT wa_bimd-trnsformr_loss IS INITIAL.


trans_flag = 'X'.
ENDIF.

wa_bimd-pre_mtr_rdng = wa_bimd-pre_mtr_rdng * cfac.


wa_bimd-curr_mtr_rdng = wa_bimd-curr_mtr_rdng * cfac.
wa_bimd-rdng_diff = wa_bimd-rdng_diff * cfac.
wa_bimd-mult_fac = wa_bimd-mult_fac / cfac.
IF cntr EQ 7 AND trans_flag = 'X'.
wa_bimd-trnsformr_loss = wa_bimd-billed_consum * '0.03'.
ENDIF.
wa_bimd-billed_consum = wa_bimd-billed_consum. "ceil( wa_bimd-
billed_consum ).
wa_bimd-trnsformr_loss = wa_bimd-trnsformr_loss. "ceil( wa_bimd-
trnsformr_loss ).
wa_bimd-total_consum = wa_bimd-billed_consum + wa_bimd-
trnsformr_loss.

MOVE-CORRESPONDING wa_bimd TO str_bimd.


IF wa_bimd-trnsformr_loss IS INITIAL.
str_bimd-trnsformr_loss = ''.
ENDIF.

PACK str_bimd-meter_no TO str_bimd-meter_no.

CONDENSE: str_bimd-pre_mtr_rdng,
str_bimd-curr_mtr_rdng,
str_bimd-meter_no,
str_bimd-billed_mtr_rdng,
str_bimd-rdng_diff,
str_bimd-billed_consum,
str_bimd-total_consum,
str_bimd-avg_mmc_units,
str_bimd-mult_fac.
IF str_bimd-register = '005'.
ENDIF.
MODIFY sf_bimd FROM str_bimd INDEX cntr.
wa_bimd-register = '777'.
MODIFY gt_bimd FROM wa_bimd INDEX cntr2.
CLEAR cntr2.
ENDIF.
ENDLOOP.

sf_zbibd-meter_no = str_bimd-mnf_srl_no.

CALL FUNCTION 'ZAMOUNT_INTO_WORDS'


EXPORTING
amount = lt_zbibd-net_amt_pbl_by_due_dt "lt_zbibd-
net_amt_pbl_btwn_due_dt "lt_zbibd-net_amt_pybl
IMPORTING
word = zextra-words.

* BREAK-POINT.
IF lv_ab_date GE '20180401'.
SPLIT sf_zbibd-meter_sgst AT '.' INTO sf_zbibd-meter_sgst dummy1.
SPLIT sf_zbibd-meter_cgst AT '.' INTO sf_zbibd-meter_cgst dummy1.
CONCATENATE '(Incl:CGST Rs.' sf_zbibd-meter_sgst ','
'SGST Rs.' sf_zbibd-meter_cgst ')' INTO zextra-meter_gst.
endif.
CLEAR form_name.
IF lv_ab_date GE '20170401'.
form_name = 'ZIS_U_BILL_HT_2017'.
IF lt_zbibd-finalbill = 'X'.
form_name = 'ZIS_U_BILL_HT_FINAL_2017'.
ENDIF.
ELSE.
form_name = 'ZIS_U_BILL_HT_NEW'.
ENDIF.

* BREAK-POINT.
IF lt_zbibd-tariff_type = 'HTS-III_OP' OR
lt_zbibd-tariff_type = 'HTS-I_OP'.
form_name = 'ZIS_U_BILL_HT_OPENACCESS'.
ENDIF.

IF c-itcpo-tdpreview NE 'X' AND flag_bapi EQ ''.


output_options-tddest = 'LOCL'. "c-itcpo-tddest.
output_options-tdnoprev = 'X'. "c-itcpo-tdnoprev.
control-no_dialog = 'X'.
control-preview = ''."c-itcpo-tdpreview.
control-device = c-itcpp-tddevice.
control-getotf = ''."c-itcpo-tdgetotf.

IF printflag IS INITIAL.
output_options-tdnewid = 'X'.
gv_invoice = sf_zbibd-invoiceno.
gv_mru = sf_zbibd-mru.
gv_time = sf_zbibd-created_time.
CONCATENATE gv_invoice '_' gv_mru '_' gv_time INTO gv_title.
CONDENSE gv_title.
output_options-tdcovtitle = gv_title.
printflag = 'X'.
ELSE.
output_options-tdcovtitle = gv_title.
output_options-tdnewid = ''.
ENDIF.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'


EXPORTING
formname = form_name "'ZIS_U_BILL_HT_2017'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = fname
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* zextra-ABEY = 'X'.

CALL FUNCTION fname


EXPORTING
control_parameters = control
output_options = output_options
wa_zbibd = sf_zbibd
mess_judge = mess_judge
* mess_abey = mess_abey
pf_remark = pf_remark
mess1 = lv_zmessage
mess2 = lv_zmessage1
mess3 = lv_zmessage2
extra = zextra
IMPORTING
job_output_info = job_output_info
TABLES
itbimd = sf_bimd.
IF sy-subrc <> 0.
ENDIF.

ELSE.

output_options-tddest = 'LOCL'. "c-itcpo-tddest.


* output_options-tdprinter = 'SAPWIN'."c-itcpo-tdprinter.
output_options-tdnoprev = c-itcpo-tdnoprev.
* output_options-tdnoprint = c-itcpo-tdnoprint.
* output_options-tdnewid = c-itcpo-tdnewid.
* output_options-tdimmed = c-itcpo-tdimmed.
* output_options-tddelete = c-itcpo-tddelete.
* output_options-tdlifetime = c-itcpo-tdlifetime.
* output_options-tdarmod = '1'. "print_params-itcpo-tdarmod.
control-no_dialog = 'X'.
control-preview = c-itcpo-tdpreview.
control-device = c-itcpp-tddevice.
control-getotf = 'X'."c-itcpo-tdgetotf.
CLEAR: job_output_info,name.

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'


EXPORTING
formname = form_name "'ZIS_U_BILL_HT_2017'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = fname
EXCEPTIONS
no_form = 1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* BREAK-POINT.
CALL FUNCTION fname
EXPORTING
control_parameters = control
output_options = output_options
wa_zbibd = sf_zbibd
mess_judge = mess_judge
pf_remark = pf_remark
mess1 = lv_zmessage
mess2 = lv_zmessage1
mess3 = lv_zmessage2
extra = zextra
IMPORTING
job_output_info = job_output_info
TABLES
itbimd = sf_bimd.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
CLEAR: pdf_table,pdf_fsize,lt_pdf_uc_data,l_cline,otf_table.
IF sy-uname = 'CRM_RFC'.
otf_table = job_output_info-otfdata.
yt_otf[] = otf_table[].
EXIT.
ENDIF.
LOOP AT xt_ranges1 WHERE low = 'EBILL'.
otf_table = job_output_info-otfdata.
yt_otf[] = otf_table[].
EXIT.
ENDLOOP.
IF xt_ranges1-low = 'EBILL'.
EXIT.
ENDIF.

IF c-itcpo-tdpreview NE 'X'.
otf_table = job_output_info-otfdata.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
IMPORTING
bin_filesize = pdf_fsize
TABLES
otf = otf_table
lines = pdf_table
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.

*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
* DATA: data_tab TYPE TABLE OF x255,
* wa_tab TYPE x255.
* DATA: desktop TYPE string.
* desktop = 'C:\Documents and Settings\41007210\Desktop\kiran.pdf'.
*
* cl_gui_frontend_services=>gui_download(
* EXPORTING
* filename = desktop
* filetype = 'BIN'
* CHANGING
* data_tab = pdf_table ). "data_tab ) .
*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
REFRESH lt_pdf_uc_data.
"convert PDF data into binary format
CONCATENATE filename sy-datum+6(2) '_' sy-datum+4(2) '_' sy-
datum+0(4) '_'
lt_zbibd-invoiceno '_HT.pdf' INTO filename.
CONDENSE filename.
LOOP AT pdf_table INTO l_cline.
ASSIGN l_cline TO <l_xline> CASTING.
APPEND <l_xline> TO lt_pdf_uc_data.
ENDLOOP.
*********************E-Bill**********************************
LOOP AT xt_ranges1 WHERE low = 'EMLO'.
CLEAR: name.
name = '(SAPLZBAPI_ONLINE_BILL_PDF)MTAB'.
CONDENSE name.
ASSIGN (name) TO <f1>.
IF sy-subrc IS INITIAL.
<f1> = lt_pdf_uc_data[].
ENDIF.
ENDLOOP.
IF xt_ranges1-low = 'EMLO'.
EXIT.
ENDIF.
*********************End of E-Bill**********************************
**********************************************************************
* OPEN DATASET filename FOR INPUT IN TEXT MODE ENCODING DEFAULT.
* IF sy-subrc = 0.
* DELETE DATASET filename.
* ENDIF.
* OPEN DATASET filename FOR OUTPUT IN BINARY MODE. "TEXT MODE ENCODING
DEFAULT. "BINARY MODE.
* IF sy-subrc = 0.
* LOOP AT lt_pdf_uc_data INTO wa_pdf_uc.
* TRANSFER wa_pdf_uc TO filename.
* ENDLOOP.
* ENDIF.
* CLOSE DATASET filename.
* CLEAR: filename.
**********************************************************************
* ********************************************************************
**
ELSE.
CALL FUNCTION 'HR_IT_DISPLAY_WITH_PDF'
TABLES
otf_table = job_output_info-otfdata.
ENDIF.
ENDIF.

ENDFORM. " USER_EXIT_ZIS_U_END_EXIT


*&---------------------------------------------------------------------*
*& Form CONVERT_CURRENCY
*&---------------------------------------------------------------------*
*&
*&
*& Perform for Currency conversion
*&---------------------------------------------------------------------*
FORM convert_currency USING vv CHANGING pp.
CLEAR: pp.
IF vv LT 0.
vv = vv * -1.
MOVE vv TO pp.
CONDENSE pp.
CONCATENATE '-' pp INTO pp.
ELSE.
MOVE vv TO pp.
CONDENSE pp.
ENDIF.

ENDFORM. "convert_currency

*&---------------------------------------------------------------------*
*& Form DELETE_ZERO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM delete_zero .
CONDENSE lv_num1 NO-GAPS.
SHIFT lv_num1 RIGHT DELETING TRAILING '0'.
SHIFT lv_num1 RIGHT DELETING TRAILING '.'.
CONDENSE lv_num1 NO-GAPS.

ENDFORM. " DELETE_ZERO


*&---------------------------------------------------------------------*
*& Form meter_details_new_tariff
*&---------------------------------------------------------------------*
*&
*&
*& Perform for Getting Meter Details for New tariff of 2016-17
*&---------------------------------------------------------------------*
*FORM meter_details_new_tariff.
* CLEAR: flag1,it1_eabl,wa1_eabl.
* cnt = cnt + 1.
* IF wa_tdoc-zwnummer = '1' OR wa_tdoc-zwnummer = '2' OR
* wa_tdoc-zwnummer = '3' OR wa_tdoc-zwnummer = '4' OR
* wa_tdoc-zwnummer = '5' OR wa_tdoc-zwnummer = '6'.
* IF 1 = 2.
* CLEAR it1_eabl.
* SELECT zwnummer adat zz_v_zwstand zz_n_zwstand FROM eabl INTO TABLE
it1_eabl
* WHERE equnr = wa_tdoc-geraet AND adat LE lv_dt1."wa_tdoc-
bis.
* SORT it1_eabl BY adat DESCENDING.
* READ TABLE it1_eabl INTO wa1_eabl INDEX 1.
* IF sy-subrc = 0 AND wa_tdoc-zwnummer = '1'.
* wa_bimd-pre_mtr_rdng = wa1_eabl-zz_v_zwstand.
* wa_bimd-curr_mtr_rdng = wa1_eabl-zz_v_zwstand.
* ENDIF.
* DELETE it1_eabl WHERE register EQ '002'.
* READ TABLE it1_eabl INTO wa1_eabl INDEX 2.
* wa_bimd-pre_mtr_rdng_date = wa1_eabl-adat.
*
************Added by Kiran TR
* IF wa_tdoc-zwnummer = '2' AND wa_tdoc-ablhinw = 'MD'.
* wa_bimd-pre_mtr_rdng = lt_zbibd-contract_demand_kw.
* wa_bimd-curr_mtr_rdng = lt_zbibd-contract_demand_kw.
* ENDIF.
* flag1 = 'X'.
* ELSE.
* IF wa_tdoc-ablesgr = '01'.
* IF wa_tdoc-ablesgrv = '06' OR
* wa_tdoc-ablesgrv = '21' OR
* wa_tdoc-ablesgrv = '14' OR
* wa_tdoc-ablesgrv = '17'.
* wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
* wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
* ELSEIF wa_tdoc-ablesgrv = '01'.
* IF wa_tdoc-sc_belnr IS INITIAL.
* wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
* wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
* ELSE.
* wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
* IF wa_tdoc-i_abrmenge LT 0.
* wa_bimd-rdng_diff = wa_bimd-rdng_diff - wa_tdoc-i_zwstdiff.
* ELSE.
* wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-i_zwstdiff.
* ENDIF.
* ENDIF.
* ENDIF.
* ELSEIF wa_tdoc-ablesgr = '22' OR wa_tdoc-ablesgr = '14'.
* IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '06'.
* wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-i_zwstdiff.
* wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
* ENDIF.
* ELSEIF wa_tdoc-ablesgr = '03'.
* IF wa_tdoc-ablesgrv = '01' OR wa_tdoc-ablesgrv = '14'.
* wa_bimd-rdng_diff = wa_tdoc-i_zwstdiff.
* wa_bimd-billed_consum = wa_tdoc-i_abrmenge.
* ENDIF.
* ELSEIF wa_tdoc-ablesgr = '10'.
* IF wa_tdoc-ablesgrv = '01'.
* wa_bimd-rdng_diff = wa_bimd-rdng_diff + wa_tdoc-i_zwstdiff.
* wa_bimd-billed_consum = wa_bimd-billed_consum + wa_tdoc-
i_abrmenge.
* ENDIF.
* ENDIF.
* ENDIF.
* ENDIF.
*
* wa_bimd-invoiceno = lt_zbibd-invoiceno.
* wa_bimd-contract_acc_no = lt_zbibd-contract_account.
* SELECT SINGLE serge herst FROM equi INTO (wa_bimd-mnf_srl_no,wa_bimd-
meter_make)
* WHERE equnr = wa_tdoc-equnr. "geraet.
* wa_bimd-meter_no = wa_tdoc-geraet.
* wa_bimd-register = wa_tdoc-zwnummer.
* wa_bimd-bill_month = lt_zbibd-bill_month.
* wa_bimd-date_of_invoice = lt_zbibd-date_of_invoice.
* wa_bimd-meter_status = wa_tdoc-ablhinw.
* wa_bimd-cur_mtr_type = wa_tdoc-istablart.
* wa_bimd-curr_mtr_rdng_reason = wa_tdoc-ablesgr.
* wa_bimd-billed_mtr_rdng = wa_tdoc-i_zwstndab.
* wa_bimd-mult_fac = wa_tdoc-i_abrmenge / wa_tdoc-i_zwstdiff.
* IF wa_tdoc-zwnummer = '001'.
* lv_mf = wa_bimd-mult_fac.
* ENDIF.
* IF wa_bimd-mult_fac = '0.00'.
* wa_bimd-mult_fac = lv_mf.
* ENDIF.
**Start of Addition by TMMANISHT on 12th April 2014
* IF wa_bimd-mult_fac = '0.00'.
* wa_bimd-mult_fac = '1.00'.
* ENDIF.
**End of Addition by TMMANISHT on 12th April 2014
* IF flag1 IS INITIAL.
* wa_bimd-pre_mtr_rdng = wa_tdoc-i_zwstvor.
* wa_bimd-curr_mtr_rdng = wa_tdoc-i_zwstand.
* ENDIF.
*
* IF wa_tdoc-massbill = 'KVA' OR wa_tdoc-massbill = 'KW'.
* CLEAR: wa_bimd-pre_mtr_rdng.
* ENDIF.
* wa_bimd-pre_mtr_rdng_reason = wa_tdoc-ablesgrv.
* wa_bimd-pre_mtr_type = wa_tdoc-istablartva.
* IF flag1 IS INITIAL.
* wa_bimd-pre_mtr_rdng_date = wa_tdoc-ab.
* ENDIF.
* wa_bimd-curr_mtr_rdng_date = wa_tdoc-bis.
* IF wa_tdoc-zwnummer ='006' AND wa_tdoc-ablesgr = '17 '.
* wa_bimd-curr_mtr_rdng_date = wa_tdoc-datum2.
* ENDIF.
* wa_bimd-uom = wa_tdoc-massbill.
*
* IF lt_zbibd-meter_arrangement = 'LT Side'.
** IF wa_tdoc-zwnummer = '001' OR wa_tdoc-zwnummer ='006'.
* IF wa_tdoc-zwnummer NE '006'.
* wa_bimd-trnsformr_loss = wa_bimd-billed_consum * '0.03'.
* ENDIF.
* ENDIF.
* IF wa_bimd-trnsformr_loss IS NOT INITIAL.
* wa_bimd-total_consum = wa_bimd-billed_consum + wa_bimd-trnsformr_loss.
* ELSE.
* wa_bimd-total_consum = wa_bimd-billed_consum.
* ENDIF.
*
* IF wa_tdoc-zwnummer = '001'.
* IF wa_tdoc-ablesgrv NE '06'. "Added on 22nd March 2014
* wa_bimd-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date - 1.
* ENDIF. "Added on 22nd March 2014
* ENDIF.
*
* IF cnt = 1.
* APPEND wa_bimd TO gt_bimd.
* ELSE.
*
* READ TABLE gt_bimd INTO wa_bimd1 WITH KEY meter_no = wa_tdoc-geraet
* register = wa_tdoc-zwnummer.
* IF sy-subrc = 0.
* IF wa_bimd1-curr_mtr_rdng_date LT wa_bimd-curr_mtr_rdng_date.
* wa_bimd1-curr_mtr_rdng_date = wa_bimd-curr_mtr_rdng_date.
* wa_bimd1-curr_mtr_rdng = wa_bimd-curr_mtr_rdng.
* wa_bimd1-mult_fac = wa_bimd-mult_fac.
* wa_bimd1-trnsformr_loss = wa_bimd-trnsformr_loss.
* wa_bimd1-total_consum = wa_bimd-total_consum.
* ENDIF.
* IF wa_bimd1-pre_mtr_rdng_date GT wa_bimd-pre_mtr_rdng_date.
* wa_bimd1-pre_mtr_rdng_date = wa_bimd-pre_mtr_rdng_date.
* wa_bimd1-pre_mtr_rdng = wa_bimd-pre_mtr_rdng.
* ENDIF.
* IF wa_tdoc-massbill NE 'KVA'.
* wa_bimd1-billed_consum = wa_bimd1-billed_consum + wa_bimd-
billed_consum.
* wa_bimd1-rdng_diff = wa_bimd1-rdng_diff + wa_bimd-rdng_diff.
* ENDIF.
* wa_bimd1-mnf_srl_no = wa_bimd-mnf_srl_no.
***********new changes by Kiran
* IF wa_bimd1-curr_mtr_rdng_reason = '22' AND wa_tdoc-zwnummer = 1.
* wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
* ENDIF.
* IF wa_tdoc-zwnummer = 2.
* IF wa_bimd1-curr_mtr_rdng > wa_tdoc-i_zwstand.
* ELSE.
* wa_bimd1-curr_mtr_rdng = wa_tdoc-i_zwstand.
* ENDIF.
* ENDIF.
**********end of new changes
* MODIFY gt_bimd FROM wa_bimd1 INDEX sy-tabix.
* ELSE.
* APPEND wa_bimd TO gt_bimd.
* ENDIF.
** ENDIF.
* ENDIF.
* CLEAR: wa_bimd.
*ENDFORM. "meter_details_new_tariff

S-ar putea să vă placă și