ABAP’ta kullanıcıdan veri almak için en sık kullanılan yöntem Selection Screen’dir. Raporu (SE38) çalıştırdığında gördüğün giriş ekranı aslında ABAP tarafından otomatik üretilen bir “seçim ekranı”dır. Bu yazıda en temel yapı taşlarını göreceğiz:
PARAMETERS(tek değer)SELECT-OPTIONS(aralık / çoklu seçim)DEFAULT,OBLIGATORY,AS LISTBOXgibi sık kullanılan ekler- Basit validasyon (
AT SELECTION-SCREEN)
1) PARAMETERS: Tek değer almak
PARAMETERS, kullanıcıdan tek bir değer alır.
REPORT z_demo_sel_screen_01.
PARAMETERS: p_bukrs TYPE bukrs.
START-OF-SELECTION.
WRITE: / 'Girilen Company Code:', p_bukrs.
Sık kullanılan ekler
Zorunlu alan:
REPORT z_demo_sel_screen_02.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
Varsayılan değer:
REPORT z_demo_sel_screen_03.
PARAMETERS: p_bukrs TYPE bukrs DEFAULT '1000'.
İpucu: DEFAULT her zaman “doğru” değer demek değildir; kullanıcı değiştirebilir. Zorunlu kılmak istiyorsan OBLIGATORY kullan.
2) SELECT-OPTIONS: Aralık ve çoklu seçim almak
SELECT-OPTIONS ile kullanıcı:
- Tek değer,
- Aralık (from–to),
- Birden fazla satır,
- “Exclude” (hariç tut) gibi seçenekleri girebilir.
REPORT z_demo_sel_screen_04.
SELECT-OPTIONS: s_kunnr FOR kna1-kunnr.
START-OF-SELECTION.
WRITE: / 'Kullanıcı seçimlerini internal table olarak alırsın.'.
SELECT-OPTIONS nasıl saklanır?
s_kunnr aslında bir internal table gibidir ve satırlarında tipik olarak şu alanlar bulunur:
SIGN(I/E) → Include / ExcludeOPTION(EQ/BT/CP/…) → eşit, aralık, pattern vb.LOWveHIGH→ değer(ler)
Bu yüzden SELECT ... WHERE field IN s_kunnr yazmak çok pratiktir.
Örnek:
REPORT z_demo_sel_screen_05.
SELECT-OPTIONS: s_kunnr FOR kna1-kunnr.
DATA: lt_kna1 TYPE TABLE OF kna1,
ls_kna1 TYPE kna1.
START-OF-SELECTION.
SELECT * FROM kna1
INTO TABLE @lt_kna1
WHERE kunnr IN @s_kunnr
UP TO 20 ROWS.
LOOP AT lt_kna1 INTO ls_kna1.
WRITE: / ls_kna1-kunnr, ls_kna1-name1.
ENDLOOP.
3) PARAMETER mı SELECT-OPTIONS mı?
Kısa karar tablosu:
- Kullanıcı tek değer girecekse →
PARAMETERS - Kullanıcı aralık / çoklu değer girecekse →
SELECT-OPTIONS - SQL’de “IN” mantığı istiyorsan →
SELECT-OPTIONSçok kolaylık sağlar
4) Seçim ekranını düzenlemek: SELECTION-SCREEN BEGIN OF BLOCK
Alanları başlık altında toplamak ekranı okunur yapar:
REPORT z_demo_sel_screen_06.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
SELECT-OPTIONS: s_kunnr FOR kna1-kunnr.
SELECTION-SCREEN END OF BLOCK b1.
TEXT-t01 = 'Seçim Kriterleri'.
5) Checkbox ve Listbox örneği
Checkbox (X/space)
REPORT z_demo_sel_screen_07.
PARAMETERS: p_test AS CHECKBOX DEFAULT 'X'.
START-OF-SELECTION.
IF p_test = abap_true.
WRITE: / 'Test modu açık'.
ELSE.
WRITE: / 'Test modu kapalı'.
ENDIF.
Listbox (sabit değer listesi)
Basit bir listbox örneği:
REPORT z_demo_sel_screen_08.
PARAMETERS: p_mode TYPE c LENGTH 1 AS LISTBOX VISIBLE LENGTH 20 DEFAULT 'A'.
INITIALIZATION.
"Not: VRM ile liste doldurma daha detaylı bir konu; burada temel fikir önemli.
START-OF-SELECTION.
WRITE: / 'Seçilen mod:', p_mode.
Not: Listbox’ı gerçek anlamda seçeneklerle doldurmak için genelde VRM fonksiyonları kullanılır (bunu ayrı bir “Selection Screen – Listbox/Dropdown” yazısında anlatmak ideal).
6) Basit validasyon: AT SELECTION-SCREEN
Kullanıcı “Execute” (F8) basınca kontrol koymak için:
REPORT z_demo_sel_screen_09.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
AT SELECTION-SCREEN.
IF p_bukrs <> '1000' AND p_bukrs <> '2000'.
MESSAGE 'Sadece 1000 veya 2000 girilebilir.' TYPE 'E'.
ENDIF.
START-OF-SELECTION.
WRITE: / 'OK:', p_bukrs.
TYPE 'E'→ Hata mesajı verir ve kullanıcıyı seçim ekranında tutar.- Başlangıç seviyesi için en anlaşılır kontrol yöntemlerinden biridir.
7) Küçük “uçtan uca” örnek: Şirket kodu + müşteri aralığı
REPORT z_demo_sel_screen_10.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-t01.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
SELECT-OPTIONS: s_kunnr FOR kna1-kunnr.
SELECTION-SCREEN END OF BLOCK b1.
TEXT-t01 = 'Kriterler'.
AT SELECTION-SCREEN.
"Basit örnek validasyon
IF s_kunnr[] IS INITIAL.
MESSAGE 'En az 1 müşteri kriteri girin (s_kunnr).' TYPE 'E'.
ENDIF.
START-OF-SELECTION.
DATA lt_kna1 TYPE TABLE OF kna1.
SELECT * FROM kna1
INTO TABLE @lt_kna1
WHERE kunnr IN @s_kunnr
UP TO 50 ROWS.
WRITE: / 'Company Code (örnek amaçlı):', p_bukrs.
WRITE: / 'Bulunan kayıt sayısı:', lines( lt_kna1 ).
Not: Bu örnekte p_bukrs filtrede kullanılmadı; çünkü KNA1 tablosu şirket kodu bazlı değil. Başlangıç seviyesinde bu ayrımı göstermek bile değerlidir: “hangi tablo hangi alanı gerçekten içeriyor?”
Sonuç
Selection Screen tarafında temelde şunları öğrendik:
- Tek değer →
PARAMETERS - Çoklu/aralık →
SELECT-OPTIONS - Ekranı düzenleme →
SELECTION-SCREEN ... BLOCK - En basit kontrol →
AT SELECTION-SCREEN+MESSAGE TYPE 'E'
Abap’ta döngüleri öğrenmek için bu yazıyı inceleyebilirsiniz.
Link: https://www.mustafahamit.com/abapta-dongu-kullanimi-loop-do-while/
![]()