Problema con evento DATA_CHANGED en ALV (REUSE_ALV_GRID_DISPLAY) con campo editable

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • gonzalez.lazo
    Junior Member
    • dic
    • 1

    #1

    Problema con evento DATA_CHANGED en ALV (REUSE_ALV_GRID_DISPLAY) con campo editable

    Hola a todos,

    Tengo poca experiencia en ABAP y esta es la primera vez que posteo, ya que normalmente encuentro lo que necesito.

    Ahora se me presenta un problema y no se como solucionarlo:

    En un ALV tengo una columna que es editable (Campo Check). Necesito saber cuando se modifica para poder actualizarlo en la tabla interna correspondiente para luego poder hacer un proceso de validaciones y almacenamiento en una Tabla Trasparente Z.

    Entiendo que tengo que capturar el evento DATA_CHANGED y efectivamente este evento captura la acción de hacer click en el check pero al final de procesar el Form del evento me sale una ventana de Log de Errores.

    El campo Texto de Mensaje del Log de Errores dice lo siguiente:
    - El campo IT_SALIDA1-CHECK no existe en Dictionary

    Este es el código del Form DATA_CHANGED

    ************************************************** ********
    FORM data_changed USING rr_data TYPE REF TO
    cl_alv_changed_data_protocol.

    DATA: ls_mod_cell TYPE lvc_s_modi,
    lv_value TYPE lvc_value,
    c_texto TYPE c.

    * Inicialitzacions
    DATA: rs_selfield TYPE slis_selfield.

    * tractament de les dades modificades
    SORT rr_data->mt_mod_cells BY row_id .
    LOOP AT rr_data->mt_mod_cells INTO ls_mod_cell.
    IF ls_mod_cell-fieldname = 'CHECK'.
    CLEAR it_salida1.
    READ TABLE it_salida1 INDEX ls_mod_cell-row_id.
    IF sy-subrc = 0.
    it_salida1-check = ls_mod_cell-value.
    c_texto = ls_mod_cell-value.
    MODIFY it_salida1 INDEX ls_mod_cell-row_id.
    CALL METHOD rr_data->modify_cell
    EXPORTING
    i_row_id = ls_mod_cell-row_id
    i_fieldname = 'CHECK'
    i_value = c_texto
    i_tabix = sy-tabix.

    ENDIF.
    ENDIF.
    ENDLOOP.
    * MESSAGE i300.

    ENDFORM. "DATA_CHANGED

    ************************************************** ********

    A alguien se le ocurre como puedo hacer con esto, si voy bien encaminado o mejor hacerlo de otra forma?

    He mirado de hacerlo con objetos, pero tendría que modificar todo el programa y no quiero, ya que lo tienen en producción.

    Muchas gracias por su atención y espero que puedan ayudarme....

    Saludos...
  • gib8107
    Member
    • may
    • 44

    #2
    Seguramente tienes alguna diferencia entre el nombre de la tabla que mandas y el que esta declarado.

    de todas formas algunas veces para que se refresque el dato de la tabla interna es ncesesario poner

    Código:
      CALL METHOD G_GRID->CHECK_CHANGED_DATA
        IMPORTING
          E_VALID = L_VALID.
    despues de eso se refre4scan los datos cambiados en la tabla interna.

    Comentario

    Trabajando...