Quantcast
Channel: SCN : All Content - All Communities
Viewing all articles
Browse latest Browse all 3167

Create table control by screen painter

$
0
0

Hi

 

In my project , i need to create a table control to show some data, like the following example:

Capture.PNG

after i successfully create this table control, the system automatically insert some codes in my program, here is all of them:

 

*&SPWIZARD: DECLARATION OF TABLECONTROL 'CONTROL' ITSELF

CONTROLS: CONTROL TYPE TABLEVIEW USING SCREEN 0100.

 

*&SPWIZARD: LINES OF TABLECONTROL 'CONTROL'

DATA:     G_CONTROL_LINES  LIKE SY-LOOPC.

 

*&SPWIZARD: OUTPUT MODULE FOR TC 'CONTROL'. DO NOT CHANGE THIS LINE!

*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR

MODULE CONTROL_CHANGE_TC_ATTR OUTPUT.

   DESCRIBE TABLE TABLE LINES CONTROL-lines.

ENDMODULE.

 

*&SPWIZARD: OUTPUT MODULE FOR TC 'CONTROL'. DO NOT CHANGE THIS LINE!

*&SPWIZARD: GET LINES OF TABLECONTROL

MODULE CONTROL_GET_LINES OUTPUT.

   G_CONTROL_LINES = SY-LOOPC.

ENDMODULE.

 

*&SPWIZARD: INPUT MODUL FOR TC 'CONTROL'. DO NOT CHANGE THIS LINE!

*&SPWIZARD: MARK TABLE

MODULE CONTROL_MARK INPUT.

   DATA: g_CONTROL_wa2 like line of TABLE.

     if CONTROL-line_sel_mode = 1

     and TABLE-CHK = 'X'.

      loop at TABLE into g_CONTROL_wa2

        where CHK = 'X'.

        g_CONTROL_wa2-CHK = ''.

        modify TABLE FROM g_CONTROL_wa2 transporting CHK.

      endloop.

   endif.

   MODIFY TABLE

     INDEX CONTROL-CURRENT_LINE

     TRANSPORTING CHK.

ENDMODULE.

 

*&SPWIZARD: INPUT MODULE FOR TC 'CONTROL'. DO NOT CHANGE THIS LINE!

*&SPWIZARD: PROCESS USER COMMAND

MODULE CONTROL_USER_COMMAND INPUT.

   OK_CODE = SY-UCOMM.

   PERFORM USER_OK_TC USING    'CONTROL'

                               'TABLE'

                               'CHK'

                      CHANGING OK_CODE.

   SY-UCOMM = OK_CODE.

ENDMODULE.

 

*----------------------------------------------------------------------*

*   INCLUDE TABLECONTROL_FORMS                                         *

*----------------------------------------------------------------------*

 

*&---------------------------------------------------------------------*

*&      Form  USER_OK_TC                                               *

*&---------------------------------------------------------------------*

  FORM USER_OK_TC USING    P_TC_NAME TYPE DYNFNAM

                           P_TABLE_NAME

                           P_MARK_NAME

                  CHANGING P_OK      LIKE SY-UCOMM.

 

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*

    DATA: L_OK              TYPE SY-UCOMM,

          L_OFFSET          TYPE I.

*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

 

*&SPWIZARD: Table control specific operations                          *

*&SPWIZARD: evaluate TC name and operations                            *

    SEARCH P_OK FOR P_TC_NAME.

    IF SY-SUBRC <> 0.

      EXIT.

    ENDIF.

    L_OFFSET = STRLEN( P_TC_NAME ) + 1.

    L_OK = P_OK+L_OFFSET.

*&SPWIZARD: execute general and TC specific operations                 *

    CASE L_OK.

      WHEN 'INSR'.                      "insert row

        PERFORM FCODE_INSERT_ROW USING    P_TC_NAME

                                          P_TABLE_NAME.

        CLEAR P_OK.

 

      WHEN 'DELE'.                      "delete row

        PERFORM FCODE_DELETE_ROW USING    P_TC_NAME

                                          P_TABLE_NAME

                                          P_MARK_NAME.

        CLEAR P_OK.

 

      WHEN 'P--' OR                     "top of list

           'P-'  OR                     "previous page

           'P+'  OR                     "next page

           'P++'.                       "bottom of list

        PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME

                                              L_OK.

        CLEAR P_OK.

*     WHEN 'L--'.                       "total left

*       PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.

*

*     WHEN 'L-'.                        "column left

*       PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.

*

*     WHEN 'R+'.                        "column right

*       PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.

*

*     WHEN 'R++'.                       "total right

*       PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.

*

      WHEN 'MARK'.                      "mark all filled lines

        PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME

                                          P_TABLE_NAME

                                          P_MARK_NAME   .

        CLEAR P_OK.

 

      WHEN 'DMRK'.                      "demark all filled lines

        PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME

                                            P_TABLE_NAME

                                            P_MARK_NAME .

        CLEAR P_OK.

 

*     WHEN 'SASCEND'   OR

*          'SDESCEND'.                  "sort column

*       PERFORM FCODE_SORT_TC USING P_TC_NAME

