ABAP öğrenirken en hızlı ilerleten konulardan biri veri tiplerini doğru anlamaktır. Çünkü ABAP’ta bir değişken tanımlarken seçtiğin tip; hem veriyi nasıl saklayacağını, hem ekranda nasıl göstereceğini, hem de bazı durumlarda performansı ve hataya açıklığı doğrudan etkiler.
Bu yazıda temel seviyede, günlük ABAP geliştirmede en sık karşılaşacağın veri tiplerini ve hangi senaryoda hangisini tercih etmen gerektiğini anlatacağım.
1) ABAP’ta veri tipleri genel olarak nasıl sınıflanır?
ABAP veri tiplerini pratikte 3 ana başlıkta düşünebilirsin:
- Elementary (Temel) tipler: Tek bir değer taşır (ör. sayı, tarih, karakter).
- Structure (Yapı) tipleri: Birden fazla alanı tek “satır” gibi tutar (ör. müşteri no + isim + ülke).
- Internal table (İç tablo) tipleri: Birden fazla satırı tutar (liste/tablolu veri).
Bu yazının odağı önce elementary tipler olacak; son bölümde structure ve internal table’a kısa bir giriş yapacağım.
2) En temel karakter tipleri: C ve STRING
C (Character) – Sabit uzunluk
TYPE c LENGTH n sabit uzunluklu karakter alanıdır.
- Uzunluğu bellidir.
- Kısa kodlar, sabit formatlı alanlar için uygundur.
- Dikkat: Sabit uzunluklu olduğu için sonuna boşluk basabilir.
DATA lv_code TYPE c LENGTH 10.
lv_code = 'ABAP'.
STRING – Dinamik uzunluk
TYPE string dinamik uzunluklu metinler içindir.
- Uzunluk esnektir.
- Metin birleştirme, split, replace gibi işlemlerde çok rahattır.
- Log mesajları, dosya satırı, URL, e-mail gibi alanlarda tercih edilir.
DATA lv_text TYPE string.
lv_text = 'ABAP veri tipleri yazisi'.
Kısa karar:
- Sabit uzunluk gerekiyorsa →
c - Metin işleri / dinamik içerik →
string
3) Sayı tipleri: I, P, F ve CURR/QUAN mantığı
I (Integer)
Tam sayılar için kullanılır. Sıklıkla sayaç (counter), satır sayısı, indeks gibi yerlerde görürsün.
DATA lv_count TYPE i.
lv_count = 10.
P (Packed Number) – En yaygın “tutar” tipi
TYPE p, ondalıklı sayılar için en güvenli ve yaygın tercihlerden biridir.
- Para, tutar gibi finansal değerlerde çok kullanılır.
DECIMALSile ondalık basamak ayarlanır.
DATA lv_amount TYPE p DECIMALS 2.
lv_amount = '1234.56'.
F (Floating Point)
Ondalıklı ama “yaklaşık” değerler için kullanılır.
- Mühendislik hesapları, ölçüm, bilimsel hesaplar gibi alanlarda uygundur.
- Finansal değerlerde genelde önerilmez (yuvarlama hassasiyeti nedeniyle).
DATA lv_ratio TYPE f.
lv_ratio = '0.1'.
CURR / QUAN neden önemli?
SAP tablolarında para ve miktar alanları genelde şu mantıkla tasarlanır:
- CURR (currency amount) → yanında bir para birimi alanı (
WAERS) olur - QUAN (quantity) → yanında birim alanı (
MEINS) olur
Bu yüzden bir tablo alanını kullanırken en iyi pratik şudur:
- “Kendi kafama göre
p decimals 2tanımlayayım” yerine - Doğrudan DDIC alan tipini kullanmak
DATA lv_netwr TYPE vbak-netwr. "CURR alanı
DATA lv_waerk TYPE vbak-waerk. "Para birimi
4) Tarih ve saat: D ve T
D (Date)
TYPE d tarih içindir (içeride genelde YYYYMMDD gibi tutulur).
DATA lv_date TYPE d.
lv_date = sy-datum.
T (Time)
TYPE t saat içindir (HHMMSS).
DATA lv_time TYPE t.
lv_time = sy-uzeit.
5) Mantıksal tip: ABAP_BOOL
ABAP’ta “true/false” için modern kullanım abap_bool’dur.
abap_true→'X'abap_false→space
DATA lv_ok TYPE abap_bool.
lv_ok = abap_true.
Checkbox parametreleriyle de uyumludur.
6) N (Numeric Text) – Sayı gibi görünen ama metin olan alanlar
TYPE n LENGTH n genelde “sayısal görünümlü metin”ler içindir. Örneğin 0000123456 gibi başında sıfırların önemli olduğu alanlar.
DATA lv_kunnr TYPE n LENGTH 10.
lv_kunnr = '0000001000'.
Not: SAP’de müşteri numarası gibi alanlarda genelde zaten DDIC alanını kullanırsın (kna1-kunnr). Ama mantığı bilmek önemli.
7) X ve XSTRING (Binary veri)
x→ sabit uzunluklu hex/binary alanxstring→ dinamik uzunluklu binary alan
Dosya okuma-yazma, PDF/Excel gibi binary içeriklerde kullanılır. Başlangıç seviyesinde bilmen yeterli: “metin değil, binary veri taşır”.
8) DDIC alan tipi kullanmak neden en iyi pratik?
Yeni başlayanların en sık yaptığı şey şu:
“Ben KUNNR için TYPE c LENGTH 10 yazarım.”
Çalışır ama uzun vadede riskli olabilir. En iyi yaklaşım:
- Eğer bir SAP tablosunun alanını kullanıyorsan
- Tipi de o alan üzerinden al
DATA lv_kunnr TYPE kna1-kunnr.
DATA lv_matnr TYPE mara-matnr.
DATA lv_vbeln TYPE vbak-vbeln.
Bunun artıları:
- Doğru uzunluk ve conversion exit (ALPHA gibi) uyumu
- Daha az format hatası
- Daha “SAP standart” geliştirme
9) Structure ve Internal Table’a mini giriş
Structure (satır tipi)
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.
Internal Table (liste)
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.
Sonuç
ABAP’ta veri tiplerini doğru seçmek; daha temiz kod, daha az hata ve daha doğru formatlama demektir. Başlangıç seviyesinde aklında kalması gereken kısa özet:
- Metin →
string(dinamik), sabit alan →c - Sayaç/indeks →
i - Para/tutar → mümkünse DDIC
CURRalanı veyap decimals - Tarih/saat →
d,t - True/false →
abap_bool - SAP alanları → mümkünse
kna1-kunnrgibi DDIC referansı
Abap’ta WRITE komutu kullanımı için bu yazıyı okuyabilirsiniz.
Link: https://www.mustafahamit.com/abap-write-uline-ve-skip-kullanimi/
![]()