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

IF Statement for SMBLN

Former Member
0 Likes
5,743

Hi Gurus / Expert,

I'm facing a trouble with my ABAP Report.

I made a report for Goods Issue.

My user want, that the material document with reverse not appear in my report.

So how must i write the IF statement in my report ?

Please help me with this problem.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
5,538

Hi All,

i have do all your suggestion but it still failed,

when i tried to make the reverse is OK but the value is still looks like not reverse. Just need 1 more step from you all. ^_^

24 REPLIES 24
Read only

Arun_Prabhu_K
Active Contributor
0 Likes
5,538

Hello Ri Zaldy.

     If you don't want the reversal documents, remove it from the internal table.

     Based on the movement type, filter the internal table data. (Eg: 102, 262 etc).

Regards.

Read only

0 Likes
5,538

Hi,

The movement type table is T156 and field XSTBW in this table stores whether a movement type is Reversal or not. So in your report you need to filter out those documents whose movement type says T156-XSTBW = 'X'

Say IT_MATERIAL_DOC is your internal table of Mat Doc you need to select the movement type data from table T156 into an internal table say IT_T156.

So your code will be like as below -

Loop on IT_MATERIAL_DOC

read table IT_T156 where BWART = IT_MATERIAL_DOC-BWART.

if sy-subrc = 0 and IT_T156-XSTBW = 'X'.

     delete IT_MATERIAL_DOC.

endif.

Endloop.

Read only

0 Likes
5,538

Hi Sabya,

For the example,

i made a goods issue 5 Qty,

then i reverse it 3 Qty.

now i need the 2 Qty and i must show it, how can we do that ?

Read only

0 Likes
5,538

Hi K.Arun

Thank you for your reply,

i need the last quantity of the goods issue, for example :

1. Goods issue = 5 qty

2. Reverse = 4 qty

3. (the last quantity is 1) i need it to be posting in my report.

Read only

Former Member
0 Likes
5,538

Hi,

If you are selecting it from MSEG,build a range of   riversal movement types , and use in where condition .

Read only

former_member209120
Active Contributor
0 Likes
5,538

Hi Ri Zaldy ,

Why you need to use if statement... Delete data from internal table which are having

Reversal movement type.

Try like this

MSEG Table


You need not required 102 means Reversal movement type.

Code :


TABLES : mseg.

TYPES : BEGIN OF ty_mseg,
         mblnr TYPE mseg-mblnr,      " Number of Material Document
         mjahr TYPE mseg-mjahr,      " Material Document Year
         zeile TYPE mseg-zeile,      " Item in Material Document
         bwart TYPE mseg-bwart,      " Movement Type (Inventory Management)
         END OF ty_mseg,

         BEGIN OF ty_t156,
         bwart TYPE t156-bwart,      " Movement Type (Inventory Management)
         xstbw TYPE t156-xstbw,      " Reversal movement type
         END OF ty_t156.


DATA : it_mseg TYPE TABLE OF ty_mseg,
        it_t156 TYPE TABLE OF ty_t156,
        wa_mseg TYPE ty_mseg,
        wa_t156 TYPE ty_t156.


SELECT-OPTIONS : s_mblnr FOR mseg-mblnr,
                                      s_mjahr FOR mseg-mjahr.


START-OF-SELECTION.
 
   SELECT mblnr
          mjahr
          zeile
          bwart
          FROM mseg INTO TABLE it_mseg
          WHERE mblnr IN s_mblnr
          AND   mjahr IN s_mjahr.



   IF it_mseg IS NOT INITIAL.

     SELECT  bwart
             xstbw
             FROM t156 INTO TABLE it_t156
             FOR ALL ENTRIES IN it_mseg
             WHERE bwart = it_mseg-bwart
             and   xstbw ne 'X'.
  
     SORT it_mseg BY mblnr mjahr.
     SORT it_t156 BY bwart.


     LOOP AT it_mseg INTO wa_mseg.

       READ TABLE it_t156 INTO wa_t156 WITH KEY bwart = wa_mseg-bwart BINARY SEARCH.

       IF sy-subrc NE 0.
         DELETE it_mseg.
       ENDIF.

     ENDLOOP.

   ENDIF.

   CLEAR wa_mseg.

   LOOP AT it_mseg INTO wa_mseg.
     WRITE : / wa_mseg-mblnr,
               wa_mseg-mjahr,
               wa_mseg-zeile,
               wa_mseg-bwart.

     CLEAR wa_mseg.

   ENDLOOP.

