Tabelle editieren

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Tabelle editieren

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Hallo zusammen

Wir haben von der Schule aus ein Projekt am Start, stehe aber zur Zeit total auf dem Schlauch.
Ich möchte einen gewissen Teil einer Tabelle selektieren, Änderungen vornehmen und nachher wieder speichern.
Alles funktioniert super, ausser das speichern? Kann mir jemand hierzu helfen? (Das Coding ist unten aufgeführt)
Vielen Dank

PS: Die Bildschirmausgabe muss in drei Teile gesplittet sein. Die anderen zwei Teile benötige ich später auch noch für Tabellenausgaben.

Code: Alles auswählen.

REPORT  zr_workflow_avor.

DATA : o_cc TYPE REF TO cl_gui_custom_container .
DATA : o_sc TYPE REF TO cl_gui_splitter_container .

DATA :  o_part1 TYPE REF TO  cl_gui_container
      , o_part2 TYPE REF TO  cl_gui_container
      , o_part3 TYPE REF TO  cl_gui_container
      .

DATA :  alv_grid1 TYPE REF TO cl_gui_alv_grid
      , alv_grid2 TYPE REF TO cl_gui_alv_grid
      , alv_grid3 TYPE REF TO cl_gui_alv_grid
      .


*ALV1 - Liefertermin abklären
TYPES:  BEGIN OF ty_sop
  , vbeln   TYPE zworkflow-vbeln
  , vgbel   TYPE zworkflow-vgbel
 " , kunnr   type zworkflow-kunnr
  , zaufst  TYPE zworkflow-zaufst
  , zbeme   TYPE zworkflow-zbeme
  ,  END OF ty_sop.



DATA:   i_modified       TYPE STANDARD TABLE OF  ty_sop, "For getting modified rows
        i_selected_rows  TYPE                    lvc_t_row,"Selected Rows
        w_selected_rows  TYPE                    lvc_s_row,
        w_modified       TYPE                    ty_sop,
        wa               TYPE                    ty_sop.



DATA:   wt_fieldcat1  TYPE lvc_t_fcat
      , wt_fieldcat2  TYPE lvc_t_fcat
      , wt_fieldcat3  TYPE lvc_t_fcat
      .

DATA : dd TYPE REF TO cl_dd_document.

DATA ok_code_0100 TYPE sy-ucomm.
DATA lv_answer TYPE c.




DATA:   t_sop  TYPE STANDARD TABLE OF ty_sop.
"    ,   t_sopx TYPE STANDARD TABLE OF ty_sop
"    .

START-OF-SELECTION .


  CALL SCREEN 0100.

*&———————————————————————*
*&      Module  STATUS_0100  OUTPUT
*&———————————————————————*
*       text
*———————————————————————-*

MODULE status_0100 OUTPUT.

  SET PF-STATUS '0100'.
  SET TITLEBAR '0100'.

  PERFORM create_objects.

  PERFORM spli_main_cont.

  PERFORM prepare_fieldcat1 CHANGING wt_fieldcat1.
  PERFORM disp_alv1 .

  PERFORM prepare_fieldcat2 CHANGING wt_fieldcat2.
  PERFORM disp_alv2 .

  PERFORM prepare_fieldcat3 CHANGING wt_fieldcat3.
  PERFORM disp_alv3 .

ENDMODULE.                 " STATUS_0100  OUTPUT

*&———————————————————————*
*&      Form  CREATE_OBJECTS
*&———————————————————————*
*       text
*———————————————————————-*
*  ->  p1        text
*  <–  p2        text
*———————————————————————-*

FORM create_objects .

  CREATE OBJECT o_cc
    EXPORTING
      container_name = 'MAIN_CONT'.


  CREATE OBJECT dd

*  EXPORTING
*    STYLE  =
*    BACKGROUND_COLOR =
*    BDS_STYLESHEET =
*    NO_MARGINS =
.
ENDFORM.                    " CREATE_OBJECTS




*&———————————————————————*
*&      Form  SPLI_MAIN_CONT
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*

