Sapforum.Biz

Инструменты => SE38 - ABAP Редактор => ABAP - Инструментальные средства => Программы на ABAP => Тема начата: Uukrul от Май 29, 2009, 04:27:28 pm

Название: Программа поиска UserExit-ов в транзакциях
Отправлено: Uukrul от Май 29, 2009, 04:27:28 pm
Экзиты конечно местами заменены на BADI или вообще энхансмены, но все еще активно используются и иногда возможно они более предпочтительны. Имеется в виду использование транзакций CMOD/SMOD. Программа по коду транзакции, выдает список экзитов, которые можно использовать в ней.

В общем начало программе было положено уже и не помню кем, а сейчас тут пришла зима, надо было кое чего искать, в общем к начальному варианту данной программы добавил такие полезные вещи как имя проекта в который включен экзит и авторов проекта, а так же текущий статус внедрения (активно/не активно). Ну и переходы по клику мышаком на проекты... а что дальше уже делать с этой кухней это вам решать.

Код: You are not allowed to view links. Register or Login
REPORT yuuk_find_user_exit NO STANDARD PAGE HEADING.

TABLES: tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir,
        tstct, modattr.

DATA:   lt_jtab LIKE tadir OCCURS 0 WITH HEADER LINE,
        lt_modact LIKE modact OCCURS 0 WITH HEADER LINE.
DATA:   field1(30) TYPE c,
        call_mode TYPE c,
        v_devclass LIKE tadir-devclass.

DATA: BEGIN OF lt_bdcdata OCCURS 0.
        INCLUDE STRUCTURE bdcdata.
DATA: END OF lt_bdcdata.
************************************************************************
PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.


************************************************************************
SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.
IF sy-subrc = 0.
* Проверить на тексты программ
  SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
                               AND object = 'PROG'
                               AND obj_name = tstc-pgmna.
  IF sy-subrc NE 0.
*   Проверить на тексты группы функций
    SELECT SINGLE * FROM trdir WHERE name = tstc-pgmna.
    IF trdir-subc = 'F'.
      SELECT SINGLE * FROM tfdir WHERE pname = tstc-pgmna.
      SELECT SINGLE * FROM enlfdir WHERE funcname = tfdir-funcname.
      SELECT SINGLE * FROM tadir WHERE pgmid = 'R3TR'
                                   AND object = 'FUGR'
                                   AND obj_name = enlfdir-area.
      MOVE : tadir-devclass TO v_devclass.
    ENDIF.
  ELSE.
    MOVE : tadir-devclass TO v_devclass.
  ENDIF.

  SELECT * FROM tadir INTO TABLE lt_jtab WHERE pgmid = 'R3TR'
                        AND object = 'SMOD'
                        AND devclass = v_devclass.
  SELECT SINGLE * FROM tstct WHERE sprsl = sy-langu AND
                                   tcode = p_tcode.


  FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
  WRITE:/(19) 'Transaction Code - ',
       20(20) p_tcode,
       45(108) tstct-ttext.
  SKIP.
  IF NOT lt_jtab[] IS INITIAL.
    WRITE:/(152) sy-uline.
    FORMAT COLOR COL_HEADING INTENSIFIED ON.
    WRITE:/1 sy-vline,
           2 'Exit Name',
          21 sy-vline ,
          22 'Description',
          95 sy-vline,
          96 'Project',
          105 sy-vline,
          106 'Status',
          113 sy-vline,
          114 'Создал', 126 sy-vline,
          127 'Изменил', 139 sy-vline,
          140 'Активировал', 152 sy-vline.
    WRITE:/(152) sy-uline.

*   Список модулей расширений
    LOOP AT lt_jtab.
*     Краткий текст расширения
      SELECT SINGLE * FROM modsapt WHERE sprsl = sy-langu AND
                                         name = lt_jtab-obj_name.
*     Код проекта в которой присвоено расширение
      SELECT * INTO TABLE lt_modact
      FROM modact WHERE member = lt_jtab-obj_name.

      FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
      WRITE:/1 sy-vline,
             2 lt_jtab-obj_name HOTSPOT ON,
            21 sy-vline ,
            22 modsapt-modtext,
            95 sy-vline.
      IF lt_modact[] IS INITIAL.
        WRITE: 105 sy-vline,
               113 sy-vline,
               126 sy-vline,
               139 sy-vline,
               152 sy-vline.
      ELSE.
        LOOP AT lt_modact.
          SELECT SINGLE * FROM modattr WHERE name = lt_modact-name.
          WRITE: 96 lt_modact-name HOTSPOT ON,
                 105 sy-vline.
