04-12-2013 3:40 PM
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,
2 'Ü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.
04-15-2013 5:05 AM
hi asim,
from the above report what u exactly want as in output.
regards,
prabhakaran
04-15-2013 5:05 AM
hi asim,
from the above report what u exactly want as in output.
regards,
prabhakaran
04-15-2013 7:02 AM
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
04-15-2013 7:44 AM
04-15-2013 9:46 AM
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,
2 'Ü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.
04-15-2013 9:51 AM
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
04-15-2013 1:13 PM
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.