FORM spli_main_cont .

  CREATE OBJECT o_sc
    EXPORTING
      parent  = o_cc
      rows    = 3
      columns = 1.


  CALL METHOD o_sc->get_container
    EXPORTING
      row       = 1
      column    = 1
    RECEIVING
      container = o_part1.


  CALL METHOD o_sc->get_container
    EXPORTING
      row       = 2
      column    = 1
    RECEIVING
      container = o_part2.

  CALL METHOD o_sc->get_container
    EXPORTING
      row       = 3
      column    = 1
    RECEIVING
      container = o_part3.

ENDFORM.                    " SPLI_MAIN_CONT



*&---------------------------------------------------------------------*
*&      Form  prepare_fieldcat1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--PT_FIELDCAT1  text
*----------------------------------------------------------------------*
FORM prepare_fieldcat1  CHANGING pt_fieldcat1 TYPE lvc_t_fcat.
  DATA : lx_fcat TYPE lvc_s_fcat.

  CLEAR lx_fcat.
  lx_fcat-fieldname = 'VBELN'.
  "  lx_fcat-ref_field = text-200.
  "  lx_fcat-ref_table = text-200.
  lx_fcat-coltext = text-200.
  lx_fcat-seltext = 'Beleg'.
  APPEND lx_fcat TO pt_fieldcat1.

  CLEAR lx_fcat.
  lx_fcat-fieldname = 'VGBEL'.
  "  lx_fcat-ref_field = text-200.
  "  lx_fcat-ref_table = text-200.
  lx_fcat-coltext = text-203.
  lx_fcat-seltext = 'Beleg'.
  APPEND lx_fcat TO pt_fieldcat1.

  CLEAR lx_fcat.
  lx_fcat-fieldname = 'ZAUFST'.
  "  lx_fcat-ref_field = TEXT-201.
  "  lx_fcat-ref_table = TEXT-201.
  lx_fcat-coltext =  text-201.
  lx_fcat-seltext = 'Status'.
  APPEND lx_fcat TO pt_fieldcat1.

  CLEAR lx_fcat.
  lx_fcat-fieldname = 'ZBEME'.
  "  lx_fcat-ref_field = TEXT-201.
  "  lx_fcat-ref_table = TEXT-201.
  lx_fcat-coltext =  text-202.
  lx_fcat-seltext = 'Bemerkungen'.
  lx_fcat-edit    = 'X'.
  APPEND lx_fcat TO pt_fieldcat1.



ENDFORM.                    "INIT_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  prepare_fieldcat2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--PT_FIELDCAT2  text
*----------------------------------------------------------------------*
FORM prepare_fieldcat2  CHANGING pt_fieldcat2 TYPE lvc_t_fcat.
  DATA : lx_fcat TYPE lvc_s_fcat.


ENDFORM.                    "INIT_FIELDCAT

*&---------------------------------------------------------------------*
*&      Form  prepare_fieldcat3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--PT_FIELDCAT3  text
*----------------------------------------------------------------------*
FORM prepare_fieldcat3  CHANGING pt_fieldcat3 TYPE lvc_t_fcat.
  DATA : lx_fcat TYPE lvc_s_fcat.


ENDFORM.                    "INIT_FIELDCAT

*&———————————————————————*
*&      Form  DISP_ALV1
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*

FORM disp_alv1 .
  CREATE OBJECT alv_grid1
    EXPORTING
      i_parent = o_part1.


  SELECT *
  INTO CORRESPONDING FIELDS OF TABLE t_sop
      FROM zworkflow
  WHERE  zworkflow~zaufst = 'AVOR'.


  CALL METHOD alv_grid1->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.


  CALL METHOD alv_grid1->set_table_for_first_display
    EXPORTING
      i_structure_name = 't_sop'
      i_save           = 'A'
      i_default        = 'X'
    CHANGING
      it_fieldcatalog  = wt_fieldcat1
      it_outtab        = t_sop.


  CALL METHOD alv_grid1->register_edit_event
    EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_modified.

  "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 .                                                   "DISP_ALV1


*&———————————————————————*
*&      Form  DISP_ALV2
*&———————————————————————*
*       text
*———————————————————————-*
*  –>  p1        text
*  <–  p2        text
*———————————————————————-*

FORM disp_alv2 .



ENDFORM.                                                    " DISP_ALV2


