ABAP Dictionary

ABAP Dictionary

Sistem ve veritabanı tarafından kullanılan veri tanımlarını merkezi olarak tanımlamak ve yönetmek için kullanılır. Kullanıcı tanımlı tiplerin tanımlanmasını sağlar. Data element, structure ve tablo tipleri tanımlanabilir. Arama yardımı (search help) gibi düzenleme araçları ve lock object gibi nesneler oluşturulmasına izin verir.

Kullanılan nesnelerin merkezi olarak yönetilmesi ve kullanılması sayesinde veri bütünlüğünü sağlanır.

Data Dictionary’ de oluştrurulabilecek bazı nesneler,

  • Tablo (Table)
  • View
  • Data Element
  • Yapı (Structure)
  • Tablo tipi (TableType)
  • Tip grubu (Type Group)
  • Domain
  • Arama yardımı
  • Lock object

SE11 işlem kodu ile Abap Dictionary’ e erişilebilir.

Data Element

Veri tipi tanımlamak için kullanılır. Tanımlanan bu tipler tablolarda, structure’ larda alan tanımlarken veya bir tablo tipinin (table type) satır tipini belirtirken kullanılır. ABAP programlarında “TYPE” kelimesi ile tip tanımlamada içinde kullanılır. Bir alanın ekranda nasıl görüneceği, sütun başlığı bilgileri, çevrimiçi yardım dokümantasyonu ve parametre tanımını içerir.

İki şekilde tanımlanabilir.

1. Basit (elemantary) tip

2. Referans (reference) tip

1. Basit (elemantary) tip

ABAP Dictionary veri tipleri kullanılarak veya bir domain kullanılarak tanım yapılabilir.

2. Referans (reference) tip

Referans tip tanımı yapmak için kullanılır.

Not: Mevcut bir örneği incelemek için SE11 işlem kodu ile MATNR data elementini görüntüleyebilirsiniz.

Data Element Bakım Ekranı

“Data Type” tabında veri tipi, uzunluğu gibi özellikler tanımlanır.

“Further Characteristics” tabında arama yardımı ve parametre özellikleri tanımlanır.

“Field Label” tabında veri tipinin ekranda görünecek etiketleri, liste sütun başlıkları tanımlanır.

Aynı özellikte veri tipleri için farklı data elementler tanımlanabilir. Örneğin malzeme numarası için “MATNR” ve “MATNR_D” şeklinde iki farklı data element tanımlıdır. “MATNR” data elementinde arama yardımı (search help) bağlı iken “MATNR_D” data elementine bağlı değildir.

Örnek1: Ön tanımlı basit data element tanımlama örneği.

SE11 işlem kodunu çalıştırın. “Data type” alanına “ZTEST” yazın.

“Create” butonuna tıklayın. “

Açılan pencereden “Data element” seçeneğini seçin.

Short Description” alanına kısa açıklama yazın.

“Predefined type” seçeneğini seçin.

“Data type” alanında “CHAR”, “Length” alanına “2” yazın.

Data element’ in teknik özellikleri tamamlandı. Etiket özelliklerini doldurmak için “Field Label” tabını seçin.

Veri tipi bir ekranda veya listede kullanıldığında görünecek metin bilgiler doldurulur. Dört adet metin girmeye izin verir. Her bir metin alanının uzunluğu sabittir.

Data element aktif edilmeye hazır. Aktif et butonu ile aktif edip, kullanabilirsiniz.

Örnek 2: Bir domain kullanarak data element tanımlanan bir örnek.

Data element birinci örnekteki gibi oluşturulur. “Predefined type” yerine “Elementary type” seçilir. Domain kısmına “LAND1” yazın.

“LAND1” domain’ i üzerinden veri tipi, uzunluk ve domain’ e bağlı değer tablosu atanmış oldu.

Domain

Değer aralığı tanımlamaya yararlar. Değerlerin veri tipi, uzunluğu, çeviri yordamları (conversion routine) ve değer aralığı tanımlamaları yapılabilir. Domain’ ler data elementler tanımlamak için kullanılırlar.

Değer aralığı üç şekilde tanımlabilir.

· Sabit değerler (fixed value) : Değerler tek tek tanımlanır.

· Aralık (intervals) : Alt limiti ve üst limiti olan aralıklar tanımlanır.

· Değer tablosu (value table) : Değerler bir tablodan alınır.

Çeviri Yordamı (Conversion Routine)

Ekrandaki alanda verinin görüntülenme ve kaydedilme düzeni ayarlamak için kullanılan fonksiyonlardır. İki adet fonksiyon oluşturulmalıdır. Birinci fonksiyon verilerin ekranda görüntülenmesi sırasında çevrim yapar. İkinci fonksiyon verinin kaydedilmesi sırasında çevrim yapar.

CONVERSION_EXIT_xxxxx_OUTPUT

CONVERSION_EXIT_xxxxx_INPUT

“xxxxx” li kısım domain içerisine yazılarak kullanılır.

Örneğin MATNR domain’ inde “MATN1” çeviri yordamı kullanılmıştır.

“MATN1” çeviri yordamına tıklandığında açılan pencereden çeviri yordamları seçilerek fonksiyonları inceleyebilirsiniz.

Örnek 1: Sabit değerler içeren bir domain oluşturma örneği.

SE11 işlem kodunu çalıştırın. “Domain” alanına “ZTEST_D” yazın.

“Create” butonuna tıklayın. “

Short Description” alanına kısa açıklama yazın.

“Data type” alanında “CHAR”, “No. Characters” alanına “2” yazın. Enter tuşuna basın. “Output Length” alanıda “2” olarak değişecektir.

“Value Range” tabına geçin ve değerleri aşağıdaki gibi doldurarak. Aktif et ikonunu tıklayın. Domain aktif edildikten sonra kullanılabilir. İstenilen data element’ e atanabilir. Data elementin kullanıldığı ekranlarda domain içerisine tanımlanan sabit değerler seçilebilir.

ABAP Dictionary Veri Tipleri

ABAP dictionary içerisinde kullanılacak veri tipleridir. Programlar içerisinde direkt olarak kullanılamazlar.

Veri tipi Tanım Maksimum uzunluk n ABAP veri tipi
DEC Hesap/miktar alanı 1-31, 1-17 tabloda P((n+1)/2)
INT1 Bir byte tam sayı 3 Dahili kullanım
INT2 İki byte tam sayı 5 Dahili kullanım
INT4 Dört byte tam sayı 10 I
CURR Para birimi alanı BCD formatında 1-17 P((n+1)/2)
CUKY Para birimi alanı için para birimi anahtarı 5 C(5)
QUAN BCD formatında miktar alanı 1-17 P((n+1)/2)
UNIT Miktar alanları için birim anahtarı 2-3 C(n)
PREC Artık kullanılmıyor 16 Dahili kullanım
FLTP Kayan noktalı sayı 16 F(8)
NUMC Nümerik metin 1-255 N(n)
CHAR Karakter dizisi 1-255 C(n)
LCHR Uzun byte karakter dizisi 256-max C(n)
STRING Değişken uzunlukta String 1-maksimum STRING
RAWSTRING Değişken uzunlukta Byte dizisi 1-maksimum XSTRING
DATS Tarih 8 D
ACCP Muhasebe dönemi YYYYMM 6 N(6)
TIMS Zaman HHMMSS 6 T
RAW Byte dizisi 1-255 X(n)
LRAW Uzun byte dizisi 256-max X(n)
CLNT Üst birim 3 C(3)
LANG Dil internal 1, external 2 C(1)

TABLOLAR

SAP’ nin standart tabloları dışında tabloya ihtiyaç duyulursa Abap dictionary’ den oluşturulabilir. Tablo alanları Data elementler veya ön tanımlı tiplerden oluşabilir.

Tablo Tanımlama

Tablo tanımlamak için bakım sekmeleri ve “Technical Settings” kısmında tanımlamalar yapılmalıdır.

Tablo Bakımı Sekmeleri: Tablo tipi, bakım ve alanlarla ilgili tanımlamalar yapılabilir.

Delivery and Maintenance: “Delivery Class” ile tablo tipi belirlenir. “Data Browser/Table View Maint.” İle tablonun bakım modu seçilir.

Fields: Alanlar ve veri tipleri atamasının yapıldığı sekmedir.

Entry help/check: Alanlara “Foreign Key” ve arama yardımlarının atamasının yapıldığı sekmedir.

Currency/Quantity Fields: Parasal tutar ve miktarlar alanlarının bağlı olduğu referans birimleri (alanlar) tanımlanır.

Technical Settings: Araç çubuğu üzerinde bulunan buton ile tabloya ait saklama, tamponlama ve değişikliğin izlenmesi ile ilgili tanımlar yapılabilir.

Örnek 1: Ön tanımlı tiplerle tablo oluşturma örneği.

SE11 işlem kodunu çalıştırın.

”Database table” alanına “ZTEST_T” yazın ve “Create” butonuna tıklayın.

“Short Description” alanına kısa açıklama yazın.

“Delivery Class” alanını “A” olarak seçin. “Data Browser/Table View Maint.” Alanını “Display/Maintenance Allowed” olarak seçin

Fields sekmesinde ilk üst birim tanıtıcısı “MANDT” alanıdır. Tablo alanlarını aşağıdaki resimdeki gibi doldurun.

MANDT dışındaki alanlar ön tanımlı tiplerdir. Bu alanları doldurmak için “Predifined Type” butonuna tıklanması gerekir.

Araç çubuğundaki “Technical Settings” butonuna tıklayın.

Değişikliklerin kaydedilmesi için bir bencere açılacaktır. “Evet” i seçerek, package ve request’ e bağlama işlemlerini yapın.

“Data class”’ ı “APPL0” ve “Size category”’ i 0 olarak seçin.

Kaydet butonuna tıklayın.

Aktif et butonuna tıklayın.

SE16N işlem kodu ile tablo içeriğini görüntüleyebilirsiniz. Şu an boş olduğu için bir kayıt görünmeyecektir.

Örnek 2: Data Elementler ile tablo oluşturma örneği.

SE11 işlem kodu çalıştırın.

”Database table” alanına “ZTEST_T2” yazın ve “Create” butonuna tıklayın.

“Short Description” alanına kısa açıklama yazın.

“Delivery Class” alanını “A” olarak seçin. “Data Browser/Table View Maint.” Alanını “Display/Maintenance Allowed” olarak seçin

Tablo alanlarını aşağıdaki şekilde doldurun.

Tabloya miktar alanı eklendiği için, miktar alanının birimini belirten referans tablo “Currency/Quantity Fields” tabında tanımlanmalı.

Araç çubuğundaki “Technical Settings” butonuna tıklayın.

Değişikliklerin kaydedilmesi için bir bencere açılacaktır. “Evet” i seçerek, package ve request’ e bağlama işlemlerini yapın.

“Data class”’ ı “APPL0” ve “Size category”’ i 0 olarak seçin.

Kaydet butonuna tıklayın.

Aktif et butonuna tıklayın

Tablo Bakım Ekranı (Table Maintanance Generator)

Kullanıcı tarafından direkt olarak içeriğinin değiştirilmesi istenen tablolara bakım ekranları oluşturulabilir. Bakım ekranları ile kayıt ekleme, silme, değiştirme işlemleri yapılabilir.

Örnek 1: Tablo bakım ekranı oluşturma örneği.

SE11 işlem kodunu çalıştırın.

