‎2008 Jul 04 7:43 AM
Hai ABAP gurus,
Actually iam doing report for engine receipts..inwhich iam getting MATNR,MENGE from MSEG table joined with MKPF table and outputting in ITAB1 internal table.Now i need to get SERIAL NO from EQUI table inwhich there are lot of serial numbers for a material.While moving that from ITAB4 to ITAB1 then only one value is moved. I need to move all the serial numbers.Pls check the code and correct me
REPORT ZFIENGINE
NO STANDARD PAGE HEADING MESSAGE-ID ZE LINE-SIZE 250.
----
Program Name : ZFIENGINE.
TCode : ZFEN.
Title : Receipt Report for Engine
Create Date : 02.07.2008
Release : 4.6C
Author : ARTHI.E
----
Description : This report is used to find engine receipted.
----
Change History
----
Date | User ID | Description | Change Label
----
| | |
| | |
| | |
| | |
| | |
----
----
*THIS PROGRAM USES FOLLOWING SUBROUTINES AND THEIR SER#
----
*
----
*eject
----
*TABLES USED IN THIS REPORT *
----
TYPE-POOLS: SLIS.
TABLES : MSEG,
MKPF,
SER03,
OBJK,
EQUI.
*eject
*----
*DATA DECLARATION
*----
DATA : BEGIN OF ITAB1 OCCURS 100,
MATNR TYPE MATNR,
MBLNR LIKE MSEG-MBLNR,
MATNR LIKE MSEG-MATNR,
WERKS LIKE MSEG-WERKS,
MENGE LIKE MSEG-MENGE,
BWART LIKE MSEG-BWART,
MJAHR LIKE MSEG-MJAHR,
EBELN LIKE MSEG-EBELN,
MENGE_STOCK LIKE MSEG-MENGE,
C_STOCK(18) TYPE C,
OBKNR LIKE SER03-OBKNR,
SERNR LIKE OBJK-SERNR,
EQUNR LIKE OBJK-EQUNR,
END OF ITAB1.
DATA : BEGIN OF ITAB4 OCCURS 100,
MATNR TYPE MATNR,
SERNR LIKE EQUI-SERNR,
EQUNR LIKE EQUI-EQUNR,
END OF ITAB4.
DATA: I_EVENTS TYPE SLIS_T_EVENT,
I_LIST_COMMENTS TYPE SLIS_T_LISTHEADER,
I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
I_LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA : WA_EVENTS LIKE LINE OF I_EVENTS,
WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
WA_LIST_COMMENTS LIKE LINE OF I_LIST_COMMENTS.
DATA : V_REPID LIKE SY-REPID,
V_ERRORFLG TYPE C.
DATA : GS_SORT TYPE SLIS_SORTINFO_ALV,
GT_SORT TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE.
*eject
----
*SELECTION-SCREEN *
----
SELECTION-SCREEN BEGIN OF BLOCK B WITH FRAME TITLE T1.
SELECT-OPTIONS : S_WERKS FOR MSEG-WERKS OBLIGATORY NO-EXTENSION
NO INTERVALS DEFAULT '1311',
S_BUDAT FOR MKPF-BUDAT OBLIGATORY.
SELECTION-SCREEN END OF BLOCK B.
----
*INITIALIZATION *
----
INITIALIZATION.
T1 = 'Selection Details'.
*eject
----
*AT SELECTION-SCREEN *
----
*START-OF-SELECTION *
----
START-OF-SELECTION.
PERFORM DISPLAYMAT.
PERFORM FILL_HEADER_DETAILS_PRC .
PERFORM DISPLAY_DATA_DT.
PERFORM EVENT_BUILD_PRC.
*
*eject
*----
*END-OF-SELECTION
*----
END-OF-SELECTION.
*eject
*----
AT SELECTION SCREEN
*----
*eject
----
01. DISPLAY "DISPLAY LIST *
----
FORM DISPLAYMAT.
*DATA : BEGIN OF ITAB1 OCCURS 100,
MATNR TYPE MATNR,
MBLNR LIKE MSEG-MBLNR,
WERKS LIKE MSEG-WERKS,
MENGE LIKE MSEG-MENGE,
BWART LIKE MSEG-BWART,
MJAHR LIKE MSEG-MJAHR,
EBELN LIKE MSEG-EBELN,
MENGE_STOCK LIKE MSEG-MENGE,
C_STOCK(18) TYPE C,
OBKNR LIKE SER03-OBKNR,
SERNR LIKE OBJK-SERNR,
EQUNR LIKE OBJK-EQUNR,
END OF ITAB1.
DATA : BEGIN OF ITAB2 OCCURS 100,
OBKNR LIKE SER03-OBKNR,
MBLNR LIKE SER03-MBLNR,
BWART LIKE SER03-BWART,
MJAHR LIKE SER03-MJAHR,
WERK LIKE SER03-WERK,
SERNR LIKE OBJK-SERNR,
EQUNR LIKE OBJK-EQUNR,
END OF ITAB2.
DATA : BEGIN OF ITAB3 OCCURS 100,
OBKNR LIKE OBJK-OBKNR,
SERNR LIKE OBJK-SERNR,
EQUNR LIKE OBJK-EQUNR,
END OF ITAB3.
DATA : BEGIN OF ITAB4 OCCURS 100,
MATNR TYPE MATNR,
SERNR LIKE EQUI-SERNR,
EQUNR LIKE EQUI-EQUNR,
END OF ITAB4.
DATA: V_105 LIKE MSEG-MENGE,
V_541 LIKE MSEG-MENGE,
V_542 LIKE MSEG-MENGE.
SELECT EQUIMATNR EQUISERNR EQUIEQUNR MSEGMBLNR
MSEGBWART MSEGMENGE MSEGMEINS MSEGWERKS
INTO CORRESPONDING FIELDS OF TABLE ITAB1
FROM ( EQUI JOIN MSEG ON MSEGMATNR = EQUIMATNR
JOIN MKPF ON MKPFMBLNR = MSEGMBLNR )
WHERE MSEG~WERKS IN S_WERKS
AND ( MSEGBWART EQ '105' OR MSEGBWART EQ '542' OR
MSEG~BWART EQ '541' )
AND MSEG~MATNR EQ 'ENG1'
AND MKPF~BUDAT BETWEEN S_BUDAT-LOW AND S_BUDAT-HIGH.
SELECT MSEGMATNR MSEGWERKS MSEG~MBLNR
MSEGMENGE MSEGBWART MSEGMJAHR MSEGEBELN
INTO CORRESPONDING FIELDS OF TABLE ITAB1
FROM MKPF INNER JOIN MSEG ON
MKPFMBLNR = MSEGMBLNR AND
MKPFMJAHR = MSEGMJAHR
WHERE MSEG~WERKS IN S_WERKS
AND ( MSEGBWART EQ '105' OR MSEGBWART EQ '542' OR
MSEG~BWART EQ '541' )
AND MSEG~MATNR EQ 'ENG1'
AND MKPF~BUDAT BETWEEN S_BUDAT-LOW AND S_BUDAT-HIGH.
V_105 = 0.
V_541 = 0.
V_542 = 0.
SORT ITAB1 BY MATNR.
LOOP AT ITAB1.
IF ITAB1-BWART = '105'.
V_105 = V_105 + ITAB1-MENGE.
ENDIF.
IF ITAB1-BWART = '541'.
V_541 = V_541 + ITAB1-MENGE.
ENDIF.
IF ITAB1-BWART = '542'.
V_542 = V_542 + ITAB1-MENGE.
ENDIF.
AT END OF MATNR.
ITAB1-MENGE_STOCK = ( V_105 + V_542 ) - V_541.
MODIFY ITAB1 TRANSPORTING MENGE_STOCK.
WRITE : V_541,V_542,V_105.
CLEAR: ITAB1-MENGE_STOCK, V_541, V_542, V_105.
ENDAT.
ENDLOOP.
DELETE ITAB1 WHERE MENGE_STOCK = 0.
SORT ITAB1 BY MATNR.
LOOP AT ITAB1.
MOVE ITAB1-MENGE_STOCK TO ITAB1-C_STOCK.
MODIFY ITAB1.
ENDLOOP.
****Get Object List from SER03.
*
*IF ITAB1[] IS INITIAL.
*ELSE.
SELECT SER03~OBKNR
SER03~MBLNR
SER03~BWART
SER03~MJAHR
INTO CORRESPONDING FIELDS OF TABLE ITAB2
FROM SER03
FOR ALL ENTRIES IN ITAB1
WHERE MBLNR = ITAB1-MBLNR
AND WERK = ITAB1-WERKS.
*
LOOP AT ITAB1.
READ TABLE ITAB2 WITH KEY MBLNR = ITAB1-MBLNR.
*
IF SY-SUBRC = 0.
MOVE ITAB2-OBKNR TO ITAB1-OBKNR.
MOVE ITAB2-MBLNR TO ITAB1-MBLNR.
MODIFY ITAB1.
ENDIF.
ENDLOOP.
ENDIF.
SORT ITAB1 BY MATNR.
***Get Serial no and Equi no from OBJK.
IF ITAB1[] IS INITIAL.
ELSE.
LOOP AT ITAB1.
SELECT EQUI~MATNR
EQUI~SERNR
EQUI~EQUNR
INTO CORRESPONDING FIELDS OF TABLE ITAB4
FROM EQUI
FOR ALL ENTRIES IN ITAB1
WHERE MATNR = ITAB1-MATNR.
ENDLOOP.
LOOP AT ITAB1.
READ TABLE ITAB4 WITH KEY MATNR = ITAB1-MATNR BINARY SEARCH.
IF SY-SUBRC = 0.
MOVE ITAB4-MATNR TO ITAB1-MATNR.
MOVE ITAB4-SERNR TO ITAB1-SERNR.
MOVE ITAB4-EQUNR TO ITAB1-EQUNR.
MODIFY ITAB1.
APPEND ITAB1.
ENDIF.
ENDLOOP.
ENDIF.
LOOP AT ITAB1.
WRITE : / ITAB1-MATNR,
ITAB1-MBLNR,
ITAB1-BWART,
ITAB1-EBELN,
ITAB1-MENGE_STOCK.
ITAB1-OBKNR.
.
ENDLOOP.
LOOP AT ITAB1.
WRITE: / ITAB1-MATNR,
ITAB1-SERNR,
ITAB1-EQUNR.
ENDLOOP.
DELETE ITAB1 WHERE SERNR EQ SPACE.
SORT ITAB1 BY MATNR.
ENDFORM.
ALV
FORM FILL_HEADER_DETAILS_PRC .
CLEAR WA_FIELDCAT.
i_layout-colwidth_optimize = 'X'.
WA_FIELDCAT-COL_POS = 1.
WA_FIELDCAT-FIELDNAME = 'MATNR'.
WA_FIELDCAT-TABNAME = 'ITAB1'.
WA_FIELDCAT-SELTEXT_L = 'MATERIAL'.
WA_FIELDCAT-OUTPUTLEN = '40'.
WA_FIELDCAT-DO_SUM = 'X'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
WA_FIELDCAT-COL_POS = 2.
WA_FIELDCAT-FIELDNAME = 'C_STOCK'.
WA_FIELDCAT-TABNAME = 'ITAB1'.
WA_FIELDCAT-SELTEXT_L = 'QTY'.
WA_FIELDCAT-OUTPUTLEN = '13'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
WA_FIELDCAT-COL_POS = 3.
WA_FIELDCAT-FIELDNAME = 'SERNR'.
WA_FIELDCAT-TABNAME = 'ITAB1'.
WA_FIELDCAT-SELTEXT_L = 'SERIAL NO'.
WA_FIELDCAT-OUTPUTLEN = '13'.
WA_FIELDCAT-NO_OUT = 'X'.
APPEND WA_FIELDCAT TO I_FIELDCAT.
CLEAR GS_SORT.
GS_SORT-FIELDNAME = 'MATNR'.
GS_SORT-TABNAME = 'ITAB1'.
GS_SORT-SPOS = 1.
GS_SORT-UP = 'X'.
GS_SORT-SUBTOT = 'X'.
APPEND GS_SORT TO GT_SORT.
CLEAR GS_SORT.
GS_SORT-FIELDNAME = 'C_STOCK'.
GS_SORT-TABNAME = 'ITAB1'.
GS_SORT-SPOS = 1.
GS_SORT-UP = 'X'.
GS_SORT-SUBTOT = 'X'.
APPEND GS_SORT TO GT_SORT.
ENDFORM.
**----
**
TOP-OF-PAGE
**
**----
**
*TOP-OF-PAGE.
*
DESIGING REPORT FORMAT TO DISPLAY THE LIST
WRITE : /25 'Engine Receipts', SY-DATUM,
79 'PAGE:',
90 SY-PAGNO .
*
WRITE : /1(75) SY-ULINE.
*
WRITE : /1(18) 'MATERIAL',
20(15) 'EQUIPMENT',
36(18) 'QTY',
55(15) 'SERIAL NO'.
*
WRITE : /1(75) SY-ULINE.
**eject
**----
**
END-OF-PAGE
**
**----
*
*END-OF-PAGE.
*&----
*
*& Form display_data_prc
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*****ALV for DETAILED
FORM DISPLAY_DATA_DT .
I_LAYOUT-ZEBRA = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = V_REPID
IS_LAYOUT = I_LAYOUT
IT_FIELDCAT = I_FIELDCAT
IT_SORT = GT_SORT[]
I_DEFAULT = 'X'
I_SAVE = 'A'
IT_EVENTS = I_EVENTS
TABLES
T_OUTTAB = ITAB1
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
*&----
*
*& Form event_build_prc
*&----
*
text
*----
*
--> p1 text
<-- p2 text
*----
*
FORM EVENT_BUILD_PRC .
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = I_EVENTS.
READ TABLE I_EVENTS
WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO WA_EVENTS.
IF SY-SUBRC = 0.
MOVE 'ALV_TOP_OF_PAGE' TO WA_EVENTS-FORM.
MODIFY I_EVENTS FROM WA_EVENTS INDEX SY-TABIX.
ENDIF.
ENDFORM. " event_build_prc
----
FORM ALV_TOP_OF_PAGE *
----
FORM ALV_TOP_OF_PAGE. "#EC CALLED
DATA : V_TXT(30) TYPE C.
CLEAR: I_LIST_COMMENTS[].
CLEAR V_TXT.
WA_LIST_COMMENTS-TYP = 'S'. " H = Header, S = Selection, A = Action
WA_LIST_COMMENTS-KEY = ''.
CONCATENATE 'Plant : '
S_WERKS INTO V_TXT.
WA_LIST_COMMENTS-INFO = V_TXT.
APPEND WA_LIST_COMMENTS TO I_LIST_COMMENTS.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
i_logo = 'ENJOYSAP_LOGO'
IT_LIST_COMMENTARY = I_LIST_COMMENTS.
ENDFORM. "alv_top_of_page
‎2008 Jul 04 7:48 AM
hi,
* LOOP AT ITAB1. --> when u r using for all entries in itab1, no need to use loop at itab1.
*IF NOT ITAB1[] IS INITIAL.*
SELECT EQUI~MATNR
EQUI~SERNR
EQUI~EQUNR
INTO CORRESPONDING FIELDS OF TABLE ITAB4
FROM EQUI
FOR ALL ENTRIES IN ITAB1
WHERE MATNR = ITAB1-MATNR.
IF SY-SUBRC = 0.
* ENDLOOP.
LOOP AT ITAB1.
*READ TABLE ITAB4 WITH KEY MATNR = ITAB1-MATNR BINARY SEARCH. -> for 1 material u need may serial nos use Loop
LOOP AT ITAB4 WHERE MATNR = ITAB1-MATNR
MOVE ITAB4-MATNR TO ITAB1-MATNR.
MOVE ITAB4-SERNR TO ITAB1-SERNR.
MOVE ITAB4-EQUNR TO ITAB1-EQUNR.
MODIFY ITAB1.
APPEND ITAB1.
CLEAR ITAB1.
ENDLOOP.
ENDIF.
ENDIF.
‎2008 Jul 04 7:56 AM
hi,
thanks for ur immediate reponse.
ur code
LOOP AT ITAB4 WHERE MATNR = ITAB1-MATNR.
MOVE ITAB4-MATNR TO ITAB1-MATNR.
MOVE ITAB4-SERNR TO ITAB1-SERNR.
MOVE ITAB4-EQUNR TO ITAB1-EQUNR.
MODIFY ITAB1.
APPEND ITAB1.
CLEAR ITAB1.
ENDLOOP.
not working paaa..
pls suggest some idea
able to get my point
‎2008 Jul 04 7:59 AM
did u loop at itab1 first??
LOOP AT ITAB1.
LOOP AT ITAB4 WHERE MATNR = ITAB1-MATNR.
MOVE ITAB4-MATNR TO ITAB1-MATNR.
MOVE ITAB4-SERNR TO ITAB1-SERNR.
MOVE ITAB4-EQUNR TO ITAB1-EQUNR.
MODIFY ITAB1.
APPEND ITAB1.
CLEAR ITAB1.
ENDLOOP.
ENDLOOP.