Code20070102 - ooxxvv/MySAPnotes GitHub Wiki

Code20070102

  • 一個類似 tcode: SE16 功能的程式。

Code

REPORT  zjoey_test_20061230 NO STANDARD PAGE HEADING.

INCLUDE zjoey_test_20061230top.
INCLUDE zjoey_test_20061230f01.

AT SELECTION-SCREEN ON p_tabnam.
  PERFORM check_tabname.

START-OF-SELECTION.
  PERFORM get_fieldtab.
  PERFORM get_data.

END-OF-SELECTION.
  PERFORM set_page_width.
  PERFORM write_data.

TOP-OF-PAGE.
  PERFORM write_page_top.

AT LINE-SELECTION.
  CASE sy-lsind.
    WHEN 1.
      READ TABLE <fs_itb> INDEX g_tabix INTO <fs_line>.
      NEW-PAGE LINE-SIZE 0.
      PERFORM write_detail USING 0.
    WHEN 2.
      PERFORM write_detail USING g_fieldno.
*------let detail list 2 back to basic list
      sy-lsind = 1.
  ENDCASE.


*&---------------------------------------------------------------------*
*&  Include           ZJOEY_TEST_20061230TOP
*&---------------------------------------------------------------------*
*========================================================
*DATA FOR PROGRAM
*========================================================
DATA: t_dfies LIKE dfies OCCURS 0 WITH HEADER LINE,
      g_tabix LIKE syst-tabix VALUE 1,
      g_fieldno TYPE i.

DATA: ref_tab TYPE REF TO data.
FIELD-SYMBOLS: <fs_line> TYPE ANY,
               <fs_itb>  TYPE STANDARD TABLE,
               <fs_field> TYPE ANY,
               <fs_label> TYPE ANY.
*========================================================
*SELECTION-SCREEN
*========================================================
PARAMETERS: p_tabnam LIKE dd02l-tabname.

PARAMETERS: p_linsz LIKE syst-linsz DEFAULT 250,
            p_linct LIKE syst-linct DEFAULT 100.

PARAMETERS: p_name TYPE c RADIOBUTTON GROUP grp1 DEFAULT 'X',
            p_label TYPE c RADIOBUTTON GROUP grp1.



*&---------------------------------------------------------------------*
*&  Include           ZJOEY_TEST_20061230F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  get_fieldtab
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_fieldtab .
  CALL FUNCTION 'GET_FIELDTAB'
    EXPORTING
      tabname             = p_tabnam
    TABLES
      fieldtab            = t_dfies
    EXCEPTIONS
      internal_error      = 1
      no_texts_found      = 2
      table_has_no_fields = 3
      table_not_activ     = 4
      OTHERS              = 5.
  IF sy-subrc <> 0.
    MESSAGE i006(bc405) WITH 'This table is not exit'.
    LEAVE PROGRAM.
  ENDIF.
ENDFORM.                    " get_fieldtab
*&---------------------------------------------------------------------*
*&      Form  get_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .
*---Ref to data dictionary
  CREATE DATA ref_tab TYPE TABLE OF (p_tabnam).
  ASSIGN ref_tab->* TO <fs_itb>.

  CREATE DATA ref_tab TYPE (p_tabnam).
  ASSIGN ref_tab->* TO <fs_line>.

*---Select Data
  SELECT *
    UP TO p_linct ROWS
    INTO TABLE <fs_itb>
    FROM (p_tabnam).
  IF sy-subrc NE 0.
    MESSAGE i006(bc405) WITH 'No data in this table !'.
    LEAVE PROGRAM.
  ENDIF.
ENDFORM.                    " get_data
*&---------------------------------------------------------------------*
*&      Form  write_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM write_data .
  LOOP AT <fs_itb> INTO <fs_line>.
*---get index
    g_tabix = sy-tabix.
*---show line
    PERFORM write_line.
    NEW-LINE.
  ENDLOOP.
  CLEAR g_tabix.
ENDFORM.                    " write_data
*&---------------------------------------------------------------------*
*&      Form  write_line
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM write_line.
  DATA: l_linsz TYPE i.
*---Clear
  CLEAR: l_linsz.
  sy-subrc = 0.

  WHILE sy-subrc = 0.
