ALV_GRID_DISPLAY – 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.

  1. Input from selection screen : Filtreleme ile raporlama ekranını bastırmadan önce belirleyeceğimiz kriterler sayesinde rapor ekranında belirli daraltmalar sağlanabilir.
  2. Select from database : Kriterler belirlendikten sonra veritabanına giderek istediğimiz datayı çekeceğiz.
  3. 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.

select-options

alv grid.PNG


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s