You are on page 1of 96

ABAP EĞİTİM SETİ

ABAP Temel Bilgiler


Fonksiyon Modülleri
ABAP Kitaplığı
Diyalog Programlama
ABAP Objeleri
Smart Forms

1
İçindekiler
İçindekiler 2
Abap Temel Bilgiler 3
Başlangıç Ekranı 3

Geliştirme Ekranı 4

Genel Bilgiler 5

Söz Dizimi Yapısı - Syntax 6

İşlem Sonucu – Return Statement 7

Veri Tipleri 8

Aritmetik İşlemler 10

Structure Yapısı 12

Kelime İşlemleri 15

Veri Atama – Move & Write

16 Field Symbols 19

Kontrol Mekanizmaları – If & Case 20

Döngü Mekanizmaları 22

Dahili Tablolar – Internal Tables 25

Alt Rutin İşlemleri 34

Fonksiyon Modülleri 37
Temel Bilgiler 37
Fonksiyon Grupları 41

Diyalog 43
Programlama 43
Seçim Ekranları
Listeler 47
Ekranlar 50
Mesajlar 56 58
Abap Kitaplığı
Temel Bilgiler 58
Tablo Oluşturma 64
View Oluşturma 73
Tablo Bakım Ekranı 77
SE16 81

Smart Forms 85
Veri Gönderme İşlemi 93
Smart Styles 95

2
ABAP Temel Bilgiler
Başlangıç Ekranı
SAP’ da gerekli güncellemeleri ve yeni uygulamaları yapmak için ‘SE38’ işlem kodunu kullanarak ‘Abap düzenleyici’
ekranına giriş yaparız. Bu ekranın görüntüsü aşağıda görüldüğü gibidir:

-Resim A1-

Bu ekranı numaralar üzerinden özetleyecek olursak;

1) Programın sözdizimi kontrolü (Sytnax check).


2) Programın aktifleştirilmesi.
3) Programın çalıştırılması.
4) Programın nerelerde-hangi programlar içinde kullanıldığı.
5) Programın içinde kullanılan verilerin bilgilerini görüntüleme.
6) Abap editör yardım düğmesi.
7) Programı silme düğmesi.
8) Programın başka bir kopyasını oluşturma düğmesi.
9) Programı yeniden adlandırma düğmesi.
10) Program içinde hata ayıklama düğmesi.
11) Program içinde varyant ile hata ayıklama düğmesi.
12) Program için hazırda bulunan varyantların görüntülenmesi.

Geliştirme Ekranı

3
Abap düzenleyici’ de geliştirme yaptığımız ekrana göz atacak olduğumuzda temelinde notepad’ a benzeyen bir kelime
işlemci ara yüzüne sahiptir.

-Resim A2-

Notepad’dan farklı olarak karşımıza gelen ekranda gözümüze çarpanlar;

1) Programın düzenleme – görüntüleme modu arasında geçiş tuşu.


2) Etkin olan ve etkin olmayan sürümler(version) arası geçiş tuşu.
3) Programın içinden veya dışından, başka bir nesneye erişim tuşu.
4) Enhancement kodlamaları.
5) Programın sözdizimi kontrolü (Sytnax check).
6) Programın aktifleştirilmesi.
7) Programın çalıştırılması.
8) Nesne listesi görüntüleme tuşu.
9) Dolaşma penceresi.
10) Programın içine kontrol noktası oluşturma tuşu.
11) Programın içine kullanıcıya özel kontrol noktası oluşturma tuşu.
12) Programın içine dışarıdan aktarma yaparak sorgu, fonksiyon, kontrol mekanizması vs.
oluşturmaya yardımcı tuş.
13) Programın kod satırlarının belli bir standarda göre düzenleme tuşu.
14) Programın durumunu gösteren kısım. Bizim örnek resmimizde program aktif olmayan(Inactive)
durumdadır.

Genel Bilgiler
Abap programlama diline dair genel birkaç bilgi verecek olursak, bu bilgileri şu şekilde özetleyebiliriz;

 Abap’ ta önceden tanımlı veri tipleri vardır, bu veri tiplerini kullanarak program satırlarını ve bütün bir
programı oluştururuz.

4
 Abap’ ta çevrilebilen metin yapısını kullanarak, birden fazla dilde çalışan programlar oluşturabiliriz.
 Abap’ ta kullanılan OPEN SQL yapısı sayesinde, program satırlarından veri tabanına direkt erişim sağlanır.
 Abap programlama dili her geçen gün daha da gelişmektedir ve program yapısı yenilendiğinde eğer eski
bir kodlama kullanılıyorsa, bu eski kodlamanın çalışmasını yeni program yapısı engellemez.

5
Sözdizimi Yapısı – Syntax

-Resim A3-

 Abap programlama dili yazdığımız talimatların işleme sokulmasıyla çalışır.


 Yazdığımız her talimat satırı “keyword” dediğimiz tanımlayıcılar ile başlar ve “nokta” ile biter.
 Talimat satırlarındaki kelimelerin en azından bir boşluk ile birbirinden ayrılması gerekmektedir.
 Talimat satırları iç içe gelecek şekilde yazılabilir.
 Talimat satırları birden fazla satır olacak şekilde yazılabilir.
 Aynı zamanda bir satırda birden fazla talimat yazılabilir.
 Abap’ ta kodlama yaparken yazılan kod Büyük-Küçük(Case Sensitive) harfe duyarlı değildir.
 Abap’ ta bir satıra yorum ekleme yapacağımızda satırın başlangıcına yıldız (*) koyarız.
 Resim A3’de bulunan örneğimizde daha kolay ayırt edilmesi amacıyla tanımlayıcıları büyük harf
ile yazmışken diğerleri küçük harf kullanarak belirttik.
 Kodlama yaparken, kodun iyi görünmesi açısından; Büyük-Küçük harf ayrımı veya blokların birbirinden
ayrılması için Resim A2’ de 13 numara ile görünen “Pretty Printer” tuşunu kullanabiliriz.
 Menü’ den ise: Yardımcı Programlar->Ayarlar->Abap Editör->Pretty Printer ile ulaşabiliriz.

6
İşlem Sonucu – Return Statement

-Resim A4-

Yazdığımız bazı talimat satırları işleme sokulduktan sonra sistem bize işlemin ne kadar başarılı olduğunu rakamsal
olarak döner ve bu rakamsal döngüyü
“sy-subrc” isimli sistem alanının içine yazar.
Bir işlemden sonra bu döngü sonucunda sistem alanında (sy-subrc) içinde yazan rakam sıfır (0) ise yaptığımız işlem
başarılı olmuş demektir.

Örnek: Resim A4’ de 13ncü satırda veri tabanına erişim yapıyoruz ve veri çekiyoruz daha sonra ise 16ncı satırda
işlemi başarı ile gerçekleştirdik mi diye sistem alanını (sy-subrc) kontrol ediyoruz.

7
Veri Tipleri
Abap programlama dilinde işlem yapmak için diğer programlama dillerinde olduğu gibi veri objelerini kullanırız.
Abap’ ta bir veri objesini tanımlarken genellikle “DATA” kelimesiyle başlarız ve bunu “TYPE” kelimesiyle
tamamlarız.
Örneğin:

-Resim A5-

Abap’ ta kullanılan verilerin hepsinin temelinde Ön tanımlı Abap tipleri kullanılır. Bunların yanında program içinde
kullanım için daha karmaşık yapıda olan veri tipleri de yaratılabilir.

Abap’ ta, ek olarak, Abap kitaplığında (SE11 – SE16) tanımlanmış olan global veri tiplerini de kullanabiliriz.

Ön tanımlı ABAP tiplerini şemasal olarak gösterecek olursak:

-Resim A6-
Resim A6’ da gösterilen ABAP tiplerinden d, t, i, f, string, xstring program içinde direkt olarak kullanılabilir. Bu
tiplerin içinde string ve xstring tiplerinin diğerlerinden farklı olarak özelliği uzunluklarının dinamik olarak program
içinde oluşmasıdır. Ek olarak bu iki tip için uzunluk bir kriter değildir.

Bunların dışında kullandığımız veri tipleri olan:


 c, n ve x

8
▪ Uzunluk bilgisi tanımlama sırasında eklenmelidir. İzin verilen karakter aralığı 1’ den 65535’
e kadardır.
▪ Eğer bir nesne yaratırken uzunluk bilgisi tanımlanmaz ise sistem otomatik olarak uzunluğu 1
olarak tanımlar.
 p
▪ Uzunluk bilgisi ve ondalık kısım bilgileri tanımlama sırasında belirlenmelidir.
▪ Eğer bir nesne yaratılırken uzunluk bilgisi tanımlanmaz ise sistem otomatik olarak 8 baytlık (ki
oda, 15 haneli bir rakama eşit oluyor) bir veri uzunluğu tanımlar ve ondalık kısım için 0 değerini
atar.

Örnek veri tanımlamaları:

DATA text1(20) TYPE c." 20 karakterlik bir veri öğesi


DATA text2 TYPE string." string tipinde veri öğesi
DATA number TYPE i." integer tipinde veri öğesi
DATA number2(5) TYPE n." 5 karakterlik number tipinde veri öğesi
DATA num_dec TYPE p DECIMALS 2." decimal tipinde veri öğesi
DATA date TYPE d." date tipinde veri öğesi
DATA time TYPE t." time tipinde veri öğesi

text1 = 'The number'." uzunluk önceden 20 karakter tanımlı


number = 100." ön tanımlı veri aralığı -2.147.483.648 den +2.147.483.647 a kadar
number2 = 12345." 5 karakterlik rakamsal veri öğesi
text2 = 'is an integer.'." uzunluk dinamik olarak
atanıyor num_dec = '1234.55'." virgülden sonra iki
rakam olabilir
date = '20091230'." yıl ay gün şeklinde atama yapılır (YYYYAAGG)
time = '125901'." saat dakika saniye şeklinde atama yapılır (SSDDSS)

9
Aritmetik İşlemler

-Resim A7-

 ABAP dilinde standart dört işlem yapısı kullanılır.


 Integer türü verilerde aritmetik işlem yaptığımızda sistem her zaman ondalık sistemin uygun gördüğü
şekilde yuvarlama yapar. Örneğin:

DATA int TYPE i. int = 4 / 10. " sonuç: 0


int = 5 / 10. " sonuç: 1

 Integer veri türünde yapılan işlemler, floating point verilerinde yapılan işlemlere göre daha hızlı bir
şekilde çalışır.

10
-Resim A8-

 Packet number tipinde olan veri tiplerinin uzunluğu bayt türünden verilir. Her bir rakamı yarım bayt
temsil eder. Son bayt ise artı ve eksi işareti için ayrılmıştır.
 Ondalık alan boyutu DECIMALS eki ile belirlenir. Maksimum ondalık alan boyutu 15 yâda eksi 1 değeri.
Bunun sebebi ise en azından virgülden önce bir rakam olması gerektiğidir.
 Ondalık rakam işlemleri kesin sonuçlu işlemler için kullanılmaktadır. Packed number tipinde olan
veriler doğru yuvarlama yapılan ya da ondalık alanların önemli olduğu, kesin sonuçlara ulaşılacak olan,
iş hesaplamaları için daha uygundur. Bu yapı algoritma olarak kâğıt ve kalem kullanmaya benzer, bir
farkı yoktur.

11
Structure Yapısı

-Resim A9-

 ABAP programlama dilinde ön tanımlı veri tipleri dışında STRUCTURE dediğimiz yapılar kullanırız.
 Bu yapıları tanımlarken TYPES kelimesi ile başlarız ve BEGIN OF - END OF kelimeleri ile devam ederiz.
BEGIN OF - END OF kullanımı, içine tanımlama yapılan bir blok gibi çalışır. Bu blokların içine ise
STURCTURE’ ın içine koymak istediğimiz ister ön tanımlı veri tipi olsun ister başka bir STRUCTURE’ ın
veri alanı olsun veri öğelerini yerleştiririz.
 Bir STRUCTURE’ ın veri öğesine erişirken kullanım şekli şu şekildedir:

structure_name-comp_name.

12
-Resim A10-

 Bir structure içinde başka bir structure tanımlayarak NESTED STRUCTURE oluşturabiliriz.
 Oluşturduğumuz alt structure yapısına tamamen ulaşabiliriz:
 structure_adı-alt_structure_adı.
 Bunun yanında tek bir alanına da ulaşabiliriz:
 structure_adı-alt_structure_adı–veri_ogesi.
 Structure yapısına istediğimiz kadar alt structure ekleyebiliriz.
 Structure yapısına dinamik veri öğeleri atayabiliriz. Bunlar; ön tanımlı veri tipleri, internal tablo
(Itab)veya referans olabilirler. Bu yapılara DEEP STRUCTURE diyoruz.
 Ek olarak deep structure yapısında bazı sınırlamalar getirilmektedir. Mesela bir SELECT sorgusunun INTO
kısmına denk gelecek şekilde deep structure kullanamayız çünkü her parçaya tek ulaşılması gerekmektedir.

13
-Resim A11-

 Bazı durumlarda nested structure kullanamayız, örneğin:


▪ Veri tabanında bulunan bir tablo yapısını FLAT STRUCTURE dediğimiz düz şekilde ele almamız
gerekiyor.
▪ Yada kullanıcı menüleri kullanırken bu yapılarda tablo tipi veri alanı kullandığımız için bu tip
kullanımlarda basit yapılar kullanmak zorunda oluyoruz (Örneğin, SAP List Viewer yapısı yada
Table Control yapısı).
 Bu gibi durumlarda yine structure’ ı bir bütün olarak ele almak isteyebilirsiniz. Bunu yapmak için ise
INCLUDE kullanıyoruz:
▪ Temelde yatan mantık ise bir structure içine ayrı şekilde olmayan şekilde başka bir structure
alanlarını eklemek.

