Application Development 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: 

How can i display mounthly report

asim_isik
Active Participant
0 Kudos

Hi experts,

i need to add mounthly report in my report here is my code could any one one help me please ?

TABLES mseg.

TABLES mkpf.

TABLES dfies.

TYPES: BEGIN OF gs_seri,

   mblnr TYPE mseg-mblnr,

   mjahr TYPE mseg-mjahr,

   zeile TYPE mseg-zeile,

   budat TYPE mkpf-budat,

   bwart TYPE mseg-bwart,

   matnr TYPE mseg-matnr,

   werks TYPE mseg-werks,

   menge TYPE mseg-menge,

   meins TYPE mseg-meins,

   maktx TYPE makt-maktx,

   END OF gs_seri.

TYPES: BEGIN OF gs_collect,

   budat TYPE mkpf-budat,

   matnr TYPE mseg-matnr,

   werks TYPE mseg-werks,

   menge TYPE mseg-menge,

   meins TYPE mseg-meins,

   maktx TYPE makt-maktx,

   END OF gs_collect.

   DATA s_seri TYPE gs_seri.

   DATA gt_seri TYPE STANDARD TABLE OF gs_seri WITH HEADER LINE.

   DATA gt_collect TYPE STANDARD TABLE OF gs_collect WITH HEADER LINE.

SELECT-OPTIONS: so_matnr for mseg-matnr,

                 so_budat for mkpf-budat,

                 so_menge for mseg-menge.

PARAMETERS so_werks TYPE mseg-werks OBLIGATORY DEFAULT '1200'.

SELECT ms~mblnr ms~mjahr zeile budat bwart ms~matnr werks menge meins maktx

    INTO CORRESPONDING FIELDS OF TABLE gt_seri

    FROM mseg as ms INNER JOIN mkpf as mk

   on ms~mblnr = mk~mblnr and ms~mjahr = mk~mjahr

   INNER JOIN makt as ma ON ma~matnr = ms~matnr and ma~spras = sy-langu

   WHERE ma~matnr = ms~matnr and

        ms~matnr in so_matnr and

        mk~budat in so_budat AND

        ms~menge in so_menge and

        bwart in ('131','132').

  if sy-subrc = 0.

LOOP AT gt_seri.

     CASE gt_seri-bwart.

     WHEN '132'.

       gt_seri-menge = gt_seri-menge * -1.

       MODIFY gt_seri.

   ENDCASE.

   CLEAR gt_collect.

   MOVE-CORRESPONDING gt_seri to gt_collect.

   COLLECT  gt_collect.

endloop.

    LOOP AT gt_collect.

   AT FIRST.

WRITE : SY-ULINE(100),

         /1 SY-VLINE,

         25 'Seri Üretim Hareketleri',

         100 SY-VLINE,

         / SY-ULINE(100),

         /1 SY-VLINE,

         'Üretim Yeri' ,

         20 SY-VLINE,

         22 'Malzeme',

         38 SY-VLINE,

         40 'Malzeme Tanımı',

         66 SY-VLINE,

         67 'Miktar',

         82 SY-VLINE,

         83 'Ölçü Birimi',

         100 SY-VLINE,

       / SY-ULINE(100).

ENDAT.

WRITE :/1 SY-VLINE,

         2 gt_collect-werks ,

         20 SY-VLINE,

         22 gt_collect-matnr,

         38 SY-VLINE,

         40 gt_collect-maktx,

         66 SY-VLINE,

         67 gt_collect-menge,

         82 SY-VLINE,

         83 gt_collect-meins,

         100 SY-VLINE.

HIDE gt_collect-MATNR.

CLEAR gt_collect-MATNR.

WRITE: / SY-ULINE(100).

ENDLOOP.

   ENDif.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

hi asim,

       from the above report what u exactly want as in output.

regards,

prabhakaran

6 REPLIES 6

Former Member
0 Kudos

hi asim,

       from the above report what u exactly want as in output.

regards,

prabhakaran

0 Kudos

Hi Prabhakaran ,

This code shows movement of mass production for daily and i want to see also as monthly report under line as red color

0 Kudos

0 Kudos

hi asim .

          try this suppose u want consolidated output for each month means write a code in if loop as per ur requirement.

          try to use ALV report instead of classical report it ll be more convenient.

*&---------------------------------------------------------------------*
*& Report  ZSAT1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSAT1.
TABLES mseg.

TABLES mkpf.

TABLES dfies.



TYPES: BEGIN OF gs_seri,

    mblnr TYPE mseg-mblnr,

    mjahr TYPE mseg-mjahr,

    zeile TYPE mseg-zeile,

    budat TYPE mkpf-budat,

    bwart TYPE mseg-bwart,

    matnr TYPE mseg-matnr,

    werks TYPE mseg-werks,

    menge TYPE mseg-menge,

    meins TYPE mseg-meins,

    maktx TYPE makt-maktx,

    END OF gs_seri.



TYPES: BEGIN OF gs_collect,

    budat TYPE mkpf-budat,

    matnr TYPE mseg-matnr,

    werks TYPE mseg-werks,

    menge TYPE mseg-menge,

    meins TYPE mseg-meins,

    maktx TYPE makt-maktx,

    END OF gs_collect.

DATA: BEGIN OF MONTH_NAMES OCCURS 0.

         INCLUDE STRUCTURE T247.