*                                   l_ok.

 

    ENDCASE.

 

  ENDFORM.                              " USER_OK_TC

 

*&---------------------------------------------------------------------*

*&      Form  FCODE_INSERT_ROW                                         *

*&---------------------------------------------------------------------*

  FORM fcode_insert_row

                USING    P_TC_NAME           TYPE DYNFNAM

                         P_TABLE_NAME             .

 

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*

    DATA L_LINES_NAME       LIKE FELD-NAME.

    DATA L_SELLINE          LIKE SY-STEPL.

    DATA L_LASTLINE         TYPE I.

    DATA L_LINE             TYPE I.

    DATA L_TABLE_NAME       LIKE FELD-NAME.

    FIELD-SYMBOLS <TC>                 TYPE CXTAB_CONTROL.

    FIELD-SYMBOLS <TABLE>              TYPE STANDARD TABLE.

    FIELD-SYMBOLS <LINES>              TYPE I.

*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

 

    ASSIGN (P_TC_NAME) TO <TC>.

 

*&SPWIZARD: get the table, which belongs to the tc                     *

    CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body

    ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

 

*&SPWIZARD: get looplines of TableControl                              *

    CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME.

    ASSIGN (L_LINES_NAME) TO <LINES>.

 

*&SPWIZARD: get current line                                           *

    GET CURSOR LINE L_SELLINE.

    IF SY-SUBRC <> 0.                   " append line to table

      L_SELLINE = <TC>-LINES + 1.

*&SPWIZARD: set top line                                               *

      IF L_SELLINE > <LINES>.

        <TC>-TOP_LINE = L_SELLINE - <LINES> + 1 .

      ELSE.

        <TC>-TOP_LINE = 1.

      ENDIF.

    ELSE.                               " insert line into table

      L_SELLINE = <TC>-TOP_LINE + L_SELLINE - 1.

      L_LASTLINE = <TC>-TOP_LINE + <LINES> - 1.

    ENDIF.

*&SPWIZARD: set new cursor line                                        *

    L_LINE = L_SELLINE - <TC>-TOP_LINE + 1.

 

*&SPWIZARD: insert initial line                                        *

    INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE.

    <TC>-LINES = <TC>-LINES + 1.

*&SPWIZARD: set cursor                                                 *

    SET CURSOR LINE L_LINE.

 

  ENDFORM.                              " FCODE_INSERT_ROW

 

*&---------------------------------------------------------------------*

*&      Form  FCODE_DELETE_ROW                                         *

*&---------------------------------------------------------------------*

  FORM fcode_delete_row

                USING    P_TC_NAME           TYPE DYNFNAM

                         P_TABLE_NAME

                         P_MARK_NAME   .

 

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*

    DATA L_TABLE_NAME       LIKE FELD-NAME.

 

    FIELD-SYMBOLS <TC>         TYPE cxtab_control.

    FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.

    FIELD-SYMBOLS <WA>.

    FIELD-SYMBOLS <MARK_FIELD>.

*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

 

    ASSIGN (P_TC_NAME) TO <TC>.

 

*&SPWIZARD: get the table, which belongs to the tc                     *

    CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body

    ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

 

*&SPWIZARD: delete marked lines                                        *

    DESCRIBE TABLE <TABLE> LINES <TC>-LINES.

 

    LOOP AT <TABLE> ASSIGNING <WA>.

 

*&SPWIZARD: access to the component 'FLAG' of the table header         *

      ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

 

      IF <MARK_FIELD> = 'X'.

        DELETE <TABLE> INDEX SYST-TABIX.

        IF SY-SUBRC = 0.

          <TC>-LINES = <TC>-LINES - 1.

        ENDIF.

      ENDIF.

    ENDLOOP.

 

  ENDFORM.                              " FCODE_DELETE_ROW

 

*&---------------------------------------------------------------------*

*&      Form  COMPUTE_SCROLLING_IN_TC

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_TC_NAME  name of tablecontrol

*      -->P_OK       ok code

*----------------------------------------------------------------------*

  FORM COMPUTE_SCROLLING_IN_TC USING    P_TC_NAME

                                        P_OK.

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*

    DATA L_TC_NEW_TOP_LINE     TYPE I.

    DATA L_TC_NAME             LIKE FELD-NAME.

    DATA L_TC_LINES_NAME       LIKE FELD-NAME.

    DATA L_TC_FIELD_NAME       LIKE FELD-NAME.

 

    FIELD-SYMBOLS <TC>         TYPE cxtab_control.

    FIELD-SYMBOLS <LINES>      TYPE I.

*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

 

    ASSIGN (P_TC_NAME) TO <TC>.

*&SPWIZARD: get looplines of TableControl                              *

    CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.

    ASSIGN (L_TC_LINES_NAME) TO <LINES>.

 

 

*&SPWIZARD: is no line filled?                                         *

    IF <TC>-LINES = 0.

*&SPWIZARD: yes, ...                                                   *

      L_TC_NEW_TOP_LINE = 1.

    ELSE.