DATA: BEGIN OF structure_adı,


... .
INCLUDE STRUCTURE alt_structure_adı AS ad.
DATA: ... ,
END OF structure_adı.

 Böyle bir yapıya erişirken ise kullanım şekli structure_adı-ad şeklinde olmaktadır. Teknik
olarak incelediğimizde ise bu yapı nested structure değildir.

14
Kelime İşlemleri

-Resim A12-

 Resim A12 de görünenler içerisinde TRANSLATE ve CONDENSE dışında bütün durumlar sistem alanı
olan sy-subrc’ yi dolduruyor. (SEARCH aynı zamanda sistem alanı olan sy-fdpos alanına da karakterin
bulunduğu konumu atıyor.)
 Bir kelimenin uzunluğunu bulmak için ise standart fonksiyon olan STRLEN() kullanılmaktadır.
 SPLIT komutu kullanımında SPLIT ... INTO TABLE <itab> yapısını kullanmaktayız.

15
Veri Atama – Move & Write

MOVE:
ABAP’ ta aynı yapıda olan veri tipleri eşit olduğunda veri atamaları yapılır.

MOVE fonksiyonu normal eşitlik mekanizması gibi işlemektedir.

-Resim A13-

Örnek program satırları:

DATA: number TYPE p DECIMALS 2,


count TYPE i.

MOVE '5.75' TO number.


count = number.

MOVE-CORRESPONDING:
Structure yapılarında veri atama işlemlerinde bir structure dan diğer bir structure a veri atamasında aynı
yapıya sahip olmayan fakat aynı elemanlara sahip olan structure yapıları olabilir. Böyle durumlarda move-
corresponding kullanımı gereklidir.

Kullanım şekli: MOVE-CORRESPONDING struc1 TO struc2.

Örnek program satırları:


DATA: BEGIN OF address,
firstname(20) TYPE c VALUE 'Fred',
surname(20) TYPE c VALUE
'Flintstone', initials(4) TYPE c VALUE
'FF',
street(20) TYPE c VALUE 'Cave Avenue',
number TYPE i VALUE '11',
postcode(5) TYPE n VALUE '98765',
city(20) TYPE c VALUE 'Bedrock',
END OF address.

DATA: BEGIN OF name,


surname(20) TYPE c,
firstname(20) TYPE c,
initials(4) TYPE c,

16
title(10) TYPE c VALUE 'Mister',
END OF name.

MOVE-CORRESPONDING address TO name.

NOT: MOVE fonksiyonunun daha geniş kapsamlı kullanımı ve çevirme kuralları kullanımı için ABAP sözdizimi (syntax)
dokümantasyonu kullanılmalıdır.

WRITE:
Write komutu ile bir veri öğesi içinde bulunan veriyi mevcut sayfaya yazmaya yarar. Örneğin:

Örnek kodlama:

DATA text1(10) TYPE c VALUE 'The number'.


DATA text2 TYPE string VALUE 'is an
integer.'. DATA number TYPE i VALUE 7.

WRITE text1.
WRITE number.
WRITE text2.

Örnek ekran görüntüsü:

-Resim A14-

Write komutunun kullanım formatı şu şekildedir:

Kullanacağımız veri öğemiz “dobj” olsun, buna göre;

WRITE {[AT] [/][pos][(len|*|**)]}


dobj [dahili_format_secenegi]
[harici_format_secenegi]
[listeler]
[QUICKINFO kısabilgi].

Dahili Format Seçeneği (int_format_options):


Dahili format seçeneği kullanıldığında, veri objesinin yapısıyla ilgili değişiklikleri amaçlar.

Harici Format Seçeneği (ext_format_options):


Harici format seçeneği kullanıldığında veri objesinin çıktı düzeyinde vereceği görüntüyü ve fonksiyonları amaçlar.

Örnek kodlama:

DATA text1(10) TYPE c VALUE 'The number'."


DATA text2 TYPE string VALUE 'is an integer.'. DATA num_dec TYPE p DECIMALS 2 VALUE '1.99'.

WRITE text1.
WRITE num_dec DECIMALS 0.
WRITE text2 COLOR = 4 QUICKINFO 'son satır'.

17
Örnek ekran görüntüsü:

-Resim A15-

NOT: WRITE fonksiyonunun daha geniş kapsamlı kullanımı ve çevirme kuralları kullanımı için ABAP sözdizimi (syntax)
dokümantasyonu kullanılmalıdır.

WRITE TO:
“Write to” komutu bir veri öğesi içindeki veriyi başka bir veri öğesinin içine yazmaya yarar. Bunu yaparken hedef veri
öğesinin tipi karakter tiplerinden (C, N, D veya T) biri olmalıdır.

Örnek kodlama:

DATA text1(10) TYPE c.


DATA num_dec TYPE p DECIMALS 2 VALUE '6.99'.

WRITE num_dec DECIMALS 1 TO text1.

18
Field Symbols

-Resim A16-

 Bir veri öğesine direkt erişim olmadığında, mesela veri atamalarını dinamik olarak kullanmak
istediğimizde field-symbols nesnelerini kullanırız. Bu sayede ulaşmak istediğimiz veri öğesine field-
symbols yapısı ile ulaşabiliriz.
 Bir veri öğesini field-symbols nesnesine atama yaparken “ASSIGN” kelimesini kullanırız. Bir field-symbols
tanımlandığında genellikle TYPE ANY yapısı kullanılır. Bu sayede program içinde atama yapılan verinin tipi
‘runtime’ dediğimiz programın çalıştığı anda alınır.
 Bir field-symbol’ e veri ataması yaparken kullanılan nesnelerin tiplerinin uyumluluğundan emin olunmalıdır.

Örneğin:
DATA: date TYPE d VALUE '19991231', time TYPE t.
FIELD-SYMBOLS: <fs_date> TYPE d, <fs_time> TYPE t.
ASSIGN: date TO <fs_date>, time TO <fs_time>.
<fs_time> = <fs_date>. " Syntax hatası döner

 Diğer taraftan takip eden kod satırı runtime hatası verir:


FIELD-SYMBOLS: <fs_date> TYPE ANY, <fs_time> TYPE ANY.

 Bir field-symbol’ e veri ataması yapılıp yapılmadığını <FS> IS ASSIGNED kontrolü ile anlayabiliriz.

 UNASSIGN <FS> komutu ile field-symbol’ ün atama yaptığı noktayı boşaltma işlemi gerçekleşiyor
dolayısıyla bu komuttan sonra <FS> hiçbir yeri işaret etmiyor.

19
Kontrol Mekanizmaları – If & Case
Her programlama dilinde olduğu gibi ABAP’ ta da kontrol mekanizmaları vardır. Bu kontrol mekanizmaları program
içinde belli noktalarda işlemleri kontrol ederek bir sonraki işlemi tanımlamamıza olanak sağlar.

Bu kontrol mekanizmalarını başlıklar halinde inceleyecek olursak:

IF:
Bu kontrol mekanizması işlem bloklarının (statement_block) tanımlanması ile çalışır. Bu işlem bloklarında mantıksal
eşleşmeler (log_exp) kullanılarak istenilen kontroller yapılarak işlem bir sonraki aşamaya kaydırılır. Bir IF bloğunda
birden fazla işlem bloğu tanımlayabiliriz.

IF bloğu formatı şu şekildedir:

IF log_exp1.
[statement_block1]
[ELSEIF log_exp2.
[statement_block2]]
...
[ELSE.
[statement_blockn]]
ENDIF.

Mantıksal Eşleşmeler:
Abap’ ta iki veri öğesi karşılaştırıldığında bazı kriterler kullanırız:

<Kriter
Anlamı
>
EQ eşittir
= eşittir
NE eşit değildir
<> eşit değildir
>< eşit değildir
LT küçüktür
< küçüktür
LE küçük yada eşittir
<= küçük yada eşittir
GT büyüktür
> büyüktür
GE büyük yada eşittir
>= büyük yada eşittir
-Tablo A1-

Karşılaştırma prosedürü şu şekildedir:

Rakamsal veriler (tip I,F ve P) ve rakamsal stringler (tip N) içerdiği değerlere göre karşılaştırılır. Diğer veri tipleri için
(C,T,D ve X) karşılaştırma solda sağa doğru çalışır. Solda bulunan verinin ilk karakterinin büyüklük durumuna göre
karşılaştırma sistem tarafından yapılır. Tarih karşılaştırmalarında (D) ileri bir tarih diğerinden daha büyüktür.
Hexadecimal veri tiplerinde ise bayt değerlerine göre karşılaştırma yapılır.

20
CASE:
Bu kontrol mekanizması, bir veri öğesinin içeriğine göre belirlenen işlem bloklarının çalışmasını sağlar.

CASE <f>.
WHEN <f11> [OR <f12> OR ...]
<Statement block>
WHEN <f21>.[OR <f22> OR ...]
<Statement block>
WHEN <f31> [OR <f32> OR ...]
<statement block>
WHEN ...
......
WHEN OTHERS.
<statement block>
ENDCASE.

Yukarıdaki yapıda WHEN koşulu <f> veri öğesinin içerdiği değerin eşleştiği durumlarda işlem bloklarını devreye
sokar. WHEN OTHERS koşulu, eğer <f> değeri hiçbir eşleşme yakalayamaz ise devreye girer. Son işlem bloğu
ENDCASE koşulu ile bitirilmelidir.

Örnek program kodlaması:

DATA: TEXT1 VALUE 'X',


TEXT2 VALUE 'Y',
TEXT3 VALUE 'Z',
STRING VALUE 'A'.

CASE STRING.
WHEN TEXT1 OR TEXT2.
WRITE: / 'String is', TEXT1, 'OR', TEXT2.
WHEN TEXT3.
WRITE: / 'String is', TEXT3.
WHEN OTHERS.
WRITE: / 'String is not', TEXT1, TEXT2,
TEXT3. ENDCASE.

Ekran görüntüsü şu şekildedir:


String is not X Y Z

21
Döngü Mekanizmaları

LOOPS:
Loop denilen döngü yapılarında işlem blokları birbirini takip eden şekilde bir veya daha fazla sayıda işleme sokulur.
ABAP programlama dilinde dört çeşit döngü vardır:

 Koşulsuz döngüler DO döngüsü.


 Koşullu döngüler WHILE döngüsü.
 Internal tabloları ve belirli bir Dataset’ i kullanan LOOP döngüsü.
 Veri tabanından çekilen Dataset’ i kullanan LOOP döngüsü.

KOŞULSUZ DÖNGÜLER:
Bir işlem bloğunu koşulsuz olarak bir veya daha fazla kere çalıştıran döngülerdir. Bu döngünün yapısı şu şekildedir:

DO [<n> TIMES] [VARYING <f> FROM <f1> NEXT <f2>].


<Statement block>
ENDDO.

Bu tip bir döngüde eğer eklentiler olmazsa işlem blokları bir çıkış noktası olan EXIT veya STOP görene kadar
çalışmaya devam eder.

Bu döngü içinde TIMES eki kullanıldığında ise <n> değeri kadar döngü çalışır. Eğer <n> değeri 0 veya eksi bir
değer ise döngü çalışmaz. Döngü içinde TIMES eki kullanılmadığında, döngüden çıkış için EXIT yada STOP
eklerinden en az birinin kullanıldığından emin olunmalı.

VARYING eki kullanıldığında ise döngü her seferinde <f> değerine yeni bir veri ataması yapar.

Örneğin:
DATA: BEGIN OF TEXT,
WORD1(4) VALUE 'B',
WORD2(4) VALUE 'is',
WORD3(4) VALUE 'a',
WORD4(4) VALUE 'loop',
END OF TEXT.
DATA: STRING1(4), STRING2(4).
DO 4 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD2.
WRITE STRING1.
IF STRING1 = 'is'.
STRING1 = 'was'.
ENDIF.
ENDDO.
SKIP.
DO 2 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD3
VARYING STRING2 FROM TEXT-WORD2 NEXT TEXT-WORD4.
WRITE: STRING1, STRING2.
ENDDO.

Ekran Görüntüsü:
This is a loop

22
KOŞULLU DÖNGÜLER:
Eğer bir döngüyü kesin bazı koşullara göre çalıştırmak istiyorsak aşağıdaki yapıyı kullanırız:

WHILE <kriter> [VARY <f> FROM <f1> NEXT <f2>].


<statement block>
ENDWHILE.

<kriter> herhangi bir karşılaştırma kriteri olabilir. WHILE ile ENDWHILE arasındaki işlem bloğu <kriter> doğru
olduğu sürece veya bir çıkış eki olan EXIT veya STOP görene kadar çalışmaya devam eder. SY-INDEX veri
öğesi döngünün kaç defa çalıştığının bilgisini tutar. VARYING eki DO döngüsünde olduğu gibi çalışır.

Örneğin:
DATA: LENGTH TYPE I VALUE
0, STRL TYPE I VALUE
0,
STRING(30) TYPE C VALUE 'Deneme
yazısı'. STRL = STRLEN( STRING ).

WHILE STRING NE SPACE.


WRITE STRING(1).
LENGTH = SY-INDEX.
SHIFT STRING.
ENDWHILE.

WRITE: / 'STRLEN: ', STRL.


WRITE: / 'Kelime uzunlugu:', LENGTH.

Çıktının görüntüsü şu şekildedir:


Denemeyazısı
STRLEN: 11
Kelime uzunluğu: 11

Yukarıda bulunan örnekte bir kelimenin karakter uzunluğunun WHILE döngüsü içinde nasıl yazıldığını inceledik. Bu
örnekte kelime boş değerler içerene kadar döngü her çalıştığında bir karakter sola kaydırılıyor.

23
DÖNGÜLERDEN ÇIKIŞ İŞLEMİ:
ABAP programlama dilinde standart olarak bazı çıkış durumları tanımlanmıştır, bu çıkış durumları zamanından önce
döngülerden çıkış işlemi için kullanılır.

