Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Custom Table updation thru table control

Former Member
0 Kudos

Hi All,

My requirement is to update the custom table by creating a custom screen with table control,say my z table has 2 fields name1 and bukrs.

if i enter the value in table control then i click the save icon these fields should get updated in the z table .can any one send me the piece of code for this,since i have not worked on table control i need it in detail.

Useful answers will be rewarded....

Thanks in Advance.....

4 REPLIES 4

anversha_s
Active Contributor
0 Kudos

hi,

kindly chk this.

PROCESS BEFORE OUTPUT.
MODULE status_9010.

LOOP WITH CONTROL tab_control.
MODULE move_data_to_table.
ENDLOOP.


PROCESS AFTER INPUT.

LOOP WITH CONTROL tab_control.
MODULE move_data_from_table.
ENDLOOP.


****************************


*&---------------------------------------------------------------------*
*& Module move_data_to_table OUTPUT
*&---------------------------------------------------------------------*
* This is to move the data from the internal table to the table control
*----------------------------------------------------------------------*
MODULE move_data_to_table OUTPUT.

* This is to move the data from the internal table to the table control
*zmpets_mode-modecode,zmpets_range-*rangeid,zmpets_servfacto-factor are column name of table control

READ TABLE int_factor INDEX tab_control-current_line.
IF sy-subrc = 0.
zmpets_mode-modecode = int_factor-modecode.
zmpets_range-rangeid = int_factor-rangeid.
zmpets_servfacto-factor = int_factor-factor.
ENDIF.

ENDMODULE. " move_data_to_table OUTPUT



**********************



*&---------------------------------------------------------------------*
*& Module move_data_from_table INPUT
*&---------------------------------------------------------------------*
* Date is moved from the table control to the Internal Table
*----------------------------------------------------------------------*
MODULE move_data_from_table INPUT.

* To move the data from the table control to internal table 'INT_FACTOR'.

int_factor-modecode = zmpets_mode-modecode.
int_factor-rangeid = zmpets_range-rangeid.
int_factor-factor = zmpets_servfacto-factor.
*here if the data is there, it will modify
MODIFY int_factor INDEX tab_control-current_line.
IF sy-subrc NE 0. "data not exixting in table control . ie new data, then append it
APPEND int_factor.
CLEAR int_factor.
ENDIF.

ENDMODULE. " move_data_from_table INPUT

<b><i>from internal table u can update the ztable</i></b>

<b>for reference chk this thread.</b>

https://forums.sdn.sap.com/click.jspa?searchID=181747&messageID=2743746

regards,

anver

Former Member
0 Kudos

PROGRAM ZSD_REBATE_MASTER MESSAGE-ID FV

NO STANDARD PAGE HEADING.

TABLES: KONA,

ZSD_BILLINFO,

ZSD_RBT_ELG_INV,

KNVV.

DATA: OK_CODE LIKE SY-UCOMM,

L_CODE LIKE SY-UCOMM.

DATA : BEGIN OF I_KNVV_DATA OCCURS 0,

GJAHR LIKE ZSD_RBT_MAS_DATA-GJAHR,

KNUMA LIKE ZSD_RBT_MAS_DATA-KNUMA,

VKBUR LIKE ZSD_RBT_MAS_DATA-VKBUR,

VKORG LIKE ZSD_RBT_MAS_DATA-VKORG,

VTWEG LIKE ZSD_RBT_MAS_DATA-VTWEG,

SPART LIKE ZSD_RBT_MAS_DATA-SPART,

OTQTY LIKE ZSD_RBT_MAS_DATA-OTQTY,

PCPDAYS LIKE ZSD_RBT_MAS_DATA-PCPDAYS,

OTPC LIKE ZSD_RBT_MAS_DATA-OTPC,

MATKL LIKE ZSD_RBT_MAS_DATA-MATKL,

  • EBDFROM LIKE ZSD_RBT_MAS_DATA-EBDFROM,

  • EBDTO LIKE ZSD_RBT_MAS_DATA-EBDTO,

STATUS LIKE ZSD_RBT_MAS_DATA-STATUS,

END OF I_KNVV_DATA.

DATA : G_ANS(1), GR1, FLAG(1),LS(1).

&----


*& Module STATUS_1500 OUTPUT

&----


  • text

----


MODULE STATUS_1500 OUTPUT.

