on 08-02-2010 2:27 PM
Hi all,
I have developed report for stock calculation in mm module. my opening stock and closing stock is not matching with that of MB5B.can anyone provide the guidance into this as I have worked on mm reports.
Regards,
Harshada
Hi..
MB5B shall give the stock for a particular posting date/ dates.
From where are you calculating Opening and Closing stock?
Regards,
Karthik
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi ,
I am calculating opening stock from mbew-lbkum .receipt and Issue quantity I am reading from mseg-menge.
closing stock = opening stock + receipt stock - Issue stock.
can you provide more details about role of mseg-shkzg and mseg-bwart fields in calculating these stock values.
Thanks in advance.
Harshada
Hi..
MBEW-LBKUM shall provide you with the current stock for a plant and material while MB5B provides stocks on any back date as well. So if you are looking for current stocks then MBEW-LBKUM and MB5B's current stock will match, however if you try it for any date before the current date, it will always mismatch.
Regards,
Karthik
Hi,
Yes you are right I am checking current stock from MBEW-LBKUM.also I am using MSEG-MENGE for calculating opening stock, Receipt Quantity and Issue Quantity.Here propblem is while calculating closing stock.I am little confused with MSEG-SHKZG and MSEG-BWART field used in the program.
Thanks for quick response.
Harshada
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
u can implement this fm to get starting and ending stock same as MB%B
FUNCTION XXXXXX.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(I_MATNR) TYPE ANY OPTIONAL
*" VALUE(I_WERKS) TYPE ANY OPTIONAL
*" VALUE(I_LGORT) TYPE ANY OPTIONAL
*" VALUE(I_CHARG) TYPE ANY OPTIONAL
*" VALUE(I_BWTAR) TYPE ANY OPTIONAL
*" VALUE(I_BWART) TYPE ANY OPTIONAL
*" VALUE(I_BUDAT) TYPE ANY OPTIONAL
*" VALUE(I_SOBKZ) TYPE ANY OPTIONAL
*" EXPORTING
*" VALUE(S_MENGE) TYPE MENGE_D
*" VALUE(E_MENGE) TYPE MENGE_D
*"----------------------------------------------------------------------
** Fill Ranges
* MOVE : 'E' TO I_LGORT-SIGN,
* 'EQ' TO I_LGORT-OPTION.
* APPEND I_LGORT.
*
* MOVE : 'I' TO I_SOBKZ-SIGN,
* 'EQ' TO I_SOBKZ-OPTION.
* APPEND I_SOBKZ.
*DATA: s_budat TYPE selopt.
IF I_BUDAT IS NOT INITIAL.
append I_BUDAT to r_budat.
ENDIF.
IF I_WERKS IS NOT INITIAL.
append I_WERKS to r_werks.
ENDIF.
IF I_MATNR IS NOT INITIAL.
append I_MATNR to r_matnr.
ENDIF.
IF I_LGORT IS NOT INITIAL.
append I_LGORT to r_lgort.
ELSE.
MOVE : 'E' TO r_lgort-SIGN,
'EQ' TO r_lgort-OPTION.
APPEND r_lgort.
ENDIF.
IF I_CHARG IS NOT INITIAL.
append I_CHARG to r_charg.
ENDIF.
IF I_BWTAR IS NOT INITIAL.
append I_BWTAR to r_bwtar.
ENDIF.
IF I_BWART IS NOT INITIAL.
append I_BWART to r_bwart.
ENDIF.
IF I_SOBKZ IS NOT INITIAL.
append I_SOBKZ to r_sobkz.
ELSE.
MOVE : 'I' TO r_sobkz-SIGN,
'EQ' TO r_sobkz-OPTION.
APPEND r_sobkz.
ENDIF.
SELECT * FROM MARD
iNTO CORRESPONDING FIELDS OF TABLE imard
WHERE WERKS IN r_werks
AND matnr IN r_matnr.
read table r_budat index 1.
IF r_budat-low IS INITIAL.
r_budat-low = '00000101'.
IF r_budat-high IS INITIAL.
r_budat-high = '99991231'.
ENDIF.
ELSE.
IF r_budat-high IS INITIAL.
r_budat-high = r_budat-low.
ENDIF.
ENDIF.
* Fetch data from MSEG and MKPF
SELECT MKPF~BLART
MKPF~BUDAT
MKPF~CPUDT
MKPF~CPUTM
MKPF~MBLNR
MKPF~MJAHR
MKPF~USNAM
MKPF~VGART
MKPF~XABLN
MSEG~BUSTM
MSEG~BUSTW
MSEG~BWART
MSEG~BWTAR
MSEG~CHARG
MSEG~DMBTR
MSEG~DMBUM
MSEG~INSMK
MSEG~KZBEW
MSEG~KZBWS
MSEG~KZVBR
MSEG~KZZUG
MSEG~LGORT
MSEG~MATNR
MSEG~MEINS
MSEG~MENGE
MSEG~MENGU
MSEG~SHKZG
MSEG~SJAHR
MSEG~SMBLN
MSEG~SMBLP
MSEG~SOBKZ
MSEG~WAERS
MSEG~WERKS
MSEG~WERTU
MSEG~XAUTO
MSEG~ZEILE
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 IN r_MATNR
AND MSEG~WERKS IN r_WERKS
AND MSEG~LGORT IN r_LGORT
AND MSEG~CHARG IN r_CHARG
AND MSEG~BWTAR IN r_BWTAR
AND MSEG~BWART IN r_BWART
AND MKPF~BUDAT GE R_BUDAT-LOW
AND MSEG~SOBKZ IN r_SOBKZ
%_HINTS
DB2 '&SUBSTITUTE VALUES&'
ORACLE '&SUBSTITUTE VALUES&'.
aktdat = sy-datlo + 30.
IF NOT ( r_budat-high IS INITIAL OR r_budat-high > aktdat ).
LOOP AT G_T_MSEG_LEAN INTO G_S_MSEG_LEAN
WHERE BUDAT > r_budat-HIGH.
MOVE-CORRESPONDING G_S_MSEG_LEAN TO IMSWEG.
APPEND IMSWEG.
DELETE G_T_MSEG_LEAN.
ENDLOOP.
ENDIF.
DESCRIBE TABLE imsweg LINES index_2.
IF NOT index_2 IS 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.
ENDIF.
SORT G_T_MSEG_LEAN BY WERKS MATNR SHKZG DESCENDING.
to be continued
Edited by: Kartik Tarla on Aug 5, 2010 7:04 PM
continued
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.
LOOP AT imard.
CLEAR weg_mat-menge.
MOVE-CORRESPONDING imard TO bestand.
READ TABLE weg_mat WITH KEY werks = imard-werks
lgort = imard-lgort " P30K140665
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 " P30K140665
matnr = imard-matnr
shkzg = 'H'.
bestand-endmenge = bestand-endmenge + weg_mat-menge.
COLLECT bestand.
ENDLOOP.
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.
READ TABLE bestand INDEX 1.
S_MENGE = bestand-anfmenge.
E_MENGE = bestand-ENDMENGE.
ENDFUNCTION.
declarations:
* Structure type Declarations
TYPES : BEGIN OF STYPE_MSEG_LEAN,
MBLNR LIKE MKPF-MBLNR,
MJAHR LIKE MKPF-MJAHR,
VGART LIKE MKPF-VGART,
BLART LIKE MKPF-BLART,
BUDAT LIKE MKPF-BUDAT,
CPUDT LIKE MKPF-CPUDT,
CPUTM LIKE MKPF-CPUTM,
USNAM LIKE MKPF-USNAM,
XABLN LIKE MKPF-XABLN,
LBBSA LIKE T156M-LBBSA,
BWAGR LIKE T156S-BWAGR,
BUKRS LIKE T001-BUKRS,
BELNR LIKE BKPF-BELNR,
GJAHR LIKE BKPF-GJAHR,
WAERS LIKE MSEG-WAERS,
ZEILE LIKE MSEG-ZEILE,
BWART LIKE MSEG-BWART,
MATNR LIKE MSEG-MATNR,
WERKS LIKE MSEG-WERKS,
LGORT LIKE MSEG-LGORT,
CHARG LIKE MSEG-CHARG,
BWTAR LIKE MSEG-BWTAR,
KZVBR LIKE MSEG-KZVBR,
KZBEW LIKE MSEG-KZBEW,
SOBKZ LIKE MSEG-SOBKZ,
KZZUG LIKE MSEG-KZZUG,
BUSTM LIKE MSEG-BUSTM,
BUSTW LIKE MSEG-BUSTW,
MENGU LIKE MSEG-MENGU,
WERTU LIKE MSEG-WERTU,
SHKZG LIKE MSEG-SHKZG,
MENGE LIKE MSEG-MENGE,
MEINS LIKE MSEG-MEINS,
DMBTR LIKE MSEG-DMBTR,
DMBUM LIKE MSEG-DMBUM,
XAUTO LIKE MSEG-XAUTO,
KZBWS LIKE MSEG-KZBWS,
retail(01) type c,
oiglcalc(01) type c,
oiglsku(07) type p decimals 3,
insmk like mseg-insmk,
* the following fields are used for the selection of
* the reversal movements
SMBLN LIKE MSEG-SMBLN, " No. doc
SJAHR LIKE MSEG-SJAHR, " Year
SMBLP LIKE MSEG-SMBLP. " Item in doc
TYPES : END OF STYPE_MSEG_LEAN.
TYPES: STAB_MSEG_LEAN TYPE STANDARD TABLE OF STYPE_MSEG_LEAN
WITH KEY MBLNR MJAHR.
* Data Declarations
DATA : G_S_MSEG_LEAN TYPE STYPE_MSEG_LEAN,
G_S_MSEG_UPDATE TYPE STYPE_MSEG_LEAN,
G_T_MSEG_LEAN TYPE STAB_MSEG_LEAN,
AKTDAT LIKE SY-DATLO,
INDEX_2 LIKE SY-TABIX.
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.
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.
Edited by: Kartik Tarla on Aug 5, 2010 7:06 PM
declarations continued
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: BEGIN OF IMARD OCCURS 100,
WERKS LIKE MARD-WERKS,
MATNR LIKE MARD-MATNR,
LGORT LIKE MARD-LGORT,
LABST LIKE MARD-LABST,
UMLME LIKE MARD-UMLME,
INSME LIKE MARD-INSME,
EINME LIKE MARD-EINME,
SPEME LIKE MARD-SPEME,
RETME LIKE MARD-RETME,
KLABS LIKE MARD-KLABS,
LBKUM LIKE MBEW-LBKUM,
SALK3(09) TYPE P DECIMALS 2,
WAERS LIKE T001-WAERS,
END OF IMARD.
DATA: BEGIN OF BESTAND OCCURS 100,
BWKEY LIKE MBEW-BWKEY,
WERKS LIKE MSEG-WERKS,
MATNR LIKE MSEG-MATNR,
CHARG LIKE MSEG-CHARG,
*(DEL) endmenge like mard-labst,
ENDMENGE(09) TYPE P DECIMALS 3,
*(DEL) anfmenge like mard-labst,
ANFMENGE(09) TYPE P DECIMALS 3,
MEINS LIKE MARA-MEINS,
* values at date-low and date-high
endwert(09) TYPE P DECIMALS 2,
anfwert(09) TYPE P DECIMALS 2,
*(DEL) soll like mseg-menge,
SOLL(09) TYPE P DECIMALS 3,
*(DEL) haben like mseg-menge,
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.
* Declaring ranges
ranges : g_ra_sobkz for mseg-sobkz, "special st. ind.
g_ra_lgort for mseg-lgort. "storage location
ranges: r_matnr for mseg-matnr,
r_werks for mseg-werks,
r_lgort for mseg-lgort,
r_charg for mseg-charg,
r_bwtar for mseg-bwtar,
r_bwart for mseg-bwart,
r_budat for mkpf-budat,
r_sobkz for mseg-sobkz.
User | Count |
---|---|
86 | |
10 | |
10 | |
10 | |
7 | |
6 | |
6 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.