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

Classical Report

Former Member
0 Likes
801

Hi,

I'm pasting my code below:

Actually I'm calculating Variance by the function module 'SD_DATETIME_DIFFERENCE' but it is giving correct output if records taken individually & in loop it is taking the last value in header for all the records in loop.pls rectify my prob.

SELECT MBLNR MJAHR BUDAT1 ETIME FROM ZGEXIT INTO TABLE ITAB

WHERE MBLNR in IMBLNR and MJAHR = IMJAHR and BUDAT1 IN S_BUDAT .

IF SY-SUBRC = 0.

SELECT MBLNR MJAHR WERKS LGORT FROM MSEG

INTO CORRESPONDING FIELDS OF table ITAB1

for all entries in ITAB

WHERE MBLNR = ITAB-MBLNR AND MJAHR = ITAB-MJAHR.

SELECT MBLNR MJAHR BUDAT OIB_BLTIME FROM MKPF INTO CORRESPONDING

FIELDS OF table ITAB2 for all entries in itab

WHERE MBLNR = ITAB-MBLNR

AND MJAHR = ITAB-MJAHR.

ENDIF.

SORT ITAB1 BY MBLNR MJAHR.

SORT ITAB2 BY MBLNR MJAHR.

LOOP AT ITAB. " WHERE MBLNR = IMBLNR OR BUDAT1 IN S_BUDAT.

READ TABLE ITAB1 WITH KEY MBLNR = ITAB-MBLNR

MJAHR = ITAB-MJAHR BINARY SEARCH.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING ITAB1 TO ITAB.

ENDIF.

READ TABLE ITAB2 WITH KEY MBLNR = ITAB-MBLNR

MJAHR = ITAB-MJAHR BINARY SEARCH.

IF SY-SUBRC = 0.

MOVE-CORRESPONDING ITAB2 TO ITAB.

ENDIF.

MODIFY ITAB TRANSPORTING WERKS LGORT BUDAT OIB_BLTIME.

CALL FUNCTION 'SD_DATETIME_DIFFERENCE'

EXPORTING

DATE1 = ITAB-BUDAT

TIME1 = ITAB-OIB_BLTIME

DATE2 = ITAB-BUDAT1

TIME2 = ITAB-ETIME

IMPORTING

DATEDIFF = ZDATE

TIMEDIFF = ZTIME

  • EARLIEST =

EXCEPTIONS

INVALID_DATETIME = 1

OTHERS = 2

.

VARIANCE = ( ZDATE * 24 ) + ZTIME.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ELSE.

MODIFY ITAB TRANSPORTING VARIANCE WHERE MBLNR in IMBLNR and

MJAHR = IMJAHR and BUDAT1 IN S_BUDAT.

ENDIF.

CLEAR: ITAB, ITAB1, ITAB2.

ENDLOOP.

Helpful answers will be rewarded.

Regards,

Sipra

5 REPLIES 5
Read only

Former Member
0 Likes
777

code seems ok but one more advice to clear ZDATE also.

Hopefully it'll work.

Regards

Shashi

Read only

Former Member
0 Likes
777

CLEAR: ITAB, ITAB1, ITAB2,ZDATE

, ZTIME

.<b> --->Clear Times also.</b>

regards

prabhu

Read only

Former Member
0 Likes
777

You MODIFY statement has the problem.

MODIFY ITAB TRANSPORTING VARIANCE WHERE <b>MBLNR in IMBLNR</b> and

<b>MJAHR = IMJAHR</b> and <b>BUDAT1 IN S_BUDAT</b>.

All you where condition attriutes are the ones you have used in the initial select query

SELECT MBLNR MJAHR BUDAT1 ETIME FROM ZGEXIT INTO TABLE ITAB

WHERE <b>MBLNR in IMBLNR</b> and <b>MJAHR = IMJAHR</b> and <b>BUDAT1 IN S_BUDAT .</b>

hence it is always modifying the first row as all data will be alike. Try to use <b>MODIFY</b> with <b>INDEX</b> so that it will modify individual lines.

Hope this will solve your problem.

Regards

Kathirvel

Read only

Former Member
0 Likes
777

Hi,

Still it's not working.

Pls could anyone give me the code as to how to proceed?

Regards,

Sipra

Read only

Former Member
0 Likes
777

You can try something like this sort,

REPORT zkb_test.

TYPES: BEGIN OF t_email,

id(5) TYPE c,

name1 TYPE ad_name1,

email TYPE ad_city1,

END OF t_email.

TYPES: BEGIN OF t_data,

id(5) TYPE c,

name1 TYPE ad_name1,

city1 TYPE ad_city1,

email TYPE ad_city1,

END OF t_data.

DATA: i_data TYPE TABLE OF t_data,

w_data TYPE t_data.

DATA: i_email TYPE TABLE OF t_email,

w_email TYPE t_email.

START-OF-SELECTION.

  • Email Table

CLEAR w_email.

w_email-id = 'A001'.

w_email-name1 = 'John1'.

w_email-email = 'John1@yahoo.com'.

APPEND w_email TO i_email .

CLEAR w_email.

w_email-id = 'A002'.

w_email-name1 = 'John2'.

w_email-email = 'John2@yahoo.com'.

APPEND w_email TO i_email.

  • Data Table

CLEAR w_data.

w_data-id = 'A001'.

w_data-name1 = 'John1'.

w_data-city1 = 'Cardiff'.

APPEND w_data TO i_data.

CLEAR w_data.

w_data-id = 'A002'.

w_data-name1 = 'John2'.

w_data-city1 = 'Liverpool'.

APPEND w_data TO i_data.

WRITE / 'Before Modify <I_DATA> Table'.

LOOP AT i_data INTO w_data .

WRITE: / sy-vline, w_data-id, sy-vline, w_data-name1, sy-vline, w_data-city1, sy-vline, w_data-email.

ENDLOOP.

  • Now Looping at Email Table and Modifyign the Data table

LOOP AT i_email INTO w_email.

CLEAR w_data.

READ TABLE i_data INTO w_data WITH KEY id = w_email-id.

IF sy-subrc EQ 0.

w_data-email = w_email-email.

MODIFY i_data FROM w_data TRANSPORTING email WHERE id = w_email-id.

ENDIF.

ENDLOOP.

WRITE / 'After Modify <I_DATA> Table'.

LOOP AT i_data INTO w_data .

WRITE: / sy-vline, w_data-id, sy-vline, w_data-name1, sy-vline, w_data-city1, sy-vline, w_data-email.

ENDLOOP.

  • Now Looping at DATA Table Modifyign the table

LOOP AT i_data INTO w_data .

IF w_data-id EQ 'A002'.

w_data-city1 = 'London'.

MODIFY i_data FROM w_data INDEX sy-tabix TRANSPORTING city1.

ENDIF.

ENDLOOP.

WRITE / 'After Modify <I_DATA> Table'.

LOOP AT i_data INTO w_data .

WRITE: / sy-vline, w_data-id, sy-vline, w_data-name1, sy-vline, w_data-city1, sy-vline, w_data-email.

ENDLOOP.

Regards

Kathirvel