SAP de haftalık günlük raporlarda kullanabileceğimiz bulunduğumuz günün yılın hangi haftası olduğunu veren fonksiyon.
data: p_week LIKE scal-week.
CALL FUNCTION 'DATE_GET_WEEK'
EXPORTING
date = sy-datum
IMPORTING
week = p_week.
.
Haftanın ilk günü olan tarihi veren fonksiyon.
data: first_day type datum.
CALL FUNCTION 'WEEK_GET_FIRST_DAY'
EXPORTING
week = p_week
IMPORTING
date = first_day .
Eğer haftalık bir rapor hazırlıyorsanız, Range aşağıdaki gibi doldurabilirsiniz.
Ranges: r_tarih like FOR sy-datum
r_tarih-low = first_day
r_tarih-high = r_tarih-low + 6.
r_tarih-option = 'BT'.
r_tarih-sign = 'I'.
APPEND r_tarih.
Verilen iki kooridnat arası uzaklık hesaplama (Distance Calculator)
Verilen koordinatlarda kuş uçusu mesafe hesaplama,
*"----------------------------------------------------------------------
*"
*" IMPORTING
*" VALUE(LONGITUDE1) LIKE SGEOCITY-LONGITUDE
*" VALUE(LATITUDE1) LIKE SGEOCITY-LATITUDE
*" VALUE(LONGITUDE2) LIKE SGEOCITY-LONGITUDE
*" VALUE(LATITUDE2) LIKE SGEOCITY-LATITUDE
*" EXPORTING
*" VALUE(DISTANCE) LIKE SPFLI-DISTANCE
*"----------------------------------------------------------------------
DATA: X1 TYPE F, Y1 TYPE F,
X2 TYPE F, Y2 TYPE F, YD TYPE F,
PI TYPE F,
PI_180 TYPE F,
MINUS_1 TYPE F VALUE '-1'.
PI = ACOS( MINUS_1 ).
PI_180 = PI / 180.
X1 = LATITUDE1 * PI_180.
Y1 = LONGITUDE1 * PI_180.
X2 = LATITUDE2 * PI_180.
Y2 = LONGITUDE2 * PI_180.
YD = Y2 - Y1.
DISTANCE = 20000 / PI *
ACOS( SIN( X1 ) * SIN( X2 ) + COS( X1 ) * COS( X2 ) * COS( YD ) ).
ENDFUNCTION.
Object ALV Hücre açma kapama
Object Oriented ALV'de çok sık kullanılan basit iki subroutine;
*&---------------------------------------------------------------------*
*& Form ENABLE_CELL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FIELD text
*----------------------------------------------------------------------*
FORM enable_cell USING p_field.
DATA ls_cellstyles TYPE lvc_s_styl .
LOOP AT out_kalem-field_style INTO ls_cellstyles
WHERE fieldname = p_field.
ls_cellstyles-style = cl_gui_alv_grid=>mc_style_enabled.
MODIFY out_kalem-field_style FROM ls_cellstyles.
ENDLOOP.
IF sy-subrc NE 0.
ls_cellstyles-fieldname = p_field.
ls_cellstyles-style = cl_gui_alv_grid=>mc_style_enabled.
APPEND ls_cellstyles TO out_kalem-field_style.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISABLE_CELL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FIELD text
*----------------------------------------------------------------------*
FORM disable_cell USING p_field.
DATA ls_cellstyles TYPE lvc_s_styl .
LOOP AT out_kalem-field_style INTO ls_cellstyles
WHERE fieldname = p_field.
ls_cellstyles-style = cl_gui_alv_grid=>mc_style_disabled..
MODIFY out_kalem-field_style FROM ls_cellstyles.
ENDLOOP.
IF sy-subrc NE 0.
ls_cellstyles-fieldname = p_field.
ls_cellstyles-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND ls_cellstyles TO out_kalem-field_style.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ENABLE_CELL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FIELD text
*----------------------------------------------------------------------*
FORM enable_cell USING p_field.
DATA ls_cellstyles TYPE lvc_s_styl .
LOOP AT out_kalem-field_style INTO ls_cellstyles
WHERE fieldname = p_field.
ls_cellstyles-style = cl_gui_alv_grid=>mc_style_enabled.
MODIFY out_kalem-field_style FROM ls_cellstyles.
ENDLOOP.
IF sy-subrc NE 0.
ls_cellstyles-fieldname = p_field.
ls_cellstyles-style = cl_gui_alv_grid=>mc_style_enabled.
APPEND ls_cellstyles TO out_kalem-field_style.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISABLE_CELL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FIELD text
*----------------------------------------------------------------------*
FORM disable_cell USING p_field.
DATA ls_cellstyles TYPE lvc_s_styl .
LOOP AT out_kalem-field_style INTO ls_cellstyles
WHERE fieldname = p_field.
ls_cellstyles-style = cl_gui_alv_grid=>mc_style_disabled..
MODIFY out_kalem-field_style FROM ls_cellstyles.
ENDLOOP.
IF sy-subrc NE 0.
ls_cellstyles-fieldname = p_field.
ls_cellstyles-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND ls_cellstyles TO out_kalem-field_style.
ENDIF.
ENDFORM.
SAP ABAP Excel'den itab veri alma (Excel to Internal Table)
Belirli bir excel dosyasındaki veriyi itaba almak günlük programlarımızda en çok kullandığımız yapılardan biridir.
*Excel formatında bir itab oluşturuyoruz
DATA: begin of gt_excel OCCURS 0,
col1(255),
col2(255),
col3(255),
col4(255),
end of gt_excel.
*Excel import fonksiyonun tablosu
DATA: intern LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE,
wa_intern LIKE LINE OF intern.
*/dosya seçme ekranı
PARAMETERS : xdosya TYPE ibipparms-path OBLIGATORY.
*/dosya seçme ekranı
AT SELECTION-SCREEN ON VALUE-REQUEST FOR xdosya.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
IMPORTING
file_name = xdosya.
START-OF-SELECTION.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = xdosya
i_begin_col = 1
i_begin_row = 2
i_end_col = 15
i_end_row = 99999
TABLES
intern = intern
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3
.
IF sy-subrc <> 0.
MESSAGE 'Dosya okuma hatası!' TYPE 'E'.
EXIT.
ENDIF.
LOOP AT intern.
CASE intern-col.
WHEN 1.
gt_excel-col1 = intern-value.
WHEN 2.
gt_excel-col2 = intern-value.
WHEN 3.
gt_excel-col3 = intern-value.
WHEN 4.
gt_excel-col4 = intern-value.
ENDCASE.
AT END OF row.
APPEND gt_excel.
CLEAR gt_excel.
ENDAT.
ENDLOOP.
Otomatik Artan Ztable id (Auto increment id)
SAP Tablolarında özellikle de uyarlama tablolarında kullanılan otomatik artan key field örneği,
SE11 üzerinden
GOTO > Utilities > Table Maintenance
generator
Bakem ekranı oluşturup kaydediyoruz.
GOTO
> Environment > Modification > Events
Tablodaki aksiyonları trigger etmesi için event'lara gidiyoruz
F4 yardımına tıklayarak mevcut Tablo Bakım İletişim Kutusu Olaylarını kontrol edin. SAP sisteminde tanımlanan tüm standart olayların listesini alacağız
Yeni kayıt ekleme Event seçiyoruz
Şimdi kaydedin, kaydettikten sonra mantığınızı yazabileceğimiz Editör ile sağlanacaktır.
Aşağıdaki gibi kodu yazabilirsiniz. Buarada SNRO oluşturuduğumuz object üzerinden her yeni kayıta bir alan eklemeyi sağlamakta.
DATA: w_count TYPE zckk_kntrl_list-id ,
w_range TYPE inri-nrrangenr VALUE '01' .
FORM eve.
* DATA : num(7) TYPE c ,
* num1(2) TYPE c VALUE 'DT' .
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = w_range
object = 'ZTNRO'
* QUANTITY = '1'
* SUBOBJECT = ' '
* TOYEAR = '0000'
* IGNORE_BUFFER = ' '
IMPORTING
NUMBER = w_count
* QUANTITY =
* RETURNCODE =
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
.
IF sy-subrc eq 0.
Ztab-key = w_count .
ENDIF.
ENDFORM.
w_range TYPE inri-nrrangenr VALUE '01' .
FORM eve.
* DATA : num(7) TYPE c ,
* num1(2) TYPE c VALUE 'DT' .
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = w_range
object = 'ZTNRO'
* QUANTITY = '1'
* SUBOBJECT = ' '
* TOYEAR = '0000'
* IGNORE_BUFFER = ' '
IMPORTING
NUMBER = w_count
* QUANTITY =
* RETURNCODE =
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
.
IF sy-subrc eq 0.
Ztab-key = w_count .
ENDIF.
ENDFORM.
SNRO üzerinden yeni object tanımlıyoruz.
Yeni kaydı kaydetme sıransında aşağıdaki kodu kullanabilirirsiniz.
IF SY–UCOMM = ‘NEWL’ OR SY–UCOMM = ‘SAVE’.
LOOP
AT SCREEN.
IF
SCREEN–NAME = ‘Tablename-fieldname’.
SCREEN–INPUT = 0 .
MODIFY SCREEN .
MODIFY SCREEN .
ENDIF.
ENDLOOP.
ENDIF.
Object Oriented (OO) ALV Seçilen Satırı Alma
DATA: lt_selliste LIKE gt_itab OCCURS 0 WITH HEADER LINE.
DATA: t_rows TYPE lvc_t_row ,
ls_rows TYPE LINE OF lvc_t_row ,
t_rowno TYPE lvc_t_roid.
CALL METHOD grid1->get_selected_rows
IMPORTING
et_index_rows = t_rows
et_row_no = t_rowno.
DATA: lt_selliste LIKE gt_itab OCCURS 0 WITH HEADER LINE.
CLEAR lt_selliste.
REFRESH lt_selliste.
CLEAR ls_rows.
LOOP AT t_rows INTO ls_rows.
READ TABLE gt_itab INDEX ls_rows-index.
IF sy-subrc = 0.
MOVE-CORRESPONDING gt_itab TO lt_selliste.
APPEND lt_selliste.
ENDIF.
ENDLOOP.
SAP Application log
SAP Application
log
Hata veya olağandışı birşeyler olana kadar çoğu developer atladığı ama yeri geldiğinde hayat kurtaran loglama ile SAP kendi Application Logları tuttuğu bir yapı bulunmakta.
Kullanımı oldukça basit ve entegrasyonu çok hızlı bir yapı.
Hata veya olağandışı birşeyler olana kadar çoğu developer atladığı ama yeri geldiğinde hayat kurtaran loglama ile SAP kendi Application Logları tuttuğu bir yapı bulunmakta.
Kullanımı oldukça basit ve entegrasyonu çok hızlı bir yapı.
SLG0 işlem kodu üzerinden
log objesi oluşturuyoruz.
Loglamak
istediğimiz noktada,
“Create log
DATA: gv_log_handle TYPE balloghndl. "Application Log: Log Handle
DATA: ls_log TYPE bal_s_log. "Log header data
* define some header data of this log
ls_log-extnumber = 'Application Log Demo'.
ls_log-object = 'ZSAPUI5'.
ls_log-subobject = ''.
ls_log-aldate = sy-datum.
ls_log-altime = sy-uzeit.
ls_log-aluser = sy-uname.
ls_log-alprog = sy-repid.
DATA: ls_log TYPE bal_s_log. "Log header data
* define some header data of this log
ls_log-extnumber = 'Application Log Demo'.
ls_log-object = 'ZSAPUI5'.
ls_log-subobject = ''.
ls_log-aldate = sy-datum.
ls_log-altime = sy-uzeit.
ls_log-aluser = sy-uname.
ls_log-alprog = sy-repid.
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = ls_log
IMPORTING
e_log_handle = gv_log_handle
EXCEPTIONS
log_header_inconsistent = 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.
DATA: l_s_msg TYPE bal_s_msg.
* define data of message for Application Log
l_s_msg-msgty = sy-msgty.
l_s_msg-msgid = sy-msgid.
l_s_msg-msgno = sy-msgno.
l_s_msg-msgv1 = sy-msgv1.
l_s_msg-msgv2 = sy-msgv2.
l_s_msg-msgv3 = sy-msgv3.
l_s_msg-msgv4 = sy-msgv4.
*add message
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = gv_log_handle
i_s_msg = l_s_msg
EXCEPTIONS
log_not_found = 1
msg_inconsistent = 2
log_is_full = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*save db
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
i_save_all = 'X'
EXCEPTIONS
log_not_found = 1
save_not_allowed = 2
numbering_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
EXPORTING
i_s_log = ls_log
IMPORTING
e_log_handle = gv_log_handle
EXCEPTIONS
log_header_inconsistent = 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.
DATA: l_s_msg TYPE bal_s_msg.
* define data of message for Application Log
l_s_msg-msgty = sy-msgty.
l_s_msg-msgid = sy-msgid.
l_s_msg-msgno = sy-msgno.
l_s_msg-msgv1 = sy-msgv1.
l_s_msg-msgv2 = sy-msgv2.
l_s_msg-msgv3 = sy-msgv3.
l_s_msg-msgv4 = sy-msgv4.
*add message
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = gv_log_handle
i_s_msg = l_s_msg
EXCEPTIONS
log_not_found = 1
msg_inconsistent = 2
log_is_full = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*save db
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
i_save_all = 'X'
EXCEPTIONS
log_not_found = 1
save_not_allowed = 2
numbering_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Logları SLG1
işlem kodu üzerinden analizleyebilirsiniz.
SAP Application
log’da ayrıca,
Loglar search edebilmek için,
DATA: gr_object TYPE bal_s_obj.
DATA: gr_extnumber TYPE bal_s_extn.
DATA: gs_log_filter TYPE bal_s_lfil.
DATA: gt_log_header TYPE balhdr_t.
* create a filter with all relevant criteria:
gr_object-sign = 'I'.
gr_object-option = 'EQ'.
gr_object-low = 'ZTEST'.
APPEND gr_object TO gs_log_filter-object.
gr_extnumber-sign = 'I'.
gr_extnumber-option = 'EQ'.
gr_extnumber-low = 'Application Log Demo'.
APPEND gr_extnumber TO gs_log_filter-extnumber.
* search on DB for these logs
CALL FUNCTION 'BAL_DB_SEARCH'
EXPORTING
i_s_log_filter = gs_log_filter
IMPORTING
e_t_log_header = gt_log_header
EXCEPTIONS
LOG_NOT_FOUND = 1
NO_FILTER_CRITERIA = 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.
DATA: gr_extnumber TYPE bal_s_extn.
DATA: gs_log_filter TYPE bal_s_lfil.
DATA: gt_log_header TYPE balhdr_t.
* create a filter with all relevant criteria:
gr_object-sign = 'I'.
gr_object-option = 'EQ'.
gr_object-low = 'ZTEST'.
APPEND gr_object TO gs_log_filter-object.
gr_extnumber-sign = 'I'.
gr_extnumber-option = 'EQ'.
gr_extnumber-low = 'Application Log Demo'.
APPEND gr_extnumber TO gs_log_filter-extnumber.
* search on DB for these logs
CALL FUNCTION 'BAL_DB_SEARCH'
EXPORTING
i_s_log_filter = gs_log_filter
IMPORTING
e_t_log_header = gt_log_header
EXCEPTIONS
LOG_NOT_FOUND = 1
NO_FILTER_CRITERIA = 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.
Logları okumak için,
DATA: P_NUMBER_OF_LOGS LIKE SY-TABIX.
* Log header data
DATA: BEGIN OF P_HEADER_DATA_TAB OCCURS 0.
INCLUDE STRUCTURE BALHDR.
DATA: END OF P_HEADER_DATA_TAB.
* Log parameters
DATA: BEGIN OF P_HEADER_PARA_TAB OCCURS 0.
INCLUDE STRUCTURE BALHDRP.
DATA: END OF P_HEADER_PARA_TAB.
* Log messages
DATA: BEGIN OF P_MESSAGE_TAB OCCURS 0.
INCLUDE STRUCTURE BALM.
DATA: END OF P_MESSAGE_TAB.
* Message parameters
DATA: BEGIN OF P_MESSAGE_PARA_TAB OCCURS 0.
INCLUDE STRUCTURE BALMP.
DATA: END OF P_MESSAGE_PARA_TAB.
CALL FUNCTION 'APPL_LOG_READ_DB'
EXPORTING
OBJECT = 'ZTEST'
SUBOBJECT = 'ZTEST01'
EXTERNAL_NUMBER = 'Application Log Demo'
IMPORTING
NUMBER_OF_LOGS = P_NUMBER_OF_LOGS
TABLES
HEADER_DATA = P_HEADER_DATA_TAB
HEADER_PARAMETERS = P_HEADER_PARA_TAB
MESSAGES = P_MESSAGE_TAB
MESSAGE_PARAMETERS = P_MESSAGE_PARA_TAB.
* Log header data
DATA: BEGIN OF P_HEADER_DATA_TAB OCCURS 0.
INCLUDE STRUCTURE BALHDR.
DATA: END OF P_HEADER_DATA_TAB.
* Log parameters
DATA: BEGIN OF P_HEADER_PARA_TAB OCCURS 0.
INCLUDE STRUCTURE BALHDRP.
DATA: END OF P_HEADER_PARA_TAB.
* Log messages
DATA: BEGIN OF P_MESSAGE_TAB OCCURS 0.
INCLUDE STRUCTURE BALM.
DATA: END OF P_MESSAGE_TAB.
* Message parameters
DATA: BEGIN OF P_MESSAGE_PARA_TAB OCCURS 0.
INCLUDE STRUCTURE BALMP.
DATA: END OF P_MESSAGE_PARA_TAB.
CALL FUNCTION 'APPL_LOG_READ_DB'
EXPORTING
OBJECT = 'ZTEST'
SUBOBJECT = 'ZTEST01'
EXTERNAL_NUMBER = 'Application Log Demo'
IMPORTING
NUMBER_OF_LOGS = P_NUMBER_OF_LOGS
TABLES
HEADER_DATA = P_HEADER_DATA_TAB
HEADER_PARAMETERS = P_HEADER_PARA_TAB
MESSAGES = P_MESSAGE_TAB
MESSAGE_PARAMETERS = P_MESSAGE_PARA_TAB.
Kaydol:
Kayıtlar (Atom)