Enter + Alv Oo

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • ciberdrago
    Junior Member
    • feb
    • 3

    #1

    Enter + Alv Oo

    Hola como estan? tengo un problema y no se si me puedan ayudar, en el trabajo me han pedido que haga un ALV OO en cual deben de haber campos editables y campos no editables, lo estoy haciendo con alv OO pero me piden que cuando aprete ENTER en un campo se modifiquen los demas...

    eh leido que se tendría que hacer con data_changed pero no se de que manera implementarlo.

    Muchas gracias,

    Saludos
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    Hola ciberdrago, hice un ejemplo con lo que quieres, te dejo el codigo y el dynpro, con los comentarios te guiaras del programa, espero te pueda ayudar

    Código:
    [COLOR=blue]*&---------------------------------------------------------------------*
    *& Programa    : zdemo_alv
    *& Autor       : David Carballido
    *& Fecha       : 17.02.2010
    *& Descripcion : Muestra el cambio de celda dependiendo de otra celda
    *&---------------------------------------------------------------------*[/COLOR]
    REPORT zdemo_alv.
    [COLOR=blue]* Definicion de clases[/COLOR]
    CLASS lcl_event DEFINITION DEFERRED.
    [COLOR=blue]* Tipos Globales[/COLOR]
    TYPES: BEGIN OF ty_itab,
             campo1 TYPE i,
             campo2 TYPE p DECIMALS 2,
           END OF ty_itab.
    [COLOR=blue]* Variables Globales[/COLOR]
    DATA: gcl_grid   TYPE REF TO cl_gui_alv_grid,
          gcl_custom TYPE REF TO cl_gui_custom_container,
          gcl_event  TYPE REF TO lcl_event,
          gt_fcat    TYPE lvc_t_fcat,
          gs_layout  TYPE lvc_s_layo,
          gt_itab    TYPE TABLE OF ty_itab.
    [COLOR=blue]* Simbolos de campo globales[/COLOR]
    FIELD-SYMBOLS: <fs_itab> TYPE ty_itab.
    [COLOR=blue]* Parametros de Seleccion[/COLOR]
    PARAMETERS: p_fila TYPE i OBLIGATORY.
    
    [COLOR=blue]* Definicion e Implementacion de clase de eventos[/COLOR]
    CLASS lcl_event DEFINITION.
      PUBLIC SECTION.
        METHODS handle_data_changed
                    FOR EVENT data_changed OF cl_gui_alv_grid
                        IMPORTING er_data_changed.
    ENDCLASS.
    
    CLASS lcl_event IMPLEMENTATION.
      METHOD handle_data_changed.
    [COLOR=blue]* Se elevara al cuadrado la cantidad que se encuentre en la primera col.[/COLOR]
        DATA: ls_stable TYPE lvc_s_stbl.
    
        FIELD-SYMBOLS: <fs_good> TYPE lvc_s_modi.
    
        LOOP AT er_data_changed->mt_good_cells ASSIGNING <fs_good>.
          READ TABLE gt_itab INDEX <fs_good>-row_id ASSIGNING <fs_itab>.
    
          IF sy-subrc = 0.
            <fs_itab>-campo1 = <fs_good>-value.
            <fs_itab>-campo2 = <fs_good>-value ** 2.
          ENDIF.
        ENDLOOP.
    [COLOR=blue]* Actualizando cambios
    * Posicionando sobre la ultima fila y columna[/COLOR]
        ls_stable-row = 'X'.
        ls_stable-col = 'X'.
    
        CALL METHOD gcl_grid->refresh_table_display
            EXPORTING
                is_stable        = ls_stable.
      ENDMETHOD.
    ENDCLASS.
    
    START-OF-SELECTION.
    [COLOR=blue]* Llenando datos en tabla interna[/COLOR]
    DO p_fila TIMES.
      APPEND INITIAL LINE TO gt_itab ASSIGNING <fs_itab>.
      <fs_itab>-campo1 = sy-index.
      <fs_itab>-campo2 = sy-index ** 2.
    ENDDO.
    [COLOR=blue]* Llamando al ALV[/COLOR]
    IF LINES( gt_itab ) > 0.
      CALL SCREEN 100.
    ENDIF.
    
    [COLOR=blue]*&---------------------------------------------------------------------*
    *&      Module  status  OUTPUT
    *&---------------------------------------------------------------------*[/COLOR]
    MODULE status OUTPUT.
    
      SET PF-STATUS 'ST_100'.
      PERFORM status.
    
    ENDMODULE.                 " status  OUTPUT
    
    [COLOR=blue]*&---------------------------------------------------------------------*
    *&      Module  user_command  INPUT
    *&---------------------------------------------------------------------*[/COLOR]
    MODULE user_command INPUT.
    
      CASE sy-ucomm.
        WHEN 'BACK' OR 'EXIT'.
          LEAVE TO SCREEN 0.
      ENDCASE.
    
    ENDMODULE.                 " user_command  INPUT
    
    [COLOR=blue]*&---------------------------------------------------------------------*
    *&      Form  status
    *&---------------------------------------------------------------------*
    *       Instanciar ALV
    *----------------------------------------------------------------------*[/COLOR]
    FORM status.
    [COLOR=blue]* Variables Locales[/COLOR]
      DATA: ls_stable TYPE lvc_s_stbl.
    
      IF gcl_custom IS INITIAL.
    [COLOR=blue]* Instanciando contenedor[/COLOR]
        CREATE OBJECT gcl_custom
            EXPORTING
                container_name = 'ALV_LIST'.
    [COLOR=blue]* Instanciando grilla[/COLOR]
        CREATE OBJECT gcl_grid
            EXPORTING
                i_parent = gcl_custom.
    [COLOR=blue]* Llenando atributos de ALV[/COLOR]
        PERFORM build_attributes_alv CHANGING gt_fcat
                                              gs_layout.
    [COLOR=blue]* Instanciando clase de eventos[/COLOR]
        CREATE OBJECT gcl_event.
    [COLOR=blue]* Enlazando la clase de eventos al ALV[/COLOR]
        SET HANDLER gcl_event->handle_data_changed FOR gcl_grid.
    [COLOR=blue]* Registrando evento ENTER y otras teclas para captar cambio[/COLOR]
        CALL METHOD gcl_grid->register_edit_event
            EXPORTING
                i_event_id = cl_gui_alv_grid=>mc_evt_enter.
    
        CALL METHOD gcl_grid->register_edit_event
            EXPORTING
                i_event_id = cl_gui_alv_grid=>mc_evt_modified.
    [COLOR=blue]* Llamando a ALV[/COLOR]
        CALL METHOD gcl_grid->set_table_for_first_display
            EXPORTING
                is_layout       = gs_layout
            CHANGING
                it_fieldcatalog = gt_fcat
                it_outtab       = gt_itab.
      ELSE.
    [COLOR=blue]* Posicionando sobre la ultima fila y columna[/COLOR]
        ls_stable-row = 'X'.
        ls_stable-col = 'X'.
    
        CALL METHOD gcl_grid->refresh_table_display
            EXPORTING
                is_stable        = ls_stable.
      ENDIF.
    
    ENDFORM.                    " status
    
    [COLOR=blue]*&---------------------------------------------------------------------*
    *&      Form  build_attributes_alv
    *&---------------------------------------------------------------------*
    *       Construyendo atributos del ALV
    *----------------------------------------------------------------------*
    *      <--PT_FCAT    : Catalogo del ALV
    *      <--PS_LAYOUT  : Layout del ALV
    *----------------------------------------------------------------------*[/COLOR]
    FORM build_attributes_alv CHANGING pt_fcat   TYPE lvc_t_fcat
                                       ps_layout TYPE lvc_s_layo.
    [COLOR=blue]* Variables Locales[/COLOR]
      FIELD-SYMBOLS: <fs_fcat> TYPE lvc_s_fcat.
    [COLOR=blue]* Construyendo catalogo[/COLOR]
      CLEAR pt_fcat.
      APPEND INITIAL LINE TO pt_fcat ASSIGNING <fs_fcat>.
      <fs_fcat>-edit      = 'X'.
      <fs_fcat>-fieldname = 'CAMPO1'.
      <fs_fcat>-tabname   = 'GT_ITAB'.
      <fs_fcat>-outputlen = 8.
      <fs_fcat>-coltext   = 'Campo 1'.
    
      APPEND INITIAL LINE TO pt_fcat ASSIGNING <fs_fcat>.
      <fs_fcat>-fieldname = 'CAMPO2'.
      <fs_fcat>-tabname   = 'GT_ITAB'.
      <fs_fcat>-outputlen = 8.
      <fs_fcat>-coltext   = 'Campo 2'.
    [COLOR=blue]* Construyendo Layout[/COLOR]
      CLEAR ps_layout.
      ps_layout-zebra      = 'X'.
      ps_layout-cwidth_opt = 'X'.
    
    ENDFORM.                    " build_attributes_alv
    Y este es la logica del dynpro
    Código:
    PROCESS BEFORE OUTPUT.
     MODULE status.
    
    PROCESS AFTER INPUT.
     MODULE user_command.
    David Carballido Córdova

    Comentario

    • ciberdrago
      Junior Member
      • feb
      • 3

      #3
      Muchas gracias... voy a leerlo y te comento =P!!!!!!!!!!!!

      Comentario

      • ciberdrago
        Junior Member
        • feb
        • 3

        #4
        leido y probado!!!! Muchas gracias men te debo una (B)(B)(B)(B) =D

        Comentario

        Trabajando...