Code: Alles auswählen.
Report ZR_AUSW LINE-SIZE 1000 LINE-COUNT 5000.
*--------------------------------------------------------------------*
*Tabellenarbeitsbereich deklarieren*
*--------------------------------------------------------------------*
DATA: wa_mara TYPE MARA,
wa_makt TYPE MAKT,
wa_marc TYPE MARC,
wa_mbew TYPE MBEW.
*--------------------------------------------------------------------*
*Felder deklarieren*
*--------------------------------------------------------------------*
DATA: zeilen_itab01 TYPE i.
*--------------------------------------------------------------------*
*Datentypen für Zeilen deklarieren*
*--------------------------------------------------------------------*
TYPES: BEGIN OF zeile01_typ,
MATNR LIKE MARA-MATNR, "Materialnummer
MATKL LIKE MARA-MATKL, "Warengruppe
PRDHA LIKE MARA-PRDHA, "Produkthirarchie
MTART LIKE MARA-MTART, "Materialart
MSTAE LIKE MARA-MSTAE, "Werksstatus
MAKTX LIKE MAKT-MAKTX, "Materialtext
SPRAS LIKE MAKT-SPRAS, "Sprache
EKGRP LIKE MARC-EKGRP, "Einkäufergruppe
DISPO LIKE MARC-DISPO, "Disponent
MMSTA LIKE MARC-MMSTA, "Materialstatus
NCOST LIKE MARC-NCOST, "Nicht-Kalkulieren häckchen
LOSGR LIKE MARC-LOSGR, "Losgrösse
VPRSV LIKE MBEW-VPRSV, "Preissteuerung S/V
VERPR LIKE MBEW-VERPR, "Gleitender Preis V
STPRS LIKE MBEW-STPRS, "Standartpreis S
HRKFT LIKE MBEW-HRKFT, "Herkunftsgruppe
END OF zeile01_typ.
Data : PREIS(10) type p DECIMALS 2.
*--------------------------------------------------------------------*
*Datentypen für interne Tabellen deklarieren*
*--------------------------------------------------------------------*
TYPES itab01_typ TYPE STANDARD TABLE OF zeile01_typ.
*--------------------------------------------------------------------*
*Interne Tabellen deklarieren ohne Kopfzeile*
*--------------------------------------------------------------------*
DATA itab01 TYPE itab01_typ.
*--------------------------------------------------------------------*
*Workareas für interen Tabellen deklarieren*
*--------------------------------------------------------------------*
DATA wa_itab01 TYPE zeile01_typ.
*--------------------------------------------------------------------*
*Selektionsbild gestalten*
*--------------------------------------------------------------------*
SELECT-OPTIONS: S_MATNR FOR wa_MARA-MATNR.
SELECT-OPTIONS: S_MTART FOR wa_MARA-MTART.
PARAMETERS S_SPRAS TYPE MAKT-SPRAS OBLIGATORY.
PARAMETERS S_WERKS TYPE MARC-WERKS OBLIGATORY.
PARAMETERS S_MSTAE TYPE MARA-MSTAE.
PARAMETERS S_MMSTA TYPE MARC-MMSTA.
*--------------------------------------------------------------------*
*Interne Tabelle itab01 füllen*
*--------------------------------------------------------------------*
START-OF-SELECTION.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE itab01
FROM MARA
JOIN MAKT
ON MAKT~MATNR = MARA~MATNR
AND MAKT~SPRAS = S_SPRAS
JOIN MARC
ON MARC~MATNR = MARA~MATNR
AND MARC~WERKS = S_WERKS
AND MARC~MMSTA EQ S_MMSTA
JOIN MBEW
ON MBEW~MATNR = MARA~MATNR
WHERE MARA~MATNR IN S_MATNR
AND MARA~MTART IN S_MTART
AND MARA~MSTAE = S_MSTAE.
END-OF-SELECTION.
LOOP AT itab01 INTO wa_itab01.
IF wa_itab01-VPRSV = 'V'.
MOVE wa_itab01-VERPR TO PREIS.
ELSE.
MOVE wa_itab01-STPRS TO PREIS.
ENDIF.
WRITE:/ wa_itab01-MATNR, wa_itab01-MAKTX, wa_itab01-PRDHA, wa_itab01-MTART, wa_itab01-MATKL,
wa_itab01-MSTAE, wa_itab01-MMSTA, wa_itab01-DISPO, wa_itab01-EKGRP, wa_itab01-NCOST,
wa_itab01-LOSGR, wa_itab01-HRKFT, wa_itab01-VPRSV, wa_itab01-VERPR, wa_itab01-STPRS,
Preis.
CLEAR PREIS.
ENDLOOP.
Was hindert dich daran die IN-Bedingung für gejointe Tabellen in die WHERE-Bedingung zu schreiben?christof hat geschrieben:Wenn ich nun ein Select-Options bei anderen Tabellen einbaue gibt es eine Fehlermeldung, dass IN bei ON-Bedingungen nicht möglich sind.
Code: Alles auswählen.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE itab01
FROM MARA
JOIN MAKT
ON MAKT~MATNR = MARA~MATNR
WHERE MARA~MATNR IN S_MATNR
AND MARA~MTART IN S_MTART
AND MARA~MSTAE = S_MSTAE
AND MAKT~SPRAS IN S_SPRAS.
Code: Alles auswählen.
Report ZR_AUSW LINE-SIZE 1000 LINE-COUNT 5000.
*--------------------------------------------------------------------*
*Tabellenarbeitsbereich deklarieren*
*--------------------------------------------------------------------*
DATA: wa_mara TYPE MARA,
wa_makt TYPE MAKT,
wa_marc TYPE MARC,
wa_mbew TYPE MBEW.
*--------------------------------------------------------------------*
*Felder deklarieren*
*--------------------------------------------------------------------*
DATA: zeile_itab01 TYPE i.
*--------------------------------------------------------------------*
*Datentypen für Zeilen deklarieren*
*--------------------------------------------------------------------*
TYPES: BEGIN OF zeile01_typ,
MATNR LIKE MARA-MATNR, "Materialnummer
MATKL LIKE MARA-MATKL, "Warengruppe
PRDHA LIKE MARA-PRDHA, "Produkthirarchie
MTART LIKE MARA-MTART, "Materialart
MSTAE LIKE MARA-MSTAE, "Werksstatus
MEINS LIKE MARA-MEINS, "Basismengeneinheit
BRGEW LIKE MARA-BRGEW, "Bruttogewicht
MAKTX LIKE MAKT-MAKTX, "Materialtext
SPRAS LIKE MAKT-SPRAS, "Sprache
BESKZ LIKE MARC-BESKZ, "Beschaffungsart
EKGRP LIKE MARC-EKGRP, "Einkäufergruppe
DISPO LIKE MARC-DISPO, "Disponent
MMSTA LIKE MARC-MMSTA, "Materialstatus
NCOST LIKE MARC-NCOST, "Nicht-Kalkulieren häckchen
LOSGR LIKE MARC-LOSGR, "Losgrösse
BASMG LIKE MARC-BASMG, "Basismenge
DISLS LIKE MARC-DISLS, "Dispolosgrösse
DISMM LIKE MARC-DISMM, "Dispomerkmal
VPRSV LIKE MBEW-VPRSV, "Preissteuerung S/V
VERPR LIKE MBEW-VERPR, "Gleitender Preis V
STPRS LIKE MBEW-STPRS, "Standartpreis S
HRKFT LIKE MBEW-HRKFT, "Herkunftsgruppe
EKALR LIKE MBEW-EKALR, "Mengengerüst
BKLAS LIKE MBEW-BKLAS, "Bewertungsklasse
END OF zeile01_typ.
Data : PREIS(10) type p DECIMALS 2.
*--------------------------------------------------------------------*
*Datentypen für interne Tabellen deklarieren*
*--------------------------------------------------------------------*
TYPES itab01_typ TYPE STANDARD TABLE OF zeile01_typ.
*--------------------------------------------------------------------*
*ALV-GRID aufrufen
*--------------------------------------------------------------------*
DATA: ok_code LIKE sy-ucomm.
DATA: go_grid TYPE REF TO cl_gui_alv_grid,
go_custom_container TYPE REF TO cl_gui_custom_container.
*--------------------------------------------------------------------*
*Interne Tabellen deklarieren ohne Kopfzeile*
*--------------------------------------------------------------------*
DATA itab01 TYPE itab01_typ.
*--------------------------------------------------------------------*
*Workareas für interen Tabellen deklarieren*
*--------------------------------------------------------------------*
DATA wa_itab01 TYPE zeile01_typ.
*--------------------------------------------------------------------*
*Selektionsbild gestalten*
*--------------------------------------------------------------------*
SELECT-OPTIONS: S_MATNR FOR wa_MARA-MATNR.
SELECT-OPTiONS: S_MTART FOR wa_MARA-MTART.
SELECT-OPTIONS: S_MATKL FOR wa_MARA-MATKL.
SELECT-OPTIONS: S_MSTAE FOR wa_MARA-MSTAE.
SELECT-OPTIONS: S_MMSTA FOR wa_MARC-MMSTA.
SELECT-OPTIONS: S_DISPO FOR wa_MARC-DISPO.
SELECT-OPTIONS: S_EKGRP FOR wa_MARC-EKGRP.
SELECT-OPTIONS: S_BESKZ FOR wa_MARC-BESKZ.
SELECT-OPTIONS: S_NCOST FOR wa_MARC-NCOST.
SELECT-OPTIONS: S_VPRSV FOR wa_MBEW-VPRSV.
SELECT-OPTIONS: S_HRKFT FOR wa_MBEW-HRKFT.
PARAMETERS S_SPRAS TYPE MAKT-SPRAS OBLIGATORY.
PARAMETERS S_WERKS TYPE MARC-WERKS OBLIGATORY.
*--------------------------------------------------------------------*
*Interne Tabelle itab01 füllen*
*--------------------------------------------------------------------*
START-OF-SELECTION.
SET SCREEN '100'.
END-OF-SELECTION.
LOOP AT itab01 INTO wa_itab01.
IF wa_itab01-VPRSV = 'V'.
MOVE wa_itab01-VERPR TO PREIS.
ELSE.
MOVE wa_itab01-STPRS TO PREIS.
ENDIF.
WRITE:/
wa_itab01-MATNR,
wa_itab01-MAKTX,
wa_itab01-PRDHA,
wa_itab01-MTART,
wa_itab01-MATKL,
wa_itab01-MSTAE,
wa_itab01-MMSTA,
wa_itab01-BESKZ,
wa_itab01-DISPO,
wa_itab01-EKGRP,
wa_itab01-DISLS,
wa_itab01-DISMM,
wa_itab01-NCOST,
wa_itab01-LOSGR,
wa_itab01-HRKFT,
wa_itab01-VPRSV,
wa_itab01-VERPR,
wa_itab01-STPRS,
Preis,
wa_itab01-EKALR,
wa_itab01-BASMG,
wa_itab01-MEINS,
wa_itab01-BKLAS,
wa_itab01-BRGEW.
CLEAR PREIS.
ENDLOOP.
*---------------------------------------------------------------------*
*Module STATUS_0100 ausgeben
*---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'.
* SET TITLEBAR 'xxx'.
IF go_custom_container IS INITIAL.
CREATE OBJECT go_custom_container
EXPORTING
container_name = 'ALV_CONTAINER'.
CREATE OBJECT go_grid
EXPORTING
i_parent = go_custom_container.
PERFORM load_data_into_grid.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE ok_code.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
ENDCASE.
CLEAR ok_code.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form LOAD_DATA_INTO_GRID
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM LOAD_DATA_INTO_GRID.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE itab01
FROM MARA
JOIN MAKT
ON MAKT~MATNR = MARA~MATNR
AND MAKT~SPRAS = S_SPRAS
JOIN MARC
ON MARC~MATNR = MARA~MATNR
AND MARC~WERKS = S_WERKS
JOIN MBEW
ON MBEW~MATNR = MARA~MATNR
WHERE MARA~MATNR IN S_MATNR
AND MARA~MTART IN S_MTART
AND MARA~MATKL IN S_MATKL
AND MARA~MSTAE IN S_MSTAE
AND MARC~MMSTA IN S_MMSTA
AND MARC~DISPO IN S_DISPO
AND MARC~EKGRP IN S_EKGRP
AND MARC~NCOST IN S_NCOST
AND MARC~BESKZ IN S_BESKZ
AND MBEW~VPRSV IN S_VPRSV
AND MBEW~HRKFT IN S_HRKFT.
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'itab01'
CHANGING
it_outtab = itab01.
ENDFORM. " LOAD_DATA_INTO_GRID
END-OF-SELECTION.
Code: Alles auswählen.
CALL METHOD go_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'itab01'
CHANGING
it_outtab = itab01.
Code: Alles auswählen.
Report ZR_AUSW LINE-SIZE 1000 LINE-COUNT 5000.
DATA: wa_mara TYPE mara,
wa_makt TYPE makt,
wa_marc TYPE marc,
wa_mbew TYPE mbew.
DATA: zeile_itab01 TYPE i.
TYPES: BEGIN OF zeile01_typ,
matnr LIKE mara-matnr, "Materialnummer
matkl LIKE mara-matkl, "Warengruppe
prdha LIKE mara-prdha, "Produkthirarchie
mtart LIKE mara-mtart, "Materialart
mstae LIKE mara-mstae, "Werksstatus
meins LIKE mara-meins, "Basismengeneinheit
brgew LIKE mara-brgew, "Bruttogewicht
maktx LIKE makt-maktx, "Materialtext
spras LIKE makt-spras, "Sprache
beskz LIKE marc-beskz, "Beschaffungsart
ekgrp LIKE marc-ekgrp, "Einkäufergruppe
dispo LIKE marc-dispo, "Disponent
mmsta LIKE marc-mmsta, "Materialstatus
ncost LIKE marc-ncost, "Nicht-Kalkulieren häckchen
losgr LIKE marc-losgr, "Losgrösse
basmg LIKE marc-basmg, "Basismenge
disls LIKE marc-disls, "Dispolosgrösse
dismm LIKE marc-dismm, "Dispomerkmal
vprsv LIKE mbew-vprsv, "Preissteuerung S/V
verpr LIKE mbew-verpr, "Gleitender Preis V
stprs LIKE mbew-stprs, "Standartpreis S
hrkft LIKE mbew-hrkft, "Herkunftsgruppe
ekalr LIKE mbew-ekalr, "Mengengerüst
bklas LIKE mbew-bklas, "Bewertungsklasse
END OF zeile01_typ.
DATA : preis(10) TYPE p DECIMALS 2.
TYPES itab01_typ TYPE STANDARD TABLE OF zeile01_typ.
DATA: ok_code LIKE sy-ucomm.
DATA: go_custom_container TYPE REF TO cl_gui_custom_container,
gcl_alv TYPE REF TO cl_salv_table. "ALV
DATA itab01 TYPE itab01_typ.
DATA wa_itab01 TYPE zeile01_typ.
SELECT-OPTIONS: s_matnr FOR wa_mara-matnr.
SELECT-OPTIONS: s_mtart FOR wa_mara-mtart.
SELECT-OPTIONS: s_matkl FOR wa_mara-matkl.
SELECT-OPTIONS: s_mstae FOR wa_mara-mstae.
SELECT-OPTIONS: s_mmsta FOR wa_marc-mmsta.
SELECT-OPTIONS: s_dispo FOR wa_marc-dispo.
SELECT-OPTIONS: s_ekgrp FOR wa_marc-ekgrp.
SELECT-OPTIONS: s_beskz FOR wa_marc-beskz.
SELECT-OPTIONS: s_ncost FOR wa_marc-ncost.
SELECT-OPTIONS: s_vprsv FOR wa_mbew-vprsv.
SELECT-OPTIONS: s_hrkft FOR wa_mbew-hrkft.
PARAMETERS s_spras TYPE makt-spras OBLIGATORY.
PARAMETERS s_werks TYPE marc-werks OBLIGATORY.
"Programm starten
START-OF-SELECTION.
CALL SCREEN '100'.
**----------------------------------------------------------------------*
** MODULE status_0100 OUTPUT
**----------------------------------------------------------------------*
**
**----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS_0100'.
* set titlebar 'xxx'.
"Daten auslesen
PERFORM read_data.
IF go_custom_container IS INITIAL.
CREATE OBJECT go_custom_container
EXPORTING
container_name = 'ALV_CONTAINER'.
TRY.
cl_salv_table=>factory( EXPORTING list_display = abap_false
r_container = go_custom_container
IMPORTING r_salv_table = gcl_alv
CHANGING t_table = itab01[] ).
CATCH cx_salv_msg.
EXIT.
ENDTRY.
DATA: ls_lay_key TYPE salv_s_layout_key,
lt_cols TYPE salv_t_column_ref,
ls_cols TYPE salv_s_column_ref,
lcl_col TYPE REF TO cl_salv_columns_table,
lcl_disp TYPE REF TO cl_salv_display_settings,
lcl_func TYPE REF TO cl_salv_functions,
lcl_sel TYPE REF TO cl_salv_selections,
lcl_lay TYPE REF TO cl_salv_layout.
* Layouteinstellungen
lcl_lay = gcl_alv->get_layout( ).
ls_lay_key-report = sy-cprog.
* Spalten holen (für Spalteneigenschaften )
lcl_col = gcl_alv->get_columns( ).
lt_cols = lcl_col->get( ).
* Spaltenoptimierung
lcl_col->set_optimize( value = cl_salv_functions=>true ).
* Eigenschaften der ALV (für gesamte Liste)
lcl_disp = gcl_alv->get_display_settings( ).
lcl_disp->set_striped_pattern( cl_salv_display_settings=>true ).
gcl_alv->display( ).
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*----------------------------------------------------------------------*
* MODULE user_command_0100 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
ENDCASE.
CLEAR ok_code.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form load_data_into_grid
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM read_data.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE itab01
FROM mara
JOIN makt
ON makt~matnr = mara~matnr
AND makt~spras = s_spras
JOIN marc
ON marc~matnr = mara~matnr
AND marc~werks = s_werks
JOIN mbew
ON mbew~matnr = mara~matnr
WHERE mara~matnr IN s_matnr
AND mara~mtart IN s_mtart
AND mara~matkl IN s_matkl
AND mara~mstae IN s_mstae
AND marc~mmsta IN s_mmsta
AND marc~dispo IN s_dispo
AND marc~ekgrp IN s_ekgrp
AND marc~ncost IN s_ncost
AND marc~beskz IN s_beskz
AND mbew~vprsv IN s_vprsv
AND mbew~hrkft IN s_hrkft.
ENDFORM. " LOAD_DATA_INTO_GRID
Jachristof hat geschrieben:Vielen Dank
Ist es richtig das itab01[] ) durch itab01[];[]; ) ersetzt werden muss.
Also [ ] sind eckige Klammer auf und eckige Klammer zu?
Vielen Dank
Code: Alles auswählen.
FORM f4_alv_variant CHANGING p_variant LIKE ITAB01.
DATA: l_layout TYPE disvariant.
l_layout-report = sy-repid.
l_layout-handle = '0001'.
l_layout-username = sy-uname.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = l_layout
i_save = 'A'
IMPORTING
es_variant = l_layout
EXCEPTIONS
not_found = 1
program_error = 2
OTHERS = 3.
CHECK sy-subrc = 0.
p_variant = p_variant.
ENDFORM. " f4_alv_variant