Code: Alles auswählen.
FORM cb_alv_user_command
USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
IF r_ucomm = 'DELETE'.
READ TABLE itab into sel_row
INDEX rs_SELFIELD-TABINDEX.
PERFORM delete_entry.
ENDIF.
ENDFORM. "cb_alv_user_command
Folgende Benutzer bedankten sich beim Autor Gast für den Beitrag:
falk
Code: Alles auswählen.
DATA: wa_layout TYPE slis_layout_alv, " Layout für ALV
wa_layout-box_fieldname = '<NAME>'. " fieldname for checkbox
Code: Alles auswählen.
rs_selfield-refresh = 'X'.
Das ganze funktioniert über die Callback-Routinen. Beim ALV-Aufruf wird dem ALV mit geteilt, wie die Routinen heißen, die die Verarbeitung übernehmen. Parammeter I_CALLBACK_USER_COMMAND. Zusätzlich dazu muss noch das rufende Programm mit gegeben werden. Parameter I_CALLBACK_PROGRAM.falk hat geschrieben: - Wo muss das FORM 'cb_alv_user_command ' eingebunden werden?
Du mußt einen eigenen GUI-Status erstellen und in diesem deinenen Button definieren. Um nicht bei Null anzufangen ist es am einfachsten den Standard GUI-Status zu kopieren. Dieser befindet sich in der FuGr SLVC_FULLSCREEN und hat den Namen STANDARD_FULLSCREEN. Das setzten des GUI-Status geht über die Callbackroutine I_CALLBACK_PF_STATUS_SET gesetzt.falk hat geschrieben: - Wie erstelle ich einen Schalter 'BUCHEN' in der Toolbar?
Um auf F3 bzw. Umsch. F3 zu reagieren mußt du den, im GUI-Status hinterlegten Funktionscode ändern, wie es geht s.o. Tipp: nicht die Standardfunktionscode (BACK; etc.) verwenden, diese werden immer von SAP behandelt.falk hat geschrieben: - Wie prozessiere ich die Schalter Zurück (F3) und Beenden (Umsch. F3) korrekt? Im Moment gibt es einen Dump 'Fehler bei Zuweisung: Überschreiben eines geschützten Felds.'.
Dies hat weniger mit dem Zurück/Beenden zutun, sondern mit dem Abbau des ALVs. Da wird dir auch oben skizzierte Möglichkeit nicht helfen. Für die Fehleranalyse bräuchte man aber mehr Infos. Ich würde jetzt tippen, dass das Checkboxfeld in der Ausgabetabelle des ALVs nicht existiert bzw. anders heißt.falk hat geschrieben: Im Moment gibt es einen Dump 'Fehler bei Zuweisung: Überschreiben eines geschützten Felds.
Code: Alles auswählen.
REPORT alv_test.
TYPE-POOLS slis.
TYPES: BEGIN OF t_data,
matnr TYPE matnr,
sel TYPE c,
END OF t_data.
DATA: gt_data TYPE TABLE OF t_data,
gw_data TYPE t_data,
gt_fieldcat TYPE TABLE OF slis_fieldcat_alv,
gw_fieldcat TYPE slis_fieldcat_alv,
gs_layout TYPE slis_layout_alv,
g_program TYPE sy-repid.
**********************************************************************
START-OF-SELECTION.
SELECT matnr
FROM mara
INTO TABLE gt_data
UP TO 100 ROWS.
************************************************************************
END-OF-SELECTION.
* ALV wird aufgebaut.
* Fieldcat
CLEAR gw_fieldcat.
gw_fieldcat-fieldname = 'MATNR'.
gw_fieldcat-ref_fieldname = 'MATNR'.
gw_fieldcat-ref_tabname = 'MARA'.
APPEND gw_fieldcat TO gt_fieldcat.
CLEAR gw_fieldcat.
gw_fieldcat-fieldname = 'SEL'.
* es ist ein technisches Feld, keine Ausgabe
gw_fieldcat-tech = 'X'.
APPEND gw_fieldcat TO gt_fieldcat.
* Layout
gs_layout-box_fieldname = 'SEL'.
* Programname
g_program = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_program
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'I_USER_COMMAND'
is_layout = gs_layout
it_fieldcat = gt_fieldcat
TABLES
t_outtab = gt_data.
**********************************************************************
FORM set_pf_status USING rt_extab.
SET PF-STATUS 'HAUPT' EXCLUDING rt_extab.
ENDFORM. "set_pf_status
*&---------------------------------------------------------------------*
*& Form i_user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM i_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
* Button auswerten
CASE r_ucomm.
WHEN 'BUCHEN'.
LOOP AT gt_data INTO gw_data WHERE sel = 'X'.
* Perform buchen USING gw_data.
ENDLOOP.
* Dem ALV mitteilen, dass sich die Ausgabe verändert hat
rs_selfield-refresh = 'X'.
WHEN 'F03'.
* PERFORM alv_verlassen
* Dem ALV mitteilen, dass Ende ist
rs_selfield-exit = 'X'.
ENDCASE.
ENDFORM. "i_user_command
Damit wird der Name des Feldes aus der Datentabelle dem ALV als Ankreuzfeld bekannt gemacht.falk hat geschrieben:1. gw_fieldcat-fieldname = 'SEL' dient zur Übernahme der Checkbox?!
Nimm die se80 dann die Funktionsgruppe auswählen, den Baum bis zum GUI-Status aufreißen, rechtsklick auf den GUI-Status, kopieren wählen.falk hat geschrieben: 2. Wie kann ich den GUI- Status kopieren? Im Forum fand ich sehr interessante Informationen aber leider keine Anleitung. In der Funktionsgruppe SAPLSLVC_FULLSCREEN (über SE84) sehe ich die einzelnen Drucktasten mit ihren Symbolen aber keine Option zum kopieren.
Im GUI-Status den Punkt Drucktastenleiste aufreißen, neuen Funktionscode eingeben, Enter, mittels PoP-Up Icon etc. zu ordnen, dann evtl. unter Funktionstaste nach eine Tastenkombination dem neuen Funktionscode zuordenen, WICHTIG aktivieren.falk hat geschrieben: 3. Wie kann ich den Button 'Buchen' anlegen?
Natürlich, der GUI-Status wird in deinem Programm verwendet. Du müßtes sonst ein SAP-Objekt modifizieren, was hier völlig unnötig ist.falk hat geschrieben: Soll hier auch der Programmname geändert werden?