cancel
Showing results for 
Search instead for 
Did you mean: 

op.& closing stock detail in MM

Former Member
0 Kudos

please anyone can tell me. regarding.

In which table we will find the opening and closing stock details year wise in MM for reporting purpose?

Accepted Solutions (0)

Answers (9)

Answers (9)

former_member529134
Active Contributor
0 Kudos

Hello

Try MBEWH and MARDH

Regards

Former Member
0 Kudos

Create this fn module and check ,

importing : WRK_MATNR LIKE MSEG-MATNR

WRK_WERKS LIKE MSEG-WERKS

WRK_DATE LIKE MKPF-BUDAT

WRK_LGBST LIKE AM07M-LGBST

WRK_BWBST LIKE AM07M-BWBST

exporting :

ANFMENGE TYPE P

ENDMENGE TYPE P

SOLL TYPE P

HABEN TYPE P

FUNCTION ZSTOCK_FOR_POSTING_DATE.

*"----


""Local Interface:

*" IMPORTING

*" REFERENCE(WRK_MATNR) LIKE MSEG-MATNR

*" REFERENCE(WRK_WERKS) LIKE MSEG-WERKS

*" REFERENCE(WRK_DATE) LIKE MKPF-BUDAT

*" REFERENCE(WRK_LGBST) LIKE AM07M-LGBST DEFAULT 'X'

*" REFERENCE(WRK_BWBST) LIKE AM07M-BWBST DEFAULT ' '

*" EXPORTING

*" REFERENCE(ANFMENGE) TYPE P

*" REFERENCE(ENDMENGE) TYPE P

*" REFERENCE(SOLL) TYPE P

*" REFERENCE(HABEN) TYPE P

*" EXCEPTIONS

*" MANDATORY

*"----


DATA: BEGIN OF weg_mat OCCURS 100,

werks LIKE mseg-werks,

lgort LIKE mseg-lgort,

matnr LIKE mseg-matnr,

shkzg LIKE mseg-shkzg,

menge(09) TYPE p DECIMALS 3,

END OF weg_mat.

DATA : g_f_dcobjdef-name LIKE dcobjdef-name,

g_flag_is_oil_active(01) TYPE c,

g_cnt_is_oil TYPE i,

oiglcalc(01) TYPE c,

oiglsku(07) TYPE p DECIMALS 3.

DATA: BEGIN OF mat_weg OCCURS 100,

bwkey LIKE mbew-bwkey,

werks LIKE mseg-werks,

matnr LIKE mseg-matnr,

shkzg LIKE mseg-shkzg,

menge(09) TYPE p DECIMALS 3,

dmbtr(09) TYPE p DECIMALS 3,

END OF mat_weg.

DATA: BEGIN OF mat_sum_buk OCCURS 100,

bwkey LIKE mbew-bwkey,

matnr LIKE mseg-matnr,

shkzg LIKE mseg-shkzg,

menge(09) TYPE p DECIMALS 3,

dmbtr(09) TYPE p DECIMALS 3,

END OF mat_sum_buk.

TYPES :BEGIN OF stype_mseg_lean,

mblnr LIKE mkpf-mblnr,

mjahr LIKE mkpf-mjahr,

budat LIKE mkpf-budat,

matnr LIKE mseg-matnr,

werks LIKE mseg-werks,

sobkz LIKE mseg-sobkz,

shkzg LIKE mseg-shkzg,

menge LIKE mseg-menge,

meins LIKE mseg-meins,

xauto LIKE mseg-xauto,

bustm LIKE mseg-bustm,

lgort LIKE mseg-lgort,

oiglcalc(01) TYPE c,

oiglsku(07) TYPE p DECIMALS 3,

insmk LIKE mseg-insmk,

retail(01) TYPE c, "n497992

bustw LIKE mseg-bustw,

zeile LIKE mseg-zeile,

kzvbr LIKE mseg-kzvbr ,

