ayudaALV no actualiza contenido de tabla en dynpro

Hola, busco de su ayuda por favor, tengo un reporte ALV OO estoy utilizando el método cl_gui_custom_container->set_table_for_first_display para mostrar datos desde una dynpro, la primera ocacion lo hace bien pero al mostrar de nuevo el alv no actualiza los datos en pantalla, verifique y en la tabla si estan llegando uso tambien refresh_table_display y flush pero no logro hacer que funcione.
Es decir desde la primera dynpro selecciono un registro y se manda por set_table_for_first_display
al mostrar el registro en la segunda dynpro el usuario actualiza algunos campos y guarda los datos mostrando un semaforo por cada registro para esto uso refresh_table_display
despues el usuario regresa a la primera dynpro y desde alli en vez de un registro elige tres y al mostar de nuevo estos tres en la segunda dynpro sigue mostrando el registro de la iteracion anterior he usado set_table_for_first_display de nuevo y nada, tambien refresh_table_display y nada, he probado hacer un clear a la instancia de clase y nada .
Alguna idea de como hacer que actualice el ALV?

Gracias por su tiempo y ayuda.
Saludos

Hola Alexis97,

Creo que tu problema esta en la secuencia…
Aqui te adjunto una secuencia de codigo para tener dos ALV, en donde desde la ALV1 segn lo que
hagas te lleva a la ALV2 y muestra los datos…Ahora si lo que quieres es que al volver desde el ALV2 al ALV1 este este posicionado en la o las filas marcadas debe utilizar los metodos

—> guarda la o las filas seleccionadas
o_grid_cc_main->get_selected_rows( IMPORTING et_row_no = lt_row_no ).

—> selecciona y se posiciona en la o las filas guardadas antes de ir al ALV2
o_grid_cc_main->set_selected_rows( it_row_no = lt_row_no[] ).
PERFORM show_alv_deta USING gs_alv_main.

-------------------------------------------------------------------------------

*---->>> Aqui la secuencia…Espero te sea util.

*---->> DYNPRO PRINCIPAL : LOGICA DE PROCESOS

PROCESS BEFORE OUTPUT.
MODULE status_3000.
MODULE init_container_pbo_3000.
*
PROCESS AFTER INPUT.
MODULE exit_3000 AT EXIT-COMMAND.
MODULE user_command_3000.

-----------------------------------------------------------------------------------------------------------------

  • MODULE PBO : INIT_CONTAINER_PBO_3000 OUTPUT
    -----------------------------------------------------------------------------------------------------------------
    MODULE init_container_pbo_3000 OUTPUT.
  • PERFORM init_container_main.

ENDMODULE. "

-------------------------------------------------------------------------------------------------------------------

  • FORM : INIT_CONTAINER_MAIN
    -------------------------------------------------------------------------------------------------------------------
    FORM init_container_main.

*------- LLENAR TABLA INTERNA DEL ALV PRINCIPAL
*
*
IF ( cc_main IS INITIAL ).
*
*
CREATE OBJECT cc_main
EXPORTING
container_name = cc_main_name.
*
CREATE OBJECT o_grid_cc_main
EXPORTING
i_parent = cc_main.
*

  • LAMADA DE LOS EVENTOS DESARROLLADO EN LA CLASE : LCL_EVENT_RECEIVER
    CREATE OBJECT o_events_main.
    SET HANDLER o_events_main->on_user_command FOR o_grid_cc_main.
    SET HANDLER o_events_main->on_button_click_main_alv FOR o_grid_cc_main.
    SET HANDLER o_events_main->on_hotspot_click FOR o_grid_cc_main.
    SET HANDLER o_events_main->on_toolbar FOR o_grid_cc_main.
    SET HANDLER o_events_main->on_data_changed FOR o_grid_cc_main.
    SET HANDLER o_events_main->on_data_changed_finished FOR o_grid_cc_main.

  • ACTUA CUANDO SE MODIFICA UN VALOR EN EL ALV Y SE PRECIO ENTER
    CALL METHOD o_grid_cc_main->register_edit_event
    EXPORTING
    i_event_id = cl_gui_alv_grid=>mc_evt_enter.

  • PERFORM crea_fcat_main CHANGING gt_fcat_alv_main[].
    PERFORM modify_fcat_alv USING ‘MAIN’ CHANGING gt_fcat_alv_main[].
    PERFORM prepare_layout_alv USING ‘MAIN’ CHANGING gs_layout_main.

    CREATE OBJECT lcl_handler_receiver_ca.

  • CALL METHOD o_grid_cc_main->set_table_for_first_display
    EXPORTING
    is_layout = gs_layout_main
    i_save = ‘A’
    i_default = ‘X’
    CHANGING
    it_outtab = gt_alv_main[]
    it_fieldcatalog = gt_fcat_alv_main[]
    it_sort = lt_sort
    EXCEPTIONS
    invalid_parameter_combination = 1
    program_error = 2
    too_many_lines = 3
    OTHERS = 4.
    ENDIF.

  • CALL METHOD o_grid_cc_main->refresh_table_display
    EXPORTING
    is_stable = gs_stable.