“Database table” alanına yukarıdaki örneklerde oluşturulan “ZTEST_T2” tablo girin ve “Change” butonuna tıklayın. “Delivery and Maintanance” tabında “Data browser/…” alanının “Display/Maintanance Allowed” seçili olması gereklidir.

Utilities menüsünden “Table Maintenance Generator” seçin.

“Yetki grubu” alanında “&NC&” seçin.

“Function group” alanına “ZTEST_T2_FG” yazın.

Maintenance type “one step”’ i seçin.

Uygulama çubuğundaki “Ekran numarası/numaraları ara” ikonuna tıklayın.

Açılan pencerede “Propose screen number(s)”’ u seçin ve “Continue” butonuna tıklayın.

“Overview screen” alanındaki ekran numarası otomatik olarak dolacaktır.

Uygulama çubuğundaki “Yarat” ikonuna tıklayın.

Package ve request’ e bağlama penceresi birden fazla defa sorulacaktır. Request’ inizi seçerek devam edin.

İşlem başarılı ise durum çubuğunda işlemle ilgili mesaj görülebilir.

Bakım ekranını hatasız oluşturuldu ise, SM30 işlem kodu ile kayıt girmeyi deneyebilirsiniz.

“Table/View” alanına “ZTEST_T2” ismi yazılır. “Maintain” butonunu tıklayın.

Uygulama çubuğundaki “Yeni girişler” butonunu kullanılarak yeni kayıt eklenebilir.

Girişi tamamladıktan sonra “Kaydet butonuna tıklayarak kaydedebilirsiniz.

Tablo bakım ekranı oluşturulduktan sonra tablo alanlarında bir değişiklik yapılırsa (yeni bir alan ekleme, mevcut bir alanı silme gibi) bakım ekranının silinip, yeniden oluşturulması gerekir.

Harici Anahtar (Foreign Key)

Harici anahtar oluşturmanın amacı tablo alanına girilen değerin, tanımlanan bir değer tablosundan kontrolünün sağlanmasıdır. Harici anahtarlar ekrandan bilgi girişi esnasında kontrol edilirler. SQL ifadeleri ile tabloda güncelleme yapılıyorsa bu kontrol yapılmaz.

Örnek: Bir alan için harici anahtar tanımlama örneği

SE11 işlem koduna girin. Daha önce oluşturulan “ZTEST_T2” tablosunu değişiklik modunda açın.

“ULKE” alanını seçin harici anahtar butonuna tıklayın.

Data elementin domaininden dolayı otomatik olarak “T005” (ülkeler) tablosu ile harici anahtar yapmayı önerir. “Evet” butonunu seçin.

Kontrol yapılacak alanları görebilirsiniz.

“Copy” butonu ile işlemi tamamlayabilirsiniz.

Tabloyu aktif edin.

SM30 işlem kodu ile kayıtları kontrol ederseniz, “Ülke” alanı için giriş yarımı aktif olduğunu görebilirsiniz.

Ülke alanına değer tablosunda olmayan bir değer girilmesine izin vermeyecektir.

İkincil İndeks Oluşturma

Tablolarda anahtar olmayan alanlar için kayıt okuma performansını arttırmaya yönelik ikincil indeksler tanımlanabilir.

Örnek 1: ZTEST_T2 tablosunda soy isim alanına göre indeks ekleme örneği.

SE11 işlem kodunu çalıştırın.

“ZTEST_T2” tablosunu açın.

Uygulama çubuğundaki “Indexes” ikonuna tıklayın.

Eğer daha önce İndeks yaratılmadı ise aşağıdaki uyarı mesajı gelir. Yes butonuna tıklanır.

Tablo indekslerini gösteren pencere açılacaktır. Araç çubuğundaki “Create” ikonunu tıklayarak “Create Index” seçeneğini seçin.

“Create Index” penceresi açılır. “Index Name” alanına “Z01” yazın ve “Continue” butonuna tıklayın.

Kaydetme ekranında ”Evet” butonunu tıklayın.

“Short description” kısmına kısa açıklama yazın. “Index flds” alanında indeks “MANDT” ve “SOYISIM” alanlarını seçin. Aktif et butonu ile aktif edin.

Aktif etme işleminden sonra soy isim alanına göre indeksleme yapılacaktır.

Yapılar (Structure)

Yapısal veri tipi oluşturmak için ABAP dictionary’ den structure’ lar oluşturulabilir. Tablolardan farklı olarak tanımlanan alan tanımlarını tutarlar, birincil anahtar, teknik özellik ve kayıt içermezler. Para ve miktar alanlarının birim referansları tablolarda olduğu gibi tanımlanır.

ARAMA YARDIMI (SEARCH HELP)

Ekrandaki bir alan için değer listesinden seçim yapılmasını sağlar. Alanla ilgili değer listesi açılır, kullanıcı bu listeden seçim yapar.

İki çeşidi vardır.

1. Elemantary: Basit arama yardımı oluşturulmasını sağlar.

2. Collective : Birden fazla arama yardımını barındırır.

Örnek 1: “ZTEST_T2” tablosunda isim ve soy isim alanı için arama yardımı oluşturma örneği.

SE11 işlem kodunu çalıştırın.

“Search help”’ i seçerek alana “ZTEST_SH” yazın ve “Create” butonuna tıklayın. Açılan pencereden “Elemantary search help”’ i seçin.

“Short description” alanına kısa açıklamasını yazın.

“Selection method” alanına tablonun ismini “ZTEST_T2” yazın.

“Parametreler” kısmında kullanmak istediğimiz alanları sırası ile yazın.

İç ve dışa aktarılacak parametreleri “IAP” ve “DAP” alanlarını seçin.

Konum alanlarını doldurun ve aktif et butonuna tıklayın. Package ve request seçin.

Aktif ettikten sonra arama yardımını F8 tuşu veya “test” ikonuna tıklayarak test edebilirsiniz.

ABAP VERİ TİPLERİ

ABAP VERİ TİPLERİ

Aşağıda ABAP programlarında kullanılan ön tanımlı tipler ve ABAP Dictionary’ de standart olarak tanımlı tipler anlatılmıştır.

Ön Tanımlı Tipler (Predefined Data Types)

Tüm ABAP programlarında kullanılabilirler.

Sabit Uzunluklu Veri Tipleri (Fixed Length Data Types)

Uzunluğu daima sabit olan veri tipleridir.

Veri Tipi Tanım Başlangıç uzunluğu

(Byte)

Geçerli alan uzunluğu

(Byte)

Başlangıç değeri Açıklama
Karakter
C Karakter 1 1 – 65535 yok
N Nümerik metin 1 1 – 65535 0
D Tarih 8 8 ‘00000000’
T Zaman 6 6 0
Nümerik
I Tam sayı 4 4 0
P Ondalıklı sayı 8 1-16 0
F Ondalıklı sayı 8 8 0
decfloat16 Ondalıklı sayı 8 8 0 7.0 EHP2’ de eklendi
decfloat34 Ondalıklı sayı 16 16 0 7.0 EHP2’ de eklendi
Heksadesimal
X On altılı sayı 1 1 – 65535 X’0′

C, N, P ve X veri tipleri genel tiplerdir. Kullanılmadan önce alan uzunluklarının belirtilmesi gerekir. P tipi için ondalık alanının da tanımlanması gerekir.

Değişken Uzunluklu Veri Tipleri

Çalışma anına kadar uzunlukları belirlenemeyen veri tipleridir.

Veri Tipi Tanım
STRING Karakter Dizisi
XSTRING Heksa decimal tiinde bir byte karakterter

ABAP Dictionary Ön Tanımlı Veri Tipleri

ABAP dictionary’ de standart olarak tanımlanmış veri tipleri aşağıdaki gibidir.

Veri tipi Tanım Maksimum uzunluk n ABAP veri tipi
DEC Hesap/miktar alanı 1-31, 1-17 tabloda P((n+1)/2)
INT1 Bir byte tam sayı 3 Dahili kullanım
INT2 İki byte tam sayı 5 Dahili kullanım
INT4 Dört byte tam sayı 10 I
CURR Para birimi alanı BCD formatında 1-17 P((n+1)/2)
CUKY Para birimi alanı için para birimi anahtarı 5 C(5)
QUAN BCD formatında miktar alanı 1-17 P((n+1)/2)
UNIT Miktar alanları için birim anahtarı 2-3 C(n)
PREC Artık kullanılmıyor 16 Dahili kullanım
FLTP Kayan noktalı sayı 16 F(8)
NUMC Nümerik metin 1-255 N(n)
CHAR Karakter dizisi 1-255 C(n)
LCHR Uzun byte karakter dizisi 256-max C(n)
STRING Değişken uzunlukta String 1-maksimum STRING
RAWSTRING Değişken uzunlukta Byte dizisi 1-maksimum XSTRING
DATS Tarih 8 D
ACCP Muhasebe dönemi YYYYMM 6 N(6)
TIMS Zaman HHMMSS 6 T
RAW Byte dizisi 1-255 X(n)
LRAW Uzun byte dizisi 256-max X(n)
CLNT Üst birim 3 C(3)
LANG Dil internal 1, external 2 C(1)

Kullanıcı Tanımlı Veri Tipleri (User Defined Data Types)

TYPES anahtar kelimesi kullanılarak program içerisinde kullanıcı tanımlı tipler tanımlanabilir.

Örnek: Kullanıcı tanımlı veri tipi kullanımını gösteren örnek.

TYPES: ty_isim  TYPE c LENGTH 20,
ty_id    TYPE n,
ty_sonuc TYPE p DECIMALS 2,
ty_sira  TYPE i.
DATA: gv_isim  TYPE ty_isim  VALUE ‘ibrahim’,
gv_id    TYPE ty_id    VALUE ‘1’,
gv_sonuc TYPE ty_sonuc VALUE ‘89.20’,
gv_sira  TYPE ty_sira  VALUE 193.
WRITE : gv_isim, gv_id, gv_sonuc, gv_sira.

Yapısal Veri Tipleri (Structured Data Types)

Veri tiplerini bir isim altında gruplandırılarak oluşturulan veri tipleridir. Veri tipindeki bileşenlere tire (-) işareti ile erişilir.

BEGIN OF ve END OF anahtar kelimeleri arasında bileşenler tanımlanır.

Örnek: Yapısal veri tipi kullanımını gösteren örnek.

TYPES: ty_isim(20) TYPE c,
ty_id       TYPE n,
ty_sonuc    TYPE p DECIMALS 2,
ty_sira     TYPE i.
TYPES: BEGIN OF ty_aday,
isim      TYPE ty_isim,
id        TYPE ty_id,
sonuc     TYPE ty_sonuc,
sira      TYPE ty_sira,
adres(30) TYPE c,
tarih     TYPE sy-datum,
END OF ty_aday.
DATA: gs_aday TYPE ty_aday.
gs_aday-isim  = ‘ibrahim’.
gs_aday-id    = ‘1’.
gs_aday-sonuc = ‘89.20’.
gs_aday-sira  = 193.
gs_aday-adres = ‘Abap sokak’.
gs_aday-tarih = sy-datum.
WRITE: / gs_aday-isim, gs_aday-id, gs_aday-sonuc,
gs_aday-sira, gs_aday-adres, gs_aday-tarih.

SABİTLER (CONSTANTS)

Hafızada değiştirilemeyecek (sabit) verilerin tutulmasını sağlayan nesnelerdir. Değer, sabit tanımı yapılırken atanır ve daha sonra değiştirilemez.