kzbew LIKE mseg-kzbew,

END OF stype_mseg_lean.

DATA: BEGIN OF sum_mat OCCURS 100,

werks LIKE mseg-werks,

matnr LIKE mseg-matnr,

shkzg LIKE mseg-shkzg,

menge(09) TYPE p DECIMALS 3,

END OF sum_mat.

TYPES: stab_mseg_lean TYPE STANDARD TABLE OF stype_mseg_lean.

DATA: BEGIN OF bestand OCCURS 100,

bwkey LIKE mbew-bwkey,

werks LIKE mseg-werks,

matnr LIKE mseg-matnr,

charg LIKE mseg-charg,

endmenge(09) TYPE p DECIMALS 3,

anfmenge(09) TYPE p DECIMALS 3,

meins LIKE mara-meins,

endwert(09) TYPE p DECIMALS 2,

anfwert(09) TYPE p DECIMALS 2,

soll(09) TYPE p DECIMALS 3,

haben(09) TYPE p DECIMALS 3,

sollwert(09) TYPE p DECIMALS 2,

habenwert(09) TYPE p DECIMALS 2,

waers LIKE t001-waers,

END OF bestand.

DATA: BEGIN OF imara OCCURS 100,

matnr LIKE mara-matnr,

meins LIKE mara-meins,

mtart LIKE mara-mtart,

END OF imara.

DATA: BEGIN OF it134m OCCURS 100,

bwkey LIKE t134m-bwkey,

mtart LIKE t134m-mtart,

mengu LIKE t134m-mengu,

wertu LIKE t134m-wertu,

END OF it134m.

DATA: g_t_mseg_lean TYPE stab_mseg_lean,

g_s_mseg_lean TYPE stype_mseg_lean,

werks LIKE mseg-werks,

aktdat LIKE sy-datlo,

l_f_bwkey LIKE t001k-bwkey.

RANGES: g_ra_lgort FOR mseg-lgort, "storage location

wrk_lgort FOR mseg-lgort,

g_ra_xauto FOR mseg-xauto,

g_ra_bwkey FOR t001k-bwkey, "valuation area

g_0000_ra_bwkey FOR t001k-bwkey .

DATA: BEGIN OF imard OCCURS 100,

werks TYPE mard-werks,

matnr TYPE mard-matnr,

lgort TYPE mard-lgort,

labst TYPE mard-labst,

umlme TYPE mard-umlme,

einme TYPE mard-einme,

speme TYPE mard-speme,

insme LIKE mard-insme,

retme TYPE mard-retme,

klabs TYPE mard-klabs,

lbkum TYPE mbew-lbkum,

salk3(09) TYPE p DECIMALS 2,

waers LIKE t001-waers,

END OF imard.

DATA: BEGIN OF mat_sum OCCURS 100,

bwkey LIKE mbew-bwkey,

werks LIKE mseg-werks,

matnr LIKE mseg-matnr,

shkzg LIKE mseg-shkzg,

menge(09) TYPE p DECIMALS 3,

dmbtr(09) TYPE p DECIMALS 3,

END OF mat_sum.

TYPES : BEGIN OF stype_mseg_xauto,

mblnr LIKE mseg-mblnr,

mjahr LIKE mseg-mjahr,

zeile LIKE mseg-zeile,

matnr LIKE mseg-matnr,

xauto LIKE mseg-xauto,

END OF stype_mseg_xauto,

stab_mseg_xauto TYPE STANDARD TABLE OF

stype_mseg_xauto

WITH DEFAULT KEY.

  • working area for the previous entry

DATA : g_s_mseg_pr TYPE stype_mseg_xauto,

  • table for the original MM doc posting lines

g_s_mseg_or TYPE stype_mseg_xauto,

g_t_mseg_or TYPE stab_mseg_xauto.

  • definition of working area for valuation tables improved

TYPES : BEGIN OF stype_mbew,

