24 Şubat 2014 Pazartesi

Find Program Name and Smartforms Name


Find the Program Name and Smartforms name 



T-code "NACE "  is used for that. 

Select application (Exp: V1- sales)

Click "Output Types".

Select Output type (Exp: YR11 - Export Invoice-order ) .

Double click  "Proccessing routines" on the left side menu. 

Then you can see the program name and smartform name on the right side of screen as follows:



20 Şubat 2014 Perşembe

Request Taşıma ve Birleştirme - Reassign Request / Merge Request

Reassign Request / Merge Request
Request  Taşıma ve Birleştirme
Bir diğer request’e manuel olarak nesne eklenebileceği gibi, Transport Organizer’ın bu fonksiyonuda kullanılabilir. Bu metod, sadece kolay ve hızlı değil, aynı zamanda güvenli ve hataları önleyici özellikleri vardır, özellikle büyük miktarda nesneler söz konusu olduğunda.

 Request Taşıma
Bir task I bir request den diğerine taşımak istiyorsunuz. Örneğin; development/correction task , from the request R1DK9A30IY(Test 1 request 1) R1DK9A30J0 (Test CTS, request 2).

Hareket ettirmek istediğimiz task seçilir, “Utility” menüsündeki “Reassign Task” seçilir:


 Hedef olarak kullanılacak task seçilir:
Seçilen task hedef request altına hareket ettirildi.
 Orjinal request in silinmediğine dikkat edin.
Request leri birleştirme
Bir konudaki requestleri bir tane altına birleştirip diğer requestin silinmesini istiyorsunuz. Örneğin; request DV4K901152 (Test CTS, request 2) deki tasklerin hepsini into the request DV4K901148 (Test CTS, request 1) içine koyup, and bütün request DV4K901152 (Test CTS, request 2) sileceksiniz.
Hareket ettirmek istediğiniz request seçilir, utility menüsü altındaki  Merge Requests seçilir:
Altında birleştirilecek olan request seçilir :

İlk request (DV4K901152)deki tüm bilgiler ikinci (DV4K901148) request altına taşınır ve ilk request silinir. 


NOT: Hedef request altına birleştirme işleminin gözlemlenebildiği bir Object List eklenmiştir.


Upload Txt File to Table in SAP ( GUI_UPLOAD )

GUI_UPLOAD is the key of upload txt file. 
Code is as follow:


TYPES:  BEGIN OF st_item,
  mandt TYPE mandt,
            mblnr TYPE mblnr,
            mjahr TYPE mjahr,
            zeile TYPE mblpo,
            status TYPE yumm0154,
            timestamp TYPE timebegin,
  message TYPE char255,
      END OF st_item.


DATAitab_item TYPE STANDARD TABLE OF st_item INITIAL SIZE 0,
      wa_item TYPE st_item.

DATAitab_final TYPE STANDARD TABLE OF st_item INITIAL SIZE 0,
      wa_final TYPE st_item.

DATAl_filename TYPE string.

*          At Selection screen on Value Request
PARAMETERSp_ppath TYPE char128.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ppath.
  PERFORM sub_get_filename CHANGING p_ppath.

*                    Start-of-selection
START-OF-SELECTION.

  IF p_ppath IS NOT INITIAL.

    l_filename p_ppath.

    CALL FUNCTION 'GUI_UPLOAD'
      EXPORTING
        filename                l_filename
        filetype                'ASC'
        has_field_separator     'X'
      TABLES
        data_tab                itab_item[]
      EXCEPTIONS
        file_open_error         1
        file_read_error         2
        no_batch                3
        gui_refuse_filetransfer 4
        invalid_type            5
        no_authority            6
        unknown_error           7
        bad_data_format         8
        header_not_allowed      9
        separator_not_allowed   10
        header_too_long         11
        unknown_dp_error        12
        access_denied           13
        dp_out_of_memory        14
        disk_full               15
        dp_timeout              16
        OTHERS                  17.


  ENDIF.

  WRITE:  10 'MBLNR'30 'MJHAR'40 'ZEILE'60 'STATUS'80 'TIMESTAMP'.
  LOOP AT itab_item INTO wa_item.
    MOVE-CORRESPONDING wa_item TO wa_final.
    SKIP.
    WRITE :   10 wa_item-mblnr,
              30 wa_item-mjahr ,
              40 wa_item-zeile,
              60 wa_item-status,
              80 wa_item-timestamp.

    APPEND wa_final TO itab_final.
    CLEARwa_itemwa_final.

  ENDLOOP.

  REFRESH itab_item.
  IF NOT itab_final[] IS INITIAL.
    LOOP AT itab_final INTO wa_final.
      INSERT  table_name FROM wa_final  .
      COMMIT  WORK.
    ENDLOOP.
  ENDIF.