Koşulsuz çıkış durumları:


Bu gibi durumlarda CONTINUE durumunu kullanırız. Sistem bu durumu gördükten sonra mevcut işlem bloğu
durdurulur ve döngü bir sonraki aşamaya geçer.

Örneğin:
DO 4 TIMES.
IF SY-INDEX = 2.
CONTINUE.
ENDIF.
WRITE SY-INDEX.
ENDDO.
Ekran çıktısı:
1 3 4

Koşullu çıkış durumları:


Bu tür çıkış durumlarında, işlem bloğu içerisinde CHECK <kontrol> yapısını kullanırız. Eğer CHECK kontrolü
sonrasında eşitlik sağlanmazsa döngü bir sonraki aşamaya geçer.

Örneğin:
DO 4 TIMES.
CHECK SY-INDEX BETWEEN 2 and
3. WRITE SY-INDEX.
ENDDO.
Ekran çıktısı:
2 3

Döngüden EXIT ile çıkış:


Bir döngüden herhangi bir koşula bağlı kalmadan ve acil olarak çıkmak gerektiğinde işlem bloğunda EXIT durumunu
kullanırız. Bu çıkış kullanıldığında program döngü çıkışından (ENDDO, ENDWHILE, ENDLOOP, ENDSELECT)
sonra işleme devam eder.

24
Dahili Tablolar – Internal Tables
Dahili tablolar (ITAB) ABAP’ ta hafıza üzerinde çalışan, belli bir structure kullanarak veri çekme ve işleme için
kullanılır. Itab içinde bulunan veri hafızada satır olarak tutulur ve her satır aynı tiptedir. Abap programlama dilinde
kullanılan Dahili Tablolar diğer programlama dillerinde bulunan Array yapısına bir karşılıktır. ABAP’ ta belirli bir
tipte bulunan veri bloklarını işleyecek olduğumuzda ITAB yapısını kullanmalıyız.

Veri tipi olarak Dahili Tablolar:


Bir dahili tablonun veri yapısı o dahili tablonun satır tipine, anahtar alanlarına ve tablo tipine göre belirlenmiş olur.

Satır Tipi:
Bir dahili tablonun satır tipi herhangi bir veri tipi olabilir. Normal olarak bunun için bir structure kullanılır. Structure’
ın her elemanı dahili tablo içinde bir sütun demektir. Yinede, bir satır tipi öntanımlı veya başka bir dahili tablo
olabilir.

Anahtar (KEY):
Anahtar tablo satırlarını tanımlar. Dahili tablolar için iki çeşit anahtar bulunmaktadır, kullanıcı tanımlı olanlar ve
standart tanımlı olanlar. Anahtarın UNIQUE veya NON-UNIQUE olacağı belirlenebilir. UNIQUE key olan bir dahili
tabloda tekrarlanan kayıtlar bulunamaz.

Tablo Tipi (Table Type):


Tablo tipi ABAP’ ın belli başlı tablo kayıtlarına erişimini sağlar.

Dahili tablolar üç alana ayrılır:

Standart Tablolar, Sorted Tablolar ve Hashed Tablolar.

Hashed tabloda tabloya erişim sadece anahtar (Key) alan üzerinden yapılmaktadır. Diğer tablo tiplerinde ise anahtar
alan veya tablo indeksine göre erişim yapılabilir.

NOT: Dahili Tablo yapılarının daha kapsamlı açıklamaları için ABAP sözdizimi (syntax) dokümantasyonu
kullanılmalıdır.

Dahili Tablo Yaratmak (ITAB):


Diğer veri tipleri gibi, ITAB yaratmak için TYPE veya LIKE ekini kullanırız, TYPES ekini kullanarak lokal olarak
yeni bir ITAB yapısı da oluşturabiliriz.

TYPES <t> TYPE|LIKE <tabkind> OF <liinetype> [WITH <key>]

[INITIAL SIZE <n>].

TYPE veya LIKE ekinden sonra işlem şu şekilde yapılanır:

<tabkind> OF <linetype> [WITH <key>]

TYPE eki dahili tablonun tablo tipini <tabkind>, satır tipini <linetype> ve anahtar alanını <key> belirler.

25
TABLO TİPİ <TABKIND>:
Tablo tipini takip eden resimde görüldüğü gibi tanımlayabiliriz:

-Resim A17-

GENEL TABLO TİPLERİ:


INDEX TABLE
İndeks yapısı ile erişim sağlayan tablo yapıları.

ANY TABLE
Bu tip tablo yapıları sadece field symbol yapısı kullanılarak yapılabilir. Bu sebepten dolayı indeks erişimi bu tip tablo
yapıları için mümkün değildir.

ÖZELLEŞTİRİLMİŞ TABLO TİPLERİ:


STANDARD TABLE veya TABLE
Standart tablo yapıları yaratmak için kullanılır.

SORTED TABLE
Sorted tablo yapıları yaratmak için kullanılır.

HASHED TABLE
Hashed tablo yapıları yaratmak için kullanılır.

Özelleştirilmiş tablo yapıları sayesinde, sistemin tablo kayıtlarına anahtar alanlar üzerinden nasıl ulaşılacağı belirlenir.

Arama yapıldığında, standart tablolar için linear arama, sorted tablo yapısı için binary arama, hash tablolar için ise bir
hash algoritması kullanır.

SATIR TİPİ <LINETYPE>:


Satır tipi için:

Abap ön tanımlı tipi, lokal olarak tanımlı bir tip veya ABAP Kitaplığından (ABAP DICTIONARY) bir veri tipi
kullanılabilir. Bu şekilde satır tipi tanımlandığında eğer veri özelliklerini kendimiz tanımlamazsak sistem başlangıç
değerleri ile satır tipini oluşturur.

26
ANAHTAR <KEY>:
Anahtar alanın tanımlanması şu şekilde olur:

[UNIQUE|NON-UNIQUE] KEY <col1> ...

<coln> [UNIQUE|NON-UNIQUE] KEY TABLE

LINE [UNIQUE|NON-UNIQUE] DEFAULT

KEY

Bir anahtar alan belirlemek isteğe bağlıdır. Eğer bir anahtar alan belirlenmez ise sistem otomatik olarak bir anahtar
alan belirler.

UNIQUE veya NON-UNIQUE ekleri tabloda tekrarlayan girdiler olup olmayacağı konusunda belirleyici rolü üstlenir.

Örnek Tablo Tanımlamaları:

TYPES: BEGIN OF LINE,

COLUMN1 TYPE I,

COLUMN2 TYPE I,

COLUMN3 TYPE I,

END OF LINE.

TYPES ITAB TYPE SORTED TABLE OF LINE WITH UNIQUE KEY COLUMN1.

Örnekte, sistem LINE yapısında bir ITAB tanımlıyor. Bu ITAB Sorted Tablo olarak yaratılıyor ve COLUMN1
alanını anahtar alan olarak atıyor. Bu sayede tablo içerisinde tekrarlanmayan veriler olması amaçlanıyor.

TYPES: BEGIN OF LINE,

COLUMN1 TYPE I,

COLUMN2 TYPE I,

COLUMN3 TYPE I,

END OF LINE.

TYPES ITAB TYPE SORTED TABLE OF LINE WITH UNIQUE KEY COLUMN1.

TYPES: BEGIN OF DEEPLINE,

FIELD TYPE C,

TABLE1 TYPE VECTOR,

TABLE2 TYPE ITAB,

END OF DEEPLINE.

TYPES DEEPTABLE TYPE STANDARD TABLE OF DEEPLINE

WITH DEFAULT KEY.

TYPE veya LIKE eklerini kullanarak yarattığımız dahili tablolara ek olarak DATA ekini kullanarak da dahili tablo
yapıları oluşturabiliriz.

27
DATA eki ile dahili tablo yapısı:

DATA <itab> TYPE|LIKE <tabkind> OF <linetype> WITH <key>

[INITIAL SIZE <n>]

[WITH HEADER LINE].

Dahili tabloya INITIAL SIZE eki ile dilediğimiz miktarda hafıza alanı ayırabiliriz. Ek olarak WITH HEADER
LINE ekini kullandığımızda dahili tabloya “work area” dediğimiz çalışma alanı atamış oluruz. Bu çalışma alanı
sayesinde dahili tablonun satır tipinde bir çalışma alanı oluşturulur ve tablo işleme sokulduğunda tablo içindeki veriler
o çalışma alanı üzerinden işleme sokulur.

DAHİLİ TABLO İŞLEMLERİ:


DAHİLİ TABLO ATAMALARI:
MOVE işlemi dahili tablolar için de daha önceden tanımladığımız şekilde çalışır.

MOVE <itab1> TO <itab2>.

Veya aynı işlemi gören:

<itab2> = <itab1>.

Yukarıda bulunan her iki komut bir tablonun bütün içeriğini diğer tabloya atar. Eğer HEADER LINE dediğimiz
çalışma alanını kullanıyorsak, tablo ile çalışma alanının aynı ismi taşıdığını unutmamamız gerekir. Dolayısıyla tablo
içeriğini atamak istiyorsak tablo adından sonra bu iki parantezi [] kullanmayı unutmamalıyız.

Örneğin:

DATA: BEGIN OF LINE,


COL1,
COL2,
END OF LINE.
DATA: ETAB LIKE TABLE OF LINE WITH HEADER LINE,
FTAB LIKE TABLE OF LINE.

LINE-COL1 = 'A'. LINE-COL2 = 'B'.


APPEND LINE TO ETAB.
MOVE ETAB[] TO FTAB.

LOOP AT FTAB INTO LINE.


WRITE: / LINE-COL1, LINE-COL2.
ENDLOOP.

Ekran çıktısı şu şekildedir:


AB

Yukarıda bulunan örnekte LINE tipinde ETAB ve FTAB isimli iki tane STANDARD tablo oluşturuyoruz. ETAB
tablomuzun çalışma alanı bulunmakta. APPEND komutu ile ETAB tablosunu doldurduktan sonra, ETAB’ ın bütün
içeriğini FTAB tablosuna atıyoruz. İşlem bloğundaki parantezlere dikkat edilmesi gerekmektedir.

DAHİLİ TABLO SIFIRLAMALARI:


Diğer veri öğelerinde olduğu gibi, dahili tablolarda sıfırlama işlemlerini:

CLEAR <itab>.

Bu komuttan sonra <itab> tablosuna sistem geri yükleme yapar. Bu geri yükleme sonrasında tablo içinde hiç satır
bulunmaz.

28
Eğer tabloyu WITH HEADER LINE eki ile yaratmışsak, tablo ile çalışma alanının isimlerinin aynı olduğunu
unutmamamız gerekir ve tablo içeriğini temizlemek istiyorsak parantezleri [] kullanmalıyız.

CLEAR <itab>[].

REFRESH <itab>.

CLEAR komutunda tablonun daha önceden kullandığı hafıza alanı korunur. REFRESH komutu ise sadece tablo
alanını temizler ve çalışma alanını etkilemez.

Eğer tablo için kullanılan hafıza alanını serbest bırakmak istersek

FREE <itab>.

komutunu kullanırız.

DAHİLİ TABLO SIRALAMALARI (SORTING):


Program içinde kullandığımız tabloları içindeki verilere göre sıralayabiliriz. Anahtar alana göre sıralama yapmak için
aşağıdaki kod yapısını kullanırız:

SORT <itab> [ASCENDING|DESCENDING] [AS TEXT] [STABLE].

Standart olarak tablo büyük değere doğru (ASCENDING) sıralanır. Sıralama düzeni tablonun standart anahtar
alanlarına göre yapılır.

ASCENDING ve DESCENDING komutlarını kullanarak sıralama düzenini seçebiliriz.

Eğer anahtar alan dışında başka alanlara göre sıralama yapmak istiyorsak takip eden yapıyı kullanırız:

SORT <itab> [ASCENDING|DESCENDING] [AS TEXT] [STABLE]


BY <f1> [ASCENDING|DESCENDING] [AS TEXT]
...
<fn> [ASCENDING|DESCENDING] [AS TEXT].

Örnekte, tablo bizim belirlediğimiz <f1> ve <fn> alanlarına göre sıralanır.

BELİRLİ SATIRLARA GÖRE İŞLEM YAPMA:


Aşağıda bulunan işlemler tablonun tek bir satırı için yapılabilir:

 Tabloyu satır satır doldurmak


 Tabloyu içeriğine satır satır erişmek
 Belirli satırları düzenlemek
 Belirli satırları silmek

ÇALIŞMA ALANI İLE ERİŞİM:


Belirli tablo kayıtlarına erişerek yapılan işlemlerde, tabloda bulunan veri ile direkt olarak çalışıyor olmayız. Bunun
yerine başka bir veri öğesini çalışma alanı olarak atarız ve onun üzerinde çalışırız. Bu veri tipi tablo yapısı ile aynı
olmak durumundadır. Tablodan bir kayıta erişim yaptığımızda, o kayıtın içerdiği verileri bir çalışma alanına atarız ve
program içinde o veriyi kullanırız.

29
-Resim A18-

SATIR EKLEME:
TEK BİR SATIR EKLEME:
Tabloya tek bir satır eklemek istediğimizde takip eden yapıyı kullanırız:

INSERT <line> INTO TABLE <itab>.

Ekleme yapılan verinin tipi tablo ile aynı olmak zorundadır aksi takdirde sistem ekleme işlemini gerçekleştiremez.
Sistem başarılı bir ekleme işlemi gerçekleştirirse SY-SUBRC değeri 0 olur fakat gerçekleştiremezse SY-SUBRC
değeri 4 olur.

BİRDEN FAZLA SATIR EKLEME:


Bir dahili tabloya birden fazla satır eklemek istediğimizde takip eden yapıyı kullanırız:

