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

row column

Former Member
0 Likes
403

Hi,

Please provide with row to column vise versa coding.

Thanks in advance..

1 ACCEPTED SOLUTION
Read only

p291102
Active Contributor
0 Likes
372

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.                    "MAIL

Thanks,

Sankar M

2 REPLIES 2
Read only

p291102
Active Contributor
0 Likes
373

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.                    "MAIL

Thanks,

Sankar M

Read only

Former Member
0 Likes
372

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