cancel
Showing results for 
Search instead for 
Did you mean: 

loop at itab

Former Member
0 Kudos

Hi experts,

Iam trying to display report like this.


fld1                   fld2                     fld3
---------------------------------------------------------
WQIYDGIWEUDOIUWQL      Site Management          shorttext
                       Material Management      shorttext
                       Quality Management       shorttext
---------------------------------------------------------

The above details are in one row.

fld2 details are in one ITAB1(since many rows are there).

fld3 details are in one itab2(since many rows are there).

While iam looping the above tables, iam getting like this.


fld1                   fld2                     fld3
---------------------------------------------------------
WQIYDGIWEUDOIUWQL      Site Management          
                       Material Management      
                       Quality Management       shorttext
                                                shorttext
                                                shorttext
---------------------------------------------------------

Iam getting some space at FLD3.How can i move up that FLD3 values? Here is my code.

itab1(fld2 see above)


LOOP AT T_DET.
    LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM.
          FCOUNT = FCOUNT + 1.
          IF FCOUNT = 1.           " IF IT IS FIRST ROW
            <b>WRITE: 42(25) T_LONG-LTEXT.</b>
          ELSE.
            <b>WRITE:/42(25) T_LONG-LTEXT.</b>
          ENDIF.        
        ENDLOOP.

itab2(fild 3)


        SCOUNT = 0.
        LOOP AT ITAB WHERE QMNUM = T_DET-QMNUM.
          SCOUNT = SCOUNT + 1.
          IF SCOUNT EQ 1.
            <b>WRITE:110(80) ITAB-DESC.</b>
          ELSE.
           <b> WRITE:/110(80) ITAB-DESC.</b>
          ENDIF.          
        ENDLOOP.
 ENDLOOP.

Can any one tell me where to make changes?

reward guaranteed

kaki

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi Kaki,

Take another variable as follows, and then see my changes in BOLD below,

<b>DATA: lv_start_line TYPE i.</b>

LOOP AT T_DET.
<b>****Are you not writing some thing from this table?
****If so then fill lv_start_line here
    lv_start_line = sy-linno.</b>
    
    LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM.
          FCOUNT = FCOUNT + 1.
          IF FCOUNT = 1.           " IF IT IS FIRST ROW
            WRITE: 42(25) T_LONG-LTEXT.
<b>****You can also fill lv_start_line here if not above
            lv_start_line = sy-linno.</b>
          ELSE.
            WRITE:/42(25) T_LONG-LTEXT.
          ENDIF.        
        ENDLOOP.
 


itab2(fild 3)

        SCOUNT = 0.
        LOOP AT ITAB WHERE QMNUM = T_DET-QMNUM.
          SCOUNT = SCOUNT + 1.
          IF SCOUNT EQ 1.
<b>****Now lets go to the first line and start printing
            SKIP TO LINE lv_start_line.</b>
            WRITE:110(80) ITAB-DESC.
          ELSE.
            WRITE:/110(80) ITAB-DESC.
          ENDIF.          
        ENDLOOP.
 ENDLOOP.

Also, I wrote a small example below go through it if you have further doubts..

REPORT zsritest.

DATA: lv_cursor_line TYPE i,
      lv_count TYPE i,
      lt_numbers TYPE i OCCURS 0 WITH HEADER LINE,
      BEGIN OF lt_addition OCCURS 0,
        number TYPE i,
        result TYPE i,
      END OF lt_addition,
      lt_multiply LIKE lt_addition OCCURS 0 WITH HEADER LINE.

DO 10 TIMES.

  lt_numbers = lt_addition-number = lt_multiply-number = sy-index.
  APPEND lt_numbers.

  lt_addition-result = sy-index + 1.
  APPEND lt_addition.

  lt_addition-result = sy-index + 2.
  APPEND lt_addition.

  lt_multiply-result = sy-index * 2.
  APPEND lt_multiply.

  lt_multiply-result = sy-index * 3.
  APPEND lt_multiply.

  lt_multiply-result = sy-index * 4.
  APPEND lt_multiply.

ENDDO.