INSERT LINES OF <itab1> [FROM <n1>] [TO <n2>] INTO TABLE <itab2>.

Tablonun yapısına göre değişmek üzere, bu komut kullanıldığında tabloya satır ekleme işlemi bir döngü içinde satır
satır ekleme yapmaya göre ortalama olarak 20 kat daha hızlı çalışmaktadır.

TABLO SATIRLARINI OKUMA:


Tablodan tek bir satır okumak istediğimizde takip eden yapıyı kullanırız:

READ TABLE <itab> <key> <result>.

ARAMA KRİTERİ BELİRLEME:


Tablodan bir kritere göre veri okumak istediğimizde takip eden yapıları kullanırız:

READ TABLE <itab> FROM <wa> <result>.

Veya

READ TABLE <itab> WITH TABLE KEY <k1> = <f1> ... <kn> = <fn> <result>.

İlk kullanım şeklinde anahtar alanların verileri <wa> çalışma alanının anahtar alanlarından alınır. Bunun olması için
ise <wa> veri öğesinin tipinin <itab> ile aynı olması gerekir.

İkinci kullanım şeklinde ise arama yapılacak her anahtar alan için verileri kendimiz belirleriz.

30
FARKLI BİR ALANA GÖRE ARAMA KRİTERİ BELİRLEME:
Tablonun anahtar alanı dışında başka bir alana göre arama yapmak istediğimizde takip eden yapıları kullanırız:

READ TABLE <itab> WITH KEY = <f> <result>.

veya
READ TABLE <itab> WITH KEY <k1> = <f1> ... <kn> = <fn> <result>.

İlk kullanım şeklinde tablonun satır tipinin tamamı arama kriteri olarak kullanıldı.

İkinci kullanım şeklinde ise arama kriteri <k1> <kn> değerleri arasındaki herhangi bir tablo alanına göre oluştu.

SATIR DEĞİŞTİRME:
Dahili tablo yapısında bir satırı değiştirmek için takip eden yapı kullanılır:

MODIFY TABLE <itab> FROM <wa> [TRANSPORTING <f1> <f2> ...].

Bu komutun çalışması için <wa> ile <itab> satır tipi olarak aynı yapıda olması gerekmektedir. Eğer bir değişiklik
varsa sistem değişiklik olan satırları günceller. TRANSPORTING ekini kullanarak anahtar olmayan alanlardaki atama
işlemleri mümkün olur.

KOŞULLU SATIR DEĞİŞTİRME:


Belli bir koşula göre güncelleme yapmak istediğimizde takip eden yapıyı kullanırız:

MODIFY <itab> FROM <wa> TRANSPORTING <f1> <f2> ... WHERE <cond>.

SATIR SİLME:
Tablodan satır silmek için kullanılan yapılar:

DELETE TABLE <itab> FROM <wa>.

Veya

DELETE TABLE <itab> WITH TABLE KEY <k1> = <f1> … <kn> = <fn>.

şeklindedir.

İlk yapıda silme işlemi, anahtar alan verileri çalışma alanı olan <wa> dan alınarak yapılmaktadır.

İkinci yapıda ise anahtar alanları ve değerlerini kendimiz belirleyerek silme işlemini gerçekleştirmekteyiz.

BELİRLİ BİR KRİTERE GÖRE BİRDEN FAZLA SATIR SİLME:


Tablodan bazı koşullara göre birden fazla veri silme işlemi için:

DELETE <itab> WHERE <cond>.

yapısını kullanırız.

TEKRARLANAN KAYIT SATIRLARINI SİLME:


Tabloda bulunan veriler içerisinde tekrarlanan kayıtlar varsa ve bunları silmek istiyorsak:

DELETE ADJACENT DUPLICATE ENTRIES FROM <itab>


[COMPARING <f1> <f2> ...
|ALL FIELDS].

Yapısını kullanırız.

DÖNGÜ İÇERİSİNDE TABLO KULLANIMI:


Dahili tablolar için döngü mekanizmalarını kullanabiliyoruz.

31
LOOP AT <itab> <result> <condition>.
<statement block>
ENDLOOP.

Yukarı bulunan yapıda tablo satırları okunur ve işlem bloğunda tanımlanan sıraya göre işleme sokulur. <condition>
ekini kullanarak işleme sokulacak tablo satırlarını belirlediğimiz koşullara göre sınırlayabiliriz.

ÇALIŞMA ALANI KULLANMA:


Tablo satırlarını bir çalışma alanına atayarak işlem yapmak için <result> eki takip eden şekilde doldurulur:

LOOP AT <itab> INTO <wa> <condition>.

Döngü her çalıştığında tablonun bir satırı çalışma alanı olan <wa> içine atanır ve tanımlanan işlem bloğunda işleme
sokulur.

APPEND İŞLEMİ:
Bir indeks tablosuna satır eklemek için takip eden yapıyı kullanırız:

APPEND <line> TO <itab>.

Üstteki yapıda satır tipi olan <line> yapısı <itab> a eklenir. Bunun yanında INITIAL LINE eki kullanılarak <itab> a
boş bir satır eklenebilir.

BİRDEN FAZLA APPEND İŞLEMİ:


Bir indeks tablosuna dahili tablonun satırlarını eklemek için takip eden yapıyı kullanırız:

APPEND LINES OF <itab1> TO <itab2>.

Yukarıda bulunan yapıda <itab1> in içindeki bütün veriler <itab2> ye eklenir. <itab1> in satır tipi <itab2> ile aynı
olmak zorundadır.

INDEX KULLANIMI:
Dahili tablolarda INDEX kullanarak satır eklemesi, satır okuma, satır değiştirme ve satır silme işlemleri
gerçekleştirilebilir.

Satır ekleme işlemleri için kullanılan yapı:

INSERT <line> INTO <itab> [INDEX <idx>].

Bu kullanımda <itab> içinde <idx> ile belirtilen satıra <line> eklenir.

Satır okuma işlemleri için kullanılan yapı:

READ TABLE <itab> INDEX <idx> <result>.

Bu kullanım şeklinde <idx> ile belirtilen satır <result> kısmında belirlenen kritere göre okunur.

Satır değiştirme işlemleri için kullanılan yapı:

MODIFY <itab> FROM <wa> [INDEX <idx>] [TRANSPORTING <f1> <f2> ... ].

Bu kullanım şeklinde <itab> içinde <idx> ile belirlenen satır <wa> içinde bulunan veriye göre değiştirilir. <wa> ile
<itab> yapısal olarak birbirinin aynı olmak

zorundadır. Satır silme işlemleri için kullanılan yapı:

DELETE <itab> [INDEX <idx>].

32
Bu kullanım şeklinde <itab> içinde <idx> ile belirtilen satır silinir.

HEADER LINE olmadan tablo işlemleri HEADER LINE ile tablo işlemleri
Tabloya göre değişmeyen işlemler
INSERT <wa> INTO TABLE INSERT TABLE ITAB.
<itab>. COLLECT <wa> INTO COLLECT <itab>.
<itab>. READ TABLE <itab> ...
READ TABLE <itab> ... INTO <wa>. MODIFY TABLE <itab> ...
MODIFY TABLE <itab> FROM <wa> ... MODIFY <itab> ... WHERE
MODIFY <itab> FROM <wa> ...WHERE ... DELETE TABLE <itab>.
... DELETE TABLE <itab> FROM <wa>. LOOP AT ITAB ...
LOOP AT ITAB INTO <wa> ...
INDEX tabloları için kullanılabilen işlemler
APPEND <wa> TO <itab>. APPEND <itab>.
INSERT <wa> INTO <itab> INSERT <itab> ...
... MODIFY <itab> ...
MODIFY <itab> FROM <wa> ...
-Tablo A2-

NOT: INDEX kullanımı ile çoklu satır işlemleri için ABAP sözdizimi (syntax) dokümantasyonu incelenmelidir.

33
Alt Rutin İşlemleri – Form & Perform
Alt rutinler (FORM) ABAP programlama dilinde tanımladığımız işlem yöntemidir. Tanımladığımız alt rutinleri başka
programlar içinden de çağırabilmekteyiz. Alt rutin ile yapılan işlemler lokal olarak program içinde kullanılmaktadır.
Eğer sistem içinde çalışabilen bir yapı kurmak istiyorsak FUNCION BUILDER ekranını kullanmamız gerekmektedir.

ALT RUTİN TANIMLAMA:


FORM <subr> [USING ... [VALUE(]<pi>[)] [TYPE <t>|LIKE <f>]... ]
[CHANGING... [VALUE(]<pi>[)] [TYPE <t>|LIKE <f>]... ].
...
ENDFORM.

Yukarıda bulunan yapıda <subr> alt rutinin ismi olarak tanımlanıyor. İsteğe bağlı olan USING ve CHANGING
kullanımları parametreleri belirliyor. Yaratılan alt rutinler programın sonlarında yer almaktadır.

ALT RUTİNLERDE LOKAL VERİLER:


Alt rutinlerde TYPES ve DATA ile tanımlanan veriler alt rutin sona erdiğinde sistem tarafından silinir. Her alt rutin
kendi çalışma alanına sahiptir. Bu sebepten dolayı eğer global bir veri ile aynı ismi taşıyan bir veri lokal olarak alt
rutin içerisinde tanımlanırsa, global olan veri alt rutin içerisinde kullanılamaz duruma gelir. Bu yüzden alt rutin
içerisinde veri tanımlandığında l_ ile başlayan isimler kullanılması kullanım açısından daha faydalı olur.

Örnek kodlama:

TYPES WORD(10) TYPE C.


DATA TEXT TYPE WORD.
TEXT = '1234567890'. WRITE /
TEXT. PERFORM DATATEST.
WRITE / TEXT.

FORM DATATEST.
TYPES WORD(5) TYPE C.
DATA TEXT TYPE WORD.
TEXT = 'ABCDEFGHJK'. WRITE /
TEXT. ENDFORM.

Bu kod satırları çalıştığında ekran çıktısı şu şekildedir:

1234567890
ABCDE
1234567890

34
ALT RUTİN PARAMETRELERİ:

FORM <subr> USING ... <pi> [TYPE <t>|LIKE <f>] ...


CHANGING ... <pi> [TYPE <t>|LIKE <f>] ...

USING ve CHANGING parametrelerinin kullanım amacı, alt rutin içerisine kullanmak veya değiştirmek için
veri göndermek. USING parametresi ile gönderilen veriler alt rutin içerisinde kullanılmaktadır, CHANGING
parametresi ile gönderilen veriler ise alt rutin içerisinde değiştirilebilmektedir.

FORM <subr> TABLES ... <itabi> [TYPE <t>|LIKE <f>] ...

Alt rutin içerisine gönderilen <itabi> standart ve çalışma alanı olan bir tablo olarak tanımlanıyor ve alt rutin içerisine
gönderiliyor. Eğer çalışma alanı olmayan bir tablo alt rutin içerisine gönderilirse sistem lokal olarak bir çalışma
alanı ataması yapar.

ALT RUTİNLERİ SONLANDIRMA:


Bir alt rutin normal olarak ENDFORM durumda sonlanır fakat alt rutini daha erken sonlandırmak istersek CHECK
veya EXIT komutlarını kullanırız. EXIT kullanıldığında alt rutin koşulsuz olarak sonlandırılır, CHECK
kullanıldığında ise alt rutin belli koşullara göre sonlandırılır.

Örneğin:
PERFORM TERMINATE.
WRITE 'Program sonu.

FORM TERMINATE.
WRITE '1'.
WRITE '2'.
WRITE '3'.
EXIT.
WRITE '4'.
ENDFORM.

İşlemin ekran görüntüsü şu şekildedir:


1 2 3 Program sonu

ALT RUTİNLERİ ÇAĞIRMA:


Alt rutinleri çağırmak için aşağıdaki yapı kullanılmaktadır:

PERFORM... [USING ... <pi>... ]


[CHANGING... <pi>... ].

USING ve CHANGIN kullanımlarında alt rutine giriş yapan parametrelerin giriş sırası çok önemlidir.

35
Alt rutinleri örnekleri:

DATA
:
DATE1 TYPE D,
DATE2 TYPE T,
STRING1(6) TYPE C,
STRING2(8) TYPE C,
NUMBER1 TYPE P DECIMALS 2,
NUMBER2 TYPE P,
COUNT1 TYPE I,
COUNT2 TYPE I.

PERFORM TYPETEST USING DATE1 STRING1 NUMBER1 COUNT1.


SKIP.
PERFORM TYPETEST USING DATE2 STRING2 NUMBER2 COUNT2.

FORM TYPETEST USING NOW


TXT TYPE C
VALUE(NUM) TYPE P
INT TYPE I.

DATA: T.
DESCRIBE FIELD NOW TYPE T.
WRITE: / 'Type of NOW is', T.
DESCRIBE FIELD TXT LENGTH
T.
WRITE: / 'Length of TXT is', T.
DESCRIBE FIELD NUM DECIMALS
T.
WRITE: / 'Decimals of NUM are',
T. DESCRIBE FIELD INT TYPE T.
WRITE: / 'Type of INT is',
T. ENDFORM.

Programın ekran çıktısı şu şekildedir:

Sum of 2 and 4 is 6
Sum of 7 and 11 is 18

36
Fonksiyon Modülleri
Temel Bilgiler
Fonksiyon modülleri, fonksiyon grupları altında tanımlanan ve ABAP içinde herhangi bir programdan çağırılabilen
işlem yöntemleridir. Fonksiyon grupları fonksiyon modülleri için taşıyıcı görevi görmektedir.

FONKSİYON MODÜLLERİNİN ÇAĞIRILMASI:


Bir ABAP programı içerisinde fonksiyon modülü çağırılacağı zaman CALL FUNCTION komutunu kullanırız. Temel
yapısı şu şekildedir:

