ABAP

ABAP

Thursday, September 29, 2011

SAP script read text olayı VL03N ve VT03N den text alma


SAPSCRIPT READ_TEXT ILE TEXT OKUMA  VL03N  VT03N den

se37 den read_text fonksiyonuna break konulur daha sonra
Vl03  veya vt03 e gerekli numara ile gidilir  burdan textını alacagımız alan bulunur
cift tıklanır ve debug'a dusulur fonksiyona gelen degerler alınır .

ID ve  name  degerı .

        lv_id        = 'Z008'.
        lv_seal      = wa_out-svbeln.
        PERFORM f_call_function USING lv_seal lv_id.


  CALL FUNCTION 'READ_TEXT'
    EXPORTING
*     CLIENT                        = SY-MANDT
      id                            = lv_id
      language                      = sy-langu
      name                          = lv_seal
      object                        = 'VTTK'
*     ARCHIVE_HANDLE                = 0
*     LOCAL_CAT                     = ' '
*   IMPORTING
*     HEADER                        =
    tables
      lines                         = lt_lines

Programda bunlar verilir ve  lt_lines 'ın  TDLINE alanına gereklı text degerı alınır .
SAP SCRIPTTE IF KONTROLU VE TEXT ALANLARIN YAZILMASI

/E SEAL
/: PROTECT
/: BOX FRAME 10 TW
/: IF &WA_OUT-CHECK& EQ 'X'.
I2 ,,&TEXT-023&:,,&WA_OUT-exti1&
I2 ,,&TEXT-025&: ____________
I2 ,,&TEXT-027&: __________________________
/: ELSE.
I2 ,,&TEXT-023&:,,&WA_OUT-vlseal&
I2 ,,&TEXT-025&: ____________
I2 ,,&TEXT-027&: __________________________
/: ENDIF.
/: ENDPROTECT

YIWM_OD_FORMS : ornek program

Wednesday, April 13, 2011

Dinamik tablo yaratma

*Bu örneğimizde dinamik bir tablo yaratcaz. Bir tane internal tabloda kaç tane kayıt varsa o kadar column yaratcaz?
PERFORM f_create_itab.


FORM f_create_itab .
  DATA : lt_data    TYPE REF TO data,
         ls_new_line  TYPE REF TO data.

*Şimdi burada ilk önce fieldcatimizi oluşturuyoruz.
  PERFORM f_prepare_fcat.
*Aşağıda bu performun içini yazdım orada bir fieldcat oluşturuldu gt_fcat diye. Bu gt_fcat başka dinamik tablo gerektiren örneklerde neye göre çoğalcağına göre istenilen şekilde oluşturulabilir.

  ASSIGN lt_data TO <fs_data>.

*Sonra bu gt_fcat'i bu method'a göndererek, gt_fcat içindeki alan isimlerine göre  tablo oluşturuyoruz.
  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog = gt_fcat[]
    IMPORTING
      ep_table        = <fs_data>.

  ASSIGN <fs_data>->* TO <gt_display>.

  CREATE DATA ls_new_line LIKE LINE OF <gt_display>.
  ASSIGN ls_new_line->* TO <gs_display>.
*ve tablomuz <gt_display> olarak oluşturuldu. Aynı türde bir structure'da <gs_display> olarak oluşturuldu. Artık bu işlemden sonra field symbol kurallarına göre tabloyla ilgili istediğimiz işlemi yapabiliriz.


**********************************
*Burada fieldcatimizi hazırlarken ilk önce iki tane sabit alanımızı yazıyoruz QNAME ve WERKS olmak üzere.
FORM f_prepare_fcat .
  CLEAR : gt_fcat, gt_fcat[].
  PERFORM f_add_fcat USING 'QNAME' '<gt_display>' 'QNAME' 'LTAP' ''.
  PERFORM f_add_fcat USING 'WERKS' '<gt_display>' 'WERKS' 'LTAP' ''.
*Sonra burada gt_yutwm0003 internal tablosunda kaç tane kayıt varsa o kadar COLUMN1 COLUMN2 COLUMN3 vs. diye field lerimizi oluşturuyoruz.

  LOOP AT gt_yutwm0003.
    gv_tabix = sy-tabix.
    CONCATENATE 'COLUMN' gv_tabix INTO gv_fname.
    PERFORM f_add_fcat USING gv_fname '<gt_display>' 'REMOVAL_COUNTER' 'KPI_EQUI_STRUC' gt_yutwm0003-yucolumn.
  ENDLOOP.