Input


Output


I think this will solves your problem.....



Read only

0 Likes
5,538

Hi Ramesh,

Your code is true but if i do that it will make my last quantity become chaos..

I need the last quantity between goods issue and reverse for example :

i do a goods issue 5 quantity and reverse 3 quantity. Now i need the last quantity (2 quantity) do you know how to do that ?

Read only

0 Likes
5,538

Hi,

Can you show us the output? May be you can do it with the help of amount (other field if any). Like:

Qty Amt

5     10000

3      -5000

--------------------

2      5000

--------------------

You can use the Collect statement based on Amt field. It may work for you. Try and do let us know.

Regards

Purnand

Read only

0 Likes
5,538

Hello Ri Zaldy ,

Every MOVEMENT type has got its REVERSE also , this for Reversing the Goods Movement Done.

So ,

You need to do Calculation based on this ,

Say a Material Document ( 560000001 )  for a Material X is made with BWART 561 and a Reverse Material Document Document ( 560000002 ) for that Same Material is made with BWART 562 , then Remaining Qty 560000001-MENGE - 560000002-MENGE.

So you need to know all the Relevant Pairs of Movement Type along with its Reversal Types .

See the Below eg : code

IF WA_MSEG-BWART EQ '131'.                                                       " production

          WA_FINAL-PRODMENGE = WA_FINAL-PRODMENGE + WA_MSEG-MENGE.

          WA_FINAL-PRODWERT  = WA_FINAL-PRODWERT  + WA_MSEG-DMBTR.

          MENGE_FLAG03       = MENGE_FLAG03       + WA_MSEG-MENGE.

ELSEIF WA_MSEG-BWART EQ '132'.

          WA_FINAL-PRODMENGE = WA_FINAL-PRODMENGE - WA_MSEG-MENGE.

          WA_FINAL-PRODWERT  = WA_FINAL-PRODWERT  - WA_MSEG-DMBTR.

          MENGE_FLAG03       = MENGE_FLAG03       - WA_MSEG-MENGE.

ENDIF.

Read only

0 Likes
5,538

Hi Ri Zaldy,

Can you share your code for clear understanding of your requirement...


Read only

0 Likes
5,538

Hi Ramesh,

*&---------------------------------------------------------------------*

*& Report  ZTEST3

*&

*&---------------------------------------------------------------------*

*&

*&

*&---------------------------------------------------------------------*

REPORT  ZMATCONS.

* Global ALV Data Declarations

type-pools: slis.

* Internal Tables

data: begin of itab occurs 0,

       matnr type mseg-matnr,

       maktx type makt-maktx,

       bwart TYPE mseg-bwart,

       lgort TYPE mseg-lgort,

       werks TYPE mseg-werks,

       bwtar TYPE mseg-bwtar,

       menge TYPE mseg-menge,

       meins TYPE mseg-meins,

       kostl TYPE mseg-kostl,

       budat TYPE mkpf-budat,

       mblnr TYPE mkpf-mblnr,

       ltext TYPE cskt-ltext,

       end of itab.

DATA: begin OF wa_itab,

       matnr TYPE mseg-matnr,

       maktx TYPE makt-maktx,

       bwart TYPE mseg-bwart,

       lgort TYPE mseg-lgort,

       werks TYPE mseg-werks,

       bwtar TYPE mseg-bwtar,

       menge TYPE mseg-menge,

       meins TYPE mseg-meins,

       kostl TYPE mseg-kostl,

       budat TYPE mkpf-budat,

       mblnr TYPE mkpf-mblnr,

       ltext TYPE cskt-ltext,

       END OF wa_itab.