*&SPWIZARD: no, ...                                                    *

      CALL FUNCTION 'SCROLLING_IN_TABLE'

           EXPORTING

                ENTRY_ACT             = <TC>-TOP_LINE

                ENTRY_FROM            = 1

                ENTRY_TO              = <TC>-LINES

                LAST_PAGE_FULL        = 'X'

                LOOPS                 = <LINES>

                OK_CODE               = P_OK

                OVERLAPPING           = 'X'

           IMPORTING

                ENTRY_NEW             = L_TC_NEW_TOP_LINE

           EXCEPTIONS

*              NO_ENTRY_OR_PAGE_ACT  = 01

*              NO_ENTRY_TO           = 02

*              NO_OK_CODE_OR_PAGE_GO = 03

                OTHERS                = 0.

    ENDIF.

 

*&SPWIZARD: get actual tc and column                                   *

    GET CURSOR FIELD L_TC_FIELD_NAME

               AREA  L_TC_NAME.

 

    IF SYST-SUBRC = 0.

      IF L_TC_NAME = P_TC_NAME.

*&SPWIZARD: et actual column                                           *

        SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.

      ENDIF.

    ENDIF.

 

*&SPWIZARD: set the new top line                                       *

    <TC>-TOP_LINE = L_TC_NEW_TOP_LINE.

 

 

  ENDFORM.                              " COMPUTE_SCROLLING_IN_TC

 

*&---------------------------------------------------------------------*

*&      Form  FCODE_TC_MARK_LINES

*&---------------------------------------------------------------------*

*       marks all TableControl lines

*----------------------------------------------------------------------*

*      -->P_TC_NAME  name of tablecontrol

*----------------------------------------------------------------------*

FORM FCODE_TC_MARK_LINES USING P_TC_NAME

                                P_TABLE_NAME

                                P_MARK_NAME.

*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*

   DATA L_TABLE_NAME       LIKE FELD-NAME.

 

   FIELD-SYMBOLS <TC>         TYPE cxtab_control.

   FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.

   FIELD-SYMBOLS <WA>.

   FIELD-SYMBOLS <MARK_FIELD>.

*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

 

   ASSIGN (P_TC_NAME) TO <TC>.

 

*&SPWIZARD: get the table, which belongs to the tc                     *

    CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body

    ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

 

*&SPWIZARD: mark all filled lines                                      *

   LOOP AT <TABLE> ASSIGNING <WA>.

 

*&SPWIZARD: access to the component 'FLAG' of the table header         *

      ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

 

      <MARK_FIELD> = 'X'.

   ENDLOOP.

ENDFORM.                                          "fcode_tc_mark_lines

 

*&---------------------------------------------------------------------*

*&      Form  FCODE_TC_DEMARK_LINES

*&---------------------------------------------------------------------*

*       demarks all TableControl lines

*----------------------------------------------------------------------*

*      -->P_TC_NAME  name of tablecontrol

*----------------------------------------------------------------------*

FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME

                                  P_TABLE_NAME

                                  P_MARK_NAME .

*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*

   DATA L_TABLE_NAME       LIKE FELD-NAME.

 

   FIELD-SYMBOLS <TC>         TYPE cxtab_control.

   FIELD-SYMBOLS <TABLE>      TYPE STANDARD TABLE.

   FIELD-SYMBOLS <WA>.

   FIELD-SYMBOLS <MARK_FIELD>.

*&SPWIZARD: END OF LOCAL DATA------------------------------------------*

 

   ASSIGN (P_TC_NAME) TO <TC>.

 

*&SPWIZARD: get the table, which belongs to the tc                     *

    CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body

    ASSIGN (L_TABLE_NAME) TO <TABLE>.                "not headerline

 

*&SPWIZARD: demark all filled lines                                    *

   LOOP AT <TABLE> ASSIGNING <WA>.

 

*&SPWIZARD: access to the component 'FLAG' of the table header         *

      ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.

 

      <MARK_FIELD> = SPACE.

   ENDLOOP.

ENDFORM.                                          "fcode_tc_mark_lines


 

but part of them here:

*&SPWIZARD: INPUT MODUL FOR TC 'CONTROL'. DO NOT CHANGE THIS LINE!

*&SPWIZARD: MARK TABLE

MODULE CONTROL_MARK INPUT.

   DATA: g_CONTROL_wa2 like line of TABLE.

     if CONTROL-line_sel_mode = 1

     and TABLE-CHK = 'X'.

      loop at TABLE into g_CONTROL_wa2

        where CHK = 'X'.

        g_CONTROL_wa2-CHK = ''.

        modify TABLE FROM g_CONTROL_wa2 transporting CHK.           *  <----------   this line will raise an error

      endloop.

   endif.

   MODIFY TABLE

     INDEX CONTROL-CURRENT_LINE

     TRANSPORTING CHK.

ENDMODULE.

they cannot pass the syntax check, and it will raise an error:

   Capture.PNG

I don't know what's wrong with them, or i do something wrong, what should i do to solve this problem ?

 

Thanks in advance. Your efforts and answers will be very much appreciated.

Regards.


Viewing all articles
Browse latest Browse all 3167

Trending Articles