BAPI

BAPI

Açılımı Business Application Programming Interface. Süreçlere ve iş verilerine erişim sağlarlar. Fonksiyon Builder içerisinde tanımlanırlar. BOR (Business Object Repository) saklanırlar. BAPI işlem kodu ile BAPI Explorer çalıştırılır. BAPI Explorer sistemde tanımlı BAPI nesne tiplerini görüntüler.

Örnek: BAPI Explorer ile User nesne tipini görüntüleyen ve BAPI_USER_GET_DETAIL kullanımını gösteren örnek.

1. BAPI işlem kodunu çalıştırın. Sol taraftaki menüden Alphabetical sekmesini seçin.

2. USER nesne tipini açın, içerisindeki GetDetail yöntemine çift tıklayın.

3. Function module alanındaki isme çift tıklarsanız Fonksiyon Builder’ a yönlenirsiniz.

4. BAPI Explorer’ dan Business object (USER) ismine çift tıklarsanız USER nesne tipine bağlı nesneleri görüntüleyebilirsiniz.

5. Fonksiyon Builder içerisinden BAPI_USER_GET_DETAIL fonksiyonunu F8 tuşu ile çalıştırın. USERNAME alanına kullanıcı adınızı girin ve çalıştırın.

6. Sonuç olarak girdiğiniz kullanıcıya ait bilgiler dönecektir.

Örnek: Parti stokları tablosundaki bir partiyi bloke stoğa alan ve bloke stoktan çıkaran örnek. Girilen parti bilgileri mchb tablosunda kontrol edilir. Parti mevcut ise bilgileri ekrana getirilir. Ekrana yerleştirilen butonlar ile 344 bloke stoğa alma ve 343 bloke stoktan çıkarma malzeme hareketleri gerçekleştirilir.

1. Aşağıdaki program kodunu ekleyin.

TABLES: mchb, mara.
TYPES: BEGIN OF gy_mchb,
matnr TYPE mchb-matnr,
werks TYPE mchb-werks,
lgort TYPE mchb-lgort,
charg TYPE mchb-charg,
clabs TYPE mchb-clabs,
cspem TYPE mchb-cspem,
meins TYPE mara-meins,
END OF gy_mchb.
DATA: gs_mchb TYPE gy_mchb,
ok_code LIKE sy-ucomm.
PARAMETERS: pa_matnr LIKE mchb-matnr OBLIGATORY,
pa_werks LIKE mchb-werks OBLIGATORY,
pa_lgort LIKE mchb-lgort OBLIGATORY,
pa_charg LIKE mchb-charg OBLIGATORY.

CLASS l_cls_test DEFINITION.
PUBLIC SECTION.
METHODS:
verileri_bul,
tahditsiz_stoga_al,
bloke_stoga_al.
ENDCLASS.
CLASS l_cls_test IMPLEMENTATION.
METHOD verileri_bul.
SELECT SINGLE matnr werks lgort charg clabs cspem
FROM mchb
INTO CORRESPONDING FIELDS OF gs_mchb
WHERE matnr = pa_matnr AND
werks = pa_werks AND
lgort = pa_lgort AND
charg = pa_charg AND
lvorm EQ space.
IF sy-subrc <> 0.
MESSAGE ‘Parti bulunamadı!’ TYPE ‘E’.
ENDIF.
SELECT SINGLE meins FROM mara INTO gs_mchb-meins
WHERE matnr = gs_mchb-matnr.
ENDMETHOD.
METHOD bloke_stoga_al.
DATA : lv_mvtcode   TYPE bapi2017_gm_code,
ls_head_ret  TYPE bapi2017_gm_head_ret,
ls_head      TYPE bapi2017_gm_head_01,
lt_return    TYPE STANDARD TABLE OF bapiret2,
ls_return    TYPE bapiret2,
lt_mvt_items TYPE STANDARD TABLE OF bapi2017_gm_item_create,
ls_mvt_items TYPE bapi2017_gm_item_create.
lv_mvtcode                  = ’04’.
ls_head-pstng_date          = sy-datum.
ls_head-doc_date            = ls_head-pstng_date.
ls_head-pr_uname            = sy-uname.
ls_head-header_txt          = ‘Tahditsizden blokeye’.
ls_mvt_items-material       = gs_mchb-matnr.
ls_mvt_items-batch          = gs_mchb-charg.
ls_mvt_items-plant          = gs_mchb-werks.
ls_mvt_items-stge_loc       = gs_mchb-lgort.
ls_mvt_items-move_type      = ‘344’.
ls_mvt_items-spec_stock     = space.
ls_mvt_items-entry_qnt      = gs_mchb-clabs.
ls_mvt_items-entry_uom      = gs_mchb-meins.
ls_mvt_items-move_mat       = ls_mvt_items-material.
ls_mvt_items-move_batch     = ls_mvt_items-batch.
ls_mvt_items-move_plant     = ls_mvt_items-plant.
ls_mvt_items-move_stloc     = ls_mvt_items-stge_loc.
APPEND ls_mvt_items TO lt_mvt_items.
CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’
EXPORTING
goodsmvt_header  = ls_head
goodsmvt_code    = lv_mvtcode
IMPORTING
goodsmvt_headret = ls_head_ret
TABLES
goodsmvt_item    = lt_mvt_items
return           = lt_return.
LOOP AT lt_return INTO ls_return WHERE type CA ‘AEX’.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
WITH ls_return-message_v1 ls_return-message_v2
ls_return-message_v3 ls_return-message_v4.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.
MESSAGE ls_head_ret-mat_doc TYPE ‘I’.
ENDIF.
ENDMETHOD.
METHOD tahditsiz_stoga_al.
DATA : lv_mvtcode   TYPE bapi2017_gm_code,
ls_head_ret  TYPE bapi2017_gm_head_ret,
ls_head      TYPE bapi2017_gm_head_01,
lt_return    TYPE STANDARD TABLE OF bapiret2,
ls_return    TYPE bapiret2,
lt_mvt_items TYPE STANDARD TABLE OF bapi2017_gm_item_create,
ls_mvt_items TYPE bapi2017_gm_item_create.
lv_mvtcode                  = ’04’.
ls_head-pstng_date          = sy-datum.
ls_head-doc_date            = ls_head-pstng_date.
ls_head-pr_uname            = sy-uname.
ls_head-header_txt          = ‘Blokeden tahditsize’.
ls_mvt_items-material       = gs_mchb-matnr.
ls_mvt_items-batch          = gs_mchb-charg.
ls_mvt_items-plant          = gs_mchb-werks.
ls_mvt_items-stge_loc       = gs_mchb-lgort.
ls_mvt_items-move_type      = ‘343’.
ls_mvt_items-spec_stock     = space.
ls_mvt_items-entry_qnt      = gs_mchb-cspem.
ls_mvt_items-entry_uom      = gs_mchb-meins.
ls_mvt_items-move_mat       = ls_mvt_items-material.
ls_mvt_items-move_batch     = ls_mvt_items-batch.
ls_mvt_items-move_plant     = ls_mvt_items-plant.
ls_mvt_items-move_stloc     = ls_mvt_items-stge_loc.
APPEND ls_mvt_items TO lt_mvt_items.
CALL FUNCTION ‘BAPI_GOODSMVT_CREATE’
EXPORTING
goodsmvt_header  = ls_head
goodsmvt_code    = lv_mvtcode
IMPORTING
goodsmvt_headret = ls_head_ret
TABLES
goodsmvt_item    = lt_mvt_items
return           = lt_return.
LOOP AT lt_return INTO ls_return WHERE type CA ‘AEX’.
EXIT.
ENDLOOP.
IF sy-subrc EQ 0.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.
MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
WITH ls_return-message_v1 ls_return-message_v2
ls_return-message_v3 ls_return-message_v4.
ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
EXPORTING
wait = ‘X’.
MESSAGE ls_head_ret-mat_doc TYPE ‘I’.
ENDIF.
ENDMETHOD.
ENDCLASS.
DATA: g_cls_test TYPE REF TO l_cls_test.
START-OF-SELECTION.
CREATE OBJECT g_cls_test.
CALL METHOD   g_cls_test->verileri_bul( ).
CALL SCREEN   100.
MODULE status_0100 OUTPUT.
SET PF-STATUS ‘100’.
SET TITLEBAR ‘100’.
ENDMODULE.
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN ‘GERI’ OR ‘CIKIS’ OR ‘IPTAL’.
LEAVE TO SCREEN 0.
WHEN ‘TDZ’.
CALL METHOD   g_cls_test->tahditsiz_stoga_al( ).
WHEN ‘BLK’.
CALL METHOD   g_cls_test->bloke_stoga_al( ).
ENDCASE.
g_cls_test->verileri_bul( ).
ENDMODULE.

2. Programa numarası 100 olan bir ekran ekleyin.

3. Element list içerisinde OK alanına OK_CODE ismini girin.

4. Flow logic sekmesi içerisindeki yorum satırlarını kaldırın.

5. Layout butonu ile Screen Painter’ ı açın. F6 tuşuna basarak alan seçimi penceresini açın. Get from Program butonuna tıklayarak program içerisindeki tüm alanları görüntüleyin.

6. GS_MCHB structure’ ındaki tüm alanları seçerek ekrana taşıyın. Alanların yanına sol taraftaki menüden Text Field nesnesi ile alanlara etiket ekleyin.

7. Menüden iki adet buton ekleyin. İsimlendirmesi ve FctCode alanlarını aşağıdaki resme göre doldurun.

 

8. Programa GUI Status nesnesi ekleyin.

9. Program kodunu ve diğer nesneleri aktif edin.

10. MCHB tablosundan tahditsiz miktarı miktarı sıfırdan büyük bir malzemenin bilgilerini seçim ekranına girin.

11. Malzemeyi bloke stoğa almak için Blokeye Al butonuna tıklayın.

İşlem başarılı ise gerçekleşen malzeme belgesi numarası mesaj olarak gösterilir. Ekrandaki miktar alanları güncellenir.

POPUP FONKSİYONLARI

POPUP_TO_INFORM

Ekranda en az 2 en fazla 4 satırlık bilgi gösteren popup pencere açar. Pencere başlığı ve 4 satırlık bilgi için 4 ayrı parametre alır.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
TITEL X Pencere başlık metni
TXT1 X Birinci satır metni
TXT2 X İkinci satır metni
TXT3 SPACE X X Üçüncü satır metni
TXT4 SPACE X X Dördüncü satır metni

DATA : lv_titel(35),
lv_txt1(80),
lv_txt2(80),
lv_txt3(80),
lv_txt4(80).
lv_titel = ‘Pencere başlığı’.
lv_txt1  = ‘Birinci satır’.
lv_txt2  = ‘İkinci satır’.
lv_txt3  = ‘Üçüncü satır’.
lv_txt4  = ‘Dördüncü satır’.
CALL FUNCTION ‘POPUP_TO_INFORM’
EXPORTING
titel         = lv_titel
txt1          = lv_txt1
txt2          = lv_txt2
txt3          = lv_txt3
txt4          = lv_txt4.

POPUP_TO_CONFIRM_DATA_LOSS

Saklanmayan bilgilerin kaybolacağı ile ilgili uyarı veren popup ekran açar. Kullanıcı “Evet”, “Hayır” veya “İptal” butonlarından birisini seçerek iletiyi onaylayabilir. Kullanıcının tıkladığı buton “ANSWER” parametresi ile fonksiyondan döner.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
DEFAULTOPTION ‘J’ X X Varsayılan seçim butonu
TITEL X Pencere başlık metni
START_COLUMN LIKE SY-CUCOL 25 X X Pencerenin başlangıç pozisyonu (sütun)
START_ROW LIKE SY-CUROW 6 X X Pencerenin başlangıç pozisyonu (satır)
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
ANSWER X Seçilen buton değeri

DATA : lv_titel(70),
lv_answer(1).
lv_titel = ‘Pencere başlığı’.
CALL FUNCTION ‘POPUP_TO_CONFIRM_DATA_LOSS’
EXPORTING
defaultoption       = ‘Y’
titel               = lv_titel
start_column        = 25
start_row           = 6
IMPORTING
answer              = lv_answer.
WRITE lv_answer.

Bir buton seçildikten sonra ekrana seçilen butonu yazar.

POPUP_TO_CONFIRM

Kullanıcıdan teyit almak için kullanılır. Pencere başlığı, 2 satırlık metin alanı, uyarı ikonu ve pencere ekran pozisyonu gibi parametreler alır. Tıklanan buton “ANSWER” parametresi ile fonksiyondan döner.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
TITLEBAR SPACE X X Pencere başlık metni
DIAGNOSE_OBJECT LIKE DOKHL-OBJECT SPACE X X Dökümantasyon nesnesi
TEXT_QUESTION X Soru metni
TEXT_BUTTON_1 ‘Ja'(001) X X Birinci buton metni
ICON_BUTTON_1 LIKE ICON-NAME SPACE X X Birinci buton ikonu
TEXT_BUTTON_2 ‘Nein'(002) X X İkinci buton metni
ICON_BUTTON_2 LIKE ICON-NAME SPACE X X İkinci buton ikonu
DEFAULT_BUTTON ‘1’ X X Varsayılan seçim butonu
DISPLAY_CANCEL_BUTTON ‘X’ X X İptal butonunu göster
USERDEFINED_F1_HELP LIKE DOKHL-OBJECT SPACE X X Kullanıcı tanımlı yardım için doküman nesnesi
START_COLUMN LIKE SY-CUCOL 25 X X Pencerenin başlangıç pozisyonu (sütun)
START_ROW LIKE SY-CUROW 6 X X Pencerenin başlangıç pozisyonu (satır)
POPUP_TYPE LIKE ICON-NAME X X Popup ikonu
IV_QUICKINFO_BUTTON_1 TYPE TEXT132 SPACE X Mouse birinci butonun üzerinde iken görüntülenecek metin
IV_QUICKINFO_BUTTON_2 TYPE TEXT132 SPACE X Mouse ikinci butonun üzerinde iken görüntülenecek metin
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
ANSWER X Seçilen buton değeri
EXCEPTIONS
Exception Tanım
TEXT_NOT_FOUND

