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: 

Report is taking too long time. Please advice

former_member190178
Participant
0 Kudos

Hi Experts,

I have created a report which is almost exploding the BOM and getting the all

material documents from MKPF for the given date and then based on those material documents selecting the 601 (Sales) from MSEG. Later based on the material, batch and 901 its drilling down. If it gets the raw materials in that, add those otherwise again if you find some FG or Semi finish in that further explode it.

like that this will go to the deeper level.

I have run this report for almost all the plants and they are updated successfully

but some plants are there which might have the large data due to drill down batch level. So atlast giving the dump.

Please suggest me how get it tuned so that my all plants give the data is speedy way. Thanks in advance.

10 REPLIES 10

Former Member
0 Kudos

Hi,

First Observation...make the program run for single plant for the run..should reduce excecution time..let me know if thats not helpful

santhosh

0 Kudos

My selecting criteria is like that.

Company Code: 1000 ( has 24 plants)

Material : F* ( Coz this is the final requirement only, They need for atleat all FGs)

Plant: 1009 (Say)

Date: 01.05.2007 to 31.05.2007

This selection criteria is the minimum criteria, I would like to clear first of all.

Coz the later users of the company will take each single plant and for aleast one month they would fectch the data. This data would go in an Internal table and later they would have some kind of analysis (God knows what sort of).

I have issue like for most of the plants the data is coming in appropriate time

for some plants are there if i run for them its getting time out if i run it in foreground and saying NO ROLL OUT MEMORY if i schedule it in background after running continous for 40,000 seconds.

Please help to tune it.

0 Kudos

Hi,

Use MJAHR and ZEILE in your select query.

Reward if this helps,

Satish

Former Member
0 Kudos

Can't really help you optimaize your code without seeing it. Would you post it please?

Rob

0 Kudos

The code is:

REPORT zsales_variance_1 NO STANDARD PAGE HEADING MESSAGE-ID ymsg LINE-SIZE 1000.

TABLES: mara,

zcon_variance,

zsales_variance,

t001k,

makt,

mkpf,

aufm,

mbew.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t2.

PARAMETER s_bukrs LIKE zcon_variance-bukrs DEFAULT '1000' OBLIGATORY.

SELECT-OPTIONS: s_matnr FOR mara-matnr DEFAULT 'FG only'.

PARAMETER: so_werks LIKE zsales_variance-werks OBLIGATORY.

SELECT-OPTIONS: s_pcdf FOR aufm-budat OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

RANGES: s_werks FOR zsales_variance-werks.

*******Filling the Range internal table for fixing the plants for Company code 1000: Start

s_werks-sign = 'I'. "Include

s_werks-option = 'BT'. "Pattern

s_werks-low = '1001'. "Low Value

s_werks-high = '1025'. "High Value

APPEND s_werks.

*******Filling the Range internal table for fixing the plants for Company code 1000: End

DATA: BEGIN OF it_mara OCCURS 0,

matnr LIKE mara-matnr,

mtart LIKE mara-mtart,

matkl TYPE matkl,

werks LIKE marc-werks,

indi1(8) TYPE c,

ok(2) TYPE c,

  • maktx LIKE makt-maktx,

END OF it_mara.

*DATA it_mara1 LIKE it_mara OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_t001k OCCURS 0,

bwkey LIKE t001k-bwkey,

matnr LIKE mara-matnr,

zplp1 LIKE mbew-zplp1,

maktx LIKE makt-maktx,

END OF it_t001k.

DATA: BEGIN OF it_mbew OCCURS 0,

matnr LIKE mara-matnr,

bwkey LIKE t001k-bwkey,

zplp1 LIKE mbew-zplp1,

maktx LIKE makt-maktx,

END OF it_mbew.

DATA: BEGIN OF it_makt OCCURS 0,

matnr LIKE makt-matnr,

maktx LIKE makt-maktx,

END OF it_makt.

DATA: it_makt1 LIKE it_makt OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_mkpf OCCURS 0,

mblnr LIKE mkpf-mblnr,

mjahr LIKE mkpf-mjahr,

END OF it_mkpf.

*DATA: BEGIN OF it_mseg OCCURS 0,

  • mblnr LIKE mseg-mblnr,

  • matnr LIKE mara-matnr,

  • werks LIKE mseg-werks,

  • bwart LIKE mseg-bwart,

  • menge LIKE mseg-menge,

  • meins LIKE mseg-meins,

  • dmbtr LIKE mseg-dmbtr,

  • END OF it_mseg.

DATA: BEGIN OF it_final OCCURS 0 ,

mandt TYPE mandt,

bukrs LIKE zcon_variance-bukrs,

werks LIKE zcon_variance-werks,

matnr LIKE zcon_variance-matnr,

component LIKE zcon_variance-component,

mtart LIKE zcon_variance-mtart,

maktx LIKE zcon_variance-maktx,

componentdisc LIKE zcon_variance-componentdisc,

matkl LIKE zcon_variance-matkl,

menge LIKE zcon_variance-menge,

meins LIKE zcon_variance-meins,

dmbtr LIKE zcon_variance-dmbtr,

verpr LIKE zcon_variance-verpr,

zplp1 LIKE zcon_variance-zplp1,

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

currency TYPE waers,

mtart_matnr TYPE mtart,

  • ok(2) TYPE c,

END OF it_final.

DATA: BEGIN OF it_final_compo OCCURS 0 ,

mandt TYPE mandt,

bukrs LIKE zcon_variance-bukrs,

werks LIKE zcon_variance-werks,

  • matnr LIKE zcon_variance-matnr,

component LIKE zcon_variance-component,

mtart LIKE zcon_variance-mtart,

  • maktx LIKE zcon_variance-maktx,

componentdisc LIKE zcon_variance-componentdisc,

matkl LIKE zcon_variance-matkl,

menge LIKE zcon_variance-menge,

meins LIKE zcon_variance-meins,

dmbtr LIKE zcon_variance-dmbtr,

verpr LIKE zcon_variance-verpr,

zplp1 LIKE zcon_variance-zplp1,

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

currency TYPE waers,

mtart_matnr TYPE mtart,

  • ok(2) TYPE c,

END OF it_final_compo.

DATA: ok(2) TYPE c.

DATA : it2 LIKE it_final OCCURS 0 WITH HEADER LINE.

DATA : it2_temp LIKE it2 OCCURS 0 WITH HEADER LINE.

DATA: it_compo LIKE it_final_compo OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it3 OCCURS 0 ,

mandt TYPE mandt,

bukrs LIKE zcon_variance-bukrs,

werks LIKE zcon_variance-werks,

matnr LIKE zcon_variance-matnr,

component LIKE zcon_variance-component,

mtart LIKE zcon_variance-mtart,

maktx LIKE zcon_variance-maktx,

componentdisc LIKE zcon_variance-componentdisc,

matkl LIKE zcon_variance-matkl,

menge LIKE zcon_variance-menge,

meins LIKE zcon_variance-meins,

dmbtr LIKE zcon_variance-dmbtr,

verpr LIKE zcon_variance-verpr,

zplp1 LIKE zcon_variance-zplp1, " if this is 0.

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

currency TYPE waers,

END OF it3.

DATA: BEGIN OF it_aufm OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

charg LIKE aufm-charg,

bwart LIKE aufm-bwart,

END OF it_aufm.

DATA: it_aufm1 LIKE it_aufm OCCURS 0 WITH HEADER LINE.

DATA: it_aufm3 LIKE it_aufm1 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_aufm2 OCCURS 0,

matnr LIKE aufm-matnr,

charg LIKE aufm-charg,

bwart LIKE aufm-bwart,

werks LIKE aufm-werks,

END OF it_aufm2.

DATA: BEGIN OF it_aufm_901 OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

bwart_901 LIKE aufm-bwart,

bwart_902 LIKE aufm-bwart,

bwart_261 LIKE aufm-bwart,

bwart_262 LIKE aufm-bwart,

indi1(8) TYPE c,

901 LIKE mara-matnr,

  • aufnr LIKE aufm-aufnr,

END OF it_aufm_901.

DATA: BEGIN OF it_mpb OCCURS 0,

  • aufnr LIKE aufm-aufnr,

matnr LIKE mara-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

yes TYPE c,

END OF it_mpb.

DATA: it_temp LIKE it_aufm_901 OCCURS 0 WITH HEADER LINE.

DATA: it_aufm_901_backup LIKE it_aufm_901 OCCURS 0 WITH HEADER LINE.

DATA: indi1(8) TYPE c.

DATA: bwart_901 LIKE aufm-bwart,

bwart_902 LIKE aufm-bwart,

bwart_261 LIKE aufm-bwart,

bwart_262 LIKE aufm-bwart.

DATA: BEGIN OF it_aufnr OCCURS 0,

aufnr LIKE aufm-aufnr,

yes TYPE c,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

END OF it_aufnr.

DATA yes TYPE c.

DATA: BEGIN OF it_aufm_901_filter OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

bwart_pm(4) TYPE c,

indi TYPE c,

budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

  • bwart_901 LIKE aufm-bwart,

  • bwart_902 LIKE aufm-bwart,

  • bwart_261 LIKE aufm-bwart,

  • bwart_262 LIKE aufm-bwart,

  • aufnr LIKE aufm-aufnr,

END OF it_aufm_901_filter.

DATA: BEGIN OF it1 OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • bwart_pm(4) TYPE c,