DATA: it_mseg     TYPE TABLE OF mseg,

       wa_mseg     TYPE STANDARD TABLE OF mseg WITH HEADER LINE,

       it_mkpf     TYPE TABLE OF mkpf,

       wa_mkpf     TYPE STANDARD TABLE OF mkpf WITH HEADER LINE,

       it_cskt     TYPE TABLE OF cskt,

       wa_cskt     TYPE STANDARD TABLE OF cskt WITH HEADER LINE.

INITIALIZATION.

   SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

   SELECT-OPTIONS : s_matnr FOR wa_mseg-matnr.

   SELECT-OPTIONS : s_bwart FOR wa_mseg-bwart.

   SELECT-OPTIONS : s_budat FOR wa_mkpf-budat.

   SELECTION-SCREEN END OF BLOCK b1.

start-of-selection.

   perform get_data.

   perform call_alv.

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

*      Form  GET_DATA

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

form get_data.

   SELECT mseg~matnr makt~maktx mkpf~budat mkpf~mblnr cskt~ltext

          mseg~bwart

          mseg~lgort

          mseg~werks

          mseg~bwtar

          mseg~menge

          mseg~meins

          mseg~kostl

           into corresponding fields of table itab

             from mseg

               inner join makt

                 on mseg~matnr = makt~matnr

               inner join mkpf

                 on mseg~mblnr = mkpf~mblnr

               inner join cskt

                 on mseg~kostl = cskt~kostl

             where mseg~matnr IN s_matnr AND mseg~bwart IN s_bwart AND mkpf~budat IN s_budat.

          loop at itab into wa_itab.

          if wa_itab-bwart = '201' and wa_itab-menge > 0.

          wa_itab-menge = wa_itab-menge * -1.

          modify itab from wa_itab.

          endif.

          clear wa_itab.

          endloop.

      endform.

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

*  CALL_ALV

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

form call_alv.

   data: ifc type slis_t_fieldcat_alv.

   data: xfc type slis_fieldcat_alv.

   data: repid type sy-repid.

   repid = sy-repid.

   clear xfc. refresh ifc.

   clear xfc.

   xfc-reptext_ddic = 'Material Number'.

   xfc-fieldname    = 'MATNR'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '10'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'Material Description'.

   xfc-fieldname    = 'MAKTX'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '40'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'Mov. Type'.

   xfc-fieldname    = 'BWART'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '10'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'S. Loc'.

   xfc-fieldname    = 'LGORT'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '8'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'Plant'.

   xfc-fieldname    = 'WERKS'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '8'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'Val. Type'.

   xfc-fieldname    = 'BWTAR'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '12'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'Qty'.

   xfc-fieldname    = 'MENGE'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '8'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'UoM'.

   xfc-fieldname    = 'MEINS'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '8'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'Cost Center'.

   xfc-fieldname    = 'KOSTL'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '12'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'Pos. Date'.

   xfc-fieldname    = 'BUDAT'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '10'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'Cost Center Description'.

   xfc-fieldname    = 'LTEXT'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '20'.

   append xfc to ifc.

   clear xfc.

   xfc-reptext_ddic = 'Doc. Numb'.

   xfc-fieldname    = 'MBLNR'.

   xfc-tabname      = 'ITAB'.

   xfc-outputlen    = '10'.

   append xfc to ifc.

* Call ABAP List Viewer (ALV)

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

     EXPORTING

       i_callback_program      = repid

       i_callback_user_command = 'HANDLE_USER_COMMAND'

       it_fieldcat             = ifc

     TABLES

       t_outtab                = itab.

endform.

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

*       FORM handle_User_Command                                      *

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