Sabit tanımlamak için CONSTANTS anahtar kelimesi kullanılır. Değer atamak için VALUE ifadesi kullanılır.

XSTRING tipinde, referanslarda, internal tablolar ve internal tablo içeren yapılarda kullanılamaz.

Örnek 1: Sabit tanımlama örneği.

CONSTANTS : ay   TYPE i VALUE 12,
gun  TYPE i VALUE 365,
saat TYPE i VALUE 6.
WRITE: ay, gun, saat.

Örnek 2: Yapısal sabit tanımlama örneği.

CONSTANTS: BEGIN OF aday,
isim(20) TYPE c            VALUE ‘ibrahim’,
id       TYPE n            VALUE ‘1’,
sonuc    TYPE p DECIMALS 2 VALUE ‘89.20’,
sira     TYPE i            VALUE 193,
END OF aday.
WRITE: /  aday-isim, aday-id, aday-sonuc, aday-sira.

ARİTMETİK İŞLEMLER

ARİTMETİK İŞLEMLER

Aritmetik işlemler anahtar kelimeler kullanılarak yapılabileceği gibi “+”, “-“, “*”, “/”,DIV, MOD “**” kullanılarak da yapılabilir.

Operatör Anlamı
+ Toplama
Çıkarma
* Çarpma
/ Bölme
DIV Bölme işlemindeki sonucun tam sayı kısmı
MOD Bölüm kalanının pozitif kısmı
** Üs alma

DATA : a TYPE f VALUE ‘5’,
b TYPE f VALUE ‘3’,
c type P DECIMALS 2.
c = a + b. WRITE c.
c = a – b. WRITE / c.
c = a * b. WRITE / c.
c = a / b. WRITE / c.
c = a DIV b. WRITE / c.
c = a MOD b. WRITE / c.
c = a ** b. WRITE / c.

Aritmetik işlemlerde kullanılan ifadeler.

Operatör Anlamı Kullanımı İşlem
ADD Toplama ADD a TO b. a + b
SUBTRACT Çıkarma SUBTRACT b FROM a. a – b
MULTIPLY Çarpma MULTIPLY a BY b. a * b
DIVIDE Bölme DIVIDE a BY b. a / b

DATA: a TYPE p DECIMALS 2 VALUE ‘4.5’,
b TYPE p DECIMALS 2 VALUE ‘1.5’.
ADD a TO b. WRITE b.
SUBTRACT a FROM b. WRITE / b.
MULTIPLY a BY b. WRITE / a.
DIVIDE a BY b. WRITE / a.

SAYISAL FONKSİYONLAR

Sayısal değer alırlar. Fonksiyondan dönen değerin tipi fonksiyona gönderilen parametre veya fonksiyonun kendisi belirler.

1. Genel sayısal fonksiyonlar

2. Yerel ekstremum fonksiyonlar

3. Kayan nokta fonksiyonları

4. Yuvarlama fonksiyonları

1. Genel Sayısal Fonksiyonlar

Fonksiyon Tanım
ABS mutlak değer
SIGN parametrenin işareti
CEIL parametre değerine en yakın (küçük) tamsayı
FLOOR parametre değerine en yakın (büyük) tamsayı
TRUNC parametrenin tamsayı kısmı
FRAC parametrenin ondalık kısmı

Örnek: Genel sayısal fonksiyonların kullanımını gösteren örnek.

DATA : a TYPE p DECIMALS 2,
b TYPE p DECIMALS 2 VALUE ‘-2.34’.
a = ABS( b ).
WRITE:   ‘ABS:  ‘, a.
a = SIGN( b ).
WRITE: / ‘SIGN: ‘, a.
a = CEIL( b ).
WRITE: / ‘CEIL: ‘, a.
a = FLOOR( b ).
WRITE: / ‘FLOOR:’, a.
a = TRUNC( b ).
WRITE: / ‘TRUNC:’, a.
a = FRAC( b ).
WRITE: / ‘FRAC: ‘, a.

2. Yerel ekstremum fonksiyonlar

3. Kayan Nokta Veri Tipleri

Aşağıdaki şekilde kullanılırlar.

fonksiyon( deger )

Fonksiyon Tanım
ACOS arckosinüs
ASIN arcsinüs
ATAN arctanjant
COS kosinüs
SIN sinüs
TAN tanjant
COSH hiperbolik kosinüs
SINH hiperbolik sinüs
TANH hiperbolik tanjant
EXP üst
LOG doğal logaritma
LOG10 10 tabanlı logaritma
SQRT Karakök

DATA : gv_sonuc TYPE f,
x TYPE p DECIMALS 3.
x = ‘2.72’.
gv_sonuc = COS( x ).
WRITE: / ‘Cos:’, gv_sonuc.
gv_sonuc = SIN( x ).
WRITE: / ‘Sin:’, gv_sonuc.
gv_sonuc = TAN( x ).
WRITE: / ‘Tan:’, gv_sonuc.

KARAKTER VE BYTE DİZİSİ İŞLEME İÇİN İFADELER

KARAKTER VE BYTE DİZİSİ İŞLEME İÇİN İFADELER

CONCATENATE

Veri_nesnesi1, veri_nesnesi2, … veri nesnelerinin içeriği veya internal tablodaki kayıtları sıralarına göre belirlenen alanda birleştirilir.

CONCATENATE {veri_nesnesi1 veri_nesnesi2 …}|{LINES OF internal_tablo}

INTO sonuc

[IN {CHARACTER|BYTE} MODE]

[SEPARATED BY ayrac]

[RESPECTING BLANKS].

Ekler:

IN {CHARACTER|BYTE} MODE: Karakter dizisi veya bayt dizisinde işlem yapılacağını belirtmek için kullanılır. Kullanılmaz ise karakter dizisi işlemi yapılır.

SEPARATED BY ayrac: Birleştirilecek veri nesneleri arasına ayrac ile belirtilen veri nesnesi değeri yerleştirilir.

RESPECTING BLANKS: Birleştirilecek veri nesnelerindeki boş karakterlerde birleştirmede kullanılır.

CONCATENATE ifadesi sonrasında sy-subrc sistem değişkeni aşağıdaki şekilde değişir.

sy-subrc Anlamı
0 Veri nesnelerinin bütün içerikleri hedef alana transfer edildi.
4 Veri nesnelerinin bütün içerikleri tamamıyla transfer edilemedi, hedef alanı küçük.

FIND

Belirtilen veri nesnesi içerisinde arama örneği kullanarak arama yapar. Karakter dizisi veya bayt dizisi aramak için kullanılır.

FIND [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] ornek

IN [bolum] veri_nesnesi

[IN {CHARACTER|BYTE} MODE]

[arama_secenekleri].

Ekler:

FIRST OCCURRENCE: İlk bulunan örnekte arama işlemi sonlanır. Varsayılan arama yöntemidir.

FIRST OCCURRENCE: Tüm sonuçları bulur.

CHARACTER MODE: Karakter dizisi araması yapmak için kullanılır. Varsayılan arama düzenidir.

BYTE MODE: Bayt dizisi araması yapmak için kullanılır.

FIND ifadesi sonrasında sy-subrc sistem değişkeni aşağıdaki şekilde değişir.

sy-subrc Anlamı
0 En az bir arama örneği bulundu.
4 Arama örneği bulunamadı.
8 Karakter dizisi işleminde geçersiz çift-bayt karakter içeriyor.

REPLACE

Belirtilen veri nesnesindeki karakter veya bayt alanlar ile değiştirir. Örnek bazlı ve pozisyon bazlı olarak iki farklı kullanımı vardır.

Örnek bazlı:

1. REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] örnek

IN [bolum] veri_nesnesi WITH yeni_deger

[IN {CHARACTER|BYTE} MODE]

[degistirme_secenekleri].

Pozisyon bazlı:

2. REPLACE SECTION [OFFSET offset] [LENGTH uzunluk] OF veri_nesnesi WITH yeni_deger

[IN {CHARACTER|BYTE} MODE].

REPLACE ifadesi sonrasında sy-subrc sistem değişkeni aşağıdaki şekilde değişir.

sy-subrc Anlamı
0 Arama örneğine veya belirtilen bölüme yeni içerik taşındı ve sonuç veri nesnesinde mevcut.
2 Arama örneğine veya belirtilen bölüme yeni içerik taşındı ve sonuç sağ taraftan kırpıldı.
4 Arama örneği örnek bazlı aramada veri nesnesinde bulunamadı.
8 Örnek veya yeni içerik yorumlanabilir çift-bayt karakter içermiyor.

SHIFT

Veri nesnesinin değerinin yerini değiştirir. Yer değiştirilecek konum numarası ve yer değiştirmenin yönü belirtilebilir. Yer değiştirerek hangi karakterin silineceği belirtilebilir. Ek kullanılmaz ise içerik sola doğru bir bir konum kaydırılır.

SHIFT veri_nesnesi [ {[bolge] [yone]} | deleting ]

[IN {CHARACTER|BYTE} MODE].

Ekler:

IN CHARACTER MODE: karakter dizisi işlemi yapılır.

IN BYTE MODE: Bayt dizisi işlemi yapılır.

SPLIT

ayrac ile belirtilen ayraca göre veri nesnesini bölümlere ayırır. Karakter-bernzeri veya bayt-benzeri yapı ile sonuç nesnelerine veya karakter-benzeri veya bayt-benzeri satır tipine sahip dahili tabloya yazılır. En az iki değişken belirtilmelidir.

SPLIT veri_nesnesi AT ayrac INTO

{ {sonuc1 sonuc2 …} | {TABLE sonuc_tablosu} }

[IN {CHARACTER|BYTE} MODE].

Ekler:

IN CHARACTER MODE: karakter dizisi işlemi yapılır.

IN BYTE MODE: Bayt dizisi işlemi yapılır.

SPLIT ifadesi sonrasında sy-subrc sistem değişkeni aşağıdaki şekilde değişir.

sy-subrc Anlamı
0 Bölümler hedef alanlara veya dahili tabloya kırpılmadan aktarıldı.
4 En az bir bölüm hedef alanlara veya dahili tabloya aktarılırken sağ tarafından kırpıldı.

CONDENSE

Veri nesnesi metininde baştaki ve sondaki boşlukları kaldırır ve diğer ardışık boşlukları bir karakter boşluk olacak şekilde değiştirir.

CONDENSE text [NO-GAPS].

Ekler:

NO-GAPS: Metindeki tüm boşlukları kaldırır.

CONVERT TEXT

Metnin içeriği sıralanabilir bayt sırasına dönüştürülür ve sonuç hex değişkenine atanır.

CONVERT TEXT text INTO SORTABLE CODE hex.

OVERLAY

Metin1 içerisindeki değişken metin2 içerisindeki aynı konumdaki karaktere atanır. ONLY eki kullanılmaz ise sadece metin1 içerisindeki boş karakterler değiştirilir.

OVERLAY metin1 WITH metin2 [ONLY maske].

OVERLAY ifadesi sonrasında sy-subrc sistem değişkeni aşağıdaki şekilde değişir.

sy-subrc Anlamı
0 Text1 içerisindeki en az bir karakter değiştirildi.
4 Text1 içerisinde hiçbir karakter değiştirilmedi.

TRANSLATE

Metni küçük veya büyük harfe çevirir.

TRANSLATE metin {TO {UPPER|LOWER} CASE}

| {USING maske}.

Ekler:

TO UPPER CASE: Metni büyük harfe çevirir.

TO LOWER CASE: Metni küçük harfe çevirir.

