Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ABAP Report

Former Member
0 Likes
2,082

hi experts,

i need ur help

can someone help in writing out vthe code for this

1. Sum the Goods receipt quantity in order unit (MSEG-BSTMG) for all of the following Movement types (MSEG-BWART):

200 through 292

551 through 556

701 through 718

Check the Debit/Credit Indicator (MSEG-SHKZG). Add MSEG-BSTMG if MSEG-SHKZG = ‘S’. Subtract MSEG-BSTMG if MSEG-SHKZG = ‘H’.

2. Quantity Remaining = Goods Receipt Quantity (8.) – value calculated in Step 1.

Quantity will be displayed with 2 decimal places.

regards

VC

hi experts,

i need ur help

can someone help in writing out vthe code for this

1. Sum the Goods receipt quantity in order unit (MSEG-BSTMG) for all of the following Movement types (MSEG-BWART):

200 through 292

551 through 556

701 through 718

Check the Debit/Credit Indicator (MSEG-SHKZG). Add MSEG-BSTMG if MSEG-SHKZG = ‘S’. Subtract MSEG-BSTMG if MSEG-SHKZG = ‘H’.

2. Quantity Remaining = Goods Receipt Quantity (8.) – value calculated in Step 1.

Quantity will be displayed with 2 decimal places.

regards

VC

6 REPLIES 6
Read only

Former Member
0 Likes
1,787

hi experts,

i need ur help

can someone help in writing out vthe code for this

1. Sum the Goods receipt quantity in order unit (MSEG-BSTMG) for all of the following Movement types (MSEG-BWART):

200 through 292

551 through 556

701 through 718

Check the Debit/Credit Indicator (MSEG-SHKZG). Add MSEG-BSTMG if MSEG-SHKZG = ‘S’. Subtract MSEG-BSTMG if MSEG-SHKZG = ‘H’.

quantity should be displayed in 2 decimals

regards

vc

Read only

Former Member
0 Likes
1,787

assuming that you have all the records from msegin it_mseg.

r_bwart-sign = 'I'.

r_bwart-option = 'BT'.

r_bwart-low = '200'.

r_bwart-high = '292'.

append r_bwart.

clear r_bwart.

r_bwart-sign = 'I'.

r_bwart-option = 'BT'.

r_bwart-low = '551'.

r_bwart-high = '556'.

append r_bwart.

clear r_bwart.

r_bwart-sign = 'I'.

r_bwart-option = 'BT'.

r_bwart-low = '701'.

r_bwart-high = '718'.

append r_bwart.

clear r_bwart.

loop at it_mseg.

at new belnr.

loop at it_mseg where bwart in r_bwart.

  • Change the sign of the quantity for debit

IF IT_MSEG-SHKZG = 'H'.

IT_EKBE-MENGE = -1 * IT_EKBE-MENGE.

ENDIF.

V_BPMNG = V_BPMNG + IT_EKBE-MENGE.

endloop.

Qty_rem = it_mseg-BSTMG - v_bpmng.

write:/ qty_rem

endat.

endloop.

Regards,

ravi

Read only

Former Member
0 Likes
1,787

Hi

Earlier I had written a code for getting opening stock based on material and batch.

See if you find it useful...

Regards,

Raj

REPORT ZMMTISCOSTOCK_ALV

LINE-SIZE 255

NO STANDARD PAGE HEADING

MESSAGE-ID S1.

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

  • Program name: ZMMTISCOSTOCK_ALV *

  • *

  • Description: RECEIPTS/ISSUES WITH OPENING BAL.AND CL.BAL. *

  • *

  • Date/Author: 02.07.2004 / Rajasekhar (Intelligroup) *

  • *

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

  • M O D I F I C A T I O N L O G

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

  • Date Programmer Request # Description

  • dd/mm/yyyy xxxxxxxxxxxxxx nnnnn New Program

*

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

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

  • T A B L E S

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

TABLES : MSEG,MKPF,MARA,MAKT,BEWART,MSLB.

TYPE-POOLS : SLIS.

TYPES : BEGIN OF ST_OPBAL,

MATNR LIKE MSEG-MATNR,