Örnek 1: Basit bir teyit alma örneği.

REPORT zpp_r_test.
DATA lv_answer(1).
CALL FUNCTION ‘POPUP_TO_CONFIRM’
EXPORTING
titlebar  = ‘Uyarı’
text_question         = ‘Devam etmek istiyor musunuz?’
iv_quickinfo_button_1 = ‘Birinci buton bilgilendirme metni’
IMPORTING
answer        = lv_answer.
WRITE lv_answer.

Bir buton seçildikten sonra ekrana seçilen butonun değerini yazar.

Örnek 2: Doküman metni gösteren ve pencere pozisyonu değiştirilen bir teyit alma örneği.

DATA lv_answer(1).
DATA : lt_parameter TYPE STANDARD TABLE OF spar,
ls_parameter TYPE spar.
ls_parameter-param = ‘M1’.
ls_parameter-value = ‘— Metin parametresi —‘.
APPEND ls_parameter TO lt_parameter.
CALL FUNCTION ‘POPUP_TO_CONFIRM’
EXPORTING
titlebar = ‘Uyarı’
diagnose_object         = ‘BZAL_MSG1’
text_question           = ‘Devam etmek istiyor musunuz?’
display_cancel_button   = ‘X’
start_column            = 30
start_row               = 10
IMPORTING
answer                  = lv_answer
TABLES
parameter               = lt_parameter.
WRITE lv_answer.

Bir buton seçildikten sonra ekrana seçilen butonun değerini yazar.

Örnek 3: Buton üzerinde ikon gösteren bir teyit alma örneği.

DATA lv_answer(1).
CALL FUNCTION ‘POPUP_TO_CONFIRM’
EXPORTING
titlebar  = ‘Uyarı’
text_question               = ‘Tüm kayıtlar silinecek!’
text_button_1               = ‘Sil’
icon_button_1               = ‘ICON_DELETE’
text_button_2               = ‘İptal’
icon_button_2               = ‘ICON_CANCEL’
default_button              = ‘2’
display_cancel_button       = ‘ ‘
IMPORTING
answer                      = lv_answer
EXCEPTIONS
text_not_found              = 1
OTHERS                      = 2.
WRITE lv_answer.

Bir buton seçildikten sonra ekrana seçilen butonun değerini yazar.

Örnek 4: Popup parametresi eklenmiş başka bir örnek.

DATA lv_answer(1).
CALL FUNCTION ‘POPUP_TO_CONFIRM’
EXPORTING
titlebar      = ‘Uyarı’
text_question         = ‘Çıkmak için iptale tıklayın’
text_button_1         = ‘Devam’
icon_button_1         = ‘ICON_CHECKED’
text_button_2         = ‘İptal’
icon_button_2         = ‘ICON_CANCEL’
display_cancel_button = ‘ ‘
popup_type            = ‘ICON_MESSAGE_ERROR’
IMPORTING
answer                = lv_answer.
WRITE lv_answer.

Bir buton seçildikten sonra ekrana seçilen butonun değeri yazılır.

POPUP_GET_VALUES

Popup pencereye eklenen alanlardan değerler alınmasını sağlar. Değer kontrolü, pencere başlığı, pencere pozisyonu parametrelerini alır. “RETURNCODE” parametresi döner. “FIELDS” internal tablosu ile ekranda gösterilecek alan bilgileri fonksiyona aktarılır. Seçilen değer yine “FIELDS” tablosundan geri döner.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
NO_VALUE_CHECK SPACE X X Veri tipi kontrolü yapılmamasını sağlar
POPUP_TITLE X Pencere başlık metni
START_COLUMN ‘5’ X X Pencerenin başlangıç pozisyonu (sütun)
START_ROW ‘5’ X X Pencerenin başlangıç pozisyonu (satır)
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
RETURNCODE X Kullanıcı yanıtı
TABLES
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
FIELDS LIKE SVAL Popup’ ta gösterilecek alanları, özellikler ve değerleri tutar
EXCEPTIONS
Exception Tanım
ERROR_IN_FIELDS Alan bilgilerinde hata var

Örnek: SPFLI tablosundan uçuş hava yolu ve uçuş bağlantı numarası alanından değer alan örnek.

DATA : gt_fields TYPE STANDARD TABLE OF sval,
gs_fields TYPE sval,
gv_returncode(1) TYPE c.
gs_fields-tabname   = ‘SPFLI’ .
gs_fields-fieldname = ‘CARRID’ .
gs_fields-field_obl = ‘X’ .
APPEND gs_fields TO gt_fields.
CLEAR gs_fields.
gs_fields-tabname   = ‘SPFLI’ .
gs_fields-fieldname = ‘CONNID’ .
APPEND gs_fields TO gt_fields.
CALL FUNCTION ‘POPUP_GET_VALUES’
EXPORTING
no_value_check        = ‘ ‘
popup_title           = ‘Uçuş seçiniz’
start_column          = ‘5’
start_row             = ‘5’
IMPORTING
returncode            = gv_returncode
TABLES
fields               = gt_fields
EXCEPTIONS
error_in_fields       = 1
OTHERS                = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT gt_fields INTO gs_fields.
WRITE :/ ‘Alan ismi:’ ,gs_fields-fieldname,
‘Alan değeri:’, gs_fields-value.
ENDLOOP.

Seçim yapıldıktan sonra değerler ekrana yazdırılır.

POPUP_TO_DECIDE_LIST

Bir liste içerisinden seçim yapılmasını sağlar. Pencere başlığı, 3 satırlık metin alanı, pencere ekran pozisyonu gibi parametreler alır. Seçilen diğer “ANSWER” parametresi ve “t_spopli” internal tablosu ile fonksiyondan döner.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
CURSORLINE LIKE SY-LILLI 1 X X Varsayılan liste satırı
MARK_FLAG SPACE X X Checkbox şeklinde seçim yapılmasını sağlar. Birden fazla seçim yapılabilir
MARK_MAX 1 X X MARK_FLAG ‘X’ parametresi ile kullanıldığında maksimum seçim yapılabilecek satırı sayısı.
START_COL LIKE SY-CUCOL 0 X X Pencerenin başlangıç pozisyonu (sütun)
START_ROW LIKE SY-CUROW 0 X X Pencerenin başlangıç pozisyonu (satır)
TEXTLINE1 X İlk metin alanı
TEXTLINE2 SPACE X X İkinci metin alanı
TEXTLINE3 SPACE X X Üçüncü metin alanı
TITEL X Pencere başlık metni
DISPLAY_ONLY SPACE X X Sadece liste değerlerini gösterir. Seçim yapılmasına izin vermez.
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
ANSWER X Seçilen buton değeri
TABLES
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
T_SPOPLI LIKE SPOPLI Seçim listesi ve seçilenlerin olduğu tablo
EXCEPTIONS
Exception Tanım
NOT_ENOUGH_ANSWERS
TOO_MUCH_ANSWERS
TOO_MUCH_MARKS

Örnek 1: Bir listeden yalnızca bir seçime izin veren örnek.

DATA : lt_sel_tab TYPE STANDARD TABLE OF spopli,
ls_sel_tab TYPE spopli,
lv_answer(1).
ls_sel_tab-varoption = ‘Seçenek 1’.
APPEND ls_sel_tab TO lt_sel_tab.
ls_sel_tab-varoption = ‘Seçenek 2’.
APPEND ls_sel_tab TO lt_sel_tab.
CALL FUNCTION ‘POPUP_TO_DECIDE_LIST’
EXPORTING
cursorline               = 1
start_col                = 60
start_row                = 4
textline1                = ‘Satır 1’
textline2                = ‘Satır 2’
titel                    = ‘Seçim yapınız’
IMPORTING
answer                   = lv_answer
TABLES
t_spopli                 = lt_sel_tab
EXCEPTIONS
not_enough_answers       = 1
too_much_answers         = 2
too_much_marks           = 3
OTHERS                   = 4.
WRITE lv_answer.

Listeden seçim yaptıktan sonra ekrana seçilen satır numarasını yazar.

Örnek2: Bir listeden birden fazla seçim yapılabilmesine olanak sağlayan örnek.

DATA : lt_sel_tab TYPE STANDARD TABLE OF spopli,
ls_sel_tab TYPE spopli,
lv_answer(1).
ls_sel_tab-varoption = ‘Seçenek 1’.
APPEND ls_sel_tab TO lt_sel_tab.
ls_sel_tab-varoption = ‘Seçenek 2’.
APPEND ls_sel_tab TO lt_sel_tab.
ls_sel_tab-varoption = ‘Seçenek 3’.
APPEND ls_sel_tab TO lt_sel_tab.
ls_sel_tab-varoption = ‘Seçenek 4’.
APPEND ls_sel_tab TO lt_sel_tab.
CALL FUNCTION ‘POPUP_TO_DECIDE_LIST’
EXPORTING
cursorline               = 2
mark_flag                = ‘X’
mark_max                 = 4
start_col                = 60
start_row                = 10
textline1                = ‘Açıklama satırı 1’
titel                    = ‘Seçim yapınız’
IMPORTING
answer                   = lv_answer
TABLES
t_spopli                 = lt_sel_tab
EXCEPTIONS
not_enough_answers       = 1
too_much_answers         = 2
too_much_marks           = 3
OTHERS                   = 4.
LOOP AT lt_sel_tab INTO ls_sel_tab WHERE selflag = ‘X’.
WRITE / ls_sel_tab-varoption.
ENDLOOP.

Listeden seçilenler daha sonra ekrana yazdırılırlar.

POPUP_WITH_TABLE_DISPLAY

Bir tablo içerisinden bir satırın seçilmesini sağlar. Pencere başlığı, başlangıç, bitiş pozisyonu ve gösterilecek tabloyu parametre olarak alır. Seçilen satırı “CHOISE” parametresi ile döner.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
ENDPOS_COL TYPE INT4 X Pencerenin bitiş pozisyonu (sütun)
ENDPOS_ROW TYPE INT4 X Pencerenin bitiş pozisyonu (satır)
STARTPOS_COL TYPE INT4 X Pencerenin başlangıç pozisyonu (sütun)
STARTPOS_ROW TYPE INT4 X Pencerenin başlangıç pozisyonu (satır)
TITLETEXT TYPE CHAR80 X Pencere başlık metni
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
CHOISE LIKE SY-TABIX X Seçilen satır numarası
TABLES
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
VALUETAB Seçim tablosu
EXCEPTIONS
Exception Tanım
BREAK_OFF

TYPES: BEGIN OF ly_valuetab,
alan1(40),
alan2(40),
END OF ly_valuetab.
DATA : lt_valuetab TYPE STANDARD TABLE OF ly_valuetab,
ls_valuetab TYPE ly_valuetab,
lv_choise   TYPE sy-tabix.
ls_valuetab-alan1 = ‘Birinci satır, birinci sütun’.
ls_valuetab-alan2 = ‘Birinci satır, ikinci sütun’.
APPEND ls_valuetab TO lt_valuetab.
ls_valuetab-alan1 = ‘İkinci satır, birinci sütun’.
ls_valuetab-alan2 = ‘İkinci satır, ikinci sütun’.
APPEND ls_valuetab TO lt_valuetab.
CALL FUNCTION ‘POPUP_WITH_TABLE_DISPLAY’
EXPORTING
endpos_col         = 80
endpos_row         = 5
startpos_col       = 1
startpos_row       = 1
titletext          = ‘Seçim yapınız’
IMPORTING
choise             = lv_choise
TABLES
valuetab           = lt_valuetab
EXCEPTIONS
break_off           = 1
OTHERS              = 2.
WRITE lv_choise.

Listeden bir seçim yaptıktan sonra, seçilen satır numarası ekrana yazdırılır.

REUSE_ALV_POPUP_TO_SELECT