matnr LIKE mbew-matnr,

bwkey LIKE mbew-bwkey,

bwtar LIKE mbew-bwtar,

lbkum(09) TYPE p DECIMALS 3,

salk3(09) TYPE p DECIMALS 2,

meins LIKE mara-meins,

waers LIKE t001-waers,

END OF stype_mbew,

stab_mbew TYPE STANDARD TABLE OF

stype_mbew WITH DEFAULT KEY.

DATA: g_s_mbew TYPE stype_mbew,

g_t_mbew TYPE stab_mbew,

g_cust_tied_empties(01) TYPE c VALUE ' ',

g_flag_delete(01) TYPE c.

DATA : g_f_zeile LIKE mseg-zeile.

TYPES : BEGIN OF stype_organ,

keytype(01) TYPE c,

keyfield LIKE t001w-werks,

bwkey LIKE t001k-bwkey,

werks LIKE t001w-werks,

bukrs LIKE t001-bukrs,

waers LIKE t001-waers,

END OF stype_organ,

stab_organ TYPE STANDARD TABLE OF stype_organ

WITH KEY keytype keyfield bwkey werks.

DATA : g_s_organ TYPE stype_organ,

g_t_organ TYPE stab_organ

WITH HEADER LINE.

DATA: BEGIN OF mat_weg_buk OCCURS 100,

bwkey LIKE mbew-bwkey,

matnr LIKE mseg-matnr,

shkzg LIKE mseg-shkzg,

menge(09) TYPE p DECIMALS 3,

dmbtr(09) TYPE p DECIMALS 3,

END OF mat_weg_buk.

DATA: BEGIN OF it156w OCCURS 100,

bustw LIKE t156w-bustw,

xbgbb LIKE t156w-xbgbb,

END OF it156w.

DATA: BEGIN OF imsweg OCCURS 1000,

mblnr LIKE mseg-mblnr,

mjahr LIKE mseg-mjahr,

zeile LIKE mseg-zeile,

matnr LIKE mseg-matnr,

charg LIKE mseg-charg,

bwtar LIKE mseg-bwtar,

werks LIKE mseg-werks,

lgort LIKE mseg-lgort,

sobkz LIKE mseg-sobkz,

bwart LIKE mseg-bwart,

shkzg LIKE mseg-shkzg,

xauto LIKE mseg-xauto,

menge LIKE mseg-menge,

meins LIKE mseg-meins,

dmbtr LIKE mseg-dmbtr,

dmbum LIKE mseg-dmbum,

bustm LIKE mseg-bustm,

bustw LIKE mseg-bustw,

oiglcalc(01) TYPE c,

oiglsku(07) TYPE p DECIMALS 3,

insmk LIKE mseg-insmk,

END OF imsweg.

if wrk_matnr is initial or wrk_date is initial or wrk_werks is initial.

message s289(m7) RAISING MANDATORY .

endif.

***********************************************************************

  • change of storage location property depending up on the lgbst & bwbst.

  • lgbst = storage location / batch stock.

  • bwbst = valuated stock.

***********************************************************************

REFRESH g_ra_lgort.

CLEAR g_ra_lgort.

IF wrk_lgbst = 'X'. "only Storage loc./batch stock

MOVE wrk_lgort[] TO g_ra_lgort[].

MOVE : 'E' TO g_ra_lgort-sign,

'EQ' TO g_ra_lgort-option.

APPEND g_ra_lgort.

ELSEIF wrk_bwbst = 'X'. "only valuated stocks

  • copy the existing select-options

MOVE wrk_lgort[] TO g_ra_lgort[].

ENDIF.

*----


  • To find postings with valuation string, but without relevance for

  • the valuated stock.

  • Take lines from MSEG where for the combination BUSTW/XAUTO=XBGBB

  • there is an entry in T156W with key BSX.

*----


SELECT bustw xbgbb FROM t156w

