ALV_GRID_DISPLAY ile ALV REPORT
SAP üzerinden veritabanı tarafından çekilen datanın ekranda görüntülenebilmesi için kullanılan ALV yapısı ile raporlama ekranları oluşturma konusunda yardımcı olmaktadır. Bunun için SAP kendi içerisinde barındırdığı ALV_GRID_DISPLAY özelliği sayesinde bu raporlama ekranı için kolay bir metod olduğu söylenebilir.
Raporlama ekranında sunacağımız verileri belirlemek için uygulanacak yapı 3 katmakdan oluşacaktır.
- Input from selection screen : Filtreleme ile raporlama ekranını bastırmadan önce belirleyeceğimiz kriterler sayesinde rapor ekranında belirli daraltmalar sağlanabilir.
- Select from database : Kriterler belirlendikten sonra veritabanına giderek istediğimiz datayı çekeceğiz.
- Display using FM ALV_GRID_DISPLAY : Veritabanında dönen datayı alv grid yapısı kullanarak ekranda belirlediğimiz pozisyonda gösterilmesini sağlayacağız.
İlk olarak kullanacağımız veriler ve tabloları tanımlıyoruz. Programda kullanılacak olan değişkenlerin tipleri için standart tip havuzundan faydalanarak varolan tiplerden referans alabiliriz. bunun için abap ve slis tiplerinde kullanılan değişkenleri referans alıyoruz.
Veritabanından aldığımız veriyi işlemek için internal tablo kullanmamız gerekmekte bunun içinde gi_sflight internal tablomuzu oluşturup, veritabanından aldığımız data ile doldurup daha sonra alv ile ekrana yansıtmada kullanacağız.
TYPE-POOLS: abap,slis. TABLES:sflight. TYPES: BEGIN OF ty_sflight. INCLUDE STRUCTURE sflight. TYPES: add1, carrname LIKE scarr-carrname, box, lights. TYPES: END OF ty_sflight. DATA: gi_sflight TYPE STANDARD TABLE OF ty_sflight, gi_fieldcatalog TYPE slis_t_fieldcat_alv." DATA: gwa_sflight TYPE ty_sflight, gwa_layout TYPE slis_layout_alv, gwa_fieldcatalog TYPE slis_fieldcat_alv.
Daha sonra Inıtıalization ile programın başlatılmasını tetikleyerek başlangıç aşamasında yapılacak herhangi bir işlem varsa bu kısımdan sonra gerçekleştiriyoruz. Selection-Option ile raporlama ekranında hangi kriterlere göre verilerin görünmesini istediğimize dair parametreleri tanımlıyoruz. Selection-option ile birden fazla seçim yapılabileceği göz önünde bulundurulmalı. örneğin iki tarih arasında bir değer istiyorsak bu yapıyı kullanabiliriz. Eğer sabit bir tarih isteyeceksek parametre keywordü kullanarak tekil seçimler için kullanabiliriz.
INITIALIZATION. PERFORM f_initialize. SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE text-001. SELECT-OPTIONS carrid FOR sflight-carrid. SELECT-OPTIONS connid FOR sflight-connid. SELECT-OPTIONS fldate FOR sflight-fldate. PARAMETERS: p_maxrow TYPE i DEFAULT 30. SELECTION-SCREEN END OF BLOCK b01. START-OF-SELECTION. PERFORM f_selection. PERFORM f_display_alv_report.
Selection kısmında artık join kullanarak farklı tablolardan edindiğimiz verileri internal tablo üzerine doldurabiliriz.
FORM f_selection. SELECT * INTO CORRESPONDING FIELDS OF TABLE gi_sflight FROM ( sflight LEFT JOIN scarr ON sflight~carrid = scarr~carrid ) UP TO p_maxrow ROWS WHERE sflight~carrid IN carrid AND sflight~connid IN connid AND sflight~fldate IN fldate. IF sy-subrc = 0. "do nothing ENDIF. ENDFORM.
Artık elde ettiğimiz veriyi rapor ekranı olarak bastırabiliriz. Bunun için SAP alv grid display yapısına başvuracağız. Ancak bundan önce ekran yapısı için layout yapısına dair ufak ekran düzenlemelerinden faydalanabiliriz.
FORM f_create_layout USING p_gd_layout TYPE slis_layout_alv. p_gd_layout-zebra = abap_true. p_gd_layout-colwidth_optimize = abap_true. ENDFORM. FORM pf_status USING rt_extab TYPE slis_t_extab.. SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'. ENDFORM.
Gerekli layout düzenini belirledikten sonra artık raporumuzu ekrana bastırmak için elimizdeki parametreleri ALV_GRID_DISPLAY metodu içerisinde gerekli yerlere atamasını yapabiliriz.
FORM f_display_alv_report. PERFORM f_create_layout USING gwa_layout. PERFORM f_build_fieldcatalog. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'PF_STATUS' is_layout = gwa_layout it_fieldcat = gi_fieldcatalog[] TABLES t_outtab = gi_sflight[] EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc = 0. "do nothing ENDIF. ENDFORM. FORM f_build_fieldcatalog. REFRESH: gi_fieldcatalog. CLEAR: gwa_fieldcatalog. CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_program_name = sy-cprog i_structure_name = 'SFLIGHT' CHANGING ct_fieldcat = gi_fieldcatalog EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. IF sy-subrc = 0. "do nothing ENDIF. ENDFORM. FORM f_initialize . REFRESH: gi_sflight, gi_fieldcatalog. CLEAR: gwa_sflight, gwa_layout, gwa_fieldcatalog. ENDFORM.
Sonuç olarak ekranda elde edeceğimiz görüntü aşağıdaki gibidir.
Kaynak : http://onryzc.com/2015/12/15/alv_grid_display-ile-alv-report/