indi TYPE c,

budat LIKE aufm-budat,

menge LIKE aufm-menge,

menge_f(14) TYPE c,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

dmbtr_f(14) TYPE c,

dmbtr_v(14) TYPE c,

menge_v(14) TYPE c,

901 LIKE mara-matnr,

END OF it1.

DATA: it4 LIKE it1 OCCURS 0 WITH HEADER LINE.

DATA: it5 LIKE it4 OCCURS 0 WITH HEADER LINE.

DATA: add_menge TYPE menge_d,

add_dmbtr TYPE dmbtr.

DATA: BEGIN OF it1902 OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • bwart_pm(4) TYPE c,

indi TYPE c,

budat LIKE aufm-budat,

menge(14) TYPE c,

menge_v(14) TYPE c,

meins LIKE aufm-meins,

dmbtr(14) TYPE c,

dmbtr_v(14) TYPE c,

END OF it1902.

DATA: it1902_add LIKE it1902 OCCURS 0 WITH HEADER LINE.

DATA: it1902_add1 LIKE it1902 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it1262 OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • bwart_pm(4) TYPE c,

indi TYPE c,

budat LIKE aufm-budat,

menge(14) TYPE c,

menge_v(14) TYPE c,

meins LIKE aufm-meins,

dmbtr(14) TYPE c,

dmbtr_v(14) TYPE c,

END OF it1262.

DATA: it1262_add LIKE it1262 OCCURS 0 WITH HEADER LINE.

DATA: it1262_add1 LIKE it1262 OCCURS 0 WITH HEADER LINE.

DATA: indi TYPE c,

  • bwart_pm(4) TYPE c,

menge_v(14) TYPE c,

dmbtr_v(14) TYPE c,

menge_f(14) TYPE c,

dmbtr_f(14) TYPE c.

DATA: matnr LIKE mara-matnr,

maktx LIKE makt-maktx,

cnt TYPE i,

cnt1 TYPE i,

cnt2 TYPE i.

DATA: BEGIN OF it_aufm_901_1 OCCURS 0,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

mengefinal LIKE aufm-menge,

aufnr LIKE aufm-aufnr,

END OF it_aufm_901_1.

DATA: BEGIN OF it_aufm_901_2 OCCURS 0,

  • matnr LIKE aufm-matnr,

  • werks LIKE aufm-werks,

  • bwart LIKE aufm-bwart,

    • budat LIKE aufm-budat,

  • menge LIKE aufm-menge,

  • meins LIKE aufm-meins,

  • dmbtr LIKE aufm-dmbtr,

  • mengefinal LIKE aufm-menge,

aufnr LIKE aufm-aufnr,

END OF it_aufm_901_2.

DATA: BEGIN OF it_aufm_901_3 OCCURS 0,

bukrs LIKE zcon_variance-bukrs,

werks LIKE zcon_variance-werks,

matnr LIKE zcon_variance-matnr,

maktx LIKE zcon_variance-maktx,

component LIKE zcon_variance-component,

componentdisc LIKE zcon_variance-componentdisc,

mtart LIKE zcon_variance-mtart,

matkl LIKE zcon_variance-matkl,

menge LIKE zcon_variance-menge,

meins LIKE zcon_variance-meins,

dmbtr LIKE zcon_variance-dmbtr,

map LIKE zcon_variance-verpr,

zplp1 LIKE zcon_variance-zplp1,

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

bwart LIKE mseg-bwart,

END OF it_aufm_901_3.

DATA: BEGIN OF it_aufm_261 OCCURS 0,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

aufnr LIKE aufm-aufnr,

END OF it_aufm_261.

DATA: BEGIN OF it_aufm_261_1 OCCURS 0,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

issueq LIKE aufm-menge,

aufnr LIKE aufm-aufnr,

map LIKE zcon_variance-verpr,

END OF it_aufm_261_1.

DATA: BEGIN OF it_aufm_261_2 OCCURS 0,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

issueq LIKE aufm-menge,

aufnr LIKE aufm-aufnr,

map LIKE zcon_variance-verpr,

END OF it_aufm_261_2.

DATA: flag1,

flag2,

flag3,

flag4,

menge LIKE aufm-menge,

menge902 LIKE aufm-menge,

menge262 LIKE aufm-menge,

mengefinal LIKE aufm-menge,

issueq LIKE aufm-menge,

map LIKE zcon_variance-verpr,

dmbtr LIKE aufm-dmbtr,

flagtab TYPE c.

DATA: mandt TYPE sy-mandt.

DATA: it_zcv TYPE zcon_variance,

it_zcv_compo TYPE zcon_variance_c.

DATA: BEGIN OF it_mseg OCCURS 0,

mblnr LIKE mseg-mblnr,

matnr LIKE mseg-matnr,

werks LIKE mseg-werks,

charg LIKE mseg-charg,

menge LIKE mseg-menge,

dmbtr LIKE mseg-dmbtr,

bwart LIKE mseg-bwart,

END OF it_mseg.

DATA: it_mseg1 LIKE it_mseg OCCURS 0 WITH HEADER LINE.

DATA: it_mseg_temp LIKE it_mseg OCCURS 0 WITH HEADER LINE.

DATA: it_mseg_601 LIKE it_mseg OCCURS 0 WITH HEADER LINE,

it_mseg_601_add LIKE it_mseg OCCURS 0 WITH HEADER LINE.

DATA: it_mseg_602 LIKE it_mseg OCCURS 0 WITH HEADER LINE,

it_mseg_602_add LIKE it_mseg OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_1 OCCURS 0,

matnr LIKE mseg-matnr,

werks LIKE mseg-werks,

charg LIKE mseg-charg,

menge(16) TYPE p DECIMALS 2, " LIKE mseg-menge, Changed later to get more space and to avoid any possible overflow: Viren;c

dmbtr(16) TYPE p DECIMALS 2, " LIKE mseg-dmbtr, Changed later to get more space and to avoid any possible overflow: Viren;c

bwart LIKE mseg-bwart,

meins LIKE mseg-meins,

END OF it_1.

DATA: it_temp1 LIKE it_1 OCCURS 0 WITH HEADER LINE.

DATA: it_261 LIKE it_1 OCCURS 0 WITH HEADER LINE,

it_262 LIKE it_1 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_sv OCCURS 0,

mandt TYPE mandt,

bukrs TYPE bukrs,

werks TYPE werks_d,

matnr TYPE matnr,

component TYPE zcomponent,

charg TYPE charg_d,

period TYPE zperiod,

gjahr TYPE gjahr,

mtart TYPE mtart,

maktx TYPE maktx,

componentdisc TYPE zcomponentdisc,

matkl TYPE matkl,

menge(16) TYPE p DECIMALS 2, "menge_d, Changed later to get more space and to avoid any possible overflow: Viren;c

meins TYPE meins,

dmbtr(16) TYPE p DECIMALS 2, " dmbtr, Changed later to get more space and to avoid any possible overflow: Viren;c

zplp1 TYPE dzplp1,

sales_variance TYPE zvariance,

charg_fg TYPE charg_d,

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

currency TYPE waers,

END OF it_sv.

DATA: it_zsv TYPE zsales_variance.

DATA: cyear(4) TYPE c,

cmonth(2) TYPE c.

INITIALIZATION.

t2 = 'Please select'.

START-OF-SELECTION.

PERFORM determine_material_codes.

PERFORM dtrmine_plnt_bsd_on_cmpny_cods.

  • PERFORM determine_material_documents.

PERFORM determine_mat_doc1.

PERFORM fill_sales_variance.

END-OF-SELECTION.

&----


*& Form determine_material_codes

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM determine_material_codes .

      • For Material selection

IF s_matnr-low IS INITIAL AND s_matnr-high IS NOT INITIAL.

s_matnr-low = s_matnr-high.

ENDIF.

SELECT matnr mtart

FROM mara

INTO TABLE it_mara

WHERE matnr IN s_matnr

AND mtart = 'IFIG'.

IF it_mara[] IS INITIAL.

MESSAGE e001.

EXIT.

ENDIF.

ENDFORM. " determine_material_codes

&----


*& Form dtrmine_plnt_bsd_on_cmpny_cods

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM dtrmine_plnt_bsd_on_cmpny_cods .

SELECT bwkey FROM t001k INTO TABLE it_t001k

WHERE bukrs = s_bukrs.

IF it_t001k[] IS INITIAL.

  • mandt = sy-mandt.

  • DELETE FROM zsales_variance CLIENT SPECIFIED WHERE mandt = mandt.

  • IF sy-subrc = 0.

  • COMMIT WORK.

  • ENDIF.

MESSAGE e002.

EXIT.

ENDIF.

ENDFORM. " dtrmine_plnt_bsd_on_cmpny_cods

&----


*& Form determine_mat_doc1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM determine_mat_doc1 .

      • If optional fields is not filled then go by plant specifications

CLEAR it_mbew.

CLEAR it_t001k.

SORT it_t001k BY bwkey.

DELETE ADJACENT DUPLICATES FROM it_t001k COMPARING bwkey.

PERFORM select_material_docs.

ENDFORM. " determine_mat_doc1

&----


*& Form select_material_docs

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM select_material_docs .

SELECT mblnr mjahr

FROM mkpf

INTO TABLE it_mkpf

WHERE budat IN s_pcdf.

IF NOT it_mkpf[] IS INITIAL.

CLEAR it_mkpf.