Bir tablo içerisinden bir veya daha fazla seçim yapılmasını sağlar veya sadece tabloyu görüntüler. Pencere başlığı, başlangıç, bitiş pozisyonu ve gösterilecek tablo gibi parametreler alır. Seçilen satırı “ES_SELFIELD” parametresi ile döner.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
I_TITLE X X Pencere başlık metni
I_SELECTION ‘X’ X X Gösterilen listeden seçim yapılmasına izin verir
I_ALLOW_NO_SELECTION TYPE CHAR1 X X Bir değer seçilmeden de devam edilmesini sağlar
I_ZEBRA SPACE X X Gölgeli gösterimi sağlar.
I_SCREEN_START_COLUMN 0 X X Pencerenin başlangıç pozisyonu (sütun)
I_SCREEN_START_LINE 0 X X Pencerenin başlangıç pozisyonu (satır)
I_SCREEN_END_COLUMN 0 X X Pencerenin bitiş pozisyonu (sütun)
I_SCREEN_END_LINE 0 X X Pencerenin bitiş pozisyonu (satır)
I_CHECKBOX_FIELDNAME X X Checkbox olarak gösterilecek alan
I_LINEMARK_FIELDNAME X X Satır seçimindeki renk bilgisi
I_SCROLL_TO_SEL_LINE ‘X’ X X Varsayılan seçime yönlendirme
I_TABNAME X Gösterilecek tablo
I_STRUCTURE_NAME LIKE DD02L-TABNAME X X Gösterilecek tablo structure’ ı
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV X X Gösterilecek tablo field catalogu’ u
IT_EXCLUDING TYPE SLIS_T_EXTAB X X Gizlenecek ALV fonksiyonları
I_CALLBACK_PROGRAM LIKE SY-REPID X X Fonksiyonu çalıştıran program
I_CALLBACK_USER_COMMAND TYPE SLIS_FORMNAME X X USER_COMMAND kullanılacaksa alt rutin ismi
IS_PRIVATE TYPE SLIS_DATA_CALLER_EXIT X X Sadece dahili kullanım göstergesi
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
ES_SELFIELD TYPE SLIS_SELFIELD X Seçilen satır bilgileri
E_EXIT X Kullanıcı tarafından iptal edildi göstergesi
TABLES
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
T_OUTTAB Seçim tablosu
EXCEPTIONS
Exception Tanım
PROGRAM_ERROR Program hatası

Örnek 1: Seçim yapılmasına izin vermeyen sadece tablo içeriğini gösteren örnek.

DATA lt_spfli TYPE STANDARD TABLE OF spfli.
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE lt_spfli.
CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’
EXPORTING
i_title              = ‘Uçuş bilgileri’
i_allow_no_selection = ‘X’
i_tabname            = ‘SPFLI’
i_structure_name     = ‘SPFLI’
i_zebra              = ‘X’
TABLES
t_outtab             = lt_spfli
EXCEPTIONS
program_error        = 1
OTHERS               = 2.

Örnek 2: ALV içerisinde seçilen satır numarasını gösteren örnek.

TYPE-POOLS: slis.
DATA: lt_outtab   TYPE spfli OCCURS 0,
ls_selfield TYPE slis_selfield,
lv_exit(1).
START-OF-SELECTION.
SELECT * FROM spfli INTO TABLE lt_outtab.
CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’
EXPORTING
i_title                 = ‘Seçim yapınız’
i_selection             = ‘X’
i_zebra                 = ‘ ‘
i_screen_start_column   = 0
i_screen_start_line     = 0
i_screen_end_column     = 0
i_screen_end_line       = 0
i_scroll_to_sel_line    = ‘X’
i_tabname               = ‘LT_OUTTAB’
i_structure_name        = ‘SPFLI’
IMPORTING
es_selfield             = ls_selfield
e_exit                  = lv_exit
TABLES
t_outtab                = lt_outtab
EXCEPTIONS
program_error           = 1
OTHERS                  = 2.
WRITE ls_selfield-tabindex.

Listeden bir seçim yaptıktan sonra, seçilen satır numarası ekrana yazdırılır.

Örnek 3: ALV içerisinde mara tablosundan ilk 10 kayıt gösterilir. Seçilen malzeme kodu “MM03” işlem koduna aktarılır ve malzeme bilgileri gösterilir.

TYPE-POOLS slis.
DATA: lt_mara TYPE STANDARD TABLE OF mara,
ls_mara TYPE mara.
DATA: lv_selfield TYPE slis_selfield,
lv_exit TYPE c.
SELECT * UP TO 10 ROWS INTO TABLE lt_mara FROM mara.
CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’
EXPORTING
i_title          = ‘Malzeme seçimi’
i_tabname        = ‘LT_MARA’
i_structure_name = ‘MARA’
IMPORTING
es_selfield      = lv_selfield
e_exit           = lv_exit
TABLES
t_outtab         = lt_mara.
IF lv_exit IS INITIAL.
READ TABLE lt_mara INTO ls_mara INDEX lv_selfield-tabindex.
IF sy-subrc = 0.
SET PARAMETER ID ‘MAT’ FIELD ls_mara-matnr.
CALL TRANSACTION ‘MM03’ AND SKIP FIRST SCREEN.
ENDIF.
ENDIF.

Örnek 4: Seçim yapılacak ALV içerisinde tanımlı dil anahtarları gösterilir. ALV’ de T002 tablosunun tüm alanları değil field cataloga eklenen alanlar gösterilir. Seçilen dil anahtarına göre yeni bir ALV içerisinde seçim yapılan dili kullanan ülkeler gösterilir.

TYPE-POOLS: slis.
TYPES: BEGIN OF t_t002,
checkbox TYPE c,
spras    TYPE t002-spras,
sptxt    TYPE t002t-sptxt,
END OF t_t002.
DATA : lt_t002 TYPE STANDARD TABLE OF t_t002,
lt_t005 TYPE STANDARD TABLE OF t005.
TYPES: t_fieldcat  TYPE slis_fieldcat_alv,
t_layout    TYPE slis_layout_alv.
DATA : ls_fieldcat TYPE t_fieldcat,
ls_layout   TYPE t_layout.
DATA lt_fieldcat TYPE STANDARD TABLE OF t_fieldcat.
DATA lv_program TYPE sy-repid.
CLEAR: ls_fieldcat, lt_fieldcat[].
ls_fieldcat-fieldname = ‘SPRAS’.
ls_fieldcat-tabname   = ‘LT_T002’.
ls_fieldcat-seltext_m = ‘Dil Anahtarı’.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = ‘SPTXT’.
ls_fieldcat-tabname   = ‘LT_T002’.
ls_fieldcat-seltext_m = ‘Tanım’.
APPEND ls_fieldcat TO lt_fieldcat.
SELECT a~spras sptxt
FROM t002 AS a
INNER JOIN t002t AS b ON a~spras = b~sprsl
INTO CORRESPONDING FIELDS OF TABLE lt_t002
WHERE b~spras = sy-langu.
CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’
EXPORTING
i_title              = ‘Seçim yapınız’
i_tabname            = ‘LT_T002’
i_checkbox_fieldname = ‘CHECKBOX’
it_fieldcat          = lt_fieldcat
i_callback_program   = lv_program
TABLES
t_outtab             = lt_t002.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CHECK sy-subrc =  0.
DELETE lt_t002 WHERE checkbox NE ‘X’.
SELECT *
FROM t005
INTO CORRESPONDING FIELDS OF TABLE lt_t005
FOR ALL ENTRIES IN lt_t002
WHERE spras = lt_t002-spras.
lv_program = sy-repid.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
i_callback_program = lv_program
i_structure_name   = ‘T005’
TABLES
t_outtab           = lt_t005.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Resmi dili seçilen değer olan ülkeler listelenir.

Örnek 5: Üç satır ve bir sütundan oluşan, bazı ALV fonksiyonları gizlenmiş bir örnek. Sadec

TYPE-POOLS:  slis.
TYPES: BEGIN OF t_outtab,
text(60) TYPE c,
END OF t_outtab.
DATA: lt_outtab    TYPE STANDARD TABLE OF t_outtab,
ls_outtab    TYPE t_outtab,
lt_fieldcat  TYPE slis_t_fieldcat_alv,
ls_fieldcat  TYPE slis_fieldcat_alv,
lt_excluding TYPE slis_t_extab,
ls_excluding TYPE slis_extab,
lv_exit      TYPE c.
ls_outtab-text = ‘İlk satır’.     APPEND ls_outtab TO lt_outtab.
ls_outtab-text = ‘İkinci satır’.  APPEND ls_outtab TO lt_outtab.
ls_outtab-text = ‘Üçüncü satır’.  APPEND ls_outtab TO lt_outtab.
ls_fieldcat-col_pos    = 1.
ls_fieldcat-fieldname  = ‘TEXT’.
ls_fieldcat-outputlen  = 60.
ls_fieldcat-seltext_m  = ‘Açıklamalar’.
APPEND ls_fieldcat TO lt_fieldcat.
ls_excluding-fcode = ‘&ETA’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘%SC’.  APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘%SC+’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&OUP’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&ODN’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&ILT’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&OL0’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&CRB’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&CRL’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&CRR’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&CRE’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&ALL’. APPEND ls_excluding TO lt_excluding.
ls_excluding-fcode = ‘&SAL’. APPEND ls_excluding TO lt_excluding.
CALL FUNCTION ‘REUSE_ALV_POPUP_TO_SELECT’
EXPORTING
i_title               = ‘Bilgilendirme’
i_selection           = ”
i_screen_start_column = 1
i_screen_start_line   = 1
i_screen_end_column   = 62
i_screen_end_line     = 10
i_tabname             = ‘LT_OUTTAB’
it_fieldcat           = lt_fieldcat
it_excluding          = lt_excluding
IMPORTING
e_exit                = lv_exit
TABLES
t_outtab              = lt_outtab.

POPUP_TO_SELECT_MONTH

Yıl ve ay bilgisi sormak için kullanılır.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
ACTUAL_MONTH LIKE ISELLIST-MONTH X Varsayılan yıl ve ay
FACTORY_CALENDAR LIKE TFACD-IDENT SPACE X X Fabrika takvimini dikkate al
HOLIDAY_CALENDAR LIKE THOCI-IDENT SPACE X X Tatil takvimini dikkate al
LANGUAGE LIKE SY-LANGU SY-LANGU X X Dil
START_COLUMN LIKE SY-SCOLS 8 X X Pencerenin başlangıç pozisyonu (sütun)
START_ROW LIKE SY-SROWS 5 X X Pencerenin başlangıç pozisyonu (satır)
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
SELECTED_MONTH LIKE ISELLIST-MONTH X Seçilen yıl ve ay değeri
RETURN_CODE LIKE SY-SUBRC X İşlem sonucu
EXCEPTIONS
Exception Tanım
FACTORY_CALENDAR_NOT_FOUND Fabrika takvimi bulunamadı
HOLIDAY_CALENDAR_NOT_FOUND Tatil takvimi bulunamadı
MONTH_NOT_FOUND Ay bulunamadı

DATA : lv_month TYPE isellist-month,
lv_code TYPE sy-subrc.
CALL FUNCTION ‘POPUP_TO_SELECT_MONTH’
EXPORTING
actual_month               = ‘201304’
language = sy-langu
start_column               = 8
start_row                  = 5
IMPORTING
selected_month             = lv_month
return_code                = lv_code
EXCEPTIONS
factory_calendar_not_found = 1
holiday_calendar_not_found = 2
month_not_found            = 3
OTHERS                     = 4.
IF lv_code = 0.
WRITE : lv_month, lv_code.
ENDIF.

Seçilen ay, yıl ve işlem sonucu ekrana yazdırılır.

ÖRNEK SAP FONKSİYONLARI

SAPGUI_PROGRESS_INDICATOR

Geçerli pencerede işlem durumunu belirtmek için kullanılır. Durumu belirten “PERCENTAGE” değerini ve bu durumu tanımlayan “TEXT” değişkenleri alır.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
PERCENTAGE 0 X X İşlem durumu (yüzde olarak)
TEXT SPACE X X İşlem tanımı

CALL FUNCTION ‘SAPGUI_PROGRESS_INDICATOR’
EXPORTING
percentage       = 25
text             = ‘Birinci işlem başlıyor…’.
WAIT UP TO 3 SECONDS.
CALL FUNCTION ‘SAPGUI_PROGRESS_INDICATOR’
EXPORTING
percentage       = 75
text             = ‘İkinci işlem başlıyor…’.
WAIT UP TO 1 SECONDS.

Örnek çalıştığında önce sol alt köşede “Birinci işlem başlıyor…” yazısı ardından “İkinci işlem başlıyor…” yazısı ve işlem yüzdesi görüntülenir.

COMPUTE_YEARS_BETWEEN_DATES

Tarih iki tarih arasındaki yılı hesaplar.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
FIRST_DATE LIKE PREL-BEGDA X İlk tarih
MODIFY_INTERVAL ‘ ‘ X X
SECOND_DATE LIKE PREL-ENDDA X İkinci tarih
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
YEARS_BETWEEN_DATES X Fark (yıl olarak)
EXCEPTIONS
Exception Tanım
SEQUENCE_OF_DATES_NOT_VALID İlk tarih ikinciden büyük ise hata

DATA lv_years TYPE i.
PARAMETERS pa_ilktr LIKE sy-datum.
CALL FUNCTION ‘COMPUTE_YEARS_BETWEEN_DATES’
EXPORTING
first_date                        = pa_ilktr
modify_interval                   = ‘ ‘
second_date                       = sy-datum
IMPORTING
years_between_dates               = lv_years
EXCEPTIONS
sequence_of_dates_not_valid       = 1
OTHERS                            = 2.
WRITE: / ‘İşlem sonucu:’, sy-subrc.
WRITE: / ‘Yıl farkı:’, lv_years.

NUMBER_GET_NEXT

