0% found this document useful (0 votes)
24 views

Real AMDP

Amdp Example

Uploaded by

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

Real AMDP

Amdp Example

Uploaded by

Pritam Saha
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Custom Report Using AMDP

Development Steps:

Step 1. Create a Class with one AMDP Method and a Normal Method in HANA Studio or
Eclipse or ADT.

• Define the Custom DATA TYPE you need

Please note, I have added 4 fields at the end to store the calculated values (screenshot above).

• Define the Method in Class Definition


CLASS zcl_stkoes_amdp DEFINITION


PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES:
if_amdp_marker_hdb.

TYPES : BEGIN OF gtys_scrap,


mandt TYPE mandt,
budat TYPE budat,
arbid TYPE objektid,
veran TYPE ap_veran,
werks TYPE werks_d,
aufnr TYPE aufnr,
gmnga TYPE ru_gmnga,
xmnga TYPE ru_xmnga,
grund TYPE co_agrnd,
grtxt TYPE grtxt,
kaptprog TYPE kaptprog,
plnbez TYPE matnr,
maktx TYPE maktx,
stprs TYPE stprs,
prctr TYPE prctr,
* zz_cust_numb TYPE kunnr,
* name1 TYPE name1_gp,
bwart TYPE bwart,
mtart TYPE mtart,
mtbez TYPE mtbez,
arbpl TYPE arbpl,
p_val TYPE prcd_elements-kwert, "Produced Value
s_val TYPE prcd_elements-kwert, "scrap value
scp_p TYPE bseg-dmbtr, "scrap %
dppms TYPE prcd_elements-kwert, "dppmS
END OF gtys_scrap,
gtyt_scrap TYPE STANDARD TABLE OF gtys_scrap.
METHODS:

fetch_prod_scrap " Fetching all data (AMDP Method)


IMPORTING
VALUE(iv_client) TYPE mandt
VALUE(iv_langu) TYPE string
VALUE(iv_matnr) TYPE string
VALUE(iv_aufk) TYPE string
VALUE(iv_afru) TYPE string
VALUE(iv_arbpl) TYPE string
VALUE(iv_bwart) TYPE string
EXPORTING
VALUE(et_scrap) TYPE gtyt_scrap,

display "Display
CHANGING
it_scrap TYPE gtyt_scrap.

PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
The above code needs to be in the CLASS Definition.

• Write the logic of methods in Class Implementation


CLASS zcl_stkoes_amdp IMPLEMENTATION.
METHOD fetch_prod_scrap BY DATABASE PROCEDURE
FOR HDB
LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING mara afru afko makt matdoc t157e t134t mbew aufk crhd.
* kna1.

lt_mara = APPLY_FILTER ( mara, :iv_matnr );


lt_aufk = APPLY_FILTER ( aufk, :iv_aufk );
lt_afru = APPLY_FILTER ( afru, :iv_afru );
lt_crhd = APPLY_FILTER ( crhd, :iv_arbpl );
lt_matdoc = APPLY_FILTER ( matdoc, :iv_bwart );

et_scrap = SELECT a.mandt, a.budat, a.arbid,


j.veran,
a.werks, a.aufnr, a.gmnga, a.xmnga, a.grund, g.grtxt,
a.kaptprog, b.plnbez, e.maktx, m.STPRS, c.prctr,
* c.zz_cust_numb, i.name1,
d.bwart, f.mtart, h.MTBEZ,
j.arbpl,

( gmnga * stprs ) AS p_val,


( xmnga * stprs ) AS s_val,
CASE
WHEN gmnga = 0 THEN 0
ELSE ( xmnga / gmnga ) * 100
END AS scp_p,
CASE
WHEN GMNGA = 0 THEN 0
ELSE ( xmnga / gmnga ) * 1000000
END AS dppms

FROM :lt_afru a
INNER JOIN afko b
ON a.mandt = b.mandt AND
a.aufnr = b.aufnr
INNER JOIN :lt_aufk c
ON a.mandt = c.mandt AND
a.aufnr = c.aufnr
INNER JOIN :lt_matdoc d
ON a.mandt = d.mandt AND
b.plnbez = d.matnr AND
a.aufnr = d.bktxt
INNER JOIN :lt_mara f
ON a.mandt = f.mandt AND
b.plnbez = f.matnr
LEFT OUTER JOIN makt e
ON e.mandt = a.mandt AND
e.matnr = b.plnbez AND
e.spras = :iv_langu
LEFT OUTER JOIN t157e g
ON g.mandt = a.mandt AND
g.bwart = d.bwart AND
g.grund = a.grund AND
g.spras = :iv_langu