SORT it_mkpf BY mblnr.

DELETE ADJACENT DUPLICATES FROM it_mkpf COMPARING mblnr.

SELECT mblnr

matnr

werks

charg

menge

dmbtr

bwart

FROM mseg

INTO TABLE it_mseg

FOR ALL ENTRIES IN it_mkpf

WHERE mblnr = it_mkpf-mblnr

AND mjahr = it_mkpf-mjahr

AND ( bwart = '601' OR bwart = '602' )

AND matnr IN s_matnr. " Added to select the only materials given in Material field.

cnt = 0.

DATA lv_index TYPE sy-tabix.

SORT it_mara BY matnr ASCENDING.

SORT it_mseg BY matnr ASCENDING.

    • IF NOT it_mara[] IS INITIAL AND NOT it_mseg[] IS INITIAL.

    • LOOP AT it_mara.

    • LOOP AT it_mseg WHERE MATNR = IT_MARA-MATNR .

    • IF NOT it_mseg IS INITIAL.

      • APPEND LINES OF it_mseg TO it_mseg1.

    • MOVE-CORRESPONDING it_mseg TO it_mseg1.

    • APPEND it_mseg1.

    • CLEAR it_mseg.

    • ENDIF.

    • ENDLOOP.

    • ENDLOOP.

    • ENDIF.

DATA index TYPE sy-tabix.

      • start

  • LOOP AT it_mara.

  • index = sy-tabix.

  • CLEAR it_mseg.

  • READ TABLE it_mseg WITH KEY matnr = it_mara-matnr BINARY SEARCH.

  • IF NOT it_mseg IS INITIAL.

  • it_mara-indi1 = 'FOUND'.

  • ELSE.

  • it_mara-indi1 = 'NOTFOUND'.

  • ENDIF.

  • MODIFY it_mara INDEX index.

  • ENDLOOP.

*

  • DELETE it_mara WHERE indi1 = 'NOTFOUND'.

*

  • SORT it_mara BY matnr ASCENDING.

  • SORT it_mseg BY matnr ASCENDING.

*

  • lv_index = 1.

  • IF NOT it_mara[] IS INITIAL AND NOT it_mseg[] IS INITIAL.

  • LOOP AT it_mara.

  • CLEAR it_mseg.

  • LOOP AT it_mseg FROM lv_index .

  • IF it_mseg-matnr <> it_mara-matnr.

  • lv_index = sy-tabix.

  • EXIT.

  • ELSE.

  • MOVE-CORRESPONDING it_mseg TO it_mseg1.

  • APPEND it_mseg1.

  • CLEAR it_mseg1.

  • ENDIF.

  • ENDLOOP.

  • ENDLOOP.

  • ENDIF.

*

*

  • CLEAR: it_mseg,

  • it_mseg1.

  • REFRESH: it_mseg.

  • it_mseg[] = it_mseg1[].

      • END

      • Select the manufacturing plants for given company code.

IF NOT it_mseg[] IS INITIAL.

SELECT matnr charg bwart werks

FROM aufm

INTO TABLE it_aufm2

  • FOR ALL ENTRIES IN it_mseg

  • WHERE matnr = it_mseg-matnr

  • AND charg = it_mseg-charg

WHERE bwart = '901'.

SORT it_mseg BY matnr charg bwart.

SORT it_aufm2 BY matnr charg bwart.

LOOP AT it_mseg.

CLEAR it_aufm2.

READ TABLE it_aufm2 WITH KEY matnr = it_mseg-matnr

charg = it_mseg-charg

bwart = '901' BINARY SEARCH.

IF sy-subrc = 0.

MOVE it_aufm2-werks TO it_mseg-werks.

MODIFY it_mseg.

ENDIF.

ENDLOOP.

ENDIF.

      • Delete the plants which are not manufacturing plants.

IF NOT it_mseg[] IS INITIAL.

DELETE it_mseg WHERE werks <> so_werks.

ENDIF.

IF NOT it_mseg[] IS INITIAL.

LOOP AT it_mseg.

MOVE it_mseg-matnr TO it_mseg_temp-matnr.

MOVE it_mseg-werks TO it_mseg_temp-werks.

MOVE it_mseg-charg TO it_mseg_temp-charg.

MOVE it_mseg-menge TO it_mseg_temp-menge.

MOVE it_mseg-dmbtr TO it_mseg_temp-dmbtr.

MOVE it_mseg-bwart TO it_mseg_temp-bwart.

COLLECT it_mseg_temp.

ENDLOOP.

ENDIF.

CLEAR it_mseg.

REFRESH it_mseg.

it_mseg[] = it_mseg_temp[].

ENDIF.

IF NOT it_mseg[] IS INITIAL.

      • Seprate the entries having movement type '602'.

LOOP AT it_mseg.

IF it_mseg-bwart = '601'.

MOVE it_mseg-matnr TO it_mseg_601-matnr.

MOVE it_mseg-werks TO it_mseg_601-werks.

MOVE it_mseg-charg TO it_mseg_601-charg.

MOVE it_mseg-menge TO it_mseg_601-menge.

MOVE it_mseg-dmbtr TO it_mseg_601-dmbtr.

MOVE it_mseg-bwart TO it_mseg_601-bwart.

APPEND it_mseg_601.

ENDIF.

IF it_mseg-bwart = '602'.

MOVE it_mseg-matnr TO it_mseg_602-matnr.

MOVE it_mseg-werks TO it_mseg_602-werks.

MOVE it_mseg-charg TO it_mseg_602-charg.

MOVE it_mseg-menge TO it_mseg_602-menge.

MOVE it_mseg-dmbtr TO it_mseg_602-dmbtr.

MOVE it_mseg-bwart TO it_mseg_602-bwart.

APPEND it_mseg_602.

ENDIF.

ENDLOOP.

  • DELETE it_mseg WHERE bwart = '602'.

      • Add the entries of '601' movement type

IF NOT it_mseg_601[] IS INITIAL.

LOOP AT it_mseg_601.

MOVE it_mseg_601-matnr TO it_mseg_601_add-matnr.

MOVE it_mseg_601-werks TO it_mseg_601_add-werks.

MOVE it_mseg_601-charg TO it_mseg_601_add-charg.

MOVE it_mseg_601-menge TO it_mseg_601_add-menge.

MOVE it_mseg_601-dmbtr TO it_mseg_601_add-dmbtr.

MOVE it_mseg_601-bwart TO it_mseg_601_add-bwart.

COLLECT it_mseg_601_add.

ENDLOOP.

ENDIF.

      • Add the entries of '602' movement type

IF NOT it_mseg_602[] IS INITIAL.

LOOP AT it_mseg_602.

MOVE it_mseg_602-matnr TO it_mseg_602_add-matnr.

MOVE it_mseg_602-werks TO it_mseg_602_add-werks.

MOVE it_mseg_602-charg TO it_mseg_602_add-charg.

MOVE it_mseg_602-menge TO it_mseg_602_add-menge.

MOVE it_mseg_602-dmbtr TO it_mseg_602_add-dmbtr.

MOVE it_mseg_602-bwart TO it_mseg_602_add-bwart.

COLLECT it_mseg_602_add.

ENDLOOP.

ENDIF.

ELSE.

MESSAGE e003.

EXIT.

ENDIF.

      • Deduct the quantity and the amount for movement type '602' from '601'.

cnt = 0.

IF NOT it_mseg_601_add[] IS INITIAL.

LOOP AT it_mseg_601_add.

cnt = sy-tabix.

CLEAR: menge_f,

dmbtr_f,

it_mseg_602_add.

READ TABLE it_mseg_602_add WITH KEY matnr = it_mseg_601_add-matnr

werks = it_mseg_601_add-werks

charg = it_mseg_601_add-charg.

IF sy-subrc = 0.

menge_f = it_mseg_601_add-menge - it_mseg_602_add-menge.

dmbtr_f = it_mseg_601_add-dmbtr - it_mseg_602_add-dmbtr.

MOVE menge_f TO it_mseg_601_add-menge.

MOVE dmbtr_f TO it_mseg_601_add-dmbtr.

MODIFY it_mseg_601_add INDEX cnt TRANSPORTING menge dmbtr.

ENDIF.

ENDLOOP.

ELSE.

MESSAGE e003.

EXIT.

ENDIF.

CLEAR: it_mseg,

it_mseg_601_add.

REFRESH: it_mseg.

it_mseg[] = it_mseg_601_add[].

      • select all materials and material type to match at ISFG material level

CLEAR: it_mara.

REFRESH: it_mara.

SELECT matnr

mtart

INTO TABLE it_mara

FROM mara

WHERE mtart = 'ISFG'.

        • Select all the order no's from AUFM to reduce to data trafficing

  • SELECT aufnr matnr charg bwart

  • FROM aufm

  • INTO TABLE it_aufm

  • FOR ALL ENTRIES IN it_mseg

  • WHERE matnr = it_mseg-matnr

  • AND charg = it_mseg-charg

  • AND bwart = '901'.

DATA : it_mc9 LIKE it_aufm OCCURS 0 WITH HEADER LINE.

SELECT aufnr

matnr

charg

bwart

INTO TABLE it_mc9

FROM aufm

FOR ALL ENTRIES IN it_mseg

WHERE matnr = it_mseg-matnr

AND charg = it_mseg-charg

AND bwart = '901'

.

LOOP AT it_mseg.

