Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Ecoman68
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Ecoman68
Folgende Benutzer bedankten sich beim Autor jensschladitz für den Beitrag:
Ecoman68
Code: Alles auswählen.
PROCESS BEFORE OUTPUT.
MODULE clear_ok_code.
MODULE status_0100.
MODULE display_alv.
PROCESS AFTER INPUT.
MODULE user_command_0100.
Code: Alles auswählen.
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS'.
SET TITLEBAR 'DEMO'.
ENDMODULE.
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report ZTT_ALV_MOVE_TEST
*&
*&---------------------------------------------------------------------*
REPORT ztt_alv_move_test.
*--- Daten-Definitionen:
CLASS alv_events DEFINITION DEFERRED.
TYPES: BEGIN OF gty_s_demotab,
folge_org TYPE i,
folge_neu TYPE i,
END OF gty_s_demotab.
DATA: gt_demotab TYPE TABLE OF gty_s_demotab,
gs_demotab LIKE LINE OF gt_demotab,
gs_demotab2 LIKE LINE OF gt_demotab,
go_alv_grid TYPE REF TO cl_gui_alv_grid,
gt_field_cat TYPE lvc_t_fcat,
gs_field_cat TYPE lvc_s_fcat,
gt_field_cat_slis TYPE slis_t_fieldcat_alv,
gs_field_cat_slis TYPE slis_fieldcat_alv,
gs_field_cat_stbl TYPE lvc_s_stbl,
go_alv_events TYPE REF TO alv_events,
ok_code LIKE sy-ucomm,
gv_zaehler TYPE i.
FIELD-SYMBOLS:
<feld> TYPE any,
<wa> TYPE any.
*----------------------------------------------------------------------*
* CLASS alv_dragdrop_data DEFINITION
*----------------------------------------------------------------------*
CLASS alv_dragdrop_data DEFINITION.
PUBLIC SECTION.
DATA: gs_selected_rowno TYPE lvc_s_roid,
gs_selected_rows TYPE lvc_t_row.
ENDCLASS. "alv_dragdrop_data DEFINITION
*----------------------------------------------------------------------*
* CLASS alv_events DEFINITION
*----------------------------------------------------------------------*
CLASS alv_events DEFINITION.
PUBLIC SECTION.
METHODS:
*--- Datenänderungen behandeln:
handle_data_changed
FOR EVENT data_changed
OF cl_gui_alv_grid
IMPORTING er_data_changed sender,
*--- Zelle wird verschoben (ondrag):
on_drag
FOR EVENT ondrag
OF cl_gui_alv_grid
IMPORTING e_column es_row_no e_dragdropobj,
*--- Zelle wird losgelassen (ondrop):
on_drop
FOR EVENT ondrop
OF cl_gui_alv_grid
IMPORTING e_column es_row_no e_dragdropobj.
ENDCLASS. "alv_events DEFINITION
*----------------------------------------------------------------------*
* CLASS alv_events IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS alv_events IMPLEMENTATION.
METHOD handle_data_changed.
DATA: ls_good TYPE lvc_s_modi.
LOOP AT er_data_changed->mt_good_cells INTO ls_good.
READ TABLE gt_demotab ASSIGNING <wa> INDEX ls_good-row_id.
IF sy-subrc = 0.
ASSIGN COMPONENT ls_good-fieldname OF STRUCTURE <wa> TO <feld>.
IF sy-subrc = 0.
<feld> = ls_good-value.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD. "handle_data_changed
*--- Zelle wird verschoben (ondrag):
METHOD on_drag.
DATA: lo_dragdrop_data TYPE REF TO alv_dragdrop_data,
lt_sel_rows TYPE lvc_t_row.
CLEAR:
lt_sel_rows.
go_alv_grid->get_selected_rows(
IMPORTING
et_index_rows = lt_sel_rows
).
CREATE OBJECT lo_dragdrop_data.
"Aktuell Zeilennummer merken:
lo_dragdrop_data->gs_selected_rowno = es_row_no.
"Aktuell selektierte Zeilen merken:
lo_dragdrop_data->gs_selected_rows = lt_sel_rows.
"Objekt übergeben:
e_dragdropobj->object = lo_dragdrop_data.
ENDMETHOD. "on_drag
*--- Zelle wird losgelassen (ondrop):
METHOD on_drop.
DATA: lo_dragdrop_data TYPE REF TO alv_dragdrop_data,
ls_stable TYPE lvc_s_stbl,
lt_rows TYPE lvc_t_row,
ls_rows LIKE LINE OF lt_rows,
lt_rowno TYPE lvc_t_roid,
lt_demotab TYPE TABLE OF gty_s_demotab,
ls_demotab LIKE LINE OF lt_demotab.
CLEAR:
lt_rows,
lt_rowno,
lt_demotab,
gs_demotab,
gs_demotab2.
"Objekt übernehmen:
lo_dragdrop_data ?= e_dragdropobj->object.
"Selektierte Zeilen übernehmen:
lt_rows = lo_dragdrop_data->gs_selected_rows.
"Den neuen Reihenfolgewert der Zielzeile ermitteln:
READ TABLE gt_demotab INTO gs_demotab2 INDEX es_row_no-row_id.
"Markierte Zeilen absteigend sortieren:
SORT lt_rows BY index DESCENDING.
"Zu verschiebende Zeilen merken:
LOOP AT lt_rows INTO ls_rows.
* READ TABLE gt_auftraege INTO gs_auftraege INDEX lo_dragdrop_data->gs_selected_rowno-row_id.
READ TABLE gt_demotab INTO gs_demotab INDEX ls_rows-index.
"Folgewert übernehmen:
gs_demotab-folge_neu = gs_demotab2-folge_neu.
"Markierte Zeile merken:
APPEND gs_demotab TO lt_demotab.
"Markierte Zeile löschen:
DELETE gt_demotab INDEX ls_rows-index.
ENDLOOP.
LOOP AT lt_demotab INTO ls_demotab.
INSERT ls_demotab INTO gt_demotab INDEX es_row_no-row_id.
ENDLOOP.
ls_stable-col = abap_true.
ls_stable-row = abap_true.
go_alv_grid->refresh_table_display(
EXPORTING
is_stable = ls_stable " zeilen-/spaltenstabil
).
"Zielzeile markieren:
APPEND es_row_no TO lt_rowno.
go_alv_grid->set_selected_rows(
EXPORTING
it_row_no = lt_rowno " Numerische ZeilenIDs
).
ENDMETHOD. "on_drop
ENDCLASS. "alv_events IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form alv_dragdrop_prepare
*&---------------------------------------------------------------------*
* -->CS_LAYOUT text
*----------------------------------------------------------------------*
FORM alv_dragdrop_prepare CHANGING cs_layout TYPE lvc_s_layo.
DATA lo_behaviour TYPE REF TO cl_dragdrop.
DATA: lv_effect TYPE i,
lv_handle TYPE i.
lv_effect = cl_dragdrop=>move. "Verschieben
CREATE OBJECT lo_behaviour.
CALL METHOD lo_behaviour->add
EXPORTING
flavor = 'LINEFLAVOR'
dragsrc = 'X'
droptarget = 'X'
effect = lv_effect
EXCEPTIONS
already_defined = 1
obj_invalid = 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.
CALL METHOD lo_behaviour->get_handle
IMPORTING
handle = lv_handle
EXCEPTIONS
obj_invalid = 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.
cs_layout-s_dragdrop-row_ddid = lv_handle.
ENDFORM. "alv_dragdrop_prepare
*----------------------------------------------------------------------*
* MODULE status_0100 OUTPUT
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS'.
SET TITLEBAR 'DEMO'.
ENDMODULE. " STATUS_0100 OUTPUT
*----------------------------------------------------------------------*
* MODULE clear_ok_code OUTPUT
*----------------------------------------------------------------------*
MODULE clear_ok_code OUTPUT.
CLEAR ok_code.
ENDMODULE. " CLEAR_OK_CODE OUTPUT
*----------------------------------------------------------------------*
* MODULE display_alv OUTPUT
*----------------------------------------------------------------------*
MODULE display_alv OUTPUT.
IF go_alv_grid IS INITIAL AND sy-batch IS INITIAL.
CREATE OBJECT go_alv_grid
EXPORTING
i_parent = cl_gui_container=>screen0
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL METHOD go_alv_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD go_alv_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CREATE OBJECT go_alv_events.
SET HANDLER go_alv_events->handle_data_changed FOR go_alv_grid ACTIVATION abap_true.
SET HANDLER go_alv_events->on_drag FOR go_alv_grid ACTIVATION abap_true.
SET HANDLER go_alv_events->on_drop FOR go_alv_grid ACTIVATION abap_true.
PERFORM alv_first_display.
ELSE.
gs_field_cat_stbl-row = 'X'.
CALL METHOD go_alv_grid->refresh_table_display
EXPORTING
is_stable = gs_field_cat_stbl.
ENDIF.
ENDMODULE. "display_alv OUTPUT
*&---------------------------------------------------------------------*
*& Form alv_first_display
*&---------------------------------------------------------------------*
FORM alv_first_display .
DATA: ls_variant TYPE disvariant,
ls_layout TYPE lvc_s_layo,
lt_exclude TYPE ui_functions.
CLEAR: gs_field_cat,
gt_field_cat.
PERFORM create_fieldcat USING gs_demotab
CHANGING gs_field_cat
gt_field_cat.
LOOP AT gt_field_cat INTO gs_field_cat.
CASE gs_field_cat-fieldname.
WHEN 'FOLGE_ORG'.
gs_field_cat-scrtext_s = 'Org Folge'. "feldbezeichner s
MODIFY gt_field_cat FROM gs_field_cat.
WHEN 'FOLGE_NEU'.
gs_field_cat-scrtext_s = 'Neue Folge'. "feldbezeichner s
gs_field_cat-edit = 'X'. "editierbar
MODIFY gt_field_cat FROM gs_field_cat.
ENDCASE.
ENDLOOP.
ls_variant-report = sy-cprog.
ls_layout-grid_title = 'Demotabelle'.
ls_layout-sel_mode = 'A'.
*--- ALV-Drag & Drop Option nutzen:
PERFORM alv_dragdrop_prepare CHANGING ls_layout.
*--- ALV-Grid anzeigen:
CALL METHOD go_alv_grid->set_table_for_first_display
EXPORTING
i_bypassing_buffer = 'X'
is_variant = ls_variant
i_save = 'A'
is_layout = ls_layout
it_toolbar_excluding = lt_exclude
CHANGING
it_outtab = gt_demotab
it_fieldcatalog = gt_field_cat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
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. "alv_first_display
*&---------------------------------------------------------------------*
*& Form create_fieldcat
*&---------------------------------------------------------------------*
* -->LS_STRUCTURE text
* -->LS_FIELDCAT text
* -->LT_FIELDCAT text
*----------------------------------------------------------------------*
FORM create_fieldcat USING ls_structure
CHANGING ls_fieldcat TYPE lvc_s_fcat
lt_fieldcat TYPE lvc_t_fcat.
DATA: ref_structdescr TYPE REF TO cl_abap_structdescr,
lt_fields TYPE ddfields.
DATA: lv_col_i TYPE i VALUE 0.
FIELD-SYMBOLS: <fs_fields> TYPE LINE OF ddfields.
ref_structdescr ?= cl_abap_structdescr=>describe_by_data(
p_data = ls_structure
).
CALL METHOD cl_salv_data_descr=>read_structdescr
EXPORTING
r_structdescr = ref_structdescr
RECEIVING
t_dfies = lt_fields.
LOOP AT lt_fields ASSIGNING <fs_fields>.
CLEAR ls_fieldcat.
ADD 1 TO lv_col_i.
ls_fieldcat-col_pos = lv_col_i. "spaltenposition
ls_fieldcat-fieldname = <fs_fields>-fieldname. "Feldname
ls_fieldcat-tabname = <fs_fields>-tabname. "LVC-Tabname ?
ls_fieldcat-scrtext_l = <fs_fields>-scrtext_l. "feldbezeichner L
ls_fieldcat-scrtext_m = <fs_fields>-scrtext_m. "feldbezeichner M
ls_fieldcat-scrtext_s = <fs_fields>-scrtext_s. "feldbezeichner s
ls_fieldcat-ref_field = <fs_fields>-reffield. "referenzfeld
ls_fieldcat-ref_table = <fs_fields>-reftable. "referenztabelle
ls_fieldcat-intlen = <fs_fields>-intlen. "interne länge
ls_fieldcat-inttype = <fs_fields>-inttype. "interner datentyp
ls_fieldcat-lowercase = <fs_fields>-lowercase. "kleinschreiben j/n
ls_fieldcat-outputlen = <fs_fields>-outputlen. "ausgabelänge
ls_fieldcat-decimals_o = <fs_fields>-decimals. "ausgabedezimalstelln
ls_fieldcat-convexit = <fs_fields>-convexit. "konvertierunlsroutin
ls_fieldcat-decimals = <fs_fields>-decimals. "anzahl dezimalstelle
ls_fieldcat-reptext = <fs_fields>-reptext. "
ls_fieldcat-rollname = <fs_fields>-rollname. "Datenelement für F1
ls_fieldcat-domname = <fs_fields>-domname. "Name der Domäne
ls_fieldcat-datatype = <fs_fields>-datatype. "DictionaryDatentyp
ls_fieldcat-mac = <fs_fields>-mac. "suchhilfe j/n
ls_fieldcat-f4availabl = <fs_fields>-f4availabl. "F4 hilfe j/n
ls_fieldcat-checktable = <fs_fields>-checktable. "?????
ls_fieldcat-col_opt = abap_false. "Spaltenoptimierung *X/''.,
APPEND ls_fieldcat TO lt_fieldcat.
ENDLOOP.
ENDFORM. "create_fieldcat
*--- Process after input (PAI) Modul:
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'EXIT'.
SET SCREEN 0.
ENDCASE.
ENDMODULE. "user_command_0100 INPUT
*--- Programmstart ----------------------------------------------------
START-OF-SELECTION.
gv_zaehler = 0.
DO 10 TIMES.
ADD 1 TO gv_zaehler.
gs_demotab-folge_org = gv_zaehler.
gs_demotab-folge_neu = gv_zaehler.
APPEND gs_demotab TO gt_demotab.
ENDDO.
CALL SCREEN 100.
Folgende Benutzer bedankten sich beim Autor jensschladitz für den Beitrag:
Ecoman68
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Report ZTT_ALV_MOVE_TEST
*&
*&---------------------------------------------------------------------*
REPORT ztt_alv_move_test.
*--- Daten-Definitionen:
CLASS alv_events DEFINITION DEFERRED.
TYPES: BEGIN OF gty_s_demotab,
folge_org TYPE i,
folge_neu TYPE i,
END OF gty_s_demotab.
DATA: gt_demotab TYPE TABLE OF gty_s_demotab,
gs_demotab LIKE LINE OF gt_demotab,
gs_demotab2 LIKE LINE OF gt_demotab,
go_alv_grid TYPE REF TO cl_gui_alv_grid,
gt_field_cat TYPE lvc_t_fcat,
gs_field_cat TYPE lvc_s_fcat,
gt_field_cat_slis TYPE slis_t_fieldcat_alv,
gs_field_cat_slis TYPE slis_fieldcat_alv,
gs_field_cat_stbl TYPE lvc_s_stbl,
go_alv_events TYPE REF TO alv_events,
ok_code LIKE sy-ucomm,
gv_zaehler TYPE i.
FIELD-SYMBOLS:
<feld> TYPE any,
<wa> TYPE any.
*----------------------------------------------------------------------*
* CLASS alv_dragdrop_data DEFINITION
*----------------------------------------------------------------------*
CLASS alv_dragdrop_data DEFINITION.
PUBLIC SECTION.
DATA: gs_selected_rowno TYPE lvc_s_roid,
gs_selected_rows TYPE lvc_t_row.
ENDCLASS. "alv_dragdrop_data DEFINITION
*----------------------------------------------------------------------*
* CLASS alv_events DEFINITION
*----------------------------------------------------------------------*
CLASS alv_events DEFINITION.
PUBLIC SECTION.
METHODS:
*--- Datenänderungen behandeln:
handle_data_changed
FOR EVENT data_changed
OF cl_gui_alv_grid
IMPORTING er_data_changed sender,
*--- Zelle wird verschoben (ondrag):
on_drag
FOR EVENT ondrag
OF cl_gui_alv_grid
IMPORTING e_column es_row_no e_dragdropobj,
*--- Zelle wird losgelassen (ondrop):
on_drop
FOR EVENT ondrop
OF cl_gui_alv_grid
IMPORTING e_column es_row_no e_dragdropobj,
on_drop_complete
FOR EVENT ondropcomplete
OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no e_dragdropobj.
ENDCLASS. "alv_events DEFINITION
*----------------------------------------------------------------------*
* CLASS alv_events IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS alv_events IMPLEMENTATION.
METHOD handle_data_changed.
DATA: ls_good TYPE lvc_s_modi.
LOOP AT er_data_changed->mt_good_cells INTO ls_good.
READ TABLE gt_demotab ASSIGNING <wa> INDEX ls_good-row_id.
IF sy-subrc = 0.
ASSIGN COMPONENT ls_good-fieldname OF STRUCTURE <wa> TO <feld>.
IF sy-subrc = 0.
<feld> = ls_good-value.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD. "handle_data_changed
*--- Zelle wird verschoben (ondrag):
METHOD on_drag.
DATA: lo_dragdrop_data TYPE REF TO alv_dragdrop_data,
lt_sel_rows TYPE lvc_t_row.
CLEAR:
lt_sel_rows.
go_alv_grid->get_selected_rows(
IMPORTING
et_index_rows = lt_sel_rows
).
CREATE OBJECT lo_dragdrop_data.
"Aktuell Zeilennummer merken:
lo_dragdrop_data->gs_selected_rowno = es_row_no.
"Aktuell selektierte Zeilen merken:
lo_dragdrop_data->gs_selected_rows = lt_sel_rows.
"Objekt übergeben:
e_dragdropobj->object = lo_dragdrop_data.
ENDMETHOD. "on_drag
*--- Zelle wird losgelassen (ondrop):
METHOD on_drop.
DATA: lo_dragdrop_data TYPE REF TO alv_dragdrop_data,
ls_stable TYPE lvc_s_stbl,
lt_rows TYPE lvc_t_row,
ls_rows LIKE LINE OF lt_rows,
lt_rowno TYPE lvc_t_roid,
lt_demotab TYPE TABLE OF gty_s_demotab,
ls_demotab LIKE LINE OF lt_demotab.
CLEAR:
lt_rows,
lt_rowno,
lt_demotab,
gs_demotab,
gs_demotab2.
"Objekt übernehmen:
lo_dragdrop_data ?= e_dragdropobj->object.
"Selektierte Zeilen übernehmen:
lt_rows = lo_dragdrop_data->gs_selected_rows.
"Den neuen Reihenfolgewert der Zielzeile ermitteln:
READ TABLE gt_demotab INTO gs_demotab2 INDEX es_row_no-row_id.
"Markierte Zeilen absteigend sortieren:
SORT lt_rows BY index DESCENDING.
"Zu verschiebende Zeilen merken:
LOOP AT lt_rows INTO ls_rows.
* READ TABLE gt_auftraege INTO gs_auftraege INDEX lo_dragdrop_data->gs_selected_rowno-row_id.
READ TABLE gt_demotab INTO gs_demotab INDEX ls_rows-index.
"Folgewert übernehmen:
gs_demotab-folge_neu = gs_demotab2-folge_neu.
"Markierte Zeile merken:
APPEND gs_demotab TO lt_demotab.
"Markierte Zeile löschen:
DELETE gt_demotab INDEX ls_rows-index.
ENDLOOP.
LOOP AT lt_demotab INTO ls_demotab.
INSERT ls_demotab INTO gt_demotab INDEX es_row_no-row_id.
ENDLOOP.
ls_stable-col = abap_true.
ls_stable-row = abap_true.
go_alv_grid->refresh_table_display(
EXPORTING
is_stable = ls_stable " zeilen-/spaltenstabil
).
"Zielzeile markieren:
APPEND es_row_no TO lt_rowno.
go_alv_grid->set_selected_rows(
EXPORTING
it_row_no = lt_rowno " Numerische ZeilenIDs
).
ENDMETHOD. "on_drop
METHOD on_drop_complete.
DATA: lo_dragdrop_data TYPE REF TO alv_dragdrop_data.
"Objekt übernehmen:
lo_dragdrop_data ?= e_dragdropobj->object.
ENDMETHOD. "on_drop_complete
ENDCLASS. "alv_events IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form alv_dragdrop_prepare
*&---------------------------------------------------------------------*
* -->CS_LAYOUT text
*----------------------------------------------------------------------*
FORM alv_dragdrop_prepare CHANGING cs_layout TYPE lvc_s_layo.
DATA lo_behaviour TYPE REF TO cl_dragdrop.
DATA: lv_effect TYPE i,
lv_handle TYPE i.
lv_effect = cl_dragdrop=>move. "Verschieben
CREATE OBJECT lo_behaviour.
CALL METHOD lo_behaviour->add
EXPORTING
flavor = 'LINEFLAVOR'
dragsrc = 'X'
droptarget = 'X'
effect = lv_effect
EXCEPTIONS
already_defined = 1
obj_invalid = 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.
CALL METHOD lo_behaviour->get_handle
IMPORTING
handle = lv_handle
EXCEPTIONS
obj_invalid = 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.
cs_layout-s_dragdrop-row_ddid = lv_handle.
ENDFORM. "alv_dragdrop_prepare
*----------------------------------------------------------------------*
* MODULE status_0100 OUTPUT
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS'.
SET TITLEBAR 'DEMO'.
ENDMODULE. " STATUS_0100 OUTPUT
*----------------------------------------------------------------------*
* MODULE clear_ok_code OUTPUT
*----------------------------------------------------------------------*
MODULE clear_ok_code OUTPUT.
CLEAR ok_code.
ENDMODULE. " CLEAR_OK_CODE OUTPUT
*----------------------------------------------------------------------*
* MODULE display_alv OUTPUT
*----------------------------------------------------------------------*
MODULE display_alv OUTPUT.
IF go_alv_grid IS INITIAL AND sy-batch IS INITIAL.
CREATE OBJECT go_alv_grid
EXPORTING
i_parent = cl_gui_container=>screen0
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL METHOD go_alv_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD go_alv_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
CREATE OBJECT go_alv_events.
SET HANDLER go_alv_events->handle_data_changed FOR go_alv_grid ACTIVATION abap_true.
SET HANDLER go_alv_events->on_drag FOR go_alv_grid ACTIVATION abap_true.
SET HANDLER go_alv_events->on_drop FOR go_alv_grid ACTIVATION abap_true.
SET HANDLER go_alv_events->on_drop_complete FOR go_alv_grid ACTIVATION abap_true.
PERFORM alv_first_display.
ELSE.
gs_field_cat_stbl-row = 'X'.
CALL METHOD go_alv_grid->refresh_table_display
EXPORTING
is_stable = gs_field_cat_stbl.
ENDIF.
ENDMODULE. "display_alv OUTPUT
*&---------------------------------------------------------------------*
*& Form alv_first_display
*&---------------------------------------------------------------------*
FORM alv_first_display .
DATA: ls_variant TYPE disvariant,
ls_layout TYPE lvc_s_layo,
lt_exclude TYPE ui_functions.
CLEAR: gs_field_cat,
gt_field_cat.
PERFORM create_fieldcat USING gs_demotab
CHANGING gs_field_cat
gt_field_cat.
LOOP AT gt_field_cat INTO gs_field_cat.
CASE gs_field_cat-fieldname.
WHEN 'FOLGE_ORG'.
gs_field_cat-scrtext_s = 'Org Folge'. "feldbezeichner s
MODIFY gt_field_cat FROM gs_field_cat.
WHEN 'FOLGE_NEU'.
gs_field_cat-scrtext_s = 'Neue Folge'. "feldbezeichner s
gs_field_cat-edit = 'X'. "editierbar
MODIFY gt_field_cat FROM gs_field_cat.
ENDCASE.
ENDLOOP.
ls_variant-report = sy-cprog.
ls_layout-grid_title = 'Demotabelle'.
ls_layout-sel_mode = 'A'.
*--- ALV-Drag & Drop Option nutzen:
PERFORM alv_dragdrop_prepare CHANGING ls_layout.
*--- ALV-Grid anzeigen:
CALL METHOD go_alv_grid->set_table_for_first_display
EXPORTING
i_bypassing_buffer = 'X'
is_variant = ls_variant
i_save = 'A'
is_layout = ls_layout
it_toolbar_excluding = lt_exclude
CHANGING
it_outtab = gt_demotab
it_fieldcatalog = gt_field_cat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
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. "alv_first_display
*&---------------------------------------------------------------------*
*& Form create_fieldcat
*&---------------------------------------------------------------------*
* -->LS_STRUCTURE text
* -->LS_FIELDCAT text
* -->LT_FIELDCAT text
*----------------------------------------------------------------------*
FORM create_fieldcat USING ls_structure
CHANGING ls_fieldcat TYPE lvc_s_fcat
lt_fieldcat TYPE lvc_t_fcat.
DATA: ref_structdescr TYPE REF TO cl_abap_structdescr,
lt_fields TYPE ddfields.
DATA: lv_col_i TYPE i VALUE 0.
FIELD-SYMBOLS: <fs_fields> TYPE LINE OF ddfields.
ref_structdescr ?= cl_abap_structdescr=>describe_by_data(
p_data = ls_structure
).
CALL METHOD cl_salv_data_descr=>read_structdescr
EXPORTING
r_structdescr = ref_structdescr
RECEIVING
t_dfies = lt_fields.
LOOP AT lt_fields ASSIGNING <fs_fields>.
CLEAR ls_fieldcat.
ADD 1 TO lv_col_i.
ls_fieldcat-col_pos = lv_col_i. "spaltenposition
ls_fieldcat-fieldname = <fs_fields>-fieldname. "Feldname
ls_fieldcat-tabname = <fs_fields>-tabname. "LVC-Tabname ?
ls_fieldcat-scrtext_l = <fs_fields>-scrtext_l. "feldbezeichner L
ls_fieldcat-scrtext_m = <fs_fields>-scrtext_m. "feldbezeichner M
ls_fieldcat-scrtext_s = <fs_fields>-scrtext_s. "feldbezeichner s
ls_fieldcat-ref_field = <fs_fields>-reffield. "referenzfeld
ls_fieldcat-ref_table = <fs_fields>-reftable. "referenztabelle
ls_fieldcat-intlen = <fs_fields>-intlen. "interne länge
ls_fieldcat-inttype = <fs_fields>-inttype. "interner datentyp
ls_fieldcat-lowercase = <fs_fields>-lowercase. "kleinschreiben j/n
ls_fieldcat-outputlen = <fs_fields>-outputlen. "ausgabelänge
ls_fieldcat-decimals_o = <fs_fields>-decimals. "ausgabedezimalstelln
ls_fieldcat-convexit = <fs_fields>-convexit. "konvertierunlsroutin
ls_fieldcat-decimals = <fs_fields>-decimals. "anzahl dezimalstelle
ls_fieldcat-reptext = <fs_fields>-reptext. "
ls_fieldcat-rollname = <fs_fields>-rollname. "Datenelement für F1
ls_fieldcat-domname = <fs_fields>-domname. "Name der Domäne
ls_fieldcat-datatype = <fs_fields>-datatype. "DictionaryDatentyp
ls_fieldcat-mac = <fs_fields>-mac. "suchhilfe j/n
ls_fieldcat-f4availabl = <fs_fields>-f4availabl. "F4 hilfe j/n
ls_fieldcat-checktable = <fs_fields>-checktable. "?????
ls_fieldcat-col_opt = abap_false. "Spaltenoptimierung *X/''.,
APPEND ls_fieldcat TO lt_fieldcat.
ENDLOOP.
ENDFORM. "create_fieldcat
*--- Process after input (PAI) Modul:
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN 'EXIT'.
SET SCREEN 0.
ENDCASE.
ENDMODULE. "user_command_0100 INPUT
*--- Programmstart ----------------------------------------------------
START-OF-SELECTION.
gv_zaehler = 0.
DO 10 TIMES.
ADD 1 TO gv_zaehler.
gs_demotab-folge_org = gv_zaehler.
gs_demotab-folge_neu = gv_zaehler.
APPEND gs_demotab TO gt_demotab.
ENDDO.
CALL SCREEN 100.
Folgende Benutzer bedankten sich beim Autor jensschladitz für den Beitrag:
Ecoman68
Folgende Benutzer bedankten sich beim Autor jensschladitz für den Beitrag:
Ecoman68
Folgende Benutzer bedankten sich beim Autor jensschladitz für den Beitrag:
Ecoman68
Code: Alles auswählen.
ls_layout-grid_title = 'Demotabelle'.
ls_layout-sel_mode = 'A'.
ls_layout-no_rowmove = 'X'. " <-- Das hier hinzufügen
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Ecoman68