‎2006 Nov 24 7:27 AM
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
‎2006 Nov 24 7:34 AM
code seems ok but one more advice to clear ZDATE also.
Hopefully it'll work.
Regards
Shashi
‎2006 Nov 24 7:34 AM
CLEAR: ITAB, ITAB1, ITAB2,ZDATE
, ZTIME
.<b> --->Clear Times also.</b>
regards
prabhu
‎2006 Nov 24 7:38 AM
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
‎2006 Nov 24 8:46 AM
Hi,
Still it's not working.
Pls could anyone give me the code as to how to proceed?
Regards,
Sipra
‎2006 Nov 24 9:05 AM
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