CLEAR it_mc9.

  • READ TABLE it_mc9 WITH KEY matnr = it_mseg-matnr

  • charg = it_mseg-charg

  • bwart = '901'.

LOOP AT it_mc9 WHERE matnr = it_mseg-matnr AND

charg = it_mseg-charg AND

bwart = '901'.

IF NOT it_mc9 IS INITIAL.

MOVE-CORRESPONDING it_mc9 TO it_aufm.

APPEND it_aufm.

ENDIF.

ENDLOOP.

  • SELECT aufnr matnr charg bwart

  • FROM aufm

  • APPENDING TABLE it_aufm

  • WHERE matnr = it_mseg-matnr

  • AND charg = it_mseg-charg

  • AND bwart = '901'.

ENDLOOP.

cnt = 0.

      • select the order no's giving material code and batch.

CLEAR it_mseg.

LOOP AT it_mseg.

cnt = sy-tabix.

CLEAR it_aufm.

  • READ TABLE it_aufm WITH KEY matnr = it_mseg-matnr

  • charg = it_mseg-charg

  • bwart = '901'.

LOOP AT it_aufm WHERE matnr = it_mseg-matnr AND

charg = it_mseg-charg AND

bwart = '901'.

IF NOT it_aufm IS INITIAL.

  • READ TABLE it_aufm.

SELECT matnr

werks

charg

menge

dmbtr

bwart

meins

INTO TABLE it_1

FROM aufm

WHERE aufnr = it_aufm-aufnr

AND bwart IN (261,262)

AND budat IN s_pcdf. " Vi

IF NOT it_1[] IS INITIAL.

SORT it_1 BY matnr ASCENDING.

      • Select order no's one time to prevent data trafficing in IT_AUFM1.

IF NOT it_aufm1[] IS INITIAL.

APPEND LINES OF it_aufm1 TO it_aufm3.

ENDIF.

SELECT aufnr

matnr

charg

bwart

FROM aufm

INTO TABLE it_aufm1

FOR ALL ENTRIES IN it_1

WHERE matnr = it_1-matnr

AND charg = it_1-charg

AND bwart = '901'

AND budat IN s_pcdf. " Vi

  • IF NOT it_aufm1[] IS INITIAL.

  • it_aufm3[] = it_aufm1[].

  • ENDIF.

LOOP AT it_1.

CLEAR it_mara.

READ TABLE it_mara WITH KEY matnr = it_1-matnr.

IF NOT it_mara IS INITIAL.

CLEAR it_aufm1.

  • READ TABLE it_aufm1 WITH KEY matnr = it_1-matnr

  • charg = it_1-charg

  • bwart = '901'.

LOOP AT it_aufm1 WHERE matnr = it_1-matnr AND

charg = it_1-charg AND

bwart = '901'.

IF sy-subrc = 0.

READ TABLE it_aufm3 WITH KEY aufnr = it_aufm1-aufnr

matnr = it_aufm1-matnr.

IF sy-subrc <> 0.

SELECT matnr

werks

charg

menge

dmbtr

bwart

meins

APPENDING TABLE it_1

FROM aufm

WHERE aufnr = it_aufm1-aufnr

AND bwart IN (261,262)

AND budat IN s_pcdf. " Vi

ELSE.

DELETE it_1.

ENDIF.

ENDIF.

ENDLOOP.

ELSE.

MOVE-CORRESPONDING it_1 TO it_temp1.

COLLECT it_temp1.

DELETE it_1.

  • ELSE.

  • DELETE it_1.

  • ENDIF.

  • ENDLOOP. " Second

ENDIF.

CLEAR it_1.

  • delete it_1." Vi

ENDLOOP.

ENDIF.

CLEAR: it_aufm.

ENDIF.

CLEAR: it_aufm.

ENDLOOP.

      • Seprate the data for movement type 262 and subtract 262 from 261.

IF NOT it_temp1[] IS INITIAL.

CLEAR it_temp1.

LOOP AT it_temp1.

IF it_temp1-bwart = '262'.

MOVE-CORRESPONDING it_temp1 TO it_262.

COLLECT it_262.

ENDIF.

ENDLOOP.

ENDIF.

DELETE it_temp1 WHERE bwart = '262'.

IF NOT it_temp1[] IS INITIAL.

LOOP AT it_temp1.

IF NOT it_262[] IS INITIAL.

CLEAR it_262.

READ TABLE it_262 WITH KEY matnr = it_temp1-matnr

werks = it_temp1-werks

charg = it_temp1-charg.

IF NOT it_262 IS INITIAL.

it_temp1-menge = it_temp1-menge - it_262-menge.

it_temp1-dmbtr = it_temp1-dmbtr - it_262-dmbtr.

ELSE.

      • do nothing

ENDIF.

MODIFY it_temp1.

ENDIF.

ENDLOOP.

ENDIF.

      • Push complete data about one FG code in table IT_SV.

IF NOT it_temp1[] IS INITIAL.

LOOP AT it_temp1.

CLEAR it_sv.

MOVE sy-mandt TO it_sv-mandt.

MOVE s_bukrs TO it_sv-bukrs.

MOVE it_temp1-werks TO it_sv-werks.

MOVE it_mseg-matnr TO it_sv-matnr. " This will the FG code

MOVE it_temp1-charg TO it_sv-charg.

MOVE it_mseg-charg TO it_sv-charg_fg.

MOVE it_temp1-matnr TO it_sv-component.

MOVE it_temp1-menge TO it_sv-menge.

MOVE it_temp1-meins TO it_sv-meins.

MOVE it_temp1-dmbtr TO it_sv-dmbtr.

APPEND it_sv.

ENDLOOP.

ENDIF.

CLEAR: it_temp1,

it_1,

it_aufm,

it_aufm1.

  • it_262.

REFRESH: it_temp1,

  • it_262,

it_1,

it_aufm1.

ENDLOOP.

CLEAR: it_makt,

it_mara.

REFRESH: it_makt,

it_mara.

SELECT matnr maktx

FROM makt

INTO TABLE it_makt

FOR ALL ENTRIES IN it_sv

WHERE matnr = it_sv-matnr.

SELECT matnr maktx

FROM makt

INTO TABLE it_makt1

FOR ALL ENTRIES IN it_sv

WHERE matnr = it_sv-component.

SELECT matnr mtart matkl

FROM mara

INTO TABLE it_mara

FOR ALL ENTRIES IN it_sv

WHERE matnr = it_sv-component.

IF NOT it_sv[] IS INITIAL.

LOOP AT it_sv.

CLEAR it_makt.

READ TABLE it_makt WITH KEY matnr = it_sv-matnr.

IF NOT it_makt IS INITIAL.

MOVE it_makt-maktx TO it_sv-maktx.

ENDIF.

CLEAR it_makt1.

READ TABLE it_makt1 WITH KEY matnr = it_sv-component.

IF NOT it_makt1 IS INITIAL.

MOVE it_makt1-maktx TO it_sv-componentdisc.

ENDIF.

CLEAR it_mara.

READ TABLE it_mara WITH KEY matnr = it_sv-component.

IF NOT it_mara IS INITIAL.

MOVE it_mara-mtart TO it_sv-mtart.

MOVE it_mara-matkl TO it_sv-matkl.

ENDIF.

CLEAR mbew.

SELECT SINGLE zplp1

INTO mbew-zplp1

FROM mbew

WHERE matnr = it_sv-component

AND bwkey = it_sv-werks.

IF sy-subrc = 0.

MOVE mbew-zplp1 TO it_sv-zplp1.

ENDIF.

DATA: temp_var LIKE zcon_variance-verpr.

temp_var = it_sv-zplp1 * it_sv-menge.

it_sv-sales_variance = temp_var - it_sv-dmbtr.

MOVE s_pcdf-low TO it_sv-confirmfromdate.

MOVE s_pcdf-high TO it_sv-confirmtodate.

CLEAR aufm.

SELECT SINGLE * FROM aufm WHERE matnr = it_sv-component.

IF sy-subrc = 0.

MOVE aufm-waers TO it_sv-currency.

ENDIF.

CLEAR: cyear,

cmonth.

cyear = s_pcdf-low+0(4).

cmonth = s_pcdf-low+4(2).

MOVE cmonth TO it_sv-period.

MOVE cyear TO it_sv-gjahr.

MODIFY it_sv.

ENDLOOP.

ENDIF.

ENDFORM. " select_material_docs

&----


*& Form fill_sales_variance

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM fill_sales_variance .

  • mandt = sy-mandt.

  • SELECT SINGLE * FROM zsales_variance INTO it_zsv.

  • IF NOT it_zsv IS INITIAL.

  • DELETE FROM zsales_variance CLIENT SPECIFIED WHERE mandt = mandt.

  • ENDIF.

      • Delete the plants which are not manufacturing plants.

IF NOT it_sv[] IS INITIAL.

DELETE it_sv WHERE werks <> so_werks.

ENDIF.

IF NOT it_sv[] IS INITIAL.

SORT it_sv BY period gjahr ASCENDING.

LOOP AT it_sv.

MOVE-CORRESPONDING it_sv TO zsales_variance.

MODIFY zsales_variance.

ENDLOOP.

ELSE.

MESSAGE e208(00) WITH 'No record found...'.

ENDIF.

IF sy-subrc = 0.

COMMIT WORK.

MESSAGE s208(00) WITH 'Records inserted successfully...'.

ELSE.