Bir numara aralığından sonraki numarayı elde etmek için kullanılır.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
NR_RANGE_NR LIKE INRI-NRRANGENR X Numara aralığı numarası
OBJECT LIKE INRI-OBJECT X Numara aralığı nesnesi
QUANTITY LIKE INRI-QUANTITY ‘1’ X X Numara miktarı
SUBOBJECT SPACE X X Alt nesnenin değeri
TOYEAR LIKE INRI-TOYEAR ‘0000’ X X Mali yıl
IGNORE_BUFFER SPACE X X Ara belleği göz ardı et
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
NUMBER X Alınan numara
QUANTITY LIKE INRI-QUANTITY X Numara miktarı
RETURNCODE LIKE INRI-RETURNCODE X İşlem sonucu
EXCEPTIONS
Exception Tanım
INTERVAL_NOT_FOUND Aralık bulunamadı
NUMBER_RANGE_NOT_INTERN Numara aralığı yerel değil
OBJECT_NOT_FOUND Nesne TNRO tablosunda bulunamadı
QUANTITY_IS_0 Talep edilen sayı miktarı sıfırdan (0) büyük olmalı
QUANTITY_IS_NOT_1 Talep edilen sayı miktarı bir (1) olmalı
INTERVAL_OVERFLOW Aralık doldu
BUFFER_OVERFLOW Ara bellek dolu

Örnek: “ZTEST” numara aralığın nesnesinin “01” numara aralığını kullanarak numara alan örnek.

DATA gv_number TYPE c.
CALL FUNCTION ‘NUMBER_GET_NEXT’
EXPORTING
nr_range_nr                  = ’01’
object                       = ‘ZTEST’
IMPORTING
number                       = gv_number
EXCEPTIONS
interval_not_found            = 1
number_range_not_intern       = 2
object_not_found              = 3
quantity_is_0                 = 4
quantity_is_not_1             = 5
interval_overflow             = 6
buffer_overflow               = 7
OTHERS                        = 8.
WRITE: ‘Şu anki boş numara’, gv_number.

Numara Aralığı Tanımlama

SNRO işlem kodu çalıştırılır. Nesne adı alanına ZTEST yazılır. Yarat butonuna (<IMG src=”file:///C:\Users\abapmaster\AppData\Local\Temp\msohtmlclip1\01\clip_image008.jpg” width=23 height=23 v:shapes=””>) tıklanır.

Yeni ekranda tanım kümesi için domain seçilir ve kaydedilir.

Nesne oluşturulduktan sonra numara aralıklarının tanımlanması gerekir. “Numara alanları” butonuna tıklanarak bakım ekranına geçilir.

Yeni aralık tanımlamak için kalem ikonu olan “Aralıkları” butonuna tıklanır.

Gelen ekranda numara aralığı tanımı yapılır.

ABAP Hafızasına (ABAP Memory) Veri Nesnesi Aktarımı

EXPORT ifadesi ile veri nesnelerini ABAP memory’ e aktarmak mümkündür. Aktarılan veri nesneleri daha sonra IMPORT ifadesi ile okunabilir.

Veri nesneleri birer birer aktarılabilir veya internal tablo aktarılabilir. Kullanımı aşağıdaki gibidir.

EXPORT parametre_listesi TO MEMORY ID id.

parametre_listesi: Parametreler 3 şekilde aktarılabilir.

… {p1 = dobj1 p2 = dobj2 …}
  | {p1 FROM dobj1 p2 FROM dobj2 …}
  | (ptab) … .

p1 = dobj1 p2 = dobj2 …: parametreler birer birer değişkenlere atanır ve aktarılır.

p1 FROM dobj1 p2 FROM dobj2: p1 = dobj1 ile aynıdır.

ptab: Parametreleri listesi olarak aktarım için kullanılır. İki sütunluk bir tablo tanımlanır. İlk sütunda parametrenin ismi atanır. İkinci sütunda veri nesnesi atanır.

IMPORT ifadesi ile veri nesneleri ABAP memory’ den almak mümkündür. Kullanımı aşağıdaki gibidir.

IMPORT parametre_listesi FROM MEMORY ID id [çeviri_seçenekleri].

parametre_listesi: EXPORT ile aynıdır.

[çeviri_seçenekleri]: Aşağıdaki ekler kullanılır.

… { { { {[ACCEPTING PADDING] [ACCEPTING TRUNCATION]}
        | [IGNORING STRUCTURE BOUNDARIES] }
        [IGNORING CONVERSION ERRORS [REPLACEMENT CHARACTER rc]] }
    | [IN CHAR-TO-HEX MODE] }
    [CODEPAGE INTO cp]
    [ENDIAN INTO endian].

Örnek1: p1 = dobj1 p2 = dobj2 kullanılımına ait örnek. gv_metin değişkeni EXPORT ifadesi ile ABAP memory’ e aktarılır. Daha sonra IMPORT parametresi ile gv_metin2 değişkenine atanarak, ekrana yazdırılır.

DATA : gv_metin TYPE c LENGTH 15 VALUE ‘ABAP memory’,
gv_metin2 TYPE c LENGTH 15.
EXPORT metin = gv_metin TO MEMORY ID ‘EXXX’.
IMPORT metin = gv_metin2 FROM MEMORY ID ‘EXXX’.
WRITE: ‘Metin:’, gv_metin2.

Örnek2: p1 FROM dobj1 p2 FROM dobj2 …} kullanımana ait örnek. Hafızaya metin durağan şekilde aktarılır.

DATA : gv_metin TYPE c LENGTH 15.
EXPORT metin from ‘ABAP memory’ TO MEMORY ID ‘EXXX’.
IMPORT metin = gv_metin FROM MEMORY ID ‘EXXX’.
WRITE: ‘Metin:’, gv_metin.

Örnek3: (ptab) kullanımına ait örnek. gv_emX değişkenlerini ABAP memory’ e aktaran ve daha sonra bunları hafızadan okuyup ekrana yazdırır.

TYPES: BEGIN OF t_type,
para TYPE string,
dobj TYPE string,
END OF t_type.
DATA : gv_em1 TYPE c LENGTH 15 VALUE ‘metin1’,
gv_em2 TYPE c LENGTH 15 VALUE ‘metin2’,
gv_im1 TYPE c LENGTH 15,
gv_im2 TYPE c LENGTH 15,
gs_line TYPE t_type,
gt_line TYPE STANDARD TABLE OF t_type.
gs_line-para = ‘m1’.
gs_line-dobj = ‘gv_em1’.
APPEND gs_line TO gt_line.
gs_line-para = ‘m2’.
gs_line-dobj = ‘gv_em2’.
APPEND gs_line TO gt_line.
EXPORT (gt_line)     TO MEMORY ID ‘EXXX’.
IMPORT m1 = gv_im1
m2 = gv_im2
FROM MEMORY ID ‘EXXX’.
WRITE: ‘Metin 1′, gv_im1,
/’Metin 2’, gv_im2.

Örnek4: İnternal tabloyu hafızaya aktaran bir örnek.

TYPES: BEGIN OF t_data,
id    TYPE c LENGTH 2,
metin TYPE c LENGTH 15,
END OF t_data.
DATA : gs_data  TYPE t_data,
gt_edata TYPE STANDARD TABLE OF t_data,
gt_idata TYPE STANDARD TABLE OF t_data.
gs_data-id    = ‘1’.
gs_data-metin = ‘Metin 1’.
APPEND gs_data TO gt_edata.
gs_data-id    = ‘2’.
gs_data-metin = ‘Metin 2’.
APPEND gs_data TO gt_edata.
EXPORT data_tab = gt_edata TO MEMORY ID ‘EXXX’.
IMPORT data_tab = gt_idata FROM MEMORY ID ‘EXXX’.
WRITE: 3 ‘ID’, 8 ‘Metin’.
LOOP AT gt_idata INTO gs_data.
WRITE: /3 gs_data-id, 8 gs_data-metin.
ENDLOOP.

ÇEVRİM FONKSİYONLARI

CONVERSION_EXIT_ALPHA_INPUT

Fonksiyona verilen nümerik bir değişkenin sol tarafına değişken uzunluğu tamamlanana kadar sıfır “0” ekler. Genelde malzeme numarası ve hesap numaraları için kullanılır. Harici formatı dâhili formata çevirir.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
INPUT TYPE CLIKE X Dönüştürülecek değer
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
OUTPUT TYPE TYPE X Dönüştürülecek değer

CONVERSION_EXIT_ALPHA_OUTPUT

Fonksiyona verilen nümerik bir değişkenin sol tarafındaki sıfır “0” değerlerini kaldırır. Genelde malzeme numarası ve hesap numaraları için kullanılır. Dahili formatı harici formata çevirir.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
INPUT TYPE CLIKE X Dönüştürülecek değer
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
OUTPUT TYPE TYPE X Dönüştürülecek değer

DATA : lv_matnr(18).
lv_matnr = ‘1’.
WRITE : / ‘Değişkene atanan malzeme no:’, lv_matnr.
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
EXPORTING
input = lv_matnr
IMPORTING
output = lv_matnr.
WRITE : / ‘Exit Alpha Input çıktısı:’, lv_matnr.
CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_OUTPUT’
EXPORTING
input     = lv_matnr
IMPORTING
output   = lv_matnr.
WRITE : / ‘Exit Alpha Output çıktısı:’, lv_matnr.

SPELL_AMOUNT

Fonksiyona verilen sayısal değer istenilen para biriminde ve dilde metine dönüştürülür. Metin kısmı tamsayı ve ondalık olarak iki ayrı değişkene atanır.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
AMOUNT 0 X X Çevrilecek sayısal değer
CURRENCY LIKE SY-WAERS SPACE X X Çevrim yapılacak para birimi
FILLER SPACE X X Çıktı alanı için karakter
LANGUAGE LIKE SY-LANGU SY-LANGU X X Çevrim yapılacak dil
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
IN_WORDS LIKE SPELL X Tutar/sayı ve rakamla yazılışını içeren alan çubuğu
EXCEPTIONS
Exception Tanım
NOT_FOUND Argüman T015Z tablosunda bulunamadı
TOO_LARGE Tutar, dönüştürme işlemi için çok büyük

Örnek: Verilen tutarı Türkçe ve TL olarak metne çeviren örnek.

DATA: lv_netwr TYPE vbak-netwr,
ls_words TYPE spell.
lv_netwr = ‘55428.37’.
CALL FUNCTION ‘SPELL_AMOUNT’
EXPORTING
amount          = lv_netwr
currency       = ‘TRY’
filler          = ‘ ‘
language        = sy-langu
IMPORTING
in_words        = ls_words
EXCEPTIONS
not_found       = 1
too_large       = 2
OTHERS          = 3.
IF sy-subrc = 0.
WRITE / ‘Metne dönüştürülecek tutar’.
WRITE / lv_netwr left-justified.
SKIP 1.
WRITE / ‘Tamsayı:’.
WRITE / ls_words-number.
SKIP 1.
WRITE / ‘Ondalık:’.
WRITE / ls_words-decimal.
SKIP 1.
WRITE / ‘Tamsayı metni:’.
WRITE / ls_words-word.
SKIP 1.
WRITE / ‘Ondalık metni:’.
WRITE / ls_words-decword.
ELSE.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

CONVERT_TO_FOREIGN_CURRENCY

Yerel para birimi tutarını yabancı para birimi tutarına çevirir.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
CLIENT LIKE SY-MANDT SY-MANDT X X Üst birim
DATE LIKE SYST-DATUM X Çevrim yapılacak kur tarihi
FOREIGN_CURRENCY X Hedef para birimi
LOCAL_AMOUNT X Çevrim yapılacak tutar
LOCAL_CURRENCY X Kaynak para birimi
RATE 0 X X Çevrim yapılması istenilen kur
TYPE_OF_RATE ‘M’ X X Kur tipi
READ_TCURR ‘X’ X X Çevrim kurunu TCURR tablosundan okuma göstergesi
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
EXCHANGE_RATE X Çevrim yapılan kur 4.5
FOREIGN_AMOUNT X Yabancı para birimi tutarı
FOREIGN_FACTOR X Yabancı para birimi faktörü
LOCAL_FACTOR X Yerel para birimi faktörü
EXCHANGE_RATEX X Çevrim yapılan kur 4.1
DERIVED_RATE_TYPE LIKE TCURR-KURST X Alternatif çevrim kur tipi
FIXED_RATE X Sabit çevrim kuru 4.5
EXCEPTIONS
Exception Tanım
NO_RATE_FOUND Çevrim kuru bulunamadı
OVERFLOW FOREIGN_AMOUNT alanı çevrim tutarı için çok küçük.
NO_FACTORS_FOUND TCURF tablosunda çevrim faktörü bulunamadı
NO_SPREAD_FOUND TCURS tablosuda aralık bulunamadı
DERIVED_2_TIMES Çevrim kuru tipi sorunu

Örnek1: Türk lirası olarak verilen tutarı sabit bir kur ile Euro’ ya çeviren örnek.

DATA : gv_amount TYPE netpr,
gv_rate   TYPE tcurr-ukurs VALUE ‘2.50000’.
CALL FUNCTION ‘CONVERT_TO_FOREIGN_CURRENCY’
EXPORTING
date  = sy-datum
foreign_currency        = ‘EUR’
local_amount            = ‘600.00’
local_currency          = ‘TRY’
rate                    = gv_rate
type_of_rate            = ‘M’
IMPORTING
foreign_amount          = gv_amount
EXCEPTIONS
no_rate_found           = 1
overflow                = 2
no_factors_found        = 3
no_spread_found         = 4
derived_2_times         = 5
OTHERS                  = 6.
WRITE: ‘Euro tutarı:’, gv_amount LEFT-JUSTIFIED.

<IMG src=”file:///C:\Users\abapmaster\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png” width=162 height=31 v:shapes=””>

Örnek2: Türk lirası olarak verilen tutarı günün kuru ile Euro’ ya çeviren örnek.