*     Form  sub_get_filename
FORM sub_get_filename  CHANGING p_file TYPE char128.
  DATA l_path        TYPE string.                 " For Directory
  DATA l_path1       TYPE string.                 " For Directory
  DATA l_path2       TYPE string.                 " For Directory

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  sy-cprog
      dynpro_number syst-dynnr
    IMPORTING
      file_name     p_file.
ENDFORM.                    "sub_get_filename

Then the screen is as this is:



14 Şubat 2014 Cuma

Object Oriented - Multiple Inheritance in SAP


You have to use SE24 for  creating multiple Inheritence Object oriented  Class.
Step-1 : Select a name and press "Create" button. 


Step-2: For values, go to "Attribute".
IT_Result -> List of table record.
Gv_MBLNR-> for selecting the record.

Step-2: Go to "Methods". 
For selecting the record of table - SELECT_IT, 
For displaying the record - DISPLAY_IT. 


Step-3: Double click the SELECT_IT and write this code. 


Step-4: Double click the DISPLAY_IT and write this code.

Step-5: Then write a report to call the methods. 


Step-6: This is screen for running report with a parameter 

Final screen is as follows. 

Look at the table, for MJAHR = 2012 




12 Şubat 2014 Çarşamba

SAP Kilit (LOCK) Konsepti (ENQUEUE- DEQUEUE)

          SAP sistemi, application server seviyesinde bir global kilit tablosu tutar. Bu tablo kullanılarak yerel değişkenleri değiştiriken bu alanları kilitlemek mümkün olur. Bir kaç ekran boyunca istnene alanları kilitli olarak tutabilirsiniz. Ayrıca, Veritabanında henüz olmayan tabloları da local olarak kilitleyebilirsiniz. Bu özelliği yeni tablo satırları eklerken kullanbilirsiniz.  

              Tablo bağlantılı bir Kilit objesi active ttiğinizde otomatik olarak tabloya özgü bir fonksiyon module yaratılır. Bu kilit modülü çağrıldığında, mantıksal kilitler belitrilen tablo için setlenir.

                  Ancak, birincil başka bir tablonun key anahtarına sahip bir tablo yarattığınızda, otomatik olarak her bir tablo içinde kilit objesi yaratılır. Örneğin; SFLIGHTS (primary) ve SBOOK (secondary)  tablolarını içeren bir kilit objesi FLIGHT’I kilitler.
Bir kilit objesi yaratırken, herbir tablo için ayrı ayrı setlemek gerekir (E: Write lock, S: Read lock, X: Extended write lock).  Bu kilit mod fonksiyonları default seçilebileceği gibi, tekrar tekrar da setlenebilir.

Kilit Modüllerinin Yaratılması

Bir kilit objesi aktiveedildiğinde, system otomatik olarak tablodaki alanların set edilmesi ve bırakılması (release) için birer fonksiyon modülü yaratır.

TVARVC tablosu için kilit objesi 'ENQUEUE_ESVARVC'  - For setting locks.
  'DEQUEUE_ESVARVC'        - For releasing locks.

Kilit Modüllerinin Çağrılması

Eğer system kilit setlemede başarısız olursanız, ya giriş zaten kilitlenmiştir. (foreign_lock)veya kilit yürütmede bir sorun(system_failure) vardır. Programın sonunda, DEQUEUE fonksiyon modülü ile, kilit tablosundaki girişler silinir.
DEQUEUE fonksiyonu herhangi bir exception üretmez. Çünkü kilitlenmeyen bir girişi release ederseniz bir etki doğurmaz.
 CALL FUNCTION 'ENQUEUE_ESVARVC'
      
EXPORTING
       name           
lv_w_name
       
type           lv_w_type
      
EXCEPTIONS
      foreign_lock   
4
      system_failure 
8.
    
IF sy-subrc = 0.
      tvarvc-sign 'I'.
      tvarvc
-opti 'EQ'.
      tvarvc
-low  lv_w_value1.
      tvarvc
-high space.
        MODIFY tvarvc.
        
COMMIT WORK.
     ENDIF


   
CALL FUNCTION 'DEQUEUE_ESVARVC'
          
EXPORTING
      name 
lv_w_name
     
type lv_w_type.
    
ENDCASE.