ROLLBACK WORK.

MESSAGE e208(00) WITH 'Error in records insertion'.

ENDIF.

ENDFORM. " fill_sales_variance

0 Kudos

Maddu - your problems (and there are more than one of them) are in form select_material_docs. There you perform a number of nested loops and SELECTS within those loops.

Have a look at:

<a href="/people/rob.burbank/blog/2006/02/07/performance-of-nested-loops">The Performance of Nested Loops</a>

Rob

Former Member
0 Kudos

Hi,

Try passing some blank ranges for MJAHR & ZEILE in the where clause of the query, it will definitly be fast.

Regards,

Satish

Former Member
0 Kudos

Please post your code.

0 Kudos

The code is:

REPORT zsales_variance_1 NO STANDARD PAGE HEADING MESSAGE-ID ymsg LINE-SIZE 1000.

TABLES: mara,

zcon_variance,

zsales_variance,

t001k,

makt,

mkpf,

aufm,

mbew.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t2.

PARAMETER s_bukrs LIKE zcon_variance-bukrs DEFAULT '1000' OBLIGATORY.

SELECT-OPTIONS: s_matnr FOR mara-matnr DEFAULT 'FG only'.

PARAMETER: so_werks LIKE zsales_variance-werks OBLIGATORY.

SELECT-OPTIONS: s_pcdf FOR aufm-budat OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

RANGES: s_werks FOR zsales_variance-werks.

*******Filling the Range internal table for fixing the plants for Company code 1000: Start

s_werks-sign = 'I'. "Include

s_werks-option = 'BT'. "Pattern

s_werks-low = '1001'. "Low Value

s_werks-high = '1025'. "High Value

APPEND s_werks.

*******Filling the Range internal table for fixing the plants for Company code 1000: End

DATA: BEGIN OF it_mara OCCURS 0,

matnr LIKE mara-matnr,

mtart LIKE mara-mtart,

matkl TYPE matkl,

werks LIKE marc-werks,

indi1(8) TYPE c,

ok(2) TYPE c,

  • maktx LIKE makt-maktx,

END OF it_mara.

*DATA it_mara1 LIKE it_mara OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_t001k OCCURS 0,

bwkey LIKE t001k-bwkey,

matnr LIKE mara-matnr,

zplp1 LIKE mbew-zplp1,

maktx LIKE makt-maktx,

END OF it_t001k.

DATA: BEGIN OF it_mbew OCCURS 0,

matnr LIKE mara-matnr,

bwkey LIKE t001k-bwkey,

zplp1 LIKE mbew-zplp1,

maktx LIKE makt-maktx,

END OF it_mbew.

DATA: BEGIN OF it_makt OCCURS 0,

matnr LIKE makt-matnr,

maktx LIKE makt-maktx,

END OF it_makt.

DATA: it_makt1 LIKE it_makt OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_mkpf OCCURS 0,

mblnr LIKE mkpf-mblnr,

mjahr LIKE mkpf-mjahr,

END OF it_mkpf.

*DATA: BEGIN OF it_mseg OCCURS 0,

  • mblnr LIKE mseg-mblnr,

  • matnr LIKE mara-matnr,

  • werks LIKE mseg-werks,

  • bwart LIKE mseg-bwart,

  • menge LIKE mseg-menge,

  • meins LIKE mseg-meins,

  • dmbtr LIKE mseg-dmbtr,

  • END OF it_mseg.

DATA: BEGIN OF it_final OCCURS 0 ,

mandt TYPE mandt,

bukrs LIKE zcon_variance-bukrs,

werks LIKE zcon_variance-werks,

matnr LIKE zcon_variance-matnr,

component LIKE zcon_variance-component,

mtart LIKE zcon_variance-mtart,

maktx LIKE zcon_variance-maktx,

componentdisc LIKE zcon_variance-componentdisc,

matkl LIKE zcon_variance-matkl,

menge LIKE zcon_variance-menge,

meins LIKE zcon_variance-meins,

dmbtr LIKE zcon_variance-dmbtr,

verpr LIKE zcon_variance-verpr,

zplp1 LIKE zcon_variance-zplp1,

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

currency TYPE waers,

mtart_matnr TYPE mtart,

  • ok(2) TYPE c,

END OF it_final.

DATA: BEGIN OF it_final_compo OCCURS 0 ,

mandt TYPE mandt,

bukrs LIKE zcon_variance-bukrs,

werks LIKE zcon_variance-werks,

  • matnr LIKE zcon_variance-matnr,

component LIKE zcon_variance-component,

mtart LIKE zcon_variance-mtart,

  • maktx LIKE zcon_variance-maktx,

componentdisc LIKE zcon_variance-componentdisc,

matkl LIKE zcon_variance-matkl,

menge LIKE zcon_variance-menge,

meins LIKE zcon_variance-meins,

dmbtr LIKE zcon_variance-dmbtr,

verpr LIKE zcon_variance-verpr,

zplp1 LIKE zcon_variance-zplp1,

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

currency TYPE waers,

mtart_matnr TYPE mtart,

  • ok(2) TYPE c,

END OF it_final_compo.

DATA: ok(2) TYPE c.

DATA : it2 LIKE it_final OCCURS 0 WITH HEADER LINE.

DATA : it2_temp LIKE it2 OCCURS 0 WITH HEADER LINE.

DATA: it_compo LIKE it_final_compo OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it3 OCCURS 0 ,

mandt TYPE mandt,

bukrs LIKE zcon_variance-bukrs,

werks LIKE zcon_variance-werks,

matnr LIKE zcon_variance-matnr,

component LIKE zcon_variance-component,

mtart LIKE zcon_variance-mtart,

maktx LIKE zcon_variance-maktx,

componentdisc LIKE zcon_variance-componentdisc,

matkl LIKE zcon_variance-matkl,

menge LIKE zcon_variance-menge,

meins LIKE zcon_variance-meins,

dmbtr LIKE zcon_variance-dmbtr,

verpr LIKE zcon_variance-verpr,

zplp1 LIKE zcon_variance-zplp1, " if this is 0.

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

currency TYPE waers,

END OF it3.

DATA: BEGIN OF it_aufm OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

charg LIKE aufm-charg,

bwart LIKE aufm-bwart,

END OF it_aufm.

DATA: it_aufm1 LIKE it_aufm OCCURS 0 WITH HEADER LINE.

DATA: it_aufm3 LIKE it_aufm1 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_aufm2 OCCURS 0,

matnr LIKE aufm-matnr,

charg LIKE aufm-charg,

bwart LIKE aufm-bwart,

werks LIKE aufm-werks,

END OF it_aufm2.

DATA: BEGIN OF it_aufm_901 OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

bwart_901 LIKE aufm-bwart,

bwart_902 LIKE aufm-bwart,

bwart_261 LIKE aufm-bwart,

bwart_262 LIKE aufm-bwart,

indi1(8) TYPE c,

901 LIKE mara-matnr,

  • aufnr LIKE aufm-aufnr,

END OF it_aufm_901.

DATA: BEGIN OF it_mpb OCCURS 0,

  • aufnr LIKE aufm-aufnr,

matnr LIKE mara-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

yes TYPE c,

END OF it_mpb.

DATA: it_temp LIKE it_aufm_901 OCCURS 0 WITH HEADER LINE.

DATA: it_aufm_901_backup LIKE it_aufm_901 OCCURS 0 WITH HEADER LINE.

DATA: indi1(8) TYPE c.

DATA: bwart_901 LIKE aufm-bwart,

bwart_902 LIKE aufm-bwart,

bwart_261 LIKE aufm-bwart,

bwart_262 LIKE aufm-bwart.

DATA: BEGIN OF it_aufnr OCCURS 0,

aufnr LIKE aufm-aufnr,

yes TYPE c,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

END OF it_aufnr.

DATA yes TYPE c.

DATA: BEGIN OF it_aufm_901_filter OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

bwart_pm(4) TYPE c,

indi TYPE c,

budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

  • bwart_901 LIKE aufm-bwart,

  • bwart_902 LIKE aufm-bwart,

  • bwart_261 LIKE aufm-bwart,

  • bwart_262 LIKE aufm-bwart,

  • aufnr LIKE aufm-aufnr,

END OF it_aufm_901_filter.

DATA: BEGIN OF it1 OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • bwart_pm(4) TYPE c,

indi TYPE c,

budat LIKE aufm-budat,

menge LIKE aufm-menge,

menge_f(14) TYPE c,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

dmbtr_f(14) TYPE c,

dmbtr_v(14) TYPE c,

menge_v(14) TYPE c,

901 LIKE mara-matnr,

END OF it1.

DATA: it4 LIKE it1 OCCURS 0 WITH HEADER LINE.

DATA: it5 LIKE it4 OCCURS 0 WITH HEADER LINE.

DATA: add_menge TYPE menge_d,

add_dmbtr TYPE dmbtr.

DATA: BEGIN OF it1902 OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • bwart_pm(4) TYPE c,

indi TYPE c,

budat LIKE aufm-budat,

menge(14) TYPE c,

menge_v(14) TYPE c,

meins LIKE aufm-meins,

dmbtr(14) TYPE c,

dmbtr_v(14) TYPE c,

END OF it1902.

DATA: it1902_add LIKE it1902 OCCURS 0 WITH HEADER LINE.

DATA: it1902_add1 LIKE it1902 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it1262 OCCURS 0,