DATA : gv_amount TYPE netpr,
gv_rate   TYPE tcurr-ukurs.
CALL FUNCTION ‘CONVERT_TO_FOREIGN_CURRENCY’
EXPORTING
date                    = sy-datum
foreign_currency        = ‘EUR’
local_amount            = ‘600.00’
local_currency          = ‘TRY’
type_of_rate            = ‘M’
IMPORTING
foreign_amount          = gv_amount
exchange_rate           = gv_rate
EXCEPTIONS
no_rate_found           = 1
overflow                = 2
no_factors_found        = 3
no_spread_found         = 4
derived_2_times         = 5
OTHERS                  = 6.
WRITE: ‘Euro tutarı:’, gv_amount LEFT-JUSTIFIED,
/’Çevrim kuru:’, gv_rate.

CONVERT_TO_LOCAL_CURRENCY

Yabancı para birimi tutarını terel para birimi tutarına çevirir.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
CLIENT LIKE SY-MANDT SY-MANDT X X Üst birim
DATE LIKE SYST-DATUM X Çevrim yapılacak kur tarihi
FOREIGN_AMOUNT X Çevrim yapılacak tutar
FOREIGN _CURRENCY X Kaynak para birimi
LOCAL_CURRENCY X Hedef para birimi
RATE 0 X X Çevrim yapılması istenilen kur
TYPE_OF_RATE ‘M’ X X Kur tipi
READ_TCURR ‘X’ X X Çevrim kurunu TCURR tablosundan okuma göstergesi
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
EXCHANGE_RATE X Çevrim yapılan kur 4.5
FOREIGN_FACTOR X Yabancı para birimi faktörü
LOCAL_AMOUNT X Yabancı para birimi tutarı
LOCAL_FACTOR X Yerel para birimi faktörü
EXCHANGE_RATEX X Çevrim yapılan kur 4.1
FIXED_RATE X Sabit çevrim kuru 4.5
DERIVED_RATE_TYPE LIKE TCURR-KURST X Alternatif çevrim kur tipi
EXCEPTIONS
Exception Tanım
NO_RATE_FOUND Çevrim kuru bulunamadı
OVERFLOW FOREIGN_AMOUNT alanı çevrim tutarı için çok küçük
NO_FACTORS_FOUND TCURF tablosunda çevrim faktörü bulunamadı
NO_SPREAD_FOUND TCURS tablosuda aralık bulunamadı
DERIVED_2_TIMES Çevrim kuru tipi sorunu

Örnek1: Euro olarak verilen tutarı günün kuru ile TL’ ye çeviren örnek.

DATA : gv_amount TYPE netpr VALUE ‘307.28260’,
gv_rate   TYPE tcurr-ukurs.
CALL FUNCTION ‘CONVERT_TO_LOCAL_CURRENCY’
EXPORTING
date = sy-datum
foreign_currency  = ‘EUR’
foreign_amount    = gv_amount
local_currency    = ‘TRY’
type_of_rate      = ‘M’
IMPORTING
local_amount      = gv_amount
exchange_rate     = gv_rate
EXCEPTIONS
no_rate_found     = 1
overflow          = 2
no_factors_found  = 3
no_spread_found   = 4
derived_2_times   = 5
OTHERS            = 6.
WRITE: ‘TL tutarı:’, gv_amount LEFT-JUSTIFIED,
/’Çevrim kuru:’, gv_rate.

READ_EXCHANGE_RATE

TCURR tablosundan istenilen tarihin döviz kurunu bulmak için kullanılır. “EXACT_DATE” parametresi boş olarak kullanılır ise belirtilen tarihte kur olmasa bile en yakın tarihteki kuru geri döner.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
CLIENT LIKE SY-MANDT SY-MANDT X X Üst birim
DATE LIKE SYST-DATUM X Kur tarihi
FOREIGN _CURRENCY LIKE TCURR-FCURR X Yabancı para birimi
LOCAL_CURRENCY LIKE TCURR-TCURR X Yerel para birimi
TYPE_OF_RATE LIKE TCURR-KURST ‘M’ X X Kur tipi
EXACT_DATE TYPE XFELD SPACE X Sadece belirtilen tarihteki kur mevcut ise
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
EXCHANGE_RATE X Döviz kuru
FOREIGN_FACTOR X Yabancı para birimi faktörü
LOCAL_FACTOR X Yerel para birimi faktörü
VALID_FROM_DATE LIKE SYST-DATUM X Geçerlilik tarihi başlangıcı
DERIVED_RATE_TYPE LIKE TCURR-KURST X Alternatif çevrim kur tipi
FIXED_RATE X Sabit çevrim kuru 4.5
OLDEST_RATE_FROM LIKE SYST-DATUM En son kur hesaplaması
EXCEPTIONS
Exception Tanım
NO_RATE_FOUND Çevrim kuru bulunamadı
NO_FACTORS_FOUND TCURF tablosunda çevrim faktörü bulunamadı
NO_SPREAD_FOUND TCURS tablosuda aralık bulunamadı
DERIVED_2_TIMES Çevrim kuru tipi sorunu
OVERFLOW
ZERO_RATE Gösterge: Kur mevcut değil

Örnek1: Euro cinsinden “M” tipi kur için günün kurunu ekrana yazan örnek.

DATA gv_rate TYPE tcurr-ukurs.
CALL FUNCTION ‘READ_EXCHANGE_RATE’
EXPORTING
client           = sy-mandt
date = sy-datum
foreign_currency = ‘EUR’
local_currency   = ‘TRY’
type_of_rate     = ‘M’
IMPORTING
exchange_rate    = gv_rate
EXCEPTIONS
no_rate_found    = 1
no_factors_found = 2
no_spread_found  = 3
derived_2_times  = 4
overflow         = 5
zero_rate        = 6
OTHERS           = 7.
WRITE: ‘Günün kuru:’, gv_rate.

MD_CONVERT_MATERIAL_UNIT

Malzemede tanımlı çevrim faktörüne göre birim çevirimi yapar. Malzemenin alternatif ölçü birimlerinin tanımlı olması gerekir. Alternatif ölçü birimleri MM03>Ek veriler>Ölçü birimleri ile görülebilir. Malzeme ölçü birimleri MARM tablosunda saklanır.

IMPORT
Parametre Tanım tipi İlişkili tip Başlanıç d. Ops. Dğr atn. Parametre açıklaması
I_MATNR LIKE MARA-MATNR X Çevrim yapılacak malzeme
I_IN_ME LIKE MARA-MEINS X Kaynak birim
I_OUT_ME LIKE MARA-MEINS X Hedef birim
I_MENGE LIKE EKPO-MENGE X Çevrim miktar
EXPORT
Parametre Tanım tipi İlişkili tip Dğr atn. Parametre açıklaması
E_MENGE LIKE EKPO-MENGE X Çevrilen miktar
EXCEPTIONS
Exception Tanım
ERROR_IN_APPLICATION Uygulama hatası
ERROR Hata

Örnek: Girilen malzeme miktarını tanılandığı birim çevrimine göre dönüştüren örnek.

DATA gv_menge TYPE mseg-menge.
PARAMETERS: pa_matnr TYPE mara-matnr,
pa_in_me TYPE mara-meins,
pa_out_m TYPE mara-meins,
pa_menge TYPE ekpo-menge.
CALL FUNCTION ‘MD_CONVERT_MATERIAL_UNIT’
EXPORTING
i_matnr              = pa_matnr
i_in_me              = pa_in_me
i_out_me             = pa_out_m
i_menge              = pa_menge
IMPORTING
e_menge              = gv_menge
EXCEPTIONS
error_in_application = 1
error                = 2
OTHERS               = 3.
WRITE: ‘Birim dönüşümü yapılan miktar’, gv_menge.

Çalışma Zamanı Hataları

ABAP programının çalışmaya devam edemeyeceği ve sonlandırılması gerektiği durumlardır. Aşağıdaki durumlarda oluşabilir.

  • Yakalanmayan istisnalar
  • Yakalanabilir ama yakalanmayan istisna oluştuğunda.
  • Yakalanamayan istisna oluştuğunda.
  • Mesaj tipi X olan mesaj gönderildiğinde.
  • ASSERT ifadesi kullanıldığında.

ST22 işlem kodu aracılığıyla görüntülenebilirler.

İSTİSNA YÖNETİMİ (EXCEPTION HANDLING)

Programda olağandışı bir durumda oluştuğunda hata dökümü ile sonlanmasını önlemek için istisna yönetimi kullanılır.

Sınıf temelli yakalanabilen istisnalar, ABAP çalışma ortamında veya ABAP programında oluşabilir. İstisnai durum oluşturmak için aşağıdaki ifadeler kullanılır.

  • RAISE EXCEPTION
  • Koşullu ifadelerde THROW tanımlanarak

Oluşturulan istisnalar TRY-CATCH-ENDTRY ifadeleri ile yakalanırlar.

Fonksiyon modülleri ve yöntemlerde sınıf temelli olmayan istisnalardır. Class Builder, Function Builder veya yerel sınıflar içerisine tanımlanırlar.

RAISE EXCEPTION

Geçerli işlem bloğunun çalışmasını iptal eder ve sınıf temelli istisna oluşturur.

THROW

Koşullu ifadelerde tanımlanan istisnanın oluşmasını sağlar. COND veya SWITCH ifadeleri kullanılır.

Örnek: Sıfıra bölme hatasını yakalayan bir örnek. Sıfıra bölme istisnasını yakalamak için CX_SY_ARITHMETIC_ERROR sınıfı kullanılmıştır.

DATA: gv_sonuc TYPE i,
gv_hata TYPE string,
gs_root TYPE REF TO cx_sy_arithmetic_error.
TRY.
gv_sonuc = 1 / 0.
CATCH cx_sy_arithmetic_error INTO gs_root.
gv_hata = gs_root->get_text( ).
WRITE: / ‘Hata:’, gv_hata.
ENDTRY.

SE24 işlem kodundan CX_SY_ARITHMETIC_ERROR sınıfının süper ve alt sınıflarını görebilirsiniz.

HATA AYIKLAMA (DEBUGGING)

HATA AYIKLAMA (DEBUGGING)

ABAP kodunda hataları ayıklamak için güçlü bir hata ayıklama aracı bulunur. Hata ayıklamayı kolaylaştıracak birçok özelliği barındırır.

ABAP Düzenleyici’ de iken, Yardımcı programlar ® Ayarlar ® Debugging ile hata ayıklama seçenekler yönetilebilir. Harici hata ayıklama için kullanıcı seçimi yapılabilir. Hata ayıklama için eski veya yeni hata ayıklama kullanılabilir. Hata ayıklama aşağıdaki durumlarda başlatılabilir.

· program çalışırken

· programı çalıştırmadan önce,

o kod içerisine kesme noktası eklenerek

o koda hata ayıklama ifadesi eklenerek

Program Çalışırken Hata Ayıklama Programını Çalıştırmak

Uygulama çalışırken hata ayıklama programını çalıştırmak ve sonlandırmak için aşağıdaki fonksiyon kodları komut alanına yazılarak kullanılabilir.

Fonksiyon kodu Anlamı
/h ABAP ve ekran ifadeleri için hata ayıklama programını çalıştırır.
/hs ABAP, ekran ifadeleri ve sistem fonksiyonlarını da içerecek şekilde hata ayıklama programını çalıştırır.
/hx Sadece ABAP ifadeleri için hata ayıklama programını çalıştırır.
/ha Çalıştırılmış olan hata ayıklama oturumunu (kullanıcı girişi beklediği anda) sonlandırır.

Programı çalıştırmadan önce

Kod içerisine BREAK-POINT ifadesi veya BREAK makrosu eklenebilir.

BREAK-POINT: ABAP kodunda kesme noktası oluşturmak için kullanılır. ID eki kullanılmadı sürece sürekli aktif olur ve program kodu bu satıra her erişiminde hata ayıklama programı çalışır. Kullanımı aşağıdaki şekildedir.

BREAK-POINT { [ID group]
| [log_text] }.

ID group: Kontrol noktası grubu veya aktivasyon düzeni kullanılarak ifadenin aktif olması program dışarısında kontrol edilir.

log_text: Sistem logları için ek metin belirtmek için kullanılır.

Not: BREAK kullanici_adi ifadesi ön tanımlı makrodur. Makroda kullanılan kullanıcı programı çalıştırdığında bu satıra ulaşılınca hata ayıklama programı çalışır.

ABAP Düzenleyici içerisinden Yardımcı programlar menüsünden kesme noktası eklenebilir.

 

ABAP düzenleyici ekranında numaraların yanındaki boş alana mouse’ un sol tuşuna tıklayarak da kesme noktası eklenebilir eklenebilir.

 

Aynı boş alana sağ tıklayarak çıkan menüden de kesme noktası eklenebilir.

 

Hata Ayıklama Programı

ABAP hata ayıklama programı çalıştığında aşağıdaki ekran açılır. Aşağıdaki ekran görüntüsü yeni hata ayıklama programının ekran görüntüsüdür. Kullanıcı ABAP düzenleyicide bulunan Yardımcı programlar->Ayarlar->Debugging menüsünden ABAP Debugger seçeneğini değiştirmedi ise veya oturum sayısı 6’ ya ulaşmadı ise yeni hata ayıklama programı çalışır. Diğer durumlarda eski hata ayıklama programı çalışır.

 

Araç çubuğunda aşağıdaki butonlar yer alır.

 