USING  maske: maske veri nesnesine göre çevrim işlemi yapılır.

WRITE TO

Kaynak ile belirtilen içeriği veya source_name ile belirtilen alanın içeriğini biçimlendirir.

WRITE {kaynak|(kaynak_ismi)} TO destination

[bicimlendirme_secenekleri].

WRITE TO ifadesi sonrasında sy-subrc sistem değişkeni aşağıdaki şekilde değişir.

sy-subrc Anlamı
0 source_name ile belirtilen kaynak bulundu ve atama gerçekleşti.
4 source_name ile belirtilen kaynak bulunamadı ve atama gerçekleşemedi.

Not: WRITE TO ile ilgili örnekler Listeleme komutlar kısmında bulabilirsiniz.

METİN İŞLEM ÖRNEKLERİ

Örnek: İki metni birleştirerek başka metin alanına değeri atayan CONCATENATE örneği.

DATA: gv_m1(10) VALUE ‘metin1’,
gv_m2(10) VALUE ‘metin2’,
gv_m3(30).
CONCATENATE gv_m1 ‘ve’ gv_m2 INTO gv_m3 SEPARATED BY space.
WRITE gv_m3.

Örnek: İnternal tablodaki kayıtlar birleştirerek bir metne atayan CONCATENATE örneği.

TYPES: BEGIN OF ty_metin,
m1(10),
m2(10),
END OF ty_metin.
DATA: gt_metin TYPE STANDARD TABLE OF ty_metin,
gs_metin TYPE ty_metin,
gv_metin(100).
CLEAR gs_metin.
gs_metin-m1 = ‘p11’.
gs_metin-m2 = ‘p12’.
APPEND gs_metin TO gt_metin.
CLEAR gs_metin.
gs_metin-m1 = ‘p21’.
gs_metin-m2 = ‘p22’.
APPEND gs_metin TO gt_metin.
CONCATENATE LINES OF gt_metin INTO gv_metin RESPECTING BLANKS.
WRITE gv_metin.

Örnek: Bir metin içerisinde arama yapan ve metnin bulunduğu pozisyon ve uzunluğu yazan örnek.

DATA: gv_pozisyon TYPE i,
gv_uzunluk  TYPE i.
FIND FIRST OCCURRENCE OF ‘cak’
IN ‘Arama yapılacak metin’
MATCH OFFSET gv_pozisyon
MATCH LENGTH gv_uzunluk.
WRITE: ‘pozisyon:’, gv_pozisyon,
/’uzunluk :’, gv_uzunluk.

Örnek: Arama yapılan metnin bir bölümünü yeni metin ile değiştiren örnek.

DATA gv_metin TYPE c LENGTH 30.
gv_metin = ‘Arama yapılacak metin’.
REPLACE FIRST OCCURRENCE OF ‘metin’ IN gv_metin WITH ‘text 2’.
WRITE gv_metin.

Örnek: Metin üzerinde SHIFT ifadesi kullanılarak değişiklikler yapaan örnek.

DATA: gv_m1(15) VALUE ‘ METIN12345’,
gv_m2(5)  VALUE ‘METIN’,
gv_m3(5)  VALUE ’45’.
WRITE:   ‘gv_m1’, 35 gv_m1.
WRITE: / ‘gv_m2’, 35 gv_m2,
/ ‘gv_m3’, 35 gv_m3.
SKIP.
SHIFT gv_m1 left deleting leading space.
WRITE: / ‘LEFT DELETING LEFT SPAPE’, 35 gv_m1.
SHIFT gv_m1 left deleting leading gv_m2.
WRITE: / ‘LEFT DELETING LEFT gv_m2’, 35 gv_m1.
SHIFT gv_m1 right deleting trailing gv_m3.
WRITE: / ‘RIGHT DELETING TRAILING gv_m3’, 35 gv_m1.
SHIFT gv_m1 left deleting leading space.
WRITE: / ‘LEFT DELETING LEFT SPAPE’, 35 gv_m1.

Örnek: Bir metni “-“ ayracına göre ayırıp, iki farklı değişkene atayan örnek.

DATA: gv_metin  TYPE c LENGTH 30,
gv_bolum1 TYPE c LENGTH 15,
gv_bolum2 TYPE c LENGTH 15.
gv_metin = ‘ilk kısım -ikinci kısım’.
SPLIT gv_metin AT ‘-‘ INTO gv_bolum1 gv_bolum2.
WRITE:  gv_bolum1,
/ gv_bolum2.

Örnek: Metindeki boşlukları kaldıran CONDENSE örneği.

DATA: gv_metin  TYPE c LENGTH 30.
gv_metin = ‘    boşluklar  kaldırılacak   ‘.
WRITE: ‘metnin ilk hali   :’, gv_metin.
CONDENSE gv_metin.
WRITE: / ‘CONDENSE kullanımı:’, gv_metin.
CONDENSE gv_metin NO-GAPS.
WRITE: / ‘NO-GAPS eki       :’, gv_metin.

Örnek: Metnin tamamını TRANLATE ifadesi ile küçük veya büyük harfe çeviren örnek.

DATA: gv_metin  TYPE c LENGTH 30.
gv_metin = ‘küçük/büyük harf çevrimi’.
WRITE: ‘metnin ilk hali    :’, gv_metin.
TRANSLATE gv_metin TO UPPER CASE.
WRITE: / ‘UPPER CASE sonrası :’, gv_metin.
TRANSLATE gv_metin TO LOWER CASE.
WRITE: / ‘LOWER CASE sonrası :’, gv_metin.

MANTIKSAL İFADELER

MANTIKSAL İFADELER

İçerikleri (değer, nesne, …) bir koşula göre kontrol eden ifadelerdir. İfadenin sonucu doğru veya yanlış olabilir. Koşul sonucu direkt olarak bir veri nesnesine atanamaz. Kullanılan ifadeler aşağıdadır.

Karşılaştırma Operatörleri

Değerler arasında karşılaştırma yapmak için kullanılan mantıksal ifadelerdir. Kullanım şekli aşağıdaki gibidir.

icerik1 karsilastirma_operatoru icerik2

Bütün veri tipleri için karşılaştırma operatörleri aşağıdaki tabloda verilmiştir.

Operatör Kontrol Tanım
=, EQ Equal

Eşit

Karşılaştırılan iki değerin eşitliğini kontrol eder.
<>, NE Not Equal

Eşit değil

Karşılaştırılan iki değerin eşit olmadığını kontrol eder.
<, LT Less Than

Küçük

Birinci değerin, ikinci değerden küçük olup olmadığını kontrol eder.
>, GT Greater Than

Büyük

Birinci değerin, ikinci değerden büyük olup olmadığını kontrol eder.
<=, LE Less Equal

Küçük Eşit

Birinci değerin, ikinci değerden küçük veya eşit olup olmadığını kontrol eder.
>=, GE Greater Equal

Büyük Eşit

Birinci değerin, ikinci değerden büyük veya eşit olup olmadığını kontrol eder.

Tablo ??? Bütün veri tipleri için karşılaştırma operatörü

Karakter-benzeri veri nesneleri için karşılaştırma operatörleri aşağıdaki tabloda verilmiştir.

Operatör Kontrol Tanım
CO Contains Only

İçeriyorsa

İlk veri nesnesindeki tüm karakterler, ikinci veri nesnesi içerisinde bulunuyor ise doğru olur. Küçük, büyük harf duyarlıdır.
CN Contains Not Only

İçermiyorsa

İlk veri nesnesindeki tüm karakterler, ikinci veri nesnesi içerisinde bulunmuyor ise doğru olur. Küçük, büyük harf duyarlıdır.
CA Contains Any

Karakter içeriyor ise

İkinci veri nesnesi karakterlerinden herhangi birisi, birinci veri nesnesi içerisinde bulunuyor ise doğru olur. Küçük, büyük harf duyarlıdır.
NA Contains Not Any

Karakter içermiyor ise

İkinci veri nesnesi karakterlerinden herhangi birisi, birinci veri nesnesi içerisinde bulunmuyor ise doğru olur. Küçük, büyük harf duyarlıdır.
CS Contains String

Dizi içeriyor ise

İlk veri nesnesi içerisinde, ikinci veri nesnesi bulunuyor ise doğru olur. Küçük, büyük harf duyarlı değildir.
NS Contains No String

Dizi içeriyormiyor ise

İlk veri nesnesi içerisinde, ikinci veri nesnesi bulunmuyor ise doğru olur. Küçük, büyük harf duyarlı değildir.
CP Covers Pattern

Şablon içeriyor mu

İlk veri nesnesi içerisinde, ikinci veri nesnesinde belirtilen joker karakterlere sahip kalıp bulunuyor ise doğru olur. Küçük, büyük harf duyarlı değildir.
NP No Pattern

Şablon içermiyor mu

İlk veri nesnesi içerisinde, ikinci veri nesnesinde belirtilen joker karakterlere sahip kalıp bulunmuyor ise doğru olur. Küçük, büyük harf duyarlı değildir.

Tablo ??? Karakter benzeri veri nesneleri için karşılaştırma operatörleri

Bayt benzeri nesneleri karşılaştırma için aşağıdaki operatörler kullanılır.

· BYTE-CO

· BYTE-CN

· BYTE-CA

· BYTE-NA

· BYTE-CS

· BYTE-NS

Bit deseni için karşılaştırma operatörleri

· O

· Z

· M

BETWEEN

Veri nesnesi değerinin belirtilen aralıkta olup olmadığı kontrolünü yapar.

icerik [NOT] BETWEEN icerik1 AND icerik2

IS ASSIGNED

Alan sembolünün bir nesneye atanıp, atanmadığını kontrol eder.

<fieldsymbols> IS [NOT] ASSIGNED

IS BOUND

Referansın değişkenin geçerli bir referans içerip içermediğini kontrol eder.

referans IS [NOT] BOUND

IS INITIAL

Bir veri nesnesinin değerinin tanımlı olduğu tipteki başlangıç değerine sahip olup olmadığını kontrol eder. Bu değer DATA ifadesinde VALUE kelimesi kullanarak tanımlanan değer değildir.

icerik IS [NOT] INITIAL

IS SUPPLIED

Bir prosedüre aktarılan parametrenin doluluğunu veya gerekliliğini kontrol eder.

para IS [NOT] SUPPLIED

IN

Veri nesnesinin değeri seçim tablosundaki değerler veya aralıklarda mı kontrolunu yapar.

icerik [NOT] IN seçim_tablosu

MANTIKSAL İFADE ÖRNEKLERİ

1. İki sayısal değişkenin değerlerini karşılaştıran örnek.

DATA: gv_degisken1 TYPE i VALUE 1,
gv_degisken2 TYPE i VALUE 2.
IF gv_degisken1 <> gv_degisken2.
WRITE ‘Birinci değişken ikinci değişkene eşit değil!’.
ENDIF.
gv_degisken1 = 2.
IF gv_degisken1 = gv_degisken2.
WRITE / ‘Birinci değişken ikinci değişkene eşit.’.
ENDIF.
gv_degisken1 = 3.
IF gv_degisken1 GT gv_degisken2.
WRITE / ‘Birinci değişken ikinci değişkenden büyük.’.
ENDIF.

2. İki d (tarih) tipine sahip değişkenin değerlerini karşılaştıran örnek.