11 Şubat 2014 Salı

Dosya İsmini Ayıran Program.

datapt(100TYPE c.
DATAw_file(100)     TYPE c,
      w_length1      LIKE sy-fdpos,
      w_length2      LIKE sy-fdpos,
      w_char         TYPE c.
FIELD-SYMBOLS  .
pt '//Out/Ended/20140210_080114.txt'.


PERFORM FIND_FILENAME USING pt.
writept.


FORM FIND_FILENAME CHANGING W_FILE.
  W_LENGTH1 STRLENW_FILE ).
  W_LENGTH2 W_LENGTH1 1.
  MOVE W_FILE+W_LENGTH2(1TO W_CHAR.
  WHILE W_CHAR NE '/'.
    IF W_LENGTH1 EQ 0.EXIT.ENDIF.
    SUBTRACT FROM W_LENGTH1.
    MOVE W_FILE+W_LENGTH1(1TO W_CHAR.
  ENDWHILE.
  ASSIGN W_FILE+W_LENGTH1(*TO .
  MOVE +1 TO W_FILE.

TVARVC TVARV Table - Tablodan Dinamik Varyant Değişkeni Tanımlama


TVARVC tablosu yardımıyla yapılır. Eğer bu tabloya göz atılırsa eski varyant değişkenleri gelecektir. Bunun için "STVARVC" t-code kullanalım.

Yukarda görüldüğü gibi iki sekme var, parametreler için ve selection options lar için. Eğer varyanta setlenecek değişken parametre ise parametre sekmesinde, selection option ise selection sekmesine ekleme yapmak gerekir. Aksi halde o değişken için yeni tanımladığınız varyant değerini göremezsiniz. 

Bundna sonra CNTRL+F1  (Display-Change) butonunu kullanarak yazmaya açık hale getirip, yeni kayıt ekleme işlemi yapılabilir. 
"Name" kısmına "TEST", "Val." kısmına "2013" yazalım. Kaydet ile çıkalım. 

Sonra bir programa varyant kaydederken bu değişkeni giriş olarak verelim. 
Program ekranında SAVE-Kaydet butonuna basalım, 
karşımıza aşağıdaki gibi gelen ekranda, "Selection Variable" kısmında "T", Table variable from TVARVC yazan seçeneği seçelim. 

"Name of Variable" kısmında ise biraz önce tanımladığımız "TEST" parametre değişkenini seçelim. Eğer kontrol etmek istersen, "TEST" seçiliyken "Value" butonuna basarsak, değişkenin içindeki değeri aşağıdaki gibi okuyabiliriz. 

"Continue" diyerek geçelim. 

Değişken artık, yukardaki gibi görünecektir. SAVE diyerek kaydedelim. 
Artık varyantımızın "Date" parametresi bizim TVARVC de tanımladığımız kendi değişkenimizin değeri ile çağrılacaktır her seferinde. 

NOTE: Bu halde yapınca biraz mantıksız gelebilir bu özellik. Ancak bir program yazıp, TVARVC deki bizim yarattığımız değişken içeriğini her gün veya har ay background job la değiştirirsek, kendi dinamik değişkenimizi yaratmış oluruz. 
Tabi eğer zaten tanımlı olan  "D: Dynamic Data Calculation " kısmındaki değerler bizim işimize yaramıyorsa bunu kullanmamız daha akılcıl olur :)


VEYA


TVARVC tablosuna değişkenlerimizi bir program aracılığı ile yazarız, ve değerlerimizin değiştiği hergün bu programı background job ile çalıştırırız, böylece tablodaki değerler de değişmiş olur. 

TABLES tvarvc.                  " Table of variables in selection criteria
DATAgv_date1                    LIKE sy-datum,
      gv_date2                    LIKE sy-datum,
      gv_date3                    LIKE sy-datum,
      gv_prev_month           LIKE sy-datum,
      gv_bfr_prev_mnth_h         LIKE sy-datum,
      gv_bfr_prev_mnth_l         LIKE sy-datum.
  

*---SELECTION-SCREEN
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS  p_day  LIKE sy-datum DEFAULT sy-datum.
SELECTION-SCREEN END OF BLOCK b1.

*---START-OF-SELECTION
START-OF-SELECTION.


  CLEARgv_date1gv_date2gv_date3.

     gv_date1 p_day.
     SUBTRACT FROM gv_date1+4(2).
     gv_prev_month gv_date1+4(2).
 
    gv_date2 p_day.
    SUBTRACT FROM gv_date2+4(2).
    gv_date3 gv_date2.
    gv_date3+4(4'0101'.
    gv_bfr_prev_mnth_h gv_date2.
    gv_bfr_prev_mnth_l gv_date3.

  DATAgv_bfr_prev_mnth      LIKE tvarvc-name VALUE 'BFR_PREV_MNTH',
            gv_prev_mnth      LIKE tvarvc-name VALUE 'PREV_MONTH'.



  CONSTANTSgc_0000 LIKE tvarv-numb  VALUE '0000'.

  PERFORM f_update_tvarvc USING gv_prev_mnth
                                    'S'
                                    gc_0000
                                    gv_prev_month
                                    ''
                                    'EQ'.

  PERFORM f_update_tvarvc USING gv_bfr_prev_mnth
                                    'S'
                                    gc_0000
                                    gv_bfr_prev_mnth_l
                                    gv_bfr_prev_mnth_h
                                    'BT'.

*---------------------------------------------------------------------*
*FORM UPDATE_tvarvc                                               *
*---------------------------------------------------------------------*
FORM f_update_tvarvc USING   lv_w_name   LIKE tvarvc-name
                                  lv_w_type   LIKE tvarvc-type
                                  lv_w_numb   LIKE tvarvc-numb
                                  lv_w_value1 TYPE any
                                  lv_w_value2 TYPE any
                                  lv_w_option LIKE tvarvc-opti.

  SELECT SINGLE FROM tvarvc WHERE name lv_w_name
                                 AND type lv_w_type
                                 AND numb lv_w_numb.
  IF sy-subrc NE 0.
    PERFORM f_create_entryc USING lv_w_name lv_w_type lv_w_numb lv_w_value1
                                           lv_w_value2 lv_w_option.


  ELSE.
    CALL FUNCTION 'ENQUEUE_ESVARV'
      EXPORTING
        name           lv_w_name
        type           lv_w_type
      EXCEPTIONS
        foreign_lock   4
        system_failure 8.
    CASE sy-subrc.


      WHEN 0.
        IF lv_w_type 'P'.
          IF tvarvc-low lv_w_value1.
            MESSAGE i999(b1WITH lv_w_name '= ' lv_w_value1.
          ELSE.
            MESSAGE i999(b1WITH lv_w_name text-002.
            MESSAGE i999(b1WITH text-003 tvarvc-low text-004 lv_w_value1.
          ENDIF.
          tvarvc-sign 'I'.
          tvarvc-opti 'EQ'.
          tvarvc-low  lv_w_value1.
          tvarvc-high space.
        ELSEIF lv_w_type 'S'.
          tvarvc-sign 'I'.
          tvarvc-opti lv_w_option.
          tvarvc-low  lv_w_value1.
          IF lv_w_option 'EQ'.
            tvarvc-high space.
          ELSEIF lv_w_option 'BT'.
            tvarvc-high lv_w_value2.
          ENDIF.
        ENDIF.
        MODIFY tvarvc.
        COMMIT WORK.
        CALL FUNCTION 'DEQUEUE_ESVARV'
          EXPORTING
            name lv_w_name
            type lv_w_type.
    ENDCASE.
  ENDIF.
ENDFORM.                               " UPDATE_tvarvc

*&---------------------------------------------------------------------*
*&      Form  CREATE_ENTRYC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->Lv_W_NAME  text
*      -->Lv_W_TYPE  text
*      -->Lv_W_NUMB  text
*      -->Lv_W_VALUE1  text
*      -->Lv_W_VALUE2  text
*      -->Lv_W_OPTION  text
*----------------------------------------------------------------------*
FORM f_create_entryc  USING     lv_w_name   LIKE tvarvc-name
                                     lv_w_type   LIKE tvarvc-type
                                     lv_w_numb   LIKE tvarvc-numb
                                     lv_w_value1 TYPE any
                                     lv_w_value2 TYPE any
                                     lv_w_option LIKE tvarvc-opti.

  tvarvc-name lv_w_name.
  tvarvc-type lv_w_type.
  tvarvc-numb lv_w_numb.
  tvarvc-low  lv_w_value1.
  tvarvc-high lv_w_value2.
  tvarvc-opti lv_w_option.
  tvarvc-sign 'I'.

  INSERT INTO tvarvc VALUES tvarvc.
*  IF sy-subrc NE 0.
  IF sy-subrc 0.
    COMMIT WORK.
  ELSE.
    WRITE:'Line could not be inserted.'(e03).

  ENDIF.
ENDFORM.                    " CREATE_ENTRYC