LOOP AT lt_numbers.

  WRITE: /0(10) lt_numbers.
  lv_cursor_line = sy-linno.

  lv_count = 0.
  LOOP AT lt_addition WHERE number EQ lt_numbers.
    ADD 1 TO lv_count.
    IF lv_count EQ 1.
      WRITE: 10(10) lt_addition-result.
    ELSE.
      WRITE: /10(10) lt_addition-result.
    ENDIF.
  ENDLOOP.

  lv_count = 0.
  LOOP AT lt_multiply WHERE number EQ lt_numbers.
    ADD 1 TO lv_count.
    IF lv_count EQ 1.
      SKIP TO LINE lv_cursor_line.
      WRITE: 20(10) lt_multiply-result.
    ELSE.
      WRITE: /20(10) lt_multiply-result.
    ENDIF.
  ENDLOOP.

ENDLOOP.

Hope this helps..

Sri

<b>Did this help??</b>

Message was edited by: Srikanth Pinnamaneni

Former Member
0 Kudos

Hi srikanth,

when ITAB values coming up,T_LONG values are getting truncated(iam not getting all the values,except first row).I may have many values T_LONG.


LOOP AT T_DET.
        WRITE:/ SPACE, SNO,
              7(15) T_DET-QMNUM,
             19(20) T_DET-REFNUM,
             69(40) T_DET-QMTXT.

        FCOUNT = 0.
        <b>LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM.</b>
          FCOUNT = FCOUNT + 1.
          IF FCOUNT = 1.
            WRITE: 42(25) T_LONG-LTEXT.
          ELSE.
            WRITE:/42(25) T_LONG-LTEXT.
          ENDIF.
          PERFORM VLINES.
        ENDLOOP.

        FCOUNT = 0.
  <b>      LOOP AT ITAB WHERE QMNUM = T_DET-QMNUM.</b>
          FCOUNT = FCOUNT + 1.
          IF FCOUNT EQ 1.
            WRITE:110(80) ITAB-DESC.
          ELSE.
            WRITE:/110(80) ITAB-DESC.
          ENDIF.
          PERFORM VLINES.
        ENDLOOP.
ENDLOOP.

<b></b>

Former Member
0 Kudos

Hi,

What is in PERFORM VLINES. ? Also did you check and apply the logic from my previous post?

Give your complete code here so that we can go through it.

Also you can proceed according to Amit's suggestion and merge the data into an output table and then write to the list using that table..

Hope this helps..

Sri

jayanthi_jayaraman
Active Contributor
0 Kudos

Hi,

Try this sample code and kindly reward points if it helps.

itab1[] = itab[].

LOOP AT T_DET.

WRITE:/ SPACE, SNO,

7(15) T_DET-QMNUM,

19(20) T_DET-REFNUM,

69(40) T_DET-QMTXT.

FCOUNT = 0.

LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM.

FCOUNT = FCOUNT + 1.

IF FCOUNT = 1.

WRITE 42(25) T_LONG-LTEXT.

read table ITAB1 with key QMNUM = T_DET-QMNUM.

if sy-subrc eq 0.

WRITE 110(80) ITAB-DESC.

delete itab1 where qmnum = t_det-qmnum

<b>and desc = itab1-desc</b>.

endif.

ELSE.

WRITE:/42(25) T_LONG-LTEXT.

read table ITAB1 with key QMNUM = T_DET-QMNUM.

if sy-subrc eq 0.

WRITE 110(80) ITAB-DESC.

delete itab1 where qmnum = t_det-qmnum

<b>desc = itab1-desc.</b> endif.

ENDIF.

PERFORM VLINES.

ENDLOOP.

ENDLOOP.

Message was edited by: Jayanthi Jayaraman

Former Member
0 Kudos

Hi Jayanthi,

This code is working fine.But it is reading only first record in the ITAB(WA).


 ITAB1[] = ITAB[].