MAKTX LIKE MAKT-MAKTX,

BATCH LIKE MSEG-CHARG,

BWART LIKE MSEG-BWART,

MENGE LIKE MSEG-MENGE,

ZEILE LIKE MSEG-ZEILE,

WERKS LIKE MSEG-WERKS,

SOBKZ LIKE MSEG-SOBKZ,

BUDAT LIKE MKPF-BUDAT,

MTART LIKE MARA-MTART,

SHKZG LIKE MSEG-SHKZG,

DMBTR LIKE MSEG-DMBTR,

MBLNR LIKE MSEG-MBLNR,

LGORT LIKE MSEG-LGORT,

END OF ST_OPBAL.

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

  • I N T E R N A L T A B L E S

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

DATA : IT_FLDCAT TYPE SLIS_T_FIELDCAT_ALV,

IT_LIST_HEADER TYPE SLIS_T_LISTHEADER,

IT_EVENTS TYPE SLIS_T_EVENT,

GS_LAYOUT TYPE SLIS_LAYOUT_ALV.

DATA: BEGIN OF G_T_MSEG_LEAN OCCURS 0,

MBLNR LIKE MKPF-MBLNR,

MJAHR LIKE MKPF-MJAHR,

BLART LIKE MKPF-BLART,

BUDAT LIKE MKPF-BUDAT,

CPUDT LIKE MKPF-CPUDT,

MATNR LIKE MSEG-MATNR,

WERKS LIKE MSEG-WERKS,

LGORT LIKE MSEG-LGORT,

CHARG LIKE MSEG-CHARG,

SHKZG LIKE MSEG-SHKZG,

MENGE LIKE MSEG-MENGE,

END OF G_T_MSEG_LEAN .

DATA : OPBAL TYPE ST_OPBAL OCCURS 0 WITH HEADER LINE,

TMP_OPBAL TYPE ST_OPBAL OCCURS 0 WITH HEADER LINE.

DATA : BEGIN OF OPBAL2 OCCURS 0,

SNO(9) TYPE N, " Serial #

MATNR LIKE MSEG-MATNR, " Material #

MAKTX LIKE MAKT-MAKTX, " Material Desc

OP_BAL LIKE MSEG-MENGE, " Opening Balance

OP_BAL_YR LIKE MSEG-MENGE, " Opening Balance Yr

REC LIKE MSEG-MENGE, " Receipts

REC_PLN LIKE MSEG-MENGE, " Receipts Planned

REC_YR LIKE MSEG-MENGE, " Receipts Yr

T_OPBAL_REC LIKE MSEG-MENGE, " Total Stock

ISS LIKE MSEG-MENGE, " Issues

ISS_PLN LIKE MSEG-MENGE, " Issues Planned

ISS_YR LIKE MSEG-MENGE, " Issues Yr

CL_BAL LIKE MSEG-MENGE, " Closing Balance

CL_BAL_YR LIKE MSEG-MENGE, " Closing Balance Yr

BATCH LIKE MSEG-CHARG, " Batch

SUBCON LIKE MSEG-MENGE,

END OF OPBAL2.

DATA: BEGIN OF IMARD OCCURS 100, "aktueller Materialbestand

WERKS LIKE MARD-WERKS, "Werk

MATNR LIKE MARD-MATNR, "Material

LGORT LIKE MARD-LGORT, "Lagerort

LABST LIKE MARD-LABST, "frei verwendbarer Bestand

UMLME LIKE MARD-UMLME, "Umlagerungsbestand

INSME LIKE MARD-INSME, "Qualitätsprüfbestand

EINME LIKE MARD-EINME, "nicht frei verwendbarer Bestand

SPEME LIKE MARD-SPEME, "gesperrter Bestand

RETME LIKE MARD-RETME, "gesperrter Bestand

KLABS LIKE MARD-KLABS, "frei verw. Konsignationsbestand

LBKUM LIKE MBEW-LBKUM, "bewerteter Bestand

SALK3(09) TYPE P DECIMALS 2, "n497992

WAERS LIKE T001-WAERS, "Währungseinheit

END OF IMARD.

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

  • R A N G E S

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