aufnr LIKE aufm-aufnr,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • bwart_pm(4) TYPE c,

indi TYPE c,

budat LIKE aufm-budat,

menge(14) TYPE c,

menge_v(14) TYPE c,

meins LIKE aufm-meins,

dmbtr(14) TYPE c,

dmbtr_v(14) TYPE c,

END OF it1262.

DATA: it1262_add LIKE it1262 OCCURS 0 WITH HEADER LINE.

DATA: it1262_add1 LIKE it1262 OCCURS 0 WITH HEADER LINE.

DATA: indi TYPE c,

  • bwart_pm(4) TYPE c,

menge_v(14) TYPE c,

dmbtr_v(14) TYPE c,

menge_f(14) TYPE c,

dmbtr_f(14) TYPE c.

DATA: matnr LIKE mara-matnr,

maktx LIKE makt-maktx,

cnt TYPE i,

cnt1 TYPE i,

cnt2 TYPE i.

DATA: BEGIN OF it_aufm_901_1 OCCURS 0,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

mengefinal LIKE aufm-menge,

aufnr LIKE aufm-aufnr,

END OF it_aufm_901_1.

DATA: BEGIN OF it_aufm_901_2 OCCURS 0,

  • matnr LIKE aufm-matnr,

  • werks LIKE aufm-werks,

  • bwart LIKE aufm-bwart,

    • budat LIKE aufm-budat,

  • menge LIKE aufm-menge,

  • meins LIKE aufm-meins,

  • dmbtr LIKE aufm-dmbtr,

  • mengefinal LIKE aufm-menge,

aufnr LIKE aufm-aufnr,

END OF it_aufm_901_2.

DATA: BEGIN OF it_aufm_901_3 OCCURS 0,

bukrs LIKE zcon_variance-bukrs,

werks LIKE zcon_variance-werks,

matnr LIKE zcon_variance-matnr,

maktx LIKE zcon_variance-maktx,

component LIKE zcon_variance-component,

componentdisc LIKE zcon_variance-componentdisc,

mtart LIKE zcon_variance-mtart,

matkl LIKE zcon_variance-matkl,

menge LIKE zcon_variance-menge,

meins LIKE zcon_variance-meins,

dmbtr LIKE zcon_variance-dmbtr,

map LIKE zcon_variance-verpr,

zplp1 LIKE zcon_variance-zplp1,

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

bwart LIKE mseg-bwart,

END OF it_aufm_901_3.

DATA: BEGIN OF it_aufm_261 OCCURS 0,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

aufnr LIKE aufm-aufnr,

END OF it_aufm_261.

DATA: BEGIN OF it_aufm_261_1 OCCURS 0,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

issueq LIKE aufm-menge,

aufnr LIKE aufm-aufnr,

map LIKE zcon_variance-verpr,

END OF it_aufm_261_1.

DATA: BEGIN OF it_aufm_261_2 OCCURS 0,

matnr LIKE aufm-matnr,

werks LIKE aufm-werks,

bwart LIKE aufm-bwart,

  • budat LIKE aufm-budat,

menge LIKE aufm-menge,

meins LIKE aufm-meins,

dmbtr LIKE aufm-dmbtr,

issueq LIKE aufm-menge,

aufnr LIKE aufm-aufnr,

map LIKE zcon_variance-verpr,

END OF it_aufm_261_2.

DATA: flag1,

flag2,

flag3,

flag4,

menge LIKE aufm-menge,

menge902 LIKE aufm-menge,

menge262 LIKE aufm-menge,

mengefinal LIKE aufm-menge,

issueq LIKE aufm-menge,

map LIKE zcon_variance-verpr,

dmbtr LIKE aufm-dmbtr,

flagtab TYPE c.

DATA: mandt TYPE sy-mandt.

DATA: it_zcv TYPE zcon_variance,

it_zcv_compo TYPE zcon_variance_c.

DATA: BEGIN OF it_mseg OCCURS 0,

mblnr LIKE mseg-mblnr,

matnr LIKE mseg-matnr,

werks LIKE mseg-werks,

charg LIKE mseg-charg,

menge LIKE mseg-menge,

dmbtr LIKE mseg-dmbtr,

bwart LIKE mseg-bwart,

END OF it_mseg.

DATA: it_mseg1 LIKE it_mseg OCCURS 0 WITH HEADER LINE.

DATA: it_mseg_temp LIKE it_mseg OCCURS 0 WITH HEADER LINE.

DATA: it_mseg_601 LIKE it_mseg OCCURS 0 WITH HEADER LINE,

it_mseg_601_add LIKE it_mseg OCCURS 0 WITH HEADER LINE.

DATA: it_mseg_602 LIKE it_mseg OCCURS 0 WITH HEADER LINE,

it_mseg_602_add LIKE it_mseg OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_1 OCCURS 0,

matnr LIKE mseg-matnr,

werks LIKE mseg-werks,

charg LIKE mseg-charg,

menge(16) TYPE p DECIMALS 2, " LIKE mseg-menge, Changed later to get more space and to avoid any possible overflow: Viren;c

dmbtr(16) TYPE p DECIMALS 2, " LIKE mseg-dmbtr, Changed later to get more space and to avoid any possible overflow: Viren;c

bwart LIKE mseg-bwart,

meins LIKE mseg-meins,

END OF it_1.

DATA: it_temp1 LIKE it_1 OCCURS 0 WITH HEADER LINE.

DATA: it_261 LIKE it_1 OCCURS 0 WITH HEADER LINE,

it_262 LIKE it_1 OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_sv OCCURS 0,

mandt TYPE mandt,

bukrs TYPE bukrs,

werks TYPE werks_d,

matnr TYPE matnr,

component TYPE zcomponent,

charg TYPE charg_d,

period TYPE zperiod,

gjahr TYPE gjahr,

mtart TYPE mtart,

maktx TYPE maktx,

componentdisc TYPE zcomponentdisc,

matkl TYPE matkl,

menge(16) TYPE p DECIMALS 2, "menge_d, Changed later to get more space and to avoid any possible overflow: Viren;c

meins TYPE meins,

dmbtr(16) TYPE p DECIMALS 2, " dmbtr, Changed later to get more space and to avoid any possible overflow: Viren;c

zplp1 TYPE dzplp1,

sales_variance TYPE zvariance,

charg_fg TYPE charg_d,

confirmtodate LIKE zcon_variance-confirmtodate,

confirmfromdate LIKE zcon_variance-confirmtodate,

currency TYPE waers,

END OF it_sv.

DATA: it_zsv TYPE zsales_variance.

DATA: cyear(4) TYPE c,

cmonth(2) TYPE c.

INITIALIZATION.

t2 = 'Please select'.

START-OF-SELECTION.

PERFORM determine_material_codes.

PERFORM dtrmine_plnt_bsd_on_cmpny_cods.

  • PERFORM determine_material_documents.

PERFORM determine_mat_doc1.

PERFORM fill_sales_variance.

END-OF-SELECTION.

&----


*& Form determine_material_codes

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM determine_material_codes .

      • For Material selection

IF s_matnr-low IS INITIAL AND s_matnr-high IS NOT INITIAL.

s_matnr-low = s_matnr-high.

ENDIF.

SELECT matnr mtart

FROM mara

INTO TABLE it_mara

WHERE matnr IN s_matnr

AND mtart = 'IFIG'.

IF it_mara[] IS INITIAL.

MESSAGE e001.

EXIT.

ENDIF.

ENDFORM. " determine_material_codes

&----


*& Form dtrmine_plnt_bsd_on_cmpny_cods

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM dtrmine_plnt_bsd_on_cmpny_cods .

SELECT bwkey FROM t001k INTO TABLE it_t001k

WHERE bukrs = s_bukrs.

IF it_t001k[] IS INITIAL.

  • mandt = sy-mandt.

  • DELETE FROM zsales_variance CLIENT SPECIFIED WHERE mandt = mandt.

  • IF sy-subrc = 0.

  • COMMIT WORK.

  • ENDIF.

MESSAGE e002.

EXIT.

ENDIF.

ENDFORM. " dtrmine_plnt_bsd_on_cmpny_cods

&----


*& Form determine_mat_doc1

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM determine_mat_doc1 .

      • If optional fields is not filled then go by plant specifications

CLEAR it_mbew.

CLEAR it_t001k.

SORT it_t001k BY bwkey.

DELETE ADJACENT DUPLICATES FROM it_t001k COMPARING bwkey.

PERFORM select_material_docs.

ENDFORM. " determine_mat_doc1

&----


*& Form select_material_docs

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM select_material_docs .

SELECT mblnr mjahr

FROM mkpf

INTO TABLE it_mkpf

WHERE budat IN s_pcdf.

IF NOT it_mkpf[] IS INITIAL.

CLEAR it_mkpf.

SORT it_mkpf BY mblnr.

DELETE ADJACENT DUPLICATES FROM it_mkpf COMPARING mblnr.

SELECT mblnr

matnr

werks

charg

menge

dmbtr

bwart

FROM mseg

INTO TABLE it_mseg

FOR ALL ENTRIES IN it_mkpf

WHERE mblnr = it_mkpf-mblnr

AND mjahr = it_mkpf-mjahr

AND ( bwart = '601' OR bwart = '602' )

AND matnr IN s_matnr. " Added to select the only materials given in Material field.

cnt = 0.

DATA lv_index TYPE sy-tabix.

SORT it_mara BY matnr ASCENDING.