CALL FUNCTION <module>


[EXPORTING f1 = a1.. . .fn = an]
[IMPORTING f1 = a1.. . .fn = an]
[CHANGING f1 = a1.....fn = an]
[TABLES f1 = a1.. . .fn = an]
[EXCEPTIONS e1 = r1.. . .en = rn [ERROR_MESSAGE = rE]
[OTHERS = ro]].

Yukarıda bulunan yapıyla ilgili olarak:

 Fonksiyonun ismini <module> kısmında tanımlanır.


 EXPORTING kısmından sonra zorunlu olan (NON-OPTIONAL) alanlara uygun verileri
atamak gerekmektedir.
 IMPORTING kısmından sonra ise fonksiyonun programa gönderdiği veriler, aynı tipte olan veri öğeleri
atanarak alınır.
 CHANGING ve TABLES kısımları için yukarıda bahsedilen prosedürler geçerlidir.

FONKSİYON MODÜLLERİNİN YARATILMASI:


Fonksiyon modüllerini (Fonksiyonları) yaratırken ABAP Workbench üzerinde çalışan Function Builder (SE37)
kullanılır.

-Resim A19-

Yukarıda bulunan resim fonksiyon modüllerinin yaratıldığı ekranın görüntüsüdür. İşlevsellik olarak SE38 ekranı ile
aynı yapıya sahiptir.

Fonksiyon yaratma esnasında sistem bizden fonksiyonun bağlı olacağı fonksiyon grubunu ve fonksiyonun kısa
tanımını ister.

37
-Resim A20-

Fonksiyonun bağlı olduğu grubu ve kısa tanımını belirttikten sonra fonksiyon için gerekli olan içe aktarım (IMPORT),
dışa aktarım (EXPORT), değiştir (CHANGING), tablolar (TABLES) ve istisna (EXCEPTIONS) parametreleri isteğe
göre doldurulur.

Fonksiyonlar sistem içerisinde herhangi bir yerde kullanıldığı için, parametre aralığı sadece sistemde tanımlı veri
tipleri olabilir. Bunlar ABAP ön tanımlı veri tipleri, sistem tanımlı veri tipleri ve ABAP kitaplığında tanımlı olan veri
tipleri olabilir. Bir veri öğesine referans verildiğinde LIKE eki kullanılamaz.

-Resim A21-

Yukarıda görünen resimde IMPORT kısmında bulunan veriler fonksiyon içerisine aktarılmaktadır.

38
-Resim A22-

EXPORT kısmında olan veriler dışarıya aktarılacak olan verileri içermektedir. EXCEPTIONS kısmında ise fonksiyon
içerisinde bir hata olursa ve fonksiyon buna göre sonlanırsa, hatanın nerede alındığı konusunda belirlediğimiz kriterler
doğrultusunda bize yol gösterir.

SOURCE CODE kısmına ise fonksiyonda kullanacağımız ABAP kodlamalarını yazıyoruz.

Örnek bir fonksiyon kodlaması:

FUNCTION READ_SPFLI_INTO_TABLE.
*"------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(ID) LIKE SPFLI-CARRID DEFAULT 'LH '
*" EXPORTING
*" VALUE(ITAB) TYPE SPFLI_TAB
*" EXCEPTIONS
*" NOT_FOUND
*"------------------------------------------------------------
SELECT * FROM SPFLI INTO TABLE ITAB WHERE CARRID = ID.
IF SY-SUBRC NE 0.
MESSAGE E007(AT) RAISING
NOT_FOUND. ENDIF.
ENDFUNCTION.

Bu fonksiyonun program içerisinde çağırılması ise:

REPORT DEMO_FUNCTION_MODULE.
PARAMETERS CARRIER TYPE
S_CARR_ID. DATA: JTAB TYPE SPFLI_TAB,
WA LIKE LINE OF JTAB.

CALL FUNCTION 'READ_SPFLI_INTO_TABLE'


EXPORTING
ID = CARRIER
IMPORTING
ITAB = JTAB
EXCEPTIONS
NOT_FOUND = 1

39
OTHERS = 2.
CASE SY-SUBRC.
WHEN 1.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO.
WHEN 2.
MESSAGE E702(AT).
ENDCASE.

LOOP AT JTAB INTO WA.


WRITE: / WA-CARRID, WA-CONNID, WA-CITYFROM, WA-CITYTO.
ENDLOOP.

40
Fonksiyon Grupları
Her fonksiyon modülü sistemde tanımlanmış bir fonksiyon grubuna bağlı olmak zorundadır. Fonksiyon grupları
fonksiyonlar için bir taşıyıcı görevi görmektedir. Sistemde yeni bir fonksiyon grubu tanımlamak istediğimizde SE80
ekranından yeni bir fonksiyon grubu oluşturabilmekteyiz.

-Resim A23-

Fonksiyon grubunun adını yazdıktan sonra görüntüle tuşunu kullanıyoruz, eğer sistemde böyle bir fonksiyon grubu
mevcut değilse karşımıza çıkan ekranda istenen bilgileri tamamlayarak fonksiyon grubunu yaratabiliriz.

-Resim A24-

41
-Resim A25-

Yukarıda bulunan resimde görüldüğü gibi gerekli olan bilgileri sağladıktan sonra ve SAVE tuşu ile kayıt işlemini
yapıyoruz. Yarattığımız fonksiyon grubunu artık fonksiyonlarımız için kullanabiliriz.

42
Diyalog Programlama
Seçim Ekranları
Seçim ekranları programda kullanıcılara seçim kriteri girmelerine yardımcı olur. Büyük bir tablodan veri çekerken
belirtilen kriterler sayesinde tam olarak istenilen verinin elde edilmesini sağlar.

Seçim ekranında tek değer, çoklu seçim, aralık girilebilir.

-Resim A26-

Ekranda girilen değerler varyant olarak saklanıp tekrar kullanılabilir.

Sistem tarafından otomatik veri tipi kontrolü gerçekleştirilir. Örneğin tarih alanına karakter tipinde giriş yapılırsa
sistem hata mesajı verir.

Giriş alanı veri elemanı (data element) veya tablo alanı ile tanımlandıysa;

 Giriş Yardımı (F1 yardımı)


 Olası Giriş Yardımı (F4 yardımı), (veri elemanına arama yardımı bağlanmışsa)

kullanılabilir. Ayrıca alan açıklamaları için kitaplık referansı (dictionary referance) alınabilir. Bu durumda alan
açıklaması, tanımlandıysa kullanıcının sisteme giriş yaptığı dilde görüntülenir.

43
-Resim A27-

Seçim metinlerinin yönetimi GİT  METİN ÖĞELERİSEÇİM METİNLERİ (GOTOTEXT


ELEMENTSSELECTION TEXTS) menüsünden yapılabilir.

TEK SEÇİM KRİTERİ (PARAMETERS):


PARAMETERS <name> TYPE <typename>
PARAMETERS <name> LIKE <data_object>

Şekillerinde tanımlanır. Sistem seçim ekranında tek değer girişine izin verir.

Tanımlanan parametre programda SELECT sorgusunun WHERE cümlesinde veri sınırlama kriteri olarak
kullanılabilir.

DATA wa_carrid TYPE spfli-carrid.


PARAMETERS p_airline LIKE wa_carrid.
SELECT carrid FROM spfli INTO wa_carrid WHERE carrid = p_airline.
WRITE / wa_carrid.
ENDSELECT.

Parametrelere DEFAULT anahtar sözcüğü ile başlangıç değeri atanabilir.


PARAMETERS: value TYPE i DEFAULT 100,
name TYPE sy-uname DEFAULT sy-uname,
date TYPE sy-datum DEFAULT '20090627'.

Giriş alanı OBLIGATORY anahtar sözcüğü ile zorunlu alan haline getirilebilir. Kullanıcı bu alanı
doldurmadan programı çalıştıramaz.

PARAMETERS field(10) TYPE c OBLIGATORY.

Seçim ekranında CHECKBOX veya RADIOBUTTON tanımlanabilir. Checkbox seçilmemiş ise boşluk ‘ ‘,
seçilmişse ‘X’ değeri parametreye atanır. Radiobutton’da ise gruptan sadece bir seçenek seçilebilir. Seçili
parametrenin değeri ‘X’, diğerleri boşluktur.

PARAMETERS: a AS CHECKBOX,
b AS CHECKBOX DEFAULT 'X'.

PARAMETERS: r1 RADIOBUTTON GROUP rad1,


r2 RADIOBUTTON GROUP rad1 DEFAULT
'X', r3 RADIOBUTTON GROUP rad1,

44
s1 RADIOBUTTON GROUP rad2,
s2 RADIOBUTTON GROUP rad2,
s3 RADIOBUTTON GROUP rad2 DEFAULT 'X'.

DEĞER KÜMELERİ (SELECT-OPTIONS):


SELECT-OPTIONS <name> FOR <data_object>

Şeklinde tanımlanır. Seçim ekranında aynı veri tipinde iki giriş alanı ve karmaşık seçim kümeleri yaratmaya yarayan
bir buton görüntülenir.

Select-Options ile dört kolonlu bir dahili tablo yaratılmış olur:

 sign: Bu alan girilen değerin dahil mi (I), hariç mi (E) tutulacağını belirtir.
 option: Operatör alanı (EQ, NE, LE, LT, GE, GT, BT, NB, CP, NP).
 low: Alt limiti veya tek değeri tutar.
 High: Üst limiti tutar.

Tanımlanan parametre programda SELECT sorgusunun WHERE cümlesinde veri sınırlama kriteri olarak
kullanılabilir.

DATA wa_carrid TYPE spfli-carrid.

SELECT-OPTIONS s_airline LIKE wa_carrid.

SELECT carrid FROM spfli INTO wa_carrid WHERE carrid IN s_airline.


WRITE / wa_carrid.
ENDSELECT.

Seçim opsiyonlarına başlangıç değeri atanabilir.

DATA wa_spfli TYPE spfli.

SELECT-OPTIONS airline FOR wa_spfli-carrid


DEFAULT 'AA'
TO 'LH'
OPTION nb
SIGN i.

Giriş alanı OBLIGATORY anahtar sözcüğü ile zorunlu alan haline getirilebilir. Kullanıcı bu alanı doldurmadan
programı çalıştıramaz.

SELECT-OPTIONS s_airline LIKE wa_carrid OBLIGATORY.

NO-EXTENSION ile çoklu değer veya çoklu aralık seçimi engellenebilir. Kullanıcı tek değer veya tek aralık
seçebilir.

SELECT-OPTIONS airline FOR wa_spfli-carrid NO-EXTENSION.

Seçim kriteri olarak aralık girilmesi NO INTERVALS ile engellenebilir.

DATA wa_spfli TYPE spfli.


SELECT-OPTIONS airline FOR wa_spfli-carrid NO INTERVALS.

SEÇİM EKRANI OLAYLARI


Seçim ekranında Enter tuşlandığında, ekrandaki bir butona basıldığında veya menü fonksiyonu çalıştırıldığında önce
otomatik veri tipi kontrolü gerçekleştirilir. Veri tipi hatalı girildiyse sistem hata mesajı verir. Doğru tipte veriler
girilmişse AT SELECTION-SCREEN olay bloğu çalışır. Program yürütüldüğünde ise sıradaki (START-OF-

45
SELECTION) bloğu çalışır. Veri tipi dışındaki değer kontrolleri AT SELECTION-SCREEN bloğunda
gerçekleştirilir.

SEÇİM EKRANI TASARIMI


Benzer kriterlerin gruplanması, birden fazla elemanın aynı satırda görüntülenmesi gibi tasarımla ilgili konularda
SELECTION-SCREEN anahtar sözcüğü kullanılır.

SELECTION-SCREEN BEGIN OF LINE.


SELECTION-SCREEN COMMENT 1(10) text-001.
PARAMETERS: p1(3) TYPE c, p2(5) TYPE c, p3(1) TYPE
c. SELECTION-SCREEN END OF LINE.

-Resim A28-

SELECTION-SCREEN BEGIN OF BLOCK rad1


WITH FRAME TITLE text-002.
PARAMETERS r1 RADIOBUTTON GROUP
gr1. PARAMETERS r2 RADIOBUTTON
GROUP gr1. PARAMETERS r3
RADIOBUTTON GROUP gr1.

SELECTION-SCREEN END OF BLOCK rad1.

-Resim A29-

46
Listeler
Listeler minimum programlama yapılarak verilerin görüntülenmesi için kullanılır. Dilden bağımsızdır, metinler ve
başlıklar sisteme giriş dilinde görüntülenebilir.

 Renk ve simge eklenerek ekranda görüntülenebilir


 Çıktı alınabilir
 Internet ya da İntranette yayımlanabilir. Sistem listeleri HTML formatına otomatik dönüştürür.
 Yerel dosyalarda harici kullanım için saklanabilir.

Listelere Liste Başlığı ve dört satıra kadar Sütun Başlığı eklemek için iki yöntem mevcuttur:

 ABAP Editöründe: Git  Metin Öğeleri  Liste Başlıkları menüsünden


 Listeden: Programı kaydedip, aktifleştirdikten sonra bir kere çalıştırarak başlık yönetim ekranına Sistem 
Liste  Liste Başlığı menüsünden ulaşılabilir. Bu yöntemde liste ekranda göründüğü için başlıkların
hizalaması daha kolay yapılabilir. Yeni başlıklar program tekrar çalıştırıldığında görüntülenir.

Çalıştırılabilir programlarda listeler içinde bulundukları olay bloğu çalıştıktan sonra görüntülenirler. Bir bloğun liste
içermesi için WRITE, SKIP veya ULINE cümlesi barındırması gerekir.