RANGES: R_DATE FOR MKPF-BUDAT. " Date Range for Year

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

  • G L O B A L V A R I A B L E S

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

DATA: FST_OF_MNTH LIKE SY-DATUM, " First of Month

FST_OF_YEAR LIKE SY-DATUM. " First of April

DATA: FLG_AFTER. " Flg for High after April 1st

DATA SERNO(9) TYPE C.

DATA OPTOT TYPE P DECIMALS 3.

DATA RECBAL TYPE P DECIMALS 3.

DATA RECTOT TYPE P DECIMALS 3.

DATA RECTOT_YR TYPE P DECIMALS 3.

DATA ISSBAL TYPE P DECIMALS 3.

DATA ISSTOT TYPE P DECIMALS 3.

DATA ISSTOT_YR TYPE P DECIMALS 3.

DATA TOTALL TYPE P DECIMALS 3.

DATA TOTAL_YR TYPE P DECIMALS 3.

DATA OPTOTALL TYPE P DECIMALS 3.

DATA RECTOTALL TYPE P DECIMALS 3. "'Receipts(101/102)'

DATA ISSTOTALL TYPE P DECIMALS 3." 'Issues(261/262)',

*- DATA TOTALL

DATA TOT_RECBAL TYPE P DECIMALS 3.

DATA TOT_ISSBAL TYPE P DECIMALS 3.

DATA FLG TYPE N.

DATA FLAG TYPE N.

DATA STOCKVAL TYPE MSEG-DMBTR.

DATA REC_STOCKVAL TYPE MSEG-DMBTR.

DATA ISS_STOCKVAL TYPE MSEG-DMBTR.

DATA STOCKVALALL TYPE MSEG-DMBTR.

DATA REC_STOCKVALALL TYPE MSEG-DMBTR.

DATA ISS_STOCKVALALL TYPE MSEG-DMBTR.

DATA CL_STKVAL TYPE MSEG-DMBTR.

DATA : CL_STKVALALL TYPE MSEG-DMBTR,

REPID LIKE SY-REPID,

FRM_DATE(10),TO_DATE(10),

DISPTEXT(255),DISPTEXT2(255).

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

  • S E L E C T I O N S C R E E N

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

SELECTION-SCREEN BEGIN OF BLOCK X WITH FRAME TITLE TEXT-007.

SELECT-OPTIONS: P_MATNR FOR MSEG-MATNR, " Material

P_MGRP FOR MARA-MATKL, " Material Grp

P_DATE FOR MKPF-BUDAT, " Date

P_PLANT FOR MSEG-WERKS " Plant

DEFAULT 'NB01'

OBLIGATORY NO INTERVALS

NO-EXTENSION .

SELECTION-SCREEN END OF BLOCK X.

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

  • I N I T I A L I Z A T I O N

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

INITIALIZATION.

REPID = SY-REPID.

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

  • A T S E L E C T I O N-S C R E E N V A L I D A T I O N S

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

AT SELECTION-SCREEN.

IF P_DATE-LOW IS INITIAL OR P_DATE-HIGH IS INITIAL.

MESSAGE E902.

ENDIF.

AUTHORITY-CHECK OBJECT 'Z_WERKS_PL'

ID 'WERKS' FIELD P_PLANT-LOW.

IF SY-SUBRC NE 0.

MESSAGE E000(ZT) WITH

'You are not authorised to use this Plant'(006).

ENDIF.

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

  • S T A R T - O F - S E L E C T I O N

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

START-OF-SELECTION.

*- Get data

PERFORM GET_DATA.

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

  • E N D - O F - S E L E C T I O N

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

END-OF-SELECTION.

*- Display the Results

PERFORM WRITE_REPORT.

*&----


*

*& Form FILL_FLDCAT

*&----


*

  • Populate ALV Header

*----


*

FORM FILL_FLDCAT USING P_FLDCAT TYPE SLIS_T_FIELDCAT_ALV.

PERFORM FILL_PARAM_FLDCAT USING 1 'Sl.no' 'SNO'

' ' 'X' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 2 'MATERIAL No.' 'MATNR'

' ' 'X' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 3 'Batch' 'BATCH'