SET PF-STATUS '1500'.

SET TITLEBAR 'HEADING_1500'.

ENDMODULE. " STATUS_1500 OUTPUT

&----


*& Module USER_COMMAND_1500 INPUT

&----


  • text

----


MODULE USER_COMMAND_1500 INPUT.

OK_CODE = SY-UCOMM.

L_CODE = OK_CODE.

IF L_CODE = 'EXIT'.

LEAVE PROGRAM.

ELSEIF L_CODE = 'OK'.

PERFORM ERROR_MESSGE.

IF FLAG <> '1'.

SELECT SINGLE * FROM ZSD_RBT_ELG_INV WHERE KNUMA = KONA-KNUMA.

IF SY-SUBRC = 0.

UPDATE ZSD_RBT_MAS_DATA SET STATUS = 'C'

WHERE KNUMA = KONA-KNUMA.

COMMIT WORK.

ENDIF.

CALL SCREEN 1600.

ENDIF.

ENDIF.

ENDMODULE. " USER_COMMAND_1500 INPUT

&----


*& Module MOD_CHECK_INPUT INPUT

&----


  • text

----


MODULE MOD_CHECK_INPUT INPUT.

SELECT SINGLE * FROM KONA WHERE KNUMA = KONA-KNUMA.

IF SY-SUBRC <> 0.

MESSAGE E999 WITH 'Agreement No. ' KONA-KNUMA 'does not exists'.

ENDIF.

ENDMODULE. " MOD_CHECK_INPUT INPUT

&----


*& Module EXIT INPUT

&----


  • text

----


MODULE EXIT INPUT.

OK_CODE = SY-UCOMM.

L_CODE = OK_CODE.

CLEAR OK_CODE.

IF L_CODE = 'EXIT'.

LEAVE PROGRAM.

ENDIF.

ENDMODULE. " EXIT INPUT

***&SPWIZARD: DATA DECLARATION FOR TABLECONTROL 'GRID_MAST'

*&SPWIZARD: DEFINITION OF DDIC-TABLE

TABLES: ZSD_RBT_MAS_DATA.

*&SPWIZARD: TYPE FOR THE DATA OF TABLECONTROL 'GRID_MAST'

TYPES: BEGIN OF T_GRID_MAST,

GJAHR LIKE ZSD_RBT_MAS_DATA-GJAHR,

KNUMA LIKE ZSD_RBT_MAS_DATA-KNUMA,

VKBUR LIKE ZSD_RBT_MAS_DATA-VKBUR,

VKORG LIKE ZSD_RBT_MAS_DATA-VKORG,

VTWEG LIKE ZSD_RBT_MAS_DATA-VTWEG,

SPART LIKE ZSD_RBT_MAS_DATA-SPART,

OTQTY LIKE ZSD_RBT_MAS_DATA-OTQTY,

PCPDAYS LIKE ZSD_RBT_MAS_DATA-PCPDAYS,

OTPC LIKE ZSD_RBT_MAS_DATA-OTPC,

MATKL LIKE ZSD_RBT_MAS_DATA-MATKL,

  • EBDFROM LIKE ZSD_RBT_MAS_DATA-EBDFROM,

  • EBDTO LIKE ZSD_RBT_MAS_DATA-EBDTO,

STATUS LIKE ZSD_RBT_MAS_DATA-STATUS,

END OF T_GRID_MAST.

*&SPWIZARD: INTERNAL TABLE FOR TABLECONTROL 'GRID_MAST'

DATA: G_GRID_MAST_ITAB TYPE T_GRID_MAST OCCURS 0 WITH HEADER LINE,

G_GRID_MAST_WA TYPE T_GRID_MAST. "work area

DATA: G_GRID_MAST_COPIED. "copy flag

*&SPWIZARD: DECLARATION OF TABLECONTROL 'GRID_MAST' ITSELF

CONTROLS: GRID_MAST TYPE TABLEVIEW USING SCREEN 1600.

*&SPWIZARD: LINES OF TABLECONTROL 'GRID_MAST'

DATA: G_GRID_MAST_LINES LIKE SY-LOOPC.

DATA: L_LINE LIKE GRID_MAST-CURRENT_LINE.

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

*&SPWIZARD: COPY DDIC-TABLE TO ITAB

**&----


**

**& Module GRID_INACT OUTPUT

**&----


**

    • text