ENDFORM.

-------------------------------------------------------------------------------------------------------------------

  • FORM : USER_COMMAND_DYN
    -------------------------------------------------------------------------------------------------------------------
    FORM user_command_dyn.

  • ld_okcode = ok_code.
    CLEAR : ok_code.

  • CASE ld_okcode.

    WHEN ‘VER_DETALLE’.

    PERFORM show_alv_deta USING gs_alv_main.
    

ENDFORM.

-------------------------------------------------------------------------------------------------------------------

  • FORM : SHOW_ALV_DETA
    -------------------------------------------------------------------------------------------------------------------
    FORM show_alv_deta USING ps_alv_main TYPE ty_alv_main.

*---- LLENAT TABLA INTERNA DEL ALV DE DETALLE

  • IF ( cc_deta IS INITIAL ).
  • CREATE OBJECT cc_deta
    EXPORTING
    container_name = cc_deta_name.
  • CREATE OBJECT o_grid_cc_deta
    EXPORTING
    i_parent = cc_deta.
  • LAMADA DE LOS EVENTOS DESARROLLADO EN LA CLASE : LCL_EVENT_RECEIVER
    CREATE OBJECT o_events_deta.
    SET HANDLER o_events_deta->on_user_command FOR o_grid_cc_deta.
    SET HANDLER o_events_deta->on_button_click_deta_alv FOR o_grid_cc_deta.
    SET HANDLER o_events_deta->on_hotspot_click_deta FOR o_grid_cc_deta.
    SET HANDLER o_events_deta->on_toolbar_deta FOR o_grid_cc_deta.
    SET HANDLER o_events_deta->on_data_changed FOR o_grid_cc_deta.
    SET HANDLER o_events_deta->on_data_changed_finished FOR o_grid_cc_deta.
  • ACTUA CUANDO SE MODIFICA UN VALOR EN EL ALV Y SE PRECIO ENTER
    CALL METHOD o_grid_cc_deta->register_edit_event
    EXPORTING
    i_event_id = cl_gui_alv_grid=>mc_evt_enter.
  • PERFORM crea_fcat_deta CHANGING gt_fcat_alv_deta[].
    PERFORM modify_fcat_alv USING ‘DETA’ CHANGING gt_fcat_alv_deta[].
    PERFORM prepare_layout_alv USING ‘DETA’ CHANGING gs_layout_deta.
  • CALL METHOD o_grid_cc_deta->set_table_for_first_display
    EXPORTING
    is_variant = gs_variant
    is_layout = gs_layout_deta
    i_save = ‘A’
    i_default = ‘X’
    CHANGING
    it_outtab = gt_alv_deta[]
    it_fieldcatalog = gt_fcat_alv_deta[]
    it_sort = lt_sort
    EXCEPTIONS
    invalid_parameter_combination = 1
    program_error = 2
    too_many_lines = 3
    OTHERS = 4.
    ELSE.
    CALL METHOD o_grid_cc_deta->refresh_table_display
    EXPORTING
    is_stable = gs_stable.
    ENDIF.

ENDFORM. "

-------------------------------------------------------------------------------------------------------------------

  • FORM : USER_COMMAND_ALV
    -------------------------------------------------------------------------------------------------------------------
    FORM user_command_alv USING p_function
    pa_alv_name.
  • CASE p_function.
  • WHEN ‘CARG’.