form handle_user_command using r_ucomm     like sy-ucomm

                                rs_selfield type slis_selfield.

   case r_ucomm.

     when '&IC1'.

       case rs_selfield-FIELDNAME.

         when 'MATNR'.

           set parameter id 'MAT' field rs_selfield-value.

           call transaction 'MD04' and skip first screen.

       endcase.

   endcase.

endform.

Read only

0 Likes
5,538

   SELECT mseg~matnr makt~maktx mkpf~budat mkpf~mblnr cskt~ltext

          mseg~bwart

          mseg~lgort

          mseg~werks

          mseg~bwtar

          mseg~menge

          mseg~meins

          mseg~kostl

         mseg~SMBLN

        mseg-smblp

        mseg-zeile

           into corresponding fields of table itab

             from mseg

               inner join makt

                 on mseg~matnr = makt~matnr

               inner join mkpf

                 on mseg~mblnr = mkpf~mblnr

               inner join cskt

                 on mseg~kostl = cskt~kostl

             where mseg~matnr IN s_matnr AND mseg~bwart IN s_bwart AND mkpf~budat IN s_budat.

    data : it_tab1 like itab,

              wa_itab1 like wa_itab.

  

data : index TYPE sy-tabix.

data : index1 TYPE sy-tabix.

it_tab1[] = itab[].

loop at itab into wa_itab.
index = sy-tabix.
read table it_tab1 into wa_itab1 with key smbln = wa_itab-mblnr smblp = wa_itab-zeile.
index1 = sy-tabix.
if sy-subrc eq 0.
wa_itab-flag = 'X'.
wa_itab1-flag = 'X'.
MODIFY itab FROM wa_itab INDEX index TRANSPORTING flag.
MODIFY it_tab1 FROM wa_itab1 INDEX index1 TRANSPORTING flag.
ENDIF.

ENDLOOP.

delete itab where flag eq 'X'.
delete it_tab1 where flag eq 'X'.

loop at itab into wa_itab.
index = sy-tabix.
read table it_tab1 into wa_itab1 with key mblnr = wa_itab-mblnr zeile = wa_itab-zeile.
index1 = sy-tabix.
if sy-subrc eq 0.
wa_itab-flag = 'X'.
wa_itab1-flag = 'X'.
MODIFY itab FROM wa_itab INDEX index TRANSPORTING flag.
MODIFY it_tab1 FROM wa_itab1 INDEX index1 TRANSPORTING flag.
ENDIF.

ENDLOOP.

delete it_itab where flag ne 'X'.
delete it_itab1 where flag ne 'X'.

Make changes as bold letters.

  

Read only

0 Likes
5,538

Hi Purnand,

yeah you are right, it almost like that but w/o amount. can you do that ?

Read only

0 Likes
5,538

Hi Sijin,

Is that 131 = 561 and 132 = 562 ?

Read only

0 Likes
5,538

No No ,

That's a particular case.

Each movement type has their OWN Purpose .

Say for Eg. 561 for Initial Upload ( 562 for reversing any Initial Upload )

similarly     131 for Production ( 132 for Reversing Production )

and the list goes on ...

Better Ask your Functional Consultant ( MM ) for further clarification on Movement types with their individual Reversal Movement types.

Read only

0 Likes
5,538

Hi Sijin,

yeah i was asked my MM consultant and they know about that. And then what is the function of

WA_FINAL-PRODWERT  = WA_FINAL-PRODWERT  + WA_MSEG-DMBTR.

          MENGE_FLAG03       = MENGE_FLAG03       + WA_MSEG-MENGE.

ELSEIF WA_MSEG-BWART EQ '132'.

          WA_FINAL-PRODMENGE = WA_FINAL-PRODMENGE - WA_MSEG-MENGE.

          WA_FINAL-PRODWERT  = WA_FINAL-PRODWERT  - WA_MSEG-DMBTR.

          MENGE_FLAG03       = MENGE_FLAG03       - WA_MSEG-MENGE.

ENDIF.

Please help me Sijin

Read only

0 Likes
5,538

Hi Ramesh,

