Skip to Content
0
Former Member
Dec 24, 2015 at 10:08 AM

Create table control by screen painter

301 Views

Hi

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

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:

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.

Attachments

Capture.PNG (30.0 kB)
Capture.PNG (3.1 kB)