DATA: gv_degisken1 TYPE d,
gv_degisken2 TYPE d.
gv_degisken1 = sy-datum.
gv_degisken2 = gv_degisken1 – 1.
IF gv_degisken1 <> gv_degisken2.
WRITE ‘Birinci değişken ikinci değişkene eşit değil!’.
ENDIF.
gv_degisken2 = sy-datum.
IF gv_degisken1 = gv_degisken2.
WRITE / ‘Birinci değişken ikinci değişkene eşit.’.
ENDIF.
gv_degisken1 = gv_degisken1 + 1.
IF gv_degisken1 GT gv_degisken2.
WRITE / ‘Birinci değişken ikinci değişkenden büyük.’.
ENDIF.

3. Karakter-benzeri veri tipleri için karşılaştırma operatörü kullanımını gösteren örnek.

DATA: gv_degisken1 TYPE c LENGTH 50,
gv_degisken2 TYPE c LENGTH 50.
gv_degisken1 = ‘bmik’.
gv_degisken2 = ‘Değerler bu metin içerisinde kontrol edilecek.’.
IF gv_degisken1 CO gv_degisken2.
WRITE: ‘CO: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: ‘CO: Koşul yanlış.’, 30 sy-fdpos.
ENDIF.
IF gv_degisken1 CN gv_degisken2.
WRITE: / ‘CN: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: / ‘CN: Koşul yanlış.’, 30 sy-fdpos.
ENDIF.
SKIP.
gv_degisken1 = ‘Değerler bu metin içerisinde kontrol edilecek.’.
gv_degisken2 = ‘bmik’.
IF gv_degisken1 CA gv_degisken2.
WRITE: / ‘CA: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: / ‘CA: Koşul yanlış.’, 30 sy-fdpos.
ENDIF.
IF gv_degisken1 NA gv_degisken2.
WRITE: / ‘NA: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: / ‘NA: Koşul yanlış.’, 30 sy-fdpos.
ENDIF.
SKIP.
gv_degisken1 = ‘Değerler bu metin içerisinde kontrol edilecek.’.
gv_degisken2 = ‘tONT’.
IF gv_degisken1 CS gv_degisken2.
WRITE: / ‘CS: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: / ‘CS: Koşul yanlış.’, 30 sy-fdpos.
ENDIF.
IF gv_degisken1 NS gv_degisken2.
WRITE: / ‘NS: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: / ‘NS: Koşul yanlış.’, 30 sy-fdpos.
ENDIF.
gv_degisken1 = ‘Değerler bu metin içerisinde kontrol edilecek.’.
gv_degisken2 = ‘ONTR’.
IF gv_degisken1 CS gv_degisken2.
WRITE: / ‘CS: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: / ‘CS: Koşul yanlış.’, 30 sy-fdpos..
ENDIF.
IF gv_degisken1 NS gv_degisken2.
WRITE: / ‘NS: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: / ‘NS: Koşul yanlış.’, 30 sy-fdpos.
ENDIF.
SKIP.
gv_degisken2 = ‘*EK.’.
IF gv_degisken1 CP gv_degisken2.
WRITE: / ‘CP: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: / ‘CP: Koşul yanlış.’, 30 sy-fdpos.
ENDIF.
IF gv_degisken1 NP gv_degisken2.
WRITE: / ‘NP: Koşul doğru.’, ‘Pozisyon’, 30 sy-fdpos.
ELSE.
WRITE: / ‘NP: Koşul yanlış.’, 30 sy-fdpos.
ENDIF.

4. BETWEEN mantıksal ifadesi ile sayısal değişkenin belirtilen aralıkta olup olmadığını kontrol eden örnek.

DATA: gv_degisken1 TYPE i VALUE 250,
gv_degisken2 TYPE i VALUE 100,
gv_degisken3 TYPE i VALUE 999.
IF gv_degisken1 BETWEEN gv_degisken2 AND gv_degisken3.
WRITE ‘Değişken aralık içerisinde.’.
ENDIF.
gv_degisken1 = 5000.
IF gv_degisken1 BETWEEN gv_degisken2 AND gv_degisken3.
WRITE / ‘Değişken aralık içerisinde.’.
ELSE.
WRITE / ‘Değişken aralık içerisinde değil!’.
ENDIF.

5. Alan sembolüne değer atanıp atanmadığını IS ASSIGNED mantıksal ifadesi ile kontrol eden örnek.

DATA gv_degisken1 TYPE c LENGTH 40.
FIELD-SYMBOLS <fs1> TYPE c.
gv_degisken1 = ‘Alan sembolüne atanan metin.’.
IF <fs1> IS NOT ASSIGNED.
WRITE ‘<fs1> alan sembolüne değer ataması yapılıyor.’.
ASSIGN gv_degisken1 TO <fs1>.
WRITE / <fs1>.
ENDIF.

6. Referans değişkenin geçerli bir referans içerip içermediğini IS BOUND mantıksal ifadesi ile kontrol eden örnek.

DATA: gs_dref  TYPE REF TO data,
gt_spfli TYPE TABLE OF spfli.
IF gs_dref IS NOT BOUND.
WRITE ‘Referans geçerli bir değişene sahip değil!’.
ENDIF.
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_spfli.
READ TABLE gt_spfli REFERENCE INTO gs_dref INDEX 1.
IF gs_dref IS BOUND.
WRITE / ‘Referans geçerli bir değişene sahip.’.
ENDIF.

7. Farklı veri tiplerine sahip değişkenlerin başlangıç değerine sahip olup olmadığını INITIAL mantıksal ifadesi ile kontrol eden örnek.

DATA: gv_tamsayi TYPE i,
gv_metin   TYPE c LENGTH 20,
gv_tarih   TYPE d,
gv_saat    TYPE t.
IF gv_tamsayi IS INITIAL.
WRITE ‘gv_tamsayı veri tipi başlangıç değerine sahip’.
ENDIF.
IF gv_metin IS INITIAL.
WRITE / ‘gv_metin veri tipi başlangıç değerine sahip’.
ENDIF.
IF gv_tarih IS INITIAL.
WRITE / ‘gv_tarih veri tipi başlangıç değerine sahip’.
ENDIF.
IF gv_saat IS INITIAL.
WRITE / ‘gv_saat veri tipi başlangıç değerine sahip’.
ENDIF.
SKIP.
gv_tamsayi = 1000.
gv_metin   = ‘Örnek metin’.
gv_tarih   = sy-datum.
gv_saat    = sy-uzeit.
IF gv_tamsayi IS NOT INITIAL.
WRITE: / ‘gv_tamsayı değeri.’, gv_tamsayi.
ENDIF.
IF gv_metin IS NOT INITIAL.
WRITE: / ‘gv_metin değeri.’, gv_metin.
ENDIF.
IF gv_tarih IS NOT INITIAL.
WRITE: / ‘gv_tarih değeri.’, gv_tarih.
ENDIF.
IF gv_saat IS NOT INITIAL.
WRITE: / ‘gv_saat değeri.’, gv_saat.
ENDIF.

8. Sınıfa bağlı yöntemi önce parametre kullanmayarak, daha sonra parametre kullanarak çalıştıran ve parametre kontrolünü IS SUPPLIED mantıksal ifadesi ile kontrol eden örnek.

CLASS cls1 DEFINITION.
PUBLIC SECTION.
CLASS-METHODS veri_bul IMPORTING aranan_metin TYPE c OPTIONAL.
ENDCLASS.
DATA cls TYPE REF TO cls1.
CLASS cls1 IMPLEMENTATION.
METHOD veri_bul.
IF aranan_metin IS SUPPLIED.
WRITE / ‘Yöntem aranan metin değeri belirtilerek çağrıldı.’.
ELSE.
WRITE / ‘Yöntem aranan metin değeri belirtilmeden çağrıldı!’.
ENDIF.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
CREATE OBJECT cls.
CALL METHOD cls->veri_bul.
CALL METHOD cls->veri_bul(
EXPORTING
aranan_metin = ‘metin’ ).

9. gv_carrid değişkenine atanan ‘AF’ isimli uçuşu tanımlayıcısının, seçim tablosuna girilen değer(ler)/aralık(lar) içerisinde kontrol örnek.

TABLES spfli.
DATA gv_carrid TYPE spfli-carrid value ‘AF’.
SELECT-OPTIONS: so_carri FOR spfli-carrid OBLIGATORY.
IF gv_carrid IN so_carri.
WRITE: / ‘Değişken değeri seçim tablosunda bulundu.’, gv_carrid.
ELSE.
WRITE: / ‘Değişken değeri seçim tablosunda bulunamadı!’, gv_carrid.
ENDIF.

KONTROL YAPILARI

KONTROL YAPILARI

İşlem bloklarında koşullara göre program akışını kontrol etmeye yarayan ifadelerdir. Kontrol yapıları 3 gruptan oluşur.

· Sırasal

· Bölümlere ayrılan (dallanan)

· Döngü

1. Sırasal

WAIT ifadesi kullanılır. Koşulsuz olarak çalışır. Belli bir süre boyunca programın çalışması duraklatılır.

2. Bölümlere Ayrılan (Dallanan)

Koşula göre bir veya daha fazla ifade bloğu tanımlanabilir. IF ve CASE ifadeleri kullanılır.

3. Döngü

İfade blokları DO-ENDDO ve WHILE-ENDWHILE ifadeleri arasında bir veya daha fazla çalışır.

WAIT

Programın çalışmasını saniye cinsinden belirtilen süre kadar durdurur. Program süre bitiminde kaldığı yerden devam eder. Kullanımı aşağıdaki şekildedir.

WAIT UP TO sure SECONDS.

IF

Mantıksal koşullara bağlı bir veya daha fazla işlem bloğu içerir. İlk mantıksal ifadeden başlayarak aşağıya doğru koşullar kontrol edilir ve koşulu doğru olan ifade bloğu çalıştırılır. IF ile ilk koşul yazılır. ENDIF ile IF bloğu kapatılır. IF ve ENDIF arasında ELSEIF ve ELSE koşulları kullanılabilir. Kullanımı aşağıdaki şekildedir.

IF mantiksal_ifade1.

[islem_blogu1]

[ELSEIF mantiksal_ifade2.

[islem_blogu2]]

[ELSE.

[islem_blogun]]

ENDIF.

CASE-ENDCASE

Karşılaştırma yapılacak değere göre birden fazla işlem bloğu içerir. Değere uyan ilk işlem bloğu çalışır. CASE ile karşılaştırma yapılacak değer belirtilir. WHEN ile değere karşılık çalışması istenen işlem blokları tanımlanır. Kullanımı aşağıdaki şekildedir.

CASE karsilastirilan_deger.
[WHEN deger1 [OR deger2 [OR deger3 […]]].
[ilsem_blogu1]]

[WHEN OTHERS.
[ilsem_blogun]]
ENDCASE.

DO-ENDDO

Koşulsuz döngü için kullanılır. DO ve ENDDO arasında koşulsuz olarak çalışması istenen işlem bloğu yer alır. Döngü sayısı belirtilebilir. Belirtilmeden kullanılır ise döngüden çıkmak veya yönetmek için EXIT, CONTINUE veya CHECK ifadeleri kullanılır. Kullanımı aşağıdaki şekildedir.

DO [n TIMES].
[ilsem_blogu]
ENDDO.

WHILE-ENDWHILE

Koşullu döngü için kullanılır. WHILE ve ENDWHILE arasında koşullu olarak çalışması istenen işlem bloğu yer alır. Mantıksal ifade doğru olduğu sürece işlem bloğu çalışır. Döngüden çıkmak için işlem bloğunda EXIT ifadesi de kullanılabilir. sy-index sistem değişkeni gerçekleşen döngü sayısını tutar. Kullanımı aşağıdaki şekildedir.

