cancel
Showing results for 
Search instead for 
Did you mean: 

stock calculation report in mm module

Former Member
0 Kudos

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

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi..

MB5B shall give the stock for a particular posting date/ dates.

From where are you calculating Opening and Closing stock?

Regards,

Karthik

Former Member
0 Kudos

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

Former Member
0 Kudos

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

Answers (1)

Answers (1)

Former Member
0 Kudos

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

former_member205763
Active Contributor
0 Kudos

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

former_member205763
Active Contributor
0 Kudos

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.

former_member205763
Active Contributor
0 Kudos

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

former_member205763
Active Contributor
0 Kudos

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.

Former Member
0 Kudos

Hi,

Thanks for your quick reply.my problem is solved.

Regards,

Harshada