Application Development and Automation 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: 
Read only

internal table modify

Former Member
0 Likes
1,463

Hi ,

in below intenal table having 4 row in 4 column

-


Sr.No

A

B

C

-


1

1001

10

20

2

1002

10

20

3

1003

10

20

4

1004

10

20

-


Now i want in 2 rows with 8 column how to do that ?

-


Sr.No

A

B

C

Sr.No

A

B

C

-


|1 | |1001 | |10| |20| 3| |1003| |10| |20

2

1002

10

20

4

1004

10

20

-


1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,430

Sory try this

TYPES : BEGIN OF TY_ITAB1,
           SN  TYPE I,
           A   TYPE CHAR04,
           B   TYPE CHAR02,
           C   TYPE CHAR02,
        END OF TY_ITAB1.

TYPES : BEGIN OF TY_ITAB2,
           SN1  TYPE I,
           A1   TYPE CHAR04,
           B1   TYPE CHAR02,
           C1   TYPE CHAR02,
           SN2  TYPE I,
           A2   TYPE CHAR04,
           B2   TYPE CHAR02,
           C2   TYPE CHAR02,
        END OF TY_ITAB2.
DATA: LT_ITAB1 TYPE TABLE OF TY_ITAB1,
      LT_ITAB2 TYPE TABLE OF TY_ITAB2,
      LS_ITAB1 TYPE          TY_ITAB1,
      LS_ITAB2 TYPE          TY_ITAB2,
      LV_MOD   TYPE          I,
      LV_FLG    TYPE          C.


LS_ITAB1-SN = 1.
LS_ITAB1-A  = 1001.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 2.
LS_ITAB1-A  = 1002.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 3.
LS_ITAB1-A  = 1003.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 4.
LS_ITAB1-A  = 1004.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.

LOOP AT LT_ITAB1 INTO LS_ITAB1.
  LV_MOD = SY-TABIX MOD 2.
  CASE LV_MOD.
    WHEN 1.    
      LS_ITAB2-SN1 = LS_ITAB1-SN.
      LS_ITAB2-A1 = LS_ITAB1-A.
      LS_ITAB2-B1 = LS_ITAB1-B.
      LS_ITAB2-C1 = LS_ITAB1-C.
      LV_FLG    = 'X'.                        "SET FLAG FOR APPEND NEEDED
    WHEN 0.
      LS_ITAB2-SN2 = LS_ITAB1-SN.
      LS_ITAB2-A2  = LS_ITAB1-A.
      LS_ITAB2-B2  = LS_ITAB1-B.
      LS_ITAB2-C2  = LS_ITAB1-C.
      APPEND LS_ITAB2 TO LT_ITAB2.
     CLEAR FLG.
  ENDCASE.
ENDLOOP.
*******APPEND FOR ODD TABLE LINES*****
 IF LV_FLG   IS NOT INITIAL.
      APPEND LS_ITAB2 TO LT_ITAB2.
ENDIF.

13 REPLIES 13
Read only

0 Likes
1,430

hi,

If in clasical report you can print lik that by preaparing another intrnal table of the structure what you require and display.

Regards,

surendar reddy.

Read only

Former Member
0 Likes
1,430

So may we know in what context you are having such requirement?

Regards

Karthik D

Read only

Former Member
0 Likes
1,430

want to print this table on smartforms at main window.

this is to save space or Paper.

Read only

0 Likes
1,430

First create 2 temporary tables having 4 columns, find the total number of records in your itab and divide it by 2. Now use APPEND LINES OF statement with From idx1 to idx2 to transfer the first half values to first tmp table and the remaining values to the second tmp table. Now loop and first tmp table and append the records simultaneously into the final eight column internal table.

Regards

Karthik D

Read only

Former Member
0 Likes
1,431

Sory try this

TYPES : BEGIN OF TY_ITAB1,
           SN  TYPE I,
           A   TYPE CHAR04,
           B   TYPE CHAR02,
           C   TYPE CHAR02,
        END OF TY_ITAB1.

TYPES : BEGIN OF TY_ITAB2,
           SN1  TYPE I,
           A1   TYPE CHAR04,
           B1   TYPE CHAR02,
           C1   TYPE CHAR02,
           SN2  TYPE I,
           A2   TYPE CHAR04,
           B2   TYPE CHAR02,
           C2   TYPE CHAR02,
        END OF TY_ITAB2.
