+ Sapforum.Biz » Инструменты » ABAP - Инструментальные средства » SE38 - ABAP Редактор » Программы на ABAP (Модератор: Dmitriy)Тема:
|- Программа для поиска текста в коде




Автор Тема: Программа для поиска текста в коде  (Прочитано 4604 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн insaf121

  • Newbie
  • *
  • Сообщений: 25
  • Reputation Power: 0
  • insaf121 has no influence.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYears
Программа для поиска текста в коде
« : Декабрь 13, 2012, 02:16:59 pm »
Знаю что таких программ много и есть стандартные, но мало ли вдруг кому-то пригодиться  ;)
Код: You are not allowed to view links. Register or Login
REPORT ZXXX NO STANDARD PAGE HEADING LINE-SIZE 246.
TABLES: TRDIRT.

DATA: BEGIN OF TPROG OCCURS 0,
  PROG LIKE D010SINF-PROG,
  CNAM LIKE D010SINF-CNAM,
  CDAT LIKE D010SINF-CDAT,
  UNAM LIKE D010SINF-UNAM,
  UDAT LIKE D010SINF-UDAT,
END OF TPROG.
DATA: BEGIN OF T OCCURS 0,
  LINE(255) TYPE c,
END OF T.
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF end_wa OCCURS 0,
  TABIX type syst-tabix,
  line like T-line,
  TRDIRT_TEXT type TRDIRT-TEXT.
        include STRUCTURE TPROG.

DATA: END OF end_wa.

DATA: wa_QQQ(150) TYPE c,
      wa_zzz(50) TYPE c,
      z_index TYPE I.

DATA: gc_layout     TYPE REF TO cl_salv_layout, "для варианта
      gc_alv_table  TYPE REF TO cl_salv_table,
      gc_columns    TYPE REF TO cl_salv_columns_table,
      gc_colwork    TYPE REF TO cl_salv_column_table,
      gc_display    TYPE REF TO cl_salv_display_settings,
      gc_events     TYPE REF TO cl_salv_events_table,
      gc_functions  TYPE REF TO cl_salv_functions,
      gc_sorts      type ref to cl_salv_sorts.
.

  DATA opt TYPE ctu_params.


FIELD-SYMBOLS: <t> LIKE LINE OF t,
<TPROG> LIKE LINE OF TPROG,

<end_wa> LIKE LINE OF end_wa.

*----------------------------------------------------------------------*
*       CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
  PUBLIC SECTION.
*    CLASS-DATA:
*        lo_popup TYPE REF TO cl_salv_table.
  METHODS:

  on_double_click FOR EVENT double_click OF cl_salv_events_table
  IMPORTING row column.


ENDCLASS.                    "lcl_handle_events DEFINITION

*---------------------------------------------------------------------*
*       CLASS lcl_handle_events IMPLEMENTATION
*---------------------------------------------------------------------*
* §5.2 implement the events for handling the events of cl_salv_table
*---------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.

  METHOD on_double_click. "Для двойного щелчка


read TABLE end_wa ASSIGNING <end_wa> INDEX row.
DATA tabix(4) TYPE c.
    tabix = <end_wa>-TABIX.
    FREE bdcdata.

    PERFORM bdc_dynpro      USING 'SAPLWBABAP' '0100'.
    PERFORM bdc_field       USING 'RS38M-PROGRAMM' <end_wa>-PROG.

    PERFORM bdc_field       USING 'BDC_OKCODE' '=SHOP'.

    PERFORM bdc_dynpro      USING 'SAPLS38E' '0400'.
    PERFORM bdc_field       USING 'RSTXP-TDFIRST'
          tabix.
    PERFORM bdc_field       USING 'BDC_OKCODE'
          '=/00'.


    opt-dismode = 'E'.
    CALL TRANSACTION 'SE38' USING bdcdata OPTIONS FROM    opt  .

    gc_alv_table->display( ).

  ENDMETHOD.                    "on_double_click


ENDCLASS.                    "lcl_handle_events IMPLEMENTATION

DATA: gr_events TYPE REF TO lcl_handle_events.


SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS QQQ FOR wa_QQQ NO-EXTENSION NO INTERVALS.
SELECT-OPTIONS zzz FOR wa_zzz  NO INTERVALS.
SELECTION-SCREEN END OF BLOCK bl1.

FIELD-SYMBOLS <zzz> LIKE LINE OF zzz.


START-OF-SELECTION.
LOOP AT zzz ASSIGNING <zzz>.
  REPLACE all OCCURRENCEs OF '*' IN <zzz>-low WITH '%'.
  CONDENSE <zzz>-low NO-GAPS.