*&---------------------------------------------------------------------*
*&      Form  DISP_ALV3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM disp_alv3 .


ENDFORM .                                                   "DISP_ALV1



*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.

  CASE ok_code_0100.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      CALL FUNCTION 'POPUP_TO_CONFIRM'
        EXPORTING
          titlebar              = 'Sicherheitsabfrage'(501)
          text_question         = 'Achtung: Geänderte Daten werden verloren gehen!'(502)
          text_button_1         = 'Verlassen'(503)
          text_button_2         = 'Abbrechen'(504)
          default_button        = '2'
          display_cancel_button = ''
        IMPORTING
          answer                = lv_answer
        EXCEPTIONS
          text_not_found        = 1
          OTHERS                = 2.
      IF sy-subrc <> 0.
      ENDIF.

      CASE lv_answer.
        WHEN '1'.
          LEAVE TO SCREEN 0.
      ENDCASE.



      FIELD-SYMBOLS:   <sop>         TYPE ty_sop
      ,               <sopx>         TYPE ty_sop
      .


    WHEN 'SAVE' OR '&DATA_SAVE'.

      CALL METHOD alv_grid1->get_selected_rows
        IMPORTING
          et_index_rows = i_selected_rows.


      LOOP AT i_selected_rows INTO w_selected_rows.
        READ TABLE t_sop INTO wa INDEX w_selected_rows-index.
        IF sy-subrc EQ 0.
          MOVE-CORRESPONDING wa TO w_modified.
          APPEND w_modified TO i_modified.
        ENDIF.
      ENDLOOP.
      " MODIFY zworkflow FROM TABLE i_modified.


      CALL METHOD alv_grid1->refresh_table_display.
ENDCASE.


ENDMODULE.                 " USER_COMMAND_0100  INPUT



gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Tabelle editieren

Beitrag von Tron (Top Expert / 1327 / 35 / 333 ) »
Moin Christof.

Code: Alles auswählen.

 MODIFY zworkflow FROM TABLE i_modified.
Modify sollte funktionieren. Statt i_modified sollte die interne Tabelle vom Typ Zworkflow sein.

gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Tabelle editieren

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Moin Jens

Vielen Dank für die Nachricht. Sorry ich habe es wohl ein bisschen falsch beschrieben.
Laut dem Debugger springt mein Programm nicht in den Loop hinein. Der Fehler muss also irgendwo anders sein :mrgreen:

lg

Re: Tabelle editieren

Beitrag von Tron (Top Expert / 1327 / 35 / 333 ) »
... ach so.
Bau doch einen Button über dem ALV Grid ein. ( z.B. "SAVE DATA")
Beispiel ALV mit "eigenem" Button:
Bild
gruß Jens

Beispiel
Wie erzeugt man ein ALV Button und reagiert auf das Click - event

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  YUSERMENU                                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  YUSERMENU                                                   .
* Tabellen der Varianten
* ltdx
* Ltdxd
* Ltdxs

TABLES: yuserprog,trdirt.

INCLUDE <icon>.


DATA it_data TYPE TABLE OF yuserprog WITH HEADER LINE.

DATA lv_layperm(1) VALUE space.

DATA dyname TYPE  d020s-prog VALUE sy-repid.
DATA dynumb TYPE  d020s-dnum VALUE '0100'.

* Grid Parameter
DATA: ok_code LIKE sy-ucomm,
      g_container TYPE scrfname VALUE 'BCALV_CONTAINER',
      grid1  TYPE REF TO cl_gui_alv_grid,
      g_custom_container TYPE REF TO cl_gui_custom_container,
      is_variant TYPE disvariant.

*--- Field catalog table
DATA gt_fieldcat TYPE lvc_t_fcat WITH HEADER LINE.
*--- Layout structure
DATA gs_layout TYPE lvc_s_layo .

* LT_EXCLUDE => Tabelle zum Ausschliessen von Funktionen innerhalb
* der Toolbar des ALV-Grid
DATA: lt_exclude TYPE ui_functions,
      ls_exclude TYPE ui_func.