**----


**

MODULE GRID_MAST_INIT OUTPUT.

DATA: L_FLAG(1).

IF G_GRID_MAST_COPIED IS INITIAL.

*&SPWIZARD: COPY DDIC-TABLE 'ZSD_RBT_MAS_DATA'

*&SPWIZARD: INTO INTERNAL TABLE 'g_GRID_MAST_itab'

PERFORM GET_DATA.

LOOP AT I_KNVV_DATA.

G_GRID_MAST_ITAB-GJAHR = I_KNVV_DATA-GJAHR.

G_GRID_MAST_ITAB-KNUMA = I_KNVV_DATA-KNUMA.

G_GRID_MAST_ITAB-VKBUR = I_KNVV_DATA-VKBUR.

G_GRID_MAST_ITAB-VKORG = I_KNVV_DATA-VKORG.

G_GRID_MAST_ITAB-VTWEG = I_KNVV_DATA-VTWEG.

G_GRID_MAST_ITAB-SPART = I_KNVV_DATA-SPART.

G_GRID_MAST_ITAB-OTQTY = I_KNVV_DATA-OTQTY.

G_GRID_MAST_ITAB-PCPDAYS = I_KNVV_DATA-PCPDAYS.

G_GRID_MAST_ITAB-OTPC = I_KNVV_DATA-OTPC.

G_GRID_MAST_ITAB-MATKL = I_KNVV_DATA-MATKL.

  • G_GRID_MAST_ITAB-EBDFROM = I_KNVV_DATA-EBDFROM.

  • G_GRID_MAST_ITAB-EBDTO = I_KNVV_DATA-EBDTO.

G_GRID_MAST_ITAB-STATUS = I_KNVV_DATA-STATUS.

  • G_GRID_MAST_ITAB-OTPC = I_KNVV_DATA-OTPC.

APPEND G_GRID_MAST_ITAB.

ENDLOOP.

L_FLAG = 'X'.

G_GRID_MAST_COPIED = 'X'.

REFRESH CONTROL 'GRID_MAST' FROM SCREEN '1600'.

ENDIF.

IF L_FLAG IS INITIAL.

L_LINE = GRID_MAST-CURRENT_LINE.

IF NOT G_GRID_MAST_WA IS INITIAL.

READ TABLE G_GRID_MAST_ITAB INDEX GRID_MAST-CURRENT_LINE.

IF SY-SUBRC <> 0.

MOVE-CORRESPONDING G_GRID_MAST_WA TO G_GRID_MAST_ITAB.

APPEND G_GRID_MAST_ITAB.

REFRESH CONTROL 'GRID_MAST' FROM SCREEN '1600'.

  • CLEAR G_GRID_MAST_WA.

ENDIF.

ENDIF.

ELSE.

CLEAR L_FLAG.

ENDIF.

ENDMODULE. "GRID_MAST_INIT OUTPUT

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

*&SPWIZARD: MOVE ITAB TO DYNPRO

MODULE GRID_MAST_MOVE OUTPUT.

IF NOT G_GRID_MAST_WA IS INITIAL.

MOVE-CORRESPONDING G_GRID_MAST_WA TO ZSD_RBT_MAS_DATA.

CLEAR G_GRID_MAST_WA.

ENDIF.

GRID_MAST-LINES = G_GRID_MAST_LINES + 100.

ENDMODULE. "GRID_MAST_MOVE OUTPUT

*

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

**&SPWIZARD: GET LINES OF TABLECONTROL

MODULE GRID_MAST_GET_LINES OUTPUT.

SELECT SINGLE * FROM ZSD_RBT_ELG_INV WHERE KNUMA = KONA-KNUMA.

IF SY-SUBRC = 0.

UPDATE ZSD_RBT_MAS_DATA SET STATUS = 'C'

WHERE KNUMA = KONA-KNUMA.

COMMIT WORK.

IF ZSD_RBT_ELG_INV-ZFLAG = 'C'.

LOOP AT SCREEN.

IF SCREEN-GROUP1 = 'GR1'.

SCREEN-INPUT = '0'.

ENDIF.

MODIFY SCREEN.

ENDLOOP.

ENDIF.

ENDIF.

G_GRID_MAST_LINES = SY-LOOPC.

ENDMODULE. "GRID_MAST_GET_LINES OUTPUT

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

