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

Report : help

Former Member
0 Likes
463

Hi all,

You all help me a lot in writing ABAP coding.

Iam getting error in this report.

Iam entering the plant as 1000 & material as 100-100

it is showing only one value but in data base there are two values i thought that there is an error in the loop statement. try to check this and send me the correct code immediately.

thank you.

&----


*& Report ZSTOCKDETAILS4 *

*& *

&----


*& *

*& *

&----


REPORT zstockdetails4 NO STANDARD PAGE HEADING

LINE-SIZE 160

LINE-COUNT 60(3).

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

  • tables declaration *

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

TABLES : mara, "general material data

marc, "plant data for material

mard, "storage location data for material

makt. "material description

TYPE-POOLS : slis.

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

  • internal table declaration *

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

TYPES : BEGIN OF ty_mara,

matnr TYPE matnr,

mtart TYPE mtart,

meins TYPE meins,

END OF ty_mara.

TYPES : BEGIN OF ty_marc,

matnr TYPE matnr,

werks TYPE werks,

END OF ty_marc.

TYPES : BEGIN OF ty_mard,

matnr TYPE matnr,

werks TYPE werks,

lgort TYPE lgort_d,

labst TYPE labst,

END OF ty_mard.

TYPES : BEGIN OF ty_makt,

matnr TYPE matnr,

maktx TYPE maktx,

END OF ty_makt.

DATA:t_mara TYPE TABLE OF ty_mara WITH HEADER LINE,

t_marc TYPE TABLE OF ty_marc WITH HEADER LINE,

t_mard TYPE TABLE OF ty_mard WITH HEADER LINE,

t_makt TYPE TABLE OF ty_makt WITH HEADER LINE.

PARAMETER : p_alv AS CHECKBOX DEFAULT 'X'.

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

  • final internal table *

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

TYPES : BEGIN OF ty_out,

matnr TYPE matnr,

werks TYPE werks,

lgort TYPE lgort_d,

labst TYPE labst,

meins TYPE meins,

mtart TYPE mtart,

maktx TYPE maktx,

END OF ty_out.

DATA:t_out TYPE TABLE OF ty_out WITH HEADER LINE.

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

  • DATA DECLARATION FOR ALV *

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

DATA : fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,

gd_repid LIKE sy-repid,

gd_layout TYPE slis_layout_alv,

gd_tab_group TYPE slis_t_sp_group_alv,

gt_list_top_of_page TYPE slis_t_listheader,

it_sortcat TYPE slis_sortinfo_alv OCCURS 1,

wa_sort LIKE LINE OF it_sortcat.

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

  • selection screen *

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

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

SELECT-OPTIONS : s_werks FOR marc-werks OBLIGATORY,

s_matnr FOR mara-matnr,

s_mtart FOR mara-mtart,

s_lgort FOR mard-lgort.

SELECTION-SCREEN END OF BLOCK b1.

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

  • start-of-selection *

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

START-OF-SELECTION.

SELECT matnr mtart meins

FROM mara

INTO TABLE t_mara

WHERE matnr IN s_matnr

AND mtart IN s_mtart.

SORT t_mara BY matnr.

IF t_mara[] IS NOT INITIAL.

SELECT matnr werks

FROM marc

INTO TABLE t_marc

FOR ALL ENTRIES IN t_mara

WHERE matnr = t_mara-matnr

AND werks IN s_werks.

ENDIF.

SORT t_marc BY matnr.

IF t_mara[] IS NOT INITIAL.

SELECT matnr werks lgort labst

FROM mard

INTO CORRESPONDING FIELDS OF TABLE t_mard

FOR ALL ENTRIES IN t_mara

WHERE matnr = t_mara-matnr

and werks = t_marc-werks

AND lgort IN s_lgort.

ENDIF.

SORT t_mard BY matnr.

IF t_mara[] IS NOT INITIAL.

SELECT matnr maktx

FROM makt

INTO table t_makt

for all entries in t_mara

WHERE matnr = t_mara-matnr.

ENDIF.

SORT t_makt BY matnr.

LOOP AT t_marc.

MOVE: t_mara-matnr to t_out-matnr,

t_mara-mtart TO t_out-mtart,

t_mara-meins TO t_out-meins.

READ TABLE t_marc WITH KEY matnr = t_mara-matnr BINARY SEARCH.

IF sy-subrc = 0.

MOVE t_marc-werks TO t_out-werks.

ENDIF.

READ TABLE t_mard WITH KEY matnr = t_mara-matnr BINARY SEARCH.

IF sy-subrc = 0.

MOVE: t_mard-lgort TO t_out-lgort,