INTO CORRESPONDING FIELDS OF TABLE it156w

WHERE vorsl = 'BSX'.

SORT it156w BY bustw xbgbb.

DELETE ADJACENT DUPLICATES FROM it156w.

DELETE it156w WHERE bustw = space.

IF wrk_lgbst = 'X'.

SELECT * FROM mard INTO CORRESPONDING FIELDS OF TABLE imard

WHERE matnr = wrk_matnr

AND werks = wrk_werks .

IF sy-subrc <> 0.

MESSAGE s289(m7).

ENDIF.

ELSEIF wrk_bwbst = 'X'.

  • define local working areas / for the result of the

  • database selections and the control break

DATA : l_t_mbew TYPE stab_mbew,

l_s_mbew TYPE stype_mbew,

l_s_mbew_split TYPE stype_mbew,

l_s_mbew_normal TYPE stype_mbew,

l_flag_split(01) TYPE c.

  • read the matching valuation entries

SELECT matnr bwkey bwtar lbkum salk3 FROM mbew

INTO CORRESPONDING FIELDS OF TABLE l_t_mbew

WHERE matnr = wrk_matnr

AND bwkey IN g_ra_bwkey .

IF sy-subrc NE 0.

MESSAGE s289(m7).

ENDIF.

  • read the matching valuation records of the valuated

  • special stock sales order

SELECT matnr bwkey bwtar

SUM( lbkum ) AS lbkum

SUM( salk3 ) AS salk3 FROM ebew

APPENDING CORRESPONDING FIELDS OF TABLE l_t_mbew

WHERE matnr = wrk_matnr

AND bwkey IN g_ra_bwkey

  • AND BWTAR IN BWTAR

GROUP BY matnr bwkey bwtar.

  • read the matching valuation records of the valuated

  • special stock projects

SELECT matnr bwkey bwtar

SUM( lbkum ) AS lbkum

SUM( salk3 ) AS salk3 FROM qbew

APPENDING CORRESPONDING FIELDS OF TABLE l_t_mbew

WHERE matnr = wrk_matnr

AND bwkey IN g_ra_bwkey

  • AND BWTAR IN BWTAR

GROUP BY matnr bwkey bwtar.

  • read the matching valuation records of the valuated

  • special subcontractor stock OBEW

SELECT matnr bwkey bwtar

SUM( lbkum ) AS lbkum

SUM( salk3 ) AS salk3 FROM obew

APPENDING CORRESPONDING FIELDS OF TABLE l_t_mbew

WHERE matnr = wrk_matnr

AND bwkey IN g_ra_bwkey

  • AND BWTAR IN BWTAR

GROUP BY matnr bwkey bwtar.

  • create table g_t_organ if it is still empty

IF g_t_organ[] IS INITIAL.

  • create working table G_0000_RA_BWKEY with the valuation areas

LOOP AT l_t_mbew INTO l_s_mbew.

ON CHANGE OF l_s_mbew-bwkey.

MOVE : l_s_mbew-bwkey

TO g_0000_ra_bwkey-low,

'I' TO g_0000_ra_bwkey-sign,

'EQ' TO g_0000_ra_bwkey-option.

COLLECT g_0000_ra_bwkey.

ENDON.

ENDLOOP.

ENDIF.

SORT l_t_mbew BY matnr bwkey.

LOOP AT l_t_mbew INTO l_s_mbew.

  • process a single entry / add the stock and value

IF l_s_mbew-bwtar IS INITIAL.

MOVE : l_s_mbew-matnr TO l_s_mbew_normal-matnr,

l_s_mbew-bwkey TO l_s_mbew_normal-bwkey.

ADD : l_s_mbew-lbkum TO l_s_mbew_normal-lbkum,

l_s_mbew-salk3 TO l_s_mbew_normal-salk3.

ELSE.

  • material has split valuation

MOVE : 'X' TO l_flag_split,