' ' 'X' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 4 'OP.Stock' 'OP_BAL'

' ' ' ' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 5 'OP.Stock(Yr)' 'OP_BAL_YR'

' ' ' ' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 6 'Rcpts. Plan' 'REC_PLN'

' ' ' ' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 7 'Rcpts.' 'REC'

' ' ' ' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 8 'Rcpts.(Yr)' 'REC_YR'

' ' ' ' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 9 'Iss. Plan' 'ISS_PLN'

' ' ' ' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 10 'Issues' 'ISS'

' ' ' ' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 11 'Iss. (Yr)' 'ISS_YR'

' ' ' ' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 12 'Closing Stock.' 'CL_BAL'

' ' ' ' 'OPBAL2' P_FLDCAT.

PERFORM FILL_PARAM_FLDCAT USING 13 'Closing Stk. (Yr)' 'CL_BAL_YR'

' ' ' ' 'OPBAL2' P_FLDCAT.

ENDFORM. "FILL_FLDCAT

*&----


*

*& Form FILL_PARAM_FLDCAT

*&----


*

  • FILL PARAM FIELDCATALOG

*----


*

FORM FILL_PARAM_FLDCAT USING VALUE(P_COL) VALUE(P_TEXT) VALUE(P_FLDNAME)

VALUE(P_DOSUM) VALUE(P_ZERO)

VALUE(P_TABNAME)

PP_FLDCAT TYPE SLIS_T_FIELDCAT_ALV.

DATA : WA_FLDCAT TYPE SLIS_FIELDCAT_ALV.

CLEAR WA_FLDCAT.

WA_FLDCAT-COL_POS = P_COL.

WA_FLDCAT-SELTEXT_M = P_TEXT.

WA_FLDCAT-FIELDNAME = P_FLDNAME.

WA_FLDCAT-TABNAME = P_TABNAME.

WA_FLDCAT-DO_SUM = P_DOSUM.

WA_FLDCAT-NO_ZERO = P_ZERO.

APPEND WA_FLDCAT TO PP_FLDCAT.

ENDFORM. "FILL_PARAM_FLDCAT

*&----


*

*& Form FILL_HEADER

*&----


*

  • Fill Header

*----


*

FORM FILL_HEADER USING P_IT_LIST_HEADER TYPE SLIS_T_LISTHEADER.

DATA: LS_LINE TYPE SLIS_LISTHEADER.

CLEAR LS_LINE.

LS_LINE-TYP = 'S'.

IF P_PLANT-LOW EQ 'NB01' OR P_PLANT-LOW EQ 'NB02'.

LS_LINE-INFO = TEXT-002.

ELSEIF P_PLANT-LOW EQ 'NB11' OR P_PLANT-LOW EQ 'NB12'.

LS_LINE-INFO = TEXT-005.

ENDIF.

APPEND LS_LINE TO P_IT_LIST_HEADER.

*- Build Date Range Text

CONCATENATE P_DATE-LOW6(2) '.' P_DATE-LOW4(2) '.'

P_DATE-LOW+0(4) INTO FRM_DATE.

CONCATENATE P_DATE-HIGH6(2) '.' P_DATE-HIGH4(2) '.'

P_DATE-HIGH+0(4) INTO TO_DATE.

CONCATENATE TEXT-003 FRM_DATE ' To ' TO_DATE

INTO DISPTEXT SEPARATED BY SPACE.

*- Build Plant Text

CONCATENATE TEXT-004 P_PLANT-LOW

INTO DISPTEXT2 SEPARATED BY SPACE.

CLEAR LS_LINE.

LS_LINE-TYP = 'S'.

LS_LINE-INFO = DISPTEXT.

APPEND LS_LINE TO P_IT_LIST_HEADER.

CLEAR LS_LINE.

LS_LINE-TYP = 'S'.

LS_LINE-INFO = DISPTEXT2.

APPEND LS_LINE TO P_IT_LIST_HEADER.

ENDFORM. "FILL_HEADER

*&----


*

*& Form FILL_EVENTS

*&----


*

  • text

*----


*

  • -->P_IT_EVENTStext

*----


*

