‎2007 Dec 18 11:07 AM
Hi all,
I have written a report for MRP. My certainpart of code is not working. i have highlighted it in bold for your convenience. please correct my code if rquired.
REPORT zmrpreport.
TABLES : mdkp,
makt,
mkpf,
eban.
TYPE-POOLS : slis.
DATA: it_sort TYPE slis_t_sortinfo_alv,
it_fieldcat TYPE slis_t_fieldcat_alv,
it_commentary TYPE slis_t_listheader,
it_events TYPE slis_t_event,
it_events_f TYPE slis_t_event.
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gd_layout TYPE slis_layout_alv.
DATA: fieldcatalog1 TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gd_layout1 TYPE slis_layout_alv.
*WORK AREA
DATA: wa_fieldcat LIKE LINE OF it_fieldcat,
wa_events LIKE LINE OF it_events,
wa_layout TYPE slis_layout_alv,
wa_print TYPE slis_print_alv,
wa_commentary TYPE slis_listheader.
DATA : it_mara TYPE TABLE OF mara WITH HEADER LINE.
DATA : it_j_2iregbal TYPE TABLE OF j_2iregbal.
DATA : it_zmatnumber TYPE TABLE OF zmatnumber WITH HEADER LINE.
DATA : it_mard TYPE TABLE OF mard WITH HEADER LINE.
DATA : it_mbew TYPE TABLE OF mbew WITH HEADER LINE.
DATA : it_mkpft TYPE TABLE OF mkpf WITH HEADER LINE.
DATA : it_msegt TYPE TABLE OF mseg WITH HEADER LINE.
DATA : wrk_receipts TYPE mseg-menge,
wrk_issues TYPE mseg-menge,
wrk_matnum TYPE mara-matnr,
wrk_ret TYPE mseg-menge.
DATA : wrk_index1 TYPE i.
DATA : wa_msegt LIKE LINE OF it_msegt.
DATA : BEGIN OF itab_output OCCURS 0,
matnr TYPE mara-matnr,
opstock LIKE mbew-lbkum,
clstock LIKE mbew-lbkum,
closestock LIKE mbew-lbkum,
issue LIKE mseg-menge,
rets LIKE mseg-menge,
rcpts LIKE mseg-menge,
END OF itab_output.
DATA : BEGIN OF ts_output OCCURS 0,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
minbe TYPE mdkp-minbe,
bstfx TYPE mdkp-bstfx,
banfn TYPE eban-banfn,
menge TYPE eban-menge,
ekgrp TYPE eban-ekgrp,
opstock LIKE mbew-lbkum,
clstock LIKE mbew-lbkum,
issue LIKE mseg-menge,
rets LIKE mseg-menge,
rcpts LIKE mseg-menge,
END OF ts_output.
DATA : BEGIN OF it_output OCCURS 0,
matnr TYPE mara-matnr,
maktx TYPE makt-maktx,
minbe TYPE mdkp-minbe,
bstfx TYPE mdkp-bstfx,
banfn TYPE eban-banfn,
menge TYPE eban-menge,
ekgrp TYPE eban-ekgrp,
END OF it_output.
DATA : it_mdkp TYPE TABLE OF mdkp WITH HEADER LINE.
DATA : it_eban TYPE TABLE OF eban WITH HEADER LINE.
*DATA : it_output TYPE TABLE OF ts_output WITH HEADER LINE.
DATA : wa_output LIKE LINE OF it_output.
DATA : wa_output1 LIKE LINE OF itab_output.
DATA : wa_output2 LIKE LINE OF ts_output.
DATA : wa_mkpft LIKE LINE OF it_mkpft.
&----
*" Selection screen Definition
&----
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_date FOR mdkp-dsdat,
S_GROUP FOR MDKP-EKGRP,
s_plant FOR mdkp-plwrk NO-EXTENSION NO INTERVALS,
S_dat FOR mkpf-budat NO-EXTENSION NO INTERVALS.
SELECTION-SCREEN END OF BLOCK b1.
*S_DATE = S_DATE+3(16).
IF SY-SUBRC = 0.
IF s_plant-LOW NE '' AND s_group NE '' AND s_date NE ''.
*SELECT **
FROM
mdkp
INTO CORRESPONDING FIELDS
OF TABLE it_mdkp
WHERE plwrk EQ s_plant-LOW
AND EKGRP IN S_GROUP
AND dsdat IN s_date.
AND minbe ne 0.*
ELSEIF
s_Plant-LOW NE ''
and s_group NE ''.
*SELECT **
FROM
mdkp
INTO CORRESPONDING FIELDS
OF TABLE it_mdkp
WHERE plwrk EQ s_plant-LOW
AND EKGRP IN S_GROUP.
ELSEIF
s_group NE ''
and s_date NE '' .
*SELECT **
FROM
mdkp
INTO CORRESPONDING FIELDS
OF TABLE it_mdkp
WHERE EKGRP IN S_GROUP
AND dsdat IN s_date.
endIF.
ENDIF.
IF IT_MDKP[] IS NOT INITIAL.
SELECT *
FROM
eban
INTO CORRESPONDING FIELDS
OF TABLE it_eban
FOR ALL ENTRIES IN it_mdkp
WHERE matnr EQ it_mdkp-matnr
AND erdat EQ it_mdkp-dsdat
AND estkz EQ 'B'
AND loekz NE 'X'
AND ebakz NE 'X'.
is there need of checking the qty as pr will be closed when entire qty is closed
will the same material get planned twice
ENDIF.
LOOP AT it_eban.
SELECT SINGLE * FROM makt WHERE matnr EQ it_eban-matnr.
IF sy-subrc EQ 0.
it_output-matnr = makt-matnr.
it_output-maktx = makt-maktx.
ENDIF.
READ TABLE it_mdkp WITH KEY matnr = it_eban-matnr.
IF sy-subrc EQ 0.
it_output-minbe = it_mdkp-minbe.
it_output-bstfx = it_mdkp-bstfx.
ENDIF.
it_output-banfn = it_eban-banfn.
it_output-menge = it_eban-menge.
it_output-ekgrp = it_eban-ekgrp.
APPEND it_output TO it_output.
ENDLOOP.
IF it_mdkp IS NOT INITIAL.
SELECT *
FROM
mbew
INTO TABLE
it_mbew
FOR ALL ENTRIES IN it_mdkp
WHERE matnr EQ it_mdkp-matnr.
ENDIF.
IF sy-subrc EQ 0.
LOOP AT it_mbew.
wa_output1-matnr = it_mbew-matnr.
wa_output1-clstock = it_mbew-lbkum .
wa_output1-opstock = it_mbew-lbkum .
wa_output1-closestock = it_mbew-lbkum .
APPEND wa_output1 TO itab_output .
CLEAR : it_mbew,
wa_output1.
ENDLOOP.
ENDIF.
S_dat = S_dat+3(8).
IF S_dat NE sy-datum.
SELECT *
FROM
mkpf
INTO TABLE it_mkpft
WHERE
budat LE sy-datum AND
budat GE S_dat.
IF sy-subrc EQ 0.
SELECT *
FROM
mseg
INTO TABLE it_msegt
FOR ALL ENTRIES IN it_mkpft
WHERE mblnr EQ it_mkpft-mblnr
AND bwart IN ('101','102','122','123','201','202').
IF sy-subrc EQ 0.
SORT it_msegt BY matnr.
LOOP AT it_msegt.
wrk_index1 = sy-tabix + 1.
READ TABLE it_msegt INTO wa_msegt INDEX wrk_index1.
IF it_msegt-matnr EQ wa_msegt-matnr.
*Adding up the Receipts and subtracting reversal of receipts
IF it_msegt-bwart EQ '101'.
wrk_receipts = wrk_receipts + it_msegt-menge.
ELSEIF it_msegt-bwart EQ '102'.
wrk_receipts = wrk_receipts - it_msegt-menge.
ENDIF.
*Adding up the Issues and subtracting the reversals
IF it_msegt-bwart EQ '201'.
wrk_issues = wrk_issues + it_msegt-menge.
ELSEIF it_msegt-bwart EQ '202'.
wrk_issues = wrk_issues - it_msegt-menge.
ENDIF.
*Adding up the Returns and subtracting the reversals
IF it_msegt-bwart EQ '122'.
wrk_ret = wrk_ret + it_msegt-menge.
ELSEIF it_msegt-bwart EQ '123'.
wrk_ret = wrk_ret - it_msegt-menge.
ENDIF.
ELSE."when last record or no
*Adding up the Receipts and subtracting reversal of receipts
IF it_msegt-bwart EQ '101'.
wrk_receipts = wrk_receipts + it_msegt-menge.
ELSEIF it_msegt-bwart EQ '102'.
wrk_receipts = wrk_receipts - it_msegt-menge.
ENDIF.
*Adding up the Issues and subtracting the reversals
IF it_msegt-bwart EQ '201'.
wrk_issues = wrk_issues + it_msegt-menge.
ELSEIF it_msegt-bwart EQ '202'.
wrk_issues = wrk_issues - it_msegt-menge.
ENDIF.
*Adding up the Returns and subtracting the reversals
IF it_msegt-bwart EQ '122'.
wrk_ret = wrk_ret + it_msegt-menge.
ELSEIF it_msegt-bwart EQ '123'.
wrk_ret = wrk_ret - it_msegt-menge.
ENDIF.
READ TABLE itab_output INTO wa_output1 WITH KEY matnr = it_msegt-matnr. " changed mbewt instead of msegt
IF sy-subrc EQ 0.
wa_output1-rcpts = wrk_receipts.
wa_output1-issue = wrk_issues.
wa_output1-rets = wrk_ret.
wa_output1-opstock = wa_output1-clstock + wa_output1-issue + wa_output1-rets - wa_output1-rcpts.
MODIFY itab_output FROM wa_output1 INDEX sy-tabix TRANSPORTING opstock issue rets rcpts.
ENDIF.
CLEAR : wrk_receipts,
wrk_issues,
wrk_ret,
wrk_index1.
ENDIF.
CLEAR : wa_output1,
it_msegt,
wa_msegt.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
*IF sy-subrc EQ 0.
SELECT *
FROM
eban
INTO CORRESPONDING FIELDS
OF TABLE it_eban
FOR ALL ENTRIES IN it_mdkp
WHERE matnr EQ it_mdkp-matnr
AND erdat EQ it_mdkp-dsdat
AND estkz EQ 'B'
AND loekz NE 'X'
AND ebakz NE 'X'.
is there need of checking the qty as pr will be closed when entire qty is closed
will the same material get planned twice
*ENDIF.
*LOOP AT it_eban.
SELECT SINGLE * FROM makt WHERE matnr EQ it_eban-matnr.
IF sy-subrc EQ 0.
it_output-matnr = makt-matnr.
it_output-maktx = makt-maktx.
ENDIF.
READ TABLE it_mdkp WITH KEY matnr = it_eban-matnr.
IF sy-subrc EQ 0.
it_output-minbe = it_mdkp-minbe.
it_output-bstfx = it_mdkp-bstfx.
ENDIF.
it_output-banfn = it_eban-banfn.
it_output-menge = it_eban-menge.
it_output-ekgrp = it_eban-ekgrp.
APPEND it_output TO it_output.
*ENDLOOP.
LOOP AT it_output.
CLEAR ts_output.
wa_output2-matnr = it_output-matnr.
wa_output2-maktx = it_output-maktx.
wa_output2-minbe = it_output-minbe.
wa_output2-bstfx = it_output-bstfx.
wa_output2-banfn = it_output-banfn.
wa_output2-menge = it_output-menge.
wa_output2-ekgrp = it_output-ekgrp.
READ TABLE itab_output WITH KEY matnr = it_output-matnr.
IF sy-subrc = 0.
wa_output2-rcpts = itab_output-rcpts.
wa_output2-rets = itab_output-rets.
wa_output2-issue = itab_output-issue.
wa_output2-opstock = itab_output-opstock.
wa_output2-clstock = itab_output-clstock.
ENDIF.
APPEND wa_output2 TO ts_output.
ENDLOOP.
fieldcatalog-fieldname = 'MATNR'.
fieldcatalog-seltext_m = 'Material No'.
fieldcatalog-col_pos = 1.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MAKTX'.
fieldcatalog-seltext_m = 'Material Description'.
fieldcatalog-col_pos = 2.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MINBE'.
fieldcatalog-seltext_m = 'Reorder Point'.
fieldcatalog-col_pos = 3.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'BSTFX'.
fieldcatalog-seltext_m = 'Fixed Lot Size'.
fieldcatalog-col_pos = 4.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'BANFN'.
fieldcatalog-seltext_m = 'Purchase Requisition No'.
fieldcatalog-col_pos = 5.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MENGE'.
fieldcatalog-seltext_m = 'P.R.Qty'.
fieldcatalog-col_pos = 6.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'EKGRP'.
fieldcatalog-seltext_m = 'P GROUP'.
fieldcatalog-col_pos = 7.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'OPSTOCK'.
fieldcatalog-seltext_m = ' STOCK '.
fieldcatalog-col_pos = 8.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
gd_layout-zebra = 'X'.
IF ts_output[] IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER = ' '
I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
I_CALLBACK_PF_STATUS_SET = ' '
i_callback_user_command = 'USER_COMMAND'
I_CALLBACK_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS =
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
i_default = 'X'
i_save = 'A'
IS_VARIANT =
it_events = v_events
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
I_HTML_HEIGHT_TOP = 0
I_HTML_HEIGHT_END = 0
IT_ALV_GRAPHICS =
IT_HYPERLINK =
IT_ADD_FIELDCAT =
IT_EXCEPT_QINFO =
IR_SALV_FULLSCREEN_ADAPTER =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = ts_output
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
MESSAGE 'No Materials Planned' TYPE 'E'.
ENDIF.
please help in this regard.
useful suggestions will be rewarded.
with thanks,
karthi.
‎2007 Dec 18 11:24 AM
‎2007 Dec 18 11:33 AM
i have 4 input for my report. in that if mrpdate, purchasing group and plant are given then i need to select values based on that or if only mrpdate and purchasing group are given then based on these two values i need to select values or if only purchasing group and plant are given then i need to select values based on that. but the highlighted select codings is not working for the first condition. so anyone could solve this please reply.
‎2007 Dec 18 11:33 AM
‎2007 Dec 19 6:13 AM