LOOP AT T_DET.
        WRITE:/ SPACE, SNO,
              7(15) T_DET-QMNUM,
             19(20) T_DET-REFNUM,
             69(40) T_DET-QMTXT.



        FCOUNT = 0.
        LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM.
          FCOUNT = FCOUNT + 1.
          IF FCOUNT = 1.
            WRITE 42(25) T_LONG-LTEXT.
            READ TABLE ITAB1 INTO WA WITH KEY QMNUM = T_DET-QMNUM.
            IF SY-SUBRC EQ 0.
              <b>WRITE 110(80) WA-DESC.</b>
              DELETE ITAB1 WHERE QMNUM = T_DET-QMNUM.
            ENDIF.
          ELSE.
            WRITE:/42(25) T_LONG-LTEXT.
            READ TABLE ITAB1 INTO WA WITH KEY QMNUM = T_DET-QMNUM.
            IF SY-SUBRC EQ 0.
              <b>WRITE:/110(80) WA-DESC.</b>
              DELETE ITAB1 WHERE QMNUM = T_DET-QMNUM.
            ENDIF.
          ENDIF.
          PERFORM VLINES.
        ENDLOOP.

jayanthi_jayaraman
Active Contributor
0 Kudos

Hi,

Here is the updated code.Check it.You missed the AND in delete statements.

itab1[] = itab[].

LOOP AT T_DET.

WRITE:/ SPACE, SNO,

7(15) T_DET-QMNUM,

19(20) T_DET-REFNUM,

69(40) T_DET-QMTXT.

FCOUNT = 0.

LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM.

FCOUNT = FCOUNT + 1.

IF FCOUNT = 1.

WRITE 42(25) T_LONG-LTEXT.

read table ITAB1 with key QMNUM = T_DET-QMNUM.

if sy-subrc eq 0.

WRITE 110(80) ITAB-DESC.

delete itab1 where <b>qmnum = t_det-qmnum</b><b>and desc = itab1-desc.</b>

endif.

ELSE.

WRITE:/42(25) T_LONG-LTEXT.

read table ITAB1 with key QMNUM = T_DET-QMNUM.

if sy-subrc eq 0.

WRITE 110(80) ITAB-DESC.

delete itab1 where <b>qmnum = t_det-qmnum

and desc = itab1-desc</b>.

endif.

ENDIF.

PERFORM VLINES.

ENDLOOP.

ENDLOOP.

Former Member
0 Kudos

Hi Jayanthi & Wenceslaus G

Thanks a lot.

Full points alloted

kaki

Answers (12)

Answers (12)

Former Member
0 Kudos

Try this...


DATA count TYPE I.
      WRITE:/ SPACE, SNO,
              7(15) T_DET-QMNUM,
             19(20) T_DET-REFNUM,
             69(40) T_DET-QMTXT.



        FCOUNT = 0.
        LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM.
          FCOUNT = FCOUNT + 1.
          IF FCOUNT = 1.
            WRITE 42(25) T_LONG-LTEXT.
            COUNT = 0.
            LOOP AT  ITAB1 WHERE QMNUM = T_DET-QMNUM.
               COUNT  = COUNT + 1.
            IF FCOUNT EQ COUNT.
              IF  SY-SUBRC EQ 0.
              <b>WRITE 110(80) WA-DESC.</b>
             ELSE.
               <b>WRITE 110(80) WA-DESC.</b>
           ENDIF.
          PERFORM VLINES.
        ENDLOOP.

Former Member
0 Kudos

Can you show

how your current output is displayed now?

Former Member
0 Kudos

Is QMNUM field value unique in tables T_LONG and ITAB?

And can you please give the format in which you want to have your output as.

Former Member
0 Kudos

yes, QMNUM is the main key for all ITABs.

Out put like this.


T_DET               T_LONG                     ITAB
---------------------------------------------------------
200000163         Site Management             somettest
                  Material Management         some 3lines
                  Quality  Management 
---------------------------------------------------------
200000164         Site Management             somettest
                  Material Management         some 5 lines
                  Quality  Management 
                  some 6 lines

---------------------------------------------------------

Former Member
0 Kudos

Hi Kaki,

1. This kind of logic won't give desired output

reason : we cannot GO BACK to Previous Line

after writing some data.

2. hence, we need to use some different

logic

3. The logic would be something like this :

(there are 3 itabs)