DATA: LT_ITAB1 TYPE TABLE OF TY_ITAB1,
      LT_ITAB2 TYPE TABLE OF TY_ITAB2,
      LS_ITAB1 TYPE          TY_ITAB1,
      LS_ITAB2 TYPE          TY_ITAB2,
      LV_MOD   TYPE          I,
      LV_FLG    TYPE          C.


LS_ITAB1-SN = 1.
LS_ITAB1-A  = 1001.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 2.
LS_ITAB1-A  = 1002.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 3.
LS_ITAB1-A  = 1003.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 4.
LS_ITAB1-A  = 1004.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.

LOOP AT LT_ITAB1 INTO LS_ITAB1.
  LV_MOD = SY-TABIX MOD 2.
  CASE LV_MOD.
    WHEN 1.    
      LS_ITAB2-SN1 = LS_ITAB1-SN.
      LS_ITAB2-A1 = LS_ITAB1-A.
      LS_ITAB2-B1 = LS_ITAB1-B.
      LS_ITAB2-C1 = LS_ITAB1-C.
      LV_FLG    = 'X'.                        "SET FLAG FOR APPEND NEEDED
    WHEN 0.
      LS_ITAB2-SN2 = LS_ITAB1-SN.
      LS_ITAB2-A2  = LS_ITAB1-A.
      LS_ITAB2-B2  = LS_ITAB1-B.
      LS_ITAB2-C2  = LS_ITAB1-C.
      APPEND LS_ITAB2 TO LT_ITAB2.
     CLEAR FLG.
  ENDCASE.
ENDLOOP.
*******APPEND FOR ODD TABLE LINES*****
 IF LV_FLG   IS NOT INITIAL.
      APPEND LS_ITAB2 TO LT_ITAB2.
ENDIF.

Read only

Former Member
0 Likes
1,430

Hi,

Look at this code, if you are looking for same output which u have asked.

report zmp_ldb12.

data: begin of itab occurs 0,

f1 type i,

f2 type i,

f3 type i,

f4 type i,

f5 type i,

f6 type i,

f7 type i,

f8 type i,

end of itab.

data: begin of itab1 occurs 0,

f1 type i,

f2 type i,

f3 type i,

f4 type i,

end of itab1.

data wa1 like itab1.

data int type i.

itab1-f2 = 1001.

itab1-f1 = 1.

do 4 times.

itab1-f3 = 10.

itab1-f4 = 20.

append itab1 to itab1.

itab1-f1 = itab1-f1 + 1.

itab1-f2 = itab1-f2 + 1.

enddo.

loop at itab1 into itab1.

if sy-tabix = 3 or sy-tabix = 4.

exit.

else.

if sy-tabix = 1.

int = 3.

else.

int = 4.

endif.

move itab1 to itab.

read table itab1 into wa1 index int.

itab-f5 = wa1-f1.

itab-f6 = wa1-f2.

itab-f7 = wa1-f3.

itab-f8 = wa1-f4.

append itab.

clear wa1.

endif.

endloop.

Regards.

Thilotham.

Read only

Former Member
0 Likes
1,430

thanks to All for quick respose.

Hi GTREN,

You are near to my requirment .

but if records are odd one i.e if records are 3 insted of 4 then its appending only one row .

Not second one ?

Read only

0 Likes
1,430

Hi

Check how many rows you're elaborating:

TYPES : BEGIN OF TY_ITAB1,
           SN  TYPE I,
           A   TYPE CHAR04,
           B   TYPE CHAR02,
           C   TYPE CHAR02,
        END OF TY_ITAB1.
 
TYPES : BEGIN OF TY_ITAB2,
           SN1  TYPE I,
           A1   TYPE CHAR04,
           B1   TYPE CHAR02,
           C1   TYPE CHAR02,
           SN2  TYPE I,
           A2   TYPE CHAR04,
           B2   TYPE CHAR02,
           C2   TYPE CHAR02,
        END OF TY_ITAB2.
DATA: LT_ITAB1 TYPE TABLE OF TY_ITAB1,
      LT_ITAB2 TYPE TABLE OF TY_ITAB2,
      LS_ITAB1 TYPE          TY_ITAB1,
      LS_ITAB2 TYPE          TY_ITAB2,
      LV_MOD   TYPE          I.
 
DATA: LV_COUNTER,  TYPE I,
            LV_TOTLINE      TYPE I. 

LS_ITAB1-SN = 1.
LS_ITAB1-A  = 1001.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 2.
LS_ITAB1-A  = 1002.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 3.
LS_ITAB1-A  = 1003.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 4.
LS_ITAB1-A  = 1004.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
 