if we do this, it will make the goods issue value not reverse. for example

goods issue 5

( we are not appear the reverse movement type)

in my report it will still 5

Read only

0 Likes
5,538

IF WA_MSEG-BWART EQ '131'.                                                       " production

          WA_FINAL-PRODMENGE = WA_FINAL-PRODMENGE + WA_MSEG-MENGE.

          WA_FINAL-PRODWERT  = WA_FINAL-PRODWERT  + WA_MSEG-DMBTR.

          MENGE_FLAG03       = MENGE_FLAG03       + WA_MSEG-MENGE.

ELSEIF WA_MSEG-BWART EQ '132'.

          WA_FINAL-PRODMENGE = WA_FINAL-PRODMENGE - WA_MSEG-MENGE.

          WA_FINAL-PRODWERT  = WA_FINAL-PRODWERT  - WA_MSEG-DMBTR.

          MENGE_FLAG03       = MENGE_FLAG03       - WA_MSEG-MENGE.

ENDIF.

This is a piece of Code from a ZREPORT present in my system , to clarify you with the Logic.

In the above report a Set of Material Documents is fetched based on Selections Provided and later they are segregated for Each Material.

Say a Material has following MATERIAL DOCUMENTS :

MBLNR  MATNR  BWART MENGE UOM

500001   XYZ        131       30          KG

500002   XYZ        131       40          KG

500003   XYZ        131       50          KG

500004   XYZ        132       50          KG

Now according the Code pasted you can see,

If BWART = 131 ,

Then , field  WA_FINAL-PRODMENGE will be added with Corresponding MENGE

else if BWART = 132 ( reverse of 131 )

Then , field   WA_FINAL-PRODMENGE will be subtracted with Corresponding MENGE.

So in the End after whole processing you will get Quantity for Material XYZ as


70 Kgs ( 30 + 40 + 50 - 50 )

So a similar type Logic need to written for your requirement .

Read only

Former Member
0 Likes
5,538

Hello Zaldy,

i was facing the same problem when develop material purchase history report then i fought should solutions, just follow below code.

data : it_mseg1 like it_mseg.
data : wa_mseg1 like wa_mseg.
data : index TYPE sy-tabix.
data : index1 TYPE sy-tabix.
it_mseg1[] = it_mseg[].

loop at it_mseg into wa_mseg.
index = sy-tabix.
read table it_mseg1 into wa_mseg1 with key smbln = wa_mseg-mblnr smblp = wa_mseg-zeile.
index1 = sy-tabix.
if sy-subrc eq 0.
wa_mseg-flag = 'X'.
wa_mseg1-flag = 'X'.
MODIFY it_mseg FROM wa_mseg INDEX index TRANSPORTING flag.
MODIFY it_mseg1 FROM wa_mseg1 INDEX index1 TRANSPORTING flag.
ENDIF.

ENDLOOP.

delete it_mseg where flag eq 'X'.
delete it_mseg1 where flag eq 'X'.

loop at it_mseg into wa_mseg.
index = sy-tabix.
read table it_mseg1 into wa_mseg1 with key mblnr = wa_mseg-mblnr zeile = wa_mseg-zeile.
index1 = sy-tabix.
if sy-subrc eq 0.
wa_mseg-flag = 'X'.
wa_mseg1-flag = 'X'.
MODIFY it_mseg FROM wa_mseg INDEX index TRANSPORTING flag.
MODIFY it_mseg1 FROM wa_mseg1 INDEX index1 TRANSPORTING flag.
ENDIF.

ENDLOOP.

delete it_mseg where flag ne 'X'.
delete it_mseg1 where flag ne 'X'.

Read only

Former Member
0 Likes
5,538

Hi im sorry in my code there is

loop at itab into wa_itab.

          if wa_itab-bwart = '201' and wa_itab-menge > 0.

          wa_itab-menge = wa_itab-menge * -1.

          modify itab from wa_itab.

          endif.

          clear wa_itab.

          endloop.

