Mustafa HAMIT

ABAP’ta Değişken Tanımlama: DATA, TYPES, CONSTANTS ve FIELD-SYMBOLS (Temel Seviye)

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 string metin 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_line dersen 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/

Loading

Bir yanıt yazın