(delcare one more itab LINEITAB having

only one field of length say 100 characters,

for printing purpose - first we will

write the data into this intenal table field,

in the loops, AFTER THAT, we will actuallly WRITE

on screen)

Loop at Itab1.

refresh lineitab.

Write field to Lineitab. (at some position)

Loop at itab2.

Write field to lineitab (at desired positoni)

append lineitab.

endloop.

Loop at itab3.

Read Lineitab index 1 (2,3,4,..)

Write field to lineitab (at desired positoni)

modify lineitab.

endloop.

Endloop.

4. My point is that directly on screen we

cannot WRITE.

5. Instead we should use some INTERMEDIATE

INTERNAL TABLE.

We should put values in this first.

then we should write this LINEITAB.

regards,

amit m.

Former Member
0 Kudos

Can you post your full src code with tables declaration so that we could help you on that.

Former Member
0 Kudos

HI Wenceslaus G

This is my code.Just enter the dates in the selection screen.



REPORT  YQM_NOTIFICATION
            MESSAGE-ID  ZM
            NO STANDARD PAGE HEADING
            LINE-SIZE 187
            LINE-COUNT 65(1).

*&---------------------------------------------------------------------*
* Tables
*&---------------------------------------------------------------------*

TABLES: QPCT,
        QPGT,
        QMEL,
        QMMA,
        COBRB,
        CSKT,
        AUFK,
        IHPA,
        HRP1000.

*&---------------------------------------------------------------------*
* Data Declarations
*&---------------------------------------------------------------------*

DATA:F_TDOBJECT LIKE THEAD-TDOBJECT,
     F_TDNAME   LIKE THEAD-TDNAME,
     F_TDID     LIKE THEAD-TDID,
     ITAB_LINES LIKE TLINE OCCURS 0 WITH HEADER LINE.

DATA:BEGIN OF ITAB OCCURS 10,
      QMNUM LIKE QMEL-QMNUM,
      DESC(140),
     END OF ITAB.

DATA: T_ITAB LIKE ITAB OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF T_HDR OCCURS 0,
        GROUP LIKE QPGT-CODEGRUPPE,
        CODE LIKE QPCT-CODE,
        TEXT LIKE QPCT-KURZTEXT,
        NAME(32), " LIKE QPGT-KURZTEXT,
      END OF T_HDR.


DATA: BEGIN OF T_DET OCCURS 10,
       SNO TYPE I,
       QMNUM LIKE QMEL-QMNUM,
       QMART LIKE QMEL-QMART,
       MCTXT LIKE CSKT-MCTXT,
       REFNUM LIKE QMEL-REFNUM,
       PARNR LIKE IHPA-PARNR,
       QMTXT LIKE QMEL-QMTXT,
       QMGRP LIKE QMEL-QMGRP,
       QMCOD LIKE QMEL-QMCOD,
       OBJNR LIKE QMEL-OBJNR,
       AUFNR LIKE AUFK-AUFNR,
       KOSTL LIKE AUFK-KOSTL,
       DESC(140),
       MANUM LIKE QMMA-MANUM,
       MNCOD LIKE QMMA-MNCOD,
       TDNAME(16),
      END OF T_DET.

DATA: BEGIN OF T_COBRB OCCURS 0,
       OBJNR LIKE COBRB-OBJNR,
       KOSTL LIKE COBRB-KOSTL,
       LTEXT LIKE CSKT-LTEXT,
      END OF T_COBRB.

DATA: BEGIN OF T_LONG OCCURS 0,
        QMNUM LIKE QMEL-QMNUM,
        LTEXT LIKE CSKT-LTEXT,
      END OF T_LONG.

DATA: T_FINAL LIKE T_DET OCCURS 0 WITH HEADER LINE.


DATA: SNO(3).
DATA: CHKET(2).
DATA: G_CHK3(4).
DATA: FLAG.
DATA: ETNUM LIKE AUFK-AUFNR.

*&---------------------------------------------------------------------*
* Selection Screen
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:S_QMNUM FOR QMEL-QMNUM,
                  S_QMART FOR QMEL-QMART,
                  S_QMDAT FOR QMEL-QMDAT.

SELECTION-SCREEN END OF BLOCK A1.