WHILE mantiksal_ifade.

[ilsem_blogu]

ENDWHILE.

KONTROL YAPILARI ÖRNEKLER

1. Önce geçerli saati yazan daha sonra 7 saniye programın çalışmasını bekleterek tekrar saati yazan örnek.

WRITE: ‘Saat’, sy-uzeit.
WAIT UP TO 7 SECONDS.
WRITE: / ‘Saat’, sy-uzeit.

2. Döngü içerisinde sy-index değişkenini önce 1 değeri, daha sonra 2 değeri ile karşılaştıran IF –ENDIF örneği.

DO 3 TIMES.
IF sy-index = 1.
WRITE: / ‘İlk işlem bloğu’, 30 sy-index.
ELSEIF sy-index = 2.
WRITE: / ‘İkinci işlem bloğu’, 30 sy-index.
ELSE.
WRITE: / ‘Koşullara uymayan işlem bloğu’, 30 sy-index.
ENDIF.
ENDDO.

3. Döngü içerisinde farklı koşullara sahip işlem blokları kullanımını gösteren CASE-ENDCASE örneği.

DATA gv_kosul TYPE c LENGTH 25.
DO 3 TIMES.
WRITE sy-index TO gv_kosul.
CONDENSE gv_kosul NO-GAPS.
CONCATENATE ‘Kosul’ gv_kosul INTO gv_kosul.
CASE gv_kosul.
WHEN ‘Kosul1’.
WRITE: / ‘İşlem bloğu 1.’, 25 gv_kosul.
WHEN ‘Kosul2’.
WRITE: / ‘İşlem bloğu 2.’, 25 gv_kosul.
WHEN OTHERS.
WRITE: / ‘İşlem bloğu OTHERS.’, 25 gv_kosul.
ENDCASE.
ENDDO.

4. DO-ENDDO ile EXIT, CHECK ve CONTINUE ifade kullanımını gösteren örnek.

DO 4 TIMES.
WRITE: / ‘EXIT öncesi’, 20 sy-index.
IF sy-index > 2.
EXIT.
ELSE.
WRITE: / ‘EXIT sonrası’, 20 sy-index.
ENDIF.
ENDDO.
SKIP.
DO 4 TIMES.
WRITE: / ‘CHECK öncesi’, 20 sy-index.
CHECK sy-index < 3.
WRITE: / ‘CHECK sonrası’, 20 sy-index.
ENDDO.
SKIP.
DO 4 TIMES.
WRITE: / ‘CONTINUE öncesi’, 20 sy-index.
IF sy-index < 3.
WRITE: / ‘CONTINUE sonrası’, 20 sy-index.
ELSE.
CONTINUE.
ENDIF.
ENDDO.

5. WHILE-ENDWHILE kullanımını gösteren örnek.

DATA: gv_index TYPE i.
WHILE gv_index < 3.
WRITE: / ‘WHILE ifadesi içerisinde index:’, 32 gv_index.
gv_index = gv_index + 1.
ENDWHILE.
WRITE: / ‘WHILE ifadesinden sonra index :’, 32 gv_index.

Değişkenler

DEĞİŞKENLER (VARIABLES)

Değişkenler program çalıştığı sürece hafızada değiştirilebilir verilerin tutulmasını sağlar. Değer ataması değişken tanımlanırken veya program akışı esnasında yapılabilir.

Değişken tanımlamak için DATA ifadesi kullanılır. Tanımlanırken VALUE ifadesi ile değer atanabilir. Program içerisinde dinamik olarak değer atamak için eşittir “=” kullanılır.

Değişkenin geçerliliği tanımlandığı blok ile sınırlıdır. Tanımlandığı blok dışına çıkıp tekrar girilirse değişkenin değeri sıfırlanır.

STATICS: Prosedürlerde durağan geçerliliği olan nesneler oluşturmak için kullanılırlar. Data ifadesi ile tanımlanan değişkenlerin ömürleri tanımlandıkları bloğa bağlıdır. STATICS ifadesi ile değişkene atanan değer tanımlanan bloğa bağlı kalmadan korunabilir. Program bloğu tekrar çalıştırıldığında bloktan çıkmadan önce atanan değer bulunur.

CLASS-DATA: Sınıflarda durağan geçerliliği olan nesneler oluşturmak için kullanılırlar.

PARAMETERS: Seçim ekranındaki bir giriş alanına tayin edilir.

SELECT-OPTIONS: Seçim ekranındaki bir giriş ekranına tayin edilen seçim (internal) tablosudur.

RANGES: SELECT-OPTIONS yapısında olan bir giriş ekranına tayin edilmeyen seçim (internal) tablosudur.

Örnek: Veri tipi tanımlamayı, değişken tanımlamayı ve değişkene değer atanmasını gösteren örnek.

TYPES ty_isim TYPE c LENGTH 20.
DATA: gv_isim    TYPE ty_isim VALUE ‘ibrahim’,
gv_integer TYPE i VALUE 3,
gv_string  TYPE string,
gv_packed  TYPE p DECIMALS 2,
gv_n       TYPE n.
gv_string = gv_integer / 2.
gv_packed = ‘18.48’.
gv_n      = ‘3’.
WRITE:/ ‘isim    :’, gv_isim,
/ ‘integer :’, gv_integer,
/ ‘string  :’, gv_string,
/ ‘packed  :’, gv_packed,
/ ‘n       :’, gv_n.

Örnek: LIKE ifadesi ile başka bir değişkenin tipinde değişken tanımlamayı gösteren örnek.

TYPES ty_isim    TYPE c length 20.
DATA: gv_isim    TYPE ty_isim,
gv_soyisim LIKE gv_isim.
gv_isim    = ‘ibrahim’.
gv_soyisim = ‘UYANIK’.
WRITE: gv_isim, gv_soyisim.

Yapısal Değişkenler (Structured Variables)

Birden fazla değişkeni tek bir yapı altında toplayarak kullanmak mümkündür. Değişkenler tanımlanan yapının bileşenleri olur. Değişkenler farklı veri tiplerinde olabilir. Yapı içerisindeki değişkenlere yapı isminden sonra tire (-) işareti ekleyerek erişilir.

Yapılar birkaç şekilde tanımlanabilirler.

· Daha önce tanımlanan değişkenler LIKE kelimesi kullanılarak tip olarak gösterilebilir. Daha önce tanımlanan tipler veya ön tanımlı tipler TYPE anahtar kelimesi kullanılarak tanımlanabilir. Bu tür kullanımda DATA anahtar kelimesinden sonra BEGIN OF ve END OF anahtar kelimeleri kullanılarak yapısal değişken oluşturulur.

· LIKE kullanılarak daha önce tanımlanan bir yapısal değişkenden veya TYPE anahtar kelimesi kullanılarak daha önce tanımlanan yapısal bir veri tipinden oluşturulabilirler.

Örnek: LIKE ve TYPE anahtar kelimeleri kullanılarak oluşturulan yapısal değişken.

DATA : gv_isim(20) TYPE c,
gv_id       TYPE n,
gv_kilo     TYPE p DECIMALS 2,
gv_boy      TYPE i.
DATA : BEGIN OF ls_aday,
isim      LIKE gv_isim,
id        LIKE gv_id,
kilo      LIKE gv_kilo,
boy       LIKE gv_boy,
adres(30) TYPE c,
tarih     TYPE sy-datum,
END OF ls_aday.
ls_aday-isim  = ‘ibrahim’.
ls_aday-id    = ‘1’.
ls_aday-kilo  = ‘89.20’.
ls_aday-boy   = 193.
ls_aday-adres = ‘Abap sokak’.
ls_aday-tarih = sy-datum.
WRITE: / ls_aday-isim, ls_aday-id, ls_aday-kilo, ls_aday-boy, ls_aday-adres, ls_aday-tarih.

Örnek: LIKE ve TYPE anahtar kelimesi kullanılarak yapısal veri tipi ve yapısal veri değişkeni kullanılarak oluşturulan yapısal değişken.

TYPES: ty_isim(20) TYPE c,
ty_id       TYPE n,
ty_kilo     TYPE p DECIMALS 2,
ty_boy      TYPE i.
TYPES: BEGIN OF ty_aday,
isim      TYPE ty_isim,
id        TYPE ty_id,
kilo      TYPE ty_kilo,
boy       TYPE ty_boy,
adres(30) TYPE c,
tarih     TYPE sy-datum,
END OF ty_aday.
DATA: ls_aday TYPE ty_aday.
DATA: ls_yeni_aday LIKE ls_aday.
ls_aday-isim  = ‘ibrahim’.
ls_aday-id    = ‘1’.
ls_aday-kilo  = ‘89.20’.
ls_aday-boy   = 193.
ls_aday-adres = ‘Abap sokak’.
ls_aday-tarih = sy-datum.
WRITE: / ls_aday-isim, ls_aday-id, ls_aday-kilo, ls_aday-boy, ls_aday-adres, ls_aday-tarih.
ls_yeni_aday-isim  = ‘Mehmet’.
ls_yeni_aday-id    = ‘2’.
ls_yeni_aday-kilo  = ’74’.
ls_yeni_aday-boy   = 176.
ls_yeni_aday-adres = ‘Sap sokak’.
ls_yeni_aday-tarih = sy-datum.
WRITE: / ls_yeni_aday-isim, ls_yeni_aday-id, ls_yeni_aday-kilo, ls_yeni_aday-boy, ls_yeni_aday-adres, ls_yeni_aday-tarih.

CLEAR

Veri nesnelerinin değerini başlangıç değerine getirir. Kullanımı aşağıdaki gibidir.

CLEAR <veri_nesnesi>.

Farklı veri nesneleri için aşağıdaki şekilde çalışır.

· Basit ABAP tiplerine sahip veri nesneleri: Başlangıç değerine döndürür.

· Referans tiplerine sahip veri nesneleri: Referans değişkenini başlangıç değerine döndürür. Bir referansa atanmamış haline.

· Structure tipleri: Structure içerisindeki bütün alanların değerlerini başlangıç değerlerine getirir.

· İnternal tablolar: İnternal tablonun bütün kayıtlarını siler.

Örnek: Basit veri tipleri için CLEAR ifadesi kullanımı.

DATA: gv_isim  TYPE c LENGTH 20 VALUE ‘ibrahim’,
gv_id    TYPE i VALUE ‘1’,
gv_sonuc TYPE p DECIMALS 2 VALUE ‘89.20’,
gv_sira  TYPE i VALUE 193.
WRITE ‘Değerler atandıktan sonra’.
WRITE:/ ‘isim’,  12 gv_isim  LEFT-JUSTIFIED,
/ ‘id’,    12 gv_id    LEFT-JUSTIFIED,
/ ‘sonuç’, 12 gv_sonuc LEFT-JUSTIFIED,
/ ‘sıra’,  12 gv_sira  LEFT-JUSTIFIED.
CLEAR: gv_isim, gv_id, gv_sonuc, gv_sira.
SKIP.
WRITE / ‘Değerler temizlendikten sonra’.
WRITE:/ ‘isim’,  12 gv_isim  LEFT-JUSTIFIED,
/ ‘id’,    12 gv_id    LEFT-JUSTIFIED,
/ ‘sonuç’, 12 gv_sonuc LEFT-JUSTIFIED,
/ ‘sıra’,  12 gv_sira  LEFT-JUSTIFIED.

