cancel
Showing results for 
Search instead for 
Did you mean: 

ABAP QUERY

Former Member
0 Kudos

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) '<--


STK2--


>', sy-vline,

(13) 'Back log' , sy-vline,

(60) '<--


Req--


>',

(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

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

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

Former Member
0 Kudos

Dear Anil Kumar,

thanks for your response, my email id maaya.nayar@gmail.com

regards

maaya

Former Member
0 Kudos

Dear Anil kumar

thanks for your response, my email id is maaya.nayar@gmail.com.

regards

maaya