l_s_mbew-matnr TO l_s_mbew_split-matnr,

l_s_mbew-bwkey TO l_s_mbew_split-bwkey.

ADD : l_s_mbew-lbkum TO l_s_mbew_split-lbkum,

l_s_mbew-salk3 TO l_s_mbew_split-salk3.

ENDIF.

  • control break after material and valuation area

AT END OF bwkey.

  • create a entry for the next working table

IF l_flag_split = 'X'.

  • if the material has split valuation, take only

  • the sums from the entries with valuation type

MOVE-CORRESPONDING l_s_mbew_split TO g_s_mbew.

ELSE.

MOVE-CORRESPONDING l_s_mbew_normal TO g_s_mbew.

ENDIF.

ENDAT.

APPEND g_s_mbew TO g_t_mbew.

ENDLOOP.

ENDIF.

SELECT

mkpf~mblnr mkpf~mjahr mkpf~blart mkpf~budat mseg~matnr

mseg~menge mseg~shkzg mseg~lgort mseg~sobkz mseg~werks

mseg~xauto mseg~bustw mseg~bustm

INTO CORRESPONDING FIELDS OF TABLE g_t_mseg_lean

FROM mkpf AS mkpf JOIN mseg AS mseg

ON mkpf~mandt = mseg~mandt AND

mkpf~mblnr = mseg~mblnr AND

mkpf~mjahr = mseg~mjahr

WHERE mseg~matnr = wrk_matnr

AND mseg~werks = wrk_werks

AND mseg~lgort IN g_ra_lgort

AND mkpf~budat GE wrk_date.

  • IF sy-subrc <> 0.

    • no material documents found

  • MESSAGE s842(m7). " RAISING MANDATORY .

  • ENDIF.

*

IF wrk_bwbst = 'X'.

LOOP AT g_t_mseg_lean INTO g_s_mseg_lean

WHERE kzvbr <> space

AND ( kzbew = 'B' OR kzbew = 'F' ).

  • get the valuation area

MOVE g_s_mseg_lean-werks TO l_f_bwkey.

READ TABLE imara WITH KEY matnr = g_s_mseg_lean-matnr

BINARY SEARCH.

IF sy-subrc IS INITIAL.

READ TABLE it134m WITH KEY bwkey = l_f_bwkey

mtart = imara-mtart

BINARY SEARCH.

IF sy-subrc IS INITIAL.

IF NOT it134m-mengu IS INITIAL AND

NOT it134m-wertu IS INITIAL.

DELETE g_t_mseg_lean.

ENDIF.

ENDIF.

ELSE.

DELETE g_t_mseg_lean.

ENDIF.

ENDLOOP.

  • Eliminate material documents with valuation string, but without

  • relevance to the valuated stock.

LOOP AT g_t_mseg_lean INTO g_s_mseg_lean.

IF NOT g_cust_tied_empties IS INITIAL.

  • look for MM documents with xauto = L and change

  • indicators

CASE g_s_mseg_lean-xauto.

WHEN 'X'.

WHEN space.

WHEN OTHERS.

  • range table g_ra_xauto contains the special

  • indicators for the transfer movements of the

  • tied empties

IF g_s_mseg_lean-xauto IN g_ra_xauto.

MOVE g_s_mseg_lean-xauto

TO g_s_mseg_lean-retail.

CLEAR g_s_mseg_lean-xauto.

MODIFY g_t_mseg_lean FROM g_s_mseg_lean

TRANSPORTING xauto retail.

ENDIF.

ENDCASE.

ENDIF.

READ TABLE it156w WITH KEY

bustw = g_s_mseg_lean-bustw

xbgbb = g_s_mseg_lean-xauto

TRANSPORTING NO FIELDS

BINARY SEARCH.

IF sy-subrc <> 0.

DELETE g_t_mseg_lean.

ENDIF.

ENDLOOP.

ENDIF.

  • screening the dates which is greater than budat

