seit einem halben Tag sitze ich nun an diesem Problem und komme trotz einiger Forumbeiträge zu diesem Thema nicht weiter. Ich habe einen ALV-Grid mit Mehrzeilenselektion über Reuse_Alv_Grid angelegt. Wenn ich mehrere Zeilen selektiere möchte ich diese nachher weiter verarbeiten, dabei ist es zweitrangig ob ich die Zeilen über die Checkbox, oder über die Mehrfachselektion mit der STRG-Taste selektiere. Ich schaffe es aber nicht die selektierten Tasten auszulesen, wenn ich über eine selbst definierte Schaltfläche eine Aktion durchführe. Führe ich hingegen einen Doppelklick, oder eine Standardfunktion von ALV aus sind die mit der Checkbox markierten Zeilen auch in den internen Tabelle zu sehen. Kann sich vielleicht jemand meinen Quellcode anschauen und mir sagen was da eventuell noch fehlt?
Zu dem Quellcode muss lediglich ein Status STATUS definiert werden. Am besten dazu über Zusätze->Vorlage abgleichen den Status STANDARD_FULLSCREEN aus dem Programm SAPLKKBL kopieren und mit einer eigenen Schaltfläche ergänzen.
Wie gesagt, wenn man nun in der ALV-Liste Checkboxen selektiert und die selbst definierte Schaltfläche anklickt sind die Werte im Feld CHECK der internen Tabelle nicht gesetzt, mache ich dagegen einen Doppelklick auf eine Zeile dann schon.
Für einen Lösungsansatz wäre ich sehr, sehr dankbar.
Grüße
Alexander
*&---------------------------------------------------------------------*
*& Report ZLQUA103 *
*& *
*&---------------------------------------------------------------------*
*& Versuch die ZME2 über ALV-Grid abzubilden *
*& *
*&---------------------------------------------------------------------*
REPORT zlqua103 .
* Entnahmebuchungen
* Transportaufträge für erstellen/bearbeiten
TABLES: lqua.
DATA BEGIN OF lquatab OCCURS 50.
INCLUDE STRUCTURE lqua.
DATA: check type c.
DATA END OF lquatab.
*Strukturdefinition für ALV
DATA BEGIN OF tab_outtab_alv OCCURS 50.
INCLUDE STRUCTURE lqua.
DATA: check type c.
DATA END OF tab_outtab_alv.
DATA: parid_lgnum(3) TYPE c VALUE 'LGN',
parid_tanum(3) TYPE c VALUE 'TAN',
parid_tapos(3) TYPE c VALUE 'TAP',
parid_matnr(3) TYPE c VALUE 'MAT',
parid_aufnr(3) TYPE c VALUE 'AFN',
parid_wrknr(3) TYPE c VALUE 'WRK',
parid_lifnr(3) TYPE c VALUE 'VL ',
parid_besnr(3) TYPE c VALUE 'BES',
parid_bwl(3) TYPE c VALUE 'BWL',
parid_stver(3) TYPE c VALUE 'CSV',
parid_charg(3) TYPE c VALUE 'CHA',
parid_qplos(3) TYPE c VALUE 'QLS',
parid_tbnum(3) TYPE c VALUE 'TBN'.
* Pool für ALV Grid
TYPE-POOLS slis.
*Deklarationen für ALV Grid
DATA:
fieldcat TYPE slis_t_fieldcat_alv, "Feldkatalog
wrk_fieldcat_alv LIKE LINE OF fieldcat, "Workarea
g_repid LIKE sy-repid, "Programmname
GT_EVENTS TYPE SLIS_T_EVENT,
check type c.
DATA:
ls_fieldcat TYPE lvc_s_fcat.
* Variablen für die Anzeigevariante
DATA: variante LIKE disvariant,
def_variante LIKE disvariant,
variant_exit(1) TYPE c.
*Selektionsbildschirm
SELECTION-SCREEN BEGIN OF BLOCK lager WITH FRAME TITLE text-001.
SELECT-OPTIONS: matnrs FOR lqua-matnr.
SELECTION-SCREEN END OF BLOCK lager.
* Selektion Anzeigevariante
SELECTION-SCREEN BEGIN OF BLOCK 2 WITH FRAME TITLE text-002.
PARAMETERS: p_vari LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK 2.
* F4-Help for variant
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = variante
i_save = 'A'
* it_default_fieldcat =
IMPORTING
e_exit = variant_exit
es_variant = def_variante
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF variant_exit = space.
p_vari = def_variante-variant.
ENDIF.
ENDIF.
* Interne Tabelle aus LQUA aufbauen und ausgeben
PERFORM lqua_lesen.
*Feldkatalog für ALV aufbauen
PERFORM feldkatalog_aufbauen.
* ALV Listausgabe mit erzeugtem Feldkatalog
* Grid-Titel als Text oder Variable
* t_outtab = interne Tabelle, die ausgebeben werden soll
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_BYPASSING_BUFFER = 'X'
i_buffer_active = 'X'
i_callback_program = g_repid
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = fieldcat[]
it_events = GT_EVENTS[]
* u = User darf Varianten nur für sich oder a = für alle abspeichern
i_save = 'A' "
i_grid_title = 'Ersatz für ZME2'
is_variant = variante
TABLES
t_outtab = lquatab.
*---------------------------------------------------------------------*
* FORM USER_COMMAND *
* Auf Drucktasten reagieren *
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
data: sav_index like sy-tabix. "Index der angeklickten Zeile
*<---an dieser Stelle sollten die Checkboxen in
*LQUATAB-CHECK sichtbar sein, sind sie aber nicht!
CASE rs_selfield-fieldname.
WHEN 'TEXT1'.
* IF NOT rs_selfield-value IS INITIAL.
* SET PARAMETER ID 'LGN' FIELD sav_lgnum.
* SET PARAMETER ID 'UBN' FIELD sav_ubnum.
* CALL TRANSACTION 'LU03' AND SKIP FIRST SCREEN.
* ENDIF.
WHEN 'TEXT2'.
* IF NOT rs_selfield-value IS INITIAL.
* SET PARAMETER ID 'LGN' FIELD sav_lgnum.
* SET PARAMETER ID 'UBN' FIELD sav_ubnum.
* CALL TRANSACTION 'LT05' AND SKIP FIRST SCREEN.
* ENDIF.
ENDCASE.
*Refresh der Tabelle aufrufen
*rs_selfield-refresh = 'X'.
ENDFORM. "USER_COMMAND
*&--------------------------------------------------------------------*
*& Form feldkatalog_aufbauen
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*---------------------------------------------------------------------*
FORM feldkatalog_aufbauen .
*Aufbau eines Feldkataloges aus der internen Tabelle
*Feldkatalog-gerüst aufbauen
g_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = g_repid
i_internal_tabname = 'TAB_OUTTAB_ALV'
i_inclname = g_repid
CHANGING
ct_fieldcat = fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*Ergänzen der fehlenden Texte für die mit Type definierten
*Typen (einer (Short/Middle/Long) reicht aus)
LOOP AT fieldcat INTO wrk_fieldcat_alv.
CASE wrk_fieldcat_alv-fieldname.
when 'CHECK'.
wrk_fieldcat_alv-checkbox = 'X'.
wrk_fieldcat_alv-edit = 'X'.
wrk_fieldcat_alv-seltext_s = 'Check'.
wrk_fieldcat_alv-seltext_m = 'Checkb.'.
wrk_fieldcat_alv-seltext_l = 'Checkbox'.
WHEN OTHERS.
wrk_fieldcat_alv-key = ''.
ENDCASE.
MODIFY fieldcat FROM wrk_fieldcat_alv.
ENDLOOP.
ENDFORM. " feldkatalog_aufbauen
*&---------------------------------------------------------------------*
*& Form set_pf_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STATUS'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form lqua_lesen
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM lqua_lesen.
SELECT * FROM lqua WHERE matnr IN matnrs.
MOVE-CORRESPONDING lqua TO lquatab.
APPEND lquatab.
clear lquatab.
ENDSELECT.
Desaster, ich könnte Dich knuddeln! Vielen vielen Dank, das geht! Was ich an dem blöden Problem gesessen habe, wie soll man aber von alleine auf die Lösung kommen?
Daß der FuBa nicht freigegeben ist soll hier erstmal zweitrangig sein. Ich danke Dir noch ein mal herzlich