‎2007 May 03 7:46 AM
hallow
i wont to learn how to use classes and perform
in abap, any document will help
regards
i wont document that not in help.sap.com.
‎2007 May 03 7:54 AM
Hi antonio,
Give me ur mail id i will send it to u.
Regards,
Ravi G
‎2007 May 03 7:54 AM
Hi antonio,
Give me ur mail id i will send it to u.
Regards,
Ravi G
‎2007 May 03 7:59 AM
http://esnips.com/doc/39fdc647-1aed-4b40-a476-4d3042b6ec28/class_builder.ppt
http://esnips.com/doc/5c65b0dd-eddf-4512-8e32-ecd26735f0f2/prefinalppt.ppt
http://esnips.com/doc/448e8302-68b1-4046-9fef-8fa8808caee0/abap-objects-by-helen.pdf
http://esnips.com/doc/92be4457-1b6e-4061-92e5-8e4b3a6e3239/Object-Oriented-ABAP.ppt
http://esnips.com/doc/2c76dc57-e74a-4539-a20e-29383317e804/OO-abap.pdf
http://esnips.com/doc/0ef39d4b-586a-4637-abbb-e4f69d2d9307/SAP-CONTROLS-WORKSHOP.pdf
http://help.sap.com/saphelp_nw2004s/helpdata/en/ce/b518b6513611d194a50000e8353423/frameset.htm
regds
anjali
‎2007 May 03 8:03 AM
‎2007 May 03 8:23 AM
Hi Anto,
Check these links also..
http://www.sapgenie.com/abap/OO/
http://www.erpgenie.com/abap/OO/eg.htm
http://www.geocities.com/victorav15/sapr3/abap_ood.html
http://www.brabandt.de/html/abap_oo.html
http://esnips.com/doc/5c65b0dd-eddf-4512-8e32-ecd26735f0f2/prefinalppt.ppt
http://esnips.com/doc/92be4457-1b6e-4061-92e5-8e4b3a6e3239/Object-Oriented-ABAP.ppt
Hope this will help.
Regards,
Thasneem.
‎2007 May 03 8:25 AM
Hi Antonio,
Please browse this site to learn more on ABAP Objects. Also, you can try the transaction ABAPDOCU. It contains numerous examples about ABAP Objects. I also have pasted one of my reports that I did using ABAP Objects.Hope it helps...
P.S. Please award points if it helps...
*==================================================================
* Program Name : ZFR_FOREX_REV_ACCTG
* Author : Aris Hidalgo
* Date Created : August 3, 2006
* Description : Show the exchange rate for a given range of 7 years
*==================================================================
REPORT zfr_forex_rev_acctg
NO STANDARD PAGE HEADING
LINE-SIZE 500
LINE-COUNT 0
MESSAGE-ID zz.
*---------------------------------------------*
* Data dictionary table/s *
*---------------------------------------------*
TABLES: bsis,
bsas,
tcurr,
t001.
*---------------------------------------------*
* Global Structure/s *
*---------------------------------------------*
TYPES: BEGIN OF t_bsis_bsas,
hkont TYPE bsis-hkont, "General ledger account
year_dum TYPE bsis-gjahr,
belnr TYPE bsis-belnr, "Accounting document number
bldat TYPE bsis-bldat, "Document date in document
waers TYPE bsis-waers, "Currency Key
dmbtr TYPE bsis-dmbtr, "Amount in local currency
wrbtr TYPE bsis-wrbtr, "Amount in document currency
shkzg TYPE bsis-shkzg, "Debit/credit indicator
zuonr TYPE bsis-zuonr, "Assignment number
gjahr TYPE bsis-gjahr, "Fiscal year
blart TYPE bsis-blart, "Document type
END OF t_bsis_bsas.
TYPES: BEGIN OF t_summary,
hkont TYPE bsis-hkont,
year_dum TYPE bsis-gjahr,
waers TYPE bsis-waers,
rate TYPE tcurr-ukurs,
wrbtr TYPE bsis-wrbtr,
dmbtr TYPE bsis-dmbtr,
gl_bal TYPE bsis-wrbtr,
unrealized TYPE bsis-wrbtr,
END OF t_summary.
TYPES: BEGIN OF t_exch,
year TYPE bsis-gjahr,
rate TYPE bapi1093_1-rate_type,
from_curr TYPE bapi1093_1-from_curr,
exch_rate TYPE bapi1093_0-exch_rate_v,
END OF t_exch.
*---------------------------------------------*
* Global Data *
*---------------------------------------------*
DATA: gv_hkont TYPE bsis-hkont,
it_bsis_bsas TYPE STANDARD TABLE OF t_bsis_bsas,
it_exch TYPE SORTED TABLE OF t_exch WITH UNIQUE
KEY year rate from_curr,
it_summary TYPE STANDARD TABLE OF t_summary,
wa_summary LIKE LINE OF it_summary,
wa_exch LIKE LINE OF it_exch,
t_rate_type TYPE bapi1093_1-rate_type VALUE 'ME',
t_from_curr TYPE bapi1093_1-from_curr,
t_to_curr TYPE bapi1093_1-to_currncy VALUE 'USD',
t_date TYPE bapi1093_2-trans_date,
t_date_out TYPE bapi1093_2-trans_date,
t_exch_rate TYPE bapi1093_0,
t_message TYPE bapireturn1.
FIELD-SYMBOLS: <fs_asof> TYPE bsis-gjahr,
<fs_bsis_bsas> LIKE LINE OF it_bsis_bsas.
*----------------------------------------------*
* Selection screen *
*----------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_bukrs TYPE t001-bukrs OBLIGATORY,
p_asof TYPE bsis-budat OBLIGATORY,
p_year TYPE bsis-gjahr OBLIGATORY.
SELECT-OPTIONS: s_hkont FOR bsis-hkont NO INTERVALS. "OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
*/ CLASS DEFINITIONS
*---------------------------------------------------------------------*
* CLASS lcl_main DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
PUBLIC SECTION.
METHODS: get_data,
get_diff,
display_subheader,
display_rate
IMPORTING
rate TYPE tcurr-ukurs
pos TYPE i,
display_header,
top_of_page,
get_rate_and_show
EXPORTING
ex_bsis_bsas LIKE it_bsis_bsas
ex_exch LIKE it_exch,
conversion
IMPORTING
year TYPE bsis-gjahr
rate_type TYPE bapi1093_1-rate_type
from_curr TYPE bapi1093_1-from_curr
to_curr TYPE bapi1093_1-to_currncy
EXPORTING
exch_rate TYPE bapi1093_0
t_date TYPE bapi1093_2-trans_date.
EVENTS: no_data EXPORTING value(hkont) TYPE bsis-hkont.
PRIVATE SECTION.
TYPES: BEGIN OF t_waers,
waers TYPE bsis-waers,
END OF t_waers.
TYPES: BEGIN OF t_local,
year TYPE bsis-gjahr,
rate TYPE tcurr-ukurs,
END OF t_local.
DATA: it_waers TYPE SORTED TABLE OF t_waers WITH UNIQUE
KEY waers,
it_local TYPE SORTED TABLE OF t_local WITH UNIQUE
KEY year,
wa_waers LIKE LINE OF it_waers,
wa_local LIKE LINE OF it_local,
lv_counter TYPE i,
lv_asof TYPE bsis-gjahr,
lv_year TYPE bsis-gjahr,
lv_check TYPE i,
lv_7years TYPE i,
lv_date TYPE pc226-endda,
lv_pos TYPE i,
lv_pos2 TYPE i,
lv_vline TYPE i,
lv_rate TYPE p DECIMALS 5,
lv_givendate TYPE syst-datum.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS lcl_summary DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_summary DEFINITION INHERITING FROM lcl_main.
PUBLIC SECTION.
METHODS: display_summary_header,
display_summary
IMPORTING
im_bsis_bsas LIKE it_bsis_bsas
im_exch LIKE it_exch.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS lcl_handler DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_handler DEFINITION.
PUBLIC SECTION.
METHODS handle_event FOR EVENT no_data OF lcl_main
IMPORTING hkont.
ENDCLASS.
*/ CLASS IMPLEMENTATIONS
*---------------------------------------------------------------------*
* CLASS lcl_main IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_main IMPLEMENTATION.
*----------------------------------------------*
* METHOD get_data *
*----------------------------------------------*
METHOD get_data.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
* PERCENTAGE = 0
text = 'Getting data. Please wait...'
.
* get records from BSIS
SELECT hkont zuonr gjahr belnr waers bldat blart dmbtr wrbtr shkzg
FROM bsis
INTO CORRESPONDING FIELDS OF TABLE it_bsis_bsas
WHERE bukrs = p_bukrs
AND hkont IN s_hkont
AND budat <= p_asof.
* get records from BSAS
SELECT hkont zuonr gjahr belnr waers bldat blart dmbtr wrbtr shkzg
FROM bsas
APPENDING CORRESPONDING FIELDS OF TABLE it_bsis_bsas
WHERE bukrs = p_bukrs
AND hkont IN s_hkont
AND budat <= p_asof
AND augdt > p_asof.
* if itab has no records, raise event
IF it_bsis_bsas[] IS INITIAL.
RAISE EVENT no_data EXPORTING hkont = s_hkont-low.
ENDIF.
ENDMETHOD.
*----------------------------------------------*
* METHOD get_diff *
*----------------------------------------------*
METHOD get_diff.
DATA: lv_sub7 TYPE i.
lv_asof = p_year + 6.
IF lv_asof > p_asof+0(4).
lv_asof = p_asof+0(4).
ENDIF.
lv_year = p_year.
* determine how many years will be displayed
lv_counter = lv_asof - lv_year.
ADD 1 TO lv_counter.
lv_sub7 = lv_asof - 6.
lv_7years = lv_asof - lv_sub7.
ADD 1 TO lv_7years.
ENDMETHOD.
*----------------------------------------------*
* METHOD display_subheader *
*----------------------------------------------*
METHOD display_subheader.
DATA: lv_date(10) TYPE c,
lv_gdatu TYPE tcurr-gdatu,
lv_flag(1) TYPE c,
lv_pos_dum TYPE i.
FIELD-SYMBOLS: <fs_bsis_bsas> LIKE LINE OF it_bsis_bsas.
* pre-defined length of uline and vline depending on the
* number of years to be displayed
CASE lv_counter.
WHEN 1.
lv_pos = 24.
lv_pos2 = 37.
lv_vline = 126.
WHEN 2.
lv_pos = 45.
lv_pos2 = 58.
lv_vline = 147.
WHEN 3.
lv_pos = 66.
lv_pos2 = 79.
lv_vline = 168.
WHEN 4.
lv_pos = 87.
lv_pos2 = 100.
lv_vline = 189.
WHEN 5.
lv_pos = 108.
lv_pos2 = 121.
lv_vline = 210.
WHEN 6.
lv_pos = 128.
lv_pos2 = 141.
lv_vline = 230.
WHEN 7.
lv_pos = 148.
lv_pos2 = 161.
lv_vline = 250.
ENDCASE.
* get currency
IF NOT lv_check = 1.
LOOP AT it_bsis_bsas ASSIGNING <fs_bsis_bsas>.
MOVE <fs_bsis_bsas>-waers TO wa_waers.
INSERT wa_waers INTO TABLE it_waers.
<fs_bsis_bsas>-year_dum = <fs_bsis_bsas>-bldat+0(4).
ENDLOOP.
ENDIF.
ASSIGN lv_asof TO <fs_asof>.
IF NOT lv_check = 1.
SORT it_bsis_bsas BY hkont year_dum belnr bldat waers dmbtr wrbtr.
IF <fs_bsis_bsas> IS ASSIGNED.
UNASSIGN <fs_bsis_bsas>.
READ TABLE it_bsis_bsas INDEX 1 ASSIGNING <fs_bsis_bsas>.
IF sy-subrc = 0 AND <fs_bsis_bsas> IS ASSIGNED.
gv_hkont = <fs_bsis_bsas>-hkont.
ENDIF.
ENDIF.
ENDIF.
* write sub-header
DESCRIBE TABLE it_waers LINES sy-tfill.
LOOP AT it_waers INTO wa_waers.
IF sy-tfill = 1 AND wa_waers-waers = 'PHP'.
lv_flag = 1 .
ENDIF.
IF NOT lv_flag = 1.
IF lv_check IS INITIAL.
WRITE: AT /103 sy-uline(lv_pos),
AT /103 sy-vline.
ENDIF.
* write the years in the sub-header
IF NOT lv_check = 1.
lv_pos_dum = 110.
FORMAT COLOR COL_HEADING.
DO lv_counter TIMES.
IF sy-index = 6.
WRITE: AT lv_pos_dum(14) <fs_asof> RIGHT-JUSTIFIED.
ELSEIF sy-index = 7.
WRITE: AT lv_pos_dum(13) <fs_asof> RIGHT-JUSTIFIED.
ELSE.
WRITE: AT lv_pos_dum(15) <fs_asof> RIGHT-JUSTIFIED.
ENDIF.
ADD 21 TO lv_pos_dum.
SUBTRACT 1 FROM <fs_asof>.
ENDDO.
WRITE sy-vline.
FORMAT COLOR OFF.
ENDIF.
IF sy-tabix = 1 AND wa_waers-waers = 'PHP'.
WRITE: AT /90 sy-uline(lv_pos2).
ENDIF.
IF wa_waers-waers <> 'PHP'.
IF lv_check IS INITIAL.
WRITE: AT /90 sy-uline(lv_pos2).
WRITE: AT /90 sy-vline.
ELSE.
WRITE: AT /90 sy-vline.
ENDIF.
ENDIF.
FORMAT COLOR COL_NORMAL.
IF NOT wa_waers-waers = 'PHP'.
WRITE: AT 91(10) wa_waers-waers CENTERED. "write the currency
ENDIF.
ENDIF.
lv_asof = p_year + 6.
IF lv_asof > p_asof+0(4).
lv_asof = p_asof+0(4).
ENDIF.
* get exchange rate from PHP to USD
IF lv_check IS INITIAL.
t_from_curr = 'PHP'.
DO lv_counter TIMES.
* use BAPI to get exchange rate
CALL METHOD me->conversion EXPORTING
year = <fs_asof>
rate_type = t_rate_type
from_curr = t_from_curr
to_curr = t_to_curr
IMPORTING
exch_rate = t_exch_rate
t_date = t_date_out.
* if no exchange rate was fetched, get directly from TCURR
* using given date
IF t_exch_rate-exch_rate_v IS INITIAL.
WRITE t_date_out TO lv_date USING EDIT MASK '__/__/____'.
CALL FUNCTION 'CONVERSION_EXIT_INVDT_INPUT'
EXPORTING
input = lv_date
IMPORTING
output = lv_date.
SELECT SINGLE ukurs FROM tcurr
INTO t_exch_rate-exch_rate_v
WHERE kurst = 'ME'
AND fcurr = 'PHP'
AND tcurr = 'USD'
AND gdatu = lv_date.
ENDIF.
IF NOT t_exch_rate-exch_rate_v IS INITIAL.
t_exch_rate-exch_rate_v = abs( t_exch_rate-exch_rate_v ).
wa_local-year = <fs_asof>.
wa_local-rate = t_exch_rate-exch_rate_v.
INSERT wa_local INTO TABLE it_local.
ENDIF.
SUBTRACT 1 FROM <fs_asof>.
CLEAR: t_exch_rate, wa_local, t_date_out, lv_date.
ENDDO.
ENDIF.
lv_pos = 106.
* get exchange rate from itab to USD
CLEAR: t_exch_rate, lv_gdatu.
t_from_curr = wa_waers-waers.
lv_asof = p_year + 6.
IF lv_asof > p_asof+0(4).
lv_asof = p_asof+0(4).
ENDIF.
DO lv_counter TIMES.
IF t_from_curr = 'USD'.
READ TABLE it_local WITH KEY year = <fs_asof>
INTO wa_local TRANSPORTING rate.
lv_rate = wa_local-rate.
ELSEIF t_from_curr = 'PHP'.
READ TABLE it_local WITH KEY year = <fs_asof>
INTO wa_local TRANSPORTING rate.
lv_rate = wa_local-rate.
ELSE.
* use BAPI to get exchange rate for currencies that is
* not 'PHP' and 'USD'
CALL METHOD me->conversion EXPORTING
year = <fs_asof>
rate_type = t_rate_type
from_curr = t_from_curr
to_curr = t_to_curr
IMPORTING
exch_rate = t_exch_rate
t_date = t_date_out.
* if no exchange rate was fetched, get directly from TCURR
* using given date
IF t_exch_rate-exch_rate_v IS INITIAL.
WRITE t_date_out TO lv_date USING EDIT MASK '__/__/____'.
CALL FUNCTION 'CONVERSION_EXIT_INVDT_INPUT'
EXPORTING
input = lv_date
IMPORTING
output = lv_date.
SELECT SINGLE ukurs FROM tcurr
INTO t_exch_rate-exch_rate_v
WHERE kurst = 'ME'
AND fcurr = wa_waers-waers
AND tcurr = 'USD'
AND gdatu = lv_date.
ENDIF.
IF NOT t_exch_rate-exch_rate_v IS INITIAL.
READ TABLE it_local WITH KEY year = <fs_asof>
INTO wa_local TRANSPORTING rate.
IF sy-subrc = 0.
IF t_exch_rate-exch_rate_v <> wa_local-rate.
lv_rate = 1 / t_exch_rate-exch_rate_v * wa_local-rate.
ELSE.
lv_rate = t_exch_rate-exch_rate_v.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF NOT lv_rate IS INITIAL.
lv_rate = abs( lv_rate ).
wa_exch-year = <fs_asof>.
wa_exch-rate = t_rate_type.
wa_exch-from_curr = t_from_curr.
wa_exch-exch_rate = lv_rate.
INSERT wa_exch INTO TABLE it_exch.
IF NOT lv_flag = 1.
IF NOT wa_waers-waers = 'PHP'.
CALL METHOD me->display_rate
EXPORTING
rate = wa_exch-exch_rate
pos = lv_pos.
CLEAR wa_exch.
ENDIF.
ENDIF.
ENDIF.
ADD 21 TO lv_pos.
SUBTRACT 1 FROM <fs_asof>.
CLEAR: t_exch_rate, wa_local, t_date_out,
lv_date,lv_rate.
ENDDO.
IF NOT lv_flag = 1.
WRITE: AT lv_vline sy-vline.
ENDIF.
FORMAT COLOR OFF.
lv_asof = p_year + 6.
IF lv_asof > p_asof+0(4).
lv_asof = p_asof+0(4).
ENDIF.
lv_check = 1.
CLEAR lv_flag.
ENDLOOP.
ENDMETHOD.
*----------------------------------------------*
* METHOD display_rate *
*----------------------------------------------*
METHOD display_rate.
WRITE: AT pos(15) rate RIGHT-JUSTIFIED.
ENDMETHOD.
*----------------------------------------------*
* METHOD display_header *
*----------------------------------------------*
METHOD display_header.
CLEAR lv_pos.
lv_asof = p_year + 6.
IF lv_asof > p_asof+0(4).
lv_asof = p_asof+0(4).
ENDIF.
CLEAR lv_pos2.
CASE lv_counter.
WHEN 1.
lv_pos2 = 126.
WHEN 2.
lv_pos2 = 147.
WHEN 3.
lv_pos2 = 168.
WHEN 4.
lv_pos2 = 189.
WHEN 5.
lv_pos2 = 210.
WHEN 6.
lv_pos2 = 230.
WHEN 7.
lv_pos2 = 250.
ENDCASE.
lv_pos = 110.
FORMAT COLOR COL_HEADING.
WRITE: / sy-uline(lv_pos2),
/ sy-vline,
(18) 'Allocation' CENTERED,
(04) 'DT' CENTERED,
(11) 'Doc. No.' CENTERED,
(11) 'Doc. Date' LEFT-JUSTIFIED,
(06) 'Cur.' LEFT-JUSTIFIED,
(20) 'Transaction Curr.' CENTERED,
(20) 'Local Curr. (PHP)' CENTERED.
DO lv_counter TIMES.
WRITE: AT lv_pos(14) <fs_asof> RIGHT-JUSTIFIED.
SUBTRACT 1 FROM <fs_asof>.
ADD 21 TO lv_pos.
ENDDO.
WRITE: AT lv_pos2 sy-vline,
/ sy-uline(lv_pos2).
FORMAT COLOR OFF.
ENDMETHOD.
*----------------------------------------------*
* METHOD top_of_page *
*----------------------------------------------*
METHOD top_of_page.
DATA: text1 TYPE string,
text2 TYPE string,
lv_asof TYPE bsis-budat,
lv_pageno(03) TYPE n,
lv_date(10) TYPE c.
* get company code description
SELECT SINGLE butxt FROM t001
INTO t001-butxt
WHERE bukrs = p_bukrs.
WRITE: / t001-butxt,
/ sy-title.
* write account code(HKONT)
CONCATENATE: gv_hkont '/' p_bukrs
INTO text1.
CONCATENATE: 'Account:' text1
INTO text2
SEPARATED BY space.
WRITE: / text2.
CLEAR: text1, text2.
* write as of date
WRITE p_asof TO lv_date USING EDIT MASK '__/__/____'.
CONCATENATE: 'As of' lv_date
INTO text1
SEPARATED BY space.
WRITE: / text1.
CLEAR: text1, lv_date.
* from year to as of year
lv_asof = p_asof+0(4).
CONCATENATE: 'Year:' p_year 'to' lv_asof
INTO text1
SEPARATED BY space.
WRITE: / text1.
CLEAR text1.
* page number
lv_pageno = sy-pagno.
CONCATENATE: 'Page No:' lv_pageno
INTO text1
SEPARATED BY space.
WRITE: / text1.
CLEAR text1.
SKIP 2.
ENDMETHOD.
*----------------------------------------------*
* METHOD get_rate_and_show *
*----------------------------------------------*
METHOD get_rate_and_show.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
* PERCENTAGE = 0
text = 'Combining data.Please wait... '
.
DATA: lv_amount(15) TYPE p DECIMALS 2,
lv_color(1) TYPE n VALUE 1,
lv_index1(15) TYPE p DECIMALS 2,
lv_index2(15) TYPE p DECIMALS 2,
lv_index3(15) TYPE p DECIMALS 2,
lv_index4(15) TYPE p DECIMALS 2,
lv_index5(15) TYPE p DECIMALS 2,
lv_index6(15) TYPE p DECIMALS 2,
lv_index7(15) TYPE p DECIMALS 2,
lv_total1(15) TYPE p DECIMALS 2,
lv_total2(15) TYPE p DECIMALS 2,
lv_total3(15) TYPE p DECIMALS 2,
lv_total4(15) TYPE p DECIMALS 2,
lv_total5(15) TYPE p DECIMALS 2,
lv_total6(15) TYPE p DECIMALS 2,
lv_total7(15) TYPE p DECIMALS 2,
lv_dmbtr(15) TYPE p DECIMALS 2,
lv_dmbtr_tot(15) TYPE p DECIMALS 2,
lv_old TYPE bsis-hkont,
lv_new TYPE bsis-hkont.
lv_asof = p_year + 6.
IF lv_asof > p_asof+0(4).
lv_asof = p_asof+0(4).
ENDIF.
CLEAR lv_check.
ADD 1 TO lv_check.
SORT it_bsis_bsas BY hkont year_dum belnr bldat waers dmbtr wrbtr.
* write details
LOOP AT it_bsis_bsas ASSIGNING <fs_bsis_bsas>.
IF lv_color = 1.
lv_color = 2.
ELSE.
lv_color = 1.
ENDIF.
* if <fs_bsis_bsas>-shkzg = 'H', multiply WRBTR and
* DMBTR by -1
IF <fs_bsis_bsas>-shkzg = 'H'.
<fs_bsis_bsas>-wrbtr = <fs_bsis_bsas>-wrbtr * -1.
<fs_bsis_bsas>-dmbtr = <fs_bsis_bsas>-dmbtr * -1.
ENDIF.
* for every new account no.(HKONT), create a new page
lv_new = <fs_bsis_bsas>-hkont.
gv_hkont = <fs_bsis_bsas>-hkont.
IF lv_new <> lv_old AND NOT lv_old IS INITIAL.
NEW-PAGE.
CALL METHOD me->display_subheader.
CALL METHOD me->display_header.
ENDIF.
lv_old = lv_new.
* write details
FORMAT INTENSIFIED OFF COLOR = lv_color.
WRITE: / sy-vline,
(18) <fs_bsis_bsas>-zuonr CENTERED,
(04) <fs_bsis_bsas>-blart CENTERED,
(10) <fs_bsis_bsas>-belnr CENTERED,
(10) <fs_bsis_bsas>-bldat RIGHT-JUSTIFIED,
(05) <fs_bsis_bsas>-waers RIGHT-JUSTIFIED,
(20) <fs_bsis_bsas>-wrbtr RIGHT-JUSTIFIED,
(20) <fs_bsis_bsas>-dmbtr RIGHT-JUSTIFIED.
ADD <fs_bsis_bsas>-dmbtr TO: lv_dmbtr, lv_dmbtr_tot.
* write the converted amount for a given year
WHILE lv_check <= lv_counter.
IF <fs_asof> >= <fs_bsis_bsas>-bldat+0(4).
t_from_curr = <fs_bsis_bsas>-waers.
READ TABLE it_exch WITH KEY year = <fs_asof>
rate = t_rate_type
from_curr = t_from_curr
INTO wa_exch TRANSPORTING exch_rate.
IF sy-subrc = 0.
IF <fs_bsis_bsas>-waers = 'PHP'.
lv_amount = 1 / wa_exch-exch_rate * wa_exch-exch_rate.
lv_amount = <fs_bsis_bsas>-wrbtr * lv_amount.
ELSE.
lv_amount = <fs_bsis_bsas>-wrbtr * wa_exch-exch_rate.
ENDIF.
WRITE: (20) lv_amount RIGHT-JUSTIFIED.
CASE sy-index.
WHEN 1.
ADD lv_amount TO lv_index1.
ADD lv_amount TO lv_total1.
WHEN 2.
ADD lv_amount TO lv_index2.
ADD lv_amount TO lv_total2.
WHEN 3.
ADD lv_amount TO lv_index3.
ADD lv_amount TO lv_total3.
WHEN 4.
ADD lv_amount TO lv_index4.
ADD lv_amount TO lv_total4.
WHEN 5.
ADD lv_amount TO lv_index5.
ADD lv_amount TO lv_total5.
WHEN 6.
ADD lv_amount TO lv_index6.
ADD lv_amount TO lv_total6.
WHEN 7.
ADD lv_amount TO lv_index7.
ADD lv_amount TO lv_total7.
ENDCASE.
ENDIF.
ENDIF.
CLEAR: lv_amount, wa_exch.
SUBTRACT 1 FROM <fs_asof>.
ADD 1 TO lv_check.
ENDWHILE.
WRITE AT lv_pos2 sy-vline.
* write sub-total for every year for the same account code(HKONT)
AT END OF year_dum.
FORMAT COLOR COL_TOTAL.
WRITE: / sy-vline,
<fs_bsis_bsas>-year_dum,
'Sub-total:'.
IF NOT lv_dmbtr IS INITIAL.
WRITE: AT 76(20) lv_dmbtr RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_index1 IS INITIAL.
WRITE: (20) lv_index1 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_index2 IS INITIAL.
WRITE (20) lv_index2 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_index3 IS INITIAL.
WRITE (20) lv_index3 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_index4 IS INITIAL.
WRITE (20) lv_index4 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_index5 IS INITIAL.
WRITE (20) lv_index5 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_index6 IS INITIAL.
WRITE: (20) lv_index6 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_index7 IS INITIAL.
WRITE: (20) lv_index7 RIGHT-JUSTIFIED.
ENDIF.
WRITE: AT lv_pos2 sy-vline.
FORMAT COLOR OFF.
CLEAR: lv_index1, lv_index2, lv_index3,
lv_index4, lv_index5, lv_index6,
lv_index7, lv_dmbtr.
ENDAT.
* write total for a given account code(HKONT)
AT END OF hkont.
FORMAT COLOR COL_TOTAL INTENSIFIED.
WRITE: / sy-vline,
'Total', <fs_bsis_bsas>-hkont, 'GI'.
IF NOT lv_dmbtr_tot IS INITIAL.
WRITE: AT 76(20) lv_dmbtr_tot RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_total1 IS INITIAL.
WRITE: (20) lv_total1 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_total2 IS INITIAL.
WRITE (20) lv_total2 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_total3 IS INITIAL.
WRITE (20) lv_total3 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_total4 IS INITIAL.
WRITE (20) lv_total4 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_total5 IS INITIAL.
WRITE (20) lv_total5 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_total6 IS INITIAL.
WRITE: (20) lv_total6 RIGHT-JUSTIFIED.
ENDIF.
IF NOT lv_total7 IS INITIAL.
WRITE: (20) lv_total7 RIGHT-JUSTIFIED.
ENDIF.
WRITE: AT lv_pos2 sy-vline.
FORMAT COLOR OFF.
CLEAR: lv_total1, lv_total2, lv_total3,
lv_total4, lv_total5, lv_total6,
lv_total7, lv_dmbtr_tot.
WRITE: / sy-uline(lv_pos2).
ENDAT.
lv_asof = p_year + 6.
IF lv_asof > p_asof+0(4).
lv_asof = p_asof+0(4).
ENDIF.
CLEAR lv_check.
ADD 1 TO lv_check.
FORMAT COLOR OFF.
ENDLOOP.
SKIP 5.
ex_bsis_bsas[] = it_bsis_bsas[].
ex_exch[] = it_exch[].
ENDMETHOD.
*----------------------------------------------*
* METHOD conversion *
*----------------------------------------------*
METHOD conversion.
IF year = p_asof+0(4).
* get last date of a given month and year
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = p_asof
IMPORTING
last_day_of_month = lv_givendate
* EXCEPTIONS
* DAY_IN_NO_DATE = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
* get last date of a given year
CALL FUNCTION 'HR_E_GET_FISC_YEAR_DATES'
EXPORTING
fisc_year = year
IMPORTING
* FISC_FECINI =
fisc_fecfin = lv_date
* EXCEPTIONS
* ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
IF lv_date IS INITIAL.
t_date = lv_givendate.
CLEAR lv_givendate.
ELSE.
t_date = lv_date.
CLEAR lv_date.
ENDIF.
* get exchange rate from a given currency to US dollars
CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'
EXPORTING
rate_type = rate_type
from_curr = from_curr
to_currncy = to_curr
date = t_date
IMPORTING
exch_rate = t_exch_rate
* RETURN =
.
ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS lcl_summary IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_summary IMPLEMENTATION.
*----------------------------------------------*
* METHOD display_summary *
*----------------------------------------------*
METHOD display_summary.
TYPES: BEGIN OF t_total,
hkont TYPE bsis-hkont,
waers TYPE bsis-waers,
wrbtr TYPE bsis-wrbtr,
dmbtr TYPE bsis-dmbtr,
gl_bal TYPE bsis-wrbtr,
unrealized TYPE bsis-wrbtr,
END OF t_total.
DATA: lv_balance TYPE bsis-wrbtr,
lv_date(10) TYPE c,
lv_color(1) TYPE n VALUE '1',
lv_wrbtr TYPE bsis-wrbtr,
lv_dmbtr TYPE bsis-dmbtr,
lv_gl_bal TYPE bsis-wrbtr,
lv_unrealized TYPE bsis-wrbtr,
lv_old_year TYPE bsis-gjahr,
lv_new_year TYPE bsis-gjahr,
lv_flag(1) TYPE n,
lt_bsis_bsas_dum TYPE STANDARD TABLE OF t_bsis_bsas,
lt_total TYPE STANDARD TABLE OF t_total,
wa_total LIKE LINE OF lt_total.
FIELD-SYMBOLS: <fs_dum> LIKE LINE OF lt_bsis_bsas_dum.
it_bsis_bsas[] = im_bsis_bsas[].
it_exch[] = im_exch[].
CLEAR wa_exch.
SORT it_bsis_bsas BY hkont year_dum DESCENDING waers.
lt_bsis_bsas_dum[] = it_bsis_bsas[].
LOOP AT it_bsis_bsas ASSIGNING <fs_bsis_bsas>.
AT NEW hkont.
MOVE <fs_bsis_bsas>-hkont TO wa_summary-hkont.
ENDAT.
AT NEW year_dum.
MOVE <fs_bsis_bsas>-year_dum TO wa_summary-year_dum.
ENDAT.
AT NEW waers.
MOVE <fs_bsis_bsas>-waers TO wa_summary-waers.
t_from_curr = wa_summary-waers.
READ TABLE it_exch WITH KEY year = wa_summary-year_dum
rate = t_rate_type
from_curr = t_from_curr
INTO wa_exch TRANSPORTING exch_rate.
IF sy-subrc = 0.
MOVE wa_exch-exch_rate TO wa_summary-rate.
ELSE.
CALL METHOD me->conversion
EXPORTING
year = wa_summary-year_dum
rate_type = t_rate_type
from_curr = t_from_curr
to_curr = t_to_curr
IMPORTING
exch_rate = t_exch_rate
t_date = t_date_out.
IF t_exch_rate-exch_rate_v IS INITIAL.
WRITE t_date_out TO lv_date USING EDIT MASK '__/__/____'.
CALL FUNCTION 'CONVERSION_EXIT_INVDT_INPUT'
EXPORTING
input = lv_date
IMPORTING
output = lv_date.
SELECT SINGLE ukurs FROM tcurr
INTO t_exch_rate-exch_rate_v
WHERE kurst = 'ME'
AND fcurr = 'PHP'
AND tcurr = 'USD'
AND gdatu = lv_date.
ENDIF.
IF NOT t_exch_rate-exch_rate_v IS INITIAL.
t_exch_rate-exch_rate_v = abs( t_exch_rate-exch_rate_v ).
MOVE t_exch_rate-exch_rate_v TO wa_summary-rate.
ENDIF.
ENDIF.
ENDAT.
LOOP AT lt_bsis_bsas_dum ASSIGNING <fs_dum>
WHERE hkont = wa_summary-hkont
AND year_dum = wa_summary-year_dum
AND waers = wa_summary-waers.
ADD <fs_dum>-wrbtr TO wa_summary-wrbtr.
ADD <fs_dum>-dmbtr TO wa_summary-dmbtr.
IF NOT wa_exch-exch_rate IS INITIAL.
IF <fs_dum>-waers = 'PHP'.
lv_balance = 1 / wa_exch-exch_rate * wa_exch-exch_rate.
lv_balance = <fs_dum>-wrbtr * lv_balance.
ADD lv_balance TO wa_summary-gl_bal.
ELSE.
lv_balance = <fs_dum>-wrbtr * wa_exch-exch_rate.
ADD lv_balance TO wa_summary-gl_bal.
ENDIF.
ENDIF.
CLEAR lv_balance.
DELETE lt_bsis_bsas_dum.
ENDLOOP.
DELETE it_bsis_bsas WHERE hkont = wa_summary-hkont
AND year_dum = wa_summary-year_dum
AND waers = wa_summary-waers.
wa_summary-unrealized = wa_summary-dmbtr - wa_summary-gl_bal.
APPEND wa_summary TO it_summary.
CLEAR wa_summary.
ENDLOOP.
IF NOT it_summary[] IS INITIAL.
CALL METHOD me->display_summary_header.
CLEAR wa_summary.
SORT it_summary BY hkont year_dum DESCENDING waers.
*/ WRITE SUMMARY
LOOP AT it_summary INTO wa_summary.
IF lv_color = 1.
lv_color = 2.
ELSE.
lv_color = 1.
ENDIF.
MOVE: wa_summary-hkont TO wa_total-hkont,
wa_summary-waers TO wa_total-waers.
READ TABLE lt_total WITH KEY hkont = wa_summary-hkont
waers = wa_summary-waers
INTO wa_total.
IF sy-subrc = 0.
ADD: wa_summary-wrbtr TO wa_total-wrbtr,
wa_summary-dmbtr TO wa_total-dmbtr,
wa_summary-gl_bal TO wa_total-gl_bal,
wa_summary-unrealized TO wa_total-unrealized.
MODIFY lt_total FROM wa_total TRANSPORTING
wrbtr dmbtr gl_bal unrealized
WHERE hkont = wa_summary-hkont
AND waers = wa_summary-waers.
CLEAR wa_total.
lv_flag = 1.
ELSE.
ADD: wa_summary-wrbtr TO wa_total-wrbtr,
wa_summary-dmbtr TO wa_total-dmbtr,
wa_summary-gl_bal TO wa_total-gl_bal,
wa_summary-unrealized TO wa_total-unrealized.
ENDIF.
* write sub-total for every end of a year
lv_new_year = wa_summary-year_dum.
IF lv_new_year <> lv_old_year AND NOT lv_old_year IS INITIAL.
FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
WRITE: / sy-vline,
(42) 'Subtotal',
(18) lv_wrbtr RIGHT-JUSTIFIED,
(18) lv_dmbtr RIGHT-JUSTIFIED,
(18) lv_gl_bal RIGHT-JUSTIFIED,
(18) lv_unrealized RIGHT-JUSTIFIED,
sy-vline.
FORMAT COLOR OFF.
CLEAR: lv_wrbtr, lv_dmbtr, lv_gl_bal, lv_unrealized.
ENDIF.
lv_old_year = lv_new_year.
ADD: wa_summary-wrbtr TO lv_wrbtr,
wa_summary-dmbtr TO lv_dmbtr,
wa_summary-gl_bal TO lv_gl_bal,
wa_summary-unrealized TO lv_unrealized.
FORMAT INTENSIFIED OFF COLOR = lv_color.
WRITE: / sy-vline,
(15) wa_summary-hkont,
(04) wa_summary-year_dum,
(05) wa_summary-waers,
(15) wa_summary-rate,
(18) wa_summary-wrbtr,
(18) wa_summary-dmbtr,
(18) wa_summary-gl_bal,
(18) wa_summary-unrealized,
sy-vline.
FORMAT COLOR OFF.
IF NOT lv_flag = 1.
APPEND wa_total TO lt_total.
CLEAR wa_total.
ENDIF.
AT END OF hkont.
* write the last sub-total
FORMAT COLOR COL_TOTAL INTENSIFIED OFF.
WRITE: / sy-vline,
(37) 'Subtotal', wa_summary-year_dum,
(18) lv_wrbtr RIGHT-JUSTIFIED,
(18) lv_dmbtr RIGHT-JUSTIFIED,
(18) lv_gl_bal RIGHT-JUSTIFIED,
(18) lv_unrealized RIGHT-JUSTIFIED,
sy-vline.
FORMAT COLOR OFF.
CLEAR: lv_wrbtr, lv_dmbtr, lv_gl_bal, lv_unrealized.
* write the total for a given account code(HKONT)
FORMAT COLOR COL_TOTAL INTENSIFIED ON.
LOOP AT lt_total INTO wa_total
WHERE hkont = wa_summary-hkont.
WRITE: / sy-vline.
IF sy-tabix = 1.
WRITE: (25) 'Total', wa_summary-hkont.
ENDIF.
IF sy-tabix = 1.
WRITE: (05) wa_total-waers,
(18) wa_total-wrbtr,
(18) wa_total-dmbtr,
(18) wa_total-gl_bal,
(18) wa_total-unrealized,
sy-vline.
ELSE.
WRITE: AT 40(05) wa_total-waers,
(18) wa_total-wrbtr,
(18) wa_total-dmbtr,
(18) wa_total-gl_bal,
(18) wa_total-unrealized,
sy-vline.
ENDIF.
ENDLOOP.
FORMAT COLOR OFF.
ENDAT.
CLEAR lv_flag.
ENDLOOP.
WRITE: / sy-uline(122).
ENDIF.
ENDMETHOD.
*----------------------------------------------*
* METHOD display_summary *
*----------------------------------------------*
METHOD display_summary_header.
FORMAT COLOR COL_HEADING.
WRITE: / sy-uline(122),
/ sy-vline,
(15) 'GL Account' CENTERED,
(04) 'Year' CENTERED,
(05) 'Curr.' CENTERED,
(15) 'Rate' CENTERED,
(18) 'Trans. Curr' CENTERED,
(18) 'Local Curr.' CENTERED,
(18) 'GL Balance' CENTERED,
(18) 'Unrealized' CENTERED,
sy-vline,
/ sy-uline(122).
FORMAT COLOR OFF.
ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS lcl_handler IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_handler IMPLEMENTATION.
METHOD handle_event.
MESSAGE i008 WITH 'No data found for account no:' hkont.
LEAVE LIST-PROCESSING.
ENDMETHOD.
ENDCLASS.
*----------------------------------------------*
* TOP-OF-PAGE *
*----------------------------------------------*
TOP-OF-PAGE.
DATA: o_top TYPE REF TO lcl_main.
CREATE OBJECT o_top.
CALL METHOD o_top->top_of_page.
*----------------------------------------------*
* START-OF-SELECTION *
*----------------------------------------------*
START-OF-SELECTION.
DATA: o_main TYPE REF TO lcl_main,
o_handler TYPE REF TO lcl_handler,
o_summary TYPE REF TO lcl_summary,
it_bsis_bsas_dum TYPE STANDARD TABLE OF t_bsis_bsas,
it_exch_dum LIKE it_exch.
CREATE OBJECT: o_main, o_handler, o_summary.
SET HANDLER o_handler->handle_event FOR ALL INSTANCES.
CALL METHOD o_main->get_data.
CALL METHOD o_main->get_diff.
CALL METHOD o_main->display_subheader.
CALL METHOD o_main->display_header.
CALL METHOD o_main->get_rate_and_show
IMPORTING
ex_bsis_bsas = it_bsis_bsas_dum
ex_exch = it_exch_dum.
CALL METHOD o_summary->display_summary
EXPORTING
im_bsis_bsas = it_bsis_bsas_dum
im_exch = it_exch_dum.
‎2007 May 03 9:27 AM
Hi Ravi..could u pls mail it to me too....tell me if u cant see my mail id.
Thanks in advance
‎2007 May 03 11:54 AM
Hi Shweta,
I i cannot see ur mail id.
give me ur mail id.
Regards,
Ravi G
‎2007 May 03 1:11 PM
‎2007 May 03 12:55 PM
‎2007 May 04 7:46 AM
Hi Ravi,
I haven't received the document.. Could you pls try again ?
Regards,
Shweta