FORM FILL_EVENTS USING P_IT_EVENTS TYPE SLIS_T_EVENT.

DATA LS_EVENT TYPE SLIS_ALV_EVENT.

MOVE 'TOP_OF_PAGE' TO LS_EVENT-FORM.

MOVE 'TOP_OF_PAGE' TO LS_EVENT-NAME.

APPEND LS_EVENT TO P_IT_EVENTS.

ENDFORM. "FILL_EVENTS

*&----


*

*& Form TOP_OF_PAGE

*&----


*

  • TOP - OF - PAGE

*----


*

FORM TOP_OF_PAGE.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

IT_LIST_COMMENTARY = IT_LIST_HEADER.

ENDFORM. "TOP_OF_PAGE

*&----


*

*& Form FILL_LAYOUT

*&----


*

  • Fill Layout

*----


*

FORM FILL_LAYOUT USING P_GS_LAYOUT TYPE SLIS_LAYOUT_ALV.

P_GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.

P_GS_LAYOUT-ZEBRA = 'X'.

P_GS_LAYOUT-FLEXIBLE_KEY = 'X'.

ENDFORM. "FILL_LAYOUT

*&----


*

*& Form GET_DATA

*&----


*

  • Get data

*----


*

FORM GET_DATA .

DATA: OPEN_STOCK LIKE BSIM-MENGE,

L_YEAR(4),

L_MONTH(2),

L_DATE LIKE BSIM-BUDAT,

L_STOCK LIKE BSIM-DMBTR,

L_PLANT LIKE T001W-WERKS.

DATA: SHKZG TYPE MSEG-SHKZG,

LQ TYPE QALS-LOSMENGE,

DQ TYPE LIPS-LFIMG,

DLQ TYPE QALS-LOSMENGE,

UNIT TYPE QALS-MENGENEINH.

*- Get dates: First of that month and

*- April 1st of Fiscal Year

*- First of that month

CONCATENATE P_DATE-LOW+0(4)

P_DATE-LOW+4(2)

'01' INTO FST_OF_MNTH.

*- First of April of that Year

L_YEAR = P_DATE-LOW+0(4).

L_MONTH = P_DATE-LOW+4(2).

*- If month is < 4 (April) then year is less by 1

IF L_MONTH < 4.

L_YEAR = L_YEAR - 1.

ELSE. " year is the same

ENDIF.

CONCATENATE L_YEAR

'04' " April

'01' INTO FST_OF_YEAR.

*- Build Date Range for Year if P_DATE-HIGH is after

*- April 1st of the same year

IF FST_OF_YEAR < P_DATE-HIGH.

*- Set Flag

FLG_AFTER = 'X'.

*- Build Range with Date Range

R_DATE-LOW = FST_OF_YEAR.

R_DATE-HIGH = P_DATE-HIGH.

R_DATE-OPTION = 'BT'.

R_DATE-SIGN = 'I'.

APPEND R_DATE.

CLEAR R_DATE.

ENDIF.

SELECT A~MATNR

F~MAKTX

A~CHARG

A~BWART

A~MENGE

A~ZEILE

A~WERKS

A~SOBKZ

D~BUDAT

E~MTART

A~SHKZG

A~DMBTR

A~MBLNR

A~LGORT

INTO TABLE OPBAL

FROM MKPF AS D JOIN MSEG AS A

ON DMBLNR = AMBLNR AND

DMJAHR = AMJAHR

JOIN MARA AS E

ON EMATNR = AMATNR

JOIN MAKT AS F

ON FMATNR = AMATNR

WHERE A~MATNR IN P_MATNR

AND A~WERKS IN P_PLANT

AND A~KZBEW IN (' ','B')

AND E~MATKL IN P_MGRP

AND A~BWART NOT IN ('541','542','321','322','121')

AND A~KZVBR NOT IN ('A')

AND D~BUDAT LE P_DATE-HIGH.

LOOP AT OPBAL WHERE BWART EQ '544' AND LGORT EQ ''.

TMP_OPBAL = OPBAL.

APPEND TMP_OPBAL.

ENDLOOP.

DELETE OPBAL WHERE ( BWART EQ '309' AND DMBTR EQ 0 ).