*         Статус
          CASE modattr-status.
            WHEN 'A'. WRITE 106 'Active'.
            WHEN space. WRITE 106 'Deact'.
            WHEN OTHERS. WRITE 106 'PartAct'.
          ENDCASE.
          WRITE: 113 sy-vline,
                 114 modattr-cnam, 126 sy-vline,
                 127 modattr-unam, 139 sy-vline,
                 140 modattr-anam, 152 sy-vline.
        ENDLOOP.
      ENDIF.
    ENDLOOP.
    WRITE:/(152) sy-uline.
    DESCRIBE TABLE lt_jtab.
    SKIP.
    FORMAT COLOR COL_TOTAL INTENSIFIED ON.
    WRITE:/ 'No of Exits:' , sy-tfill.
  ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(152) 'No User Exit exists'.
  ENDIF.
ELSE.
  FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
  WRITE:/(152) 'Transaction Code Does Not Exist'.
ENDIF.

************************************************************************
************************************************************************
AT LINE-SELECTION.
  REFRESH: lt_bdcdata.
  GET CURSOR FIELD field1.
  CASE field1.
*   Перейти к просмотру расширения
    WHEN 'LT_JTAB-OBJ_NAME'.
      PERFORM dynpro USING:
        'X' 'SAPMSMOD' '2010',
        ' ' 'MOD0-NAME' sy-lisel+1(10),
        ' ' 'MODF-CHAM' 'X',
        ' ' 'MODF-HEAS' ' ',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      CALL TRANSACTION 'SMOD' USING lt_bdcdata MODE call_mode.

*   Перейти к просмотру проекта
    WHEN 'LT_MODACT-NAME'.
      PERFORM dynpro USING:
        'X' 'SAPMSMOD' '1010',
        ' ' 'MOD0-NAME' sy-lisel+95(8),
        ' ' 'MODF-HEAD' ' ',
        ' ' 'MODF-CHAK' 'X',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      CALL TRANSACTION 'CMOD' USING lt_bdcdata MODE call_mode.
  ENDCASE.

************************************************************************
************************************************************************
*&---------------------------------------------------------------------*
*&      Form  DYNPRO
*&---------------------------------------------------------------------*
*                   Генерация полей для BATCH-INPUT
*----------------------------------------------------------------------*
FORM dynpro USING dynbegin name value.
  CLEAR lt_bdcdata.
  IF dynbegin = 'X'.
    MOVE: name TO lt_bdcdata-program,
          value TO lt_bdcdata-dynpro,
          'X' TO lt_bdcdata-dynbegin.
  ELSE.
    MOVE: name TO lt_bdcdata-fnam,
          value TO lt_bdcdata-fval.
  ENDIF.
  APPEND lt_bdcdata.
ENDFORM.
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: Uukrul от Май 29, 2009, 04:37:46 pm
Пример как это выглядит...
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: Uukrul от Июнь 01, 2009, 02:02:28 pm
В общем-то тут надо было с другой стороны подойти и выбрать все расширения которые есть в системе с явками, адресами и паролями, так что чуток докрутил программку (при апгрейдах наверное очень даже пригодиться, чтобы знать кого бить по руками и за какие расширения). Программа базируется на предыдущей версии, так что можно брать эту. Вроде как все работает.
Код: You are not allowed to view links. Register or Login
report yuuk_find_user_exit no standard page heading.

tables: tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir,
        tstct, modattr, modtext.

data:   lt_jtab like tadir occurs 0 with header line,
        lt_modact like modact occurs 0 with header line,
        lt_modattr like modattr occurs 0 with header line.
data:   field1(30) type c,
        call_mode type c,
        v_devclass like tadir-devclass.

data: begin of lt_bdcdata occurs 0.
        include structure bdcdata.
data: end of lt_bdcdata.

************************************************************************
parameters : rb_one radiobutton group grp1 default 'X'
                                           user-command one,
             p_tcode like tstc-tcode.