ENDFORM.
*********************************************
*Yukarıda gönderdiğimiz alanları bu alanlara karşılık gelecek şekilde assign ediyoruz.
FORM f_add_fcat  USING p1 p2 p3 p4 p5.
  CLEAR gt_fcat.
  gt_fcat-fieldname = p1.
  gt_fcat-tabname   = p2.
  gt_fcat-ref_field = p3.
  gt_fcat-ref_table = p4.
  gt_fcat-scrtext_l = p5.
  gt_fcat-scrtext_m = p5.
  gt_fcat-scrtext_s = p5.
  gt_fcat-coltext   = p5.
  APPEND gt_fcat.ENDFORM.            


Field symbol alan ismi tekrarları


*Bu örnek'te olduğu gibi ekranda aynı türden tekrar eden 18 tane gibi alanlar varsa bunları tektek eşitleme yerine field symbol la DO içinde döndürerek dynamic olarak istediğimiz değerleri ekletebiliriz.

DATA : ls_konv LIKE konv,
         lv_str  TYPE string,
         lv_i    TYPE i.
  FIELD-SYMBOLS : <a_fs>   TYPE ANY,
                  <ak_fs>  TYPE ANY,
                  <akk_fs> TYPE ANY.
  LOOP AT gt_display.
    CLEAR ls_konv .
    SELECT SINGLE * FROM konv INTO ls_konv
       WHERE knumv EQ gt_display-knumv.
    CLEAR lv_i.
    DO 18 TIMES.
      lv_i = lv_i + 1.
      lv_str = lv_i. CONDENSE lv_str.
      CONCATENATE 'A' lv_str '_KSCHL'   INTO lv_str.
      ASSIGN (lv_str) TO <a_fs>.
      lv_str = lv_i. CONDENSE lv_str.
      CONCATENATE 'A' lv_str '_KRECH'   INTO lv_str.
      ASSIGN (lv_str) TO <ak_fs>.
      lv_str = lv_i. CONDENSE lv_str.
      CONCATENATE 'GT_DISPLAY-A' lv_str INTO lv_str.
      ASSIGN (lv_str) TO <akk_fs>.
      IF sy-subrc IS INITIAL.
        IF <a_fs> IS NOT INITIAL AND <a_fs> EQ ls_konv-kschl.
          IF <ak_fs> IS NOT INITIAL.
            IF gt_display-krech = 'A'.
              <akk_fs> = ls_konv-kwert / gt_display-menge.
            ELSE.
              <akk_fs> = ls_konv-kawrt.
            ENDIF.
          ELSE.
            <akk_fs> = ls_konv-kawrt.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDDO.

    MODIFY gt_display.
  ENDLOOP.
ENDFORM.

replace değiştirme , değişkene 0 ekleme

** Replace
  SELECT SINGLE dcpfm
  INTO lv_dcpfm
  FROM usr01
  WHERE bname = sy-uname.

    IF lv_dcpfm = 'X'.
      REPLACE '.' IN lv_tmp_cost_c WITH ',' .
    ENDIF.

** Adding zero 
form f_zero_addition  using    len
                      changing n_var.

      DO len TIMES.
        lv_index = sy-index - 1.
        IF n_var+lv_index(1) EQ space.
          n_var+lv_index(1) = '0'.
        ENDIF.
      ENDDO.
endform.

n_var --->>>başına sıfır koycağımız değer
len------>>>sıfırları başına koyduğumuzdaki toplam uzunluk

İstediğimiz değerleri bir excele download ettirme

FORM f_download_sample_file .
  DATA : lv_fname TYPE string.
  DATA : lv_file_name TYPE string.
  DATA : lv_i TYPE i ,
         lv_path TYPE string,
         lv_fullpath TYPE string.

  DATA : BEGIN OF lt_samp_line OCCURS 0,
       field01 TYPE char40,
       field02 TYPE char40,
       field03 TYPE char40,
       field04 TYPE char40,
       field05 TYPE char40,
       field06 TYPE char40,
       field07 TYPE char40,
       field08 TYPE char40,
       field09 TYPE char40,
       field10 TYPE char40,
       field11 TYPE char40,
       field12 TYPE char40,
       field13 TYPE char40,
       field14 TYPE char40,
       field15 TYPE char40,
       field16 TYPE char40,
       field17 TYPE char40,
       field18 TYPE char40,
    END OF lt_samp_line.

*Bu tablo excelimiz 18 alanlı olduğunu belirtiyor.
*Burada bu methodu çağırarak user'a uygun yer seçtirtiyoruz.
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = 'Select path..'
      default_extension    = '.XLS'
      default_file_name    = 'Customer-material_info_file'
    CHANGING
      filename             = lv_fname
      path                 = lv_path
      fullpath             = lv_fullpath
          .