DELETE OPBAL WHERE ( BWART NE '543' AND LGORT EQ '' ).

LOOP AT TMP_OPBAL.

OPBAL = TMP_OPBAL.

APPEND OPBAL.

ENDLOOP.

STOCKVAL = 0.

IF NOT OPBAL[] IS INITIAL.

SORT OPBAL BY MATNR BATCH BUDAT.

ELSE.

MESSAGE I005(ZT).

STOP.

ENDIF.

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

LOOP AT OPBAL.

SELECT SINGLE LBLAB INTO MSLB-LBLAB FROM MSLB

WHERE MATNR = OPBAL-MATNR.

                        • For the duration II part *****************

IF OPBAL-BUDAT IN P_DATE.

IF OPBAL-SHKZG = 'H'.

ISSTOT = ISSTOT + OPBAL-MENGE.

ELSEIF OPBAL-SHKZG = 'S'.

RECTOT = RECTOT + OPBAL-MENGE.

ENDIF.

ENDIF.

*- For calculating the Year Receipts/Issues when flag is set

IF FLG_AFTER = 'X'.

IF OPBAL-BUDAT IN R_DATE.

IF OPBAL-SHKZG = 'H'.

ISSTOT_YR = ISSTOT_YR + OPBAL-MENGE.

ELSEIF OPBAL-SHKZG = 'S'.

RECTOT_YR = RECTOT_YR + OPBAL-MENGE.

ENDIF.

ENDIF.

ENDIF.

AT END OF BATCH. " modified for chek

*- Get opening Stocks for the Material based on

*- 1st of the Month and 1st of April of that year

*- For 1st of that month

  • CLEAR OPEN_STOCK.

  • L_PLANT = P_PLANT-LOW.

*

  • L_DATE = FST_OF_MNTH.

*

  • CALL FUNCTION 'ZMM_OPBAL_QTY_BASED_KEYDATE'

  • EXPORTING

  • I_MATNR = OPBAL-MATNR

  • I_PLANT = L_PLANT

  • I_KEYDT = L_DATE

  • IMPORTING

  • E_STK_OPBAL = OPEN_STOCK

    • E_STK_VAL =

  • .

*

  • IF SY-SUBRC = 0.

  • OPTOT = OPEN_STOCK.

  • ENDIF.

PERFORM GET_OPENING_STOCK.

*- Opening Stock (Batch)

*- For 1st of April of that Year

CLEAR OPEN_STOCK.

L_PLANT = P_PLANT-LOW.

L_DATE = FST_OF_YEAR.

CALL FUNCTION 'ZMM_OPBAL_QTY_BASED_KEYDATE'

EXPORTING

I_MATNR = OPBAL-MATNR

I_PLANT = L_PLANT

I_KEYDT = L_DATE

IMPORTING

E_STK_OPBAL = OPEN_STOCK

  • E_STK_VAL =

.

IF SY-SUBRC = 0.

OPBAL2-OP_BAL_YR = OPEN_STOCK. " Opening Stock for Yr

ENDIF.

TOTALL = OPTOT + RECTOT - ISSTOT.

*- Calculate Closing Bal for Year

TOTAL_YR = OPBAL2-OP_BAL_YR + RECTOT_YR - ISSTOT_YR.

IF OPTOT = '0' AND RECTOT = '0' AND ISSTOT = '0'.

FLG = 1.

ENDIF.

IF FLG = 1.

CLEAR FLG.

ELSE.

SERNO = SERNO + 1.

OPBAL2-SNO = SERNO.

OPBAL2-MATNR = OPBAL-MATNR.

OPBAL2-MAKTX = OPBAL-MAKTX.

OPBAL2-OP_BAL = OPTOT.

OPBAL2-REC = RECTOT.

OPBAL2-T_OPBAL_REC = OPTOT + RECTOT.

OPBAL2-ISS = ISSTOT.

OPBAL2-CL_BAL = TOTALL.

OPBAL2-BATCH = OPBAL-BATCH.

OPBAL2-SUBCON = MSLB-LBLAB.

*- Year Information

IF FLG_AFTER = 'X'.