selection-screen skip 1.
parameters     :rb_two radiobutton group grp1.
select-options :p_modnam for modattr-name no intervals.


************************************************************************
************************************************************************
start-of-selection.
  if rb_one = 'X'.
    perform sel_tcode.
  elseif rb_two = 'X'.
    perform sel_project.
  endif.

************************************************************************
************************************************************************
at line-selection.
  refresh: lt_bdcdata.
  get cursor field field1.
  case field1.
*   Перейти к просмотру расширения
    when 'LT_JTAB-OBJ_NAME'.
      perform dynpro using:
        'X' 'SAPMSMOD' '2010',
        ' ' 'MOD0-NAME' sy-lisel+1(10),
        ' ' 'MODF-CHAM' 'X',
        ' ' 'MODF-HEAS' ' ',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      call transaction 'SMOD' using lt_bdcdata mode call_mode.

*   Перейти к просмотру проекта
    when 'LT_MODACT-NAME'.
      perform dynpro using:
        'X' 'SAPMSMOD' '1010',
        ' ' 'MOD0-NAME' sy-lisel+95(8),
        ' ' 'MODF-HEAD' ' ',
        ' ' 'MODF-CHAK' 'X',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      call transaction 'CMOD' using lt_bdcdata mode call_mode.
  endcase.

************************************************************************
************************************************************************
at selection-screen output.
  loop at screen.
    if rb_one = 'X'.
      if screen-name = 'P_MODNAM'.
        screen-input = '0'.
      endif.
    elseif rb_two = 'X'.
      if screen-name = 'P_TCODE'.
        screen-input = '0'.
      endif.
    endif.
    modify screen.
  endloop.

************************************************************************
************************************************************************
at selection-screen on value-request for p_modnam-low.
  data: modname type modname,
        dynfields like dynpread occurs 1 with header line,
        funcname type rs38l_fnam.

  clear: dynfields[], dynfields.
  dynfields-fieldname = 'P_MODNAM'.
  append dynfields.
  call function 'DYNP_VALUES_READ'
       exporting
            dyname     = 'YTOV_FIND_USER_EXIT'
            dynumb     = sy-dynnr
       tables
            dynpfields = dynfields
       exceptions
            others     = 0.
  read table dynfields index 1.
  modname = dynfields-fieldvalue.
  call function 'F4_CUSTOMER_PROJECT'
       exporting
            object             = modname
            suppress_selection = space
            display_only       = space
       importing
            result             = modname.
  dynfields-fieldvalue = modname.
  modify dynfields index 1.
  call function 'DYNP_VALUES_UPDATE'
       exporting
            dyname     = 'YTOV_FIND_USER_EXIT'
            dynumb     = sy-dynnr
       tables
            dynpfields = dynfields
       exceptions
            others     = 0.


*&---------------------------------------------------------------------*
*&      Form  DYNPRO
*&---------------------------------------------------------------------*
*                   Генерация полей для BATCH-INPUT
*----------------------------------------------------------------------*
form dynpro using dynbegin name value.
  clear lt_bdcdata.
  if dynbegin = 'X'.
    move: name to lt_bdcdata-program,
          value to lt_bdcdata-dynpro,
          'X' to lt_bdcdata-dynbegin.
  else.
    move: name to lt_bdcdata-fnam,
          value to lt_bdcdata-fval.
  endif.
  append lt_bdcdata.
endform.

*&---------------------------------------------------------------------*
*&      Form  sel_tcode
*&---------------------------------------------------------------------*
*       Выбрать расширения по коду транзакции
*----------------------------------------------------------------------*
form sel_tcode.
  select single * from tstc where tcode = p_tcode.
  if sy-subrc = 0.
*   Проверить на тексты программ
    select single * from tadir where pgmid = 'R3TR'
                                 and object = 'PROG'
                                 and obj_name = tstc-pgmna.
    if sy-subrc ne 0.