LOOP AT LT_ITAB1 INTO LS_ITAB1.
  LV_COUNTER = SY-TABIX.
  LV_MOD = SY-TABIX MOD 2.
  CASE LV_MOD.
    WHEN 1.    
      LS_ITAB2-SN1 = LS_ITAB1-SN.
      LS_ITAB2-A1 = LS_ITAB1-A.
      LS_ITAB2-B1 = LS_ITAB1-B.
      LS_ITAB2-C1 = LS_ITAB1-C.
    WHEN 0.
      LS_ITAB2-SN2 = LS_ITAB1-SN.
      LS_ITAB2-A2  = LS_ITAB1-A.
      LS_ITAB2-B2  = LS_ITAB1-B.
      LS_ITAB2-C2  = LS_ITAB1-C.
      APPEND LS_ITAB2 TO LT_ITAB2.
  ENDCASE.
ENDLOOP.

LV_MOD = LV_COUNTER MOD 2.
IF LV_MOD = 1.
  DESCRIBE TABLE LT_ITAB2 LINES LV_TOTLINE.
  DELETE LT_ITAB2 INDEX LV_TOTLINE
ENDIF.

Max

Read only

0 Likes
1,430

hi,

Divide no. of records by 2. suppose u have 201 records in itab1 then mid = 201/ 2 = 100.

atmost itab2 can have 101 records.

Please do changes in my given code with below.

if ( mid mod 2) ne 0.

mid = mid + 1.

endif.

in loop at itab1, write condition if sy-tabix LE mid.

...

...

...

else.

exit.

endif.

int = mid + sy-tabix.

move itab1 to itab.

read table itab1 into wa1 index int.

....

....

clear wa1.

endloop.

Edited by: Kandula Thilotham Reddy on Jun 12, 2009 12:11 PM

Edited by: Kandula Thilotham Reddy on Jun 12, 2009 12:12 PM

Read only

Former Member
0 Likes
1,430

Hi,

Please try this code...



    lv_coverage_count = 1.
    PERFORM write_window_e USING 'SPACE_LINE'.
    LOOP AT i_coverage.
      IF lv_coverage_count = 1.
        gv_coverage1 = i_coverage-text.
        lv_coverage_count = lv_coverage_count + 1.
        IF sy-tabix = lv_count.
          PERFORM write_window_e USING 'ITEM_NM_COVERAGE'.
        ENDIF.
      ELSEIF lv_coverage_count = 2.
        gv_coverage2 = i_coverage-text.
        IF z_new_line = 'Y'.
          PERFORM write_window_e USING 'ITEM_NM_FIRST_COVERAGE'.
        ELSEIF lv_count EQ sy-tabix.
          PERFORM write_window_e USING 'ITEM_NM_COVERAGE'.
        ELSE.
          PERFORM write_window_e USING 'ITEM_NM_COVERAGE'.
        ENDIF.
        MOVE 'N' TO z_new_line.
        CLEAR: lv_column1,lv_column2,wa_text,t_coverage.
        CLEAR: gv_coverage1,gv_coverage2.
        lv_coverage_count = 1.
      ENDIF.
    ENDLOOP.

Read only

Former Member
0 Likes
1,430

Hi Kelly,

here are the steps that would help achieve ur requirement.. kindly chk

itab type table of work_area (with 4 cols)

itab-final type table of wa_final (with 8 cols)

data: w_lines type i,

w_index type i value 1.

describe table itab lines w_lines.

w_lines = w_lines / 2.

loop at itab into work_area.

if sy-tabix le w_lines.

wa_final-col1 = work_area-col1.

wa_final-col2 = work_area-col2.

wa_final-col13= work_area-col3.

wa_final-col4 = work_area-col4.

append wa_final to itab_final.

else.

clear wa_final.

wa_final-col5 = work_area-col1.

wa_final-col6 = work_area-col2.

wa_final-col7= work_area-col3.

wa_final-col8= work_area-col4.

modify itab_final from wa_final index w_index transporting col5 col6 col7 col8.

add 1 to w_index.

endif.

endloop.

Regards.

Read only

Former Member
0 Likes
1,430

Hi Jim,

try your luck with the below code.

DATA: BEGIN OF it_main OCCURS 0,

srno(3) TYPE n,

a(4) TYPE n,

b(2) TYPE n,

c(2) TYPE n,

END OF it_main.

DATA: v_num TYPE sy-tabix,

v_num1 TYPE sy-tabix,

v_num2 TYPE sy-tabix,

v_count type sy-tabix.

DATA: itab1 LIKE it_main OCCURS 0 WITH HEADER LINE,

