ABAP öğrenirken en kritik alışkanlıklardan biri, veriyi doğru tipte tanımlamak ve doğru şekilde kullanmaktır. Çünkü aynı işi yapan iki kod arasında farkı çoğu zaman “değişkeni nasıl tanımladığın” belirler: okunabilirlik, hata ihtimali ve hatta performans.
Bu yazıda temel seviyede ABAP’ta değişken tanımlamak için en çok kullanılan yapıları göreceğiz:
DATA(değişken)TYPES(tip tanımı)CONSTANTS(sabit)FIELD-SYMBOLS(referans/pointer mantığı)
1) DATA: Değişken tanımlama (en temel)
DATA ile program içinde değişken tanımlarsın.
1.1 Basit örnek
DATA lv_text TYPE string.
lv_text = 'Merhaba ABAP'.
WRITE lv_text.
Burada:
lv_çoğu ekipte “local variable” için kullanılan bir isimlendirme standardıdır.TYPE stringmetin saklamak için uygun bir tiptir.
1.2 Başlangıç değeri ile tanımlama (VALUE)
DATA lv_city TYPE string VALUE 'Istanbul'.
WRITE lv_city.
1.3 Sayısal değişkenler
DATA lv_count TYPE i VALUE 10.
DATA lv_amount TYPE p DECIMALS 2 VALUE '1250.75'.
DATA lv_ratio TYPE f VALUE '0.5'.
i: tam sayı (counter, index gibi)p DECIMALS: para/tutar gibi değerler (çoğu zaman en güvenlisi)f: yaklaşık değer (finansal hesaplarda genelde önerilmez)
1.4 Tarih ve saat
DATA lv_date TYPE d VALUE sy-datum.
DATA lv_time TYPE t VALUE sy-uzeit.
1.5 True/False: ABAP_BOOL
DATA lv_ok TYPE abap_bool VALUE abap_true.
IF lv_ok = abap_true.
WRITE / 'OK'.
ENDIF.
2) DDIC referansı kullanmak (en iyi pratik)
Yeni başlayanların sık yaptığı şey: “müşteri numarası 10 hane, o zaman c LENGTH 10 yazayım”.
Bu çalışır ama en iyi pratik genelde DDIC alan tipini referans almaktır:
DATA lv_kunnr TYPE kna1-kunnr.
DATA lv_matnr TYPE mara-matnr.
DATA lv_vbeln TYPE vbak-vbeln.
Bu sayede:
- Doğru uzunluk otomatik gelir
- Conversion exit (ALPHA) gibi standart davranışlarla uyumlu olursun
- Daha az format/uyumluluk hatası yaşarsın
3) Inline DATA (Modern ABAP, 7.40+)
Modern ABAP’ta bazı durumlarda değişkeni ayrı tanımlamak yerine “inline” tanımlayabilirsin. ABAP tipi otomatik çıkarır.
DATA(lv_name) = 'Mustafa'.
DATA(lv_len) = strlen( lv_name ).
WRITE: / lv_name, lv_len.
Loop içinde de çok kullanılır:
LOOP AT lt_table INTO DATA(ls_line).
WRITE / ls_line-field.
ENDLOOP.
4) TYPES: Kendi tipini tanımlama
TYPES ile bir “tip şablonu” oluşturursun. Daha sonra bu tipten DATA ile değişken üretirsin.
4.1 Structure tipi tanımlama
TYPES: BEGIN OF ty_person,
name TYPE string,
age TYPE i,
END OF ty_person.
DATA ls_person TYPE ty_person.
ls_person-name = 'Mustafa'.
ls_person-age = 25.
4.2 Internal table tipi tanımlama
DATA lt_person TYPE STANDARD TABLE OF ty_person WITH EMPTY KEY.
APPEND VALUE #( name = 'Mustafa' age = 25 ) TO lt_person.
APPEND VALUE #( name = 'Ayse' age = 30 ) TO lt_person.
Bu yaklaşım rapor ve servis geliştirmede çok sık kullanılır: önce TYPES ile satır yapısını tanımlarsın, sonra internal table’ı kurarsın.
5) CONSTANTS: Sabit değer tanımlama
CONSTANTS, değeri sonradan değişmemesi gereken sabitler için kullanılır.
CONSTANTS gc_country_tr TYPE land1 VALUE 'TR'.
CONSTANTS gc_limit TYPE i VALUE 50.
Kullanım:
IF lv_land1 = gc_country_tr.
WRITE: / 'Turkiye'.
ENDIF.
Neden CONSTANTS?
- “Magic number / magic string” dediğimiz kod içine gömülü değerleri azaltır
- Kod okunabilirliği artar
- Değer değişirse tek yerden güncellersin
6) FIELD-SYMBOLS: Referans gibi çalışma (temel mantık)
FIELD-SYMBOLS ABAP’ta “pointer/referans” mantığıyla çalışır. Yani bir veriyi kopyalamak yerine onu işaret edersin. Yeni başlayan için en yaygın kullanım alanı: internal table loop’larında performanslı ve pratik erişim.
6.1 LOOP AT … ASSIGNING ile kullanım
FIELD-SYMBOLS <ls_line> TYPE ty_person.
LOOP AT lt_person ASSIGNING <ls_line>.
<ls_line>-age = <ls_line>-age + 1.
ENDLOOP.
Burada önemli nokta:
INTO ls_linedersen kopya ile çalışırsın (değişiklik tabloda kalmaz, ayrıca gereksiz kopyalama olur).ASSIGNING <ls_line>dersen tablonun satırını işaretlersin (değişiklik tabloya yazılır).
6.2 READ TABLE ASSIGNING ile kullanım
FIELD-SYMBOLS <ls_p> TYPE ty_person.
READ TABLE lt_person ASSIGNING <ls_p> WITH KEY name = 'Mustafa'.
IF sy-subrc = 0.
<ls_p>-age = 99.
ENDIF.
Uyarı (temel ama önemli): Field-symbol sadece “atanmışsa” kullanılabilir. READ TABLE bulamazsa <ls_p> atanmaz.
7) Mini özet: Ne zaman hangisini kullanmalıyım?
- DATA: değişken tanımlamak için
- TYPES: kendi satır tipini/structure’ını oluşturmak için
- CONSTANTS: değişmeyecek sabit değerleri tanımlamak için
- FIELD-SYMBOLS: internal table satırlarını kopyalamadan işlemek için (
ASSIGNING)
Sonuç
ABAP’ta temiz ve sürdürülebilir kod yazmanın temeli; doğru tip seçmek, tipleri DDIC ile uyumlu kullanmak ve gerektiğinde TYPES, CONSTANTS, FIELD-SYMBOLS gibi araçlardan faydalanmaktır. Bu konular oturduğunda hem rapor geliştirme hem de daha ileri konular (Open SQL, ALV, OOP) çok daha rahat ilerler.
Abap’ta Open SQL ile ilgili yazıyı okumak için aşağıdaki yazıyı inceleyebilirsiniz.
Link: https://www.mustafahamit.com/abap-open-sql-select-into-where-join/
![]()