Comparar campos en un alv

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • mccoy
    Junior Member
    • abr
    • 6

    #1

    Comparar campos en un alv

    Buenas, estoy haciendo un ALV y necesito comparar el contenido de dos campos. Puesto que solamente puede estar informado uno de los dos campos.

    *------------------------------------------------------------------
    * CLASS lcl_event_hadler DEFINITION
    *------------------------------------------------------------------


    CLASS lcl_event_handler DEFINITION.

    PUBLIC SECTION.

    METHODS:

    handle_data_changed
    FOR EVENT data_changed OF cl_gui_alv_grid
    IMPORTING er_data_changed.

    ENDCLASS. "lcl_event_handler DEFINITION

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

    CLASS lcl_event_handler IMPLEMENTATION.
    *------------------------------------------------------------------
    * METHOD handle_data_changed
    *------------------------------------------------------------------


    METHOD handle_data_changed.

    PERFORM handle_data_changed USING er_data_changed.

    ENDMETHOD. "handle_data_changed

    ENDCLASS. "lcl_event_handler IMPLEMENTATION

    *---------------------------------------------------------------------
    * Form HANDLE_DATA_CHANGED
    *---------------------------------------------------------------------
    * text
    *----------------------------------------------------------------------
    * -->P_ER_DATA_CHANGED text
    *----------------------------------------------------------------------

    FORM handle_data_changed USING ir_data_changed
    TYPE REF TO
    cl_alv_changed_data_protocol.


    DATA: ls_mod_cell TYPE lvc_s_modi,
    lv_value TYPE lvc_value,
    lv_value1 TYPE lvc_value.

    * SORT ir_data_changed->mt_mod_cells." BY row_id.


    LOOP AT ir_data_changed->mt_mod_cells
    INTO ls_mod_cell
    WHERE fieldname = 'CAMPO2'.

    CALL METHOD ir_data_changed->get_cell_value
    EXPORTING
    i_row_id = ls_mod_cell-row_id
    i_fieldname = 'CAMPO2'
    IMPORTING
    e_value = lv_value1.

    ENDLOOP.

    LOOP AT ir_data_changed->mt_mod_cells
    INTO ls_mod_cell
    WHERE fieldname = 'CAMPO1'.

    IF it_prueba-clase IS INITIAL.

    CALL METHOD ir_data_changed->modify_cell
    EXPORTING
    i_row_id = ls_mod_cell-row_id
    i_fieldname = ls_mod_cell-fieldname
    i_value = campo_prueba.
    ENDIF.

    CALL METHOD ir_data_changed->get_cell_value
    EXPORTING
    i_row_id = ls_mod_cell-row_id
    i_fieldname = 'CAMPO1'

    IMPORTING
    e_value = lv_value.

    IF lv_value = lv_value1.

    CALL METHOD ir_data_changed->add_protocol_entry
    EXPORTING
    i_msgid = 'SU'
    i_msgno = '000'
    i_msgty = 'E'
    i_msgv1 = 'Solo un campo informado '
    i_fieldname = ls_mod_cell-fieldname
    i_row_id = ls_mod_cell-row_id.

    ENDIF.

    ENDLOOP.

    ENDFORM. " HANDLE_DATA_CHANGED

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

    Con este codigo he coseguido que me chequee el campo una vez, y solo cuando el que informo es el campo 1 o 2. Si borro el campo 2, pulso intro y vuelvo a rellenar el campo no entra en la parte del codigo para recuperar el campo 2.
    Hay alguna otra manera de hacerlo?

    Gracias por a delantado!
  • danny
    Member
    • mar
    • 36

    #2
    Holas,

    FORM handle_data_changed USING ir_data_changed
    TYPE REF TO
    cl_alv_changed_data_protocol.

    DATA: e_modi TYPE lvc_s_modi.

    LOOP AT ir_data_changed->mt_good_cells INTO e_modi.
    CASE e_modi-fieldname.
    WHEN 'CAMPO1.
    If e_modi-value ne space.

    CALL METHOD ir_data_changed->modify_cell
    EXPORTING
    i_row_id = e_modi-row_id
    i_tabix = e_modi-tabix
    i_fieldname = 'CAMPO2'
    i_value = ''.


    Endif.
    WHEN 'CAMPO2'.
    If e_modi-value ne space.

    CALL METHOD ir_data_changed->modify_cell
    EXPORTING
    i_row_id = e_modi-row_id
    i_tabix = e_modi-tabix
    i_fieldname = 'CAMPO1'
    i_value = ''.


    Endif.
    ENDCASE.
    ENDLOOP.

    ENDFORM. " HANDLE_DATA_CHANGED

    Saludos;

    Comentario

    Trabajando...