aktdat = sy-datlo + 30.

IF NOT ( wrk_date IS INITIAL OR wrk_date > aktdat ).

LOOP AT g_t_mseg_lean INTO g_s_mseg_lean

WHERE budat > wrk_date.

MOVE-CORRESPONDING g_s_mseg_lean TO imsweg.

APPEND imsweg.

DELETE g_t_mseg_lean.

ENDLOOP.

ENDIF.

*storageLocation/batchstock is 'X'

IF wrk_lgbst IS NOT INITIAL.

SORT imsweg BY werks matnr shkzg.

LOOP AT imsweg.

IF ( imsweg-xauto IS INITIAL ) OR

( imsweg-bustm <> 'MA02' AND imsweg-bustm <> 'MA05' ).

MOVE-CORRESPONDING imsweg TO weg_mat.

COLLECT weg_mat.

ELSE.

DELETE imsweg.

ENDIF.

ENDLOOP.

*sumation of quantity based on 'S' and 'H' indicators for valuated

*stock

ELSEIF wrk_bwbst = 'X'.

SORT imsweg BY werks matnr shkzg.

LOOP AT imsweg.

IF g_flag_is_oil_active = 'X'.

IF ( imsweg-bustm <> 'MEU1' ) OR

( imsweg-bustm = 'MEU1'

AND NOT imsweg-oiglcalc IS INITIAL

AND NOT imsweg-oiglsku IS INITIAL ).

MOVE-CORRESPONDING imsweg TO mat_weg.

COLLECT mat_weg.

ELSE.

DELETE imsweg.

ENDIF.

ELSE.

MOVE-CORRESPONDING imsweg TO mat_weg.

COLLECT mat_weg.

ENDIF.

ENDLOOP.

LOOP AT mat_weg.

mat_weg-bwkey = mat_weg-werks.

MODIFY mat_weg.

ENDLOOP.

ENDIF.

*sumation of quantity based on 'S' and 'H' indicators for local/batch

*stock

IF wrk_lgbst IS NOT INITIAL.

SORT g_t_mseg_lean BY werks matnr shkzg DESCENDING.

LOOP AT g_t_mseg_lean INTO g_s_mseg_lean.

IF ( g_s_mseg_lean-xauto IS INITIAL ) OR

( g_s_mseg_lean-bustm <> 'MA02' AND

g_s_mseg_lean-bustm <> 'MA05' ).

MOVE-CORRESPONDING g_s_mseg_lean TO sum_mat.

COLLECT sum_mat.

ELSE.

DELETE g_t_mseg_lean.

ENDIF.

ENDLOOP.

*

ELSEIF wrk_bwbst = 'X'.

SORT g_t_mseg_lean BY werks matnr shkzg DESCENDING.

LOOP AT g_t_mseg_lean INTO g_s_mseg_lean.

IF g_flag_is_oil_active = 'X'.

IF ( g_s_mseg_lean-bustm <> 'MEU1' ) OR

( g_s_mseg_lean-bustm = 'MEU1'

AND NOT g_s_mseg_lean-oiglcalc IS INITIAL

AND NOT g_s_mseg_lean-oiglsku IS INITIAL ).

MOVE-CORRESPONDING g_s_mseg_lean

TO mat_sum.

COLLECT mat_sum.

ELSE.

DELETE g_t_mseg_lean.

ENDIF.

ELSE.

MOVE-CORRESPONDING g_s_mseg_lean

TO mat_sum.

COLLECT mat_sum.

ENDIF.

ENDLOOP.

LOOP AT mat_sum.

mat_sum-bwkey = mat_sum-werks.

MODIFY mat_sum.

ENDLOOP.

ENDIF.

*for valuated stock closing balance

IF wrk_bwbst = 'X'.

SORT mat_weg BY bwkey matnr shkzg.

SORT mat_weg_buk BY bwkey matnr shkzg.