Buton Tanım Kısayol Açıklama
Single Step F5 Programın akışını bir sonraki satıra geçirmek için kullanılır. Eğer ifade bir işlem bloğu çağırıyor ise o işlem bloğuna girer.
Execute F6 Programın akışını bir sonraki satıra geçirmek için kullanılır. Eğer çalıştırılacak satır bir işlem bloğuna dallanacak ise ise o işlem bloğu çalıştırılır ve ilerler.
Return F7 İçinde bulunan işlem bloğu içerisindeki tüm alt satırlar çalıştırılır. İşlem bloğu dışındaki bir sonraki ifadeye geçilir. Döngü içerisinde kullanıldı ise döngü bitene kadar kesme noktası satırına döner.
Continue F8 Altında bulunan tüm satırları çalıştırır. Döngü içerisinde kullanıldı ise döngü bitene kadar kesme noktası satırına döner.
Create Breakpoint in Command, Method,… F9 Belirtilen ABAP anahtar kelimesi, yöntem, fonksiyon, … için kesme noktası ekler.
Create Watchpoint Shift+F4 Watchpoint oluşturmak için kullanılır. Watchpoint, belirtilen değişkenin satırına yönlenmeyi sağlar. Koşul girilebilir. Koşula göre yönlenme sağlanır.
Save layout Ctrl+Shift+F3 Hata ayıklama ekranında kullanılan düzeni saklamak için kullanılır.

 

Araç çubuğunun altındaki bilgi kutularında şu bilgiler bulunur.

  • program ismi,
  • include ismi,
  • çalıştırılan olay,
  • imlecin bulunduğu satır numarası,
  • sy-subrc sistem değişkeninin değeri,
  • sy-tabix sistem değişkeninin değeri

Bilgi kutularının altında veri nesnelerini gösteren sekmeler bulunur.

Bilgi kutularının altında veri nesneleri, olaylar, kesme noktaları, watchpoint’ ler ve diğer nesneleri görüntüleyen sekmeler bulunur.

 

Desktop 1 sekmesinde değişkenler değerleri görülebilir. Kod satırından herhangi bir değişken, yapı, dahili tablo çift tıklanırsa veya Variable tablosundaki alana yazılırsa o değişkenle ilgili bilgilere ulaşılabilir.

Değişken değerleri tablodaki Val. Alanında görülebilir. Değişkenin değerleri alanında yanında bulunan kalem simgesine tıklayarak değiştirilebilir.

 

Locals ve Globals sekmelerinde program içerisinde tanımlı yerel ve global değişkenler görülebilir.

Dahili tabloların içeriğini görmek için tablo ismi veya yanında mavi kutu var ise üzerine çift tıklamak gerekir. Seçilen tablo için Tables sekmesine yönlenir ve burada tablo içeriği görüntülenir.

Dahili tablo içeriği görüntülenirken bir satır üzerinde sağ tuş tıklanarak, yapılabilecek işlemler listelenebilir. Tablo içeriğini yerel dosyaya olarak kaydetme, satır silme, değiştirme gibi işlemler yapılabilir.

 

Herhangi bir satırdaki tüm değişken değerlerini görmek için Line sütununa bağlı satır çift tıklanır. Çift tıklanan satıra ait değişkenler, değerleri ve özellikleri alt alta görüntülenir.

Haya ayıklama ekranının sağ tarafında bulunan Services of the Tool butonu ile her sekmede ek işlemler yapılabilir.

Tables sekmesindeki seçenekler aşağıdadır.

Diğer sekmelerde veri nesneleri, olaylar, kesme noktaları, watchpoint’ ler ve diğer nesneler görüntülenir ve özellikleri kullanılabilirler.

Hata ayıklama programı çalıştıktan sonra belli bir süre işlem yapılmadı zaman zaman aşımı hata ayıklama ekranını kapatılır ve hata ayıklama yapılan program sonlanır ve ana menüye yönlenir.

MAİL GÖNDERME

MAİL GÖNDERME

Mail göndermek için CL_BCS sınıfı kullanılır. Bunun dışında aşağıdaki eski fonkiyonlar kullanılabilir ancak 6.10 versiyonundan sonra kullanılması önerilmez. CL_BCS sınıfı eski fonksiyonlara göre daha fazla seçenek ve esneklik sunar.

CL_BCS sınıfı ile aşağıdaki sınıftan nesne oluşturularak ve yöntemler kullanılarak basit şekilde mail gönderimi yapılabilir.

Sınıf / Nesne Metod/nesne Tip Anlamı
cl_bcs create_persistent nesne Gönderim isteği nesnesi oluşturur.
cl_document_bcs create_document nesne Mail içeriği nesnesi oluşturur.
gonderim_istegi set_document yöntem Dökümanı gönderi isteğine ekler.
cl_sapuser_bcs create nesne Mail gönderen kişi nesnesini oluşturur.
gonderim_istegi set_sender yöntem Gönderi isteğine göndereni ekleyen yöntem.
cl_cam_address_bcs create_internet_address nesne Alıcı nesnesi oluşturur.
gonderim_istegi add_recipient yöntem Gönderi isteğine alıcı ekler.
gonderim_istegi send yöntem Gönderi isteğini gerçekleştirir.

 

Mail özellikleri (mesaj içeriği, alıcı ve gönderen, ek,…) tanımlandıktan sonra mail gönderim işlemi yapılabilir. Gönderilen mailler SAPconnect tarafından toplanır ve belirli periyotta gönderilir. Gönderim periyodu SAPconnect içerisinde bir defa konfigüre edilir. Gönderim işlemi SCOT işlem kodu ile gönderi zamanını beklemeden başlatılabileceği gibi RSCONN01 programı kullanılarak da çalıştırılabilir.

Gönderim periyodunu beklemeden mailin gönderilmesi için CL_BCS sınıfındaki set_send_immediately yöntemi kullanılabilir.

Mail göndermek için kullanılan eski fonksiyonlar şunlardır.

· SO_NEW_DOCUMENT_SEND_API1

· SO_NEW_DOCUMENT_ATT_SEND_API1

· SO_DOCUMENT_SEND_API1

· SO_OBJECT_SEND

MAIL GÖNDERME ÖRNEKLERİ

1. CL_BCS sınıfı kullanılarak SPFLI tablosundaki bazı sütunları mail gönderen örnek. alankisi@abcdef.com kısmına mail gönderilmek istenen kişinin mail adresi yazılmalıdır.

DATA: gs_spfli TYPE spfli.
DATA: go_gonderim_istegi TYPE REF TO cl_bcs,
gt_mailicerigi     TYPE STANDARD TABLE OF soli,
gs_mailicerigi     TYPE soli,
go_mailbelgesi     TYPE REF TO cl_document_bcs,
go_gonderen        TYPE REF TO cl_sapuser_bcs,
go_alicibilgileri  TYPE REF TO if_recipient_bcs,
go_bcs_istisna     TYPE REF TO cx_bcs,
gv_sent_to_all     TYPE os_boolean.
gs_mailicerigi = ‘SPFLI Tablo içeriği aşağıdaki gibidir.’.
APPEND gs_mailicerigi TO gt_mailicerigi.
SELECT * FROM spfli INTO gs_spfli UP TO 10 ROWS.
CLEAR gs_mailicerigi.
CONCATENATE gs_spfli-carrid   gs_spfli-connid gs_spfli-countryfr
gs_spfli-cityfrom gs_spfli-airpfrom
INTO gs_mailicerigi SEPARATED BY space.
APPEND gs_mailicerigi TO gt_mailicerigi.
ENDSELECT.
TRY.
go_gonderim_istegi = cl_bcs=>create_persistent( ).
go_mailbelgesi = cl_document_bcs=>create_document(
i_type    = ‘RAW’
i_text    = gt_mailicerigi
i_subject = ‘Örnek CL_BCS Sınıfı Mail Gönderimi’ ).
CALL METHOD go_gonderim_istegi->set_document( go_mailbelgesi ).
go_gonderen = cl_sapuser_bcs=>create( sy-uname ).
CALL METHOD go_gonderim_istegi->set_sender
EXPORTING
i_sender = go_gonderen.
go_alicibilgileri = cl_cam_address_bcs=>create_internet_address(
‘alankisi@abcdef.com’ ).
CALL METHOD go_gonderim_istegi->add_recipient
EXPORTING
i_recipient = go_alicibilgileri
i_express   = ‘X’.
CALL METHOD go_gonderim_istegi->send(
EXPORTING
i_with_error_screen = ‘X’
RECEIVING
result              = gv_sent_to_all ).
IF gv_sent_to_all = ‘X’.
COMMIT WORK.
WRITE ‘Mail gönderildi.’.
ENDIF.
CATCH cx_bcs INTO go_bcs_istisna.
WRITE: ‘Hata oluştu!’, go_bcs_istisna->error_type.
EXIT.
ENDTRY.

2. Eski SO_NEW_DOCUMENT_SEND_API1 fonksiyonu kullanarak mail gönderen örnek.

DATA   : gt_alicibilgileri  TYPE STANDARD TABLE OF somlreci1,
gs_alicibilgileri  TYPE somlreci1,
gt_mailicerigi     TYPE STANDARD TABLE OF solisti1,
gs_mailicerigi     TYPE solisti1,
gs_mailozellikleri TYPE sodocchgi1.
* Mail alıcıları
gs_alicibilgileri-receiver = ‘alankisi@abcdef.com’.
gs_alicibilgileri-rec_type = ‘U’.
APPEND gs_alicibilgileri TO gt_alicibilgileri.
* Mailin Konu kısmı ve özellikleri
gs_mailozellikleri-obj_langu  = ‘T’.
gs_mailozellikleri-obj_name   = ‘Mesaj’.
gs_mailozellikleri-obj_descr  = ‘Örnek Mail Gönderimi!’.
*Mailin içeriği dahili tabloya ekleniyor
gs_mailicerigi-line = ‘Mail içeriği’.
APPEND gs_mailicerigi TO gt_mailicerigi.
* Mail gönderme fonksiyonu
CALL FUNCTION ‘SO_NEW_DOCUMENT_SEND_API1’
EXPORTING
document_data                    = gs_mailozellikleri
commit_work                      = ‘X’
TABLES
object_content                   = gt_mailicerigi
receivers                        = gt_alicibilgileri
EXCEPTIONS
too_many_receivers               = 1
document_not_sent                = 2
document_type_not_exist          = 3
operation_no_authorization       = 4
parameter_error                  = 5
x_error                          = 6
enqueue_error                    = 7
OTHERS                           = 8.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

3. Eski SO_DOCUMENT_SEND_API1 fonksiyonu kullanılarak HTML içeriği olan bir mail gönderim örneği. Mailin mesaj kısmına iki sütundan oluşan html tablo ekler.

DATA: gt_alicibilgileri  TYPE STANDARD TABLE OF somlreci1,
gs_alicibilgileri  TYPE somlreci1,
gt_mailicerigi     TYPE STANDARD TABLE OF solisti1,
gs_mailicerigi     TYPE solisti1,
gt_icerikbilgileri TYPE STANDARD TABLE OF sopcklsti1,
gs_icerikbilgileri TYPE sopcklsti1,
gs_mailozellikleri TYPE sodocchgi1,
gv_gonderen        TYPE soextreci1-receiver VALUE ‘gonderen@abcdef.com’.
* Mail alıcıları
gs_alicibilgileri-receiver = ‘alankisi@abcdef.com’.
gs_alicibilgileri-rec_type = ‘U’.
APPEND gs_alicibilgileri TO gt_alicibilgileri.
* Mailin Konu kısmı ve özellikleri
gs_mailozellikleri-obj_langu  = ‘T’.
gs_mailozellikleri-obj_name   = ‘Mesaj’.
gs_mailozellikleri-obj_descr  = ‘Örnek HTML Mail Gönderimi’.
*Mailin içeriği dahili tabloya ekleniyor.
gs_mailicerigi-line = ‘<p>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘HTML Tablo Örneği’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘</p>’.
APPEND gs_mailicerigi TO gt_mailicerigi.

*HTML tablo ekleniyor
gs_mailicerigi-line = ‘<table border=”1″ width=”100%” id=”table2″>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘<tr>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘<td>Başlık Sütunu 1</td>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘<td>Başlık Sütunu 2</td>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘</tr>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘<tr>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘<td>İçerik Sütunu 1</td>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘<td>İçerik Sütunu 2</td>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘</tr>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
gs_mailicerigi-line = ‘</TABLE>’.
APPEND gs_mailicerigi TO gt_mailicerigi.
* Veri tablosu bilgileri
gs_icerikbilgileri-transf_bin = space.
gs_icerikbilgileri-head_start = 1.
gs_icerikbilgileri-head_num   = 0.
gs_icerikbilgileri-body_start = 1.
DESCRIBE TABLE gt_mailicerigi LINES gs_icerikbilgileri-body_num.
gs_icerikbilgileri-doc_type   = ‘HTM’.
APPEND gs_icerikbilgileri TO gt_icerikbilgileri.
CALL FUNCTION ‘SO_DOCUMENT_SEND_API1’
EXPORTING
document_data              = gs_mailozellikleri
commit_work                = ‘X’
sender_address             = gv_gonderen
sender_address_type        = ‘INT’
TABLES
packing_list               = gt_icerikbilgileri
contents_txt               = gt_mailicerigi
receivers                  = gt_alicibilgileri
EXCEPTIONS
too_many_receivers         = 1
document_not_sent          = 2
document_type_not_exist    = 3
operation_no_authorization = 4
parameter_error            = 5
x_error                    = 6
enqueue_error              = 7
OTHERS                     = 8.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