DEĞER ATAMALARI

MOVE

Kaynak veri nesnesindeki değeri hedef veri nesnesine taşır. Kaynak veri nesnesi ve hedef veri nesnesi tipleri birbirine uygun veya hedef veri nesnesi içeriğinin kaynak veri nesnesi içeriğine çevrilebilir olması gerekir. Kullanımı aşağıdaki şekildedir.

MOVE {kaynak_veri_nesnesi TO hedef_veri_nesnesi}

| {kaynak_veri_nesnesi TO hedef_veri_nesnesi}.

Ekler:

EXACT: Birbirinden uyumsuz iki veri nesnesi arasında atama yapılacaksa atama yapılacak değerleri kontrol eder. Aşağıdaki kontroller yapılır.

· Atanacak değerin, kaynak veri nesnesinin veri tipi için geçerli olup olmadığı

· Kaynak veri nesnesine atama yapılması değer kaybına neden olup olmadığı

· Değerin, hedef veri nesnesine ataması sırasında yapılan çevrim sonrası geçerli olup olmadığı

MOVE-CORRESPONDING

Kaynak structure’ daki alanları hedef structure’ daki alanlara taşır. Sadece kaynak ve hedef yapılarında aynı isme sahip alanlar transfer edilir.

MOVE-CORRESPONDING [EXACT] structure1 TO structure2.

Ekler:

EXACT: MOVE komutundaki kullanım ile aynıdır.

Örnek: MOVE ve MOVE-CORRESPONDING anahtar kelimeleri kullanarak değer ataması yapmayı gösteren örnek..

DATA : gv1 TYPE p DECIMALS 2,
gv2 TYPE p DECIMALS 2.
TYPES: BEGIN OF gy_move,
v1 TYPE p DECIMALS 2,
v2 TYPE p DECIMALS 2,
v3 type p decimals 2,
END OF gy_move.
DATA : gs_move1 TYPE gy_move,
gs_move2 TYPE gy_move.
gv1 = ‘5.89’.
MOVE gv1 TO gv2.
gv2 = gv2 + 1.
gs_move1-v1 = gv1.
gs_move1-v2 = gv2.
MOVE-CORRESPONDING gs_move1 TO gs_move2.
WRITE :/ gv1,
/ gv2.
SKIP.
WRITE :/ gs_move1-v1,
/ gs_move1-v2,
/ gs_move1-v3.
SKIP.
WRITE :/ gs_move2-v1,
/ gs_move2-v2,
/ gs_move2-v3.

Değer Atamalarında Çevrimleri

Farklı veri tipine sahip veri nesneleri birbirine atanırken değer üzerinde çevrimler yapılır.

Örnek: Farklı uzunluktaki veri tipine sahip değişkenlere değer ataması yapılması sırasında oluşan çevrimleri gösteren örnek.

DATA: gv_char TYPE c LENGTH 10 VALUE ‘1234567890’,
gv_n    TYPE n LENGTH 20 VALUE ‘09876543210987654321’.
WRITE: / ‘CHAR ilk değer :’, 25 gv_char,
/ ‘N ilk değer    :’, 25 gv_n.
SKIP.
MOVE gv_n TO gv_char.
WRITE: / ‘CHAR yeni değer:’, 25 gv_char.
MOVE gv_char TO gv_n.
WRITE: / ‘N yeni değer   :’, 25 gv_n.

ALT DEĞER

Veri nesnesinin belirli bir pozisyondaki (offset) kısmına ulaşılabilir. Alt bölgeye ulaşmak için pozisyon ve uzunluğu belirtmek yeterlidir.

veri_nesnesi[+pozisyon][(uzunluk)]

DATA: gv_metin  TYPE c LENGTH 30,
gv_metin1 TYPE c LENGTH 30,
gv_metin2 TYPE c LENGTH 30.
gv_metin = ‘0123456789 – ABCDEFGHIJ’.
gv_metin1 = gv_metin+0(10).
gv_metin2 = gv_metin+13(10).
WRITE gv_metin.
WRITE / gv_metin1.
WRITE / gv_metin2.

ALAN SEMBOLLERİ (FIELD SYMBOLS)

Alan sembolleri fiziksel olarak hafızada yer kaplamayan, kendisine atanan nesneyi içeriğine erişimi saylayan veri nesnelerdir. ASSIGN anahtar kelimesi kullanılarak bir veri nesnesine atanırlar. Kullanmak için önce atama yapılması gerekir yoksa hata alınır. Tanımlama esnasında veri tipi tanımlanabilir, veri tipi tanımlanmaz ise atandığı alanın tipini alır.

FIELD-SYMBOLS <fs> [tip_tanımı].

Ekler:

Tip_tanimi: Tip tanımı için genel veri tipleri veya tanımlanmış veri tipi kullanılabilir.

Genel veri tipi için kullanım aşağıdaki şekildedir.

TYPE genel_veri_tipi

Tanımlanmış veri tipi için kullanım aşağıdaki şekildedir. TYPE ile tip, LIKE ile veri nesnesinin tipi kullanılabilir.

{ TYPE {[LINE OF] tanimli_tip}

| {REF TO tip} }

| { LIKE {[LINE OF] veri_nesnesi}

| {REF TO veri_nesnesi} }

Örnek: Genel veri tipi tanımı kullanan bir field symbols örneği.

DATA          gv1   TYPE c LENGTH 10.
FIELD-SYMBOLS <fs1> TYPE ANY.
gv1 = ‘degişken 1’.
ASSIGN gv1 TO <fs1>.
WRITE <fs1>.

Örnek: Bir internal tabloya atanan ve atamadan sonra içerisinden kayıt okuması yapılan field symbols örneği.

TYPES: BEGIN OF gy,
v1 TYPE c LENGTH 10,
v2 TYPE c LENGTH 10,
END OF gy.
DATA : gt TYPE STANDARD TABLE OF gy,
gs TYPE gy,
gv_key(4) TYPE c VALUE ‘v1’.
FIELD-SYMBOLS: <fs> TYPE ANY TABLE.
gs-v1 = ‘ibrahim’.
gs-v2 = ‘uyanik’.
APPEND gs TO gt.
gs-v1 = ‘mehmet’.
gs-v2 = ‘uyanik’.
APPEND gs TO gt.
ASSIGN gt TO <fs>.
CLEAR gs.
READ TABLE <fs> WITH KEY (gv_key) = ‘mehmet’ INTO gs.
WRITE :/ ‘isim   :’, 10 gs-v1,
/ ‘soyisim:’, 10 gs-v2.

DÖNGÜLER

Döngüler için DO, WHILE, LOOP ENDLOOP ifadeleri kullanılır.

DO – ENDDO

Koşulsuz döngü için kullanılır. Kod bloğunu belirtilen sayı kadar çalışır. Çalıştırma sayısı belirtilmez ise döngü sonsuza kadar çalışır, belirtilen sayıdan önce çıkmak için EXIT ifadesi kullanılabilir.

Kullanımı aşağıdaki şekilde şekildedir.

DO [n TIMES].
[kod_blogu]
ENDDO.

Örnek: Kod bloğunu 5 defa çalıştıran örnek.

DO 5 TIMES.
WRITE :/ ‘index’, sy-index.
ENDDO.

Örnek: Döngü sayısı 3 den büyük olduğu zaman döngüden çıkan örnek.

DO.
IF sy-index > 3.
EXIT.
ENDIF.
WRITE :/ ‘index’, sy-index.
ENDDO.

Koşullu döngü için kullanılır. Kod bloğunu mantıksal ifade doğru olduğu sürece çalıştırır. Kod bloğundan çıkmak için EXIT ifadesi de kullanılabilir.

WHILE mantıksal_ifade.
  [kod_blogu]
ENDWHILE.

Örnek: Kod bloğunu sy-index değişkeni 3 ten küçük olduğu sürece çalıştıran örnek.

WHILE sy-index < 3.
WRITE :/ ‘index’, sy-index.
ENDWHILE.

DÖNGÜ İÇERİSİNDE KULLANILAN ANAHTAR KELİMELER

CONTINUE

Koşulsuz olarak geçerli döngü sonlandırılır, CONTINUE ifadesinden sonraki kod bloğu çalıştırılmaz ve bir sonraki döngü başlar.

Örnek: 5 defa çalışan döngü örneği sy-index değeri 2’ ye ulaştığı zaman, CONTINUE ifadesinden sonraki kodlar çalıştırılmadan bir sonraki döngüye geçilir.

DO 5 TIMES.
IF sy-index = 2.
CONTINUE.
ENDIF.
WRITE :/ ‘index’, sy-index.
ENDDO.

CHECK

Koşula bağlı olarak geçerli döngü sonlandırılır, bir sonraki döngüye başlar. Eğer koşul yanlış ise CHECK ifadesinden sonraki kod bloğu işlenmeden kontrol bir sonraki döngüye geçer.

Örnek: sy-index değişkeni 5 değerinden küçük olduğu sürece çalışan örnek.

DO 5 TIMES.
CHECK sy-index < 3.
WRITE :/ ‘index’, sy-index.
ENDDO.

EXIT

Koşulsuz olarak geçerli döngüyü sonlandırılır. Program akışı ENDLOOP ifadesinden sonraki satırdan devam eder.

DO 5 TIMES.
IF sy-index = 3.
EXIT.
ENDIF.
WRITE :/ ‘index’, sy-index.
ENDDO.

ABAP Sistem Alanları

ABAP sistem alanları programın çalışması sırasında otomatik olarak doldurulur. Sistem ve yapılan işlemlerle ilgili durum bilgilerini barındırır. sy-repid dışındaki alanlar SYST structure’ ında tanımlıdır. Program çalıştığında “sy” isimli structure otomatik olarak programa dâhil edilir.