OPBAL2-REC_YR = RECTOT_YR.

OPBAL2-ISS_YR = ISSTOT_YR.

OPBAL2-CL_BAL_YR = TOTAL_YR.

ENDIF.

APPEND OPBAL2.

ENDIF.

OPTOT = 0.

RECTOT = 0.

ISSTOT = 0.

RECTOT_YR = 0.

ISSTOT_YR = 0.

TOTAL_YR = 0.

ENDAT.

ENDLOOP.

ENDFORM. " GET_DATA

*&----


*

*& Form WRITE_REPORT

*&----


*

  • Write Report

*----


*

FORM WRITE_REPORT .

IF NOT OPBAL2[] IS INITIAL.

*- Fill Layout

PERFORM FILL_LAYOUT USING GS_LAYOUT.

*- Perform Fill Events

PERFORM FILL_EVENTS USING IT_EVENTS.

*- Perform Fill ALV Header

PERFORM FILL_HEADER USING IT_LIST_HEADER.

*- Populate ALV Field catalog

PERFORM FILL_FLDCAT USING IT_FLDCAT.

*- Display Data

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

I_CALLBACK_PROGRAM = REPID

IT_FIELDCAT = IT_FLDCAT

IT_EVENTS = IT_EVENTS

IS_LAYOUT = GS_LAYOUT

TABLES

T_OUTTAB = OPBAL2.

ENDIF.

ENDFORM. " WRITE_REPORT

*&----


*

*& Form GET_OPENING_STOCK

*&----


*

  • ******* USE THIS LOGIC FOR GETTING OPENING STOCK OF A BATCH ******

  • ********** THE WAY ITS DONE (TO SOME EXTENT) IN Trxn MB5B **********

  • **************** VERY USEFUL TO GET STOCK FASTER **************

*----


*

FORM GET_OPENING_STOCK .

DATA: TOTAL TYPE P DECIMALS 3.

CLEAR OPTOT.

REFRESH: IMARD, G_T_MSEG_LEAN.

CLEAR: IMARD, G_T_MSEG_LEAN.

*- Select data from IMARD

SELECT * FROM MARD INTO CORRESPONDING FIELDS OF TABLE IMARD

WHERE WERKS = P_PLANT-LOW

AND MATNR = OPBAL-MATNR.

IF SY-SUBRC = 0.

READ TABLE IMARD INDEX 1.

IF SY-SUBRC = 0.

TOTAL = IMARD-LABST.

ENDIF.

ENDIF.

*- Select data from MSEG and MKPF

SELECT

MKPF~MBLNR

MKPF~MJAHR

MKPF~BLART

MKPF~BUDAT

MKPF~CPUDT

MSEG~MATNR

MSEG~WERKS

MSEG~LGORT

MSEG~CHARG

MSEG~SHKZG

MSEG~MENGE

INTO CORRESPONDING FIELDS OF TABLE G_T_MSEG_LEAN

FROM MKPF AS MKPF JOIN MSEG AS MSEG

ON MKPFMANDT = MSEGMANDT AND

MKPFMBLNR = MSEGMBLNR AND

MKPFMJAHR = MSEGMJAHR

WHERE MSEG~MATNR = OPBAL-MATNR

AND MSEG~WERKS = P_PLANT-LOW

AND MSEG~CHARG = OPBAL-BATCH

AND MKPF~BUDAT GE P_DATE-LOW.

SORT G_T_MSEG_LEAN BY WERKS MATNR CHARG SHKZG DESCENDING.

IF NOT G_T_MSEG_LEAN[] IS INITIAL.

LOOP AT G_T_MSEG_LEAN.

IF G_T_MSEG_LEAN-SHKZG = 'H'.

TOTAL = TOTAL + G_T_MSEG_LEAN-MENGE.

ELSE.

TOTAL = TOTAL - G_T_MSEG_LEAN-MENGE.

ENDIF.

ENDLOOP.

*- Assign Stock

OPTOT = TOTAL.

ENDIF.

ENDFORM. " GET_OPENING_STOCK

Read only

Former Member
0 Likes
1,787

ranges : r_bwart for mseg-bwart.