the right one is not 201  but 202

Read only

Former Member
0 Likes
5,539

Hi All,

i have do all your suggestion but it still failed,

when i tried to make the reverse is OK but the value is still looks like not reverse. Just need 1 more step from you all. ^_^

Read only

0 Likes
5,538

Hi

* global alv data declarations
TYPE-POOLS: slis.
* Internal Tables
DATABEGIN OF itab OCCURS 0,
        matnr TYPE mseg-matnr,
        maktx TYPE makt-maktx,
        bwart TYPE mseg-bwart,
        lgort TYPE mseg-lgort,
        werks TYPE mseg-werks,
        bwtar TYPE mseg-bwtar,
        menge TYPE mseg-menge,
        meins TYPE mseg-meins,
        kostl TYPE mseg-kostl,
        budat TYPE mkpf-budat,
        mblnr TYPE mkpf-mblnr,
        ltext TYPE cskt-ltext,
        END OF itab.

DATA: BEGIN OF wa_itab,
        matnr TYPE mseg-matnr,
        maktx TYPE makt-maktx,
        bwart TYPE mseg-bwart,
        lgort TYPE mseg-lgort,
        werks TYPE mseg-werks,
        bwtar TYPE mseg-bwtar,
        menge TYPE mseg-menge,
        meins TYPE mseg-meins,
        kostl TYPE mseg-kostl,
        budat TYPE mkpf-budat,
        mblnr TYPE mkpf-mblnr,
        ltext TYPE cskt-ltext,
        END OF wa_itab.

TYPES : BEGIN OF ty_t156,
         bwart TYPE t156-bwart,      " Movement Type (Inventory Management)
         xstbw TYPE t156-xstbw,      " Reversal movement type
         END OF ty_t156.

DATA : it_t156 TYPE TABLE OF ty_t156,
        wa_t156 TYPE ty_t156.

DATA: it_mseg     TYPE TABLE OF mseg,
       wa_mseg     TYPE STANDARD TABLE OF mseg WITH HEADER LINE,
       it_mkpf     TYPE TABLE OF mkpf,
       wa_mkpf     TYPE STANDARD TABLE OF mkpf WITH HEADER LINE,
       it_cskt     TYPE TABLE OF cskt,
       wa_cskt     TYPE STANDARD TABLE OF cskt WITH HEADER LINE.

INITIALIZATION.
   SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
   SELECT-OPTIONS : s_matnr FOR wa_mseg-matnr.
   SELECT-OPTIONS : s_bwart FOR wa_mseg-bwart.
   SELECT-OPTIONS : s_budat FOR wa_mkpf-budat.
   SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

   PERFORM get_data.
   PERFORM call_alv.

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

*      Form  GET_DATA

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

FORM get_data.

   SELECT mseg~matnr makt~maktx mkpf~budat mkpf~mblnr cskt~ltext
          mseg~bwart
          mseg~lgort
          mseg~werks
          mseg~bwtar
          mseg~menge
          mseg~meins
          mseg~kostl
          INTO CORRESPONDING FIELDS OF TABLE itab
          FROM mseg
          INNER JOIN makt ON mseg~matnr = makt~matnr
          INNER JOIN mkpf ON mseg~mblnr = mkpf~mblnr
          INNER JOIN cskt ON mseg~kostl = cskt~kostl
          WHERE mseg~matnr IN s_matnr
          AND  mseg~bwart IN s_bwart
          AND  mkpf~budat IN s_budat
          AND  makt~spras = 'EN'
          AND  cskt~spras = 'EN'.

   IF itab[] IS NOT INITIAL.

     SELECT  bwart
             xstbw
             FROM t156 INTO TABLE it_t156
             FOR ALL ENTRIES IN itab
             WHERE bwart = itab-bwart
             AND  xstbw NE 'X'.


     SORT itab BY mblnr bwart.
     SORT it_t156 BY bwart.

     LOOP AT itab INTO wa_itab.
       READ TABLE it_t156 INTO wa_t156 WITH KEY bwart = wa_itab-bwart BINARY SEARCH.
         IF sy-subrc NE 0.
           wa_itab-menge = wa_itab-menge * -1.
           MODIFY itab FROM wa_itab.
         ENDIF.
         CLEAR : wa_itab, wa_t156.
       ENDLOOP.