Gönderilen Maillerin Kontrolü

SOST işlem kodu ile SAP sisteminden gönderilen mailleri kontrol edilebilir. Kontrol etmek için,

1. SOST işlem koduna girilir.

Period tabında gönderim tarihi (send date) bilgileri doldurulur. Send status tabında tüm seçenekler seçilir ve Refresh butona tıklanır. Yenilenen listede gönderilen mailler görülebilir.

Bir mailin içeriğini görüntülemek için listeden seçtikten sonra görüntüle ( ) butonuna tıklanması yeterlidir.

SAPconnect Ayarlarının Kontrolü

Mail göndermek için SAPconnect mail konfigürasyonunun daha önceden yapılmış olması gerekir. Aşağıdaki adımlarla SAPconnect ayarlarını kontrol edebilirsiniz.

1. SCOT işlem koduna çalıştırılır.

2. SMTP yazısına çift tıklanır.

3. Mail adresi, port numarası ve mail gönderme periyodunun doldurulmuş olması gerekir. Node in use tıklanmış ve Supported address types kısmında Internet tıklı ise mail ayarları yapılmış demektir. Hours/minutes girilen periyoda göre mail gönderimi gerçekleştirilir.

Gönderim Periyoduna Bağlı Olmadan Mail Gönderme İşlemininin Başlatılması

Mailler SAPconnect içerisinde tanımlanan periyoda göre gönderilir. Eğer bu periyodu beklemek istemiyorsanız SAPconnect Administration (SCOT) ile mail gönderimini hemen başlatabilirsiniz.

1. SCOT işlem koduna girilir.

2. SMTP yazısına tıklanır ve araç çubuğunda en sağdaki Start send process <IMG border=0 src=”file:///C:\Users\abapmaster\AppData\Local\Temp\msohtmlclip1\01\clip_image013.jpg” width=20 height=20 v:shapes=””> ikonu (veya Ctrl+F7) tıklanır.

3. Açılan ekranda Start butonu tıklanır.

Eğer bekleyen mesaj var ise yeni bir ekran açılır ve gönderilen maillerin bilgileri görüntülenir.

Gönderilecek mesaj yok ise No messages sent mesajı çıkar.

ÇIKTILARI PDF FORMATINA DÖNÜŞTÜRME

ÇIKTILARI PDF FORMATINA DÖNÜŞTÜRME

Liste çıktısı veya smartform çıktısı pdf formatına dönüştürülebilir. Smartform içeriği önce OTF ardından pdf formatına dönüştürülür.

ABAP listesini ve OTF içeriği pdf formatına dönüştürmek için birkaç yöntem kullanılabilir.

1. Kod yazmadan yazıcı kuyruğuna gönderilen bir çıktı pdf formatına dönüştürülebilir. Bu işlem için yazdırılan çıktının kuyruk talep numarası gerekir. Kuyruk taleplerini görmek için SP01 veya SP02 işlem kodlarını kullanabilirsiniz.

ABAP Düzenleyici ile RSTXPDFT4 programı çalıştırılarak kuyruk talep numarası seçim ekranına girilir. Program çalıştığında çıktı pdf formatına çevrilir ve bilgisayarda belirtilen dosya adı kısmına kaydedilir.

2. Aşağıdaki çıktı türleri kod yazılarak pdf formatına dönüştürülebilir.

· Smartformlar: Önce OTF formatına ardından pdf formatına çevrilir.

· ABAP listesi: Çıktı yazıcı kuyruğuna gönderilir, daha sonra kuyruk talebi pdf formatına dönüştürülür.

PDF DÖNÜŞTÜRME ÖRNEKLERİ

1. Smartform’u otf formatına dönüştüren, daha sonra otf içeriği pdf formatına çeviren örnek. Örneği kullanabilmek için Z_SF_TEST isimli smartform oluşturulmalıdır. Program çalıştırıldığında pdf dosyasını kaydetmek için dosya yolu sorar.

DATA: gv_formname             TYPE tdsfname,
gv_fm_name              TYPE rs38l_fnam,
gs_output_options       TYPE ssfcompop ,
gs_control_parameters   TYPE ssfctrlop,
gs_job_output_info      TYPE ssfcrescl,
gs_document_output_info TYPE ssfcrespd,
gs_job_output_options   TYPE ssfcresop.
DATA: gs_job_output TYPE ssfcrescl.
DATA: gt_otf TYPE STANDARD TABLE OF itcoo,
gt_pdf TYPE STANDARD TABLE OF tline.
DATA: gv_bin_filesize TYPE i.
DATA: gv_filename TYPE string,
gv_filepath TYPE string,
gv_fullpath TYPE string.
gv_formname = ‘Z_SF_TEST’.
CALL FUNCTION ‘SSF_FUNCTION_MODULE_NAME’
EXPORTING
formname           = gv_formname
IMPORTING
fm_name            = gv_fm_name
EXCEPTIONS
no_form            = 1
no_function_module = 2
OTHERS             = 3.
gs_control_parameters-device    = ‘PRINTER’.
gs_output_options-tdimmed       = ‘X’.
gs_output_options-tddest        = ‘LOCL’.
gs_control_parameters-no_dialog = ‘X’.
gs_control_parameters-preview   = space.
gs_control_parameters-getotf    = ‘X’.
CALL FUNCTION gv_fm_name
EXPORTING
control_parameters = gs_control_parameters
output_options     = gs_output_options
user_settings      = space
IMPORTING
job_output_info    = gs_job_output
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.
gt_otf[] = gs_job_output-otfdata[].
CALL FUNCTION ‘CONVERT_OTF’
EXPORTING
format        = ‘PDF’
max_linewidth = 132
copynumber    = 0
IMPORTING
bin_filesize  = gv_bin_filesize
TABLES
otf           = gt_otf
lines         = gt_pdf.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
CHANGING
filename             = gv_filename
path                 = gv_filepath
fullpath             = gv_fullpath
EXCEPTIONS
cntl_error           = 1
error_no_gui         = 2
not_supported_by_gui = 3
OTHERS               = 4.
CONCATENATE gv_fullpath ‘.pdf’ INTO gv_fullpath.
CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
bin_filesize = gv_bin_filesize
filename     = gv_fullpath
filetype     = ‘BIN’
TABLES
data_tab     = gt_pdf.

2. ABAP listesini ekrana yazdıran örnek. Örnek iki programdan oluşur. İlk program yazdırılacak ABAP listesidir. Ekrana SPFLI tablosundaki bazı sütunları yazdırır. İkinci program birinci programı yazıcı kuyruğuna gönderecek şekilde çalıştırır ve kuyruk talebi numarasını Z_R_TEST_Y_SPONO nesnesi ile hafızaya aktarır. Birinci program ABAP listesini yazdıktan sonra, ikinci program hafızaya aktarılan kuyruk talep numarasını pdf formatına dönüştürür.

a. İlk program Z_R_TEST_Y.

DATA : gs_spfli TYPE spfli,
gv_spono LIKE tsp01-rqident.
SELECT * FROM spfli INTO gs_spfli UP TO 10 ROWS.
WRITE: / gs_spfli-carrid, gs_spfli-connid, gs_spfli-countryfr,
gs_spfli-cityfrom, gs_spfli-airpfrom.
ENDSELECT.
gv_spono = sy-spono.
EXPORT gv_spono FROM gv_spono TO MEMORY ID ‘Z_R_TEST_Y_SPONO’.

b. İkinci program.

DATA: gv_spono LIKE tsp01-rqident.
DATA: gt_pdf TYPE STANDARD TABLE OF tline.
DATA: gv_bin_filesize TYPE i.
DATA: gv_filename TYPE string,
gv_filepath TYPE string,
gv_fullpath TYPE string.
SUBMIT z_r_test_y TO SAP-SPOOL
WITHOUT SPOOL DYNPRO
DESTINATION space
COVER TEXT ‘ Kuyruk Talebi Başlığı’
NEW LIST IDENTIFICATION ‘X’
IMMEDIATELY space
AND RETURN.
IMPORT gv_spono TO gv_spono FROM MEMORY ID ‘Z_R_TEST_Y_SPONO’.
CALL FUNCTION ‘CONVERT_ABAPSPOOLJOB_2_PDF’
EXPORTING
src_spoolid              = gv_spono
TABLES
pdf                      = gt_pdf
EXCEPTIONS
err_no_abap_spooljob     = 1
err_no_spooljob          = 2
err_no_permission        = 3
err_conv_not_possible    = 4
err_bad_destdevice       = 5
user_cancelled           = 6
err_spoolerror           = 7
err_temseerror           = 8
err_btcjob_open_failed   = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed  = 11
OTHERS                   = 12.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
CHANGING
filename                = gv_filename
path                    = gv_filepath
fullpath                = gv_fullpath
EXCEPTIONS
cntl_error              = 1
error_no_gui            = 2
not_supported_by_gui    = 3
OTHERS                  = 4.
CONCATENATE gv_fullpath ‘.pdf’ INTO gv_fullpath.
CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
bin_filesize = gv_bin_filesize
filename     = gv_fullpath
filetype     = ‘BIN’
TABLES
data_tab     = gt_pdf.

3. Internal tablo içeriğini pdf formatına çeviren örnek. SPFLI tablosundaki bazı sütunlar TLINE tipindeki internal tabloya eklenir. Eklenen kayıtlar PRINT_TEXT fonksiyonu ile otf formatına çevrilir. Otf formatına çevrilen veri CONVERT_OTF fonksiyonu ile pdf formatına çevrilir.

DATA: gs_spfli  TYPE spfli.
DATA: gs_header  TYPE thead,
gs_options TYPE itcpo,
gs_result  TYPE itcpp.
DATA: gt_otfdata TYPE STANDARD TABLE OF itcoo,
gt_lines   TYPE STANDARD TABLE OF tline,
gs_lines   TYPE tline.
DATA: gv_bin_filesize TYPE i.
DATA: gv_filename TYPE string,
gv_filepath TYPE string,
gv_fullpath TYPE string.
SELECT * FROM spfli INTO gs_spfli UP TO 10 ROWS.
CLEAR gs_lines.
CONCATENATE gs_spfli-carrid   gs_spfli-connid gs_spfli-countryfr
gs_spfli-cityfrom gs_spfli-airpfrom
INTO gs_lines SEPARATED BY space.
APPEND gs_lines TO gt_lines.
ENDSELECT.
gs_options-tddest   = ‘LOCL’.
gs_options-tdnewid  = ‘X’.
gs_options-tdgetotf = ‘X’.
CALL FUNCTION ‘PRINT_TEXT’
EXPORTING
device        = ‘PRINTER’
dialog        = ‘ ‘
header        = gs_header
OPTIONS       = gs_options
IMPORTING
RESULT        = gs_result
TABLES
lines         = gt_lines
otfdata       = gt_otfdata
EXCEPTIONS
canceled      = 01
device        = 02
form          = 03
OPTIONS       = 04
unclosed      = 05
unknown       = 06
format        = 07
textformat    = 08
communication = 09.
REFRESH gt_lines.
CALL FUNCTION ‘CONVERT_OTF’
EXPORTING
format        = ‘PDF’
max_linewidth = 132
copynumber    = 0
IMPORTING
bin_filesize  = gv_bin_filesize
TABLES
otf           = gt_otfdata
lines         = gt_lines.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
CHANGING
filename             = gv_filename
path                 = gv_filepath
fullpath             = gv_fullpath
EXCEPTIONS
cntl_error           = 1
error_no_gui         = 2
not_supported_by_gui = 3
OTHERS               = 4.
CONCATENATE gv_fullpath ‘.pdf’ INTO gv_fullpath.
CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
bin_filesize = gv_bin_filesize
filename     = gv_fullpath
filetype     = ‘BIN’
TABLES
data_tab     = gt_lines.

SMARTFORMS1

SMARTFORMS

Birçok modülde form yapısında çıktı ihtiyacı vardır. İhtiyaç duyulan form yapısındaki çıktılar için önceleri SAPscript kullanılıyordu. Smartform SAPscript formların yerine geçmiştir. Temel olarak sayfalar tasarlanır. Sayfa içerisine sayfa, grafik, pencere, adres gibi birçok bileşen eklenebilir.

SMARTFORM BİLEŞENLERİ

Sayfa (Page)

Çıktı boyutu, düzeni ve sırasının tanımlandığı bileşendir. Birden fazla sayfa oluşturarak farklı form düzenleri oluşturulabilir. Diğer bileşenler sayfa bileşeni üzerine yerleştirilirler.

Ana Pencere

Gösterilecek ana içeriktir. Yazdırma esnasında içerik bir sayfada bitmediye yeni sayfaya geçilir. Sadece bir tane ana pencere tanımlanabilir.

İkincil Pencereler

Genelde sayfa değiştikçe değişmeyen içerikler eklemek için kullanılır.

Metinler

Statik ve dinamik metin eklemek için kullanılır. Paragraf ve font ayarları yapılabilir.

Grafik

Resim eklemek için kullanılır.

Tablolar

Verileri tablo düzeninde göstermek için kullanılır. Üç bölümden oluşur.

1. Başlık alanı: Ana içerikden önce görüntülenen başlık bilgileri.

2. Ana alan: Ana içerik.