Çalıştırılabilir programlarda satır detayları ile ilgili işlemler için AT LINE-SELECTION olay bloğu kullanılır.
Program ilk çalıştığında sy-lsind sistem değişkeninin değeri 0’dır. AT LINE-SELECTION olay bloğunun çalışıp
detay listesinin ekrana gönderilmesinin ardından sy-lsind değeri 1 artırılır. Bir önceki seviyeye geri dönüldüğünde
ise sy-lsind 1 azaltılır.

-Resim A30-

-Resim A31-

47
Örnek program çalıştırıldığında ekran görüntüsü şekildeki gibidir:

-Resim A32-

Satıra çift tıklanarak AT LINE-SELECTION bloğu çalıştığında ise aşağıdaki çıktı elde edilir.

-Resim A33-

Varsayılan rapor satır genişliği 83 karakter, sayfa uzunluğu 60.000 satırdır. Bu değerler REPORT cümlesinde LINE-
SIZE <columns> ve LINE-COUNT <lines_per_page> ile değiştirilebilir.

REPORT ztest_program LINE-SIZE 80 LINE-COUNT 7.

TOP-OF-PAGE olayı ile sayfa başlıkları yaratılabilir. Genellikle program çalıştırılırken girilen sorgu kriterlerinin
görüntülenmesi için kullanılır. İlk WRITE, SKIP veya ULINE cümlesiyle karşılaşıldığında çalışır.

Listeler için biçim (FORMAT) seçenekleri:

 COLOR <n> [ON|OFF] Satır arka plan rengini belirler


 INVERSE [ON|OFF] Arka plan/metin rengini tersine çevirir
 HOTSPOT [ON|OFF] Tek tıklama ile AT LINE-SELECTION olayı çalışır
 INPUT [ON|OFF] Giriş alanı
 RESET Tüm biçimleri varsayılan değere döndürür

FORMAT ile yapılan biçim ayarları bir sonraki WRITE cümlesinden itibaren etkin olur ve FORMAT COLOR
OFF veya FORMAT RESET ile sonlandırılana kadar (aynı olay bloğu içinde) etkin kalır. Her yeni olay bloğunda
biçim ayarları sıfırlanır.

48
WRITE CÜMLESİ SENTAKSI:

WRITE {[AT] [/][pos][(len|*|**)]} dobj [int_format_options] [ext_format_options] [list_elements].

AT: çıktı konumu (pos) ve uzunluğu (len) tanımlamaya yarar.

int_format_options: Dahili biçim seçenekleri

 LEFT-JUSTIFIED|CENTERED|RIGHT-JUSTIFIED: Metnin hizalaması için kullanılır. Sağa dayalı, sola


dayalı veya ortalanmış seçilebilir.
 WRITE: /(60) 'Left' LEFT-JUSTIFIED,
/(60) 'Center' CENTERED,
/(60) 'Right' RIGHT-JUSTIFIED.
 NO-GAP: Elemanlar arasındaki boşluğu kaldırır.
WRITE: 'No' NO-GAP, 'Gap'.
 UNDER other_dobj: Çıktı other_dobj’un yazıldığı kolondan itibaren yazdırılır.
DATA: carrid TYPE spfli-
carrid, connid TYPE spfli-
connid.

WRITE: 10 'Carrier', 40 'Connection'.


ULINE.

SELECT carrid connid


FROM spfli
INTO (carrid, connid).
WRITE: / carrid UNDER 'Carrier',
connid UNDER 'Connection'.
ENDSELECT.
 NO-ZERO: Alanın değeri 0 ise boşluk ‘ ‘ yazılır.
WRITE float NO-ZERO.
 DD/MM/YY: Kullanıcı profilinde önceden tanımlanmış tarih biçiminden etkilenmemek için kullanılır.
Tarih alanı WRITE ifadesinde belirtilen biçimde yazılır.
WRITE sy-datum YYMMDD.
 AS SYMBOLS, AS ICON: Listede sembol veya simge görüntülemek için kullanılır. Ancak INCLUDE
<SYMBOL> veya INCLUDE <ICON> ifadesi de koda eklenmelidir.

SAYFA DÜZENİ İLE İLGİLİ KONULAR:

 NEW-PAGE: Listede yeni sayfa yaratır.


 NEW-LINE: Liste çıktısında bir alt satıra geçmeye yarar. WRITE / ile aynı işlevi görür.
 RESERVE <n> LINES: Sayfanın sonunda n satır boşluk bırakır.
 SKIP <n>: n satır boşluk bırakır.
 SKIP TO LINE <n>: İmleci sayfadaki n. satıra konumlandırır.
 POSITION <n>: İmleci satırın n. kolonuna konumlandırır.

49
Ekranlar
Ekranda giriş alanları, çıktı alanları, radyo butonları, checkbox, botunlar kullanılarak tasarım yapılabilir. Kullanıcıdan
veri okumak ve veri görüntülemek için kullanılır.

Bütün ekranlar aşağıdaki bilgilere sahiptir:

 Attributes: 4 basamaklı sayıdan oluşan ekran adı, tanımı, ekran türü gibi bilgiler.
 Layout: Ekranda yer alan elemanlardan oluşur.
 Element List: Ekran öğelerinin konum, boyut, veri tipi gibi özelliklerini içerir.
 Flow Logic: Ekran görüntülenmeden önceki PROCESSING BEFORE OUTPUT (PBO) ve
kullanıcı hareketinden sonraki PROCESSING AFTER INPUT (PAI) işlemlerinin yönetimi yapılır.

Ekranlar programdan CALL SCREEN <screen_number>. komutuyla çağrılır. Ekran numarasına çift tıklayarak
yaratılabilir.

-Resim A34-

50
-Resim A35-

MODULE STATUS_0100 bloğunda ekran görüntülenmeden önce yapılacak işlemler yer alır.

MODULE USER_COMMAND_0100 bloğunda ise kullanıcı herhangi bir tuşa veya butona bastığında yapılacak işlemler
belirlenir. Şekildeki Layout butonuna basılarak ekran tasarımı için Grafik Düzen Editörü’ne gidilir.

51
GRAFİK DÜZEN EDİTÖRÜ İLE EKRAN TASARIMI:

-Resim A36-

Soldaki araç çubuğundan nesneler kullanılarak istenen ekran tasarımı oluşturulur.

Araç çubuğundaki butonlar:

Nesneleri seçer. Seçilen nesne sürükle bırak yöntemi ile ekranda istenen yere konumlandırılabilir.

Metin alanı ekler.

Input/Output ekler. Alanın veri girişi veya veri görüntülemede kullanılması ile ilgili bilgiler öğe
özelliklerinden yönetilir.

Checkbox ekler.

Radiobutton ekler.

Buton ekler.
Ekran alanlarına alan özelliği atamanın iki yöntemi vardır:

 Kitaplıktan veri kopyalanması: Herhangi bir ABAP Kitaplık nesnesinin özellikleri ekrandaki bir
alana kopyalanabilir. Kitaplık nesnesinin adı ekrandaki alan adı olarak atanır.
 Programdan veri kopyalanması: Programda tanımlanmış bir alanın özellikleri ekran alanına kopyalanabilir.

52
Program ve ekranda tanımlanan alanların adları aynı olduğu takdirde ekranda girilen alan değerleri PAI modülü içinde
programa otomatik olarak aktarılır. Programda yapılan düzenlemeler de PBO modülü içinde ekrana otomatik olarak
aktarılır.

Ekran Alanı Özelliklerinin Yönetimi:


Alanın veri girişine izin verip vermemesi, veri giriş alanıysa girişin zorunlu olup olmadığı, alanın ekrandaki
koordinatları, veri tipi, arama yardımı kullanılmışsa arama yardımı bilgileri gibi özelliklerin yönetilmesini sağlar.

-Resim A37-

53
Ekranda bir butona basıldığında butonun fonksiyon kodu genellikle ok_code olarak adlandırılan özel bir değişkene
atanır. PAI bloğunda hangi butona basıldığı tespit edilerek ilgili işlemler yapılabilir. Butonun fonksiyon kodu
yukarıdaki şekilde FctCode alanına yazılır.

DATA: ok_code TYPE sy-


ucomm, save_ok LIKE
ok_code, output(8) TYPE c.

CALL SCREEN 100.

MODULE user_command_0100 INPUT.


save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BUTTON_EXIT'.
LEAVE PROGRAM.
WHEN 'BUTTON_1'.
output = 'Button 1'(001).
WHEN 'BUTTON_2'.
output = 'Button 2'(002).
WHEN 'BUTTON_3'.
output = 'Button 3'(003).
WHEN 'BUTTON_4'.
output = 'Button 4'(004).
WHEN OTHERS.
output = save_ok.
ENDCASE.
ENDMODULE.

********************************************

* Flow Logic

PROCESS BEFORE OUTPUT.

PROCESS AFTER INPUT.


MODULE USER_COMMAND_0100.

Ekran çağrılırken boyutu ve konumu belirtilerek nasıl görüntüleneceği yönetilebilir.


CALL SCREEN 200 STARTING AT 37 5
ENDING AT 87 22.

Ekran çağrıldığında sistem imleci otomatik olarak ekrandaki ilk giriş alanına konumlandırır. İmlecin başka bir alana
konumlandırılması istenirse PBO modülünde değiştirilebilir.

PARAMETERS: def RADIOBUTTON GROUP


rad, txt RADIOBUTTON GROUP rad.
PARAMETERS pos TYPE

i. DATA: name(10) TYPE c.

CALL SCREEN 100.

MODULE cursor OUTPUT.


IF def NE 'X'.
SET CURSOR FIELD name OFFSET pos.
ENDIF.
SET PF-STATUS 'SCREEN_100'.
ENDMODULE.

********************************************

* Flow Logic

54
PROCESS BEFORE OUTPUT.
MODULE CURSOR.

GUI STATUS YARATILMASI:


GUI Status Menü Çubuğu, Standart Araç Çubuğu, Uygulama Araç Çubuğu ve fonksiyon tuşu ayarlarından oluşur. Her
ekran bir ya da daha fazla GUI Status’a sahip olabilir.

-Resim A38-

PBO modülünde SET PF-STATUS ve SET TITLEBAR komutlarıyla araç çubukları ve program başlığı düzenlenir.

55
Mesajlar
Kullanıcıyı programın akışıyla ilgili bilgilendirmek için mesajlar kullanılır. MESSAGE komutu program akışını
durdurarak belirtilen metni görüntüler. Mesajın nasıl görüntüleneceğini ve programın akışının nasıl devam edeceğini
mesaj tipi belirler.

Mesaj komutunun söz dizimi şu şekildedir:

MESSAGE { msg | txt } [message_options].

SAP tarafından sağlanan standart mesajlar görüntüleneceği gibi kullanıcı kendi istediği metni de mesaj olarak
kullanabilir. SAP’de altı adet mesaj tipi bulunmaktadır:

 S: Durum mesajı. Bir sonraki ekranda durum çubuğunda görüntülenir. Genellikle işlemin
başarılı gerçekleştiğini bildirmek için kullanılır.
 E: Hata mesajı. Mesaj metni anında ekranda veya durum çubuğunda görüntülenir ve program akışı durdurulur.
 W: Uyarı mesajı. Mesaj metni ekranda veya durum çubuğunda görüntülenir.
 I: Bilgilendirme Mesajı. Mesaj metni popup penceresinde görüntülenir. Program kaldığı yerden akışına
devam eder.
 A: Sonlandırma. Metin popup penceresinde görüntülenir ve program sonlanır.
 X: Mesaj metni görüntülenmez, program short dump verir.

1. msg:
Sistemde T100 tablosunda bulunan standart mesajlardır. Mesaj tipi, mesaj numarası ve mesaj sınıfı belirtilebilir. t
mesaj tipini, n mesaj numarasını, id de mesaj sınıfını belirtir. SE91 işlem kodundan standart mesaj sınıfları
görüntülenebilir ve yeni mesaj sınıfları yaratılabilir.

SABAPDOCU mesaj sınıf varsayılan mesaj sınıfıdır. Mesaj komutunda mesaj sınıfı belirtilmezse
SABAPDOCU sınıfı kullanılır.

... { tn }
| { tn(id) }
| { ID mid TYPE mtype NUMBER num }
| { oref TYPE mtype } ... .

 MESSAGE i014.
 MESSAGE i014(sabapdocu).
 DATA: mid TYPE sy-msgid VALUE 'SABAPDOCU',
mtype TYPE sy-msgty VALUE 'I',
num TYPE sy-msgno VALUE '014'.

MESSAGE ID mid TYPE mtype NUMBER num.

2. txt:
Mesaj sınıfı belirtilmeksizin kullanıcı istediği bir metni mesaj olarak görüntüleyebilir.

... text TYPE mtype... .

MESSAGE 'Test Message' TYPE 'I'.

56
3. Mesaj Seçenekleri:
... DISPLAY LIKE dtype

Mesaj tipinin görüntülendiği simgeyi değiştirir.

MESSAGE 'Test Message' TYPE 'E'.

Kodu kullanıldığında Test Message metni durum çubuğunda hata simgesi ile görüntülenir.

-Resim M1-

Display Like kullanılarak program akışını etkilemeden metnin farklı bir türde görüntülenmesi sağlanabilir.

MESSAGE 'Test Message' TYPE 'E' DISPLAY LIKE 'I'.

-Resim M2-

57
ABAP Kitaplığı
Temel Bilgiler

-Resim K1-

Se11; Abap’ın data tiplerinin yaratıldığı ve yönetildiği işlemdir. Sistemde kullanılan tüm data tipleri SE11 içerisinde
tanımlıdır. Burada tanımlı bir data tipinde yapılan değişiklik, tüm sistemde etkili olacaktır. Bu şekilde, sistemdeki veri
bütünlüğü, güvenilirliği ve güvenliği sağlanır.