*------>>> PROCESO DE ESTE COMAMNDO

    IF ( o_grid_cc_main IS BOUND ).
      CALL METHOD o_grid_cc_main->refresh_table_display
        EXPORTING
          is_stable = gs_stable.
    ENDIF.
    IF ( o_grid_cc_deta IS BOUND ).
      CALL METHOD o_grid_cc_deta->refresh_table_display.
    ENDIF.
  • ENDCASE.
  • CALL METHOD cl_gui_cfw=>dispatch.
    CLEAR : sy-ucomm, ok_code.

ENDFORM. "

1 me gusta

Hay muchisimas gracias me has salvado llevaba atascado dos semanas asi, me has dado la solucion.
El tema estaba en que estaba inicializando el contenedor y el objeto del alv a cada pase por el metodo de esta forma.
Van dentro del if para que no los cree a cada pase por el método.

Bendiciones excelente día.

Muchas muchas gracias.

Nota esta es la forma erronea
*cREA EL CONTENEDOR
CREATE OBJECT lo_cnt_xls
EXPORTING

  • parent         =
    container_name = 'ZCONTROL'
    
  • style          =
    
  • lifetime       = lifetime_default
    
  • repid          =
    
  • dynnr          =
    
  • no_autodef_progid_dynnr     =
    
  • EXCEPTIONS
  • cntl_error     = 1
    
  • cntl_system_error           = 2
    
  • create_error   = 3
    
  • lifetime_error = 4
    
  • lifetime_dynpro_dynpro_link = 5
    
  • others         = 6
    
    .

*crea el objeto del alv
CREATE OBJECT lo_alv_xls
EXPORTING

  • i_shellstyle      = 0
    
  • i_lifetime        =
    i_parent          = lo_cnt_xls
    
  • i_appl_events     = space
    
  • i_parentdbg       =
    
  • i_applogparent    =
    
  • i_graphicsparent  =
    
  • i_name            =
    
  • i_fcat_complete   = SPACE
    
    EXCEPTIONS
    error_cntl_create = 1
    error_cntl_init = 2
    error_cntl_link = 3
    error_dp_create = 4
    OTHERS = 5.
    IF sy-subrc <> 0.
  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  •        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    
    ENDIF.

IF lv_pase IS INITIAL.******************
lv_pase = ‘x’.

CALL METHOD lo_alv_xls->set_table_for_first_display
  EXPORTING
  •   i_buffer_active               =
    
  •   i_bypassing_buffer            =
    
  •   i_consistency_check           =
    
  •   i_structure_name              = lv_struc_name "'RFPOSXEXT'
    
  •   is_variant                    =
    
  •   i_save                        =
    
  •   i_default                     = 'X'
      is_layout                     = lv_lay_xls
    
  •   is_print                      =
    
  •   it_special_groups             =
    
  •   it_toolbar_excluding          =
    
  •   it_hyperlink                  =
    
  •   it_alv_graphics               =
    
  •   it_except_qinfo               =
    
  •   ir_salv_adapter               =
    CHANGING
      it_outtab                     = gt_items[] "it_data_proc
      it_fieldcatalog               = it_fiel_catalog
    
  •   it_sort                       =
    
  •   it_filter                     =
    EXCEPTIONS
      invalid_parameter_combination = 1
      program_error                 = 2
      too_many_lines                = 3
      OTHERS                        = 4.
    

    IF sy-subrc <> 0.
    MESSAGE ‘Error’ TYPE ‘E’.
    ENDIF.

    ELSE.*********************

    CALL METHOD lo_alv_xls->refresh_table_display
    EXCEPTIONS
    finished = 1
    OTHERS = 2.

    ENDIF.

CALL METHOD cl_gui_cfw=>flush

  • EXCEPTIONS
  • cntl_system_error = 1 " cntl_system_error
  • cntl_error = 2 " cntl_error
  • others = 3
    .
    IF SY-SUBRC <> 0.
  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.

data lv_ret type i.
CALL METHOD cl_gui_cfw=>dispatch
IMPORTING
return_code = lv_ret " Return Code
.

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.