itab2 LIKE it_main OCCURS 0 WITH HEADER LINE.

it_main-srno = 1.

it_main-a = 1001.

it_main-b = 10.

it_main-c = 20.

APPEND it_main.

it_main-srno = 2.

it_main-a = 1002.

it_main-b = 10.

it_main-c = 20.

APPEND it_main.

it_main-srno = 3.

it_main-a = 1003.

it_main-b = 10.

it_main-c = 20.

APPEND it_main.

it_main-srno = 4.

it_main-a = 1004.

it_main-b = 10.

it_main-c = 20.

APPEND it_main.

DO.

if v_count MOD 4 = 0.

v_num1 = v_count + 1.

else.

v_num1 = v_num1 + 1.

endif.

READ TABLE it_main INDEX v_num1.

IF sy-subrc NE 0.

EXIT.

ELSE.

itab1 = it_main.

APPEND itab1.

v_count = v_count + 1.

ENDIF.

v_num2 = v_num1 + 2.

READ TABLE it_main INDEX v_num2.

IF sy-subrc NE 0.

EXIT.

ELSE.

itab2 = it_main.

APPEND itab2.

v_count = v_count + 1.

ENDIF.

ENDDO.

WRITE:/5 'Srno',

10 'A',

15 'B',

20 'C',

25 'Srno',

30 'A',

35 'B',

40 'C'.

LOOP AT itab1.

v_num = v_num + 1.

READ TABLE itab2 INDEX v_num.

WRITE:/5 itab1-srno,

10 itab1-a,

15 itab1-b,

20 itab1-c,

25 itab2-srno,

30 itab2-a,

35 itab2-b,

40 itab2-c.

ENDLOOP.

Regards,

Kumar Bandanadham

Read only

Former Member
0 Likes
1,430

Hi,

Try the below code, may be its easy and efficient

Report zdk_test.
TYPES : BEGIN OF TY_ITAB1,
           SN  TYPE I,
           A   TYPE CHAR04,
           B   TYPE CHAR02,
           C   TYPE CHAR02,
        END OF TY_ITAB1.

TYPES : BEGIN OF TY_ITAB2,
           SN1  TYPE I,
           A1   TYPE CHAR04,
           B1   TYPE CHAR02,
           C1   TYPE CHAR02,
           SN2  TYPE I,
           A2   TYPE CHAR04,
           B2   TYPE CHAR02,
           C2   TYPE CHAR02,
        END OF TY_ITAB2.
DATA: LT_ITAB1 TYPE TABLE OF TY_ITAB1,
      LT_ITAB2 TYPE TABLE OF TY_ITAB2,
      LS_ITAB1 TYPE          TY_ITAB1,
      LS_ITAB1_tmp TYPE TY_ITAB1,
      LS_ITAB2 TYPE          TY_ITAB2,
      LV_MOD   TYPE          I,
      LV_FLG    TYPE          C.

DATA : count TYPE i, count1 TYPE i.

LS_ITAB1-SN = 1.
LS_ITAB1-A  = 1001.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 2.
LS_ITAB1-A  = 1002.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 3.
LS_ITAB1-A  = 1003.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 4.
LS_ITAB1-A  = 1004.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.
LS_ITAB1-SN = 5.
LS_ITAB1-A  = 1005.
LS_ITAB1-B  = 10.
LS_ITAB1-C  = 20.
APPEND LS_ITAB1 TO LT_ITAB1.

DESCRIBE TABLE LT_ITAB1.
Count = sy-tfill.
Count =  Count / 2 .
Count1 = Count + 1.

LOOP AT LT_ITAB1 INTO LS_ITAB1 TO count.
  Clear LS_ITAB1_tmp.
  READ TABLE LT_ITAB1 INTO LS_ITAB1_tmp INDEX Count1.

      LS_ITAB2-SN1 = LS_ITAB1-SN.
      LS_ITAB2-A1 = LS_ITAB1-A.
      LS_ITAB2-B1 = LS_ITAB1-B.
      LS_ITAB2-C1 = LS_ITAB1-C.
      LS_ITAB2-SN2 = LS_ITAB1_tmp-SN.
      LS_ITAB2-A2  = LS_ITAB1_tmp-A.
      LS_ITAB2-B2  = LS_ITAB1_tmp-B.
      LS_ITAB2-C2  = LS_ITAB1_tmp-C.
      APPEND LS_ITAB2 TO LT_ITAB2.
Count1 = Count1 + 1.
ENDLOOP.

Regards

Karthik D

Edited by: Karthik D on Jun 12, 2009 4:00 PM