*&---------------------------------------------------------------------*
* Data Selection
*&---------------------------------------------------------------------*
TOP-OF-PAGE.
  PERFORM SET_PAGE_HEADER.

END-OF-PAGE.

START-OF-SELECTION.
  PERFORM GET_DATA.
  PERFORM DISPLAY_DATA.

END-OF-SELECTION.

*&--------------------------------------------------------------------*
*&      FORM  GET_DATA
*&--------------------------------------------------------------------*

FORM GET_DATA.

*--TO GET HEADER
  SELECT CODEGRUPPE CODE KURZTEXT FROM QPCT INTO TABLE T_HDR
                                  WHERE KATALOGART = 'D' AND
                               CODEGRUPPE BETWEEN 'ET001' AND
                                                  'ET006'.

  LOOP AT T_HDR.
    SELECT SINGLE * FROM QPGT WHERE CODEGRUPPE = T_HDR-GROUP AND
                                    KATALOGART = 'D' AND
                                    SPRACHE = 'EN'.
    IF SY-SUBRC = 0.
      T_HDR-NAME = QPGT-KURZTEXT.
      MODIFY T_HDR.
      CLEAR T_HDR.
    ENDIF.
  ENDLOOP.

*--TO GET DETAILS

  SELECT QMNUM REFNUM QMDAT QMTXT OBJNR QMGRP QMCOD QMART
    FROM QMEL
    INTO CORRESPONDING FIELDS OF TABLE T_DET
                              WHERE QMNUM IN S_QMNUM AND
                                    QMART IN S_QMART AND
                                    QMDAT IN S_QMDAT.


  IF SY-SUBRC NE 0.
    MESSAGE S000(ZM) WITH 'No data found on this selection !'.
    LEAVE LIST-PROCESSING.
  ENDIF.

  LOOP AT T_DET.
    G_CHK3 = T_DET-QMNUM+0(4).
    IF G_CHK3 EQ '0003'.
      DELETE T_DET INDEX SY-TABIX.
    ENDIF.
  ENDLOOP.


  LOOP AT T_DET.
    SELECT SINGLE * FROM QMMA WHERE QMNUM = T_DET-QMNUM AND
                                  MNCOD = '100'.
    IF SY-SUBRC = 0.
      T_DET-MANUM = QMMA-MANUM.
      T_DET-MNCOD = '100'.
      MODIFY T_DET.
    ENDIF.
    CONCATENATE T_DET-QMNUM T_DET-MANUM INTO T_DET-TDNAME.

    IF T_DET-MNCOD = '100'.


*-- to get long text
      F_TDID     = 'LTQM'.
*    F_TDNAME   = T_DET-QMNUM.
      F_TDNAME = T_DET-TDNAME.
      F_TDOBJECT = 'QMMA'.

      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          CLIENT                  = SY-MANDT
          ID                      = F_TDID
          LANGUAGE                = SY-LANGU
          NAME                    = F_TDNAME
          OBJECT                  = F_TDOBJECT
        TABLES
          LINES                   = ITAB_LINES
        EXCEPTIONS
          ID                      = 1
          LANGUAGE                = 2
          NAME                    = 3
          NOT_FOUND               = 4
          OBJECT                  = 5
          REFERENCE_CHECK         = 6
          WRONG_ACCESS_TO_ARCHIVE = 7
          OTHERS                  = 8.
      DESCRIBE TABLE ITAB_LINES LINES SY-TFILL.
      IF SY-TFILL > 0.
        LOOP AT ITAB_LINES.
          ITAB-QMNUM = T_DET-QMNUM.
          ITAB-DESC = ITAB_LINES-TDLINE.
          APPEND ITAB.
          CLEAR ITAB.
        ENDLOOP.
      ENDIF.


*-- TO GET OBJNR FROM AUFK ( FOR PRODUCTION ORDER COST DISPLAY )

