on 05-01-2007 8:02 AM
Hi Experts,
Kindly find the solutions for the following:
1) In this scenario we have 4 plants, namely, CHN1, MUB1,DEL1 and HYD1.
Under CHNI, we have 3 storage locations, namely, ADR1, VSK1,CHB1
Under MUB1, We have 3 storage locations, namely, PUN1,THN1,GJR1
Under DEL1 consider all storage locations except CHB1
Under HYDI consider all storage locations except GJR1
Please define the loop statement/conditions for the above in the below program. Kindly locate in the below program.
2) Backlogs to be considered or added in demand for all purchase material.
3) The report should be rolling and not Quarter wise.
4) Display weeks as per WIN weeks in Distribution.
Please locate the solutions in the below program for the above query.
Program Description : Material Planning Requirement
***********************************************************************
REPORT zpp_mat_req_planning_new NO STANDARD PAGE HEADING LINE-SIZE 1023.
**************************************
TABLE DECLARATIONS
**************************************
TABLES: mast,
mara,
ekko,
ekpo,
marc, "Plant Data for Material
mard, "Storage Location Data for Material
pbid, "Planned independent requirements index: MRP area
pbed, "Independent Requirements Data
pbhi, "Independent Requirements History
zcalendar.
************************************************************************
INTERNAL TABLE DECLARATION
************************************************************************
DATA it_mast LIKE mast OCCURS 0 WITH HEADER LINE.
DATA it_marc LIKE marc OCCURS 0 WITH HEADER LINE.
DATA it_imatcat TYPE cscmat OCCURS 0 WITH HEADER LINE.
DATA itopmat TYPE cstmat OCCURS 0 WITH HEADER LINE.
DATA idstst TYPE csdata-xfeld .
DATA istb LIKE stpox OCCURS 0 WITH HEADER LINE.
DATA imatcat TYPE cscmat OCCURS 0 WITH HEADER LINE.
WEEKLY CONSUMPTION OF PUR MATERIAL
DATA : BEGIN OF i_bom OCCURS 0,
matnr LIKE pbid-matnr, "MATERIAL
werks LIKE stpox-werks,
idnrk LIKE stpox-idnrk, "BOM COMPONENT
ojtxp LIKE stpox-ojtxp, "DESCRIPTION
menge LIKE stpox-menge, "COMPONENT QUANTITY
meins LIKE stpox-meins, "COMPONENT UNIT OF MEASURE
beskz LIKE marc-beskz, "Procurement type
cons LIKE pbed-plnmg,
wkc1 LIKE pbed-plnmg,
wkc2 LIKE pbed-plnmg,
wkc3 LIKE pbed-plnmg,
wkc4 LIKE pbed-plnmg,
wkc5 LIKE pbed-plnmg,
wkc6 LIKE pbed-plnmg,
wkc7 LIKE pbed-plnmg,
wkc8 LIKE pbed-plnmg,
wkc9 LIKE pbed-plnmg,
wkc10 LIKE pbed-plnmg,
wkc11 LIKE pbed-plnmg,
wkc12 LIKE pbed-plnmg,
END OF i_bom.
CONSUMPTION
DATA: BEGIN OF it_bom OCCURS 0,
matnr LIKE pbid-matnr, "MATERIAL
werks LIKE stpox-werks,
idnrk LIKE stpox-idnrk, "BOM COMPONENT
ojtxp LIKE stpox-ojtxp, "DESCRIPTION
menge LIKE stpox-menge, "COMPONENT QUANTITY
meins LIKE stpox-meins, "COMPONENT UNIT OF MEASURE
beskz LIKE marc-beskz, "Procurement type
cons LIKE pbed-plnmg,
END OF it_bom.
DISPLAY FINAL OUTPUT
DATA : BEGIN OF i_final OCCURS 0,
werks LIKE stpox-werks,
idnrk LIKE stpox-idnrk, "BOM COMPONENT
ojtxp LIKE stpox-ojtxp, "DESCRIPTION
meins LIKE stpox-meins, "COMPONENT UNIT OF MEASURE
menge LIKE stpox-menge, "COMPONENT QUANTITY
req_qty LIKE stpox-menge, "COMPONENT QUANTITY
matnr LIKE pbid-matnr, "MATERIAL NUMBER
avg_cons LIKE pbed-plnmg,
END OF i_final.
DISPLAYING PURCHASE MATERIAL OUTPUT
DATA : BEGIN OF i_mat_out OCCURS 0,
matnr LIKE mara-matnr,
slno LIKE sy-index, "SERIAL NUMBER
idnrk LIKE stpo-idnrk, "BOM COMPONENT
ojtxp LIKE istb-ojtxp, "material description
meins LIKE stpo-meins, "COMPONENT UNIT OF MEASURE
plnmg LIKE pbed-plnmg, "PLANNED ORDER QUANTITY
menge LIKE stpo-menge, "COMPONENT QUANTITY
menge1 LIKE ekpo-menge, "Pend PO QTY
labst LIKE mard-labst, "UnRes Stk
insme LIKE mard-insme, "QualityStk
speme LIKE mard-speme, "Blocked Stk
total LIKE mard-labst,
coverage LIKE mard-labst,
END OF i_mat_out.
PURCHASE MATERIAL STOCK for first part
DATA: BEGIN OF it_child_mat_stk OCCURS 0,
matnr LIKE mard-matnr,
werks LIKE mard-werks,
labst LIKE mard-labst,
insme LIKE mard-insme,
speme LIKE mard-speme,
total LIKE mard-labst,
coverage LIKE mard-labst,
END OF it_child_mat_stk.
OPEN PURCHASE ORDER QTY for first part
DATA:BEGIN OF it_ekpo OCCURS 0,
ebeln LIKE ekko-ebeln,
ebelp LIKE ekpo-ebelp,
matnr LIKE ekpo-matnr,
werks LIKE ekpo-werks,
menge LIKE ekpo-menge,
END OF it_ekpo.
*DISPLAYING PARENT MATERIAL OUTPUT (SECOND PART)
DATA : BEGIN OF i_mat_det OCCURS 0,
slno LIKE sy-index, "SERIAL NUMBER
matnr LIKE pbid-matnr, "PLANNED ORDER MATERIAL NUMBER
labst LIKE mard-labst, "STOCK
insme LIKE mard-insme,
speme LIKE mard-speme,
total LIKE mard-labst,
backlog LIKE mard-labst,
wkno1 LIKE pbed-plnmg,
wkno2 LIKE pbed-plnmg,
wkno3 LIKE pbed-plnmg,
wkno4 LIKE pbed-plnmg,
wkno5 LIKE pbed-plnmg,
wkno6 LIKE pbed-plnmg,
wkno7 LIKE pbed-plnmg,
wkno8 LIKE pbed-plnmg,
wkno9 LIKE pbed-plnmg,
wkno10 LIKE pbed-plnmg,
wkno11 LIKE pbed-plnmg,
wkno12 LIKE pbed-plnmg,
req LIKE pbed-plnmg,
act_req LIKE pbed-plnmg,
avg_cons LIKE pbed-plnmg,
v_cons LIKE pbed-plnmg,
total_avg LIKE pbed-plnmg,
END OF i_mat_det.
*DISPLAYING PARENT MATERIAL
DATA: BEGIN OF it_p_mat_stk OCCURS 0, " for second part
matnr LIKE mard-matnr,
werks LIKE mard-werks,
labst LIKE mard-labst,
insme LIKE mard-insme,
speme LIKE mard-speme,
total LIKE mard-labst,
backlog LIKE mard-labst,
END OF it_p_mat_stk.
*BACKLOG MATERIAL
DATA : BEGIN OF it_pbid OCCURS 0,
pbdid LIKE pbid-pbdid, "Planned independent
pbdnr LIKE pbid-pbdnr, "requirements identification
matnr LIKE pbid-matnr, "Material Number
berid LIKE pbid-berid, "MRP area
werks LIKE pbid-werks, "Plant
bedae LIKE pbid-bedae, "Requirements type
bdzei LIKE pbid-bdzei, "Delivery/order finish date
loevr LIKE pbid-loevr, "Deletion indicator
pdatu LIKE pbed-pdatu, "Reqstd date
wdatu LIKE pbed-wdatu, "Independent requirements pointer
meins LIKE pbed-meins, "Base Unit of Measure
plnmg LIKE pbed-plnmg, "Planned quantity
perxx LIKE pbed-perxx, "Planning period
totplnmg LIKE pbed-plnmg,
END OF it_pbid.
*BACKLOG MATERIAL1
DATA : BEGIN OF it_pbed OCCURS 0,
bdzei LIKE pbid-bdzei, "Delivery/order finish date
pdatu LIKE pbed-pdatu, "Reqstd date
meins LIKE pbed-meins, "Base Unit of Measure
plnmg LIKE pbed-plnmg, "Planned quantity
perxx LIKE pbed-perxx, "Planning period
matnr LIKE pbid-matnr,
werks LIKE pbid-werks,
END OF it_pbed.
DATA: it_pbid1 LIKE it_pbid OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF i_pbid OCCURS 0,
matnr LIKE pbid-matnr,
totplnmg LIKE pbed-plnmg,
END OF i_pbid.
DATA: BEGIN OF it_cal OCCURS 0,
cntr TYPE i,
endt LIKE zcalendar-enddt,
sapweekno LIKE zcalendar-sapweekno,
wfpweekno LIKE zcalendar-wfpweekno,
END OF it_cal.
DATA: BEGIN OF it_req OCCURS 0,
matnr LIKE mara-matnr,
wkno1 LIKE pbed-plnmg,
wkno2 LIKE pbed-plnmg,
wkno3 LIKE pbed-plnmg,
wkno4 LIKE pbed-plnmg,
wkno5 LIKE pbed-plnmg,
wkno6 LIKE pbed-plnmg,
wkno7 LIKE pbed-plnmg,
wkno8 LIKE pbed-plnmg,
wkno9 LIKE pbed-plnmg,
wkno10 LIKE pbed-plnmg,
wkno11 LIKE pbed-plnmg,
wkno12 LIKE pbed-plnmg,
END OF it_req.
weekly consumption of material.
DATA: BEGIN OF it_wkcons OCCURS 0,
idnrk LIKE stpox-idnrk,
wkv1 LIKE pbed-plnmg,
wkv2 LIKE pbed-plnmg,
wkv3 LIKE pbed-plnmg,
wkv4 LIKE pbed-plnmg,
wkv5 LIKE pbed-plnmg,
wkv6 LIKE pbed-plnmg,
wkv7 LIKE pbed-plnmg,
wkv8 LIKE pbed-plnmg,
wkv9 LIKE pbed-plnmg,
wkv10 LIKE pbed-plnmg,
wkv11 LIKE pbed-plnmg,
wkv12 LIKE pbed-plnmg,
END OF it_wkcons.
********************************************************************
VARIABLES DECLARATION.
********************************************************************
DATA: v_matnr LIKE mara-matnr,
v1_matnr LIKE mara-matnr,
v_werks LIKE marc-werks,
v_menge(18) TYPE c,
l_matnr1 TYPE v_matnr,
l_matnr2 TYPE v_matnr.
DATA: slno TYPE i,
counter TYPE i,
n TYPE i,num TYPE i,
it TYPE i,
totplnmg LIKE pbed-plnmg,
totlabst TYPE i,
totinsme TYPE i,
totspeme TYPE i.
DATA: v_wkno1 LIKE zcalendar-wfpweekno,
v_wkno2 LIKE zcalendar-wfpweekno,
v_wkno3 LIKE zcalendar-wfpweekno,
v_wkno4 LIKE zcalendar-wfpweekno,
v_wkno5 LIKE zcalendar-wfpweekno,
v_wkno6 LIKE zcalendar-wfpweekno,
v_wkno7 LIKE zcalendar-wfpweekno,
v_wkno8 LIKE zcalendar-wfpweekno,
v_wkno9 LIKE zcalendar-wfpweekno,
v_wkno10 LIKE zcalendar-wfpweekno,
v_wkno11 LIKE zcalendar-wfpweekno,
v_wkno12 LIKE zcalendar-wfpweekno,
v_wkno13 LIKE zcalendar-wfpweekno.
DATA: l_wkno1 LIKE pbed-plnmg,
l_wkno2 LIKE pbed-plnmg,
l_wkno3 LIKE pbed-plnmg,
l_wkno4 LIKE pbed-plnmg,
l_wkno5 LIKE pbed-plnmg,
l_wkno6 LIKE pbed-plnmg,
l_wkno7 LIKE pbed-plnmg,
l_wkno8 LIKE pbed-plnmg,
l_wkno9 LIKE pbed-plnmg,
l_wkno10 LIKE pbed-plnmg,
l_wkno11 LIKE pbed-plnmg,
l_wkno12 LIKE pbed-plnmg,
l_wkno13 LIKE pbed-plnmg,
l_wkno14 LIKE pbed-plnmg,
l_wkno15 LIKE pbed-plnmg,
l_wkno16 LIKE pbed-plnmg,
l_wkno17 LIKE pbed-plnmg,
req LIKE pbed-plnmg,
act_req LIKE pbed-plnmg,
avg_cons LIKE pbed-plnmg,
v_cons LIKE pbed-plnmg,
total_avg LIKE pbed-plnmg.
DATA: wk1 LIKE pbed-plnmg,
wk2 LIKE pbed-plnmg,
wk3 LIKE pbed-plnmg,
wk4 LIKE pbed-plnmg,
wk5 LIKE pbed-plnmg,
wk6 LIKE pbed-plnmg,
wk7 LIKE pbed-plnmg,
wk8 LIKE pbed-plnmg,
wk9 LIKE pbed-plnmg,
wk10 LIKE pbed-plnmg,
wk11 LIKE pbed-plnmg,
wk12 LIKE pbed-plnmg.
************************************************************************
SELECTION-SCREEN
************************************************************************
SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_matnr FOR pbid-matnr OBLIGATORY.
SELECT-OPTIONS : s_date FOR pbed-pdatu OBLIGATORY. "DEFAULT sy-datum
PARAMETERS : p_werks LIKE pbid-werks OBLIGATORY. "DEFAULT 'BLR1' .
SELECTION-SCREEN : END OF BLOCK b1.
********************************************************************
*AT SELECTION-SCREEN.
*********************************************************************
********************************************************************
*START-OF-SELECTION
********************************************************************
START-OF-SELECTION.
convert to week.
PERFORM convert_to_week.
BOM EXPLOSION & COLLECTING DATA.
PERFORM collect_bom_mat.
*GETTING STOCK DATA.
PERFORM get_data.
************************************************************************
End-Of-Selection
************************************************************************
END-OF-SELECTION.
CLEAR num.
DESCRIBE TABLE it_mast LINES num.
IF num LE 120.
PERFORM display_output.
PERFORM material_output.
ELSEIF num GE 120.
MESSAGE 'Enter material range upto 120 only ' TYPE 'I'.
STOP.
ENDIF.
*DISPLAY FIRST PART OUTPUT.
PERFORM display_output.
*DISPLAY SECOND PART OUTPUT.
PERFORM material_output.
*&----
**& Form convert_to_week
*&----
FORM convert_to_week.
DATA : lv_week LIKE scal-week,
l_date LIKE sy-datum,
num TYPE n.
DATA: l_cntr TYPE i.
IF s_date-low = sy-datum.
l_date = s_date-low - 84.
ELSE.
l_date = s_date-low.
ENDIF.
CALL FUNCTION 'DATE_GET_WEEK'
EXPORTING
date = l_date
IMPORTING
week = lv_week.
SELECT * FROM zcalendar WHERE sapweekno GT lv_week.
v_wkno1 = zcalendar-wfpweekno.
l_cntr = l_cntr + 1.
it_cal-cntr = l_cntr.
it_cal-endt = zcalendar-enddt.
it_cal-sapweekno = zcalendar-sapweekno.
it_cal-wfpweekno = zcalendar-wfpweekno.
IF l_cntr <= 12. "12
APPEND it_cal.
ENDIF.
ENDSELECT.
ENDFORM. " convert_to_week
&----
*& Form collect_bom_mat
*& for collecting matnr entered in selection fields
&----
FORM collect_bom_mat .
SELECT * FROM mast
INTO CORRESPONDING FIELDS OF TABLE it_mast
WHERE matnr IN s_matnr
AND werks = p_werks
AND stlan = '1'
AND stlal = '01'.
SORT it_mast BY matnr.
LOOP AT it_mast.
PERFORM bom_explode USING it_mast-matnr.
ENDLOOP.
Get the stock of P material stk2.
SELECT matnr werks labst insme speme FROM mard
INTO TABLE it_p_mat_stk
WHERE matnr IN s_matnr
AND werks = p_werks.
SORT it_p_mat_stk BY matnr.
fetch data for backlog and other calculations.
PERFORM get_data_backlog.
stk for all the str locations of the plant.
LOOP AT it_p_mat_stk.
totlabst = totlabst + it_p_mat_stk-labst .
totinsme = totinsme + it_p_mat_stk-insme.
totspeme = totspeme + it_p_mat_stk-speme.
i_mat_det-matnr = it_p_mat_stk-matnr.
AT END OF matnr.
it = it + 1.
CLEAR i_mat_det-total.
i_mat_det-total = totlabst + totinsme + totspeme.
i_mat_det-slno = it.
i_mat_det-labst = totlabst.
i_mat_det-insme = totinsme.
i_mat_det-speme = totspeme.
READ TABLE i_pbid WITH KEY matnr = i_mat_det-matnr.
IF sy-subrc = 0.
i_mat_det-backlog = i_pbid-totplnmg.
ENDIF.
APPEND i_mat_det.
CLEAR : it_p_mat_stk-total,it_p_mat_stk-labst,
it_p_mat_stk-insme,it_p_mat_stk-speme,
totlabst,totinsme,totspeme, i_mat_det-backlog.
ENDAT.
ENDLOOP.
*backlog
LOOP AT i_mat_det.
LOOP AT it_cal.
CLEAR: req , act_req.
READ TABLE it_pbid1 WITH KEY matnr = i_mat_det-matnr
perxx = it_cal-sapweekno.
IF sy-subrc = 0.
CASE it_cal-cntr.
WHEN 1.
i_mat_det-wkno1 = it_pbid1-plnmg.
WHEN 2.
i_mat_det-wkno2 = it_pbid1-plnmg.
WHEN 3.
i_mat_det-wkno3 = it_pbid1-plnmg.
WHEN 4.
i_mat_det-wkno4 = it_pbid1-plnmg.
WHEN 5.
i_mat_det-wkno5 = it_pbid1-plnmg.
WHEN 6.
i_mat_det-wkno6 = it_pbid1-plnmg.
WHEN 7.
i_mat_det-wkno7 = it_pbid1-plnmg.
WHEN 8.
i_mat_det-wkno8 = it_pbid1-plnmg.
WHEN 9.
i_mat_det-wkno9 = it_pbid1-plnmg.
WHEN 10.
i_mat_det-wkno10 = it_pbid1-plnmg.
WHEN 11.
i_mat_det-wkno11 = it_pbid1-plnmg.
WHEN 12.
i_mat_det-wkno12 = it_pbid1-plnmg.
ENDCASE.
i_mat_det-req = it_pbid1-plnmg + i_mat_det-req.
i_mat_det-act_req = i_mat_det-req.
commented as per user req on 26-03-2007
i_mat_det-act_req = i_mat_det-req + i_mat_det-backlog - i_mat_det-total.
ENDIF.
ENDLOOP.
MODIFY i_mat_det.
CLEAR i_mat_det.
ENDLOOP.
cal the weekly consumption .as0n 04-04-2007
LOOP AT i_bom.
READ TABLE i_mat_det WITH KEY matnr = i_bom-matnr.
werks = i_bom-werks.
IF sy-subrc = 0.
i_bom-wkc1 = i_bom-menge * i_mat_det-wkno1.
i_bom-wkc2 = i_bom-menge * i_mat_det-wkno2.
i_bom-wkc3 = i_bom-menge * i_mat_det-wkno3.
i_bom-wkc4 = i_bom-menge * i_mat_det-wkno4.
i_bom-wkc5 = i_bom-menge * i_mat_det-wkno5.
i_bom-wkc6 = i_bom-menge * i_mat_det-wkno6.
i_bom-wkc7 = i_bom-menge * i_mat_det-wkno7.
i_bom-wkc8 = i_bom-menge * i_mat_det-wkno8.
i_bom-wkc9 = i_bom-menge * i_mat_det-wkno9.
i_bom-wkc10 = i_bom-menge * i_mat_det-wkno10.
i_bom-wkc11 = i_bom-menge * i_mat_det-wkno11.
i_bom-wkc12 = i_bom-menge * i_mat_det-wkno12.
ENDIF.
MODIFY i_bom.
CLEAR i_bom.
ENDLOOP.
as per new req 04-04-2007 FOR WEEKLY CONSUMPTION
LOOP AT i_final.
CLEAR it_wkcons.
MOVE i_final-idnrk TO it_wkcons-idnrk.
APPEND it_wkcons.
ENDLOOP.
LOOP AT it_wkcons .
loop at i_final.
LOOP AT it_mast.
READ TABLE i_bom WITH KEY matnr = it_mast-matnr
idnrk = it_wkcons-idnrk
werks = it_mast-werks.
IF sy-subrc = 0.
it_wkcons-wkv1 = i_bom-wkc1 + it_wkcons-wkv1.
it_wkcons-wkv2 = i_bom-wkc2 + it_wkcons-wkv2.
it_wkcons-wkv3 = i_bom-wkc3 + it_wkcons-wkv3.
it_wkcons-wkv4 = i_bom-wkc4 + it_wkcons-wkv4.
it_wkcons-wkv5 = i_bom-wkc5 + it_wkcons-wkv5.
it_wkcons-wkv6 = i_bom-wkc6 + it_wkcons-wkv6.
it_wkcons-wkv7 = i_bom-wkc7 + it_wkcons-wkv7.
it_wkcons-wkv8 = i_bom-wkc8 + it_wkcons-wkv8.
it_wkcons-wkv9 = i_bom-wkc9 + it_wkcons-wkv9.
it_wkcons-wkv10 = i_bom-wkc10 + it_wkcons-wkv10.
it_wkcons-wkv11 = i_bom-wkc11 + it_wkcons-wkv11.
it_wkcons-wkv12 = i_bom-wkc12 + it_wkcons-wkv12.
ENDIF.
modify it_wkcons.
clear it_wkcons.
ENDLOOP.
MODIFY it_wkcons.
ENDLOOP.
endloop.
ENDFORM. " collect_bom_mat
&----
*& Form bom_explode
&----
FORM bom_explode USING p_matnr.
CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
EXPORTING
aufsw = ' '
aumng = 0
capid = 'PP01'
datuv = sy-datum
ehndl = '1'
emeng = 1
mktls = 'X'
mehrs = 'X'
mtnrv = p_matnr
stpst = 0
svwvo = 'X'
werks = p_werks
vrsvo = 'X'
IMPORTING
topmat = itopmat
dstst = idstst
TABLES
stb = istb
matcat = imatcat
EXCEPTIONS
alt_not_found = 1
call_invalid = 2
material_not_found = 3
missing_authorization = 4
no_bom_found = 5
no_plant_data = 6
no_suitable_bom_found = 7
conversion_error = 8
OTHERS = 9.
PERFORM collect_bom USING p_matnr.
WRITE itopmat-matnr TO i_mat_out-matnr.
ENDFORM. " bom_explode
&----
*& Form collect_bom
&----
FORM collect_bom USING v_matnr.
LOOP AT istb.
CLEAR i_bom.
CLEAR i_final.
SELECT SINGLE beskz INTO i_bom-beskz FROM marc
WHERE matnr = istb-idnrk
AND werks = istb-werks
AND beskz = 'F'.
IF sy-subrc IS INITIAL.
i_bom-matnr = v_matnr.
i_bom-werks = istb-werks.
i_bom-idnrk = istb-idnrk.
i_bom-ojtxp = istb-ojtxp.
i_bom-menge = istb-menge.
i_bom-meins = istb-meins.
COLLECT i_bom.
i_final-werks = istb-werks.
i_final-idnrk = istb-idnrk.
i_final-ojtxp = istb-ojtxp.
i_final-menge = istb-menge.
i_final-meins = istb-meins.
COLLECT i_final.
ENDIF.
ENDLOOP.
ENDFORM. " collect_bom
&----
*& Form get_data
&----
FORM get_data .
***for determing of stk1
Get stock for 'F' (purchased) material
SELECT matnr werks labst insme speme FROM mard
INTO CORRESPONDING FIELDS OF it_child_mat_stk
FOR ALL ENTRIES IN i_final
WHERE matnr = i_final-idnrk
AND werks = i_final-werks.
COLLECT it_child_mat_stk.
ENDSELECT.
***for Pending PO QTY
SELECT matnr werks menge FROM ekpo
INTO CORRESPONDING FIELDS OF it_ekpo
FOR ALL ENTRIES IN i_final
WHERE matnr = i_final-idnrk
AND werks = p_werks
AND bstyp = 'F'
AND loekz = space
AND elikz = space.
COLLECT it_ekpo.
ENDSELECT.
SORT it_child_mat_stk BY matnr.
LOOP AT it_child_mat_stk.
it_child_mat_stk-total = it_child_mat_stk-labst +
it_child_mat_stk-insme +
it_child_mat_stk-speme.
it_child_mat_stk-coverage = it_child_mat_stk-total .
READ TABLE it_ekpo WITH KEY matnr = it_child_mat_stk-matnr.
IF sy-subrc = 0.
it_child_mat_stk-coverage = it_child_mat_stk-total +
it_ekpo-menge.
***
ENDIF.
if sy-subrc <> 0.
it_child_mat_stk-coverage = it_child_mat_stk-total .
endif.
MODIFY it_child_mat_stk.
CLEAR it_child_mat_stk.
ENDLOOP.
commneted as per changes told by the user on 26-03-2007.
loop at it_child_mat_stk.
***
READ TABLE it_ekpo WITH KEY matnr = it_child_mat_stk-matnr.
IF sy-subrc = 0.
it_child_mat_stk-coverage = it_child_mat_stk-total +
it_ekpo-menge.
***
ENDIF.
***
if sy-subrc <> 0.
it_child_mat_stk-coverage = it_child_mat_stk-total .
endif.
MODIFY it_child_mat_stk.
CLEAR it_child_mat_stk.
ENDLOOP.
*calc average consumption.
CLEAR: v_cons, avg_cons, total_avg.
LOOP AT i_bom.
READ TABLE i_mat_det WITH KEY matnr = i_bom-matnr.
IF sy-subrc = 0.
i_bom-cons = ( i_bom-menge * i_mat_det-act_req ) / 12.
ENDIF.
MODIFY i_bom.
ENDLOOP.
calculate total average consumtion (req in display)
LOOP AT i_bom.
CLEAR it_bom.
it_bom-idnrk = i_bom-idnrk.
it_bom-werks = i_bom-werks.
it_bom-cons = i_bom-cons.
COLLECT it_bom.
ENDLOOP.
changed as per user changes
LOOP AT i_final.
READ TABLE it_bom WITH KEY idnrk = i_final-idnrk
werks = i_final-werks.
IF sy-subrc = 0.
i_bom-cons = i_bom-cons + i_final-avg_cons.
i_final-avg_cons = it_bom-cons. " + i_final-avg_cons."(to be checked while testing)
ENDIF.
MODIFY i_final.
CLEAR i_final.
ENDLOOP.
READ TABLE i_bom WITH KEY idnrk = i_final-idnrk
werks = i_final-werks.
IF sy-subrc = 0.
****
i_bom-cons = i_bom-cons + i_final-avg_cons.
endat.
i_final-avg_cons = i_bom-cons. " + i_final-avg_cons."(to be checked while testing)
****
ENDIF.
MODIFY i_final.
CLEAR i_final.
ENDLOOP.
ENDFORM. " get_data
&----
*& Form get_data_backlog
&----
FORM get_data_backlog .
DATA : lv_line TYPE i,
lv_perxx LIKE scal-week,
l_date LIKE sy-datum.
SELECT matnr berid werks bedae bdzei
FROM pbid
INTO CORRESPONDING FIELDS OF TABLE it_pbid
WHERE matnr IN s_matnr
AND werks = p_werks
and berid = 'CHE01' " MRP area is required
AND loevr EQ space.
IF it_pbid[] IS NOT INITIAL.
IF s_date-low = sy-datum.
l_date = s_date-low - 84.
SELECT bdzei pdatu meins plnmg perxx
FROM pbed INTO TABLE it_pbed
FOR ALL ENTRIES IN it_pbid
WHERE bdzei = it_pbid-bdzei
AND pdatu BETWEEN l_date AND s_date-low.
ELSE.
SELECT bdzei pdatu meins plnmg perxx
FROM pbed INTO TABLE it_pbed
FOR ALL ENTRIES IN it_pbid
WHERE bdzei = it_pbid-bdzei
AND pdatu IN s_date.
ENDIF.
ENDIF.
LOOP AT it_pbed.
READ TABLE it_pbid WITH KEY bdzei = it_pbed-bdzei.
IF sy-subrc = 0.
MOVE it_pbid-matnr TO it_pbed-matnr.
MOVE it_pbid-werks TO it_pbed-werks.
MODIFY it_pbed.
ENDIF.
ENDLOOP.
LOOP AT it_pbed.
CLEAR it_pbid1.
it_pbid1-matnr = it_pbed-matnr.
it_pbid1-werks = it_pbed-werks.
it_pbid1-bdzei = it_pbed-bdzei.
it_pbid1-pdatu = it_pbed-pdatu.
it_pbid1-meins = it_pbed-meins.
it_pbid1-plnmg = it_pbed-plnmg.
it_pbid1-perxx = it_pbed-perxx.
APPEND it_pbid1.
ENDLOOP.
****************************************************************
*For backlog calculation.
*consider case 1:pld qty before sy-datum.
if sy-datum in low then go back 3 month
& get planned qty into backlog.
*case 2: if s_date lies before sy-datum then
collect planned qty for that between dates into backlog.
*****************************************************************
SORT it_pbid1 BY matnr.
LOOP AT it_pbid1 WHERE pdatu <= sy-datum.
totplnmg = totplnmg + it_pbid1-plnmg.
AT END OF matnr.
collect it_pbid.
i_pbid-matnr = it_pbid1-matnr.
i_pbid-totplnmg = totplnmg.
APPEND i_pbid.
CLEAR : i_pbid, totplnmg.
ENDAT.
ENDLOOP.
*if the user entered date is beyond system date .
SORT it_pbid1 BY matnr.
LOOP AT it_cal.
CASE it_cal-cntr.
WHEN 1.
v_wkno1 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno1 = l_wkno1 + it_pbid1-plnmg.
ENDIF.
WHEN 2.
v_wkno2 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno2 = l_wkno2 + it_pbid1-plnmg.
ENDIF.
WHEN 3.
v_wkno3 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno3 = l_wkno3 + it_pbid1-plnmg.
ENDIF.
WHEN 4.
v_wkno4 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno4 = l_wkno4 + it_pbid1-plnmg.
ENDIF.
WHEN 5.
v_wkno5 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno5 = l_wkno5 + it_pbid1-plnmg.
ENDIF.
WHEN 6.
v_wkno6 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno6 = l_wkno6 + it_pbid1-plnmg.
ENDIF.
WHEN 7.
v_wkno7 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno7 = l_wkno7 + it_pbid1-plnmg.
ENDIF.
WHEN 8.
v_wkno8 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno8 = l_wkno8 + it_pbid1-plnmg.
ENDIF.
WHEN 9.
v_wkno9 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno9 = l_wkno9 + it_pbid-plnmg.
ENDIF.
WHEN 10.
v_wkno10 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno10 = l_wkno10 + it_pbid1-plnmg.
ENDIF.
WHEN 11.
v_wkno11 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno11 = l_wkno11 + it_pbid1-plnmg.
ENDIF.
WHEN 12.
v_wkno12 = it_cal-wfpweekno.
IF it_pbid1-perxx = it_cal-sapweekno.
l_wkno12 = l_wkno12 + it_pbid1-plnmg.
ENDIF.
ENDCASE.
ENDLOOP.
loop at it_req.
clear it_req.
move l_wkno1 to it_req-wkno1.
move l_wkno2 to it_req-wkno2.
move l_wkno3 to it_req-wkno3.
move l_wkno4 to it_req-wkno4.
move l_wkno5 to it_req-wkno5.
move l_wkno6 to it_req-wkno6.
move l_wkno7 to it_req-wkno7.
move l_wkno8 to it_req-wkno8.
move l_wkno9 to it_req-wkno9.
move l_wkno10 to it_req-wkno10.
move l_wkno11 to it_req-wkno11.
move l_wkno12 to it_req-wkno12.
**
append it_req.
endloop.
ENDFORM. " get_data_backlog
&----
*& Form DISPLAY_OUTPUT
&----
FORM display_output .
SORT i_final BY idnrk.
SORT i_bom BY matnr idnrk.
SORT it_ekpo BY matnr.
SORT it_wkcons BY idnrk.
data it_wip like zpp_wip occurs 0 with header line.
data it_marc_p like marc occurs 0 with header line.
select * from zpp_wip into table it_wip for all entries in i_final where matnr = i_final-idnrk.
select * from marc into table it_marc_p for all entries in i_final where matnr = i_final-idnrk
and werks = i_final-werks.
LOOP AT i_final.
WRITE:/ sy-vline,(4) sy-tabix, sy-vline,
(18) i_final-idnrk , sy-vline,
(30) i_final-ojtxp , sy-vline,
(3) i_final-meins , sy-vline.
*****need to uncomment
LOOP AT it_mast. 26-04 by mal
***
CHECK & DISPLAY QTY UNDER RESPECTIVE PARENT MATERIAL.
READ TABLE i_bom WITH KEY matnr = it_mast-matnr
werks = i_final-werks
idnrk = i_final-idnrk.
IF sy-subrc IS INITIAL.
WRITE: (5) i_bom-menge , sy-vline.
ELSE.
WRITE: (5) ' ' , sy-vline.
ENDIF.
ENDLOOP.
******
*phani today
read table it_marc_p with key matnr = i_final-idnrk werks = i_final-werks.
write :(4) it_marc_p-ekgrp,sy-vline.
CLEAR it_ekpo.
READ TABLE it_ekpo WITH KEY matnr = i_final-idnrk
werks = i_final-werks.
WRITE: (10) it_ekpo-menge , sy-vline .
SORT it_child_mat_stk BY matnr.
LOOP AT it_child_mat_stk WHERE matnr = i_final-idnrk
AND werks = i_final-werks.
WRITE: (10) it_child_mat_stk-labst , sy-vline,
(8) it_child_mat_stk-insme , sy-vline,
(8) it_child_mat_stk-speme , sy-vline,
(10) it_child_mat_stk-total , sy-vline.
***************************************************************
*WIP excluded for plants other than BLR1 "ashish 27-04-2007
***************************************************************
read table it_wip with key matnr = i_final-idnrk.
write : (16) it_wip-avl,sy-vline.
clear : it_child_mat_stk-coverage.
if i_final-werks = 'BLR1'.
it_child_mat_stk-coverage = it_child_mat_stk-total + it_wip-avl.
else.
it_child_mat_stk-coverage = it_child_mat_stk-total + 0.
endif.
modify it_child_mat_stk transporting coverage.
clear it_wip.
write : (10) it_child_mat_stk-coverage, sy-vline.
ENDLOOP.
WRITE: (18) i_final-avg_cons , sy-vline.
LOOP AT it_wkcons WHERE idnrk = i_final-idnrk.
CLEAR: wk1,wk2,wk3,wk4,wk5,wk6,wk7,wk8,wk9,wk10,wk11,wk12.
READ TABLE it_child_mat_stk WITH KEY matnr = it_wkcons-idnrk
werks = i_final-werks.
IF sy-subrc = 0.
wk1 = it_child_mat_stk-coverage - it_wkcons-wkv1.
wk2 = wk1 - it_wkcons-wkv2.
wk3 = wk2 - it_wkcons-wkv3.
wk4 = wk3 - it_wkcons-wkv4.
wk5 = wk4 - it_wkcons-wkv5.
wk6 = wk5 - it_wkcons-wkv6.
wk7 = wk6 - it_wkcons-wkv7.
wk8 = wk7 - it_wkcons-wkv8.
wk9 = wk8 - it_wkcons-wkv9.
wk10 = wk9 - it_wkcons-wkv10.
wk11 = wk10 - it_wkcons-wkv11.
wk12 = wk11 - it_wkcons-wkv12.
ENDIF.
to calculate distribution.
IF wk1 <= -1.
WRITE: (10) wk1 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk1 , sy-vline.
ENDIF.
IF wk2 <= -1.
WRITE: (10) wk2 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk2 , sy-vline.
ENDIF.
IF wk3 <= -1.
WRITE: (10) wk3 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk3 , sy-vline.
ENDIF.
IF wk4 <= -1.
WRITE: (10) wk4 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk4 , sy-vline.
ENDIF.
IF wk5 <= -1.
WRITE: (10) wk5 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk5 , sy-vline.
ENDIF.
IF wk6 <= -1.
WRITE: (10) wk6 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk1 , sy-vline.
ENDIF.
IF wk7 <= -1.
WRITE: (10) wk7 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk7 , sy-vline.
ENDIF.
IF wk8 <= -1.
WRITE: (10) wk8 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk8 , sy-vline.
ENDIF.
IF wk9 <= -1.
WRITE: (10) wk9 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk9 , sy-vline.
ENDIF.
IF wk10 <= -1.
WRITE: (10) wk10 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk10 , sy-vline.
ENDIF.
IF wk11 <= -1.
WRITE: (10) wk11 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk11 , sy-vline.
ENDIF.
IF wk12 <= -1.
WRITE: (10) wk12 COLOR 6 INVERSE ON, sy-vline.
ELSE.
WRITE: (10) wk12 , sy-vline.
ENDIF.
WRITE: 1023 sy-vline.
ENDLOOP.
ENDLOOP.
WRITE:/ sy-uline(255).
ENDFORM. " DISPLAY_OUTPUT
&----
*& Form MATERIAL_OUTPUT
&----
FORM material_output .
SKIP 4.
WRITE: 60 'DEMAND PLANNING' COLOR 6 INVERSE ON. " INTENSIFIED OFF
WRITE:/ sy-uline(254).
WRITE:/ sy-uline(233).
WRITE:/ sy-vline,(4) 'slno' , sy-vline,
(10) 'P-Material', sy-vline,
(61) '<--
>', sy-vline,
(13) 'Back log' , sy-vline,
(60) '<--
>',
(68) ' ' , sy-vline.
WRITE :(18) 'actual requirement', sy-vline.
WRITE: (18) 'Avg consumption', sy-vline.
WRITE:/ sy-vline, sy-uline(231), 233 sy-vline.
WRITE 😕 sy-vline,(4) ' ' , sy-vline,
(10) ' ', sy-vline,
(13) 'unrestricted Stock' , sy-vline,
(13) 'QualityStk' , sy-vline,
(13) 'Blocked Stk', sy-vline,
(13) 'Total', sy-vline,
(13) ' ', sy-vline,
(8) v_wkno1 , sy-vline,
(8) v_wkno2 , sy-vline, "'Wk-2'
(8) v_wkno3 , sy-vline, "'Wk-3'
(8) v_wkno4 , sy-vline, "'Wk-4'
(8) v_wkno5 , sy-vline, "'Wk-5'
(8) v_wkno6 , sy-vline, "'Wk-6'
(8) v_wkno7 , sy-vline, "'Wk-7'
(8) v_wkno8 , sy-vline, "'Wk-8'
(8) v_wkno9 , sy-vline, "'Wk-9'
(8) v_wkno10 , sy-vline, "'Wk-10'
(8) v_wkno11 , sy-vline, "'Wk-11'
(8) v_wkno12 , sy-vline. "'Wk-12'
(18) ' ', sy-vline.
WRITE:/ sy-uline(233).
WRITE:/ sy-uline(253).
SORT it_pbid1 BY matnr.
LOOP AT i_mat_det.
WRITE:/ sy-vline,(4) sy-tabix, sy-vline,
(10) i_mat_det-matnr, sy-vline,
(13) i_mat_det-labst, sy-vline,
(13) i_mat_det-insme, sy-vline,
(13) i_mat_det-speme, sy-vline,
(13) i_mat_det-total, sy-vline,
(13) i_mat_det-backlog, sy-vline.
***using this respective values printed below the win weekno.
LOOP AT it_cal.
CLEAR: req , act_req.
READ TABLE it_pbid1 WITH KEY matnr = i_mat_det-matnr
perxx = it_cal-sapweekno.
IF sy-subrc = 0.
WRITE: (8) it_pbid1-plnmg , sy-vline.
for caliculating total stock - first week PHANI..
i_mat_det-total = it_pbid1-plnmg - i_mat_det-total.
ELSE.
WRITE: (8) ' ', sy-vline.
ENDIF.
ENDLOOP.
commneted as per user on 26-03-2007.( act req = summation of req)
WRITE: (18) i_mat_det-act_req , sy-vline.
WRITE: (18) i_mat_det-req , sy-vline.
WRITE:/ sy-uline(254).
WRITE:/ sy-uline(233).
ENDLOOP.
ENDFORM. " MATERIAL_OUTPUT
*************************************************************
*TOP-OF-PAGE
*************************************************************
TOP-OF-PAGE.
WRITE : 60 ' MATERIAL REQUIREMENT PLANNING ' COLOR 6 INVERSE ON." INTENSIFIED OFF.
if required.
WRITE : /100 'DATE :',sy-datum, 120 'TIME:', sy-uzeit.
DATA : l_matnr3(18) TYPE c,
l_matnr4(18) TYPE c,
l_matvar(40) TYPE c,
l_date1(10) TYPE c,
l_date2(10) TYPE c,
l_date(20) TYPE c.
l_matnr3 = s_matnr-low.
l_matnr4 = s_matnr-high.
l_date1 = s_date-low.
l_date2 = s_date-high.
IF s_matnr-low NE ' ' AND s_matnr-high NE ' '.
CONCATENATE l_matnr3 'To' l_matnr4 INTO l_matvar SEPARATED BY space.
ELSEIF s_matnr-low NE ' ' AND s_matnr-high EQ ' '.
l_matvar = l_matnr3.
ELSEIF s_matnr-low EQ ' ' AND s_matnr-high NE ' ' .
l_matvar = l_matnr4.
ENDIF.
IF s_date-low NE ' ' AND s_date-high NE ' '.
CONCATENATE l_date1 'To' l_date2 INTO l_date SEPARATED BY space.
ELSEIF s_date-low NE ' ' AND s_date-high EQ ' '.
l_date = l_date1.
ENDIF.
to print material date & plant
WRITE:/ 'Material: ' , l_matvar , 60 'Date : ' , l_date , 110 'Plant : ', p_werks.
WRITE:/ sy-uline.
WRITE:/ sy-vline, (4) 'slno' , sy-vline,
(18) 'Purch Matl' , sy-vline,
(30) 'Description' ,sy-vline,
(3) 'UOM' , sy-vline.
*****need to commen 26-04
LOOP AT it_mast.
WRITE: (5) 'P-Mat', sy-vline.
ENDLOOP.
******************
write : (4) 'PGRP',sy-vline.
WRITE:(10) 'Pend PO QTY' , sy-vline,
(45) ' On Hand Stk1 ', sy-vline,
(16) 'WIP-AVAIL',sy-vline,
(10) 'Coverage',sy-vline,
(18) 'Avg Consumption', sy-vline,
(10) 'Wk-1' , sy-vline,
(10) 'Wk-2' , sy-vline,
(10) 'Wk-3' , sy-vline,
(10) 'Wk-4' , sy-vline,
(10) 'Wk-5' , sy-vline,
(10) 'Wk-6' , sy-vline,
(10) 'Wk-7' , sy-vline,
(10) 'Wk-8' , sy-vline,
(10) 'Wk-9' , sy-vline,
(10) 'Wk-10' , sy-vline,
(10) 'Wk-11' , sy-vline,
(10) 'Wk-12' , sy-vline,
1023 sy-vline.
ULINE.
WRITE:/ sy-vline,(4) ' ', sy-vline,
(18) ' ', sy-vline,
(30) ' ', sy-vline,
(3) ' ', sy-vline.
********need to comment 26-04
LOOP AT it_mast.
WRITE: (5) it_mast-matnr, sy-vline.
ENDLOOP.
***************
write : (4) ' ',sy-vline.
WRITE:(10) ' ', sy-vline,
(10) 'UnRes Stk ', sy-vline,
(8) 'QualStk' , sy-vline,
(8) 'Block Stk', sy-vline,
(10) 'Total', sy-vline,
(16) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
(10) ' ' , sy-vline,
1032 sy-vline.
ULINE.
Regards
Maaya Nayar
Kerala
hello,
Could you just gimme your mail id so that by step by step you can work out....so bug thread i havent seen in my life...just make sure that you ask point to point..
regards
AK
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
107 | |
12 | |
11 | |
6 | |
5 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.