3. Sayfa altlığı: Ana içerikden sonra görüntülenen bilgileri.

Şablon

Verileri hücresel yapıda göstermek için kullanılır.

Döngü

İnternal tablodaki içeriğin gösterilmesi için kullanır.

Program Satırları

Kod satırları kullanılmasını sağlar.

Alternatif

Komut

Dosya

SAP Form Builder

Smartform nesnelerinin bakımının yapıldığı işlem kodudur. İşlem kodu SMARTFORMS dur.

Örnek: Yeni bir smartform oluşturan ve görüntüleyen örnek.

SMARTFORMS işlem kodu çalıştırın. Form alanına “Z_SF_TEST” yazın ve “Yarat” butonuna tıklayın.

Form Builder ana ekranı açılır.

“Sakla” butonuna tıklayarak formu kaydedin. Kaydet butonuna tıkladığınızda nesneyi package’ a bağlamanızı ve request almanızı isteyecektir. Bu işlemlerden sonra smartform’ u aktif edin.

Formu çalıştırmak için “Deneme” tuşuna ( ) veya F8’ e tıklayabilirsiniz. Çalıştırdığınızda “Function Builder açılacaktır. Function Builder’ ın açılmasının nedeni smartformların bir fonksiyona dönüştürülmesidir.

Bir kez daha “Deneme” tuşuna ( ) veya F8 tuşuna tıklayın. Fonksiyon modül test giriş ekranı açılır.

“Çalıştır” butonu ( ) veya F8 tuşu ile fonksiyonu çalıştırabilirsiniz.

Yazdırma seçenekleri ekrana gelecektir. Bir yazıcı seçerek “Yazdırma öngörünümü” butonu ile smartform’ u görüntüleyebilirsiniz.

Sayfaya bir nesne eklenmediği için boş görünecektir.

“F3” tuşuna veya “Geriye” ( ) butonuna birkaç defa tıklayarak Form Builder ekranına dönebilirsiniz.

Form Builder Arayüzü

Builder’ ın sol tarafında aşağıdaki iki ana grup mevcuttur.

    Genel ayarlar: Forma ait özellikler, forma aktarılan parametreler, değişken tanımları bulunur.Sayfalar ve pencereler: Sayfalar ve sayfalara ait bileşenler bulunur.

Ortadaki alanda sol tarafta tıklanan nesnelere ait seçenekler gelir.

Sağ tarafta “Form Painter” ekranı vardır. Seçilen sayfa üzerindeki bileşenler görüntülemeye yarar.

Form Painter araç çubuğundaki “Form Painter” butonu veya “F9” tuşu ile saklanıp, gösterilebilir.

Bu üç alan dışında formda kullanılabilecek alan listesinin görüntülendiği alan listesi sol alt köşede açılabilir. Alan listesini açmak için menüden “Yardımcı programlar” ve “Alan listesini aç/kapa” seçilebilir veya Ctrl+Değiştir+F4 tuş kombinasyonu kullanılabilir.

Örnek: İkincil pencere oluşturarak içerisine metin yerleştirme.

%PAGE1 üzerinde iken sağ tuşa tıklayarak “Yarat”, “Pencere” seçerek ikincil pencere oluşturun.

Orta kısımda pencere ile ilgili özellikler görüntülenecektir. Üst kısımda bulunan Pencere ve Tanım kısmından nesne ismini ve tanımını değiştirebilirsiniz.

“Çıktı seçenekleri” tabından genişlik yükseklik ve pozisyon bilgilerini değiştirebilirsiniz veya direkt olarak form painter üzerinden bu işlemleri yapabilirsiniz. Aşağıdaki değerleri girdikten sonra “Enter” tuşuna basın.

Form painter üzerinde pencerenin yerinin ve boyutunun değiştiğini görebilirsiniz.

PENCERE1 üzerine sağ tıklayıp, “Yarat”, “Metin” seçeneğini seçin.

PENCERE1 klasörünün altında yeni bir metin nesnesi oluşacaktır.

Bu nesne seçili iken orta kısımdan “Genel özellikler” tabını seçin. Metin tipi “E Metin öğesi” seçili olduğu için metin yazılacak alan açık geldi. Metin alanına “Kullanıcı adı” yazın. Sol taraftaki alan listesinden “Sistem alanları”, “SYSF”, “USERNAME” alanını seçerek, yazdığınız metin alanının sağına sürükleyin.

Metin alanının son hali aşağıdaki şekilde olmalı.

Formu aktif edip, çalıştırdığınız zaman sayfanın üst kısmında SAP kullanıcı adınızın yazması gerekiyor.

Eklediğiniz pencere dışında çerçeve görünmesiniz istiyorsanız, “Çıktı seçenekleri” tabında “Çizgi” ve “Çerçeve ve gölgelendirmeyi her zm.çiz” tıkını etkinleştirebilirsiniz.

Örnek: Smartform içerisinde değişken ve yapı tanımlama ve değer atama örneği.

Genel tanımlar kısmından “Genel veriler” sekmesine tıklayın. Aşağıdaki nesneleri tanımlayın.

    GV_BASLIK: 20 karakter uzunluğunda veri nesnesi
    GS_SPFLI: SPFLI tablo tipinde yapı.

GV_BASLIK nesnesine “Uçuş Bilgileri” varsayılan değeri atanmıştır. Eğer veri nesnesi içeriğinin değiştirilmemesi istenseydi “Sabit” seçeneği seçilmesi yeterli olacaktı.

Oluşturulan GS_SPFLI yapısına SPFLI dâhili tablosuna SPFLI tablosundan bir kayıt aktarma yerine, bileşenlere değerler “Program satırları” nesnesinde atanacaktır. PENCERE1 nesnesine sağ tıklayın, “Yarat”, “Akış mnt.” ve “Program satırlar” seçeneğini seçin. Yeni bir program satırı nesnesi açılacaktır.

Program satırları nesnesinde “Giriş parametreleri” kısmına işlem yapılacak veri nesnesini “GS_SPFLI” ve GS_SPFLI yapısına atama yapan kod bloğunu ekleyin.

Daha önceki PENCERE1 nesnesinde oluşturulan metin nesnesi içerisine alan listesinden aşağıdaki bileşenleri metin nesnesine taşıyın.

    GV_BASLIK
    GS_SPFLI-CARRID
    GS_SPFLI-CONNID

Formu aktif edip, çalıştırdığınız zaman aşağıdaki bilgileri görebilirsiniz.

Örnek: Sayfaya grafik ekleme örneği.

Grafikleri pencere içerisine ekleyebileceğimiz gibi sayfa içerisine de ekleyebiliriz.

PAGE1 seçili iken “Yarat”, “Grafik”’ i seçin.

PAGE1 altında yeni bir grafik nesnesi oluşacaktır.

Orta kısımda grafik için kullanılacak nesne bilgilerinin seçilmesi gerekir.

Renkli bir grafik eklemek için “Renk aralık ekranı (BCOL)”’ u seçin.

Ad kısmında iken F4 tuşu ile veya arama yardımı kutucuğuna tıklayın.

Find Graphic ekranı açılacaktır. “Yürüt tuşu” (F8) ile devam ederek sistemde yüklü olan renkli resim nesneleri görüntülenebilir.

Açılan listeden “SAPLOGO”’ yu seçin.

Seçtiğiniz anda grafik alanları (Ad, Nesne, Tn.) otomatik olarak dolacaktır.

Grafik nesnesinin “Çıktı seçenekleri”’ nden veya Form painter ile nesneyi istediğiniz pozisyona taşıyabilirsiniz.

Formu aktif edip, çalıştırdığınız zaman formunuzda SAPLOGO nesnesinin eklenmiş olduğunu görebilirsiniz.

Örnek: Adres ekleme örneği.

PAGE1 seçili iken “Yarat”, “Adres”’ i seçin.

Sayfadaki pozisyonunu ayarladıktan sonra “Genel özellikler” tabından “Adres numarası” alanını F4 veya arama yardımı kutucuğunu tıklayın. Adres numarası arama yardımı açılacaktır. Tüm seçenekleri görmek için “Enter” tuşuna basın. Listeden bir adres seçin.

Formu aktif edip, çalıştırdığınız zaman formunuzda adres nesnesine seçtiğiniz adresin taşınmış olduğunu görebilirsiniz.

 

MESAJLAR

Metin mesajı göstermek veya program akışını durdurmak amacıyla kullanılırlar. Mesaj tipine göre iletişim penceresinde veya durum çubuğunda gösterilebilir. Mesajların tipi, numarası ve sınıfı vardır. Mesaj bilgileri T100 tablosunda tutulur. Mesaj numarası 3 hanedir. Mesaj sınıflarının bakımı se91 işlem kodu ile yapılır. Mesaj tipleri aşağıdaki tablodadır.

Tip Tanımı Açıklama
A Sonlandırma Mesaj bir pencerede açılır ve programın çalışmasını durdurur. Kullanıcı mesajı onayladığı zaman, en yüksek menü seviyesine yönlenir.
E Hata Program içeriğine göre iletişim penceresi açılır veya program sonlandırılır.
I Bilgi Mesaj iletişim penceresinde gösterilir. Kullanıcı mesajı onayladığı zaman program MESSAGE bildirisinden sonraki satırdan devam eder.
S Başarılı Program MESSAGE bildiriminden sonra devam eder. Mesaj durum çubuğunda görünür.
W Uyarı Program içeriğine göre iletişim penceresi açılır veya program sonlandırılır.
X Çıkış Mesaj gösterilmez ve program hata bildirisi ile sonlandırılır. Program bir çalışma zamanı hatası (ABAP Runtime Error) ile sonlandırılır. Hata içerisinde mesaj numarası belirtilir.

MESSAGE ifadesi kullanımı aşağıdaki şekildedir.

MESSAGE { mesaj | metin} [mesaj_seçenekleri].

mesaj: T100 tablosundan bir mesaj göstermek için kullanılır. Birkaç çeşit kullanımı vardır.

1. MESSAGE tn.

t: mesaj tipi

n: mesaj numarası

Programın hangi mesaj sınıfını kullanacağı MESSAGE-ID ifadesi ile belirtilir.

2. MESSAGE tn(id).

id: Mesaj sınıfı

3. MESSAGE ID mid TYPE mtype NUMBER num.

mid: Mesaj sınıfı

mtype: Mesaj tipi

num: Mesaj numarası

metin: Bildirimde belirtilen metinin mesaj olarak gönderilmesini sağlar. Kullanımı aşağıdaki şekildedir. Metin mesaj için metin sembolleri (text symbols) kullanılabilir.

MESSAGE <metin> TYPE <mesaj_tipi>

mesaj_seçenekleri: mesajın görünümünü değiştirmek için kullanılan eklerdir. Ekler aşağıdaki gibidir.

{ {[DISPLAY LIKE mesaj_tipi] [RAISING exception]}

| [INTO metin] }

[WITH dobj1 … dobj4].

DISPLAY LIKE mesaj_tipi: Mesajın ikon türü mesaj_tipi ile belirtilen türde görüntülenir. Sadece ikon görüntüsünü değiştirir, akışa etkisi yoktur.

RAISING exception: Bir istisna (exception) veya mesaj göndermek için kullanılır.

INTO metin: Gösterilecek metini metin değişkenine atamak için kullanılır

WITH dobj1 … dobj4: “&” ile belirtilen alanları belirtilen metinler ile değiştirmek için kullanılır.

Örnek1: MESSAGE tn kullanımına ait örnek.

REPORT z_report MESSAGE-ID fb.
MESSAGE i999.

Örnek2: MESSAGE tn(id) kullanımına ait örnek.

MESSAGE i999(fb).

Örnek3: MESSAGE ID mid TYPE mtype NUMBER num kullanımına ait örnek.

MESSAGE ID ‘FB’ TYPE ‘I’ number 999.

Örnek4: İfadenin içerisinde metin kullanılarak mesaj gösterilen örnek.

MESSAGE ‘Deneme’ TYPE ‘S’.

Örnek5: Metin sembolleri kullanan bir örnek.

MESSAGE text-001 TYPE ‘I’.

Örnek6: DISPLAY LIKE eki kullanılan örnek.

MESSAGE ‘Deneme’ TYPE ‘I’ DISPLAY LIKE ‘E’.

Örnek7: WITH dobj1 … dobj4 eki kullanılan bir örnek.

MESSAGE i000(fb) WITH ‘Başka’ ‘bir’ ‘örnek’ ‘.’.

MESAJ SINIFI (MESSAGE CLASS)

Aynı mesajları birden fazla programda kullanmak için mesaj sınıfı oluşturulur. Mesaj metinlerini tek bir sınıftan yönetildiği için kolaylık sağlar. Mesaj sınıfındaki her mesajın bir numarası vardır. Mesaj program kodunda numarası belirtilerek çağrılır.

Mesaj sınıfı bakımı SE91 işlem kodu ile yapılır.

Örnek: Mesaj sınıfı tanımlama ve oluşturulan mesajın kullanımı.

SE91 işlem kodu çalıştırılır. Message class alanına mesaj sınıfı yazılır.

 

Messages tabına geçilir. Bu sırada tanımlanan sınıfın bir pakete bağlanması ve request’ işlemleri yapılır.

Mesajlar istenilen sırasıyla yazılır. Save butonuna tıklanır.

Kaydedilen mesajlar ABAP kodunda aşağıdaki şekilde kullanılabilir.

MESSAGE s000(ztest).