*      IF T_DET-QMNUM+0(2) NE 'ET'.
*        CONCATENATE 'ET0' T_DET-QMNUM+3(9) INTO ETNUM.
*      ELSE.
*        ETNUM = T_DET-QMNUM.
*      ENDIF.

      IF T_DET-QMNUM+0(1) NE 'E'.
        CONCATENATE 'E' T_DET-QMART T_DET-QMNUM+3(9) INTO ETNUM.
      ELSE.
        ETNUM = T_DET-QMNUM.
      ENDIF.


      SELECT SINGLE * FROM AUFK WHERE AUFNR = ETNUM AND
                                      KOKRS = '1000'.
      IF SY-SUBRC = 0.
        T_DET-AUFNR = AUFK-AUFNR.
        T_DET-KOSTL = AUFK-KOSTL.
        T_DET-OBJNR = AUFK-OBJNR.
        MODIFY T_DET.
      ENDIF.

    ENDIF. " MNCOD
  ENDLOOP.


  SELECT OBJNR KOSTL
            INTO CORRESPONDING FIELDS OF TABLE T_COBRB
                  FROM COBRB FOR ALL ENTRIES IN T_DET
                         WHERE OBJNR = T_DET-OBJNR.

  LOOP AT T_COBRB.
    SELECT SINGLE * FROM CSKT WHERE SPRAS = 'EN' AND
                                    KOKRS = '1000' AND
                                    KOSTL = T_COBRB-KOSTL.
    IF SY-SUBRC = 0.
      T_COBRB-LTEXT = CSKT-LTEXT.
      MODIFY T_COBRB.
    ENDIF.
  ENDLOOP.

*  LOOP AT T_COBRB.
*    LOOP AT T_DET WHERE OBJNR NE T_COBRB-OBJNR.
*      DELETE T_DET INDEX SY-TABIX.
*    ENDLOOP.
*  ENDLOOP.

  LOOP AT T_COBRB.
    LOOP AT T_DET WHERE OBJNR = T_COBRB-OBJNR.
      T_LONG-QMNUM = T_DET-QMNUM.
      T_LONG-LTEXT = T_COBRB-LTEXT.
      APPEND T_LONG.
    ENDLOOP.
  ENDLOOP.


  DELETE T_LONG WHERE LTEXT = ''.

  SORT T_DET.
  DELETE ADJACENT DUPLICATES FROM T_DET.

ENDFORM.                    "GET_DATA

*&--------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM DISPLAY_DATA.
  DATA: NUM(2).
  DATA: G_NAMES(100).
  DATA: G_LEN(2) TYPE N.
  DATA: FCOUNT TYPE I.
  DATA: MCOUNT TYPE I.
  DATA: SCOUNT TYPE I.


  LOOP AT T_HDR.
    LOOP AT T_DET WHERE QMGRP = T_HDR-GROUP AND
                        QMCOD = T_HDR-CODE.

      IF T_DET-MNCOD EQ '100'.
        FLAG = 'X'.

        ULINE.
        CONCATENATE T_HDR-NAME '-' T_HDR-TEXT INTO G_NAMES.
        CONDENSE G_NAMES.
*      write:/ t_hdr-name, '-', t_hdr-text.
        WRITE: G_NAMES.
        G_LEN = STRLEN( G_NAMES ).
        WRITE:/ SPACE.
        WRITE AT 1(G_LEN) SY-ULINE.
        ULINE.
        NUM = 0.

        SNO = SNO + 1.
        NUM = NUM + 1.
        IF NUM GT 1.
          ULINE.
        ENDIF.


        WRITE:/ SPACE, SNO,
              7(15) T_DET-QMNUM,
             19(20) T_DET-REFNUM,
             69(40) T_DET-QMTXT.


        PERFORM VLINES.

<b>        FCOUNT = 0.
        LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM.
          FCOUNT = FCOUNT + 1.
          IF FCOUNT = 1.
            WRITE: 42(25) T_LONG-LTEXT.
          ELSE.
            WRITE:/42(25) T_LONG-LTEXT.
          ENDIF.
          PERFORM VLINES.
        ENDLOOP.</b>

<b>        FCOUNT = 0.
        LOOP AT ITAB WHERE QMNUM = T_DET-QMNUM.
          FCOUNT = FCOUNT + 1.
          IF FCOUNT EQ 1.
            WRITE:110(80) ITAB-DESC.
          ELSE.
            WRITE:/110(80) ITAB-DESC.
          ENDIF.
          PERFORM VLINES.
        ENDLOOP.</b>

      ENDIF.
    ENDLOOP.
  ENDLOOP.
  ULINE.
