‎2006 Feb 07 6:47 PM
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
‎2006 Feb 07 6:54 PM
May be if i am not wrong , according to ur code u should loop at t_mara , but u r looping at t_marc
‎2006 Feb 07 6:56 PM
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.
‎2006 Feb 07 6:58 PM
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
‎2006 Feb 07 7:00 PM
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
‎2006 Feb 07 7:02 PM
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