*&SPWIZARD: MODIFY TABLE

MODULE GRID_MAST_MODIFY INPUT.

MOVE-CORRESPONDING ZSD_RBT_MAS_DATA TO G_GRID_MAST_WA.

IF L_FLAG IS INITIAL.

L_LINE = GRID_MAST-CURRENT_LINE.

IF NOT G_GRID_MAST_WA IS INITIAL.

IF L_LINE = GRID_MAST-CURRENT_LINE.

READ TABLE G_GRID_MAST_ITAB INDEX GRID_MAST-CURRENT_LINE.

IF SY-SUBRC = 0.

MODIFY G_GRID_MAST_ITAB FROM G_GRID_MAST_WA

INDEX GRID_MAST-CURRENT_LINE.

ELSE.

MOVE-CORRESPONDING G_GRID_MAST_WA TO G_GRID_MAST_ITAB.

APPEND G_GRID_MAST_ITAB.

REFRESH CONTROL 'GRID_MAST' FROM SCREEN '1600'.

ENDIF.

ELSE.

MOVE-CORRESPONDING G_GRID_MAST_WA TO G_GRID_MAST_ITAB.

APPEND G_GRID_MAST_ITAB.

REFRESH CONTROL 'GRID_MAST' FROM SCREEN '1600'.

  • CLEAR G_GRID_MAST_WA.

ENDIF.

ENDIF.

ELSE.

CLEAR L_FLAG.

ENDIF.

  • MODIFY G_GRID_MAST_ITAB

  • FROM G_GRID_MAST_WA

  • INDEX GRID_MAST-CURRENT_LINE.

ENDMODULE. "GRID_MAST_MODIFY INPUT

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

*&SPWIZARD: PROCESS USER COMMAND

MODULE GRID_MAST_USER_COMMAND INPUT.

OK_CODE = SY-UCOMM.

PERFORM USER_OK_TC USING 'SY-UCOMM'

'G_GRID_MAST_ITAB'

'FLAG'

CHANGING OK_CODE.

SY-UCOMM = OK_CODE.

ENDMODULE. "GRID_MAST_USER_COMMAND INPUT

&----


*& Module STATUS_1600 OUTPUT

&----


  • text

----


MODULE STATUS_1600 OUTPUT.

SET PF-STATUS 'STATUS_1600'.

SET TITLEBAR 'HEADING_1600'.

ENDMODULE. " STATUS_1600 OUTPUT

&----


*& Module USER_COMMAND_1600 INPUT

&----


  • text

----


MODULE USER_COMMAND_1600 INPUT.

CASE SY-UCOMM.

WHEN 'CAN'.

CLEAR: G_GRID_MAST_COPIED, G_GRID_MAST_ITAB.

LEAVE TO SCREEN '1500'.

WHEN 'BACK'.

CLEAR: G_GRID_MAST_COPIED, G_GRID_MAST_ITAB.

LEAVE TO SCREEN '1500'.

WHEN 'EXIT'.

LEAVE TO SCREEN '1500'.

WHEN 'SAVE'.

DELETE FROM ZSD_RBT_MAS_DATA WHERE KNUMA EQ KONA-KNUMA.

PERFORM SAVE_DATA.

  • WHEN 'DELE'.

ENDCASE.

ENDMODULE. " USER_COMMAND_1600 INPUT

&----


*& 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

*********************************************************************

  • FORM GET_DATA...

*********************************************************************

FORM GET_DATA.

CLEAR : I_KNVV_DATA, ZSD_BILLINFO, G_GRID_MAST_COPIED,

G_GRID_MAST_ITAB, ZSD_RBT_MAS_DATA, KNVV, ZSD_RBT_ELG_INV.

REFRESH: I_KNVV_DATA, G_GRID_MAST_ITAB.

SELECT SINGLE * FROM KONA WHERE KNUMA = KONA-KNUMA.

IF SY-SUBRC = 0.

SELECT * FROM ZSD_RBT_MAS_DATA

INTO

CORRESPONDING FIELDS OF

TABLE I_KNVV_DATA

WHERE KNUMA = KONA-KNUMA.

IF SY-SUBRC <> 0.

SELECT * INTO CORRESPONDING FIELDS OF TABLE I_KNVV_DATA

FROM KNVV

WHERE KUNNR = KONA-BONEM.