ENDFORM.                    "GET_DATA


*&--------------------------------------------------------------------*
*&      Form  set_page_header
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM SET_PAGE_HEADER .

  DATA:IT_T247 TYPE STANDARD TABLE OF T247 WITH HEADER LINE.
  DATA: G_HEAD(72).
  DATA: V_MONTH(9), V_YEAR(4).
  V_MONTH = S_QMDAT-HIGH+4(2).
  V_YEAR = S_QMDAT-HIGH+0(4).

*  CALL FUNCTION 'MONTH_NAMES_GET'
*    EXPORTING
*      LANGUAGE              = SY-LANGU
*    TABLES
*      month_names           = it_t247
*    EXCEPTIONS
*      MONTH_NAMES_NOT_FOUND = 1
*      OTHERS                = 2.
*  read table it_t247 with key mnr = v_month.
*  v_month = it_t247-ktx.

  IF FLAG = 'X'.

    IF V_MONTH = '01'.
      V_MONTH = 'January'.
    ELSEIF V_MONTH = '02'.
      V_MONTH = 'February'.
    ELSEIF V_MONTH = '03'.
      V_MONTH = 'March'.
    ELSEIF V_MONTH = '04'.
      V_MONTH = 'April'.
    ELSEIF V_MONTH = '05'.
      V_MONTH = 'May'.
    ELSEIF V_MONTH = '06'.
      V_MONTH = 'June'.
    ELSEIF V_MONTH = '07'.
      V_MONTH = 'July'.
    ELSEIF V_MONTH = '08'.
      V_MONTH = 'August'.
    ELSEIF V_MONTH = '09'.
      V_MONTH = 'September'.
    ELSEIF V_MONTH = '10'.
      V_MONTH = 'October'.
    ELSEIF V_MONTH = '11'.
      V_MONTH = 'November'.
    ELSEIF V_MONTH = 12.
      V_MONTH = 'December'.
    ENDIF.


    IF S_QMDAT-LOW NE '00000000' AND S_QMDAT-HIGH NE '00000000'.
      CONCATENATE 'ET Raised in' V_MONTH V_YEAR INTO
                               G_HEAD SEPARATED BY SPACE.
      WRITE:/50(35) G_HEAD.
      WRITE:/50(27) SY-ULINE.
    ELSE.
      WRITE:/50(25)'ET details'.
      WRITE:/50(10) SY-ULINE.
    ENDIF.

    SKIP.
    ULINE.

    WRITE :1(6)  ' S.N0'    COLOR COL_HEADING,
           7(15) 'REF NO'               COLOR COL_HEADING,
           21(21) 'CONTRACT NO'              COLOR COL_HEADING,
           42(27) 'A-DIV'       COLOR COL_HEADING,
           69(44) 'DESCRIPTION'       COLOR COL_HEADING,
           110(75) 'DEFECT'      COLOR COL_HEADING.

    PERFORM VLINES.
  ELSE.
    MESSAGE S000(ZM) WITH 'No data found on this selection !'.
    LEAVE LIST-PROCESSING.
  ENDIF.
ENDFORM.                    " set_page_header

*&--------------------------------------------------------------------*
*&      Form  VLINES
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM VLINES.
  WRITE : 1 SY-VLINE,  6 SY-VLINE, 18 SY-VLINE, 40 SY-VLINE,
   68 SY-VLINE, 109 SY-VLINE , 187 SY-VLINE.
ENDFORM.                    "VLINES

Former Member
0 Kudos

Hi Kaki,

There is no need for two loop statements in your code. One loop statement is enough. Here i am assuming that itab1 & itab2 having same no. of values.

Here i am taking the t_long as itab1 & itab as itab2.

For eg...


data: count type i.
count = 1.
loop at t_long.

read table t_long where QMNUM = T_DET-QMNUM.
read table itab where QMNUM = T_DET-QMNUM.

