ALV Editable: REUSE_ALV_GRID_DISPLAY_LVC

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • xeram
    Junior Member
    • ago
    • 17

    #1

    ALV Editable: REUSE_ALV_GRID_DISPLAY_LVC


    Buen día!!!
    Soy nuevo en esto, así que no entiendo mucho todavía.

    Estoy haciendo un desarrollo, donde tengo un alv editable. Para ellos uso la función REUSE_ALV_GRID_DISPLAY_LVC. Logre hacer que me cargue correctamente el alv y que el campo que quiero editar funciones bien, pero tengo una duda: ¿como leo el cambio?
    O sea: una vez que muestra el alv, ingreso un valor en el campo que puedo editar y apreto el botón guardar, ¿como hago para tomar el cambio del alv y plasmarlo en la bd?

    Gracias de antemano y disculpen las molestias

  • Neo_25
    Member
    • jun
    • 51

    #2
    ** Entre el catálogo y el layout se crea lo que nos interesa
    * se carga el catalogo del ALV
    PERFORM f_cargar_catalogo USING pi_estructura
    CHANGING li_catalogo.

    ** cogemos el valor que se ha escrito
    " se define en el TOP, en * Definition of classes
    * CREATE OBJECT g_application_9000.
    * SET HANDLER g_application_9000->handle_data_changed FOR v_grid.
    *****


    * se carga la disposición de pantalla del ALV
    PERFORM f_cargar_layout CHANGING lw_layout.

    En el top se crea:
    No cambies el orden o te dirá q no existe.
    ************************************************** ********
    * Definition of classes
    ************************************************** ********
    CLASS: lcl_application_9000 DEFINITION DEFERRED.

    DATA: g_application_9000 TYPE REF TO lcl_application_9000.

    *---------------------------------------------------------------------*
    * CLASS LCL_APPLICATION_9000 DEFINITION
    *---------------------------------------------------------------------*
    * ........ *
    *---------------------------------------------------------------------*
    CLASS lcl_application_9000 DEFINITION.

    PUBLIC SECTION.
    METHODS: handle_data_changed
    FOR EVENT data_changed OF cl_gui_alv_grid
    IMPORTING er_data_changed.
    ENDCLASS. "lcl_application_9000 DEFINITION

    *---------------------------------------------------------------------*
    * CLASS LCL_APPLICATION_9000 IMPLEMENTATION
    *---------------------------------------------------------------------*
    * ........ *
    *---------------------------------------------------------------------*
    CLASS lcl_application_9000 IMPLEMENTATION.

    METHOD handle_data_changed.
    PERFORM f_handle_data_changed USING er_data_changed.
    ENDMETHOD. "handle_data_changed

    ENDCLASS. "lcl_application_9000 IMPLEMENTATION

    En tu perform, donde kieras ponerlo,
    lo q te pongo es un ejemplo mío, tu tienes q adaptarlo.
    pregunta si te hace falta.
    *&---------------------------------------------------------------------*
    *& Form F_HANDLE_DATA_CHANGED
    *&---------------------------------------------------------------------*
    * Cogemos el valor escrito y se comprueba si es mayor o no que wrbtr
    *----------------------------------------------------------------------*
    * -->P_ER_DATA_CHANGED text
    *----------------------------------------------------------------------*
    FORM f_handle_data_changed
    USING pi_data TYPE REF TO cl_alv_changed_data_protocol.

    DATA: ls_modi TYPE lvc_s_modi. "da el registro modificado (línea)
    DATA: lv_error TYPE c.
    * Variables para el field-symbol que creamos por código
    DATA: lv_texto TYPE char19,
    lv_importe TYPE ycant_imp.
    FIELD-SYMBOLS: <fs_mio> TYPE ANY.

    FIELD-SYMBOLS: <fs_alv> TYPE yco_co04_0060.


    * ordeno la i_alv
    SORT pi_data->mt_mod_cells BY row_id .
    * recorro la i_alv y anoto el registro que se ha modificado
    LOOP AT pi_data->mt_mod_cells INTO ls_modi.
    * cojo el registro que se ha modificado
    READ TABLE i_alv ASSIGNING <fs_alv> INDEX ls_modi-row_id.

    IF sy-subrc = 0.
    * Se mete el número nuevo en la tabla del ALV
    * Convertir el número introducido (char) a número
    PERFORM f_validar_valor USING ls_modi-value "valor char
    CHANGING lv_importe. "valor número
    * Introducimos el valor en el campo de la tabla
    * Se crea el field-symbol como interesa - nombrecolumna
    CONCATENATE '<FS_ALV>-' ls_modi-fieldname INTO lv_texto.
    ASSIGN (lv_texto) TO <fs_mio>.

    <fs_mio> = lv_importe.

    ENDIF.
    ENDLOOP.

    Comentario

    • xeram
      Junior Member
      • ago
      • 17

      #3

      Gracias por la pronta respuesta!!!!

      Ahí lo pruebo y cualquier cosa aviso por acá!!!

      Muchas gracias!!

      Comentario

      • xeram
        Junior Member
        • ago
        • 17

        #4
        Originalmente publicado por Neo_25
        *&---------------------------------------------------------------------*
        *& Form F_HANDLE_DATA_CHANGED
        *&---------------------------------------------------------------------*
        * Cogemos el valor escrito y se comprueba si es mayor o no que wrbtr
        *----------------------------------------------------------------------*
        * -->P_ER_DATA_CHANGED text
        *----------------------------------------------------------------------*
        FORM f_handle_data_changed
        USING pi_data TYPE REF TO cl_alv_changed_data_protocol.

        Disculpa que te joda:
        El pi_data que le pasas al form, ¿es la tabla que mostras en el alv o como lo declaras?

        Gracias!

        Comentario

        • Neo_25
          Member
          • jun
          • 51

          #5
          No se de donde eres, pero:
          Disculpa que te joda:
          no queda bien.

          Si, el pì_dat es la tabla q se muestra en el alv

          Comentario

          • xeram
            Junior Member
            • ago
            • 17

            #6
            Originalmente publicado por Neo_25
            No se de donde eres, pero:

            no queda bien.

            Lo siento!!! Soy de argentina, y es una manera de decir: disculpa que te moleste!! Es algo propio de acá: joder = molestar.


            Originalmente publicado por Neo_25
            Si, el pì_dat es la tabla q se muestra en el alv

            Okis, gracias!!!

            Comentario

            • xeram
              Junior Member
              • ago
              • 17

              #7

              Otra vez yo

              Cuando haces este llamado:
              SET HANDLER g_application_9000->handle_data_changed FOR v_grid

              ¿que valor corresponde al de v_grid?

              Y cuando hago el llamado a la funcion:
              FORM f_handle_data_changed
              USING pi_data TYPE REF TO cl_alv_changed_data_protocol.

              ¿Como declaro la variable pi_data? Porque al reemplazarla con mi tabla interna me dice que son incompatibles.

              Gracias por todo!!!!

              Comentario

              • Marlon21
                Junior Member
                • mar
                • 18

                #8
                Hola

                Hola el pi_data tienes que dejarlo asi tal y como está, ya que esa variable contendrá los cambios hechos en tu alv.



                y el llamado:
                SET HANDLER g_application_9000->handle_data_changed FOR v_grid

                va antes de mandar tu REUSE_ALV_GRID_DISPLAY_LVC.


                en tu top define.

                data: v_grid type ref to cl_gui_alv_grid.

                Comentario

                • xeram
                  Junior Member
                  • ago
                  • 17

                  #9

                  Claro, eso lo tengo asi, pero pregunto lo de la pi_data porque cuando quiero activar me dice:
                  In PERFORM or CALL FUNCTION "F_HANDLE_DATA_CHANGED", the actual parameter "I_FINAL_REPORT" is incompatible with the formal parameter "PI_DATA".

                  Yo lo que hice es poner el llamado asi:
                  PERFORM f_handle_data_changed USING i_final_report.

                  donde i_final_report es la tabla que uso para mostrar el alv:
                  DATA:
                  i_final_report
                  TYPE STANDARD TABLE OF ty_final_report. "Table with output report str.

                  Pero debo estar haciendo mal, porque la tabla pi_data es de otro type

                  Comentario

                  • Marlon21
                    Junior Member
                    • mar
                    • 18

                    #10
                    Ese perform tiene que ir tal y como lo definieron arriba

                    *---------------------------------------------------------------------*
                    * CLASS LCL_APPLICATION_9000 DEFINITION
                    *---------------------------------------------------------------------*
                    * ........ *
                    *---------------------------------------------------------------------*
                    CLASS lcl_application_9000 DEFINITION.

                    PUBLIC SECTION.
                    METHODS: handle_data_changed
                    FOR EVENT data_changed OF cl_gui_alv_grid
                    IMPORTING er_data_changed.
                    ENDCLASS. "lcl_application_9000 DEFINITION

                    *---------------------------------------------------------------------*
                    * CLASS LCL_APPLICATION_9000 IMPLEMENTATION
                    *---------------------------------------------------------------------*
                    * ........ *
                    *---------------------------------------------------------------------*
                    CLASS lcl_application_9000 IMPLEMENTATION.

                    METHOD handle_data_changed.
                    PERFORM f_handle_data_changed USING er_data_changed.
                    ENDMETHOD. "handle_data_changed

                    ENDCLASS. "lcl_application_9000 IMPLEMENTATION


                    No cambies er_data_changed por tu tabla interna, este metodo hace que automáticamente tu tabla interna a esa variable PI_DATA.

                    Comentario

                    • xeram
                      Junior Member
                      • ago
                      • 17

                      #11
                      Ahhhhhh ahi entendi!!!
                      Lo que pasa es que no me habia dado cuenta y yo lo estaba llamando al metodo por separado :P

                      MIL GRACIAS!!!!!

                      Comentario

                      Trabajando...