Burada, tanımlı belli başlı data tipleri kullanılarak, database ile ilintili bir çok ( tablo, yapı, vs..) nesne yaratılabilir. Bu
nedenle Abap Dictionary, geliştirmelerde kullanılan nesnelerin mantıksal yapısını tanımlamanın yanı sıra database ile
olan ilintilerini görüntülemekte de yardımcı olur. Aynı zamanda SE11 yardımı ile bir ekran alanına girdi yardımı
sağlanabilir.

SE11 ‘de tanımlanabilen veri tipleri; Tables, Views, Data Elements, Structures, Table Types, Type Groups, Domains,
Search Helps, Lock Objects olarak sayılabilir. Giriş ekranında da görülebildiği gibi bu tiplerden biri seçilerek
görüntülenebilir, değiştirilebilir veya bu tiplerden bir yenisi yaratılabilir.

58
-Resim K2-

Burada bir database tablosu adı girip “Display” tuşladığımızda, bu tablo içeriğini (tanımı, tipini, içerisinde var olan
alanları, oluşturulma esaslarını) görüntüleyebiliriz.

59
-Resim K3-

1 23 45
Gelen ekran üzerinde bazı gerekli işlemler için numaralandırılan tuşlara

bakarsak, ( 1 ) tuşunu kullanarak tablo üzerinde değişiklik yapmak

( 2 ) tuşunu kullanarak hata denetimi yapmak

( 3 ) tuşunu kullanarak tabloyu etkinleştirmek

( 4 ) tuşunu kullanarak içeriğini görüntülemek

( 5 ) tuşunu kullanarak teknik özelliklerini belirlemek mümkündür.

Aynı şekilde Se11’in diğer işlevleri için de aynı tuşlar, aynı kullanım özellikleri ile mevcuttur.

60
Örneğin;
Data Element sekmesine bir alan adı girildiğinde aşağıdaki gibi o alana ait açıklamaları görmek mümkündür:

-Resim K4-

Ya da bir structure için;

-Resim K5-

61
Bir tablo tipi için;

-Resim K6-

Bir table view için;

-Resim K7-

Ekran görünümleri oluşur.

Burada bir tablo oluştururken veri sözlüğü kullanılmaktadır ve bu süreçte Domain,Data Element ve Tablo ilişki
içindedir. Burdan yola çıkarak veri tiplerini incelersek;

62
 Bir domain aslında bir fielddır. Domaini oluştururken domainin int mi, string mi, tarih mi, ağırlık ölçü
birimi mi gibi seçimleri belirtiriz. Ayrıca domain ile verinin kaç karakter uzunluğunda olacağını, decimal
ise ondalık kısmının uzunluğunun ne olacağını belirleriz.
 Data element ise domain ile tablo arasında kalan bir geçiş yapısıdır. Burada fieldı tabloya koyduğumuzda
verinin kısa açıklamasını, daha kısa açıklamasını, en kısa açıklamasını yazabiliriz. Bu yazım tamamen
raporlama ile alakalıdır. Mesela bir ALV raporunda gösterilen alanın başlığı burdan gelmektedir.
 Tablo için ise, bir veritabanı tablosunu göz önüne aldığımızda; kendi içerisinde tanımlı alanların adları
vardır ve bu alanlara data elementler veya predefined type dediğimiz tiplerden biri atanır. Sap’nin kendi
standart tabloları vardır. Özel bir sebep gerekmedikçe tablo oluşturulmaz.
 Table view ise bir çok farklı tablonun alanlarının bir arada kullanılmasıyla oluşturulan bir görüntüleme
yapısıdır. Birleştirilecek tablolar arasında ortak anahtar alanlar belirtilerek ve istenirse şartlar da
eklenerek,bu tabloların istenen alanları görüntülenir.
 Data Structure ise yine bir raporlama ya da görüntüleme işleminde kullanılmak üzere, database’de yer
tutmayan ,üzerinde alan bilgileri(fields) tutan yapıdır.

-Resim K8-

 Search Help tipi, bir seçim ekranında girilen parametreler için F4 tuşuna basılarak çağırılan, olası
seçilebilecek(önerilen) verileri listelemek için kullanılan yardım menüsüdür. Burada yardım menüsü
oluşturulacak parametre ile birlikte onu daha iyi açıklayıcı ve destekleyici diğer yan alanlarla da
tanımlanır.
 Lock Object bir nesnenin bir başka kullanıcı tarafından değiştirilmesini önlemek için kullanılır. İçerisinde
kullanıcı tarafından belirlenen kilitleme bilgisini tutar. Bir başka kullanıcının ve uygulamanın o an kullanılan
nesneye ya da örneğe erişmesini engeller.

63
Tablo Oluşturma
Yeni bir database tablosu oluşturmak için SE11’de database table alanına Z ile başlamalayan bir isim giriyoruz. Tablo
alanına ZDENEME yazıp ve create tuşuna basılır. Önce tabloda zorunlu alanları doldurmak zorundayız. Tablonun
kısa açıklamasını yazıp Delivery Class’ı A ve de Data browser/ Table View Maintenance alanı gösterim ve bakım
tercihlerine göre seçilir.

-Resim K9-

Sonra Fields tabına geçerek ilk alan adını yazalım. İlk alan adımız database tablolarda Mandt(Üst birimi temsil eder)
olmak zorunda. Biz eğer tablo oluşturacaksak ilk field mutlaka mandt ve data element mandt olmak zorunda .

-Resim K10-

Ekranda initial values yazan yerin işaretli olması bu tabloya eklenen kayıtta mutlaka mandt dolu olması gerektiğini
gösterir. Bunun gibi alan adları ve data elementleri belirtilerek tabloya alanlar eklenebilir. Bunun haricinde predefined
type butonuna basarak, data element ismi yazmak yerine direkt o alanın veri tipini kendimiz yazabiliriz. Bunu
yaparken F4′e yardımı da kullanılabilir.

64
-Resim K11-

Örneğin ilk alan için numc karakterini seçelim bir ID gibi hem integer hem string veri girebilmek mümkün olsun,
Ayrıca bu tabloya kaç karakterlik veri girebilmeliyiz bunu belirten bir sayı numc’in yanına yazıyoruz. Mesela standart
id numaraları tutmak için 10 haneli numc diyelim . İnitial values’i ve keyi bu alanda da seçmeliyiz. Anahtar alansız ve
mandtsiz tablo yaratılamaz.

-Resim K12-

65
Bundan sonra kişi adı ve soyadı alanları oluşturalım:

-Resim K13-

Isim alanı için “Name1” data elementini seçtik. Name1 zaten sistemde varolan bir data elementtir.

Şimdi soyad için biz kendimiz bir data element oluşturalım. Data element yazan yere ZSOYAD yazıp Üzerine çift
tıklayınca tablodan çıkmadan önce bize değişikleri kaydedip kaydetmeyeceği sorusu gelecektir ‘yes’ olarak
yanıtlayarak devam edelim. Bize yeni bir data element oluşturmamız gerektiğini sorar buna da ‘yes’ diyerek ilk data
elementimizi oluşturacağımız ekrana geçelim. Domainin kısa açıklamasını yazdıktan sonra (Elementary type
sekmesinde var olan bir veri tipi seçilebilir) Predefined seçeneğini seçip data type’ı char uzunluğunu 40 yapalım.
Sonra Field label yazan yere gelerek. Farklı uzunluklardaki açıklamaları yazalım.

66
-Resim K14-

-Resim K15-

67
Data elementini aktif hale getirdikten sonra tabloya geri dönelim.( Eğer ilerde 40 karakter uzunluğu yetmezse
predefined type ile boyutunu değiştirebiliriz. Eğer data elementi değiştirirsek ona bağlı tüm tablolarda field uzunluğu
değişir.)

Şimdi tabloya cins alanı ekleyelim. Data elementi ise ZCINS olsun. ZCINS data elementini oluşturalım. Bu sefer bu
data elementi bir domain ile bağlayalım. Domain ismine ZDOMCINS ismini verip çift tıklayalım.

-Resim K16-

Domainin kısa açıklamasını yazdıktan sonra karakter tipini char uzunluğunu 1 verelim. Sonra value range tıklayıp F-
Bayan, M-Erkek yazalım.

68
-Resim K17-

69
-Resim K18-

Domain’ i aktif hale getirelim. Domaini aktif hale getirirken çıkan pencerede zcins’i de seçersek aynı anda hem
domain hem data elementi aktifleştirilmiş olur. Sonra yeniden tabloya geri dönelim.

-Resim K19-

En son tablomuzu aktif edebilmek için ‘Technical Settings’ denilen ayarları yapmalıyız. Bunu ise Technical Settings
butonu ya da menüden GOTO-> Tecnihcal settings’den ayarlıyoruz. Orada Data Class’ ı APPL0 ve Size Category’ i
seçiyoruz. Size category tabloda kaç kayıt olacağı ile ilgilidir. Tabloda kaç kayıt olacağını önceden tahminen oraya
yazarsanız büyük performans farklılıkları görebilirsiniz.

70
-Resim K20-

-Resim K21-

71
View Oluşturma
Bir view bir tablodan farklı olarak databasede saklanıp yer tutmayan bir veri tipidir. Bir ya da daha çok database
tablosunun sadece istenilen alanlarından(fields) oluşturulur. İki tabloyu birbirine inner join yardımıyla bağlayıp
istenen verileri çekerken kısıtlamalar da belirlenebilir.

Se11’de view alanına ZDENEME1 yazarak; gelen view tipleri;

 Projection view – Tek bir tablodan bazı alanları alır.


 Help View – Arama yardımı için kullanılır.
 Database View – Bir ya da daha çok tablonun inner join ile birleştirilerek görüntülenmesiyle oluşur.
 Maintenance View – Bir uygulamada kullanılacak nesnenin yaratılmasını sırasında yardımı olur, bu veri
bir çok tablonun arasında dağıtılarak görüntülenebilir .

Projection view ve database view türü olanları abap programlarında kullabiliriz.

-Resim K22-

Her uygulama için özel olarak şekillendirilebilecek ve abap uygulamalarında en çok uygulanan database view türü bir
veri oluşturalım:

72
-Resim K23-

Gelen sayfada önce kısa açıklama kısmına tanımı daha sonra Tables sekmesine birleştirilecek tabloların adlarını
yazıyoruz. Daha sonra “join conditions” bölümüne inner join işleminde olduğu gibi; tablolar arasında ortak olan
anahtar alanları yani hangi alanlar üzerinden birleşeceklerini yazarız. Tabloda görüntülenecek alanları ise ‘View Flds’
sekmesinden seçiyoruz.

73
-Resim K24-

Burada “table fields” butonuna basarak ilk ekranda girmiş olduğumuz tabloların alanlarını görüntülemek ve viewda
görüntülenmek istenen alanları, gelen ekrandaki checkboxları tıklayarak seçmek mümkündür. Burada tanımlanan
bütün tablolardan istediğimiz kadar alan seçimi yapmak mümkündür.

View’da görüntülenecek alanlara kısıtlamalar belirlemek için ‘selection conditions’ sekmesine giriyoruz;

-Resim K25-

Yine ‘table fields’ butonunu kullanarak elimizdeki tabloların alanlarını seçebilir ve o alanlar için istediğimiz
operatörleri ve karşılaştırma değerlerini girebiliriz. Burada aynı bi select cümlesinde olduğu gibi mantıksal
operatörleri ve de And/Or gibi bağlaçlarla şartları birbirine bağlamayı unutmamalıyız.

74
Bunları ayarladıktan sonra ‘ Save’ butonuna basarak yaptığımız viewı aktif hale getirdikten sonra abap programlarında
kullanmamız mümkündür.

75
Tablo Bakım Ekranı
Tablo bakımı yaratıcısı, bir tablo ya da view ‘a veri eklemek için bir bakım ekranı yaratmak üzere kullanılır. Tabloyu
ve alanlarını yarattıktan sonra aktif hale getirip, o tabloya bakım yapabilmek için Utilities>Table Maintenance
Generator tıklayarak başlatılır.

-Resim K26-

76
Gelen ekranda;

-Resim K27-

İlk olarak bir authorization group( giriş yetkisi olan grup) seçilir bu seçim tablo veya viewa bakım yapabilecek
kullanıcıları sınırlamak içindir. “&NC&” seçimi tüm kullanıcıların erişebilmesini sağlar.
Function group ise bakım modullerinin hangi fonksiyon grubu içerisinde yaratılacağını belirtmek için seçilir. Biz
burada ‘ZTEST’ adıyla kendi grubumuzu yaratıyoruz.

Maintenance type (one - two-step dialog) getirilecek bakım ekranının bir ya da iki aşamalı olması için seçilir. One-
step diyalog tablo ya da view’daki bütün alanları içeren yalnızca bir genel bakış ekranı getirir.two-step diyalogda ise,
yalnızca anahtar alanlar ve text alanları ilk ekranda, diğer alanlar ise ikinci detay ekranında gösterilir.

Maintenance screen no bakım ekranlarının numarasını,recording routine ise ekrandan girilen alanların nasıl bir iletişim
yoluyla kayda alınacağına dair bir seçimdir.

Biz one step seçtikten sonra, ‘Find Screen Number’ butonuna tıklayarak bakım ekranı için numara alıyoruz.

77
-Resim K28-

Bu seçimi de yaptıktan sonra üst soldaki ‘Create’ tuşuna basarak bakım ekranlarını yaratmış oluyoruz. Bundan sonra
yapılacak olan SM30 transactionını kullanarak yarattığımız tabloya eleman eklemek olacak.

-Resim K29-

SM30 ekranında bakım yapılacak tablo/view adı yazılıp ‘Maintain’ butonuna basıldığında, gelen ekranda;

78
-Resim K30-

‘Yeni girişler’ toolbar butonuna basılarak yeni giriş yapmak, kalem butonuna basarak da mevcut girişlerin anahtar
alanları hariç diğer field’ ları düzenlemek mümkündür.

