‎2008 Apr 16 10:41 AM
Hi,
Please provide with row to column vise versa coding.
Thanks in advance..
‎2008 Apr 16 10:45 AM
Hi,
Following code will explain ur solution.
REPORT YMS_MAILROWCOLUMN NO STANDARD PAGE HEADING LINE-SIZE 500.
TYPE-POOLS : SLIS.
TABLES: MSEG , MKPF , QAMB , MAKT , MBEW , MARA , T001L , MVKE, ZSD_MOD,
MARD,SOMLRECI1.
SELECT-OPTIONS : SO_WERKS FOR MSEG-WERKS OBLIGATORY ,
SO_VKORG FOR MVKE-VKORG ,
SO_BUDAT FOR MKPF-BUDAT OBLIGATORY ,
SO_MATNR FOR MSEG-MATNR ,
SO_FROM FOR MSEG-LGORT ,
P_TO FOR MSEG-LGORT ,
P_MAIL FOR SOMLRECI1-RECEIVER.
DATA: RET_RATE LIKE KONP-KBETR.
DATA: CHANNEL LIKE TVTWT-VTWEG.
DATA: BEGIN OF ABS OCCURS 0,
BUDAT LIKE MKPF-BUDAT,
WERKS LIKE MSEG-WERKS,
LOC LIKE MSEG-LGORT,
VALUE1 TYPE P VALUE '0.000' DECIMALS 3,
VALUE2 TYPE P VALUE '0.000' DECIMALS 3,
VALUE3 TYPE P VALUE '0.000' DECIMALS 3,
VALUE4 TYPE P VALUE '0.000' DECIMALS 3,
VALUE5 TYPE P VALUE '0.000' DECIMALS 3,
VALUE6 TYPE P VALUE '0.000' DECIMALS 3,
VALUE7 TYPE P VALUE '0.000' DECIMALS 3,
VALUE8 TYPE P VALUE '0.000' DECIMALS 3,
END OF ABS.
DATA : BEGIN OF MAIL OCCURS 0,
BUDAT LIKE MKPF-BUDAT,
WERKS LIKE MSEG-WERKS,
LOC LIKE MSEG-LGORT,
VALUE1(6) TYPE C VALUE '0.000',
VALUE2(6) TYPE C VALUE '0.000',
VALUE3(6) TYPE C VALUE '0.000',
VALUE4(6) TYPE C VALUE '0.000',
VALUE5(6) TYPE C VALUE '0.000',
VALUE6(6) TYPE C VALUE '0.000',
VALUE7(6) TYPE C VALUE '0.000',
VALUE8(10) TYPE C VALUE '0.000',
END OF MAIL.
DATA: WS_LOT LIKE QAMB-PRUEFLOS.
DATA: SL TYPE P DECIMALS 0.
DATA: WS_RATE LIKE MBEW-VERPR.
DATA: WS_VALUE(10) TYPE C." DECIMALS 3.
DATA: WS_CHANNEL(02) TYPE C.
DATA: WA_VKORG LIKE MVKE-VKORG.
DATA: WA_BWKEY LIKE MBEW-BWKEY.
DATA: T_VALUE TYPE P DECIMALS 2.
DATA: MOD_DATE(6) TYPE N.
DATA: BEGIN OF ITAB OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
ZEILE LIKE MSEG-ZEILE,
MATNR LIKE MSEG-MATNR,
BUDAT LIKE MKPF-BUDAT,
BWART LIKE MSEG-BWART,
WERKS LIKE MSEG-WERKS,
MENGE LIKE MSEG-MENGE,
LOC LIKE MSEG-LGORT,
LIFNR LIKE MSEG-LIFNR,
END OF ITAB.
DATA : FCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
EVENT TYPE SLIS_T_EVENT WITH HEADER LINE.
START-OF-SELECTION.
SELECT MSEG~MBLNR MSEG~MJAHR
MSEG~ZEILE MSEG~MATNR MKPF~BUDAT
MSEG~BWART MSEG~WERKS MSEG~MENGE MSEG~LIFNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM MKPF INNER JOIN MSEG
ON MKPF~MBLNR = MSEG~MBLNR
AND MKPF~MJAHR = MSEG~MJAHR
AND MKPF~MANDT = MSEG~MANDT
WHERE BUDAT IN SO_BUDAT
AND MATNR IN SO_MATNR
AND WERKS IN SO_WERKS
AND BWART = '321'
AND UMLGO IN P_TO.
LOOP AT ITAB.
WS_LOT = 0.
SELECT SINGLE PRUEFLOS INTO (WS_LOT) FROM QAMB
WHERE MBLNR EQ ITAB-MBLNR AND
MJAHR EQ ITAB-MJAHR AND
ZEILE EQ ITAB-ZEILE AND
TYP = '3'.
IF SY-SUBRC NE 0.
DELETE ITAB .
CONTINUE.
ENDIF.
SELECT SINGLE * FROM QAMB
WHERE PRUEFLOS EQ WS_LOT AND
TYP = '1'.
IF SY-SUBRC NE 0.
DELETE ITAB .
CONTINUE.
ENDIF.
SELECT SINGLE * FROM MSEG
WHERE MBLNR EQ QAMB-MBLNR AND
MJAHR EQ QAMB-MJAHR AND
ZEILE EQ QAMB-ZEILE AND
WERKS IN SO_WERKS AND
LGORT IN SO_FROM.
IF SY-SUBRC NE 0.
DELETE ITAB .
CONTINUE.
ENDIF.
MOVE MSEG-LGORT TO ITAB-LOC.
IF ITAB-WERKS = '1000'.
IF ITAB-LIFNR EQ '0000100278' OR ITAB-LIFNR EQ '0000999999' OR ITAB-LIFNR EQ '0000105200'.
ITAB-WERKS = 'PEIL'.
ENDIF.
ELSEIF ITAB-LOC = '1042' OR ITAB-LOC = '1043'.
ITAB-WERKS = 'PEIL'.
ENDIF.
MODIFY ITAB.
ENDLOOP.
SORT ITAB BY LOC MATNR BUDAT MBLNR MJAHR.
LOOP AT ITAB.
SELECT SINGLE * FROM MARA WHERE MATNR EQ ITAB-MATNR.
IF SY-SUBRC NE 0. DELETE ITAB. CONTINUE. ENDIF.
SELECT SINGLE * FROM MAKT WHERE MATNR EQ ITAB-MATNR.
IF SY-SUBRC NE 0. DELETE ITAB .CONTINUE. ENDIF.
IF ITAB-WERKS = '2000'.
CLEAR: WA_BWKEY.
WA_BWKEY = '2000'.
SELECT SINGLE * FROM MBEW WHERE MATNR EQ ITAB-MATNR AND
BWKEY = WA_BWKEY.
IF SY-SUBRC NE 0. DELETE ITAB . CONTINUE. ENDIF.
ELSE.
SELECT SINGLE * FROM MBEW WHERE MATNR EQ ITAB-MATNR.
IF SY-SUBRC NE 0. DELETE ITAB . CONTINUE. ENDIF.
ENDIF.
SELECT SINGLE * FROM MARD WHERE MATNR EQ ITAB-MATNR AND
LGORT EQ '1200'.
IF SY-SUBRC NE 0. MARD-LGPBE = SPACE. ENDIF.
IF ITAB-LOC = '1042' AND MARA-MATKL NE 'AUTDEF'.
DELETE ITAB. CONTINUE.
ENDIF.
IF MARA-MATKL = 'AUTDEF'.
ITAB-LOC = '1042'.
MODIFY ITAB.
ENDIF.
IF ITAB-WERKS EQ '1000'.
IF ITAB-LOC NE '1002'
AND ITAB-LOC NE '1003'
AND ITAB-LOC NE '1004'
AND ITAB-LOC NE '1005'
AND ITAB-LOC NE '1006'
AND ITAB-LOC NE '1021'
AND ITAB-LOC NE '1022'
AND ITAB-LOC NE '1028'
AND ITAB-LOC NE '1071'
AND ITAB-LOC NE '1072'
AND ITAB-LOC NE '1073'
AND ITAB-LOC NE 'P000'
AND ITAB-LOC NE '1611'
AND ITAB-LOC NE 'Q000'
AND ITAB-LOC NE 'A000'
AND ITAB-LOC NE '1612'
AND ITAB-LOC NE '1621'
AND ITAB-LOC NE '1613'
AND ITAB-LOC NE '1614'
AND ITAB-LOC NE '1117'.
DELETE ITAB. CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ '2000'.
IF ITAB-LOC NE '2001'
AND ITAB-LOC NE '2002'
AND ITAB-LOC NE '2003'
AND ITAB-LOC NE '2004'
AND ITAB-LOC NE '2005'
AND ITAB-LOC NE '2006'
AND ITAB-LOC NE '2007'
AND ITAB-LOC NE '2100'
AND ITAB-LOC NE '2101'
AND ITAB-LOC NE '2102'
AND ITAB-LOC NE '2180'
AND ITAB-LOC NE '2210'
AND ITAB-LOC NE '2400'
AND ITAB-LOC NE '2N0N'
AND ITAB-LOC NE 'M100'
AND ITAB-LOC NE 'M101'.
DELETE ITAB.CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ '3000'.
IF ITAB-LOC NE '3012'
AND ITAB-LOC NE '3022'
AND ITAB-LOC NE '3032'
AND ITAB-LOC NE '3042'
AND ITAB-LOC NE '3052'
AND ITAB-LOC NE '3062'
AND ITAB-LOC NE '3072'
AND ITAB-LOC NE '3092'
AND ITAB-LOC NE '3112'
AND ITAB-LOC NE '3612'.
DELETE ITAB.CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ '4000'.
IF ITAB-LOC NE '1052'
AND ITAB-LOC NE '4058'
AND ITAB-LOC NE '4055'.
DELETE ITAB.CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ '5000'.
IF ITAB-LOC NE '5001'
AND ITAB-LOC NE '5002'
AND ITAB-LOC NE '5003'
AND ITAB-LOC NE '5004'
AND ITAB-LOC NE '5005'
AND ITAB-LOC NE 'M101'
AND ITAB-LOC NE '5009'
AND ITAB-LOC NE '5010'.
DELETE ITAB.CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ 'PEIL'.
IF ITAB-LOC NE '1200'
AND ITAB-LOC NE 'D000'
AND ITAB-LOC NE 'C000'
AND ITAB-LOC NE '1042'
AND ITAB-LOC NE '1043'.
DELETE ITAB.CONTINUE.
ENDIF.
ENDIF.
WS_RATE = 0.
IF MBEW-VPRSV = 'V'.
MOVE MBEW-VERPR TO WS_RATE.
ELSEIF MBEW-VPRSV = 'S'.
MOVE MBEW-STPRS TO WS_RATE.
ENDIF.
IF ITAB-WERKS = '1000' OR ITAB-WERKS = '3000' OR ITAB-WERKS = '4000' OR ITAB-WERKS = 'PEIL'.
WA_VKORG = '1000'.
ELSE.
WA_VKORG = ITAB-WERKS.
ENDIF.
** FROM SALES DATA.
CALL FUNCTION 'ZSDF_GETPRDRATE'
EXPORTING
PM_MATNR = ITAB-MATNR
PM_VKORG = WA_VKORG
PM_DATE = ITAB-BUDAT
IMPORTING
CHANNEL = CHANNEL
RET_RATE = RET_RATE
EXCEPTIONS
OTHERS = 1.
IF RET_RATE > 0.
MOVE RET_RATE TO WS_RATE.
MOVE CHANNEL TO WS_CHANNEL.
ELSE.
MOVE ' ' TO WS_CHANNEL.
ENDIF.
IF WS_CHANNEL = '20' OR WS_CHANNEL = '21' OR WS_CHANNEL = '23'.
SELECT SINGLE * FROM MVKE WHERE MATNR EQ ITAB-MATNR AND
VTWEG IN ('20','21','23').
IF MVKE-KONDM = '01'.
WS_RATE = WS_RATE - ( WS_RATE * '0.30' ) .
WS_RATE = WS_RATE * '0.9324'.
ELSEIF MVKE-KONDM = '02'.
WS_RATE = WS_RATE - ( WS_RATE * '0.4091' ).
WS_RATE = WS_RATE * '0.9324'.
ELSEIF MVKE-KONDM = '03'.
WS_RATE = WS_RATE - ( WS_RATE * '0.3637' ).
WS_RATE = WS_RATE * '0.9324'.
ELSEIF MVKE-KONDM = '04'.
WS_RATE = WS_RATE - ( WS_RATE * '0.20' ).
WS_RATE = WS_RATE * '0.9324'.
ENDIF.
ENDIF.
COMPUTE WS_VALUE = ITAB-MENGE * WS_RATE.
WS_VALUE = WS_VALUE / 1000000.
READ TABLE ABS WITH KEY BUDAT = ITAB-BUDAT.
IF SY-SUBRC EQ 0.
IF ITAB-WERKS EQ '1000'.
ADD WS_VALUE TO ABS-VALUE1.
ELSEIF ITAB-WERKS EQ '2000'.
ADD WS_VALUE TO ABS-VALUE2.
ELSEIF ITAB-WERKS EQ '3000'.
ADD WS_VALUE TO ABS-VALUE3.
ELSEIF ITAB-WERKS EQ '4000'.
ADD WS_VALUE TO ABS-VALUE4.
ELSEIF ITAB-WERKS EQ '5000'.
ADD WS_VALUE TO ABS-VALUE5.
ELSEIF ITAB-WERKS EQ '6000'.
ADD WS_VALUE TO ABS-VALUE6.
ELSEIF ITAB-WERKS EQ 'PEIL'.
ADD WS_VALUE TO ABS-VALUE7.
ENDIF .
ABS-VALUE8 = ABS-VALUE1
+ ABS-VALUE2
+ ABS-VALUE3
+ ABS-VALUE4
+ ABS-VALUE5
+ ABS-VALUE6
+ ABS-VALUE7.
MODIFY ABS INDEX SY-TABIX.
CLEAR ABS.
ELSE.
MOVE ITAB-BUDAT TO ABS-BUDAT.
MOVE ITAB-LOC TO ABS-LOC.
MOVE ITAB-WERKS TO ABS-WERKS.
IF ITAB-WERKS EQ '1000'.
MOVE WS_VALUE TO ABS-VALUE1.
ELSEIF ITAB-WERKS EQ '2000'.
MOVE WS_VALUE TO ABS-VALUE2.
ELSEIF ITAB-WERKS EQ '3000'.
MOVE WS_VALUE TO ABS-VALUE3.
ELSEIF ITAB-WERKS EQ '4000'.
MOVE WS_VALUE TO ABS-VALUE4.
ELSEIF ITAB-WERKS EQ '5000'.
MOVE WS_VALUE TO ABS-VALUE5.
ELSEIF ITAB-WERKS EQ '6000'.
MOVE WS_VALUE TO ABS-VALUE6.
ELSEIF ITAB-WERKS EQ 'PEIL'.
MOVE WS_VALUE TO ABS-VALUE7.
ENDIF.
ABS-VALUE8 = ABS-VALUE1
+ ABS-VALUE2
+ ABS-VALUE3
+ ABS-VALUE4
+ ABS-VALUE5
+ ABS-VALUE6
+ ABS-VALUE7.
APPEND ABS.
CLEAR ABS.
ENDIF.
ENDLOOP.
LOOP AT ABS.
MAIL-BUDAT = ABS-BUDAT.
MAIL-LOC = ABS-LOC.
MAIL-WERKS = ABS-WERKS.
MAIL-VALUE1 = ABS-VALUE1.
MAIL-VALUE2 = ABS-VALUE2.
MAIL-VALUE3 = ABS-VALUE3.
MAIL-VALUE4 = ABS-VALUE4.
MAIL-VALUE5 = ABS-VALUE5.
MAIL-VALUE6 = ABS-VALUE6.
MAIL-VALUE7 = ABS-VALUE7.
MAIL-VALUE8 = ABS-VALUE8.
APPEND MAIL.
CLEAR MAIL.
ENDLOOP.
SORT MAIL BY BUDAT.
IF P_MAIL IS NOT INITIAL.
PERFORM MAIL.
ENDIF.
FCAT-COL_POS = 1.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'BUDAT'.
FCAT-SELTEXT_L = 'DATE'.
FCAT-OUTPUTLEN = 8.
FCAT-JUST = 'L'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 2.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE1'.
FCAT-SELTEXT_L = '1000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 3.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE2'.
FCAT-SELTEXT_L = '2000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 4.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE3'.
FCAT-SELTEXT_L = '3000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 5.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE4'.
FCAT-SELTEXT_L = '4000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 6.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE5'.
FCAT-SELTEXT_L = '5000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 7.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE6'.
FCAT-SELTEXT_L = '6000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 8.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE7'.
FCAT-DO_SUM = 'X'.
FCAT-SELTEXT_L = 'PEIL'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 8.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE8'.
FCAT-SELTEXT_L = 'TOTAL'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
EVENT-FORM = 'PDN'.
EVENT-NAME = 'TOP_OF_PAGE'.
APPEND EVENT.
CLEAR EVENT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
IT_FIELDCAT = FCAT[]
IT_EVENTS = EVENT[]
TABLES
T_OUTTAB = ABS.
*&---------------------------------------------------------------------*
*& Form PDN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM PDN.
DATA: HEADER TYPE SLIS_T_LISTHEADER WITH HEADER LINE,
TEXT TYPE STRING,
LOWD TYPE GSUDISP OCCURS 0 WITH HEADER LINE,
HIGHD TYPE GSUDISP OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = SO_BUDAT-LOW
TABLES
TEXTS = LOWD.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = SO_BUDAT-HIGH
TABLES
TEXTS = HIGHD.
IF SO_BUDAT-HIGH IS NOT INITIAL AND SO_BUDAT-LOW NE SO_BUDAT-HIGH.
CONCATENATE 'Production Value For The Period : ' LOWD 'TO' HIGHD INTO TEXT SEPARATED BY SPACE.
ELSE.
CONCATENATE 'Production Value For The Date : ' LOWD INTO TEXT SEPARATED BY SPACE.
ENDIF.
HEADER-TYP = 'S'.
HEADER-INFO = TEXT.
APPEND HEADER.
CLEAR HEADER.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEADER[].
ENDFORM. "ICUG
*&---------------------------------------------------------------------*
*& Form MAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MAIL .
DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: OBJBIN LIKE ZDATA_TABLE OCCURS 10 WITH HEADER LINE.
DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: DOC_CHNG LIKE SODOCCHGI1.
DATA: TAB_LINES LIKE SY-TABIX.
DATA L_NUM(3).
DATA : SUBJECT(200) TYPE C.
DATA : SUB1(200) TYPE C.
DATA : SUB(200) TYPE C.
DATA : DATED TYPE GSUDISP OCCURS 0 WITH HEADER LINE,
DATE1D TYPE GSUDISP OCCURS 0 WITH HEADER LINE,
DATE2D TYPE GSUDISP OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = SO_BUDAT-LOW
TABLES
TEXTS = DATED.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = SO_BUDAT-HIGH
TABLES
TEXTS = DATE2D.
* Mail Subject
IF SO_BUDAT-HIGH IS INITIAL.
CONCATENATE 'Production Details For The Date' DATED-GTEXT INTO SUBJECT SEPARATED BY SPACE.
ELSE.
CONCATENATE 'Production Details From' DATED-GTEXT 'TO' DATE2D-GTEXT INTO SUBJECT SEPARATED BY SPACE.
ENDIF.
DOC_CHNG-OBJ_DESCR = SUBJECT.
* Mail Contents
CLEAR SUB.
IF SO_BUDAT-HIGH IS INITIAL.
CONCATENATE 'Production Details For The Date' DATED-GTEXT INTO SUB SEPARATED BY SPACE.
ELSE.
CONCATENATE 'Production Details From' DATED-GTEXT 'To' DATE2D-GTEXT INTO SUB SEPARATED BY SPACE.
ENDIF.
OBJTXT = SUB.
APPEND OBJTXT.
CLEAR SUB.
MOVE '-------------------------------------------------------------------------------' TO SUB.
OBJTXT = SUB.
APPEND OBJTXT.
CLEAR SUB1.
CONCATENATE 'Date......' SY-VLINE
'1000.' SY-VLINE
'2000.' SY-VLINE
'3000.' SY-VLINE
'4000.' SY-VLINE
'5000.' SY-VLINE
'6000.' SY-VLINE
'PEIL.' SY-VLINE
'TOTAL.....' SY-VLINE INTO SUB1 SEPARATED BY SPACE.
OBJTXT = SUB1.
APPEND OBJTXT.
MOVE '-------------------------------------------------------------------------------' TO SUB.
OBJTXT = SUB.
APPEND OBJTXT.
LOOP AT MAIL.
CLEAR SUB.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = MAIL-BUDAT
TABLES
TEXTS = DATE1D.
CONCATENATE DATE1D-GTEXT SY-VLINE
MAIL-VALUE1 SY-VLINE
MAIL-VALUE2 SY-VLINE
MAIL-VALUE3 SY-VLINE
MAIL-VALUE4 SY-VLINE
MAIL-VALUE5 SY-VLINE
MAIL-VALUE6 SY-VLINE
MAIL-VALUE7 SY-VLINE
MAIL-VALUE8 INTO SUB SEPARATED BY SPACE.
OBJTXT = SUB.
APPEND OBJTXT.
ENDLOOP.
* Footer Message in the mail.
MOVE '-------------------------------------------------------------------------------' TO SUB.
OBJTXT = SUB.
APPEND OBJTXT.
CLEAR SUB.
OBJTXT = SUB.
APPEND OBJTXT.
MOVE 'This is System Generated Message.' TO SUB.
OBJTXT = SUB.
APPEND OBJTXT.
* CREATION OF THE DOCUMENT ATTACHMENT
MOVE SUB1 TO OBJBIN-FIELD01.
APPEND OBJBIN.
LOOP AT MAIL.
CLEAR OBJBIN.
MOVE DATE1D-GTEXT TO OBJBIN-FIELD01.
MOVE MAIL-VALUE1 TO OBJBIN-FIELD02.
MOVE MAIL-VALUE2 TO OBJBIN-FIELD03.
MOVE MAIL-VALUE3 TO OBJBIN-FIELD04.
MOVE MAIL-VALUE4 TO OBJBIN-FIELD05.
MOVE MAIL-VALUE5 TO OBJBIN-FIELD06.
MOVE MAIL-VALUE6 TO OBJBIN-FIELD07.
MOVE MAIL-VALUE7 TO OBJBIN-FIELD08.
APPEND OBJBIN.
ENDLOOP.
* TARGET RECIPENT
LOOP AT P_MAIL.
CLEAR RECLIST.
RECLIST-RECEIVER = P_MAIL-LOW.
APPEND RECLIST.
CLEAR RECLIST.
ENDLOOP.
* SENDING THE DOCUMENT
CALL FUNCTION 'ZPM_SEND_MAIL_EXCEL_ATTACH'
EXPORTING
I_SUBJECT = SUBJECT
I_ATTACH_FNMAE = 'Production Details.XLS'
TABLES
RECEIVERS_LIST = RECLIST
DATA_TABLE = OBJBIN
MAIL_CONTENT = OBJTXT
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
DOCUMENT_TYPE_NOT_EXIST = 3
OPERATION_NO_AUTHORIZATION = 4
PARAMETER_ERROR = 5
X_ERROR = 6
OTHERS = 7.
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. "MAILThanks,
Sankar M
‎2008 Apr 16 10:45 AM
Hi,
Following code will explain ur solution.
REPORT YMS_MAILROWCOLUMN NO STANDARD PAGE HEADING LINE-SIZE 500.
TYPE-POOLS : SLIS.
TABLES: MSEG , MKPF , QAMB , MAKT , MBEW , MARA , T001L , MVKE, ZSD_MOD,
MARD,SOMLRECI1.
SELECT-OPTIONS : SO_WERKS FOR MSEG-WERKS OBLIGATORY ,
SO_VKORG FOR MVKE-VKORG ,
SO_BUDAT FOR MKPF-BUDAT OBLIGATORY ,
SO_MATNR FOR MSEG-MATNR ,
SO_FROM FOR MSEG-LGORT ,
P_TO FOR MSEG-LGORT ,
P_MAIL FOR SOMLRECI1-RECEIVER.
DATA: RET_RATE LIKE KONP-KBETR.
DATA: CHANNEL LIKE TVTWT-VTWEG.
DATA: BEGIN OF ABS OCCURS 0,
BUDAT LIKE MKPF-BUDAT,
WERKS LIKE MSEG-WERKS,
LOC LIKE MSEG-LGORT,
VALUE1 TYPE P VALUE '0.000' DECIMALS 3,
VALUE2 TYPE P VALUE '0.000' DECIMALS 3,
VALUE3 TYPE P VALUE '0.000' DECIMALS 3,
VALUE4 TYPE P VALUE '0.000' DECIMALS 3,
VALUE5 TYPE P VALUE '0.000' DECIMALS 3,
VALUE6 TYPE P VALUE '0.000' DECIMALS 3,
VALUE7 TYPE P VALUE '0.000' DECIMALS 3,
VALUE8 TYPE P VALUE '0.000' DECIMALS 3,
END OF ABS.
DATA : BEGIN OF MAIL OCCURS 0,
BUDAT LIKE MKPF-BUDAT,
WERKS LIKE MSEG-WERKS,
LOC LIKE MSEG-LGORT,
VALUE1(6) TYPE C VALUE '0.000',
VALUE2(6) TYPE C VALUE '0.000',
VALUE3(6) TYPE C VALUE '0.000',
VALUE4(6) TYPE C VALUE '0.000',
VALUE5(6) TYPE C VALUE '0.000',
VALUE6(6) TYPE C VALUE '0.000',
VALUE7(6) TYPE C VALUE '0.000',
VALUE8(10) TYPE C VALUE '0.000',
END OF MAIL.
DATA: WS_LOT LIKE QAMB-PRUEFLOS.
DATA: SL TYPE P DECIMALS 0.
DATA: WS_RATE LIKE MBEW-VERPR.
DATA: WS_VALUE(10) TYPE C." DECIMALS 3.
DATA: WS_CHANNEL(02) TYPE C.
DATA: WA_VKORG LIKE MVKE-VKORG.
DATA: WA_BWKEY LIKE MBEW-BWKEY.
DATA: T_VALUE TYPE P DECIMALS 2.
DATA: MOD_DATE(6) TYPE N.
DATA: BEGIN OF ITAB OCCURS 0,
MBLNR LIKE MSEG-MBLNR,
MJAHR LIKE MSEG-MJAHR,
ZEILE LIKE MSEG-ZEILE,
MATNR LIKE MSEG-MATNR,
BUDAT LIKE MKPF-BUDAT,
BWART LIKE MSEG-BWART,
WERKS LIKE MSEG-WERKS,
MENGE LIKE MSEG-MENGE,
LOC LIKE MSEG-LGORT,
LIFNR LIKE MSEG-LIFNR,
END OF ITAB.
DATA : FCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
EVENT TYPE SLIS_T_EVENT WITH HEADER LINE.
START-OF-SELECTION.
SELECT MSEG~MBLNR MSEG~MJAHR
MSEG~ZEILE MSEG~MATNR MKPF~BUDAT
MSEG~BWART MSEG~WERKS MSEG~MENGE MSEG~LIFNR
INTO CORRESPONDING FIELDS OF TABLE ITAB
FROM MKPF INNER JOIN MSEG
ON MKPF~MBLNR = MSEG~MBLNR
AND MKPF~MJAHR = MSEG~MJAHR
AND MKPF~MANDT = MSEG~MANDT
WHERE BUDAT IN SO_BUDAT
AND MATNR IN SO_MATNR
AND WERKS IN SO_WERKS
AND BWART = '321'
AND UMLGO IN P_TO.
LOOP AT ITAB.
WS_LOT = 0.
SELECT SINGLE PRUEFLOS INTO (WS_LOT) FROM QAMB
WHERE MBLNR EQ ITAB-MBLNR AND
MJAHR EQ ITAB-MJAHR AND
ZEILE EQ ITAB-ZEILE AND
TYP = '3'.
IF SY-SUBRC NE 0.
DELETE ITAB .
CONTINUE.
ENDIF.
SELECT SINGLE * FROM QAMB
WHERE PRUEFLOS EQ WS_LOT AND
TYP = '1'.
IF SY-SUBRC NE 0.
DELETE ITAB .
CONTINUE.
ENDIF.
SELECT SINGLE * FROM MSEG
WHERE MBLNR EQ QAMB-MBLNR AND
MJAHR EQ QAMB-MJAHR AND
ZEILE EQ QAMB-ZEILE AND
WERKS IN SO_WERKS AND
LGORT IN SO_FROM.
IF SY-SUBRC NE 0.
DELETE ITAB .
CONTINUE.
ENDIF.
MOVE MSEG-LGORT TO ITAB-LOC.
IF ITAB-WERKS = '1000'.
IF ITAB-LIFNR EQ '0000100278' OR ITAB-LIFNR EQ '0000999999' OR ITAB-LIFNR EQ '0000105200'.
ITAB-WERKS = 'PEIL'.
ENDIF.
ELSEIF ITAB-LOC = '1042' OR ITAB-LOC = '1043'.
ITAB-WERKS = 'PEIL'.
ENDIF.
MODIFY ITAB.
ENDLOOP.
SORT ITAB BY LOC MATNR BUDAT MBLNR MJAHR.
LOOP AT ITAB.
SELECT SINGLE * FROM MARA WHERE MATNR EQ ITAB-MATNR.
IF SY-SUBRC NE 0. DELETE ITAB. CONTINUE. ENDIF.
SELECT SINGLE * FROM MAKT WHERE MATNR EQ ITAB-MATNR.
IF SY-SUBRC NE 0. DELETE ITAB .CONTINUE. ENDIF.
IF ITAB-WERKS = '2000'.
CLEAR: WA_BWKEY.
WA_BWKEY = '2000'.
SELECT SINGLE * FROM MBEW WHERE MATNR EQ ITAB-MATNR AND
BWKEY = WA_BWKEY.
IF SY-SUBRC NE 0. DELETE ITAB . CONTINUE. ENDIF.
ELSE.
SELECT SINGLE * FROM MBEW WHERE MATNR EQ ITAB-MATNR.
IF SY-SUBRC NE 0. DELETE ITAB . CONTINUE. ENDIF.
ENDIF.
SELECT SINGLE * FROM MARD WHERE MATNR EQ ITAB-MATNR AND
LGORT EQ '1200'.
IF SY-SUBRC NE 0. MARD-LGPBE = SPACE. ENDIF.
IF ITAB-LOC = '1042' AND MARA-MATKL NE 'AUTDEF'.
DELETE ITAB. CONTINUE.
ENDIF.
IF MARA-MATKL = 'AUTDEF'.
ITAB-LOC = '1042'.
MODIFY ITAB.
ENDIF.
IF ITAB-WERKS EQ '1000'.
IF ITAB-LOC NE '1002'
AND ITAB-LOC NE '1003'
AND ITAB-LOC NE '1004'
AND ITAB-LOC NE '1005'
AND ITAB-LOC NE '1006'
AND ITAB-LOC NE '1021'
AND ITAB-LOC NE '1022'
AND ITAB-LOC NE '1028'
AND ITAB-LOC NE '1071'
AND ITAB-LOC NE '1072'
AND ITAB-LOC NE '1073'
AND ITAB-LOC NE 'P000'
AND ITAB-LOC NE '1611'
AND ITAB-LOC NE 'Q000'
AND ITAB-LOC NE 'A000'
AND ITAB-LOC NE '1612'
AND ITAB-LOC NE '1621'
AND ITAB-LOC NE '1613'
AND ITAB-LOC NE '1614'
AND ITAB-LOC NE '1117'.
DELETE ITAB. CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ '2000'.
IF ITAB-LOC NE '2001'
AND ITAB-LOC NE '2002'
AND ITAB-LOC NE '2003'
AND ITAB-LOC NE '2004'
AND ITAB-LOC NE '2005'
AND ITAB-LOC NE '2006'
AND ITAB-LOC NE '2007'
AND ITAB-LOC NE '2100'
AND ITAB-LOC NE '2101'
AND ITAB-LOC NE '2102'
AND ITAB-LOC NE '2180'
AND ITAB-LOC NE '2210'
AND ITAB-LOC NE '2400'
AND ITAB-LOC NE '2N0N'
AND ITAB-LOC NE 'M100'
AND ITAB-LOC NE 'M101'.
DELETE ITAB.CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ '3000'.
IF ITAB-LOC NE '3012'
AND ITAB-LOC NE '3022'
AND ITAB-LOC NE '3032'
AND ITAB-LOC NE '3042'
AND ITAB-LOC NE '3052'
AND ITAB-LOC NE '3062'
AND ITAB-LOC NE '3072'
AND ITAB-LOC NE '3092'
AND ITAB-LOC NE '3112'
AND ITAB-LOC NE '3612'.
DELETE ITAB.CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ '4000'.
IF ITAB-LOC NE '1052'
AND ITAB-LOC NE '4058'
AND ITAB-LOC NE '4055'.
DELETE ITAB.CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ '5000'.
IF ITAB-LOC NE '5001'
AND ITAB-LOC NE '5002'
AND ITAB-LOC NE '5003'
AND ITAB-LOC NE '5004'
AND ITAB-LOC NE '5005'
AND ITAB-LOC NE 'M101'
AND ITAB-LOC NE '5009'
AND ITAB-LOC NE '5010'.
DELETE ITAB.CONTINUE.
ENDIF.
ELSEIF ITAB-WERKS EQ 'PEIL'.
IF ITAB-LOC NE '1200'
AND ITAB-LOC NE 'D000'
AND ITAB-LOC NE 'C000'
AND ITAB-LOC NE '1042'
AND ITAB-LOC NE '1043'.
DELETE ITAB.CONTINUE.
ENDIF.
ENDIF.
WS_RATE = 0.
IF MBEW-VPRSV = 'V'.
MOVE MBEW-VERPR TO WS_RATE.
ELSEIF MBEW-VPRSV = 'S'.
MOVE MBEW-STPRS TO WS_RATE.
ENDIF.
IF ITAB-WERKS = '1000' OR ITAB-WERKS = '3000' OR ITAB-WERKS = '4000' OR ITAB-WERKS = 'PEIL'.
WA_VKORG = '1000'.
ELSE.
WA_VKORG = ITAB-WERKS.
ENDIF.
** FROM SALES DATA.
CALL FUNCTION 'ZSDF_GETPRDRATE'
EXPORTING
PM_MATNR = ITAB-MATNR
PM_VKORG = WA_VKORG
PM_DATE = ITAB-BUDAT
IMPORTING
CHANNEL = CHANNEL
RET_RATE = RET_RATE
EXCEPTIONS
OTHERS = 1.
IF RET_RATE > 0.
MOVE RET_RATE TO WS_RATE.
MOVE CHANNEL TO WS_CHANNEL.
ELSE.
MOVE ' ' TO WS_CHANNEL.
ENDIF.
IF WS_CHANNEL = '20' OR WS_CHANNEL = '21' OR WS_CHANNEL = '23'.
SELECT SINGLE * FROM MVKE WHERE MATNR EQ ITAB-MATNR AND
VTWEG IN ('20','21','23').
IF MVKE-KONDM = '01'.
WS_RATE = WS_RATE - ( WS_RATE * '0.30' ) .
WS_RATE = WS_RATE * '0.9324'.
ELSEIF MVKE-KONDM = '02'.
WS_RATE = WS_RATE - ( WS_RATE * '0.4091' ).
WS_RATE = WS_RATE * '0.9324'.
ELSEIF MVKE-KONDM = '03'.
WS_RATE = WS_RATE - ( WS_RATE * '0.3637' ).
WS_RATE = WS_RATE * '0.9324'.
ELSEIF MVKE-KONDM = '04'.
WS_RATE = WS_RATE - ( WS_RATE * '0.20' ).
WS_RATE = WS_RATE * '0.9324'.
ENDIF.
ENDIF.
COMPUTE WS_VALUE = ITAB-MENGE * WS_RATE.
WS_VALUE = WS_VALUE / 1000000.
READ TABLE ABS WITH KEY BUDAT = ITAB-BUDAT.
IF SY-SUBRC EQ 0.
IF ITAB-WERKS EQ '1000'.
ADD WS_VALUE TO ABS-VALUE1.
ELSEIF ITAB-WERKS EQ '2000'.
ADD WS_VALUE TO ABS-VALUE2.
ELSEIF ITAB-WERKS EQ '3000'.
ADD WS_VALUE TO ABS-VALUE3.
ELSEIF ITAB-WERKS EQ '4000'.
ADD WS_VALUE TO ABS-VALUE4.
ELSEIF ITAB-WERKS EQ '5000'.
ADD WS_VALUE TO ABS-VALUE5.
ELSEIF ITAB-WERKS EQ '6000'.
ADD WS_VALUE TO ABS-VALUE6.
ELSEIF ITAB-WERKS EQ 'PEIL'.
ADD WS_VALUE TO ABS-VALUE7.
ENDIF .
ABS-VALUE8 = ABS-VALUE1
+ ABS-VALUE2
+ ABS-VALUE3
+ ABS-VALUE4
+ ABS-VALUE5
+ ABS-VALUE6
+ ABS-VALUE7.
MODIFY ABS INDEX SY-TABIX.
CLEAR ABS.
ELSE.
MOVE ITAB-BUDAT TO ABS-BUDAT.
MOVE ITAB-LOC TO ABS-LOC.
MOVE ITAB-WERKS TO ABS-WERKS.
IF ITAB-WERKS EQ '1000'.
MOVE WS_VALUE TO ABS-VALUE1.
ELSEIF ITAB-WERKS EQ '2000'.
MOVE WS_VALUE TO ABS-VALUE2.
ELSEIF ITAB-WERKS EQ '3000'.
MOVE WS_VALUE TO ABS-VALUE3.
ELSEIF ITAB-WERKS EQ '4000'.
MOVE WS_VALUE TO ABS-VALUE4.
ELSEIF ITAB-WERKS EQ '5000'.
MOVE WS_VALUE TO ABS-VALUE5.
ELSEIF ITAB-WERKS EQ '6000'.
MOVE WS_VALUE TO ABS-VALUE6.
ELSEIF ITAB-WERKS EQ 'PEIL'.
MOVE WS_VALUE TO ABS-VALUE7.
ENDIF.
ABS-VALUE8 = ABS-VALUE1
+ ABS-VALUE2
+ ABS-VALUE3
+ ABS-VALUE4
+ ABS-VALUE5
+ ABS-VALUE6
+ ABS-VALUE7.
APPEND ABS.
CLEAR ABS.
ENDIF.
ENDLOOP.
LOOP AT ABS.
MAIL-BUDAT = ABS-BUDAT.
MAIL-LOC = ABS-LOC.
MAIL-WERKS = ABS-WERKS.
MAIL-VALUE1 = ABS-VALUE1.
MAIL-VALUE2 = ABS-VALUE2.
MAIL-VALUE3 = ABS-VALUE3.
MAIL-VALUE4 = ABS-VALUE4.
MAIL-VALUE5 = ABS-VALUE5.
MAIL-VALUE6 = ABS-VALUE6.
MAIL-VALUE7 = ABS-VALUE7.
MAIL-VALUE8 = ABS-VALUE8.
APPEND MAIL.
CLEAR MAIL.
ENDLOOP.
SORT MAIL BY BUDAT.
IF P_MAIL IS NOT INITIAL.
PERFORM MAIL.
ENDIF.
FCAT-COL_POS = 1.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'BUDAT'.
FCAT-SELTEXT_L = 'DATE'.
FCAT-OUTPUTLEN = 8.
FCAT-JUST = 'L'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 2.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE1'.
FCAT-SELTEXT_L = '1000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 3.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE2'.
FCAT-SELTEXT_L = '2000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 4.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE3'.
FCAT-SELTEXT_L = '3000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 5.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE4'.
FCAT-SELTEXT_L = '4000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 6.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE5'.
FCAT-SELTEXT_L = '5000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 7.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE6'.
FCAT-SELTEXT_L = '6000'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 8.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE7'.
FCAT-DO_SUM = 'X'.
FCAT-SELTEXT_L = 'PEIL'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
FCAT-COL_POS = 8.
FCAT-TABNAME = 'ABS'.
FCAT-FIELDNAME = 'VALUE8'.
FCAT-SELTEXT_L = 'TOTAL'.
FCAT-DO_SUM = 'X'.
FCAT-OUTPUTLEN = 10.
FCAT-JUST = 'R'.
APPEND FCAT.
CLEAR FCAT.
EVENT-FORM = 'PDN'.
EVENT-NAME = 'TOP_OF_PAGE'.
APPEND EVENT.
CLEAR EVENT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
IT_FIELDCAT = FCAT[]
IT_EVENTS = EVENT[]
TABLES
T_OUTTAB = ABS.
*&---------------------------------------------------------------------*
*& Form PDN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM PDN.
DATA: HEADER TYPE SLIS_T_LISTHEADER WITH HEADER LINE,
TEXT TYPE STRING,
LOWD TYPE GSUDISP OCCURS 0 WITH HEADER LINE,
HIGHD TYPE GSUDISP OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = SO_BUDAT-LOW
TABLES
TEXTS = LOWD.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = SO_BUDAT-HIGH
TABLES
TEXTS = HIGHD.
IF SO_BUDAT-HIGH IS NOT INITIAL AND SO_BUDAT-LOW NE SO_BUDAT-HIGH.
CONCATENATE 'Production Value For The Period : ' LOWD 'TO' HIGHD INTO TEXT SEPARATED BY SPACE.
ELSE.
CONCATENATE 'Production Value For The Date : ' LOWD INTO TEXT SEPARATED BY SPACE.
ENDIF.
HEADER-TYP = 'S'.
HEADER-INFO = TEXT.
APPEND HEADER.
CLEAR HEADER.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEADER[].
ENDFORM. "ICUG
*&---------------------------------------------------------------------*
*& Form MAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MAIL .
DATA: OBJPACK LIKE SOPCKLSTI1 OCCURS 2 WITH HEADER LINE.
DATA: OBJHEAD LIKE SOLISTI1 OCCURS 1 WITH HEADER LINE.
DATA: OBJBIN LIKE ZDATA_TABLE OCCURS 10 WITH HEADER LINE.
DATA: OBJTXT LIKE SOLISTI1 OCCURS 10 WITH HEADER LINE.
DATA: RECLIST LIKE SOMLRECI1 OCCURS 5 WITH HEADER LINE.
DATA: DOC_CHNG LIKE SODOCCHGI1.
DATA: TAB_LINES LIKE SY-TABIX.
DATA L_NUM(3).
DATA : SUBJECT(200) TYPE C.
DATA : SUB1(200) TYPE C.
DATA : SUB(200) TYPE C.
DATA : DATED TYPE GSUDISP OCCURS 0 WITH HEADER LINE,
DATE1D TYPE GSUDISP OCCURS 0 WITH HEADER LINE,
DATE2D TYPE GSUDISP OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = SO_BUDAT-LOW
TABLES
TEXTS = DATED.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = SO_BUDAT-HIGH
TABLES
TEXTS = DATE2D.
* Mail Subject
IF SO_BUDAT-HIGH IS INITIAL.
CONCATENATE 'Production Details For The Date' DATED-GTEXT INTO SUBJECT SEPARATED BY SPACE.
ELSE.
CONCATENATE 'Production Details From' DATED-GTEXT 'TO' DATE2D-GTEXT INTO SUBJECT SEPARATED BY SPACE.
ENDIF.
DOC_CHNG-OBJ_DESCR = SUBJECT.
* Mail Contents
CLEAR SUB.
IF SO_BUDAT-HIGH IS INITIAL.
CONCATENATE 'Production Details For The Date' DATED-GTEXT INTO SUB SEPARATED BY SPACE.
ELSE.
CONCATENATE 'Production Details From' DATED-GTEXT 'To' DATE2D-GTEXT INTO SUB SEPARATED BY SPACE.
ENDIF.
OBJTXT = SUB.
APPEND OBJTXT.
CLEAR SUB.
MOVE '-------------------------------------------------------------------------------' TO SUB.
OBJTXT = SUB.
APPEND OBJTXT.
CLEAR SUB1.
CONCATENATE 'Date......' SY-VLINE
'1000.' SY-VLINE
'2000.' SY-VLINE
'3000.' SY-VLINE
'4000.' SY-VLINE
'5000.' SY-VLINE
'6000.' SY-VLINE
'PEIL.' SY-VLINE
'TOTAL.....' SY-VLINE INTO SUB1 SEPARATED BY SPACE.
OBJTXT = SUB1.
APPEND OBJTXT.
MOVE '-------------------------------------------------------------------------------' TO SUB.
OBJTXT = SUB.
APPEND OBJTXT.
LOOP AT MAIL.
CLEAR SUB.
CALL FUNCTION 'PDOT_DATE_CONVERT'
EXPORTING
FIELD = MAIL-BUDAT
TABLES
TEXTS = DATE1D.
CONCATENATE DATE1D-GTEXT SY-VLINE
MAIL-VALUE1 SY-VLINE
MAIL-VALUE2 SY-VLINE
MAIL-VALUE3 SY-VLINE
MAIL-VALUE4 SY-VLINE
MAIL-VALUE5 SY-VLINE
MAIL-VALUE6 SY-VLINE
MAIL-VALUE7 SY-VLINE
MAIL-VALUE8 INTO SUB SEPARATED BY SPACE.
OBJTXT = SUB.
APPEND OBJTXT.
ENDLOOP.
* Footer Message in the mail.
MOVE '-------------------------------------------------------------------------------' TO SUB.
OBJTXT = SUB.
APPEND OBJTXT.
CLEAR SUB.
OBJTXT = SUB.
APPEND OBJTXT.
MOVE 'This is System Generated Message.' TO SUB.
OBJTXT = SUB.
APPEND OBJTXT.
* CREATION OF THE DOCUMENT ATTACHMENT
MOVE SUB1 TO OBJBIN-FIELD01.
APPEND OBJBIN.
LOOP AT MAIL.
CLEAR OBJBIN.
MOVE DATE1D-GTEXT TO OBJBIN-FIELD01.
MOVE MAIL-VALUE1 TO OBJBIN-FIELD02.
MOVE MAIL-VALUE2 TO OBJBIN-FIELD03.
MOVE MAIL-VALUE3 TO OBJBIN-FIELD04.
MOVE MAIL-VALUE4 TO OBJBIN-FIELD05.
MOVE MAIL-VALUE5 TO OBJBIN-FIELD06.
MOVE MAIL-VALUE6 TO OBJBIN-FIELD07.
MOVE MAIL-VALUE7 TO OBJBIN-FIELD08.
APPEND OBJBIN.
ENDLOOP.
* TARGET RECIPENT
LOOP AT P_MAIL.
CLEAR RECLIST.
RECLIST-RECEIVER = P_MAIL-LOW.
APPEND RECLIST.
CLEAR RECLIST.
ENDLOOP.
* SENDING THE DOCUMENT
CALL FUNCTION 'ZPM_SEND_MAIL_EXCEL_ATTACH'
EXPORTING
I_SUBJECT = SUBJECT
I_ATTACH_FNMAE = 'Production Details.XLS'
TABLES
RECEIVERS_LIST = RECLIST
DATA_TABLE = OBJBIN
MAIL_CONTENT = OBJTXT
EXCEPTIONS
TOO_MANY_RECEIVERS = 1
DOCUMENT_NOT_SENT = 2
DOCUMENT_TYPE_NOT_EXIST = 3
OPERATION_NO_AUTHORIZATION = 4
PARAMETER_ERROR = 5
X_ERROR = 6
OTHERS = 7.
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. "MAILThanks,
Sankar M
‎2008 Apr 16 10:49 AM
hi check this example ....
REPORT Z_TRANSPOSEALV .
Type pools declaration for ALV
TYPE-POOLS: slis.
*Declarations for ALV, dynamic table and col no for transpose
DATA: l_col TYPE sy-tabix,
l_structure TYPE REF TO data,
l_dyntable TYPE REF TO data,
wa_lvc_cat TYPE lvc_s_fcat,
lt_lvc_cat TYPE lvc_t_fcat,
lt_fieldcatalogue TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv,
lt_layout TYPE slis_layout_alv.
*Field symbols declarations
FIELD-SYMBOLS :
<header> TYPE ANY,
<dynheader> TYPE ANY,
<dyndata> TYPE ANY,
<ls_table> TYPE ANY,
<dynamictable> TYPE STANDARD TABLE,
<it_table> TYPE STANDARD TABLE.
*Input the name of the table
PARAMETERS p_table TYPE dd02l-tabname OBLIGATORY.
*Initialization event
INITIALIZATION.
*Start of selection event
START-OF-SELECTION.
Create internal table of dynamic type
CREATE DATA l_dyntable TYPE STANDARD TABLE OF (p_table)
WITH NON-UNIQUE DEFAULT KEY.
ASSIGN l_dyntable->* TO <it_table>.
*select statement to select data from the table as input into
*our dynamic internal table.
*Here i have restricted only till 5 rows.
*You can set a variable and give no of rows to be fetched
*The variable can be set in your select statement
SELECT * INTO CORRESPONDING FIELDS OF TABLE <it_table>
FROM (p_table) up to 5 rows.
*Fieldcatalogue definitions
wa_lvc_cat-fieldname = 'COLUMNTEXT'.
wa_lvc_cat-ref_table = 'LVC_S_DETA'.
APPEND wa_lvc_cat TO lt_lvc_cat.
wa_fieldcat-fieldname = 'COLUMNTEXT'.
wa_fieldcat-ref_tabname = 'LVC_S_DETA'.
wa_fieldcat-key = 'X'..
APPEND wa_fieldcat TO lt_fieldcat.
DESCRIBE TABLE <it_table>.
DO sy-tfill TIMES.
For each line, a column 'VALUEx' is created in the fieldcatalog
Build Fieldcatalog
WRITE sy-index TO wa_lvc_cat-fieldname LEFT-JUSTIFIED.
CONCATENATE 'VALUE' wa_lvc_cat-fieldname
INTO wa_lvc_cat-fieldname.
wa_lvc_cat-ref_field = 'VALUE'.
wa_lvc_cat-ref_table = 'LVC_S_DETA'.
APPEND wa_lvc_cat TO lt_lvc_cat.
Build Fieldcatalog
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = wa_lvc_cat-fieldname.
wa_fieldcat-ref_fieldname = 'VALUE'.
wa_fieldcat-ref_tabname = 'LVC_S_DETA'.
APPEND wa_fieldcat TO lt_fieldcat.
ENDDO.
Create dynamic internal table
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_lvc_cat
IMPORTING
ep_table = l_dyntable. ASSIGN l_dyntable->* TO
<dynamictable>.
Create structure as structure of the internal table
CREATE DATA l_structure LIKE LINE OF <dynamictable>.
ASSIGN l_structure->* TO <header>.
Create structure = structure of the internal table
CREATE DATA l_structure LIKE LINE OF <it_table>.
ASSIGN l_structure->* TO <ls_table>.
Create field catalog from our table structure
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = p_table
CHANGING
ct_fieldcat = lt_fieldcatalogue
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF. DESCRIBE TABLE lt_fieldcatalogue.
Fill the internal to display <dynamictable>
DO sy-tfill TIMES.
IF sy-index = 1.
READ TABLE lt_fieldcatalogue INTO wa_fieldcat INDEX 1.
ENDIF.
For each field of it_table
ASSIGN COMPONENT 1 OF STRUCTURE <header> TO <dynheader>.
IF sy-subrc NE 0. EXIT .ENDIF.
READ TABLE lt_fieldcatalogue INTO wa_fieldcat INDEX sy-index.
Fill 1st column
<dynheader> = wa_fieldcat-seltext_m.
IF <dynheader> IS INITIAL.
<dynheader> = wa_fieldcat-fieldname.
ENDIF.
*Filling the other columns
LOOP AT <it_table> INTO <ls_table>.
l_col = sy-tabix + 1.
ASSIGN COMPONENT sy-index OF STRUCTURE <ls_table> TO <dyndata>.
IF sy-subrc NE 0. EXIT .ENDIF.
ASSIGN COMPONENT l_col OF STRUCTURE <header> TO
<dynheader>.
IF sy-subrc NE 0. EXIT .ENDIF.
WRITE <dyndata> TO <dynheader> LEFT-JUSTIFIED.
ENDLOOP.
APPEND <header> TO <dynamictable>.
ENDDO.
*Layout for ALV output
lt_layout-zebra = 'X'.
lt_layout-no_colhead = 'X'..
lt_layout-colwidth_optimize ='X'.
lt_layout-window_titlebar = 'ALV GRID TRANSPOSED'.
*ALV Grid output for display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = lt_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = <dynamictable>.
regards,
venkat.
Edited by: venkat appikonda on Apr 16, 2008 11:52 AM