11-21-2007 12:50 PM
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.
11-21-2007 12:54 PM
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
11-21-2007 1:05 PM
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.
11-21-2007 1:21 PM
Hi,
Use MJAHR and ZEILE in your select query.
Reward if this helps,
Satish
11-21-2007 2:39 PM
Can't really help you optimaize your code without seeing it. Would you post it please?
Rob
11-22-2007 4:42 AM
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
11-22-2007 2:18 PM
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
11-21-2007 2:53 PM
Hi,
Try passing some blank ranges for MJAHR & ZEILE in the where clause of the query, it will definitly be fast.
Regards,
Satish
11-21-2007 6:48 PM
11-22-2007 4:42 AM
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
11-22-2007 3:15 PM
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.