SORT it_mseg BY matnr ASCENDING.

    • IF NOT it_mara[] IS INITIAL AND NOT it_mseg[] IS INITIAL.

    • LOOP AT it_mara.

    • LOOP AT it_mseg WHERE MATNR = IT_MARA-MATNR .

    • IF NOT it_mseg IS INITIAL.

      • APPEND LINES OF it_mseg TO it_mseg1.

    • MOVE-CORRESPONDING it_mseg TO it_mseg1.

    • APPEND it_mseg1.

    • CLEAR it_mseg.

    • ENDIF.

    • ENDLOOP.

    • ENDLOOP.

    • ENDIF.

DATA index TYPE sy-tabix.

      • start

  • LOOP AT it_mara.

  • index = sy-tabix.

  • CLEAR it_mseg.

  • READ TABLE it_mseg WITH KEY matnr = it_mara-matnr BINARY SEARCH.

  • IF NOT it_mseg IS INITIAL.

  • it_mara-indi1 = 'FOUND'.

  • ELSE.

  • it_mara-indi1 = 'NOTFOUND'.

  • ENDIF.

  • MODIFY it_mara INDEX index.

  • ENDLOOP.

*

  • DELETE it_mara WHERE indi1 = 'NOTFOUND'.

*

  • SORT it_mara BY matnr ASCENDING.

  • SORT it_mseg BY matnr ASCENDING.

*

  • lv_index = 1.

  • IF NOT it_mara[] IS INITIAL AND NOT it_mseg[] IS INITIAL.

  • LOOP AT it_mara.

  • CLEAR it_mseg.

  • LOOP AT it_mseg FROM lv_index .

  • IF it_mseg-matnr <> it_mara-matnr.

  • lv_index = sy-tabix.

  • EXIT.

  • ELSE.

  • MOVE-CORRESPONDING it_mseg TO it_mseg1.

  • APPEND it_mseg1.

  • CLEAR it_mseg1.

  • ENDIF.

  • ENDLOOP.

  • ENDLOOP.

  • ENDIF.

*

*

  • CLEAR: it_mseg,

  • it_mseg1.

  • REFRESH: it_mseg.

  • it_mseg[] = it_mseg1[].

      • END

      • Select the manufacturing plants for given company code.

IF NOT it_mseg[] IS INITIAL.

SELECT matnr charg bwart werks

FROM aufm

INTO TABLE it_aufm2

  • FOR ALL ENTRIES IN it_mseg

  • WHERE matnr = it_mseg-matnr

  • AND charg = it_mseg-charg

WHERE bwart = '901'.

SORT it_mseg BY matnr charg bwart.

SORT it_aufm2 BY matnr charg bwart.

LOOP AT it_mseg.

CLEAR it_aufm2.

READ TABLE it_aufm2 WITH KEY matnr = it_mseg-matnr

charg = it_mseg-charg

bwart = '901' BINARY SEARCH.

IF sy-subrc = 0.

MOVE it_aufm2-werks TO it_mseg-werks.

MODIFY it_mseg.

ENDIF.

ENDLOOP.

ENDIF.

      • Delete the plants which are not manufacturing plants.

IF NOT it_mseg[] IS INITIAL.

DELETE it_mseg WHERE werks <> so_werks.

ENDIF.

IF NOT it_mseg[] IS INITIAL.

LOOP AT it_mseg.

MOVE it_mseg-matnr TO it_mseg_temp-matnr.

MOVE it_mseg-werks TO it_mseg_temp-werks.

MOVE it_mseg-charg TO it_mseg_temp-charg.

MOVE it_mseg-menge TO it_mseg_temp-menge.

MOVE it_mseg-dmbtr TO it_mseg_temp-dmbtr.

MOVE it_mseg-bwart TO it_mseg_temp-bwart.

COLLECT it_mseg_temp.

ENDLOOP.

ENDIF.

CLEAR it_mseg.

REFRESH it_mseg.

it_mseg[] = it_mseg_temp[].

ENDIF.

IF NOT it_mseg[] IS INITIAL.

      • Seprate the entries having movement type '602'.

LOOP AT it_mseg.

IF it_mseg-bwart = '601'.

MOVE it_mseg-matnr TO it_mseg_601-matnr.

MOVE it_mseg-werks TO it_mseg_601-werks.

MOVE it_mseg-charg TO it_mseg_601-charg.

MOVE it_mseg-menge TO it_mseg_601-menge.

MOVE it_mseg-dmbtr TO it_mseg_601-dmbtr.

MOVE it_mseg-bwart TO it_mseg_601-bwart.

APPEND it_mseg_601.

ENDIF.

IF it_mseg-bwart = '602'.

MOVE it_mseg-matnr TO it_mseg_602-matnr.

MOVE it_mseg-werks TO it_mseg_602-werks.

MOVE it_mseg-charg TO it_mseg_602-charg.

MOVE it_mseg-menge TO it_mseg_602-menge.

MOVE it_mseg-dmbtr TO it_mseg_602-dmbtr.

MOVE it_mseg-bwart TO it_mseg_602-bwart.

APPEND it_mseg_602.

ENDIF.

ENDLOOP.

  • DELETE it_mseg WHERE bwart = '602'.

      • Add the entries of '601' movement type

IF NOT it_mseg_601[] IS INITIAL.

LOOP AT it_mseg_601.

MOVE it_mseg_601-matnr TO it_mseg_601_add-matnr.

MOVE it_mseg_601-werks TO it_mseg_601_add-werks.

MOVE it_mseg_601-charg TO it_mseg_601_add-charg.

MOVE it_mseg_601-menge TO it_mseg_601_add-menge.

MOVE it_mseg_601-dmbtr TO it_mseg_601_add-dmbtr.

MOVE it_mseg_601-bwart TO it_mseg_601_add-bwart.

COLLECT it_mseg_601_add.

ENDLOOP.

ENDIF.

      • Add the entries of '602' movement type

IF NOT it_mseg_602[] IS INITIAL.

LOOP AT it_mseg_602.

MOVE it_mseg_602-matnr TO it_mseg_602_add-matnr.

MOVE it_mseg_602-werks TO it_mseg_602_add-werks.

MOVE it_mseg_602-charg TO it_mseg_602_add-charg.

MOVE it_mseg_602-menge TO it_mseg_602_add-menge.

MOVE it_mseg_602-dmbtr TO it_mseg_602_add-dmbtr.

MOVE it_mseg_602-bwart TO it_mseg_602_add-bwart.

COLLECT it_mseg_602_add.

ENDLOOP.

ENDIF.

ELSE.

MESSAGE e003.

EXIT.

ENDIF.

      • Deduct the quantity and the amount for movement type '602' from '601'.

cnt = 0.

IF NOT it_mseg_601_add[] IS INITIAL.

LOOP AT it_mseg_601_add.

cnt = sy-tabix.

CLEAR: menge_f,

dmbtr_f,

it_mseg_602_add.

READ TABLE it_mseg_602_add WITH KEY matnr = it_mseg_601_add-matnr

werks = it_mseg_601_add-werks

charg = it_mseg_601_add-charg.

IF sy-subrc = 0.

menge_f = it_mseg_601_add-menge - it_mseg_602_add-menge.

dmbtr_f = it_mseg_601_add-dmbtr - it_mseg_602_add-dmbtr.

MOVE menge_f TO it_mseg_601_add-menge.

MOVE dmbtr_f TO it_mseg_601_add-dmbtr.

MODIFY it_mseg_601_add INDEX cnt TRANSPORTING menge dmbtr.

ENDIF.

ENDLOOP.

ELSE.

MESSAGE e003.

EXIT.

ENDIF.

CLEAR: it_mseg,

it_mseg_601_add.

REFRESH: it_mseg.

it_mseg[] = it_mseg_601_add[].

      • select all materials and material type to match at ISFG material level

CLEAR: it_mara.

REFRESH: it_mara.

SELECT matnr

mtart

INTO TABLE it_mara

FROM mara

WHERE mtart = 'ISFG'.

        • Select all the order no's from AUFM to reduce to data trafficing

  • SELECT aufnr matnr charg bwart

  • FROM aufm

  • INTO TABLE it_aufm

  • FOR ALL ENTRIES IN it_mseg

  • WHERE matnr = it_mseg-matnr

  • AND charg = it_mseg-charg

  • AND bwart = '901'.

DATA : it_mc9 LIKE it_aufm OCCURS 0 WITH HEADER LINE.

SELECT aufnr

matnr

charg

bwart

INTO TABLE it_mc9

FROM aufm

FOR ALL ENTRIES IN it_mseg

WHERE matnr = it_mseg-matnr

AND charg = it_mseg-charg

AND bwart = '901'

.

LOOP AT it_mseg.

CLEAR it_mc9.

  • READ TABLE it_mc9 WITH KEY matnr = it_mseg-matnr

  • charg = it_mseg-charg

  • bwart = '901'.

LOOP AT it_mc9 WHERE matnr = it_mseg-matnr AND

charg = it_mseg-charg AND

bwart = '901'.

IF NOT it_mc9 IS INITIAL.

MOVE-CORRESPONDING it_mc9 TO it_aufm.

APPEND it_aufm.

ENDIF.

ENDLOOP.

  • SELECT aufnr matnr charg bwart

  • FROM aufm

  • APPENDING TABLE it_aufm

  • WHERE matnr = it_mseg-matnr

  • AND charg = it_mseg-charg

  • AND bwart = '901'.