*     Проверить на тексты группы функций
      select single * from trdir where name = tstc-pgmna.
      if trdir-subc = 'F'.
        select single * from tfdir where pname = tstc-pgmna.
        select single * from enlfdir where funcname = tfdir-funcname.
        select single * from tadir where pgmid = 'R3TR'
                                     and object = 'FUGR'
                                     and obj_name = enlfdir-area.
        move : tadir-devclass to v_devclass.
      endif.
    else.
      move : tadir-devclass to v_devclass.
    endif.

    select * from tadir into table lt_jtab where pgmid = 'R3TR'
                          and object = 'SMOD'
                          and devclass = v_devclass.
    select single * from tstct where sprsl = sy-langu and
                                     tcode = p_tcode.


    format color col_positive intensified off.
    write:/(19) 'Transaction Code - ',
         20(20) p_tcode,
         45(108) tstct-ttext.
    skip.
    if not lt_jtab[] is initial.
      write:/(152) sy-uline.
      format color col_heading intensified on.
      write:/1 sy-vline,
             2 'Exit Name',
            21 sy-vline ,
            22 'Description',
            95 sy-vline,
            96 'Project',
            105 sy-vline,
            106 'Status',
            113 sy-vline,
            114 'Создал', 126 sy-vline,
            127 'Изменил', 139 sy-vline,
            140 'Активировал', 152 sy-vline.
      write:/(152) sy-uline.

*     Список модулей расширений
      loop at lt_jtab.
*       Краткий текст расширения
        select single * from modsapt where sprsl = sy-langu and
                                           name = lt_jtab-obj_name.
*       Код проекта в которой присвоено расширение
        select * into table lt_modact
        from modact where member = lt_jtab-obj_name.

        format color col_normal intensified off.
        write:/1 sy-vline,
               2 lt_jtab-obj_name hotspot on,
              21 sy-vline ,
              22 modsapt-modtext,
              95 sy-vline.
        if lt_modact[] is initial.
          write: 105 sy-vline,
                 113 sy-vline,
                 126 sy-vline,
                 139 sy-vline,
                 152 sy-vline.
        else.
          loop at lt_modact.
            select single * from modattr where name = lt_modact-name.
            write: 96 lt_modact-name hotspot on,
                   105 sy-vline.
*           Статус
            case modattr-status.
              when 'A'. write 106 'Active'.
              when space. write 106 'Deact'.
              when others. write 106 'PartAct'.
            endcase.
            write: 113 sy-vline,
                   114 modattr-cnam, 126 sy-vline,
                   127 modattr-unam, 139 sy-vline,
                   140 modattr-anam, 152 sy-vline.
          endloop.
        endif.
      endloop.
      write:/(152) sy-uline.
      describe table lt_jtab.
      skip.
      format color col_total intensified on.
      write:/ 'No of Exits:' , sy-tfill.
    else.
      format color col_negative intensified on.
      write:/(152) 'No User Exit exists'.
    endif.
  else.
    format color col_negative intensified on.
    write:/(152) 'Transaction Code Does Not Exist'.
  endif.
endform.                    " sel_tcode
*&---------------------------------------------------------------------*
*&      Form  sel_project
*&---------------------------------------------------------------------*
*       Выбрать расширения по проектам
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form sel_project.
* Выбрать проекты
  select * into table lt_modattr
  from modattr where name in p_modnam.

  loop at lt_modattr.
*   Список проектов
    select single * from modtext
    where sprsl = sy-langu and name = lt_modattr-name.
    format color col_positive intensified off.
    write: /(152) sy-uline,
           /1 sy-vline, lt_modattr-name, '-',
            14 modtext-modtext, 77 sy-vline,
            78 'Создал:', lt_modattr-cnam, sy-vline,
            100 'Изменил:', lt_modattr-unam, sy-vline,
            125 'Активировал:', lt_modattr-anam, 152 sy-vline,
            /(152) sy-uline.

*   Список расширений к проекту
    select * into table lt_modact
    from modact where name = lt_modattr-name.
    loop at lt_modact where member <> space.
      format color col_normal intensified off.
      select single * from modsapt where sprsl = sy-langu and
                                     name = lt_modact-member.
      write: / sy-vline, 3 lt_modact-member, 14 '-',
             modsapt-modtext, sy-vline.
      case lt_modattr-status.
        when 'A'. write 79 'Active'.
        when space. write 79 'Deact'.
        when others. write 79 'PartAct'.
      endcase.
      write: 152 sy-vline.
    endloop.
    if sy-subrc <> 0.
      write: / sy-vline, 2(150) sy-uline, 152 sy-vline,
             /.
    else.
      write: /(152) sy-uline,
             /.
    endif.
  endloop.
