0% found this document useful (0 votes)
382 views183 pages

SFORM

This document contains user exit code for an SAP billing application form. It includes exits that are processed before and during the form to initialize settings and prepare header data. The during exit logic summarizes address, billing period, rate category and other details from the document header and related tables into a summary structure for output. It also retrieves mobile number, creation date and other reference data.

Uploaded by

Jaggu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
382 views183 pages

SFORM

This document contains user exit code for an SAP billing application form. It includes exits that are processed before and during the form to initialize settings and prepare header data. The during exit logic summarizes address, billing period, rate category and other details from the document header and related tables into a summary structure for output. It also retrieves mobile number, creation date and other reference data.

Uploaded by

Jaggu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 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

You might also like