SAP'de hafta gün bulma

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.

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.

DATAw_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.


SNRO üzerinden yeni object tanımlıyoruz.








Yeni kaydı kaydetme sıransında aşağıdaki kodu kullanabilirirsiniz.


IF SYUCOMM = ‘NEWL’ OR SYUCOMM = ‘SAVE’.
LOOP AT SCREEN.
IF SCREEN–NAME = ‘Tablename-fieldname’.
SCREEN–INPUT = 0 .
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ı.

SLG0 işlem kodu üzerinden log objesi oluşturuyoruz.



Loglamak istediğimiz noktada,
“Create log

DATAgv_log_handle TYPE balloghndl.   "Application Log: Log Handle
DATAls_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.

    
DATAl_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,

DATAgr_object     TYPE bal_s_obj.
DATAgr_extnumber  TYPE bal_s_extn.
DATAgs_log_filter TYPE bal_s_lfil.
DATAgt_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,

DATAP_NUMBER_OF_LOGS LIKE SY-TABIX.
* Log header data
DATABEGIN OF P_HEADER_DATA_TAB OCCURS 0.
INCLUDE STRUCTURE BALHDR.
DATAEND OF P_HEADER_DATA_TAB.
* Log parameters
DATABEGIN OF P_HEADER_PARA_TAB OCCURS 0.
INCLUDE STRUCTURE BALHDRP.
DATAEND OF P_HEADER_PARA_TAB.
* Log messages
DATABEGIN OF P_MESSAGE_TAB OCCURS 0.
INCLUDE STRUCTURE BALM.
DATAEND OF P_MESSAGE_TAB.
* Message parameters
DATABEGIN OF P_MESSAGE_PARA_TAB OCCURS 0.
INCLUDE STRUCTURE BALMP.
DATAEND 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.