ENDLOOP.

cnt = 0.

      • select the order no's giving material code and batch.

CLEAR it_mseg.

LOOP AT it_mseg.

cnt = sy-tabix.

CLEAR it_aufm.

  • READ TABLE it_aufm WITH KEY matnr = it_mseg-matnr

  • charg = it_mseg-charg

  • bwart = '901'.

LOOP AT it_aufm WHERE matnr = it_mseg-matnr AND

charg = it_mseg-charg AND

bwart = '901'.

IF NOT it_aufm IS INITIAL.

  • READ TABLE it_aufm.

SELECT matnr

werks

charg

menge

dmbtr

bwart

meins

INTO TABLE it_1

FROM aufm

WHERE aufnr = it_aufm-aufnr

AND bwart IN (261,262)

AND budat IN s_pcdf. " Vi

IF NOT it_1[] IS INITIAL.

SORT it_1 BY matnr ASCENDING.

      • Select order no's one time to prevent data trafficing in IT_AUFM1.

IF NOT it_aufm1[] IS INITIAL.

APPEND LINES OF it_aufm1 TO it_aufm3.

ENDIF.

SELECT aufnr

matnr

charg

bwart

FROM aufm

INTO TABLE it_aufm1

FOR ALL ENTRIES IN it_1

WHERE matnr = it_1-matnr

AND charg = it_1-charg

AND bwart = '901'

AND budat IN s_pcdf. " Vi

  • IF NOT it_aufm1[] IS INITIAL.

  • it_aufm3[] = it_aufm1[].

  • ENDIF.

LOOP AT it_1.

CLEAR it_mara.

READ TABLE it_mara WITH KEY matnr = it_1-matnr.

IF NOT it_mara IS INITIAL.

CLEAR it_aufm1.

  • READ TABLE it_aufm1 WITH KEY matnr = it_1-matnr

  • charg = it_1-charg

  • bwart = '901'.

LOOP AT it_aufm1 WHERE matnr = it_1-matnr AND

charg = it_1-charg AND

bwart = '901'.

IF sy-subrc = 0.

READ TABLE it_aufm3 WITH KEY aufnr = it_aufm1-aufnr

matnr = it_aufm1-matnr.

IF sy-subrc <> 0.

SELECT matnr

werks

charg

menge

dmbtr

bwart

meins

APPENDING TABLE it_1

FROM aufm

WHERE aufnr = it_aufm1-aufnr

AND bwart IN (261,262)

AND budat IN s_pcdf. " Vi

ELSE.

DELETE it_1.

ENDIF.

ENDIF.

ENDLOOP.

ELSE.

MOVE-CORRESPONDING it_1 TO it_temp1.

COLLECT it_temp1.

DELETE it_1.

  • ELSE.

  • DELETE it_1.

  • ENDIF.

  • ENDLOOP. " Second

ENDIF.

CLEAR it_1.

  • delete it_1." Vi

ENDLOOP.

ENDIF.

CLEAR: it_aufm.

ENDIF.

CLEAR: it_aufm.

ENDLOOP.

      • Seprate the data for movement type 262 and subtract 262 from 261.

IF NOT it_temp1[] IS INITIAL.

CLEAR it_temp1.

LOOP AT it_temp1.

IF it_temp1-bwart = '262'.

MOVE-CORRESPONDING it_temp1 TO it_262.

COLLECT it_262.

ENDIF.

ENDLOOP.

ENDIF.

DELETE it_temp1 WHERE bwart = '262'.

IF NOT it_temp1[] IS INITIAL.

LOOP AT it_temp1.

IF NOT it_262[] IS INITIAL.

CLEAR it_262.

READ TABLE it_262 WITH KEY matnr = it_temp1-matnr

werks = it_temp1-werks

charg = it_temp1-charg.

IF NOT it_262 IS INITIAL.

it_temp1-menge = it_temp1-menge - it_262-menge.

it_temp1-dmbtr = it_temp1-dmbtr - it_262-dmbtr.

ELSE.

      • do nothing

ENDIF.

MODIFY it_temp1.

ENDIF.

ENDLOOP.

ENDIF.

      • Push complete data about one FG code in table IT_SV.

IF NOT it_temp1[] IS INITIAL.

LOOP AT it_temp1.

CLEAR it_sv.

MOVE sy-mandt TO it_sv-mandt.

MOVE s_bukrs TO it_sv-bukrs.

MOVE it_temp1-werks TO it_sv-werks.

MOVE it_mseg-matnr TO it_sv-matnr. " This will the FG code

MOVE it_temp1-charg TO it_sv-charg.

MOVE it_mseg-charg TO it_sv-charg_fg.

MOVE it_temp1-matnr TO it_sv-component.

MOVE it_temp1-menge TO it_sv-menge.

MOVE it_temp1-meins TO it_sv-meins.

MOVE it_temp1-dmbtr TO it_sv-dmbtr.

APPEND it_sv.

ENDLOOP.

ENDIF.

CLEAR: it_temp1,

it_1,

it_aufm,

it_aufm1.

  • it_262.

REFRESH: it_temp1,

  • it_262,

it_1,

it_aufm1.

ENDLOOP.

CLEAR: it_makt,

it_mara.

REFRESH: it_makt,

it_mara.

SELECT matnr maktx

FROM makt

INTO TABLE it_makt

FOR ALL ENTRIES IN it_sv

WHERE matnr = it_sv-matnr.

SELECT matnr maktx

FROM makt

INTO TABLE it_makt1

FOR ALL ENTRIES IN it_sv

WHERE matnr = it_sv-component.

SELECT matnr mtart matkl

FROM mara

INTO TABLE it_mara

FOR ALL ENTRIES IN it_sv

WHERE matnr = it_sv-component.

IF NOT it_sv[] IS INITIAL.

LOOP AT it_sv.

CLEAR it_makt.

READ TABLE it_makt WITH KEY matnr = it_sv-matnr.

IF NOT it_makt IS INITIAL.

MOVE it_makt-maktx TO it_sv-maktx.

ENDIF.

CLEAR it_makt1.

READ TABLE it_makt1 WITH KEY matnr = it_sv-component.

IF NOT it_makt1 IS INITIAL.

MOVE it_makt1-maktx TO it_sv-componentdisc.

ENDIF.

CLEAR it_mara.

READ TABLE it_mara WITH KEY matnr = it_sv-component.

IF NOT it_mara IS INITIAL.

MOVE it_mara-mtart TO it_sv-mtart.

MOVE it_mara-matkl TO it_sv-matkl.

ENDIF.

CLEAR mbew.

SELECT SINGLE zplp1

INTO mbew-zplp1

FROM mbew

WHERE matnr = it_sv-component

AND bwkey = it_sv-werks.

IF sy-subrc = 0.

MOVE mbew-zplp1 TO it_sv-zplp1.

ENDIF.

DATA: temp_var LIKE zcon_variance-verpr.

temp_var = it_sv-zplp1 * it_sv-menge.

it_sv-sales_variance = temp_var - it_sv-dmbtr.

MOVE s_pcdf-low TO it_sv-confirmfromdate.

MOVE s_pcdf-high TO it_sv-confirmtodate.

CLEAR aufm.

SELECT SINGLE * FROM aufm WHERE matnr = it_sv-component.

IF sy-subrc = 0.

MOVE aufm-waers TO it_sv-currency.

ENDIF.

CLEAR: cyear,

cmonth.

cyear = s_pcdf-low+0(4).

cmonth = s_pcdf-low+4(2).

MOVE cmonth TO it_sv-period.

MOVE cyear TO it_sv-gjahr.

MODIFY it_sv.

ENDLOOP.

ENDIF.

ENDFORM. " select_material_docs

&----


*& Form fill_sales_variance

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM fill_sales_variance .

  • mandt = sy-mandt.

  • SELECT SINGLE * FROM zsales_variance INTO it_zsv.

  • IF NOT it_zsv IS INITIAL.

  • DELETE FROM zsales_variance CLIENT SPECIFIED WHERE mandt = mandt.

  • ENDIF.

      • Delete the plants which are not manufacturing plants.

IF NOT it_sv[] IS INITIAL.

DELETE it_sv WHERE werks <> so_werks.

ENDIF.

IF NOT it_sv[] IS INITIAL.

SORT it_sv BY period gjahr ASCENDING.

LOOP AT it_sv.

MOVE-CORRESPONDING it_sv TO zsales_variance.

MODIFY zsales_variance.

ENDLOOP.

ELSE.

MESSAGE e208(00) WITH 'No record found...'.

ENDIF.

IF sy-subrc = 0.

COMMIT WORK.

MESSAGE s208(00) WITH 'Records inserted successfully...'.

ELSE.

ROLLBACK WORK.

MESSAGE e208(00) WITH 'Error in records insertion'.

ENDIF.

ENDFORM. " fill_sales_variance

0 Kudos

hi Maddu,

this is developed by you or old one came for changes.

if it is you try using work areas from next time.

coming to the problem,

1.you are not passing full key for getting data from mkpf.

try passing atlest MJAHR.

2. you are looping twice it_mseg and it_mara.

instead read it_mseg in loop of it_mara once and fill it_mseg1 and do the work

for id.

3. you are filling data for bwart with if condition.

try to change it to read with work areas. i think it will reduce abap time.

try create index with budat.

regards,

krishna.