t_mard-labst TO t_out-labst.

ENDIF.

READ TABLE t_makt WITH KEY matnr = t_mard-matnr BINARY SEARCH.

IF sy-subrc = 0.

MOVE: t_makt-maktx TO t_out-maktx.

ENDIF.

APPEND t_out.

CLEAR: t_out,

t_mara,

t_marc,

t_mard,

t_makt.

ENDLOOP.

SORT t_out BY werks lgort matnr.

IF

p_alv = 'X'.

PERFORM build_fieldcatalog.

PERFORM display_alv_report.

ELSE.

DATA: tot_lgort TYPE labst,

tot_werks TYPE labst,

total TYPE labst,

tot TYPE labst.

LOOP AT t_out.

  • AT NEW werks.

  • NEW-PAGE.

  • ENDAT.

NEW-LINE.

WRITE 😕 sy-vline, t_out-matnr,

15 t_out-werks,

35 t_out-lgort,

45 t_out-labst,

85 t_out-meins,

100 t_out-mtart,

120 t_out-maktx,160 sy-vline.

tot_lgort = tot_lgort + t_out-labst.

total = total + t_out-labst.

tot = tot + t_out-labst.

AT END OF matnr.

SUM.

ULINE.

WRITE : / 'THE SUBTOTAL IS', 52 tot_lgort.

CLEAR tot_lgort.

ENDAT.

*

  • AT END OF werks.

  • ULINE.

  • WRITE : / 'THE SUBTOTAL IS', 52 tot_werks.

  • CLEAR tot_werks.

  • ENDAT.

AT LAST.

ULINE.

WRITE : / 'THE GRAND TAOTAL IS', 52 tot.

ENDAT.

ENDLOOP.

ENDIF.

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

  • TOP-OF-PAGE *

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

TOP-OF-PAGE.

ULINE.

WRITE : sy-vline, 'MATERIAL',

15 'PLANT',

32 'STOR LOC',

56 'STOCK',

80 'UNITS',

95 'MAT TYPE',

115 'MAT DESCR',160 sy-vline.

ULINE.

&----


*& Form build_fieldcatalog

&----


  • text

----


FORM build_fieldcatalog.

fieldcatalog-fieldname = 'MATNR'.

fieldcatalog-seltext_m = 'Material Number'.

fieldcatalog-col_pos = 0.

fieldcatalog-outputlen = 10.

fieldcatalog-emphasize = 'X'.

fieldcatalog-key = 'X'.

  • fieldcatalog-do_sum = 'X'.

  • fieldcatalog-no_zero = 'X'.

APPEND fieldcatalog TO fieldcatalog.

CLEAR fieldcatalog.

fieldcatalog-fieldname = 'WERKS'.

fieldcatalog-seltext_m = 'Plant'.

fieldcatalog-col_pos = 1.

APPEND fieldcatalog TO fieldcatalog.

CLEAR fieldcatalog.

fieldcatalog-fieldname = 'LGORT'.

fieldcatalog-seltext_m = 'Storage Location'.

fieldcatalog-col_pos = 2.

APPEND fieldcatalog TO fieldcatalog.

CLEAR fieldcatalog.

fieldcatalog-fieldname = 'LABST'.

fieldcatalog-seltext_m = 'Stock'.

fieldcatalog-col_pos = 3.

fieldcatalog-outputlen = 15.

fieldcatalog-do_sum = 'X'.

APPEND fieldcatalog TO fieldcatalog.

CLEAR fieldcatalog.

fieldcatalog-fieldname = 'MEINS'.

fieldcatalog-seltext_m = 'Base Unit of Measure'.

fieldcatalog-col_pos = 4.

fieldcatalog-ctabname = 'MARA'.

  • fieldcatalog-datatype = 'PC'.

  • fieldcatalog-reptext_ddic = 'Unit of Measure'.

APPEND fieldcatalog TO fieldcatalog.

CLEAR fieldcatalog.

fieldcatalog-fieldname = 'MTART'.

fieldcatalog-seltext_m = 'Material Type'.

fieldcatalog-col_pos = 5.

APPEND fieldcatalog TO fieldcatalog.

CLEAR fieldcatalog.

fieldcatalog-fieldname = 'MAKTX'.

fieldcatalog-seltext_m = 'Material Description'.

fieldcatalog-col_pos = 6.

APPEND fieldcatalog TO fieldcatalog.

CLEAR fieldcatalog.

ENDFORM. "build_fieldcatalog

&----


*& Form display_alv_report

&----


  • text

----


FORM display_alv_report.