*---------------------------------------------------------------------*
*       MAIN                                                          *
*---------------------------------------------------------------------*
INITIALIZATION.
*---------------------------------------------------------------------*
*       CLASS lcl_event_handler DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION .
  PUBLIC SECTION .
    METHODS:
*--To add new functional buttons to the ALV toolbar
    handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
    IMPORTING e_object e_interactive ,

*--To implement user commands
    handle_user_command
    FOR EVENT user_command OF cl_gui_alv_grid
    IMPORTING e_ucomm .



*--To be triggered before user commands
*handle_before_user_command
*FOR EVENT before_user_command OF cl_gui_alv_grid
*IMPORTING e_ucomm.

*--Double-click control
*handle_double_click
*FOR EVENT double_click OF cl_gui_alv_grid
*IMPORTING e_row e_column es_row_no.

  PRIVATE SECTION.
ENDCLASS.                    "lcl_event_handler DEFINITION


*---------------------------------------------------------------------*
*       CLASS lcl_event_handler IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION .

*--Handle Toolbar
  METHOD handle_toolbar.
    PERFORM handle_toolbar USING e_object e_interactive .
  ENDMETHOD .                    "handle_toolbar

*--Handle User Command
  METHOD handle_user_command .
    PERFORM handle_user_command USING e_ucomm .
  ENDMETHOD.                    "handle_user_command

*--Handle Before User Command JG
*  METHOD handle_before_user_command .
*    PERFORM handle_before_user_command USING e_ucomm .
*  ENDMETHOD .                    "handle_before_user_command


ENDCLASS.                    "lcl_event_handler IMPLEMENTATION

DATA gr_event_handler TYPE REF TO lcl_event_handler .
* Eingabe und Auswertung ---------------------------------------------*

START-OF-SELECTION.

  SELECT * FROM yuserprog APPENDING TABLE it_data
  WHERE benutzer = sy-uname.




  CALL SCREEN 100.

  EXIT.
*&---------------------------------------------------------------------*
*&      Module  PBO  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pbo OUTPUT.
  IF g_custom_container IS INITIAL.
    CREATE OBJECT g_custom_container
           EXPORTING container_name = g_container.
    CREATE OBJECT grid1
           EXPORTING i_parent = g_custom_container.

*--Creating an instance for the event handler
    CREATE OBJECT gr_event_handler .

*----Preparing field catalog.
    PERFORM prepare_field_catalog TABLES gt_fieldcat[] .
*----Preparing layout structure
    PERFORM prepare_layout CHANGING gs_layout .
*----Preparing Disable Toolbar Buttons
    PERFORM change_buttons .

    is_variant-report = dyname.

*'X': global saving only
*'U': user-specific saving only
*'A': corresponds to 'X' and 'U'
*SPACE: no saving


* Prüfe auf Berechtigung BENUTZERPFLEGE SU01
* dann ist Layout-Anpassung erlaubt
    CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
      EXPORTING
        tcode  = 'SU01'
      EXCEPTIONS
        ok     = 1
        not_ok = 2
        OTHERS = 3.

    IF sy-subrc = 1.
      lv_layperm = 'A'.
    ENDIF.



    CALL METHOD grid1->set_table_for_first_display
      EXPORTING
        is_variant           = is_variant
        i_save               = lv_layperm
*        i_save               = ' '
        is_layout            = gs_layout
        it_toolbar_excluding = lt_exclude
      CHANGING
        it_outtab            = it_data[]
        it_fieldcatalog      = gt_fieldcat[].


*--Registering handler methods to handle ALV Grid events JG

    SET HANDLER gr_event_handler->handle_toolbar FOR grid1.
    SET HANDLER gr_event_handler->handle_user_command FOR grid1.

* Die Toolbar des Grids muss noch auf interactive
* geschaltet werden. Dadurch werden die
* definierten Buttons angezeigt und die
* oben im PERFORM change_buttons ausgeschalteten
* Buttons heraus genommen werden

    CALL METHOD grid1->set_toolbar_interactive.


    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.


* Der GRID1 wird noch refreshed
    CALL METHOD grid1->refresh_table_display.


  ENDIF.

  SET PF-STATUS 'MAIN100'.
  SET TITLEBAR 'AUSW' WITH text-001.

