‎2006 Jun 25 6:34 AM
Hi All,
I have some requirement in Module Pool Programming.
<b>First i have to create a screen with 1 FRAME with several fields.
Then below it i have to put a TAB-STRIP CONTROL with 3 TAB's.
Then when i clik on Each Tab's i should be getting 3 diffrent TABLE CONTROL's for diffrent TAB's.</b>
And Also the functionality should be like Standard Screens[Transactions] one.
Like selecting row, inputing values into Table control columns, saving, modifying, deleting etc.
Can anybody give me the sample code(s) for similar scenario's.
Thanks in advance.
Thanks & Regards,
Prasad.
‎2006 Jun 25 7:30 AM
PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ZTDR_LINES'
MODULE ZTDR_LINES_INIT.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_COL_ATTR.
LOOP AT G_ZTDR_LINES_ITAB
INTO G_ZTDR_LINES_WA
WITH CONTROL ZTDR_LINES
CURSOR ZTDR_LINES-CURRENT_LINE.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_FIELD_ATTR
MODULE ZTDR_LINES_MOVE.
MODULE ZTDR_LINES_GET_LINES.
ENDLOOP.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'ZTDR_LINES'
LOOP AT G_ZTDR_LINES_ITAB.
CHAIN.
FIELD ZTDR_DTL-POSNR.
FIELD ZTDR_DTL-DIVSN.
FIELD ZTDR_DTL-MODEL.
FIELD ZTDR_DTL-QUANT.
FIELD ZTDR_DTL-DAMGE.
MODULE ZTDR_LINES_MODIFY ON CHAIN-REQUEST.
ENDCHAIN.
ENDLOOP.
MODULE ZTDR_LINES_USER_COMMAND.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_COL_ATTR.
MODULE USER_COMMAND_0100.
-
PROGRAM ZTDR1 MESSAGE-ID ZAUT.
TABLES : ZTDR, ZTDR_DTL.
DATA : WA_NAME(50) TYPE C,
WA_HONUM(10) TYPE C,
WA_HONUM1(10) TYPE C,
WA_DCNUM(10) TYPE C,
WA_DCNUM1(10) TYPE C.
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'GUI0100'.
SET TITLEBAR 'TITBAR'.
IF SY-UNAME NE 'TRAINING'.
IF SY-UNAME NE 'PMR'.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'HO'.
SCREEN-INPUT = 0.
SCREEN-INVISIBLE = 1.
SCREEN-ACTIVE = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
TYPE-POOLS :VRM.
DATA:I_DDLIST TYPE VRM_VALUES,
W_DDLIST LIKE LINE OF I_DDLIST.
DATA: BEGIN OF I_PSTYP OCCURS 0,
PKEY(1) TYPE C,
PVAL(10) TYPE C,
END OF I_PSTYP.
CLEAR : W_DDLIST, I_DDLIST.
IF I_PSTYP[] IS INITIAL.
I_PSTYP-PKEY = 'P'.
I_PSTYP-PVAL = 'Primary'.
APPEND I_PSTYP.
I_PSTYP-PKEY = 'S'.
I_PSTYP-PVAL = 'Secondary'.
APPEND I_PSTYP.
ENDIF.
DELETE ADJACENT DUPLICATES FROM I_PSTYP.
LOOP AT I_PSTYP .
W_DDLIST-KEY = I_PSTYP-PKEY.
W_DDLIST-TEXT = I_PSTYP-PVAL.
APPEND W_DDLIST TO I_DDLIST.
CLEAR W_DDLIST.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'ZTDR-PSTYP'
VALUES = I_DDLIST
EXCEPTIONS
ID_ILLEGAL_NAME = 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.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE USER_COMMAND_0100 INPUT.
DATA OK_CODE LIKE SY-UCOMM.
OK_CODE = SY-UCOMM.
CLEAR WA_HONUM.
CASE OK_CODE.
WHEN 'SAVE'(001).
AUTHORITY-CHECK OBJECT 'Z_REPORT_N'
ID 'WERKS' FIELD ZTDR-BRNCH.
IF SY-SUBRC <> 0.
MESSAGE E001 WITH ZTDR-BRNCH.
ELSE.
SELECT SINGLE MAX( HONUM )
INTO WA_HONUM
FROM ZTDR.
WA_HONUM1 = WA_HONUM + 1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_HONUM1
IMPORTING
OUTPUT = WA_HONUM1.
ZTDR-HONUM = WA_HONUM1.
SELECT SINGLE MAX( DCNUM )
INTO WA_DCNUM
FROM ZTDR
WHERE BRNCH EQ ZTDR-BRNCH.
WA_DCNUM1 = WA_DCNUM + 1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_DCNUM1
IMPORTING
OUTPUT = WA_DCNUM1.
ZTDR-DCNUM = WA_DCNUM1.
INSERT ZTDR.
*****----
ZTDR_DTL-HONUM = WA_HONUM1.
ZTDR_DTL-DCNUM = WA_DCNUM1.
INSERT ZTDR_DTL.
****----
CLEAR : ZTDR-RCDAT, ZTDR-BRNCH, ZTDR-TDNUM,
ZTDR-DCNUM, ZTDR-DCDAT, ZTDR-LRNUM, ZTDR-LRDAT,
ZTDR-CARIR, ZTDR-TDDAT, ZTDR-DIVSN, ZTDR-MODEL,
ZTDR-PSTYP, ZTDR-QUANT, ZTDR-DAMGE, ZTDR-APAMT,
ZTDR-CLAMT, ZTDR-SNDAT, ZTDR-STLFR,
ZTDR-STLDT, ZTDR-CQNUM, ZTDR-CHOLA.
ENDIF.
WHEN 'VIEW'.
LOOP AT SCREEN.
IF SCREEN-GROUP2 = 'VV'.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
SELECT SINGLE * FROM ZTDR WHERE HONUM EQ ZTDR-HONUM.
WHEN 'MODIFY'.
MODIFY ZTDR.
CLEAR : ZTDR-RCDAT, ZTDR-BRNCH, ZTDR-TDNUM,
ZTDR-DCNUM, ZTDR-DCDAT, ZTDR-LRNUM, ZTDR-LRDAT,
ZTDR-CARIR, ZTDR-TDDAT, ZTDR-DIVSN, ZTDR-MODEL,
ZTDR-PSTYP, ZTDR-QUANT, ZTDR-DAMGE, ZTDR-APAMT,
ZTDR-CLAMT, ZTDR-SNDAT, ZTDR-STLFR,
ZTDR-STLDT, ZTDR-CQNUM, ZTDR-CHOLA.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*----
*TABLES : S076.
*
*DATA : WA_WENUX LIKE S076-WENUX,
WA_NAME(25) TYPE C.
*
*WA_NAME = SY-UNAME.
*
*READ TABLE I_KEYFELDER WITH KEY FNAME = 'S076-WENUX'.
*IF SY-SUBRC = 0.
*
AUTHORITY-CHECK OBJECT 'Z_REPORT_N'
ID 'WERKS' FIELD I_KEYFELDER-VALUE.
*
IF SY-SUBRC <> 0.
RAISE NO_AUTHORITY.
ENDIF.
*
*ENDIF.
***&SPWIZARD: DATA DECLARATION FOR TABLECONTROL 'ZTDR_LINES'
*&SPWIZARD: DEFINITION OF DDIC-TABLE
TABLES: ZTDR_DTL.
*&SPWIZARD: TYPE FOR THE DATA OF TABLECONTROL 'ZTDR_LINES'
TYPES: BEGIN OF T_ZTDR_LINES,
POSNR LIKE ZTDR_DTL-POSNR,
DIVSN LIKE ZTDR_DTL-DIVSN,
MODEL LIKE ZTDR_DTL-MODEL,
QUANT LIKE ZTDR_DTL-QUANT,
DAMGE LIKE ZTDR_DTL-DAMGE,
END OF T_ZTDR_LINES.
*&SPWIZARD: INTERNAL TABLE FOR TABLECONTROL 'ZTDR_LINES'
DATA: G_ZTDR_LINES_ITAB TYPE T_ZTDR_LINES OCCURS 0,
G_ZTDR_LINES_WA TYPE T_ZTDR_LINES. "work area
DATA: G_ZTDR_LINES_COPIED. "copy flag
*&SPWIZARD: DECLARATION OF TABLECONTROL 'ZTDR_LINES' ITSELF
CONTROLS: ZTDR_LINES TYPE TABLEVIEW USING SCREEN 0100.
*&SPWIZARD: LINES OF TABLECONTROL 'ZTDR_LINES'
DATA: G_ZTDR_LINES_LINES LIKE SY-LOOPC.
*&SPWIZARD: OUTPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: COPY DDIC-TABLE TO ITAB
MODULE ZTDR_LINES_INIT OUTPUT.
IF G_ZTDR_LINES_COPIED IS INITIAL.
*&SPWIZARD: COPY DDIC-TABLE 'ZTDR_DTL'
*&SPWIZARD: INTO INTERNAL TABLE 'g_ZTDR_LINES_itab'
SELECT * FROM ZTDR_DTL
INTO CORRESPONDING FIELDS
OF TABLE G_ZTDR_LINES_ITAB.
G_ZTDR_LINES_COPIED = 'X'.
REFRESH CONTROL 'ZTDR_LINES' FROM SCREEN '0100'.
ENDIF.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MOVE ITAB TO DYNPRO
MODULE ZTDR_LINES_MOVE OUTPUT.
MOVE-CORRESPONDING G_ZTDR_LINES_WA TO ZTDR_DTL.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE ZTDR_LINES_GET_LINES OUTPUT.
G_ZTDR_LINES_LINES = SY-LOOPC.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE ZTDR_LINES_MODIFY INPUT.
MOVE-CORRESPONDING ZTDR_DTL TO G_ZTDR_LINES_WA.
MODIFY G_ZTDR_LINES_ITAB
FROM G_ZTDR_LINES_WA
INDEX ZTDR_LINES-CURRENT_LINE.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE ZTDR_LINES_USER_COMMAND INPUT.
OK_CODE = SY-UCOMM.
PERFORM USER_OK_TC USING 'ZTDR_LINES'
'G_ZTDR_LINES_ITAB'
'FLAG'
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
Reward points if it helps
regards
Gunjan
P.S.
Other way out would be create 3 tab strip and in each of them use table control wizard it will add all the required functionality and generate all the necessary includes and PBO n PAI events..
‎2006 Jun 25 7:30 AM
PROCESS BEFORE OUTPUT.
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'ZTDR_LINES'
MODULE ZTDR_LINES_INIT.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_COL_ATTR.
LOOP AT G_ZTDR_LINES_ITAB
INTO G_ZTDR_LINES_WA
WITH CONTROL ZTDR_LINES
CURSOR ZTDR_LINES-CURRENT_LINE.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_FIELD_ATTR
MODULE ZTDR_LINES_MOVE.
MODULE ZTDR_LINES_GET_LINES.
ENDLOOP.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'ZTDR_LINES'
LOOP AT G_ZTDR_LINES_ITAB.
CHAIN.
FIELD ZTDR_DTL-POSNR.
FIELD ZTDR_DTL-DIVSN.
FIELD ZTDR_DTL-MODEL.
FIELD ZTDR_DTL-QUANT.
FIELD ZTDR_DTL-DAMGE.
MODULE ZTDR_LINES_MODIFY ON CHAIN-REQUEST.
ENDCHAIN.
ENDLOOP.
MODULE ZTDR_LINES_USER_COMMAND.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE ZTDR_LINES_CHANGE_COL_ATTR.
MODULE USER_COMMAND_0100.
-
PROGRAM ZTDR1 MESSAGE-ID ZAUT.
TABLES : ZTDR, ZTDR_DTL.
DATA : WA_NAME(50) TYPE C,
WA_HONUM(10) TYPE C,
WA_HONUM1(10) TYPE C,
WA_DCNUM(10) TYPE C,
WA_DCNUM1(10) TYPE C.
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'GUI0100'.
SET TITLEBAR 'TITBAR'.
IF SY-UNAME NE 'TRAINING'.
IF SY-UNAME NE 'PMR'.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'HO'.
SCREEN-INPUT = 0.
SCREEN-INVISIBLE = 1.
SCREEN-ACTIVE = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
TYPE-POOLS :VRM.
DATA:I_DDLIST TYPE VRM_VALUES,
W_DDLIST LIKE LINE OF I_DDLIST.
DATA: BEGIN OF I_PSTYP OCCURS 0,
PKEY(1) TYPE C,
PVAL(10) TYPE C,
END OF I_PSTYP.
CLEAR : W_DDLIST, I_DDLIST.
IF I_PSTYP[] IS INITIAL.
I_PSTYP-PKEY = 'P'.
I_PSTYP-PVAL = 'Primary'.
APPEND I_PSTYP.
I_PSTYP-PKEY = 'S'.
I_PSTYP-PVAL = 'Secondary'.
APPEND I_PSTYP.
ENDIF.
DELETE ADJACENT DUPLICATES FROM I_PSTYP.
LOOP AT I_PSTYP .
W_DDLIST-KEY = I_PSTYP-PKEY.
W_DDLIST-TEXT = I_PSTYP-PVAL.
APPEND W_DDLIST TO I_DDLIST.
CLEAR W_DDLIST.
ENDLOOP.
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'ZTDR-PSTYP'
VALUES = I_DDLIST
EXCEPTIONS
ID_ILLEGAL_NAME = 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.
ENDMODULE. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
MODULE USER_COMMAND_0100 INPUT.
DATA OK_CODE LIKE SY-UCOMM.
OK_CODE = SY-UCOMM.
CLEAR WA_HONUM.
CASE OK_CODE.
WHEN 'SAVE'(001).
AUTHORITY-CHECK OBJECT 'Z_REPORT_N'
ID 'WERKS' FIELD ZTDR-BRNCH.
IF SY-SUBRC <> 0.
MESSAGE E001 WITH ZTDR-BRNCH.
ELSE.
SELECT SINGLE MAX( HONUM )
INTO WA_HONUM
FROM ZTDR.
WA_HONUM1 = WA_HONUM + 1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_HONUM1
IMPORTING
OUTPUT = WA_HONUM1.
ZTDR-HONUM = WA_HONUM1.
SELECT SINGLE MAX( DCNUM )
INTO WA_DCNUM
FROM ZTDR
WHERE BRNCH EQ ZTDR-BRNCH.
WA_DCNUM1 = WA_DCNUM + 1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_DCNUM1
IMPORTING
OUTPUT = WA_DCNUM1.
ZTDR-DCNUM = WA_DCNUM1.
INSERT ZTDR.
*****----
ZTDR_DTL-HONUM = WA_HONUM1.
ZTDR_DTL-DCNUM = WA_DCNUM1.
INSERT ZTDR_DTL.
****----
CLEAR : ZTDR-RCDAT, ZTDR-BRNCH, ZTDR-TDNUM,
ZTDR-DCNUM, ZTDR-DCDAT, ZTDR-LRNUM, ZTDR-LRDAT,
ZTDR-CARIR, ZTDR-TDDAT, ZTDR-DIVSN, ZTDR-MODEL,
ZTDR-PSTYP, ZTDR-QUANT, ZTDR-DAMGE, ZTDR-APAMT,
ZTDR-CLAMT, ZTDR-SNDAT, ZTDR-STLFR,
ZTDR-STLDT, ZTDR-CQNUM, ZTDR-CHOLA.
ENDIF.
WHEN 'VIEW'.
LOOP AT SCREEN.
IF SCREEN-GROUP2 = 'VV'.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
SELECT SINGLE * FROM ZTDR WHERE HONUM EQ ZTDR-HONUM.
WHEN 'MODIFY'.
MODIFY ZTDR.
CLEAR : ZTDR-RCDAT, ZTDR-BRNCH, ZTDR-TDNUM,
ZTDR-DCNUM, ZTDR-DCDAT, ZTDR-LRNUM, ZTDR-LRDAT,
ZTDR-CARIR, ZTDR-TDDAT, ZTDR-DIVSN, ZTDR-MODEL,
ZTDR-PSTYP, ZTDR-QUANT, ZTDR-DAMGE, ZTDR-APAMT,
ZTDR-CLAMT, ZTDR-SNDAT, ZTDR-STLFR,
ZTDR-STLDT, ZTDR-CQNUM, ZTDR-CHOLA.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*----
*TABLES : S076.
*
*DATA : WA_WENUX LIKE S076-WENUX,
WA_NAME(25) TYPE C.
*
*WA_NAME = SY-UNAME.
*
*READ TABLE I_KEYFELDER WITH KEY FNAME = 'S076-WENUX'.
*IF SY-SUBRC = 0.
*
AUTHORITY-CHECK OBJECT 'Z_REPORT_N'
ID 'WERKS' FIELD I_KEYFELDER-VALUE.
*
IF SY-SUBRC <> 0.
RAISE NO_AUTHORITY.
ENDIF.
*
*ENDIF.
***&SPWIZARD: DATA DECLARATION FOR TABLECONTROL 'ZTDR_LINES'
*&SPWIZARD: DEFINITION OF DDIC-TABLE
TABLES: ZTDR_DTL.
*&SPWIZARD: TYPE FOR THE DATA OF TABLECONTROL 'ZTDR_LINES'
TYPES: BEGIN OF T_ZTDR_LINES,
POSNR LIKE ZTDR_DTL-POSNR,
DIVSN LIKE ZTDR_DTL-DIVSN,
MODEL LIKE ZTDR_DTL-MODEL,
QUANT LIKE ZTDR_DTL-QUANT,
DAMGE LIKE ZTDR_DTL-DAMGE,
END OF T_ZTDR_LINES.
*&SPWIZARD: INTERNAL TABLE FOR TABLECONTROL 'ZTDR_LINES'
DATA: G_ZTDR_LINES_ITAB TYPE T_ZTDR_LINES OCCURS 0,
G_ZTDR_LINES_WA TYPE T_ZTDR_LINES. "work area
DATA: G_ZTDR_LINES_COPIED. "copy flag
*&SPWIZARD: DECLARATION OF TABLECONTROL 'ZTDR_LINES' ITSELF
CONTROLS: ZTDR_LINES TYPE TABLEVIEW USING SCREEN 0100.
*&SPWIZARD: LINES OF TABLECONTROL 'ZTDR_LINES'
DATA: G_ZTDR_LINES_LINES LIKE SY-LOOPC.
*&SPWIZARD: OUTPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: COPY DDIC-TABLE TO ITAB
MODULE ZTDR_LINES_INIT OUTPUT.
IF G_ZTDR_LINES_COPIED IS INITIAL.
*&SPWIZARD: COPY DDIC-TABLE 'ZTDR_DTL'
*&SPWIZARD: INTO INTERNAL TABLE 'g_ZTDR_LINES_itab'
SELECT * FROM ZTDR_DTL
INTO CORRESPONDING FIELDS
OF TABLE G_ZTDR_LINES_ITAB.
G_ZTDR_LINES_COPIED = 'X'.
REFRESH CONTROL 'ZTDR_LINES' FROM SCREEN '0100'.
ENDIF.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MOVE ITAB TO DYNPRO
MODULE ZTDR_LINES_MOVE OUTPUT.
MOVE-CORRESPONDING G_ZTDR_LINES_WA TO ZTDR_DTL.
ENDMODULE.
*&SPWIZARD: OUTPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE ZTDR_LINES_GET_LINES OUTPUT.
G_ZTDR_LINES_LINES = SY-LOOPC.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE ZTDR_LINES_MODIFY INPUT.
MOVE-CORRESPONDING ZTDR_DTL TO G_ZTDR_LINES_WA.
MODIFY G_ZTDR_LINES_ITAB
FROM G_ZTDR_LINES_WA
INDEX ZTDR_LINES-CURRENT_LINE.
ENDMODULE.
*&SPWIZARD: INPUT MODULE FOR TC 'ZTDR_LINES'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE ZTDR_LINES_USER_COMMAND INPUT.
OK_CODE = SY-UCOMM.
PERFORM USER_OK_TC USING 'ZTDR_LINES'
'G_ZTDR_LINES_ITAB'
'FLAG'
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
Reward points if it helps
regards
Gunjan
P.S.
Other way out would be create 3 tab strip and in each of them use table control wizard it will add all the required functionality and generate all the necessary includes and PBO n PAI events..
‎2006 Jun 25 8:14 AM
Hi,
Thanks for your reply.
Will this code work fine in <b>4.7EE</b> version.
Will it meet all the requirements which i have mentioned in above post.
<b>Like Screen -> Inside it Tab-Strip with 3 TAB's
Inside those 3 Tab's 3 table controls.</b>
Also please calrify how many TAB's [Names] and how many Table Controls are used in the above code posted!
Once again thanks for your reply.
Thanks for your efforts.
Thanks,
Prasad.
‎2006 Jun 25 8:20 AM
<i>P.S.
Other way out would be create 3 tab strip and in each of them use table control wizard it will add all the required functionality and generate all the necessary includes and PBO n PAI events..</i>