endform.                    " sel_project
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: №1 от Июнь 01, 2009, 02:19:25 pm
Вроде как есть стандартное средство S_ALR_87101281 ;)
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: Uukrul от Июнь 01, 2009, 11:51:53 pm
You are not allowed to view links. Register or Login
Вроде как есть стандартное средство S_ALR_87101281 ;)
Ну у меня в 6.0 эта зараза падает, если просмотреть все поля хочется (про поведение в 4.6 расскажу завтра), а из минусов, не очень удобно, так как надо заходить в каждый проект и смотреть какие расширения ему присвоены, у меня же в программке сразу показывает проект, под ним список расширений, а так можно и через CMOD все просмотреть. Так что есть то оно есть, да не совсем оно есть...
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: №1 от Июнь 02, 2009, 07:40:13 am
You are not allowed to view links. Register or Login
Ну у меня в 6.0 эта зараза падает, если просмотреть все поля хочется (про поведение в 4.6 расскажу завтра)
Ну у меня в 6.0 на GETWA_NOT_ASSIGNED при попытке просмотреть полный список валится, но если руками менять layout и не выбирать для показа поле expand, то без проблем показывает, а в 4.6 - все хорошо.
Насчет плюсов/минусов... так где их нет?
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: Uukrul от Июнь 02, 2009, 09:57:00 am
You are not allowed to view links. Register or Login
Насчет плюсов/минусов... так где их нет?
Так суть как раз в том чтобы выбрать все и что за кем числиться и дать в работу, а тут выбрать не выйдет, так как надо в каждый проект ходить и смотреть присвоенные расширения, у моем же отчете это все на одном экране. Опять же в дамп не падает  ;)
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: Паганель от Сентябрь 17, 2009, 05:55:17 pm
респект.

спасибо - сегодня очень пригодилась, жаль для BADIшек ничего такого нету
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: Uukrul от Сентябрь 17, 2009, 06:54:44 pm
You are not allowed to view links. Register or Login
спасибо - сегодня очень пригодилась, жаль для BADIшек ничего такого нету
Да надо будет докрутить и для BADI что-то похожее...
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: Паганель от Сентябрь 17, 2009, 07:52:04 pm
ага, народ просит ;)
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: Удав от Октябрь 07, 2009, 12:02:31 pm
Я использую вот эту программу (http://www.sapnet.ru/viewtopic.php?p=4015)
Большинство случаев обрабатывается, в т.ч. и BAdI  ;)
Название: Программа поиска UserExit в транзакциях и работы с активированными расширениями
Отправлено: Uukrul от Август 28, 2011, 01:16:57 pm
На одном из проектов встал вопрос, что из расширений активировано в системе, в каких проектах и кто за этот весь балаган отвечает. Руками выбирать все это дело сложно и не интересно, так что докрутил второй режим работы в данной программе, т.е. показать активные в системе проекты и расширения с ответственными.

Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*& Report  YUUK_FIND_USEREXITS
*&
*&---------------------------------------------------------------------*
*&  Программа поиска UserExit а так же общий обзор пакетов модификаций
*&  разрабатываемых через транзакции CMOD/SMOD
*&---------------------------------------------------------------------*
report yuuk_find_userexits no standard page heading.

tables: tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir,
        tstct, modattr, modtext.

data:   lt_jtab like tadir occurs 0 with header line,
        lt_modact like modact occurs 0 with header line,
        lt_modattr like modattr occurs 0 with header line.
data:   field1(30) type c,
        call_mode type c,
        v_devclass like tadir-devclass.

data: begin of lt_bdcdata occurs 0.
        include structure bdcdata.
data: end of lt_bdcdata.

************************************************************************
parameters : rb_one radiobutton group grp1 default 'X'
                                           user-command one,
             p_tcode like tstc-tcode.
selection-screen skip 1.
parameters     :rb_two radiobutton group grp1.
select-options :p_modnam for modattr-name no intervals.


************************************************************************
************************************************************************
start-of-selection.
  if rb_one = 'X'.
    perform sel_tcode.
  elseif rb_two = 'X'.
    perform sel_project.
  endif.

************************************************************************
************************************************************************
at line-selection.
  refresh: lt_bdcdata.
  get cursor field field1.
  case field1.