ENDMODULE.                 " PBO  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  PAI  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE pai INPUT.
*   to react on oi_custom_events:
  CALL METHOD cl_gui_cfw=>dispatch.
  CASE ok_code.
    WHEN 'EXIT'.
      LEAVE TO SCREEN 0.
    WHEN OTHERS.
*     do nothing
  ENDCASE.
  CLEAR ok_code.

ENDMODULE.                 " PAI  INPUT
*&--------------------------------------------------------------------*
*&      Form  prepare_field_catalog
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->PT_FIELDCATtext
*---------------------------------------------------------------------*
FORM prepare_field_catalog TABLES pt_fieldcat TYPE lvc_t_fcat .

  DATA ls_fcat TYPE lvc_s_fcat .
*  DATA lv_depth TYPE i.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'YUSERPROG'
    CHANGING
      ct_fieldcat            = pt_fieldcat[]
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

*  DELETE pt_fieldcat WHERE
*  fieldname EQ 'BENUTZER'.


  LOOP AT pt_fieldcat INTO ls_fcat .

    ls_fcat-col_pos = sy-tabix.

    CASE ls_fcat-fieldname.
      WHEN 'PROGNAME' .
        ls_fcat-coltext = 'Name des Reports'.
        ls_fcat-key = space.
        ls_fcat-emphasize = space.

      WHEN 'TEXT' .
        ls_fcat-coltext = 'Beschreibung'.
    ENDCASE.

    MODIFY pt_fieldcat FROM ls_fcat .

  ENDLOOP.

ENDFORM .                    "prepare_field_catalog
*&--------------------------------------------------------------------*
*&      Form  prepare_layout
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->PS_LAYOUT  text
*---------------------------------------------------------------------*
FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
  ps_layout-zebra = 'X' .
  ps_layout-cwidth_opt ='X'.
  ps_layout-numc_total = ' '.
  ps_layout-no_merging = 'X'.
  ps_layout-no_rowmark = ' '.
  ps_layout-sel_mode = 'A'.
  ps_layout-no_toolbar = ' '.

*  ps_layout-grid_title = 'Flights' .
*  ps_layout-smalltitle = 'X' .
ENDFORM.                    "prepare_layout

*&--------------------------------------------------------------------*
*&      Form  handle_toolbar
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->I_OBJECT   text
*---------------------------------------------------------------------*
FORM handle_toolbar USING i_object TYPE REF TO cl_alv_event_toolbar_set
e_interactive .

  DATA: ls_toolbar TYPE stb_button.

* Paltzhalter / Seperator
  CLEAR ls_toolbar.
  MOVE 3 TO ls_toolbar-butn_type.
  APPEND ls_toolbar TO i_object->mt_toolbar.

* Button MARKIEREN
  CLEAR ls_toolbar.
  MOVE 'MARK' TO ls_toolbar-function.                       "#EC NOTEXT
  MOVE icon_execute_object TO ls_toolbar-icon.
  MOVE 'Programm ausführen'(201) TO ls_toolbar-quickinfo.
  MOVE ' Programm ausführen'(201) TO ls_toolbar-text.
  MOVE ' ' TO ls_toolbar-disabled.                          "#EC NOTEXT
  APPEND ls_toolbar TO i_object->mt_toolbar.

ENDFORM .                    "handle_toolbar

*&--------------------------------------------------------------------*
*&      Form  Change_buttons
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM change_buttons .
* Kein Symbol für Drucken / Graphik / Info
  ls_exclude = cl_gui_alv_grid=>mc_fc_print_back.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_graph.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_info.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_mb_subtot.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_mb_sum.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_mb_view.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
  APPEND ls_exclude TO lt_exclude.
  ls_exclude = cl_gui_alv_grid=>mc_fc_find.
  APPEND ls_exclude TO lt_exclude.

ENDFORM.                    "Change_buttons

*&--------------------------------------------------------------------*
*&      Form  handle_user_command
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->I_UCOMM    text
*---------------------------------------------------------------------*
FORM handle_user_command USING i_ucomm TYPE syucomm .
  DATA lt_selected_rows TYPE lvc_t_roid .
  DATA ls_selected_row TYPE lvc_s_roid .


  CASE i_ucomm .
    WHEN 'MARK' .

      CALL METHOD grid1->get_selected_rows
        IMPORTING
          et_row_no = lt_selected_rows.