LOOP AT g_t_mbew INTO g_s_mbew.

CLEAR: mat_weg, mat_weg_buk.

MOVE-CORRESPONDING g_s_mbew TO bestand.

READ TABLE mat_weg WITH KEY bwkey = g_s_mbew-bwkey

matnr = g_s_mbew-matnr

shkzg = 'S' BINARY SEARCH.

bestand-endmenge = g_s_mbew-lbkum - mat_weg-menge.

bestand-endwert = g_s_mbew-salk3 - mat_weg-dmbtr.

CLEAR: mat_weg, mat_weg_buk.

READ TABLE mat_weg WITH KEY bwkey = g_s_mbew-bwkey

matnr = g_s_mbew-matnr

shkzg = 'H' BINARY SEARCH.

bestand-endmenge = bestand-endmenge + mat_weg-menge.

bestand-endwert = bestand-endwert + mat_weg-dmbtr.

COLLECT bestand.

ENDLOOP.

FREE g_s_mbew.

*for location/batch stock closing balance

ELSEIF wrk_lgbst = 'X'.

LOOP AT imard.

CLEAR weg_mat-menge.

MOVE-CORRESPONDING imard TO bestand.

READ TABLE weg_mat WITH KEY werks = imard-werks

lgort = imard-lgort

matnr = imard-matnr

shkzg = 'S'.

bestand-endmenge = imard-labst + imard-insme + imard-speme

+ imard-einme + imard-retme

- weg_mat-menge.

CLEAR weg_mat-menge.

READ TABLE weg_mat WITH KEY werks = imard-werks

lgort = imard-lgort

matnr = imard-matnr

shkzg = 'H'.

bestand-endmenge = bestand-endmenge + weg_mat-menge.

COLLECT bestand.

ENDLOOP.

ENDIF.

*for valuated stock opening balance.

IF wrk_bwbst = 'X'.

SORT mat_sum BY bwkey matnr shkzg.

SORT mat_sum_buk BY bwkey matnr shkzg.

LOOP AT bestand.

CLEAR: mat_sum, mat_sum_buk.

READ TABLE mat_sum WITH KEY bwkey = bestand-bwkey

matnr = bestand-matnr

shkzg = 'S' BINARY SEARCH.

MOVE mat_sum-menge TO bestand-soll.

MOVE mat_sum-dmbtr TO bestand-sollwert.

CLEAR: mat_sum, mat_sum_buk.

READ TABLE mat_sum WITH KEY bwkey = bestand-bwkey

matnr = bestand-matnr

shkzg = 'H' BINARY SEARCH.

MOVE mat_sum-menge TO bestand-haben.

MOVE mat_sum-dmbtr TO bestand-habenwert.

bestand-anfmenge = bestand-endmenge - bestand-soll

+ bestand-haben.

bestand-anfwert = bestand-endwert - bestand-sollwert

+ bestand-habenwert.

MODIFY bestand.

ENDLOOP.

*for location/batch stock opening balance

ELSEIF wrk_lgbst = 'X'.

LOOP AT bestand.

CLEAR sum_mat-menge.

READ TABLE sum_mat WITH KEY werks = bestand-werks

matnr = bestand-matnr

shkzg = 'S'.

MOVE sum_mat-menge TO bestand-soll.

CLEAR sum_mat-menge.

READ TABLE sum_mat WITH KEY werks = bestand-werks

matnr = bestand-matnr

shkzg = 'H'.

MOVE sum_mat-menge TO bestand-haben.

bestand-anfmenge = bestand-endmenge - bestand-soll

+ bestand-haben.

MODIFY bestand.

ENDLOOP.

ENDIF.

  • exporting Opening,closing & receipt/issue values

endmenge = bestand-endmenge. " opening balance

anfmenge = bestand-anfmenge. " closing balance

soll = bestand-soll. " Receipt total

haben = bestand-haben. " Issue total