*   Перейти к просмотру расширения
    when 'LT_JTAB-OBJ_NAME'.
      perform dynpro using:
        'X' 'SAPMSMOD' '2010',
        ' ' 'MOD0-NAME' sy-lisel+1(10),
        ' ' 'MODF-CHAM' 'X',
        ' ' 'MODF-HEAS' ' ',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      call transaction 'SMOD' using lt_bdcdata mode call_mode.

*   Перейти к просмотру проекта
    when 'LT_MODACT-NAME'.
      perform dynpro using:
        'X' 'SAPMSMOD' '1010',
        ' ' 'MOD0-NAME' sy-lisel+95(8),
        ' ' 'MODF-HEAD' ' ',
        ' ' 'MODF-CHAK' 'X',
        ' ' 'BDC_OKCODE' '=SHOW'.
      call_mode = 'E'.
      call transaction 'CMOD' using lt_bdcdata mode call_mode.
  endcase.

************************************************************************
************************************************************************
at selection-screen output.
  loop at screen.
    if rb_one = 'X'.
      if screen-name = 'P_MODNAM-LOW'.
        screen-input = '0'.
      endif.
    elseif rb_two = 'X'.
      if screen-name = 'P_TCODE'.
        screen-input = '0'.
      endif.
    endif.
    modify screen.
  endloop.

************************************************************************
************************************************************************
at selection-screen on value-request for p_modnam-low.
  data: modname type modname,
        dynfields like dynpread occurs 1 with header line,
        funcname type rs38l_fnam.

  clear: dynfields[], dynfields.
  dynfields-fieldname = 'P_MODNAM'.
  append dynfields.
  call function 'DYNP_VALUES_READ'
    exporting
      dyname     = 'YTOV_FIND_USER_EXIT'
      dynumb     = sy-dynnr
    tables
      dynpfields = dynfields
    exceptions
      others     = 0.
  read table dynfields index 1.
  modname = dynfields-fieldvalue.
  call function 'F4_CUSTOMER_PROJECT'
    exporting
      object             = modname
      suppress_selection = space
      display_only       = space
    importing
      result             = modname.
  dynfields-fieldvalue = modname.
  modify dynfields index 1.
  call function 'DYNP_VALUES_UPDATE'
    exporting
      dyname     = 'YTOV_FIND_USER_EXIT'
      dynumb     = sy-dynnr
    tables
      dynpfields = dynfields
    exceptions
      others     = 0.


*&---------------------------------------------------------------------*
*&      Form  DYNPRO
*&---------------------------------------------------------------------*
*                   Генерация полей для BATCH-INPUT
*----------------------------------------------------------------------*
form dynpro using dynbegin name value.
  clear lt_bdcdata.
  if dynbegin = 'X'.
    move: name to lt_bdcdata-program,
          value to lt_bdcdata-dynpro,
          'X' to lt_bdcdata-dynbegin.
  else.
    move: name to lt_bdcdata-fnam,
          value to lt_bdcdata-fval.
  endif.
  append lt_bdcdata.
endform.                    "dynpro

*&---------------------------------------------------------------------*
*&      Form  sel_tcode
*&---------------------------------------------------------------------*
*       Выбрать расширения по коду транзакции
*----------------------------------------------------------------------*
form sel_tcode.
  select single * from tstc where tcode = p_tcode.
  if sy-subrc = 0.
*   Проверить на тексты программ
    select single * from tadir where pgmid = 'R3TR'
                                 and object = 'PROG'
                                 and obj_name = tstc-pgmna.
    if sy-subrc ne 0.
*     Проверить на тексты группы функций
      select single * from trdir where name = tstc-pgmna.
      if trdir-subc = 'F'.
        select single * from tfdir where pname = tstc-pgmna.
        select single * from enlfdir where funcname = tfdir-funcname.
        select single * from tadir where pgmid = 'R3TR'
                                     and object = 'FUGR'
                                     and obj_name = enlfdir-area.
        move : tadir-devclass to v_devclass.
      endif.
    else.
      move : tadir-devclass to v_devclass.
    endif.

    select * from tadir into table lt_jtab where pgmid = 'R3TR'
                          and object = 'SMOD'
                          and devclass = v_devclass.
    select single * from tstct where sprsl = sy-langu and
                                     tcode = p_tcode.


    format color col_positive intensified off.
    write:/(19) 'Transaction Code - ',
         20(20) p_tcode,
         45(108) tstct-ttext.
    skip.
    if not lt_jtab[] is initial.
      write:/(152) sy-uline.
      format color col_heading intensified on.
      write:/1 sy-vline,
             2 'Exit Name',
            21 sy-vline ,
            22 'Description',
            95 sy-vline,
            96 'Project',
            105 sy-vline,
            106 'Status',
            113 sy-vline,
            114 'Создал', 126 sy-vline,
            127 'Изменил', 139 sy-vline,
            140 'Активировал', 152 sy-vline.
      write:/(152) sy-uline.