*     War was selektiert ?
      READ TABLE lt_selected_rows INTO ls_selected_row INDEX 1 .

      IF sy-subrc NE 0 .
        MESSAGE s000(su) WITH 'Bitte eine Zeile selektieren !'(205).
      ELSE.
        LOOP AT lt_selected_rows INTO ls_selected_row.
          IF ls_selected_row-row_id NE 0.
            READ TABLE it_data INDEX ls_selected_row-row_id.
            PERFORM run_report USING it_data-programm.
            EXIT.
          ENDIF.
        ENDLOOP.

* Falls die Tabelle yuserprog von hier aus gepflegt wird (Sonderfall)
        REFRESH it_data.
        SELECT * FROM yuserprog APPENDING TABLE it_data
        WHERE benutzer = sy-uname.

        CALL METHOD grid1->refresh_table_display
*       EXPORTING
*       IS_STABLE =
*       I_SOFT_REFRESH =
        EXCEPTIONS
        finished = 1
        OTHERS = 2 .

      ENDIF .


  ENDCASE .
ENDFORM.                    "handle_user_command

*&--------------------------------------------------------------------*
*&      Form  Run_report
*&--------------------------------------------------------------------*
*       Starten eines Reports typ 1 via CALL TRANSCTION
*---------------------------------------------------------------------*
FORM run_report USING repo TYPE rs38m-programm.

  DATA: bdcdata TYPE TABLE OF bdcdata.
  DATA: itab TYPE TABLE OF bdcmsgcoll.
  DATA: program LIKE sy-repid,
        wa_bdcdata TYPE bdcdata.


  CLEAR wa_bdcdata.
  wa_bdcdata-program  = 'SAPMS38M'.
  wa_bdcdata-dynpro   = '0101'.
  wa_bdcdata-dynbegin = 'X'.
  APPEND wa_bdcdata TO bdcdata.

  CLEAR wa_bdcdata.
  wa_bdcdata-fnam     = 'BDC_CURSOR'.
  wa_bdcdata-fval     = 'RS38M-PROGRAMM'.
  APPEND wa_bdcdata TO bdcdata.

  CLEAR wa_bdcdata.
  wa_bdcdata-fnam     = 'BDC_OKCODE'.
  wa_bdcdata-fval     = '=STRT'.
  APPEND wa_bdcdata TO bdcdata.

  CLEAR wa_bdcdata.
  wa_bdcdata-fnam     = 'RS38M-PROGRAMM'.
  wa_bdcdata-fval     = repo.
  APPEND wa_bdcdata TO bdcdata.

  CALL TRANSACTION 'SA38'  USING bdcdata  MODE 'E'
                           MESSAGES INTO itab.

ENDFORM.                    "Run_report
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Tabelle editieren

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Guten morgen

eigentlich möchte ich über den "normalen" Save-Button alle Listen abarbeiten.
Mein Problem besteht einfach, das die Daten irgendwo nicht übergeben werden und somit den Loop nicht anspringt.
Debuggen half bisher auch nichts, ich habe also irgendwo einen Bock drin und weiss nicht wo.

Re: Tabelle editieren

Beitrag von a-dead-trousers (Top Expert / 4457 / 227 / 1198 ) »
christof hat geschrieben:Mein Problem besteht einfach, das die Daten irgendwo nicht übergeben werden und somit den Loop nicht anspringt.
Debuggen half bisher auch nichts, ich habe also irgendwo einen Bock drin und weiss nicht wo.
Meinst du, die vom Benutzer geänderten Daten am Grid werden im LOOP nicht gefunden, oder wird der LOOP bzw. der Abschnitt "WHEN 'SAVE' OR '&SAVE_DATA'" wird gar nicht durchlaufen?
Wenn Ersteres: Ruf die Methode CHECK_CHANGED_DATA des Grids auf bevor du einen READ auf die Tabelle T_SOP machst.
Wenn Zweiteres: Da würde ich darauf tippen, dass der Speichern Button in deinem GUI-Status nicht den Funktionscode 'SAVE' oder '&SAVE_DATA' hinterlegt hat.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Tabelle editieren

