ALV GRID con POP UP

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • zurfero
    Junior Member
    • ene
    • 13

    #1

    ALV GRID con POP UP

    Hola.
    Bueno, la duda es la siguiente..., tengo un ALV, y en ese ALV tengo unas celdas que son editables..., pero quiero que la información que hay en esas celdas se cargue de forma similar a un matchcode.
    Qué quiero decir con esto..., Al pinchar en el matchcode, debería aparecer una pantalla con unos datos que yo debo de cargar y que no puedo ir a consultar a una tabla, ya que es un join complejo que depende de una serie de caracteristicas del objeto...

    Como plantearíais esto??...
    Hay alguna forma de que aparezca un popup..., o de crear una celda con matchcode...o algo así...???

    Me podeis dar alguna idea??

    Gracias.
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    Hola, si creo q es lo q entendi esta algo complejo, quieres una ayuda dentro de la celda editable de tu ALV y al mismo tiempo que la ayuda muestre los campos que vas agregando en las celdas???

    Si ese es el caso entonces creo q por programa no se puede hacer mucho pero si es posible, nunca lo he hecho pero se me ocurre primero activar el campo del catalogo del ALV llamado CHECKTABLE, eso esta dentro de la estructura LVC_S_FCAT (Catalogo con OO), en ese campo se debe indicar una tabla de BD el cual mostrara los valores que tienes, ahora yo deberia crear una tabla Z con un solo campo el cual sera el campo que quiero q aparezca en el matchcode, a medida que voy llenando los datos en las celdas editables voy agregando datos en la tabla Z y asi en linea iran apareciendo los datos que agregaste en tu ayuda de busqueda, eso se puede hacer con ALV OO con el evento handle_data_changed, espero te sirva la info y la idea, si entendi mal xfa explicar mejor para q asi podamos ayudart entre todos
    David Carballido Córdova

    Comentario

    • zurfero
      Junior Member
      • ene
      • 13

      #3
      Hola David.
      Efectivamente es algo lioso..., a ver si esta vez consigo explicarme mejor.

      El problema , es que esos datos que tengo que presentar para que rellenen esa celda son dinámicos..., no puedo tenerlos almacenados en una tabla , ni una vista...,como dices para asociar a dicho campo una ayuda de búsqueda...,

      La idea sería poder indicar (si se puede) en el catálogo de campos que esa celda tiene matchcode (sin que tenga asociado dicho campo ayuda de busqueda)..., y poder detectar el evento al clickar ahí, para que yo pueda realizar el proceso necesario y mostrar una nueva ventana tipo pop up (Me podéis decir qué funcion puedo utilizar para hacer esto??) ..., con los datos que he cargado y que desde ahí se seleccione y se cargue en la celda.

      Gracias por la ayuda.

      Comentario

      • eljota
        Member
        • dic
        • 48

        #4
        alv llama popup

        Creo q ya entendi lo q intentas hacer y si se puede:

        Primero debes capturar la accion d dar doble clic a la celda q quieres editar, para eso debes asegurarte q:

        q tu layout tenga asignado un valor en el campo F2CODE.

        GS_LAYOUT-F2CODE = 'MATCHCODE'.

        q tu llamado a alv grid tenga como export este layout y el user_command:

        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        EXPORTING
        I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE'
        I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
        *
        *
        *
        IS_LAYOUT = GS_LAYOUT
        TABLES
        T_OUTTAB = 'tu_tabla_interna'
        EXCEPTIONS
        PROGRAM_ERROR = 1
        OTHERS = 2.

        Luego implementar tu user_command:

        FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
        RS_SELFIELD TYPE SLIS_SELFIELD.

        CHECK NOT RS_SELFIELD-TABNAME IS INITIAL.
        CASE R_UCOMM.
        WHEN 'MATCHCODE'.
        IF RS_SELFIELD-FIELDNAME EQ 'nombre_campo_editable'.
        " Aqui va la funcionalidad una vez q hiciste doble clic al campo

        " Llamado al pop up tipo matchcode
        CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
        EXPORTING
        RETFIELD = 'CAMPO-TABLA-POPUP'
        WINDOW_TITLE = 'TITULO POP-UP'
        VALUE_ORG = 'S'
        TABLES
        VALUE_TAB = 'tabla interna con valores popup'
        RETURN_TAB = IT_MATCH
        EXCEPTIONS
        PARAMETER_ERROR = 1
        NO_VALUES_FOUND = 2
        OTHERS = 3.

        IF SY-SUBRC EQ 0.
        READ TABLE IT_MATCH INDEX 1.
        tu_tabla_interna-nombre_campo_editable = IT_MATCH-FIELDVAL.
        ENDIF.
        " Actualizacion del campo con el valor dl pop up
        MODIFY tu_tabla_interna INDEX RS_SELFIELD-TABINDEX.

        rs_selfield-refresh = 'X'.
        clear i_ucomm.
        ENDIF.
        ENDCASE.
        ENDFORM.

        Necesitaras declarar la tabla interna:
        DATA: BEGIN OF IT_MATCH OCCURS 0,
        SHLPNAME LIKE DDSHRETVAL-SHLPNAME,
        FIELDNAME LIKE DDSHRETVAL-FIELDNAME,
        RECORDPOS LIKE DDSHRETVAL-RECORDPOS,
        FIELDVAL LIKE DDSHRETVAL-FIELDVAL,
        RETFIELD LIKE DDSHRETVAL-RETFIELD,
        END OF IT_MATCH.

        Esto lo hice sin compilar pero he hecho programas q hacen esto, asi q si tienes alguna duda, me avisas.

        salu2
        Jaime Zegarra V.
        ________________
        ABAP Developer

        Comentario

        • zurfero
          Junior Member
          • ene
          • 13

          #5
          Hola eljota.

          Voy a intentar lo que dices, pues aún no conseguí hacerlo.

          Gracias.

          Comentario

          Trabajando...