*     Список модулей расширений
      loop at lt_jtab.
*       Краткий текст расширения
        select single * from modsapt where sprsl = sy-langu and
                                           name = lt_jtab-obj_name.
*       Код проекта в которой присвоено расширение
        select * into table lt_modact
        from modact where member = lt_jtab-obj_name.

        format color col_normal intensified off.
        write:/1 sy-vline,
               2 lt_jtab-obj_name hotspot on,
              21 sy-vline ,
              22 modsapt-modtext,
              95 sy-vline.
        if lt_modact[] is initial.
          write: 105 sy-vline,
                 113 sy-vline,
                 126 sy-vline,
                 139 sy-vline,
                 152 sy-vline.
        else.
          loop at lt_modact.
            select single * from modattr where name = lt_modact-name.
            write: 96 lt_modact-name hotspot on,
                   105 sy-vline.
*           Статус
            case modattr-status.
              when 'A'. write 106 'Active'.
              when space. write 106 'Deact'.
              when others. write 106 'PartAct'.
            endcase.
            write: 113 sy-vline,
                   114 modattr-cnam, 126 sy-vline,
                   127 modattr-unam, 139 sy-vline,
                   140 modattr-anam, 152 sy-vline.
          endloop.
        endif.
      endloop.
      write:/(152) sy-uline.
      describe table lt_jtab.
      skip.
      format color col_total intensified on.
      write:/ 'No of Exits:' , sy-tfill.
    else.
      format color col_negative intensified on.
      write:/(152) 'No User Exit exists'.
    endif.
  else.
    format color col_negative intensified on.
    write:/(152) 'Transaction Code Does Not Exist'.
  endif.
endform.                    " sel_tcode
*&---------------------------------------------------------------------*
*&      Form  sel_project
*&---------------------------------------------------------------------*
*       Выбрать расширения по проектам
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form sel_project.
* Выбрать проекты
  select * into table lt_modattr
  from modattr where name in p_modnam.

  loop at lt_modattr.
*   Список проектов
    select single * from modtext
    where sprsl = sy-langu and name = lt_modattr-name.
    format color col_positive intensified off.
    write: /(152) sy-uline,
           /1 sy-vline, lt_modattr-name, '-',
            14 modtext-modtext, 77 sy-vline,
            78 'Создал:', lt_modattr-cnam, sy-vline,
            100 'Изменил:', lt_modattr-unam, sy-vline,
            125 'Активировал:', lt_modattr-anam, 152 sy-vline,
            /(152) sy-uline.

*   Список расширений к проекту
    select * into table lt_modact
    from modact where name = lt_modattr-name.
    loop at lt_modact where member <> space.
      format color col_normal intensified off.
      select single * from modsapt where sprsl = sy-langu and
                                     name = lt_modact-member.
      write: / sy-vline, 3 lt_modact-member, 14 '-',
             modsapt-modtext, sy-vline.
      case lt_modattr-status.
        when 'A'. write 79 'Active'.
        when space. write 79 'Deact'.
        when others. write 79 'PartAct'.
      endcase.
      write: 152 sy-vline.
    endloop.
    if sy-subrc <> 0.
      write: / sy-vline, 2(150) sy-uline, 152 sy-vline,
             /.
    else.
      write: /(152) sy-uline,
             /.
    endif.
  endloop.
endform.                    " sel_project

В общем на рисунках символы текстовых переменных и как выглядит список проектов с активированными расширениями.
Название: Re: Программа поиска UserExit-ов в транзакциях
Отправлено: Паганель от Август 28, 2011, 09:12:38 pm
респект, сам активно пользуюсь... особенно на текущем проекте, тут в системе тоже оказывается эта штука есть :-)