*Eğer uygun seçilmişse

  IF lv_fname NE space.

    lt_samp_line-field01 = text-k01.
    APPEND lt_samp_line.
    lt_samp_line-field01 = text-k02.
    APPEND lt_samp_line.

    lt_samp_line-field01 = text-004.
    lt_samp_line-field02 = text-005.
    lt_samp_line-field03 = text-006.
    lt_samp_line-field04 = text-007.
    lt_samp_line-field05 = text-009.
    lt_samp_line-field06 = text-008.
    lt_samp_line-field07 = text-010.
    lt_samp_line-field08 = text-011.
    lt_samp_line-field09 = text-012.
    lt_samp_line-field10 = text-013.
    lt_samp_line-field11 = text-014.
    lt_samp_line-field12 = text-015.
    lt_samp_line-field13 = text-016.
    lt_samp_line-field14 = text-017.
    lt_samp_line-field15 = text-018.
    lt_samp_line-field16 = text-019.
    lt_samp_line-field17 = text-020.
    lt_samp_line-field18 = text-021.
    APPEND lt_samp_line.

*İstediğimiz şeyleri tabloya yazıyoruz. Bu örnekte upload edilecek bir dosyanın örnek alanlarını gösteren fieldları text 021'e kadar yazıyoruz.


*Sonra bu method'la excel'i download ettiriyoruz.     CALL METHOD cl_gui_frontend_services=>gui_download
      EXPORTING
        filename                = lv_fname
        write_field_separator   = 'X'
      CHANGING
        data_tab                = lt_samp_line[]
      EXCEPTIONS
        file_write_error        = 1
        no_batch                = 2
        gui_refuse_filetransfer = 3
        invalid_type            = 4
        no_authority            = 5
        unknown_error           = 6
        header_not_allowed      = 7
        separator_not_allowed   = 8
        filesize_not_allowed    = 9
        header_too_long         = 10
        dp_error_create         = 11
        dp_error_send           = 12
        dp_error_write          = 13
        unknown_dp_error        = 14
        access_denied           = 15
        dp_out_of_memory        = 16
        disk_full               = 17
        dp_timeout              = 18
        file_not_found          = 19
        dataprovider_exception  = 20
        control_flush_error     = 21
        not_supported_by_gui    = 22
        error_no_gui            = 23
        OTHERS                  = 24.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
  ENDIF.


ENDFORM

Selection Screen Button Yaratma,Select options aralıgı teke indirme

***Selection Screen Button Yaratma

tables: sscrfields.
selection-screen begin of block blog with frame title  text-014.
selection-screen pushbutton  /01(29) but1 user-command but1.
selection-screen end  of block blog .