79
SE16
Sap giriş ekranında transaction alanına ‘se16’ yazdıktan sonra gelen tablo görüntüleme işlemidir.

-Resim D1-

1 2 3
Burada görünen girdi alanına görüntülenmek istenen tablonun adı girilir ve (1) nolu butona basılır ise tabloyu
görüntülemek için seçim yapmak üzere tablo alanları görüntülenir.

-Resim D2-

1 Numaralı butonu tıklayarak gelen seçim ekranında tablonun alanları için kısıtlar belirlenebilir. F4
help özelliği olan alanlar için yardım alınabilir.
2 Numaralı create entries butonu ise abap kitaplığında yer alan ve tablo bakımı yaratılarak, izin verilmiş
tablolar için değişiklik yapma, eleman ekleme işlemi yapmak üzere kullanılır.
3 Numaralı buton ile görüntüleme seçeneklerini değiştirmek mümkündür:

80
-Resim D3-

Bu menüde görüntüleme seçeneklerini; Alv grid görüntüsü olarak, Alv list olarak veya kendi standardında
listelemek mümkündür. ‘Keyword’ bölümü ise, listenin sütun başlıklarının; ‘Field name’ seçili ise alan adları, eğer
’Field label’ seçili ise alan adlarının açıklamalarının görüntülenmesini sağlar.

-Resim D4-

81
Bu ekranda daha önce de SE11’de çağrıldığı ve kullanıldığı gibi tabloda görüntülenmek istenen kayıtlar için kısıtlar
belirlemek, f4 help seçeneği olan giriş alanları için yardım almak mümkündür.

Ayrıca bir tablo için hazırlanan sorgu alanlarının bileşenlerini tek bir varyant altında saklamak ve gerektiğinde aynı
alanlara aynı değerleri tekrar girmek yerine bu varyantı çağırarak bu tekrardan kurtulmak mümkündür. Bu işlem için
menüden Goto>Variants sekmesini kullanıyoruz;

-Resim D5-

Burada ’Get’ seçildiğinde var olan varyantın bileşenlerini ekran alanlarına getirme, ‘display’ ile görüntüleme, ‘delete’
ile silme ve ‘save as variant’ ile de varyantı kayıt etme işlemi yapılır.
Variant kaydetmek için; ‘Save as Variant’ denildiğinde aşağıdaki ekran gelir;

-Resim D6-

Burada varyant adı ve varyant tanımı girilmesi mecburidir. Kayıt ekranındaki diğer bileşenlerle ise varyantın seçim
ekranı üzerinde istenen değişiklikleri yapmak mümkündür. Variant save edildikten sonra ‘Goto>Variants>Get’
menüsünden çağırılabilir.

Giriş ekranında istenen seçimler yapıldıktan sonra ‘F8’ ya da ‘execute’ butonuna basılmasıyla tablonun
görüntülenmesi sağlanır.

82
83
Smart Forms
SAP’ nin sunduğu Smart Form yapısı, basit grafik araçlarını kullanarak form yapısı oluşturmayı sağlar. Bir çıktı almak
istenildiğinde ihtiyaç olunan şeyler bir form yapısı ve verinin gönderileceği programdır. Smart Forms başlangıç
ekranına “SMARTFORMS” işlem kodu ile girmekteyiz.

-Resim S1-

-Resim S2-

Bir Smart Form yaratıldığında, sol tarafta bulunan ağaç yapısı iki ana başlık içerir:

 Genel ayarlar
 Sayfalar ve Pencereler

84
Genel Ayarlar
Form ile ilgili genel ayarların yapıldığı kısım başlığıdır. Bulunduğu başlık altında Form Niteliği, Form Arayüzü ve
Genel Tanımlar başlıkları bulunmaktadır.

Form Niteliği
Bu kısımda Smartform ile ilgili tanımları yapıyoruz. Çıktı seçenekleri kısmında Smartform’ un bize verecek olduğu
çıktıyla ilgili ayarlamaları yapıyoruz.

Form Arayüzü
Bu kısımda Smartform’ a giriş ve çıkış yapacak olan parametreleri belirliyoruz. Smartform’ un daha kolay anlaşılması
için bu yapıyı bir fonksiyon gibi düşünebilirsiniz. İçe aktar, Dışa aktar ve Tablolar kısmında, standart olarak
tanımlanmış olan parametreleri işleve göre değişen şekilde kullanabilmekteyiz.

Genel Tanımlar
Bu kısımda ise Smartform içinde kullanacak olduğumuz genel veri tanımlamalarını yapıyoruz. Örneğin; Smartform
içinde bir veriyi birden çok yerde kullanacaksak bu veriyi her yerde ayrı ayrı tanımlamak yerine “Genel Tanımlar”
kısmında tanımlamak ve kullanmak performans ve düzen açısından bize hız katacaktır.

Sayfalar ve Pencereler
Bir Smartform Sayfalar, Çıktı Alanları, Adresler, Grafikler, Veriler ve Kelimelerden oluşur. Bir çıktı alanında
dinamik ve statik tablo tiplerini satırlarda ve sütunlarda verileri görüntülemek için kullanabiliriz. Daha fazla yapılar
için satır tiplerini ve satır formatlarını kullanabiliriz. SAP çıktı alanlarını “Pencere” olarak tanımlamaktadır. Bu
pencereleri istediğimiz gibi sayfa içine yerleştirebilmekteyiz. Verileri görüntülemek için iki çeşit çıktı alanı
bulunmaktadır: Ana Pencere(Sistem tarafından standart olarak sunulan) ve Yeni Pencere (Kullanıcı tarafından
yaratılan).

-Resim S3-

Her Pencereyi birbirinden ayrı olarak yapılandırabildiğimiz için her pencerenin içerisine yukarıda bulunan resimde
göründüğü gibi öğeler ekleyebiliyoruz.

Sayfayı taslak olarak görmek istediğimizde “Form Painter” tuşunu kullanarak sayfayı görüntüleyebilmekteyiz.

85
-Resim S4-

Sayfanın görünümü şu şekildedir:

-Resim S5-

Form Painter’ ın bize sağladığı fonksiyonlardan bazıları:

 İçerdiği cetvel yapısı sayesinde sayfayı tasarlama


 İşaretçinin pozisyonunun cetvel üzerinde görünmesi
 Bir pencerenin boyutu değiştirilirken boyut bilgilerinin görüntülenmesi
 Form üzerinde görüntü yakınlaştırma ve uzaklaştırma
 Arka Plana Taranmış olan resimleri ekleyebilme

86
Düzenleyici

Smart Forms içinden bulunan düzenleyici sayesinde form içinde görüntülenecek olan yazıları ve verileri
belirlediğimiz ve istediğimiz şekilde şekillendirerek ekrana getirebiliriz.

-Resim S6-

Bunlara ek olarak eğer Pencerelere eklediğimiz Metin alanlarında form içerisinde olan verileri veya ABAP
programından Smart Forma gönderilmiş olan verileri kullanmak istersek aşağıda bulunan resimde gösterildiği gibi
verilere ulaşabiliriz.

87
-Resim S7-

Resimde gösterildiği üzere ilk olarak “Form Painter” tuşunun hemen yanındaki “Alan Listesi Aç/Kapa” tuşunu
kullanıyoruz ve sol alt kısımda kırmızı çerçeve ile gösterilen “Alan Adı” kısmı ekranda görüntüleniyor. Daha sonra
kullanmak istediğimiz veriyi orada bulunan liste içerisinden seçerek metin alanına sürüklüyoruz ve bırakıyoruz. Artık
istediğimiz veriyi Metin alanında gösterebilmekteyiz.

88
Table Painter
 Table Painter dediğimiz düzenleyiciyi bir pencere içerisinde şablon ve tablo tasarlamak için kullanırız.
 Table Painter’ ın sunduğu özelliklerden bazıları şunlardır:
 Satırlar ve sütunlar çizmek
 Satırlar üzerinde kes, kopyala, ekle ve sil gibi işlemlerin yapılması
 Hücre boyutlarını ve hücrelerin dış çerçevelerini yapılandırmak

-Resim S8-

Yukarıda bulunan resimde tablo için tanımlanan satırları görebilmekteyiz. Bunlar; ORTAALAN, USTALAN ve
USTALAN2. Bu satır tiplerini tablo içine herhangi bir yerde satır eklediğimizde kullanabiliriz. Resimde görünen
“AYRINTILAR” tuşu ise satır bilgilerinin daha teknik görünümü için kullanılmaktadır:

89
-Resim S9-

Hemen üst kısımda bulunan resimde TABLO sekmesinin altında bulunan “AYRINTILAR” kısmının detayları
görünmektedir.

Diğer sekmelere göz atacak olursak;

 VERİLER: Tablo içinde kullanacak olduğumuz döngüsel verileri tanımlama


 HESAPLAMALAR: Belli alanlar için matematiksel hesaplamalar yapma
 ÇIKTI SEÇENEKLERİ: Formun vereceği çıktının hangi stili kullanacağı (SMARTSTYLES)
 KOŞULLAR: Belli alanlar için koşul belirlenmesi

90
Veri Gönderme İşlemi

KULLANIM
Bir form bastırılacağı zaman sadece iki fonksiyon modülü kullanılmaktadır. İlk fonksiyon sistem tarafından
oluşturulan fonksiyon modülünün ismini bulmak için form ismini kullanmaktadır.

Sistem tarafından Smart Form için üretilen fonksiyon modülü bir sistem için tek bir isim taşır ve başka bir sisteme
taşındığında bu isim değişebilir. Bu yüzden form adını kullanarak bahsettiğimiz ilk fonksiyon modülünü kullanmak
Smart Form için yaratılan fonksiyon isminin bulunması açısından çok önemlidir.

PROSEDÜR
İlk olarak “rs381_fnam” tipinde bir veri yaratıyoruz;

DATA : lf_fm_name TYPE rs38l_fnam.

Daha sonra sistem tarafından üretilen form adının alınması için 'SSF_FUNCTION_MODULE_NAME' fonksiyonunu
çağırıyoruz;

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'


EXPORTING
formname = 'ZTEST_SMART_FORMS'
IMPORTING
fm_name = lf_fm_name
EXCEPTIONS
no_form =1
no_function_module = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'Form veya fonksiyon modülü bulunamadı!!!' TYPE 'E'.
ENDIF.

Bu fonksiyonu programımız içinde çağırdıktan sonar “lf_fm_name” isimli veri öğemizin içinde
“ZTEST_SMART_FORMS” isimli form için üretilen fonksiyon modülünün ismi bulunmaktadır.

Yaptığımız SMART FORMS’ u çağırmak için ise “CALL FUNCTION” komutundan sonra “lf_fm_name” değerimizi
gönderiyoruz;

CALL FUNCTION lf_fm_name


* EXPORTING
* is_eparametre1 = gv_eparametre1
* IMPORTING
* is_iparametre1 = gv_iparametre1
* TABLES
* is_tparametre1 = gv_tparametre1
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error =3
user_canceled = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LV_RC = SY-SUBRC.
ENDFORM.

91
Çağırdığımız form ile program arasında fonksiyonun EXPORTING, IMPORTING ve TABLES kısımlarını kullanarak
veri alışverişi sağlayabiliyoruz.

Bu işlemlerden sonra program içinde SMARTFORM’u çağırmış bulunmaktayız.

-Resim S10-

92
Smart Styles
Smartform’da metin alanlarının paragraf ve karakter biçimlerini gruplamak ve standartlaştırmak için stillerden
(SMART STYLES) yararlanırız. Stillerle ilgili işlemleri SMARTSTYLES işlem koduyla gerçekleştirmekteyiz.

-Resim S11-

-Resim S12-

93
Smart Styles ile yaratılan stiller Smart Form’un tamamına veya formun belli öğelerine atanabilir.

Her formda:

 Varsayılan değerlerin tutulduğu başlık verisi


 Girinti ve aralıklar, yazı tipi, sekmeler, numaralandırma ve gruplandırmayı içeren paragraf biçimleri
 Yazı tipi özellikleri ve standart ayarlarının yer aldığı karakter biçimleri
 Paragraf ve karakter biçimleri renk özellikleri
 Önizleme bulunur.

Smart Style Başlık Bilgileri:


Başlık bilgilerinde stilin varsayılan değerleri tutulur. Karakter ve paragraf biçimlerinde başka değerler belirtilmezse
sistem bu varsayılan değerleri kullanır.

Smart Style başlık bilgilerinde:

 Varsayılan paragraf
 Varsayılan sekme aralıkları
 Yazı tipi ve büyüklüğü belirtilmelidir.

Paragraf Biçimi Yaratılması:

-Resim S13-

Smart Styles editöründeki ağaç yapısından Paragraf biçimi seçilip Yarat butonuna tıklayarak yeni paragraf biçimi
yaratabiliriz.

 Grnt. ve aralıklar sekmesinden paragraf hizalaması, sağ – sol kenar boşlukları, girinti, ve satır aralık değerlerini
belirleriz.
 Yazı tipi sekmesinden yazı türü, yazı büyüklüğü, yazı stili ve yazı rengini seçebiliriz.
 Sekmelerden “Tab” tuşuna basıldığında yaratılacak girintinin konumunu belirleriz.
 Numaralandırma ve gruplama sekmesinden maddelendirme ve numaralandırma bilgilerini yönetiriz.

94
-Resim S14-

Karakter Biçimi Yaratılması:


Yeni karakter biçim yaratmak için editördeki ağaç yapısından Karakter bçm.’i seçip yarat butonuna tıklarız.

 Standart ayarlar sekmesinden alt simge, üst simge ve barkod özelliklerini yönetebiliriz.
 Yazı tipi sekmesinden aynı paragraf biçimindeki gibi yazı türü, yazı büyüklüğü, yazı stili ve yazı rengini
seçebiliriz.

95
-Resim S15-

96

You might also like