if count = 1.
  write: 42(25) T_LONG-LTEXT, 110(80) ITAB-DESC.
  count = 0.
else.
  write: /42(25) T_LONG-LTEXT, 110(80) ITAB-DESC.
endif.

endloop.

Hope it helps.

Regards,

Maheswaran.B

Former Member
0 Kudos

Hi Kaki,

Instead of going such a manner, u have QMNUM field in both T_LONG & ITAB intrernal table.

so, u can add one field in either t_long or itab.

then modify either of the table by that value. So, Now u have one internal table which contain all three fields.

U can loop on it and display on screen.

Regards,

Digesh Panchal

Former Member
0 Kudos

Hi

Still i could not get the solution.Can any one modify my logic....

Iam trying to do with this statement.It is throwing error.

<b>read table ITAB index fcount into T_ITAB where QMNUM = T_DET-QMNUM.</b>

Former Member
0 Kudos

Is fld2 to fld3 a one-to-one relationship? If so, you can simply replace the LOOP AT T_LONG and LOOP AT ITAB with READ TABLE T_LONG and READ TABLE ITAB.

Former Member
0 Kudos

Hi Kaki

When you say Write:/ you are already in the next line. So it would always write the fld3 values after u finish executing the loop for the fld2 values. Hence u need to read the table Fld3 and while looping at fld2 values.

Loop at T_DET.

write:/ t_det-ltext.

loop at T_LONG where QMNUM = T_DET-QMNUM.

write: t_long-ltext.

read table itab with key Qnum = T_DET-QMNUM.

write: t_long-ltext.

skip.

endloop.

endloop.

Former Member
0 Kudos

Hi,

What Prashant has pointed out is correct. You are giving write statements in the first loop. After that write statements in second loop. This will obviously bring output of second loop in the nth line. My suggestion is, get column values from fiest and second internal tables into local variables and write them at once.

LOOP AT T_DET.

LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM. L_TEXT = T_LONG-LTEXT.

ENDIF.

ENDLOOP.

itab2(fild 3)

LOOP AT ITAB WHERE QMNUM = T_DET-QMNUM.

L_DESC = ITAB-DESC.

ENDLOOP.

WRITE : 42(25)L_TEXT,

110(80) L_DESC.

ENDLOOP.

Regards,

Ramesh.

former_member223537
Active Contributor
0 Kudos

Hi Kaki,

When you are looping on ITAB1 ( Fld2), if there are 3 records in ITAB1, then you are already on 3rd row when the loop of ITAB1 ends. After that you are looping on ITAB2 ( Fld3), so obviously when you say here write statement, that would come on the 3rd row or for that matter on the nth row ( where n is the no. of records in ITAB1 ( Fld2 ).

Please try the following code :

LOOP AT T_DET.

LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM. FCOUNT = FCOUNT + 1.

IF FCOUNT = 1. " IF IT IS FIRST ROW WRITE: 42(25) T_LONG-LTEXT.

ELSE.

WRITE:/42(25) T_LONG-LTEXT. ENDIF.

read table ITAB2 index fcount into wa_tab2 where <condition>.

if sy-subrc eq 0 and fcount = 1.

WRITE: 42(25) T_LONG-LTEXT.

ELSE.

WRITE:/42(25) T_LONG-LTEXT.

endif.

ENDLOOP.

endloop.

Best regards,

Prashant

Former Member
0 Kudos

This should work.


DATA I_CNT LIKE sy-index.
LOOP AT T_DET.
WRITE T_DET-FLD.
    LOOP AT T_LONG WHERE QMNUM = T_DET-QMNUM.
            i_cnt = sy-index.
            if i_cnt = 1.
                  WRITE : /42(25) T_LONG-LTEXT.
            else.
                   WRITE: 42(25) T_LONG-LTEXT.
            endif.
    LOOP AT ITAB WHERE QMNUM = T_DET-QMNUM.
          if sy-index = i_cnt.
            if sy-index = 1.
                 WRITE:/110(80) ITAB-DESC.
            else.
                 WRITE: 110(80) ITAB-DESC.
            endif.
          endif.
    ENDLOOP.
  ENDLOOP.

ENDLOOP.