initialization.

r_bwart-low = '200'

r_bwart-high = '292'.

r_bwart-sign = 'BT'.

r_bwart-option = 'I'.

append r_bwart.

r_bwart-low = '551'

r_bwart-high = '556'.

r_bwart-sign = 'BT'.

r_bwart-option = 'I'.

append r_bwart.

r_bwart-low = '701'

r_bwart-high = '718'.

r_bwart-sign = 'BT'.

r_bwart-option = 'I'.

append r_bwart.

start-of-selection.

ltot = 0.

select * from mseg where bwart in r_bwart.

if mseg-shkzg = 'H'.

ltot = ltot - mseg-bstmg.

elseif mseg-shkzg = 'S'.

ltot = ltot + mseg-bstmg.

endif.

endselect.

qtyrem = grqty - ltot.

-- define the qtyrem, grqty and ltot with decimals 2 as per your requirement.

Read only

former_member195698
Active Contributor
0 Likes
1,787

Prepare a range for the field movement type MSEG-BWART

with the following data

RA_BWART-LOW = 200

RA_BWART-HIGH = 292

RA_BWART-SIGN = 'I'

RA_BWART-OPTION = 'BT'.

append RA_BWART.

RA_BWART-LOW = 551

RA_BWART-HIGH = 556

RA_BWART-SIGN = 'I'

RA_BWART-OPTION = 'BT'.

append RA_BWART.

RA_BWART-LOW = 701

RA_BWART-HIGH = 718

RA_BWART-SIGN = 'I'

RA_BWART-OPTION = 'BT'.

append RA_BWART.

USe the range in the select query for fetching data from MSEG.

select *

into table tb_mseg

from mseg

where bwart in ra_range...

(other conditions.....)

Loop at all the entries fetched .

if tb_mseg-shkzg = 'S'

wf_total = wf_total + tb_mseg-bstmg .

elseif tb_mseg-shkzg = 'H'.

wf_total = wf_total - tb_mseg-bstmg.

endif.

endloop.

value calcualted in step 1 = wf_total.

Regarding, The good receipt quantity given in point 2

if its just sum of all bstmg, then declare one more variable and store the value in that field

....... the quantity is never in DECIMALS its always an integer. if you want to display in 2 decimals move it to a P field with 2 decimals and display it.

Read only

Former Member
0 Likes
1,787

Hi,

try this:

REPORT ZGRO_TEST.

*

TABLES: MSEG.

*

SELECT-OPTIONS: S_BWART FOR MSEG-BWART NO-DISPLAY.

*

DATA: BEGIN OF ITAB OCCURS 0,

MATNR LIKE MSEG-MATNR,

BSTME LIKE MSEG-BSTME,

BSTMG LIKE MSEG-BSTMG,

END OF ITAB.

*

INITIALIZATION.

*

S_BWART-SIGN = 'I'.

S_BWART-OPTION = 'BT'.

S_BWART-LOW = '200'.

S_BWART-HIGH = '292'.

APPEND S_BWART.

S_BWART-LOW = '551'.

S_BWART-HIGH = '556'.

APPEND S_BWART.

S_BWART-LOW = '701'.

S_BWART-HIGH = '718'.

APPEND S_BWART.

*

START-OF-SELECTION.

*

SELECT * FROM MSEG where bwart in s_bwart.

*

ITAB-MATNR = MSEG-MATNR.

ITAB-BSTME = MSEG-BSTME.

IF MSEG-SHKZG = 'H'.

ITAB-BSTMG = MSEG-BSTMG.

COLLECT ITAB.

ENDIF.

IF MSEG-SHKZG = 'S'.

ITAB-BSTMG = MSEG-BSTMG * ( -1 ).

COLLECT ITAB.

ENDIF.

*

ENDSELECT.

*

sort itab by matnr.

LOOP AT ITAB.

WRITE: / ITAB-MATNR, ITAB-BSTMG, ITAB-BSTME.

ENDLOOP.

*

END-OF-SELECTION.

Are you sure you meen BSTMG, BSTME?

otherwise try

MENGE

MEINS

ERFMG

ERFME

Regards, dieter