‎2006 Jun 28 2:45 PM
Does anybody have a sample code for a table control program which can insert/delete/update a database table?
I mean like on the output on table control, if the user insert/delete/update the records, the corresponding records will be updated in database table also.
Appreciate your input.
Thanks.
‎2006 Jun 28 2:55 PM
All of that can be handled automatically for you if you use the table control wizard in screen painter. Or if you want to generate a table maintenance program, you don't have to code anything. Just go to SE11, Utilities, Table Mainteance Generator. Once you have the table maintenance program, you can maintain the db table via SM30
Regards,
Rich Heilman
‎2006 Jun 28 2:55 PM
All of that can be handled automatically for you if you use the table control wizard in screen painter. Or if you want to generate a table maintenance program, you don't have to code anything. Just go to SE11, Utilities, Table Mainteance Generator. Once you have the table maintenance program, you can maintain the db table via SM30
Regards,
Rich Heilman
‎2006 Jun 28 3:00 PM
Rich,
Thank you very much.
What if I just want to insert/modify/delete a row in internal table?
Regards.
‎2006 Jun 28 3:05 PM
hi nuren,
TABLES: kna1,knbk.
DATA: v_kunnr LIKE kna1-kunnr.
DATA: v_check TYPE c.
DATA: BEGIN OF it_knbk OCCURS 0,
banks LIKE knbk-banks,
bankl LIKE knbk-bankl,
bankn LIKE knbk-bankn,
bkont LIKE knbk-bkont,
koinh LIKE knbk-koinh,
chk TYPE c,
END OF it_knbk.
DATA: v_ucomm TYPE sy-ucomm,
v_dynnr TYPE sy-dynnr.
DATA: l_index TYPE sy-index.
data: count type i.
CONTROLS: tc1 TYPE TABLEVIEW USING SCREEN 0200.
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE status_0100 OUTPUT.
SET PF-STATUS 'ABC'.
SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE user_command_0100 INPUT.
v_ucomm = sy-ucomm.
CASE v_ucomm.
WHEN 'DISP' OR 'CHNG'.
IF v_kunnr <> space.
SELECT banks
bankl
bankn
bkont
koinh
FROM knbk
INTO TABLE it_knbk
WHERE kunnr = v_kunnr.
LEAVE TO SCREEN '0200'.
ENDIF.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
&----
*& Module MOD_KUNNR INPUT
&----
text
----
MODULE mod_kunnr INPUT.
IF NOT v_kunnr IS INITIAL.
SELECT SINGLE
kunnr
FROM kna1
INTO v_kunnr
WHERE kunnr = v_kunnr.
IF sy-subrc <> 0.
MESSAGE e000(zz) WITH 'INCORRECT CUSTOMER NUMBER'.
ENDIF.
ENDIF.
IF v_kunnr IS INITIAL.
MESSAGE e000(zz) WITH 'PLEASE ENTER A VALUE'.
ENDIF.
ENDMODULE. " MOD_KUNNR INPUT
&----
*& Module STATUS_0200 OUTPUT
&----
text
----
MODULE status_0200 OUTPUT.
SET PF-STATUS 'ABC1'.
SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0200 OUTPUT
&----
*& Module SCREENMOD OUTPUT
&----
text
----
MODULE screenmod OUTPUT.
IF v_ucomm = 'DISP'.
LOOP AT SCREEN.
screen-input = 0.
MODIFY SCREEN.
ENDLOOP.
ELSE."if v_UCOMM = 'CHNG'.
LOOP AT SCREEN.
IF screen-group1 = 'G1'.
screen-input = 0.
ELSE.
screen-input = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
endif.
if sy-ucomm = 'INSE'.
loop at screen.
IF ( tc1-current_line <> tc1-lines ).
screen-input = 0.
else.
screen-input = 1.
modify screen.
endif.
endloop.
endif.
ENDMODULE. " SCREENMOD OUTPUT
&----
*& Module EXIT2 INPUT
&----
text
----
MODULE exit2 INPUT.
LEAVE TO SCREEN 0.
ENDMODULE. " EXIT2 INPUT
&----
*& Module modify INPUT
&----
text
----
MODULE modify INPUT.
IF v_check = 'X'.
it_knbk-chk = 'X'.
MODIFY it_knbk index tc1-current_line.
ELSE.
CLEAR it_knbk-chk .
ENDIF.
ENDMODULE. " modify INPUT
&----
*& Module USER_COMMAND_0200 INPUT
&----
text
----
MODULE user_command_0200 INPUT.
v_ucomm = sy-ucomm.
CASE v_ucomm.
WHEN 'DELE'.
DELETE it_knbk where chk eq 'X'.
DESCRIBE TABLE it_knbk LINES tc1-lines.
WHEN 'INSE'.
CLEAR it_knbk.
APPEND it_knbk.
DESCRIBE TABLE it_knbk LINES tc1-lines.
WHEN 'LIST'.
LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN '0200'.
WRITE 'Report'.
WHEN 'BACK'.
LEAVE TO SCREEN '0100'.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
&----
*& Module validate INPUT
&----
text
----
module validate input.
IF IT_KNBK IS INITIAL.
MESSAGE E000(ZZ) WITH 'A BLANK LINE CANNOT BE SAVED'.
ENDIF.
endmodule. " validate INPUT
‎2006 Jun 28 3:02 PM
Hi Nuren,
Here is easy sample prg u can go thru...
TABLES: ZFRIENDS_CONTACT.
DATA: BEGIN OF ITAB OCCURS 0.
INCLUDE STRUCTURE ZFRIENDS_CONTACT.
DATA: END OF ITAB.
DATA: BEGIN OF ITAB1 OCCURS 0,
NAME LIKE ZFRIENDS_CONTACT-NAME,
FRIEND_NAME LIKE ZFRIENDS_CONTACT-FRIEND_NAME,
CHECK1 TYPE C,
END OF ITAB1.
DATA: V_NAME LIKE ZFRIENDS_CONTACT-NAME,
VTAB TYPE C.
CONTROLS:
TC TYPE TABLEVIEW USING SCREEN 200.
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'SSS'.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE USER_COMMAND_0100 INPUT.
SELECT NAME
FRIEND_NAME
DOB
CELL_NO
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM ZFRIENDS_CONTACT
WHERE NAME = V_NAME.
DESCRIBE TABLE ITAB LINES TC-LINES.
CASE SY-UCOMM.
WHEN 'EXIT'.
LEAVE PROGRAM.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN 'DISPLAY'.
LEAVE TO SCREEN 200.
WHEN 'CHANGE'.
LEAVE TO SCREEN 200.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
&----
*& Module GETDATA OUTPUT
&----
text
----
MODULE GETDATA OUTPUT.
ENDMODULE. " GETDATA OUTPUT
&----
*& Module SHOWDATA INPUT
&----
text
----
MODULE SHOWDATA INPUT.
CASE SY-UCOMM.
WHEN 'DELETE'.
IF VTAB = 'X'.
ITAB1-NAME = ITAB-NAME.
ITAB1-FRIEND_NAME = ITAB-FRIEND_NAME.
ITAB1-CHECK1 = 'D'.
APPEND ITAB1.
DELETE ITAB INDEX TC-CURRENT_LINE.
DESCRIBE TABLE ITAB LINES TC-LINES.
ENDIF.
WHEN 'MODIFY'.
IF VTAB = 'X'.
ITAB1-NAME = ITAB-NAME.
ITAB1-FRIEND_NAME = ITAB-FRIEND_NAME.
ITAB1-CHECK1 = 'M'.
APPEND ITAB1.
MODIFY ITAB INDEX TC-CURRENT_LINE.
ENDIF.
WHEN 'INSERT'.
IF VTAB = 'X'.
APPEND INITIAL LINE TO ITAB.
DESCRIBE TABLE ITAB LINES TC-LINES.
CLEAR SY-UCOMM.
ENDIF.
WHEN 'SINS'.
ITAB1-NAME = ITAB-NAME.
ITAB1-FRIEND_NAME = ITAB-FRIEND_NAME.
ITAB1-CHECK1 = 'I'.
APPEND ITAB1.
MODIFY ITAB INDEX TC-CURRENT_LINE.
ENDCASE.
ENDMODULE. " SHOWDATA INPUT
&----
*& Module PROCESS INPUT
&----
text
----
MODULE PROCESS INPUT.
IF SY-UCOMM = 'SAVE'.
LOOP AT ITAB1.
IF ITAB1-CHECK1 = 'I'.
READ TABLE ITAB WITH KEY NAME = ITAB1-NAME
FRIEND_NAME = ITAB1-FRIEND_NAME.
INSERT INTO ZFRIENDS_CONTACT VALUES ITAB.
ELSEIF ITAB1-CHECK1 = 'D'.
DELETE FROM ZFRIENDS_CONTACT WHERE NAME = ITAB1-NAME
AND FRIEND_NAME = ITAB1-FRIEND_NAME.
ELSEIF ITAB1-CHECK1 = 'M'.
READ TABLE ITAB WITH KEY NAME = ITAB1-NAME
FRIEND_NAME = ITAB1-FRIEND_NAME.
UPDATE ZFRIENDS_CONTACT SET NAME = ITAB-NAME
FRIEND_NAME = ITAB-FRIEND_NAME
DOB = ITAB-DOB
CELL_NO = ITAB-CELL_NO
WHERE NAME = ITAB-NAME AND
FRIEND_NAME = ITAB-FRIEND_NAME.
ENDIF.
ENDLOOP.
ENDIF.
ENDMODULE. " PROCESS INPUT
Regards,
Kiran B
‎2006 Jun 28 3:06 PM
HI
GOOD
GO THROUGH THIS PROGRAM
REPORT Y730_BDC5 .
*HANDLING TABLE CONTROL IN BDC
DATA : BEGIN OF IT_DUMMY OCCURS 0,
DUMMY(100) TYPE C,
END OF IT_DUMMY.
DATA : BEGIN OF IT_XK01 OCCURS 0,
LIFNR(10) TYPE C,
BUKRS(4) TYPE C,
EKORG(4) TYPE C,
KTOKK(4) TYPE C,
NAME1(30) TYPE C,
SORTL(10) TYPE C,
LAND1(3) TYPE C,
SPRAS(2) TYPE C,
AKONT(6) TYPE C,
FDGRV(2) TYPE C,
WAERS(3) TYPE C,
END OF IT_XK01,
BEGIN OF IT_BANK OCCURS 0,
BANKS(3) TYPE C,
BANKL(10) TYPE C,
BANKN(10) TYPE C,
KOINH(30) TYPE C,
LIFNR(10) TYPE C,
END OF IT_BANK.
DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
IT_BDCMSGCOLL LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = 'C:\VENDOR.TXT'
FILETYPE = 'ASC'
TABLES
DATA_TAB = IT_DUMMY.
LOOP AT IT_DUMMY.
IF IT_DUMMY-DUMMY+0(2) = '11'.
IT_XK01-LIFNR = IT_DUMMY-DUMMY+2(10).
IT_XK01-BUKRS = IT_DUMMY-DUMMY+12(4).
IT_XK01-EKORG = IT_DUMMY-DUMMY+16(4).
IT_XK01-KTOKK = IT_DUMMY-DUMMY+20(4).
IT_XK01-NAME1 = IT_DUMMY-DUMMY+24(30).
IT_XK01-SORTL = IT_DUMMY-DUMMY+54(10).
IT_XK01-LAND1 = IT_DUMMY-DUMMY+64(3).
IT_XK01-SPRAS = IT_DUMMY-DUMMY+67(2).
IT_XK01-AKONT = IT_DUMMY-DUMMY+69(6).
IT_XK01-FDGRV = IT_DUMMY-DUMMY+75(2).
IT_XK01-WAERS = IT_DUMMY-DUMMY+77(3).
APPEND IT_XK01.
ELSE.
IT_BANK-BANKS = IT_DUMMY-DUMMY+2(3).
IT_BANK-BANKL = IT_DUMMY-DUMMY+5(10).
IT_BANK-BANKN = IT_DUMMY-DUMMY+15(10).
IT_BANK-KOINH = IT_DUMMY-DUMMY+25(30).
IT_BANK-LIFNR = IT_DUMMY-DUMMY+55(10).
APPEND IT_BANK.
ENDIF.
ENDLOOP.
LOOP AT IT_XK01.
REFRESH IT_BDCDATA.
perform bdc_dynpro using 'SAPMF02K' '0100'.
perform bdc_field using 'BDC_CURSOR'
'RF02K-REF_LIFNR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RF02K-LIFNR'
IT_XK01-LIFNR.
perform bdc_field using 'RF02K-BUKRS'
IT_XK01-BUKRS.
perform bdc_field using 'RF02K-EKORG'
IT_XK01-EKORG.
perform bdc_field using 'RF02K-KTOKK'
IT_XK01-KTOKK.
perform bdc_dynpro using 'SAPMF02K' '0110'.
perform bdc_field using 'BDC_CURSOR'
'LFA1-TELX1'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'LFA1-NAME1'
IT_XK01-NAME1.
perform bdc_field using 'LFA1-SORTL'
IT_XK01-SORTL.
perform bdc_field using 'LFA1-LAND1'
IT_XK01-LAND1.
perform bdc_field using 'LFA1-SPRAS'
IT_XK01-SPRAS.
perform bdc_dynpro using 'SAPMF02K' '0120'.
perform bdc_field using 'BDC_CURSOR'
'LFA1-KUNNR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro using 'SAPMF02K' '0130'.
perform bdc_field using 'BDC_CURSOR'
'LFBK-KOINH(02)'.
perform bdc_field using 'BDC_OKCODE'
'=ENTR'.
DATA : FNAM(20) TYPE C,
IDX TYPE C.
MOVE 1 TO IDX.
LOOP AT IT_BANK WHERE LIFNR = IT_XK01-LIFNR.
CONCATENATE 'LFBK-BANKS(' IDX ')' INTO FNAM.
perform bdc_field using FNAM
IT_BANK-BANKS.
CONCATENATE 'LFBK-BANKL(' IDX ')' INTO FNAM.
perform bdc_field using FNAM
IT_BANK-BANKL.
CONCATENATE 'LFBK-BANKN(' IDX ')' INTO FNAM.
perform bdc_field using FNAM
IT_BANK-BANKN.
CONCATENATE 'LFBK-KOINH(' IDX ')' INTO FNAM.
perform bdc_field using FNAM
IT_BANK-KOINH.
IDX = IDX + 1.
ENDLOOP.
perform bdc_dynpro using 'SAPMF02K' '0130'.
perform bdc_field using 'BDC_CURSOR'
'LFBK-BANKS(01)'.
perform bdc_field using 'BDC_OKCODE'
'=ENTR'.
perform bdc_dynpro using 'SAPMF02K' '0210'.
perform bdc_field using 'BDC_CURSOR'
'LFB1-FDGRV'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'LFB1-AKONT'
IT_XK01-AKONT.
perform bdc_field using 'LFB1-FDGRV'
IT_XK01-FDGRV.
perform bdc_dynpro using 'SAPMF02K' '0215'.
perform bdc_field using 'BDC_CURSOR'
'LFB1-ZTERM'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro using 'SAPMF02K' '0220'.
perform bdc_field using 'BDC_CURSOR'
'LFB5-MAHNA'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro using 'SAPMF02K' '0310'.
perform bdc_field using 'BDC_CURSOR'
'LFM1-WAERS'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'LFM1-WAERS'
IT_XK01-WAERS.
perform bdc_dynpro using 'SAPMF02K' '0320'.
perform bdc_field using 'BDC_CURSOR'
'WYT3-PARVW(01)'.
perform bdc_field using 'BDC_OKCODE'
'=ENTR'.
perform bdc_dynpro using 'SAPLSPO1' '0300'.
perform bdc_field using 'BDC_OKCODE'
'=YES'.
CALL TRANSACTION 'XK01' USING IT_BDCDATA
MODE 'A'
UPDATE 'S'
MESSAGES INTO IT_BDCMSGCOLL.
ENDLOOP.
FORM BDC_DYNPRO USING PROG SCR.
CLEAR IT_BDCDATA.
IT_BDCDATA-PROGRAM = PROG.
IT_BDCDATA-DYNPRO = SCR.
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.
ENDFORM.
FORM BDC_FIELD USING FNAM FVAL.
CLEAR IT_BDCDATA.
IT_BDCDATA-FNAM = FNAM.
IT_BDCDATA-FVAL = FVAL.
APPEND IT_BDCDATA.
ENDFORM.
THANKS
MRUTYUN
‎2006 Jun 28 3:19 PM
Hi Nuren,
You can go through this document...
http://esnips.com/doc/48bd95e8-facc-4932-b923-465ba59bad24/Table-Control.pdf
Regards,
SP.