09-17-2007 1:13 PM
Dear All,
I have wriiten one program in ALV. But it not showing the required output.
can somebody go through the my prob and can come up with the desired results.
Whne u all will go through the program will got to know what exactly I want to display.
As per as I am thinking there is some prob in SELECT stament.
So please check and do help me.
I am giving my code below:-
tables: marc,
mkpf,
mseg,
ekko,
ekpo,
ekbe,
rseg.
type-pools: slis.
&----
data: begin of itab occurs 0,
matnr like marc-matnr,
budat like ekbe-budat,
maktx like makt-maktx,
bedat like ekko-bedat,
ebeln like mseg-ebeln,
menge like mseg-menge,
bprme like mseg-bprme,
netwr like ekpo-netwr,
bstmg like mseg-bstmg,
dmbtr like mseg-dmbtr,
bprbm like rseg-bprbm,
refwr like ekbe-refwr,
end of itab.
data: i_fieldcat type slis_t_fieldcat_alv with header line,
wa_fieldcat type slis_fieldcat_alv.
data v_repid type sy-repid.
&----
selection-screen begin of block b1 with frame title text-001.
select-options: s_matnr for marc-matnr,
s_budat for mkpf-budat.
selection-screen end of block b1.
&----
&----
initialization.
v_repid = sy-repid.
start-of-selection.
SELECT werks smbln bstmg dmbtr matnr ebeln FROM mseg INTO
CORRESPONDING FIELDS OF TABLE itab
WHERE matnr IN s_matnr.
**ENDSELECT.
*
*
SELECT SINGLE lifnr FROM ekko INTO CORRESPONDING FIELDS OF itab
WHERE ebeln = mseg-ebeln.
*
SELECT ebeln menge FROM ekpo INTO CORRESPONDING FIELDS OF itab
WHERE ebeln = mseg-ebeln.
ENDSELECT.
*
SELECT ebeln belnr refwr budat FROM ekbe INTO CORRESPONDING FIELDS OF
itab
WHERE budat IN s_budat AND
ebeln = mseg-ebeln.
ENDSELECT.
*
SELECT SINGLE matnr FROM marc INTO itab
WHERE matnr = mseg-matnr.
**APPEND itab.
**END-OF-SELECTION.
*----
SELECT matnr ebeln menge bprme bstmg dmbtr FROM mseg INTO
CORRESPONDING FIELDS OF TABLE itab
WHERE matnr IN s_matnr.
*
*
SELECT matnr maktx FROM makt INTO CORRESPONDING FIELDS OF TABLE itab
WHERE matnr = mseg-matnr.
*
SELECT ebeln bedat FROM ekko INTO CORRESPONDING FIELDS OF TABLE itab
WHERE ebeln = mseg-ebeln.
*
SELECT ebeln netwr FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab
WHERE ebeln = mseg-ebeln.
*
SELECT ebeln bprbm FROM rseg INTO CORRESPONDING FIELDS OF TABLE itab
WHERE ebeln = mseg-ebeln.
*
SELECT budat ebeln refwr FROM ekbe INTO CORRESPONDING FIELDS OF TABLE itab
WHERE budat IN s_budat AND
ebeln = mseg-ebeln.
*----
-
select matnr ebeln menge bprme bstmg dmbtr from mseg into corresponding fields of table itab where matnr in s_matnr.
select matnr maktx from makt into corresponding fields of table itab for all entries in itab where matnr = itab-matnr.
select ebeln bedat from ekko into corresponding fields of table itab for all entries in itab where ebeln = itab-ebeln.
select ebeln netwr from ekpo into corresponding fields of table itab for all entries in itab where ebeln = itab-ebeln.
select ebeln bprbm from rseg into corresponding fields of table itab for all entries in itab where ebeln = itab-ebeln.
select budat ebeln refwr from ekbe into corresponding fields of
table itab for all entries in itab
where budat in s_budat and
ebeln = itab-ebeln.
append itab.
&----
perform build_fieldcatlog.
perform display_alv_report.
&----
LOOP AT itab.
*
*WRITE:/ itab-menge, itab-werks, itab-smbln, itab-bstmg, itab-matnr,
*itab-ebeln, itab-lifnr, itab-menge, itab-belnr, itab-refwr, itab-budat.
*
ENDLOOP.
&----
*& Form build_fieldcatlog
&----
text
----
--> p1 text
<-- p2 text
----
form build_fieldcatlog . "Form BUILD_FIELDCATLOG, Start
wa_fieldcat-fieldname = 'maktx'.
wa_fieldcat-seltext_m = 'maktx.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'bedat'.
wa_fieldcat-seltext_m = 'bedat.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'EBELN'.
wa_fieldcat-seltext_m = 'ebeln.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'MENGE'.
wa_fieldcat-seltext_m = 'menge.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'bprme'.
wa_fieldcat-seltext_m = 'bprme.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'netwr'.
wa_fieldcat-seltext_m = 'netwr.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'BSTMG'.
wa_fieldcat-seltext_m = 'bstmg.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'dmbtr'.
wa_fieldcat-seltext_m = 'dmbtr.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'bprbm'.
wa_fieldcat-seltext_m = 'bprbm'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'REFWR'.
wa_fieldcat-seltext_m = 'refwr.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
endform. "build_fieldcatlog
" build_fieldcatlog "Form BUILD_FIELDCATLOG, End
&----
*& Form display_alv_report
&----
text
----
form display_alv_report. "Form DISPLAY_ALV_REPORT, Start
v_repid = sy-repid.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_callback_program = v_repid
it_fieldcat = i_fieldcat[]
i_callback_top_of_page = 'TOP-OF-PAGE'
i_save = 'A'
tables
t_outtab = itab.
endform. "display_alv_report
----
top-of-page.
write:/ 'Purchase request Print program'.
end-of-page.
Thanks & Regards,
Abhay.
09-17-2007 1:16 PM
Hi,
Two things that caugt my eye are
FIELDNAMES in field catalog are in lower case, you need to pass them in UPPER CASE.
Also you are passing itab, may be its good idea to pass itab[ ] as this is a table with header line.
Regards,
Sesh
09-17-2007 1:16 PM
Hi,
first you have to define the fieldcat in capital letters.
wa_fieldcat-fieldname = 'maktx'.
--> MAKTX
regards
09-17-2007 1:22 PM
please correct the fieldcatalog as marked in bold and let us know the results
(fieldnames should be populated in CAPS )
form build_fieldcatlog . "Form BUILD_FIELDCATLOG, Start
wa_fieldcat-fieldname = 'maktx'. " <b>'MAKTX'</b>
wa_fieldcat-seltext_m = 'maktx.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'bedat'. <b>'BEDAT'</b>
wa_fieldcat-seltext_m = 'bedat.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'EBELN'.
wa_fieldcat-seltext_m = 'ebeln.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'MENGE'.
wa_fieldcat-seltext_m = 'menge.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'bprme'<b>.'BPRME'</b>
wa_fieldcat-seltext_m = 'bprme.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'netwr'.'<b>NETWR'</b>
wa_fieldcat-seltext_m = 'netwr.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'BSTMG'.
wa_fieldcat-seltext_m = 'bstmg.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'dmbtr'.'<b>DMBTR'</b>
wa_fieldcat-seltext_m = 'dmbtr.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'bprbm'.'<b>BPRBM'</b>
wa_fieldcat-seltext_m = 'bprbm'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
wa_fieldcat-fieldname = 'REFWR'.
wa_fieldcat-seltext_m = 'refwr.'.
append wa_fieldcat to i_fieldcat.
clear wa_fieldcat.
09-17-2007 1:23 PM
hi Abhay,
select matnr ebeln menge bprme bstmg dmbtr from mseg into corresponding fields of table itab where matnr in s_matnr.
<b>==> the corresponding fields of itab are filled here, OK</b>
select matnr maktx from makt into corresponding fields of table itab for all entries in itab where matnr = itab-matnr.
<b>==> this won't fill the fields you want, you have to loop on the internal table select on each line (not really nice!) or create a JOIN</b>
select ebeln bedat from ekko into corresponding fields of table itab for all entries in itab where ebeln = itab-ebeln.
<b>same like above</b>
select ebeln netwr from ekpo into corresponding fields of table itab for all entries in itab where ebeln = itab-ebeln.
<b>==> same like above</b>
select ebeln bprbm from rseg into corresponding fields of table itab for all entries in itab where ebeln = itab-ebeln.
<b>==> same like above</b>
select budat ebeln refwr from ekbe into corresponding fields of
table itab for all entries in itab
where budat in s_budat and
ebeln = itab-ebeln.
<b>==> same like above</b>
append itab.
<b>==> an empty line will be added to the itab here...</b>
09-17-2007 1:38 PM
here is the changed Select Logic:
field-symbols: <l_itab> type line of itab.
select matnr ebeln menge bprme bstmg dmbtr from mseg into corresponding fields of table itab where matnr in s_matnr.
if sy-subrc = 0.
loop at itab assigning <l_itab>.
select single maktx from makt into <l_itab>-maktx where matnr = <l_itab>-matnr.
select single ekko~ebeln ekko~bedat ekpo~netwr from ekko inner join ekpo
on ekko~ebeln = ekpo~ebeln
into <l_itab>-ebeln <l_itab>-bedat <l_itab>-netwr
where ekpo~MATNR = <l_itab>-MATNR.
* Since u haven't got EBELN before this this is a wrong field comparison
select single budat ebeln refwr from ekbe into corresponding fields of
<L_itab>
where budat in s_budat and
ebeln = <l_itab>-ebeln.
*append itab.
endloop.
endif.
Hope That Helps
Anirban M.
09-17-2007 1:47 PM
HI,
make all the field names while creating fieldcat as capital.
select statements u have to write as below.
SELECT matnr ebeln menge bprme bstmg dmbtr FROM mseg INTO
CORRESPONDING FIELDS OF TABLE itab
WHERE matnr IN s_matnr.
SELECT matnr maktx FROM makt INTO CORRESPONDING FIELDS OF TABLE itab
FOR ALL ENTRIES IN itab WHERE matnr = itab-matnr.
SELECT ebeln bedat FROM ekko INTO CORRESPONDING FIELDS OF TABLE itab
FOR ALL ENTRIES IN itab WHERE ebeln = itab-ebeln.
SELECT ebeln netwr FROM ekpo INTO CORRESPONDING FIELDS OF TABLE itab
FOR ALL ENTRIES IN itab WHERE ebeln = itab-ebeln.
SELECT ebeln bprbm FROM rseg INTO CORRESPONDING FIELDS OF TABLE itab
FOR ALL ENTRIES IN itab WHERE ebeln = itab-ebeln.
SELECT budat ebeln refwr FROM ekbe INTO CORRESPONDING FIELDS OF
TABLE itab FOR ALL ENTRIES IN itab
WHERE budat IN s_budat AND
ebeln = itab-ebeln.
rgds,
bharat.