*------get Field att
    READ TABLE t_dfies INDEX sy-index.
    l_linsz = l_linsz + t_dfies-outputlen + 1.
    IF l_linsz GE p_linsz.
      EXIT.
    ENDIF.

    ASSIGN COMPONENT sy-index OF STRUCTURE <fs_line> TO <fs_field>.
*------set color
    IF t_dfies-keyflag EQ 'X'.
      WRITE <fs_field> COLOR 4.
    ELSE.
      WRITE <fs_field>.
    ENDIF.

*------set field index
    HIDE: g_tabix.
  ENDWHILE.

ENDFORM.                    " write_line
*&---------------------------------------------------------------------*
*&      Form  write_field
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM write_field .
  WRITE 'ok'.
ENDFORM.                    " write_field
*&---------------------------------------------------------------------*
*&      Form  write_detail
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM write_detail USING f_fieldno.
  DATA: l_fieldno TYPE i.
  l_fieldno = f_fieldno.
  sy-subrc = 0.

  WHILE sy-subrc = 0.
*------get Field att
    g_fieldno = sy-index.
    READ TABLE t_dfies INDEX sy-index.
    ASSIGN COMPONENT sy-index OF STRUCTURE <fs_line> TO <fs_field>.
*------show field name or label
      IF p_name EQ 'X'.
        ASSIGN t_dfies-fieldname TO <fs_label>.
      ELSE.
        ASSIGN t_dfies-scrtext_m TO <fs_label>.
      ENDIF.
*------show single field or all fields
    IF f_fieldno EQ 0 OR l_fieldno EQ sy-index.
*------set color
      IF t_dfies-keyflag EQ 'X'.
        WRITE:/ <fs_label> COLOR 4,
                ' : ' COLOR 4,
                <fs_field> COLOR 4.
      ELSE.
        WRITE:/ <fs_label>,
                ' : ',
                <fs_field>.
      ENDIF.
*------set field index
      HIDE: g_fieldno.

    ENDIF.

  ENDWHILE.

ENDFORM.                    " write_detail
*&---------------------------------------------------------------------*
*&      Form  set_key_field
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_page_width .
  DATA: l_key_length TYPE i.
*---set list width check p_linsz max length
  IF p_linsz GE 1023.
    p_linsz = 1023.
  ENDIF.
  NEW-PAGE LINE-SIZE p_linsz.
ENDFORM.                    " set_key_field
*&---------------------------------------------------------------------*
*&      Form  write_page_top
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM write_page_top .
  DATA: l_key_length TYPE i,
        l_len TYPE i,
        l_linsz TYPE i.
*---Clear
  CLEAR: l_linsz.

*---set key field not to scroll
  LOOP AT t_dfies.
    IF t_dfies-keyflag EQ 'X'.
      l_key_length = l_key_length + t_dfies-outputlen + 1.
    ENDIF.
  ENDLOOP.
  SET LEFT SCROLL-BOUNDARY COLUMN  l_key_length.

*---show top of page
  LOOP AT t_dfies.
    l_len = t_dfies-outputlen.
    l_linsz = l_linsz + t_dfies-outputlen + 1.
    IF l_linsz LE p_linsz.
      IF p_name EQ 'X'.
        ASSIGN t_dfies-fieldname TO <fs_label>.
      ELSE.
        ASSIGN t_dfies-scrtext_s TO <fs_label>.
      ENDIF.
      WRITE AT: (t_dfies-outputlen) <fs_label> COLOR 5.
    ENDIF.
  ENDLOOP.
  NEW-LINE.
  ULINE.
ENDFORM.                    " write_page_top
*&---------------------------------------------------------------------*
*&      Form  check_tabname
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM check_tabname .
  DATA: l_tabname TYPE dd02l-tabname.
  SELECT SINGLE tabname
    FROM dd02l
    INTO l_tabname
    WHERE tabname EQ p_tabnam
      AND tabclass EQ 'TRANSP'.
  IF sy-subrc NE 0.
    MESSAGE e006(bc405) WITH 'This table is not tran. table ! '.
  ENDIF.
ENDFORM.                    " check_tabname
⚠️ **GitHub.com Fallback** ⚠️