DATA: END OF MONTH_NAMES.



    DATA s_seri TYPE gs_seri.

    data: month TYPE i,
          month1 TYPE i,
         count TYPE i.





    DATA gt_seri TYPE STANDARD TABLE OF gs_seri WITH HEADER LINE.

    DATA gt_collect TYPE STANDARD TABLE OF gs_collect WITH HEADER LINE.



SELECT-OPTIONS: so_matnr for mseg-matnr,

                  so_budat for mkpf-budat,

                  so_menge for mseg-menge.



PARAMETERS so_werks TYPE mseg-werks OBLIGATORY DEFAULT '1200'.



SELECT ms~mblnr ms~mjahr zeile budat bwart ms~matnr werks menge meins maktx

     INTO CORRESPONDING FIELDS OF TABLE gt_seri

     FROM mseg as ms INNER JOIN mkpf as mk

    on ms~mblnr = mk~mblnr and ms~mjahr = mk~mjahr

    INNER JOIN makt as ma ON ma~matnr = ms~matnr and ma~spras = sy-langu

    WHERE ma~matnr = ms~matnr and

         ms~matnr in so_matnr and

         mk~budat in so_budat AND

         ms~menge in so_menge and

         bwart in ('131','132').





   if sy-subrc = 0.


call function 'MONTH_NAMES_GET'
  EXPORTING
    LANGUAGE                    = SY-LANGU
* IMPORTING
*   RETURN_CODE                 =
   tables
     month_names                 month_names
  EXCEPTIONS
    MONTH_NAMES_NOT_FOUND       = 1
    OTHERS                      = 2
           .
if sy-subrc <> 0.
* Implement suitable error handling here
endif.




LOOP AT gt_seri.

      CASE gt_seri-bwart.

      WHEN '132'.

        gt_seri-menge = gt_seri-menge * -1.

        MODIFY gt_seri.

    ENDCASE.

    CLEAR gt_collect.

    MOVE-CORRESPONDING gt_seri to gt_collect.

    COLLECT  gt_collect.

endloop.


clear count.
     LOOP AT gt_collect.

month = gt_collect-budat+4(2).

if month = '12'.
   month = 0.
endif.

if month = count.

*  // suppose u want consolidated each month is displayed as separate output means
*  // write a logic here whatever u want.
*  // use ALV report it will more covinient.


ENDIF.



    AT FIRST.

WRITE : SY-ULINE(115),

          /1 SY-VLINE,

          25 'Seri Üretim Hareketleri',

          115 SY-VLINE,

          / SY-ULINE(115),

          /1 SY-VLINE,

          'Üretim Yeri' ,

          20 SY-VLINE,

          22 'Malzeme',

          38 SY-VLINE,

          40 'Malzeme Tanımı',

          66 SY-VLINE,

          67 'Miktar',

          82 SY-VLINE,

          83 'Ölçü Birimi',

          100 SY-VLINE,

          101 'month' COLOR 6,

          115 sy-vline,

        / SY-ULINE(115).

ENDAT.


WRITE :/1 SY-VLINE,

          2 gt_collect-werks,

          20 SY-VLINE,

          22 gt_collect-matnr,

          38 SY-VLINE,

          40 gt_collect-maktx,

          66 SY-VLINE,

          67 gt_collect-menge,

          82 SY-VLINE,

          83 gt_collect-meins,


          100 SY-VLINE.

          month1 = gt_collect-budat+4(2).

          READ TABLE MONTH_NAMES WITH KEY MNR = month1.


     WRITE: 101 MONTH_NAMES-LTX COLOR 6,


          115 sy-vline.




HIDE gt_collect-MATNR.

CLEAR gt_collect-MATNR.

WRITE: / SY-ULINE(115).


count = month + 1.


ENDLOOP.



    ENDif.

reward points if the answer is helpful means...

regards,

prabhakaran.k.

0 Kudos

Hello Asim,

You are taking BUDAT as your summarizing factor, which has date.

Rather taking the whole date for this, take only the month and year part of it and thus, will help you in summarizing this per month basis.

Regards,

Reji

0 Kudos

Hi Praphakaran ,

Thanks for your helpfull answer but shows the name of the month i need to show month report as sum of the menge in that mounth for example choosed 10.01.2013 so it will show 01.01.2013 between 31.01.2013 and i solved it

IF so_budat[] is NOT INITIAL.

   DaTA: lv_date TYPE sy-datum,

         lv_date1 TYPE sy-datum.

   CONCATENATE  so_budat-low(4) so_budat-low+4(2) '01'   INTO lv_date.

   CALL FUNCTION 'LAST_DAY_OF_MONTHS'

     EXPORTING

       DAY_IN                  = lv_date

    IMPORTING

      LAST_DAY_OF_MONTH       = lv_date1

* EXCEPTIONS

*   DAY_IN_NO_DATE          = 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.

ENDIF.

if  lv_date IS NOT INITIAL and lv_date1 IS NOT INITIAL.

   SELECT menge

      APPENDING CORRESPONDING FIELDS OF TABLE gt_seri1

      FROM mseg as ms INNER JOIN mkpf as mk

     on ms~mblnr = mk~mblnr and ms~mjahr = mk~mjahr

     INNER JOIN makt as ma ON ma~matnr = ms~matnr and ma~spras = sy-langu

     WHERE ma~matnr = ms~matnr and

          ms~matnr in so_matnr and

          mk~budat BETWEEN lv_date AND lv_date1 and

          ms~menge in so_menge and

          bwart in ('131','132').

endif.