Alan Tipi Tanım
sy-abcde c(26) Latin alfabesini içerir. Pozisyon (offset) ve uzunluk ile istenilen harfe erişilebilir.
sy-batch c(1) Program arka planda çalışıyor ise “X” değerini alır.
sy-binpt c(1) Batch input oturumu sırasında ve CALL TRANSACTION USING kullanılarak çalıştırılan programlarda “X” değerini alır.
sy-calld c(1) Program ilk çağrılma esnasında boş karakter içerir.
sy-callr c(8) Liste çıktısı alırken, çıktı bağlangıç değerini içerir.
sy-colno i Liste oluşturma sırasındaki geçerli pozisyon. Değer artışı 1’ den başlar.
sy-cpage i Görüntülenen ekrandaki sayfa numarası. 1’ den başlar.
sy-cprog c(40) Harici olarak çağrılan prosedürlerde, çağıran programın ismi yoksa programın ismi.
sy-cucol i Ekrandaki yatay imleç pozisyonu. Değer artışı 2’ den başlar.
sy-curow i Ekrandaki dikey imleç pozisyonu. Değer artışı 1’ den başlar.
sy-datar c(1) PAI (Proses after input) Ekrandaki giriş alanlarından birisi değişti ise veya veri transfer edildi ise “X” değerini alır.
sy-datlo d Kullanıcının yerel tarihi.
sy-datum d ABAP sisteminin yerel tarihi.
sy-dayst c(1) Yaz mevsiminde “X” değerini alır.
sy-dbcnt i SQL ifadelerinde tabloda işlenen kayıt sayısı atanır.
sy-dbnam c(20) Çalıştırılabilir programlarda bağlanmış mantıksal veritabanı (logical database).
sy-dbsys c(10) Merkezi veritabanı sistemi.
sy-dyngr c(4) Ekran grubu.
sy-dynnr c(4) Ekran numarası.
sy-fdayw b Fabrika takvimi hafta içi günleri.
sy-fdpos i Byte tipi ve karakter tipi veri nesnelerinin aratma işlemi sonrası bulunduğu pozisyon.
sy-host c(32) Uygulama sunucusunun bilgisayar ismi.
sy-index i Döngü indeksi.
sy-langu c(1) Tek karakterle ifade edilen dil anahtarı.
sy-ldbpg c(40) Çalıştırılabilir programlarda, mantıksal veritabanının (logical database) veritabanı programı.
sy-lilli i Olayı tetiklenen liste satırı. Değer artışı 1’ den başlar ve sayfa başlığını dahil eder.
sy-linct i Listenin sayfa uzunluğu.
sy-linno i Listenin satırı.
sy-linsz i Listenin satır genişliği.
sy-lisel c(255) Liste olayı tetiklendiğinde imlecin konumlandığı noktanın içeriği.
sy-listi i Olayı tetiklenen listenin düzeyi.
sy-loopc i Table control içerisinde gösterilen satır sayısı.
sy-lsind i Oluşturulan liste düzeyi.
sy-macol i Liste yazdırırken, sol kenar sütun sayısı.
sy-mandt c(3) Kullanıcının oturum açtığı üst birim.
sy-marow i Liste yazdırırken, üst sayfa boşluğunun satır sayısı.
sy-modno i Harici oturum sayısı.
sy-msgid c(20) MESSAGE ifadesinden sonra gelen mesaj sınıfı.
sy-msgno n(3) MESSAGE ifadesinden sonra gelen mesaj numarası.
sy-msgty c(1) MESSAGE ifadesinde kullanılan mesaj tipi.
sy-msgv1 … sy-msgv4 c(50) MESSAGE ifadesinden sonra gelen mesaj içeriği.
sy-opsys c(10) Çalışılan uygulama sunucusunun işletim sistemi.
sy-pagno i Liste oluşturmadaki geçerli sayfa.
sy-pfkey c(20) Ekranda kullanılan GUI status.
sy-prdsn c(6) Liste çıktısı alırken, çıktı kuyruğu (spool) dosyasının ismi.
sy-repid c(40) ABAP programının ismi.
sy-saprl c(4) ABAP sisteminin yayınlanma durumu.
sy-scols i Ekrandaki sütun sayısı.
sy-slset c(14) Seçim ekranını doldurmak için kullanılan variant.
sy-spono n(10) Liste yazdırırken, spool numarası ismini içerir.
sy-srows i Geçerli ekrandaki satır sayısı.
sy-staco i Olay tarafından tetiklenmiş sistemde görüntülenen ilk sütun sayısı.
sy-staro i Listenin üzerinde görüntülenen satır sayısı..
sy-stepl i Table control’ daki geçerli satır numarası.
sy-subrc i Çalıştırılan ABAP ifadesinin dönüş değeri. Genel olarak “0” işlem başarılı demektir.
sy-sysid c(8) ABAP sisteminin ismi.
sy-tabix i Tablo indeksi. Standart ve sıralı internal tablonun en son erişilen satır numarası. Hash tablolarda 0’ dır.
sy-tcode c(20) Çalışan işlem kodu.
sy-tfill i DESCRIBE TABLE, LOOP AT ve REAT TABLE ifadelerinde, internal tablonun adreslenen satır sayısı ile dolar.
sy-timlo t Kullanıcının yerel zamanı.
sy-title c(70) Başlık çubuğunda görünen metin.
sy-tleng i DESCRIBE TABLE, LOOP AT ve REAT TABLE ifadelerinde, internal tablonun adreslenen kayıt uzunluğu ile dolar.
sy-tvar0 … sy-tvar9 c(20) TOP-OF-PAGE olayında programın metinlerine göre liste ve sütun başlıkları yer imi “&0” den “&9” a kadar değişir.
sy-tzone i Eşgüdümlü Evrensel Zaman’ a (UTC) göre saniye olarak zaman farkı.
sy-ucomm c(70) PAI olayında tetiklenen fonksiyon kodu.
sy-uline c(255) Liste çıktıları için 255 uzunluğunda yatay çizgi satırı.
sy-uname c(12) Sisteme bağlanan kullanıcı kodu.
sy-uzeit t ABAP sisteminin yerel zamanı.
sy-vline c(1) Liste gösterimleri için dikey çizgi (|).
sy-wtitl c(1) REPORT, PROGRAM ve FUNCTION-POOL ifadelerinde eğer NO STANDARD PAGE HEADING kullanıldıysa “N” değeri atanır.
sy-zonlo c(6) Kullanıcının zaman dilimi.

Örnek: Bazı ABAP sistem alanlarını ekrana yazdıran örnek.

WRITE:/ ‘ABAP Sistem Alanları’,
/ ‘Saat  :’, sy-uzeit,
/ ‘Kulla.:’, sy-uname.

Request ve Package

Request

SAP sisteminde yapılan değişikliklerin kaydedilmesini ve bunların başka sistemlere taşınmasını sağlar. Değişiklikler sistemler (Geliştirme/Kalite/Canlı veya uzak SAP sistemleri) arasında taşınabilir. Değişikliklerinin takip edilmesi istenen her nesne için için Request oluşturulur. Oluşturulan her Request’e bir numara verilir. Verilen bu numaraya Request Numarası denir.

ABAP’ la ilgili geliştirmeler için Workbench Request’ leri oluşturulur. Bunun dışında en çok kullanılan Uyarlama (Customizing) Requestleridir. Bu iki Request tipinin dışında kalan Request’ ler genelde Basis (SAP sistem yönetimi) içindir.

Bazı Request Tipleri
Tip Tanım
K Workbench Request (ABAP)
W Customizing Request (IMG)
C Relocation of Objects Without Package Change
O Relocation of Objects with Package Change
E Relocation of Complete Package
T Transport of Copies
S Development/Correction
R Repair
X Unclassified Task
Q Customizing Task
G Piece List for CTS Project
M Client Transport Request
P Piece List for Upgrade
D Piece List for Support Package
F Piece List

Package Nedir?

ABAP’ta oluşturduğunuz her geliştirme nesnesi (program kodu, fonksiyon, ekran, smartform,…) bir package’ a bağlanır veya yerel nesne olarak oluşturulurlar. Yerel nesneler $TMP package’ ına bağlanırlar. $TMP package’ ı dışındaki package’ lar farklı sistemlere taşınabilir.

Geliştirmeler Kalite (QA) ve Canlı (Production) sistemlerine taşınacaksa package oluşturulması veya daha önce oluşturulmuş package’ ın kullanılması gerekir.

Geliştirmeler diğer sistemlere (QA ve Production gibi) taşınmayacaksa package oluşturulmasına gerek yoktur. Geliştirmeler $TMP package’ ına yerel nesne olarak bağlanabilir.

Nesnelerin bağlı olduğu package’ lar daha sonra değiştirilebilirler.

$TMP Package’ ı

Bu package standart bir package’ dır.

SE21 işlem kodu ile $TMP package’ ının özellikleri incelenebilir.

SE21 işlem koduna girdikten sonra “Package” seçili iken metin alanına $TMP yazın ve “Display” butonuna tıklayın.

Short Description alanında parantez içerisinde “never transported!” yani asla taşınmaz ifadesini görebilirsiniz.

Bu package’ a bağlı nesnelerinin transfer edilememe nedeni Transport Layer (taşıma katmanı) alanının boş olmasıdır. Bu package’ a bağlı nesnelerin değişikliği için Request oluşturulmaz.

Package ve Workbench Request Oluşturma

SE21 ve SE80 işlem kodlarından oluşturulabilir. Aşağıda SE21 ile package oluşturma gösterilmiştir.

1. SE21 işlem kodunu çalıştırın.

2. Package Builder programı açılacaktır. Package alanına “ZTESTPACKAGE” yazın.

3. Short Description kısmına Package’ ınızın tanımını girin.

Save butonuna tıklayın.

4. Package için Request oluşturmak gerekecektir.

Save butonuna tıkladıktan sonra Workbench Request seçme ekranı gelir. Create Request butonuna tıklayın.

5. Açılan pencere SAP’nin standart Workbench request yaratma ekranıdır. Yeni Request’in bilgilerini doldurun. Short Description (Request tanımı) alanına Request’in tanımını girin.

Save butonuna tıklayın.

Request seçme ekranına penceresi açılır ama bu sefer Request ve Short Description alanları dolu gelir. Yani yeni oluşturulan Request seçili demektir. Bu bilgilerde yeni oluşturulan Request’in bilgileridir. Request alanının yanında Request numarası ve tipi yazar.

Continue butonuna tıklayın.

6. “ZTESTPACKAGE” Package’ını oluştu. Display butonu ile package’ ı görüntüleyebilirsiniz. Display Object List ikonu ile pakete bağlı bir nesneleri görebilirsiniz. Şu an bağlı nesne olmadığı için için boş görünür.

VARIANT

Variantlar giriş parametrelerini kaydetmeyi sağlarlar. Sık kullanılan giriş parametreleri variant olarak saklanarak program çalıştırılmadan önce alanların dolması sağlanır.

Örnek: Seçim ekranında kullanıcı adı ve tarih alanı olan programda giriş değerlerini saklayan örnek.

PARAMETERS: pa_usnam LIKE sy-uname,
pa_datum LIKE sy-datum.
WRITE : pa_usnam,
/ pa_datum.

Rapor çalıştırıldığında alanlar boş gelecektir. Alanların değerini saklamak için alanları doldurduktan sonra variant olarak sakla ikonuna ( ) tıklayın veya Git menüsünden variant olarak saklayı seçin.

Variant adı ve tanımını girdikten sonra variantı kaydedebilirsiniz.

Variant kaydedildikten sonra yürüt ikonunun yanına variant getir ikonu gelir.

Kaydedilen varaint bir sonraki çalıştırmada buradan seçilebilir.

Dinamik Alanlara Sahip Variant Oluşturma

Bazı alan değerlerinin dinamik olarak belirlenmesi gerekebilir. Örneğin uygulama çalıştığında seçim ekranındaki bir alanın değeri olarak günün tarihi otomatik getirilebilir. Aşağıdaki örnekte tarih alanı içinde bulunan günden 2 gün öncesi olarak dolar.

PARAMETERS: pa_usnam LIKE sy-uname,
pa_datum LIKE sy-datum.
WRITE : pa_usnam,
/ pa_datum.

Rapor çalıştığında kullanıcı adı kısmı doldurulur. Tarih alanı otomatik olarak doldurulacaktır.

Alanlar doldurulduktan sonra variant olarak sakla ikonuna () tıklayın veya Git menüsünden varaint olarak saklayı seçin.

Variant adı ve tanımı doldurulduktan sonra,

Seçim değişkeni alanının arama yardımını seçin.

Değişken türü “D” olarak seçin.

Daha sonra “Değişkenlerin adı” alanı arama yardımını açın.

Açılan listede dinamik belirleme seçenekleri vardır. “Günün tarihi +/- ??? gün” seçeneğini seçin.

Gelen ekranda değer için -2 girin.

Seçim ekranı nesnelerinin son durumu aşağıdaki gibi olur.

Variant kaydedin. Program çalıştırılarak yeni oluşturulan variant seçildiği zaman tarih alanı 2 gün öncesinin tarihini alacaktır.