LEFT OUTER JOIN t134t h


ON h.mandt = a.mandt AND
h.mtart = f.mtart AND
h.spras = :iv_langu
* LEFT OUTER JOIN kna1 i
* ON i.mandt = a.mandt AND
* i.kunnr = c.zz_cust_numb
INNER JOIN :lt_crhd j
ON j.mandt = a.mandt AND
j.objty = 'A' AND
j.objid = a.arbid
INNER JOIN mbew m
ON m.mandt = a.mandt AND
m.matnr = b.plnbez AND
m.bwkey = a.werks
where a.mandt = :iv_client
ORDER BY b.plnbez, a.werks;

ENDMETHOD.
METHOD display.

TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_table) "Basis Class ALV Tables
CHANGING
t_table = it_scrap ).
CATCH cx_salv_msg. "#EC NO_HANDLER

ENDTRY.

*...activate alv generic functions


lo_table->get_functions( )->set_all( ).

* Set the Column optimization

lo_table->get_columns( )->set_optimize( ).

lo_table->display( ).

ENDMETHOD.
ENDCLASS.

Step 2. Create program in SE38 either in GUI or in ADT.

REPORT zstkoes_amdp.
TABLES: mara, afru, aufk, crhd, matdoc.
**Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-s01.
SELECT-OPTIONS : s_matnr FOR mara-matnr,
* s_cust FOR aufk-zz_cust_numb,
s_werks FOR afru-werks OBLIGATORY,
s_budat FOR afru-budat OBLIGATORY,
s_arbpl FOR crhd-arbpl,
s_prctr FOR aufk-prctr,
s_bwart FOR matdoc-bwart OBLIGATORY MATCHCODE OBJECT H_T156.

SELECTION-SCREEN END OF BLOCK b1.


**START OF SELECTION
* Build Dynamic where condition based on selection screen field.
TRY.
DATA(gv_afru) = cl_shdb_seltab=>combine_seltabs( it_named_seltabs = VALUE #( ( name =
'WERKS' dref = REF #( s_werks[] ) )
( name = 'BUDAT'
dref = REF #( s_budat[] ) ) )
iv_client_field = 'MANDT' ).
DATA(gv_bwart) = cl_shdb_seltab=>combine_seltabs( it_named_seltabs = VALUE #( ( name =
'BWART' dref = REF #( s_bwart[] ) ) )
iv_client_field = 'MANDT' ).

DATA(gv_matnr) = cl_shdb_seltab=>combine_seltabs( it_named_seltabs = VALUE #( ( name =


'MATNR' dref = REF #( s_matnr[] ) ) )
iv_client_field = 'MANDT' ).

DATA(gv_aufk) = cl_shdb_seltab=>combine_seltabs( it_named_seltabs = VALUE #( ( name =


'PRCTR' dref = REF #( s_prctr[] ) ) )
iv_client_field = 'MANDT' ).

DATA(gv_arbpl) = cl_shdb_seltab=>combine_seltabs( it_named_seltabs = VALUE #( ( name =


'ARBPL' dref = REF #( s_arbpl[] ) ) )
iv_client_field = 'MANDT' ).

CATCH cx_shdb_exception INTO DATA(gx_shdb_exception). "exceptions of HANA DB object


DATA(gv_message) = gx_shdb_exception->get_text( ).
MESSAGE gv_message TYPE 'I'.
ENDTRY.
DATA(lo_amdp) = NEW zcl_stkoes_amdp( ).
lo_amdp->fetch_prod_scrap( " Fetching all data
EXPORTING
iv_client = sy-mandt
iv_langu = CONV #( sy-langu ) "Converts directly to string
iv_matnr = gv_matnr
iv_aufk = gv_aufk
iv_afru = gv_afru
iv_arbpl = gv_arbpl
iv_bwart = gv_bwart
IMPORTING
et_scrap = DATA(gt_scrap) ).

IF gt_scrap IS NOT INITIAL.


lo_amdp->display( "Processing of data and display
CHANGING
it_scrap = gt_scrap ).
ELSE.
MESSAGE 'No Records Exist.' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.

You might also like