SELECT SINGLE * FROM ZSD_BILLINFO WHERE KUNAG = KONA-BONEM.

LOOP AT I_KNVV_DATA.

SELECT SINGLE * FROM ZSD_RBT_ELG_INV

WHERE KNUMA = KONA-KNUMA

AND VKORG = I_KNVV_DATA-VKORG

AND VTWEG = I_KNVV_DATA-VTWEG

AND SPART = I_KNVV_DATA-SPART.

IF SY-SUBRC = 0.

I_KNVV_DATA-STATUS = ZSD_RBT_ELG_INV-ZFLAG.

ENDIF.

I_KNVV_DATA-GJAHR = ZSD_BILLINFO-GJAHR.

I_KNVV_DATA-KNUMA = KONA-KNUMA.

MODIFY I_KNVV_DATA INDEX SY-TABIX.

ENDLOOP.

ENDIF.

ENDIF.

ENDFORM. "GET_DATA

*********************************************************************

  • FORM SAVE_DATA...

*********************************************************************

FORM SAVE_DATA.

IF NOT G_GRID_MAST_ITAB IS INITIAL.

CALL FUNCTION 'POPUP_TO_CONFIRM'

EXPORTING

TITLEBAR = 'Confirmation'

  • DIAGNOSE_OBJECT = ' '

TEXT_QUESTION = 'Do you want to save the document?'

TEXT_BUTTON_1 = 'YES'

  • ICON_BUTTON_1 = ' '

TEXT_BUTTON_2 = 'NO'

  • ICON_BUTTON_2 = ' '

DEFAULT_BUTTON = '1'

DISPLAY_CANCEL_BUTTON = ''

  • USERDEFINED_F1_HELP = ' '

  • START_COLUMN = 25

  • START_ROW = 6

  • POPUP_TYPE =

  • IV_QUICKINFO_BUTTON_1 = ' '

  • IV_QUICKINFO_BUTTON_2 = ' '

IMPORTING

ANSWER = G_ANS

  • TABLES

  • PARAMETER =

EXCEPTIONS

TEXT_NOT_FOUND = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

IF G_ANS = '1'.

SELECT SINGLE * FROM ZSD_RBT_MAS_DATA

WHERE KNUMA = KONA-KNUMA.

IF SY-SUBRC = 0.

LOOP AT G_GRID_MAST_ITAB.

  • IF G_GRID_MAST_ITAB-OTQTY > 0.

  • I_KNVV_DATA-PCPDAYS

  • I_KNVV_DATA-OTPC

  • I_KNVV_DATA-EBDFROM

  • I_KNVV_DATA-EBDTO

ZSD_RBT_MAS_DATA-GJAHR = G_GRID_MAST_ITAB-GJAHR.

ZSD_RBT_MAS_DATA-KNUMA = G_GRID_MAST_ITAB-KNUMA.

ZSD_RBT_MAS_DATA-VKBUR = G_GRID_MAST_ITAB-VKBUR.

ZSD_RBT_MAS_DATA-VKORG = G_GRID_MAST_ITAB-VKORG.

ZSD_RBT_MAS_DATA-VTWEG = G_GRID_MAST_ITAB-VTWEG.

ZSD_RBT_MAS_DATA-SPART = G_GRID_MAST_ITAB-SPART.

ZSD_RBT_MAS_DATA-MATKL = G_GRID_MAST_ITAB-MATKL.

ZSD_RBT_MAS_DATA-OTQTY = G_GRID_MAST_ITAB-OTQTY.

ZSD_RBT_MAS_DATA-PCPDAYS = G_GRID_MAST_ITAB-PCPDAYS.

ZSD_RBT_MAS_DATA-OTPC = G_GRID_MAST_ITAB-OTPC.

  • ZSD_RBT_MAS_DATA-EBDFROM = G_GRID_MAST_ITAB-EBDFROM.

  • ZSD_RBT_MAS_DATA-EBDTO = G_GRID_MAST_ITAB-EBDTO.

MODIFY ZSD_RBT_MAS_DATA.

COMMIT WORK.

  • ENDIF.

ENDLOOP.

ELSE.

LOOP AT G_GRID_MAST_ITAB.

  • IF G_GRID_MAST_ITAB-OTQTY > 0.

  • I_KNVV_DATA-PCPDAYS

  • I_KNVV_DATA-OTPC

  • I_KNVV_DATA-EBDFROM

  • I_KNVV_DATA-EBDTO