gd_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER = ' '

  • I_BUFFER_ACTIVE = ' '

i_callback_program = gd_repid

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

i_callback_top_of_page = 'TOP-OF-PAGE'

  • I_CALLBACK_HTML_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_END_OF_LIST = ' '

  • I_STRUCTURE_NAME =

  • I_BACKGROUND_ID = ' '

  • I_GRID_TITLE =

  • I_GRID_SETTINGS =

is_layout = gd_layout

it_fieldcat = fieldcatalog[]

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

it_sort = it_sortcat

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

  • IT_EVENTS =

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • IT_ALV_GRAPHICS =

  • IT_HYPERLINK =

  • IT_ADD_FIELDCAT =

  • IT_EXCEPT_QINFO =

  • I_HTML_HEIGHT_TOP =

  • I_HTML_HEIGHT_END =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

t_outtab = t_out

EXCEPTIONS

program_error = 1

OTHERS = 2

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. "display_alv_report

5 REPLIES 5
Read only

Former Member
0 Likes
441

May be if i am not wrong , according to ur code u should loop at t_mara , but u r looping at t_marc

Read only

Former Member
0 Likes
441

Hi Girish,

Can you change the code as below..

LOOP AT t_marc.

MOVE t_marc-matnr to t_out-matnr.

MOVE t_marc-werks TO t_out-werks.

READ TABLE t_mara WITH KEY matnr = t_marc-matnr BINARY SEARCH.

IF sy-subrc = 0.

move:t_mara-mtart TO t_out-mtart,

t_mara-meins TO t_out-meins.

ENDIF.

READ TABLE t_mard WITH KEY matnr = t_marc-matnr BINARY SEARCH.

IF sy-subrc = 0.

MOVE: t_mard-lgort TO t_out-lgort,

t_mard-labst TO t_out-labst.

READ TABLE t_makt WITH KEY matnr = t_mard-matnr BINARY SEARCH.

IF sy-subrc = 0.

MOVE: t_makt-maktx TO t_out-maktx.

ENDIF.

ENDIF.

APPEND t_out.

CLEAR: t_out,

t_mara,

t_marc,

t_mard,

t_makt.

ENDLOOP.

Read only

Former Member
0 Likes
441

hi

is your t_out populated with 2 records???

if yes then you have written

LOOP AT t_out.

  • AT NEW werks.

  • NEW-PAGE.

  • ENDAT.

NEW-LINE.

before writing the output. so do check out if you are getting two pages in the result. hit the pagedoen button and see if you have one more record in the next page

Regards

Santosh

Read only

RichHeilman
Developer Advocate
Developer Advocate
0 Likes
441

This may work a little better.




 loop at t_marc.


<b>    read table t_mara with key matnr = t_marc-matnr binary search.
    if sy-subrc = 0.
      move: t_mara-matnr to t_out-matnr,
      t_mara-mtart to t_out-mtart,
      t_mara-meins to t_out-meins.
    endif.

    move t_marc-werks to t_out-werks.</b>


    read table t_makt with key matnr = <b>t_marc-matnr</b> binary search.
    if sy-subrc = 0.
      move: t_makt-maktx to t_out-maktx.
    endif.

<b>*    read table t_mard with key matnr = t_mara-matnr binary search.
*    if sy-subrc = 0.
*      move: t_mard-lgort to t_out-lgort,
*      t_mard-labst to t_out-labst.
*    endif.
    loop at t_mard where matnr = t_marc-matnr
                     and werks = t_marc-werks.
      move: t_mard-lgort to t_out-lgort,
      t_mard-labst to t_out-labst.
      append t_out.
    endloop.</b>

    clear: t_out,
    t_mara,
    t_marc,
    t_mard,
    t_makt.

  endloop.


Regards,

Rich Heilman

Read only

Former Member
0 Likes
441

HI Girish,

there is a mistake in your third select statement

SELECT matnr werks lgort labst

FROM mard

INTO CORRESPONDING FIELDS OF TABLE t_mard

FOR ALL ENTRIES IN t_mara

WHERE matnr = t_mara-matnr

and werks = t_marc-werks

AND lgort IN s_lgort.

ENDIF.

Here T_MARC-WERKS will never contain any data. You have used for all entries on T_MARA and not on T_MARC.

Instead of using two different selects on MARC and MARD use only one select as shown below..

select amatnr awerks blgort blabst

FROM marc as a inner join mard as b

on amatnr = bmatnr and

awerks = bwerks

for all entries in t_mara

into corresponding fields of table T_MARC_MARD

where a~matnr = t_mara-matnr.

Regards,

Vara