on 01-20-2006 3:42 AM
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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>
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
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
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.
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.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Can you show
how your current output is displayed now?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
---------------------------------------------------------
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Can you post your full src code with tables declaration so that we could help you on that.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
96 | |
11 | |
11 | |
10 | |
9 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.