Sapforum.Biz
Инструменты => SE38 - ABAP Редактор => ABAP - Инструментальные средства => Программы на ABAP => Тема начата: Uukrul от Май 29, 2009, 04:27:28 pm
-
Экзиты конечно местами заменены на BADI или вообще энхансмены, но все еще активно используются и иногда возможно они более предпочтительны. Имеется в виду использование транзакций CMOD/SMOD. Программа по коду транзакции, выдает список экзитов, которые можно использовать в ней.
В общем начало программе было положено уже и не помню кем, а сейчас тут пришла зима, надо было кое чего искать, в общем к начальному варианту данной программы добавил такие полезные вещи как имя проекта в который включен экзит и авторов проекта, а так же текущий статус внедрения (активно/не активно). Ну и переходы по клику мышаком на проекты... а что дальше уже делать с этой кухней это вам решать.
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.
-
Пример как это выглядит...
-
В общем-то тут надо было с другой стороны подойти и выбрать все расширения которые есть в системе с явками, адресами и паролями, так что чуток докрутил программку (при апгрейдах наверное очень даже пригодиться, чтобы знать кого бить по руками и за какие расширения). Программа базируется на предыдущей версии, так что можно брать эту. Вроде как все работает.
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
-
Вроде как есть стандартное средство S_ALR_87101281 ;)
-
Вроде как есть стандартное средство S_ALR_87101281 ;)
Ну у меня в 6.0 эта зараза падает, если просмотреть все поля хочется (про поведение в 4.6 расскажу завтра), а из минусов, не очень удобно, так как надо заходить в каждый проект и смотреть какие расширения ему присвоены, у меня же в программке сразу показывает проект, под ним список расширений, а так можно и через CMOD все просмотреть. Так что есть то оно есть, да не совсем оно есть...
-
Ну у меня в 6.0 эта зараза падает, если просмотреть все поля хочется (про поведение в 4.6 расскажу завтра)
Ну у меня в 6.0 на GETWA_NOT_ASSIGNED при попытке просмотреть полный список валится, но если руками менять layout и не выбирать для показа поле expand, то без проблем показывает, а в 4.6 - все хорошо.
Насчет плюсов/минусов... так где их нет?
-
Насчет плюсов/минусов... так где их нет?
Так суть как раз в том чтобы выбрать все и что за кем числиться и дать в работу, а тут выбрать не выйдет, так как надо в каждый проект ходить и смотреть присвоенные расширения, у моем же отчете это все на одном экране. Опять же в дамп не падает ;)
-
респект.
спасибо - сегодня очень пригодилась, жаль для BADIшек ничего такого нету
-
спасибо - сегодня очень пригодилась, жаль для BADIшек ничего такого нету
Да надо будет докрутить и для BADI что-то похожее...
-
ага, народ просит ;)
-
Я использую вот эту программу (http://www.sapnet.ru/viewtopic.php?p=4015)
Большинство случаев обрабатывается, в т.ч. и BAdI ;)
-
На одном из проектов встал вопрос, что из расширений активировано в системе, в каких проектах и кто за этот весь балаган отвечает. Руками выбирать все это дело сложно и не интересно, так что докрутил второй режим работы в данной программе, т.е. показать активные в системе проекты и расширения с ответственными.
*&---------------------------------------------------------------------*
*& 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
В общем на рисунках символы текстовых переменных и как выглядит список проектов с активированными расширениями.
-
респект, сам активно пользуюсь... особенно на текущем проекте, тут в системе тоже оказывается эта штука есть :-)