Beitrag von christof (Specialist / 122 / 6 / 0 ) »
Guten Tag

Aus meiner Sicht werden hier nach Save_Data keine Daten übergeben, für mich unerklärlich

Code: Alles auswählen.

      CALL METHOD alv_grid1->get_selected_rows
        IMPORTING
          et_index_rows = i_selected_rows

Re: Tabelle editieren

Beitrag von a-dead-trousers (Top Expert / 4457 / 227 / 1198 ) »
christof hat geschrieben:Aus meiner Sicht werden hier nach Save_Data keine Daten übergeben, für mich unerklärlich

Code: Alles auswählen.

      CALL METHOD alv_grid1->get_selected_rows
        IMPORTING
          et_index_rows = i_selected_rows
CHECK_CHANGED_DATA
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Tabelle editieren

Beitrag von black_adept (Top Expert / 4134 / 131 / 956 ) »
Get_selected_rows????? Das sind doch nur die Zeilen, die der User markiert hat und nicht Daten mit Änderungen
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Tabelle editieren

Beitrag von a-dead-trousers (Top Expert / 4457 / 227 / 1198 ) »
black_adept hat geschrieben:Get_selected_rows????? Das sind doch nur die Zeilen, die der User markiert hat und nicht Daten mit Änderungen
Im Coding im ersten Post macht er eh alles richtig und liest per Index der GET_SELECTED_ROWS aus der Datentabelle. Nur sind vermutlich die aktuellen Daten wegen der "asynchronen" Arbeitsweise des ALV-Grid dort noch nicht angekommen. Deshalb auch mein (inzwischen dritter) Hinweis doch bitte CHECK_CHANGED_DATA aufzurufen bzw. auszuprobieren und zu prüfen ob das den Fehler behebt.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Tabelle editieren

Beitrag von black_adept (Top Expert / 4134 / 131 / 956 ) »
Habe das Originalcoding mal kurz überflogen und fürchte, dass es sich um das allseits beliebte Thema "Mehrere Controls in einem Container" handelt. Grund: Im Moduls status_0100 wird die Form-Routine disp_alv1 aufgerufen, wo dann jedes mal ein neuer Grid erzeugt und in den Container gehängt wird (und wieder mit den Daten aus der DB gefüllt wird, die schnell noch gelesen werden ). Haben wir nicht irgendwo einen Thread, wo das Thema hinreichend erläutert wird?

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
a-dead-trousers

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Tabelle editieren

Beitrag von a-dead-trousers (Top Expert / 4457 / 227 / 1198 ) »
Mist, auf das hab ich mal wieder nicht geachtet.
(Die Threads dazu im Forum kann ich momentan auch nicht finden :oops: )
Enno hat übrigens einen tollen Artikel zu dem Thema verfasst:
http://www.tricktresor.de/blog/controls-stapeln/
Zukünftig könnten wir ja darauf verweisen, wenn wir den Fehler im Coding eines Forum-Users bemerken, anstatt im Forum suchen zu müssen. 8)
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

11
Antw.
2494
Views
Tabelle MARC editieren
von retsch » 07.11.2024 12:04 • Verfasst in ABAP® für Anfänger
6
Antw.
10395
Views
Tabelle zeilenweise lesen und editieren ohne SE16, SM30/31
von MindMOB » 22.10.2007 18:03 • Verfasst in ABAP® Core
1
Antw.
1888
Views
ALV Editieren
von Betze » 04.08.2006 09:00 • Verfasst in ABAP Objects®
0
Antw.
1583
Views
ALV -Felder editieren
von Gast » 08.07.2005 12:33 • Verfasst in ABAP Objects®
5
Antw.
3845
Views
IDoc editieren
von Patrick76 » 11.07.2005 12:49 • Verfasst in Basis

Aktuelle Forenbeiträge

Druck von Etiketten via FP_PDF_TEST_01
vor 11 Stunden von Mr_Mkt 5 / 952
RFC vs. ODATA
Gestern von DeathAndPain 8 / 1050
Frage zur redefinierten Methode
vor 3 Tagen von ralf.wenzel 12 / 1510

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.