ENDLOOP.



LOOP AT zzz ASSIGNING <zzz>.
  SELECT * FROM D010SINF APPENDING CORRESPONDING FIELDS OF TABLE TPROG
  WHERE PROG like  <zzz>-low.

ENDLOOP.

sort TPROG by PROG.
delete ADJACENT DUPLICATES FROM TPROG comparing  PROG.


*
*WRITE:/ ' Список программ, где присутствует строка', QQQ.
*WRITE:/ SY-ULINE.
*WRITE:/ '|' NO-GAP,
*(40) 'Имя программы' NO-GAP, '|' NO-GAP,
*(11)  'N стр. кода' NO-GAP, '|' NO-GAP,
*(12) 'Создал' NO-GAP,
*(10) '' NO-GAP, '|' NO-GAP,
*(12) 'Изменил' NO-GAP,
*(10) '' NO-GAP, '|' NO-GAP,
*(70) 'Заголовок программы', '|' NO-GAP,
*(73) 'Строка кода' NO-GAP, '|' NO-GAP.
*WRITE:/ SY-ULINE.

DATA posl_xtab TYPE I.
READ TABLE TPROG INDEX 1 TRANSPORTING NO FIELDS.
posl_xtab = sy-tfill.


LOOP AT TPROG ASSIGNING <TPROG>.
  z_index = sy-tabix.
  PERFORM show_progress_5p USING z_index posl_xtab. "Вызов счетчика
  READ REPORT <TPROG>-PROG INTO T.
  LOOP AT T ASSIGNING <t>.

    IF <t>-LINE CS QQQ-low.
      end_wa-TABIX =  SY-TABIX.
      end_wa-line  = <t>-LINE.

      MOVE-CORRESPONDING <TPROG> to end_wa.
      SELECT SINGLE TEXT FROM TRDIRT INTO end_wa-TRDIRT_TEXT
      WHERE SPRSL = 'R' AND NAME = <TPROG>-PROG.
      append end_wa.


    ENDIF.
  ENDLOOP.
ENDLOOP.


cl_salv_table=>factory( IMPORTING r_salv_table = gc_alv_table CHANGING t_table = end_wa[] ).

gc_columns = gc_alv_table->get_columns( ).
gc_columns->set_optimize( 'X' ).
gc_colwork ?= gc_columns->get_column( 'TRDIRT_TEXT' ).
gc_events = gc_alv_table->get_event( ).

  CREATE OBJECT gr_events.
   SET HANDLER gr_events->on_double_click FOR gc_events.
gc_sorts = gc_alv_table->get_sorts( ).
gc_sorts->add_sort( columnname = 'PROG' sequence = '2' ).

gc_functions = gc_alv_table->get_functions( ).
gc_functions->set_all( 'X' ).
gc_display = gc_alv_table->get_display_settings( ).
gc_display->set_list_header( 'Где встечается данный текст' ).


gc_alv_table->display( ).



*BREAK-POINT.
*&---------------------------------------------------------------------*
*&      Form  SHOW_PROGRESS_5P
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->SY_INDEX   text
*      -->MAXIMUM    text
*----------------------------------------------------------------------*
FORM SHOW_PROGRESS_5P  USING    SY_INDEX
      maximum.
  DATA:
        lv_percent TYPE p
        ,lv_parts TYPE I
        ,lv_parts_size TYPE I
        .

  lv_parts_size = maximum * '0.05'.
  IF lv_parts_size NE 0.


    lv_percent = SY_INDEX / maximum * 100.
    lv_parts = SY_INDEX MOD lv_parts_size.
    IF lv_parts = 0.
      DATA: lv_txt1(100) TYPE C, lv_txt2(100) TYPE C, lv_txt3(100) TYPE C.
      MOVE SY_INDEX TO lv_txt1.
      CONDENSE lv_txt1.
      MOVE maximum TO lv_txt2.
      CONDENSE lv_txt2.


      CONCATENATE 'Выполняется обработка данных:'
      lv_txt1
      'из'
      lv_txt2
      INTO lv_txt3 SEPARATED BY space.

      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          PERCENTAGE = lv_percent
          TEXT       = lv_txt3.


    ENDIF.

  ENDIF.

ENDFORM.                    " SHOW_PROGRESS_5P

FORM bdc_dynpro USING PROGRAM DYNPRO.
  CLEAR bdcdata.
  bdcdata-PROGRAM  = PROGRAM.
  bdcdata-DYNPRO   = DYNPRO.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.
ENDFORM.                    "BDC_FIELD

« Последнее редактирование: Декабрь 13, 2012, 02:19:48 pm от insaf121 »