ZSD_RBT_MAS_DATA-GJAHR = G_GRID_MAST_ITAB-GJAHR.

ZSD_RBT_MAS_DATA-KNUMA = G_GRID_MAST_ITAB-KNUMA.

ZSD_RBT_MAS_DATA-VKBUR = G_GRID_MAST_ITAB-VKBUR.

ZSD_RBT_MAS_DATA-VKORG = G_GRID_MAST_ITAB-VKORG.

ZSD_RBT_MAS_DATA-VTWEG = G_GRID_MAST_ITAB-VTWEG.

ZSD_RBT_MAS_DATA-SPART = G_GRID_MAST_ITAB-SPART.

ZSD_RBT_MAS_DATA-OTQTY = G_GRID_MAST_ITAB-OTQTY.

ZSD_RBT_MAS_DATA-PCPDAYS = G_GRID_MAST_ITAB-PCPDAYS.

ZSD_RBT_MAS_DATA-OTPC = G_GRID_MAST_ITAB-OTPC.

  • ZSD_RBT_MAS_DATA-EBDFROM = G_GRID_MAST_ITAB-EBDFROM.

  • ZSD_RBT_MAS_DATA-EBDTO = G_GRID_MAST_ITAB-EBDTO.

ZSD_RBT_MAS_DATA-STATUS = G_GRID_MAST_ITAB-STATUS.

ZSD_RBT_MAS_DATA-MATKL = G_GRID_MAST_ITAB-MATKL.

INSERT ZSD_RBT_MAS_DATA.

COMMIT WORK.

  • ENDIF.

ENDLOOP.

ENDIF.

ENDIF.

ENDIF.

ENDFORM. "SAVE_DATA

ENDMODULE. " GRID_CHECK OUTPUT

jayanthi_jayaraman
Active Contributor
0 Kudos

Hi,

Here is the sample.

Fields FieldType

ZMANDT MANDT

ZMATNR MATNR(Key field)

ZMAKTX MAKTX

PICK CHAR1

In the flow logic of the screen 9000, write the following code.

PROCESS BEFORE OUTPUT.

MODULE set_status.

MODULE get_t_ctrl_lines.

LOOP AT i_makt WITH CONTROL t_ctrl CURSOR t_ctrl-current_line.

  • Dynamic screen modifications

MODULE set_screen_fields.

ENDLOOP.

*

PROCESS AFTER INPUT.

LOOP AT i_makt.

FIELD i_makt-pick MODULE check.

FIELD i_makt-zmatnr MODULE zmatnr .

ENDLOOP.

MODULE user_command_9000.

In the program, write the following code.

PROGRAM SAPMZTC MESSAGE-ID zz.

***********************************************************************

  • Tables Declaration

***********************************************************************

TABLES: zzz_makt.

***********************************************************************

  • Internal table Declaration

***********************************************************************

DATA : i_makt TYPE STANDARD TABLE OF zzz_makt WITH HEADER LINE.

***********************************************************************

  • Table control Declaration

***********************************************************************

CONTROLS: t_ctrl TYPE TABLEVIEW USING SCREEN '9000'.

***********************************************************************

  • Variable Declaration

***********************************************************************

DATA : flg, "Flag to set the change mode

ln TYPE i. "No. of records

&----


*& Module get_T_CTRL_lines OUTPUT

&----


  • Populating data

----


MODULE get_t_ctrl_lines OUTPUT.

SELECT zmatnr zmaktx

INTO CORRESPONDING FIELDS OF TABLE i_makt

FROM zzz_makt.

DESCRIBE TABLE i_makt LINES ln.

  • To make the vertical scroll bar to come on runtime

t_ctrl-lines = ln + 100.

ENDMODULE. " get_T_CTRL_lines OUTPUT

&----


*& Module USER_COMMAND_9000 INPUT

&----


  • Triggering event according to the user command

----


MODULE user_command_9000 INPUT.

DATA :lv_fcode LIKE sy-ucomm, "Function Code

lv_answer(1) type c. "Storing the answer

lv_fcode = sy-ucomm.

CASE lv_fcode.

WHEN 'CHANGE'.

  • Setting the flag to make the table control in editable mode[excluding

  • primary key].

flg = 'Y'.