ENDFUNCTION.

Former Member
0 Kudos

Check the table"MBEWH"

narnei
Contributor
0 Kudos

Hi,

for this u can use mb51,mb5b

MB5B is report where we get stock as per posting

date. And from this report you can find out the

the data table

MARC Plant Data for Material

MARD Storage Location Data for Material

MKOL Special Stocks from Vendor

MSKU Special Stocks with Customer

MSLB Special Stocks with Vendor

MSPR Project Stock

Storage Location Data for Material stocks check in table MARD

If Batch Management is active for the materials then use table MCHB - Batch Stock

Regards,

NSR

Former Member
0 Kudos

Hi,

Use Below tables.

MARD --> Current Date Plant Stock

MARDH --> Year Wise Month Wise Plant Month Closing Stock.

MSEG & MKPF --> Use Current Month Material Movements.

Any Query Reply Back.....

Thanks,

Durai.V

Former Member
0 Kudos

i got some reply but my prblm is still there.

i want to make report in which user enter plant and year.And then for that plant all material opening and closing stock details are shown.and some additional inf regaring valuation class etc.

so if any one can tell me some logic regaring how should i go abt in finding or calulating the opening & closing stock of material(ex:period frm1-4-07-to 1-3--08).and what all tables used for it.then it will be great.

Edited by: shikha bhandula on Sep 17, 2008 6:15 PM

Former Member
0 Kudos

hello shikha,

I m also made the same report in development server & my requirement is that i want shade-wise closing stock & my report is ready in development server but the prob. is that when i transport to production server it doesn't show the correct output but in development its ok.

I m using the MARD table with LABST field to show the closing stock.

Thanks,

Sumit Aggarwal.

former_member188685
Active Contributor
0 Kudos

you can use the Report Transaction MMBE , why do you need another report...any thing specific you want to show..

Former Member
0 Kudos

Hello

MARD - Storage Location Data for Material

MCHB - Batch Stocks

MSPR - Project Stock

MBEW - Material Valuation

MSEG - Document Segment: Material

MKPF - Header: Material Document

Former Member
0 Kudos

i got some reply but my prblm is still there.

i want to make report in which user enter plant and year.And then for that plant all material opening and closing stock details are shown.and some additional inf regaring valuation class etc.

so if any one can tell me some logic regaring how should i go abt in finding or calulating the opening & closing stock of material(ex:period frm1-4-07-to 1-3--08).and what all tables used for it.then it will be great.

Firoz_Ashraf
Contributor
0 Kudos

Hi Shikha,

Try to use the following logic:

Step 1.Get all the material movements within the selected dates say D1 & D2.

Get all the records from MKPF & MSEG for the plant where BUDAT(posting date) lies within your date range (D1 & D2).

Step 2. Select the current availabe stock (as on today, say D3)

Select all the records from MARD.

 SELECT matnr sum( labst ) sum( insme ) FROM mard INTO TABLE i_mard

Step 3. Get the Closing stock on D2.

Get all the records from MKPF & MSEG for the plant where BUDAT(posting date) is GE D2 and LT D3. Get the net stock b/w these periods. Sum on MSEG-SHKZG (debit & credit). This will give you the net stock within D2 and D3.

Hence the closing stock on D2 will be

(Current stock calulated above in step no 2.) minus (the net stock calculated in step no 3.)

Step 4.Get the opening stock on D1.

(Closing stock on D2 calculated in step 3) minus (the net stock calculated in step no 1.)

All the best.

Regards,

Firoz.

Former Member
0 Kudos

still i am facing some problem when dealing with preious year opening & closing stock for all material for a given plant.Plant and any Previous year(like-1 april 2006- 31march 2007) are the user input.

can anyone send me the code for this.

thanks.

Former Member
0 Kudos

Hi Shika ,

are u cross check with MB5B ?

have a look at this sample code and check the logic.

https://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=15856

regards

Prabhu