data: gv_icon_name type iconname,
      gv_button_text(20type c,
      gv_quickinfo like smp_dyntxt-quickinfo,
      gv_icon_str(255type c.
initialization.
  gv_icon_name = 'ICON_LIST'.    " 'ICON_DISPLAY_MORE'.
  gv_button_text = 'Log Display'.
  concatenate gv_button_text text-akt
              into gv_quickinfo
              separated by space.

  call function 'ICON_CREATE'
    exporting
      name                      = gv_icon_name
      text                        = gv_button_text
      info                        = gv_quickinfo
*       ADD_STDINF                  = 'X'
    importing
      result                      = gv_icon_str
    exceptions
      others                      = 0"not interested in errors


    but1 = gv_icon_str .


    at selection-screen .
  if sscrfields-ucomm eq 'BUT1'.
    MESSAGE e000(yuauth) WITH 'DENEME'.
    ENDIF.


***Select Options Teke İndirme Aralığı Kapatma

REPORT z.
TABLES: ekpo.
TYPE-POOLS: sscr.

DATA: restrict TYPE sscr_restrict,
selopt TYPE sscr_ass,
opt_list TYPE sscr_opt_list.
SELECT-OPTIONS: s_no
 FOR ekpo-werks NO INTERVALS.

INITIALIZATION.
  CLEAR selopt.
  selopt-kind = 'S'.
  selopt-name = 'S_NO'.
  selopt-sg_main = 'I'" I-INCLUSIVE, SPACE-BOTH
  selopt-sg_addy = ' '.
  selopt-op_main = 'I'.
  APPEND selopt TO restrict-ass_tab.

  CLEAR opt_list.
  opt_list-name = 'I'.
  opt_list-options-eq = 'X'.
  opt_list-options-ge = 'X'.
  APPEND opt_list TO restrict-opt_list_tab.

  CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
    EXPORTING
*   PROGRAM                      =
      restriction                  = restrict
*   DB                           = ' '
* EXCEPTIONS
*   TOO_LATE                     = 1
*   REPEATED                     = 2
*   SELOPT_WITHOUT_OPTIONS       = 3
*   SELOPT_WITHOUT_SIGNS         = 4
*   INVALID_SIGN                 = 5
*   EMPTY_OPTION_LIST            = 6
*   INVALID_KIND                 = 7
*   REPEATED_KIND_A              = 8
*   OTHERS                       = 9
            .
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

Monday, April 11, 2011

Authorization

*** Kayıt Silmeli Auth ***

LOOP AT gt_filedata.

(lv_tabix = sy-tabix.)
authority-check object 'YRGNPM01'
                         id 'ACTVT' field '01'
                         id 'WERKS' field gt_filedata-werks.

if sy-subrc ne 0
delete gt_filedata (index lv_tabix).
lv_check = 'X'.
continue.
endif.



  if lv_check is not initial.
    message text-005 type 'I'.
  endif.


**** Kontrol ve mesaj parametre


  form f_authority_check .

      AUTHORITY-CHECK OBJECT 'YRGNMM10'
       ID 'CEERKRS' FIELD p_erkrs
       ID 'ACTVT' field '03'.

      IF sy-subrc <> 0.
        MESSAGE e001(yuauth) WITH p_erkrs.

      ENDIF.

endform.


*** Çoklu (Select-options) da Authorization 2

 1- data: lr_vkorg like table of sdsls_vkorg_range.
  call function 'YUSD_AUTHORITY_CHECK'
    exporting
      r_vkorg   = s_vkorg[]
      chk_vkorg = 'X'
    tables
      er_vkorg  = lr_vkorg.

  if lr_vkorg[] is initial.
    message e130(yusd) with s_vkorg-low s_vkorg-high.
  endif.
  clear : s_vkorg[], s_vkorg.
  s_vkorg[] = lr_vkorg[].



2-form f_authority_check_bukrs .
data : begin of lt_t001 occurs 0,
         bukrs like t001-bukrs,
         end of lt_t001.

  clear : lt_t001, lt_t001[].

  select bukrs into table lt_t001
               from t001
               where bukrs in s_bukrs.
  clear : s_bukrs, s_bukrs[].
  loop at lt_t001.
    authority-check object 'YRGNCO01'
              id 'BUKRS' field lt_t001-bukrs
              id 'ACTVT' field '03'.
    if sy-subrc eq 0.
      s_bukrs-sign    = 'I'  .
      s_bukrs-option  = 'EQ' .
      s_bukrs-low     = lt_t001-bukrs.
      append s_bukrs.
    endif.
  endloop.
  if s_bukrs[] is initial.
    message e000(yuauth) with text-001.
  endif.
endform.


Friday, April 8, 2011

Program Calısırken Altta Mesaj Verdirme

FORM write_wait.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      text = text-102.      "  Programda Text Symbollere Cıkması Istenen Mesaj Yazılır ve Function Cagırılır .
                                       Mesela selectimizin uzun sure alacagını biliyorsak selectten once bunu yazarak
                                       kayıtların okundugunu belırtebılırım .

ENDFORM.     



collect , on change of , at new

COLLECT YAPISI

A  B 1
A  B 2
A  B 8
A  C 3
A  C 2
BU TABLOYU COLLECT EDERSEK

BÖYLE OLUYO

A B 11
A C 5

COLLECT

  select * from yutwm0003 into table gt_yutwm0003.

  loop at gt_itab.
    move-corresponding gt_itab to gt_itab_collect.
    gt_itab_collect-count = 1.
    collect gt_itab_collect.
  endloop.



ON CHANGE OF

ON CHANGE OF (field ismi) ...................

Burda AT NEW 'de olan kombinasyon için değil, bir tek alan için değişime bakar..


AT NEW

at new (field alan ismi) kullanınca ondan önceki alanlara da bakıyor  kombinasyon değiştiğinde değiştirir alanı
A B 1
A B 1
A C 2
A C 2


  data :  lv_bwlvs like ltak-bwlvs,
          lv_bwart like ltak-bwart.

  select * from ltap into corresponding fields of table gt_itab
           where lgnum in s_lgnum
             and matnr in s_matnr
             and werks in s_werks
             and charg in s_charg
             and qdatu in s_qdatu
             and pquit eq p_pquit
             and vltyp in s_vltyp
             and vlpla in s_vlpla
             and nltyp in s_nltyp
             and nlpla in s_nlpla.

  loop at gt_itab.
    at new tanum.
      clear : lv_bwlvs,lv_bwart.
      select single bwlvs bwart from ltak into (lv_bwlvs,lv_bwart)
             where lgnum eq gt_itab-lgnum
               and tanum eq gt_itab-tanum.

    endat.

----TANUM DEĞERİ DEĞİŞMEZSE  QUERY Yİ YAPMIYO
----DİREK AŞAĞIDAKİ EŞİTLİĞİ YAPIYOR...

    gt_itab-bwlvs = lv_bwlvs.
    gt_itab-bwart = lv_bwart.
    modify gt_itab.

  endloop.

Total Pageviews