WHEN 'DELETE'.

  • Setting the flag to make the table control in editable mode after

  • deleting the selected line

flg = 'Y'.

  • Confirmation of delete

CALL FUNCTION 'POPUP_TO_CONFIRM'

EXPORTING

TITLEBAR = 'Confirm'

text_question = 'Are you sure to delete from database?'

TEXT_BUTTON_1 = 'Yes'(001)

TEXT_BUTTON_2 = 'No'(002)

IMPORTING

ANSWER = lv_answer.

if lv_answer eq '1'.

  • Updating the database table from the internal table

UPDATE zzz_makt FROM TABLE i_makt.

  • Deleting the selected row from the internal table

DELETE i_makt WHERE pick = 'X'.

  • Deleting the selected row from the database table

DELETE FROM zzz_makt WHERE pick = 'X'.

MESSAGE s005 WITH 'Deleted Successfully'.

ENDIF.

WHEN 'SAVE'.

  • Inserting new record or updating existing record in database table

  • from the internal table

MODIFY zzz_makt FROM TABLE i_makt.

MESSAGE s005 WITH 'Saved Successfully'.

WHEN 'BACK'.

SET SCREEN '0'.

WHEN 'EXIT' OR 'CANCEL'.

  • Leaving the program

LEAVE PROGRAM.

ENDCASE.

ENDMODULE. " USER_COMMAND_9000 INPUT

&----


*& Module set_screen_fields OUTPUT

&----


  • Setting the screen fields

----


MODULE set_screen_fields OUTPUT.

LOOP AT SCREEN.

IF flg IS INITIAL.

screen-input = 0.

ELSEIF ( flg EQ 'Y' ).

IF ( ( screen-name = 'I_MAKT-ZMAKTX'

OR screen-name = 'I_MAKT-CHECK1' )

AND t_ctrl-current_line LE ln ) .

  • Making the screen fields as editable

screen-input = 1.

ELSEIF ( ( screen-name = 'I_MAKT-ZMATNR' )

AND t_ctrl-current_line LE ln ).

  • Making the screen field as uneditable

screen-input = 0.

ENDIF.

ENDIF.

  • Modifying the screen after making changes

MODIFY SCREEN.

ENDLOOP.

ENDMODULE. " set_screen_fields OUTPUT

&----


*& Module zmatnr INPUT

&----


  • Appending records to the internal table

----


MODULE zmatnr INPUT.

MODIFY i_makt INDEX t_ctrl-current_line.

IF t_ctrl-current_line GT ln.

READ TABLE i_makt WITH KEY zmatnr = i_makt-zmatnr.

IF sy-subrc NE 0.

  • Inserting record if it does not exist in database

APPEND i_makt.

ELSE.

MESSAGE i005 WITH 'Material Number' i_makt-zmatnr 'already exists'.

ENDIF.

ENDIF.

ENDMODULE. " zmatnr INPUT

&----


*& Module set_status OUTPUT

&----


  • Setting the GUI status

----


MODULE set_status OUTPUT.

SET PF-STATUS 'ZSTATUS'.

SET TITLEBAR 'ZTITLE'.

ENDMODULE. " set_status OUTPUT

*&----


*& Module CHECK INPUT

*&----


  • Modify the internal table using the current line in table control

*----


MODULE check INPUT.

MODIFY i_makt INDEX t_ctrl-current_line.

ENDMODULE. " CHECK INPUT

For step-by-step information,check this link.

https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/webas/abap/abap-co...

I have explained things step-by-step here.

Former Member
0 Kudos

saving the record is based on creation of ur table control.

while creating the table control if u have used the option Get from dictionary for getting the fields then use this code.

MODULE USER_COMMAND_9001 INPUT.

CASE SY-UCOMM.

WHEN 'SAVE'.

INSERT ZPMAS.

endcase.

else if u have used the option Get from program first u have to assign the internal table field to ur database fiels and save it.

WHEN 'SAVE'.

Zpuchasdetails-ZQTY = ITAB-QTY.

ZPUCHASDETAILS-ZAMT = ITAB-AMT.

INSERT ZPUCHASDETAILS.

IF SY-SUBRC EQ 0.

MESSAGE 'SAVED SUCCEESSFULLY' TYPE 'I'.

ENDIF.

this module must be before the loop at itab in flow logic.

Message was edited by:

Kalpanashri Rajendran