endif.
     ENDFORM.                    "get_data



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

*  CALL_ALV

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

FORM call_alv.


   DATA: ifc TYPE slis_t_fieldcat_alv.
   DATA: xfc TYPE slis_fieldcat_alv.
   DATA: repid TYPE sy-repid.
   repid = sy-repid.
   CLEAR xfc. REFRESH ifc.

   CLEAR xfc.

   xfc-reptext_ddic = 'Material Number'.
   xfc-fieldname    = 'MATNR'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '10'.
   APPEND xfc TO ifc.



   CLEAR xfc.

   xfc-reptext_ddic = 'Material Description'.
   xfc-fieldname    = 'MAKTX'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '40'.
   APPEND xfc TO ifc.

   CLEAR xfc.
   xfc-reptext_ddic = 'Mov. Type'.
   xfc-fieldname    = 'BWART'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '10'.
   APPEND xfc TO ifc.


   CLEAR xfc.
   xfc-reptext_ddic = 'S. Loc'.
   xfc-fieldname    = 'LGORT'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '8'.
   APPEND xfc TO ifc.



   CLEAR xfc.

   xfc-reptext_ddic = 'Plant'.
   xfc-fieldname    = 'WERKS'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '8'.
   APPEND xfc TO ifc.



   CLEAR xfc.
   xfc-reptext_ddic = 'Val. Type'.
   xfc-fieldname    = 'BWTAR'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '12'.
   APPEND xfc TO ifc.



   CLEAR xfc.
   xfc-reptext_ddic = 'Qty'.
   xfc-fieldname    = 'MENGE'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '8'.
   APPEND xfc TO ifc.



   CLEAR xfc.
   xfc-reptext_ddic = 'UoM'.
   xfc-fieldname    = 'MEINS'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '8'.
   APPEND xfc TO ifc.



   CLEAR xfc.
   xfc-reptext_ddic = 'Cost Center'.
   xfc-fieldname    = 'KOSTL'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '12'.
   APPEND xfc TO ifc.



   CLEAR xfc.
   xfc-reptext_ddic = 'Pos. Date'.
   xfc-fieldname    = 'BUDAT'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '10'.
   APPEND xfc TO ifc.



   CLEAR xfc.
   xfc-reptext_ddic = 'Cost Center Description'.
   xfc-fieldname    = 'LTEXT'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '20'.
   APPEND xfc TO ifc.



   CLEAR xfc.
   xfc-reptext_ddic = 'Doc. Numb'.
   xfc-fieldname    = 'MBLNR'.
   xfc-tabname      = 'ITAB'.
   xfc-outputlen    = '10'.
   APPEND xfc TO ifc.

* Call ABAP List Viewer (ALV)

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
       i_callback_program      = repid
       i_callback_user_command = 'HANDLE_USER_COMMAND'
       it_fieldcat             = ifc
     TABLES
       t_outtab                = itab.



ENDFORM.                    "call_alv



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

*       FORM handle_User_Command                                      *

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

FORM handle_user_command USING r_ucomm     LIKE sy-ucomm
                                 rs_selfield TYPE slis_selfield.

   CASE r_ucomm.

     WHEN '&IC1'.
       CASE rs_selfield-fieldname.
         WHEN 'MATNR'.
           SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
           CALL TRANSACTION 'MD04' AND SKIP FIRST SCREEN.
       ENDCASE.
   ENDCASE.
ENDFORM.                    "handle_user_command


Read only

0 Likes
5,538

Hi Ramesh

Thank you for help me ^^ thank you

Read only

0 Likes
5,538

Thank You ....Ri Zaldy