Como se pueden manejar 2 alv en el mismo programa

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Yanett Ponce Seares
    Member
    • abr
    • 61

    #1

    Como se pueden manejar 2 alv en el mismo programa

    Holaaa soy nueva en este lenguaje y estoy aprendiendo. Tengo el sgte. problema ... Genere un ALV donde coloque botones que me actualiza la información según el boton que apriete. Resulta que solo acepta crear solo 4 botones y necesito generar otros 3, por eso desde un botón quiero llamar otra ALV ... Se podra?
    Ojala Alguien me pueda ayudar .... Muchas Gracias
    YPonce
  • Abaunus
    Senior Member
    • nov
    • 119

    #2
    A ver si te entendí. ¿Estás trabajando con funciones? Si lo que querés es que tocando un botón se despliegue otro ALV, al manipular el UCOMM de dicho botón tenés que desplegar el otro ALV tal cual hiciste con el primero, o sea, creándole FIELDCAT, tabla de salida y llamando nuevamente a la función REUSE_ALV.

    Cualquier cosa, avisános.

    Comentario

    • Yanett Ponce Seares
      Member
      • abr
      • 61

      #3
      Originalmente publicado por Abaunus
      A ver si te entendí. ¿Estás trabajando con funciones? Si lo que querés es que tocando un botón se despliegue otro ALV, al manipular el UCOMM de dicho botón tenés que desplegar el otro ALV tal cual hiciste con el primero, o sea, creándole FIELDCAT, tabla de salida y llamando nuevamente a la función REUSE_ALV.

      Cualquier cosa, avisános.
      Si, estoy con funciones, manipulo el ucomm, asigno 4 botones y no me permite asignar màs y necesito generar 3 botones más ... y ahí es donde me pierdo ... Ojala me entiendassss muchas gracias ..... Estos botones estan en la barra de funciones del alv donde uno puede ordenar .... etc.
      gracias una vez mas ----
      YPonce

      Comentario

      • Abaunus
        Senior Member
        • nov
        • 119

        #4
        Primero, no entiendo por qué sólo podés asignar 4 botones... ¿estás creando el status por el Menú Painter?
        Al llamar al segundo ALV desde la manipulación de un botón, podés poner otro status.... pero tampoco entiendo si ese segundo ALV debe mostrar otra info, diferente al primero....
        Editado por última vez por Abaunus; 16/10/2009, 19:27:34.

        Comentario

        • Yanett Ponce Seares
          Member
          • abr
          • 61

          #5
          Originalmente publicado por Abaunus
          Primero, no entiendo por qué sólo podés asignar 4 botones... ¿estás creando el status por el Menú Painter?
          Al llamar al segundo ALV desde la manipulación de un botón, podés poner otro status.... pero tampoco entiendo si ese segundo ALV debe mostrar otra info, diferente al primero....
          Como te explico ....
          Ocupo FORM user_command donde distingo que botòn apreto con un case when 'FC01' ... 'FC02' .... y ahi llamo la ALV .
          En FORM pf_status ... declaro y asigno los botones como por ej :
          t_code_attrib_tab-icon_id = '@CS@'.
          t_code_attrib_tab-text = 'Ventas - Ppto. en Cajas'.
          t_code_attrib_tab-icon_text = 'Visualizar Cajas'.
          APPEND t_code_attrib_tab.
          y se agregan a la tabla según lo que quiera mostrar y es aqui el problema que solo me soporta 4 append a la tabla ....
          YPonce

          Comentario

          • Abaunus
            Senior Member
            • nov
            • 119

            #6
            Me parece mejor que crees un status por la se41, y lo asignes al alv. Así no te limita a 4 botones. Si te parece, te paso cómo hacerlo.

            Comentario

            • Yanett Ponce Seares
              Member
              • abr
              • 61

              #7
              Originalmente publicado por Abaunus
              Me parece mejor que crees un status por la se41, y lo asignes al alv. Así no te limita a 4 botones. Si te parece, te paso cómo hacerlo.
              Yaaaaaa enseñame ya que no lo se ... y no me imagino ....
              si puedes guiarme estaria muy agradecida ....
              YPonce

              Comentario

              • Abaunus
                Senior Member
                • nov
                • 119

                #8
                A ver:

                Tenés que crear un status por la se41. Lo mejor, es copiar uno standard que va muy bien. Ingresás los datos: Programa: SAPLKKBL, status: STANDARD_FULLSCREEN, tocás el botón "copiar" y ahí le ponés el nombre de tu reporte, y al status "ZSTAT", por ejemplo. Una vez copiado, entrás a modificar ese status copiado, el de tu Z.
                En "Barra de pulsadores" agregás todos los botones que necesitás, con código de función (que reemplazan a los FC01, FC02, etc), texto, ícono, etc.
                Una vez creado todo, lo activás y listo.

                Ahora, en la tabla de eventos que le pasás a tu ALV, por ejemplo:
                Código:
                * Función que despliega el ALV.
                  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
                    EXPORTING
                      i_callback_program = v_report
                      i_structure_name   = lv_tabla
                      is_layout          = w_layout
                      i_save             = c_save
                      it_events          = i_events
                      it_fieldcat        = i_fieldcat
                    TABLES
                      t_outtab           = i_salida
                    EXCEPTIONS
                      program_error      = 1.
                La tabla i_events, tenés que agregar un evento que es el de status:
                Código:
                * Evento SET_PF_STATUS
                  CLEAR w_events.
                
                  w_events-form = 'f_set_pf_status'.
                  w_events-name = slis_ev_pf_status_set.
                
                  APPEND w_events
                         TO i_events.
                Y en el form de dicho evento:
                Código:
                FORM f_set_pf_status
                     USING p_i_extab TYPE slis_t_extab.
                
                * Limpiamos la tabla de exclusiones porque queremos todos los botones
                  FREE p_i_extab.
                
                * Indicamos el nombre del status
                  SET PF-STATUS 'ZSTAT'
                      EXCLUDING p_i_extab.
                
                ENDFORM.

                Básicamente es eso, crear el status (pero está el standard como base que va muy bien), y luego asignarlo al ALV. Ahora, en vez de usar los códigos de función 'FC01', etc, usás los que pusiste vos en tus botones, por ejemplo, 'GRAPH', o 'CONT', lo que sea. ¿Se entiende?
                Cualquier cosa, avisános.
                Saludos
                Editado por última vez por Abaunus; 16/10/2009, 20:11:16.

                Comentario

                • Yanett Ponce Seares
                  Member
                  • abr
                  • 61

                  #9
                  Originalmente publicado por Abaunus
                  A ver:

                  Tenés que crear un status por la se41. Lo mejor, es copiar uno standard que va muy bien. Ingresás los datos: Programa: SAPLKKBL, status: STANDARD_FULLSCREEN, tocás el botón "copiar" y ahí le ponés el nombre de tu reporte, y al status "ZSTAT", por ejemplo. Una vez copiado, entrás a modificar ese status copiado, el de tu Z.
                  En "Barra de pulsadores" agregás todos los botones que necesitás, con código de función (que reemplazan a los FC01, FC02, etc), texto, ícono, etc.
                  Una vez creado todo, lo activás y listo.

                  Ahora, en la tabla de eventos que le pasás a tu ALV, por ejemplo:
                  Código:
                  * Función que despliega el ALV.
                    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
                      EXPORTING
                        i_callback_program = v_report
                        i_structure_name   = lv_tabla
                        is_layout          = w_layout
                        i_save             = c_save
                        it_events          = i_events
                        it_fieldcat        = i_fieldcat
                      TABLES
                        t_outtab           = i_salida
                      EXCEPTIONS
                        program_error      = 1.
                  La tabla i_events, tenés que agregar un evento que es el de status:
                  Código:
                  * Evento SET_PF_STATUS
                    CLEAR w_events.
                  
                    w_events-form = 'f_set_pf_status'.
                    w_events-name = slis_ev_pf_status_set.
                  
                    APPEND w_events
                           TO i_events.
                  Y en el form de dicho evento:
                  Código:
                  FORM f_set_pf_status
                       USING p_i_extab TYPE slis_t_extab.
                  
                  * Limpiamos la tabla de exclusiones porque queremos todos los botones
                    FREE p_i_extab.
                  
                  * Indicamos el nombre del status
                    SET PF-STATUS 'ZSTAT'
                        EXCLUDING p_i_extab.
                  
                  ENDFORM.

                  Básicamente es eso, crear el status (pero está el standard como base que va muy bien), y luego asignarlo al ALV. Ahora, en vez de usar los códigos de función 'FC01', etc, usás los que pusiste vos en tus botones, por ejemplo, 'GRAPH', o 'CONT', lo que sea. ¿Se entiende?
                  Cualquier cosa, avisános.
                  Saludos
                  Holaaaa agregue el zstat y sus botones .... pero no me aparecen en la ventana , aomejor el evento lo estoy asignando mal ... es primera vez que entro a trabajar con events por eso me cuesta un poquito seguir el codigo.
                  Muchas Gracias por tú apoyo ....
                  YPonce

                  Comentario

                  • jtristan
                    Senior Member
                    • oct
                    • 240

                    #10
                    ¿Puedes poner el código para echarle un vistazo?

                    Comentario

                    • Yanett Ponce Seares
                      Member
                      • abr
                      • 61

                      #11
                      Originalmente publicado por jtristan
                      ¿Puedes poner el código para echarle un vistazo?
                      oka...
                      Codigo declaro el ALV
                      *--------------------------------------------------------------------------
                      * TABLA INTERNA ALV
                      *--------------------------------------------------------------------------
                      DATA: t_layout TYPE slis_layout_alv, " FORMATO QUe TIENE EL ALV
                      t_fieldcat TYPE slis_fieldcat_alv OCCURS 0 WITH HEADER LINE,
                      t_sort TYPE slis_t_sortinfo_alv, " PERMITE ORDENAR EL ALV
                      t_list_top_of_page TYPE slis_t_listheader,
                      t_events TYPE slis_t_event.
                      types: begin of slis_alv_event,
                      nombre(30),
                      form(30),
                      end of slis_alv_event.
                      types slis_t_event type slis_alv_event OCCURS 0.

                      Codigo Ejecuto el ALV

                      *&---------------------------------------------------------------------*
                      *& Form EJECUCION_ALV_CAJAS
                      *&---------------------------------------------------------------------*
                      * text
                      *----------------------------------------------------------------------*
                      * --> p1 text
                      * <-- p2 text
                      *----------------------------------------------------------------------*

                      FORM ejecucion_alv_cajas .
                      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
                      EXPORTING
                      it_sort = t_sort[]
                      i_interface_check = 'X'
                      i_callback_program = sy-repid
                      i_callback_user_command = 'USER_COMMAND_CAJAS'
                      i_callback_pf_status_set = 'PF_STATUS_T_ALV_CAJAS'
                      i_structure_name = 'TI_ALV'
                      i_save = w_save
                      is_layout = t_layout
                      it_fieldcat = t_fieldcat[]
                      i_grid_settings = w_s_grid_settings
                      i_default = ' '
                      it_events = t_events[]
                      * it_event_exit = 'X'
                      is_print = w_impresion
                      * it_special_groups = 'VTEXT'
                      TABLES
                      t_outtab = ti_alv
                      EXCEPTIONS
                      program_error = 1
                      OTHERS = 2.
                      IF sy-subrc <> 0.
                      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                      ENDIF.

                      ENDFORM. " EJECUCION_ALV_CAJAS


                      form pf_status_set using rt_extab type slis_t_extab.
                      set PF-STATUS 'ZSTAT' EXCLUDING rt_extab.
                      ENDFORM.


                      form evento_pf_status.
                      data w_events type slis_alv_event.
                      CLEAR w_events.

                      w_events-form = 'pf_status_set'.
                      w_events-nombre = slis_ev_pf_status_set.

                      APPEND w_events
                      TO t_events.
                      ENDFORM.




                      Acà esta el manejo del user command que creo que deberia cambiar ya que aca habia definido los botones, no el ZSTAT que es donde los quiero manejar ya que no me alcanza para asignar los botones que necesito .... Ojala me puedas entender ... mira que ya estoy enredada ... gracias


                      *&---------------------------------------------------------------------*
                      *& Form user_command_kilos
                      *&---------------------------------------------------------------------*
                      * text
                      *----------------------------------------------------------------------*
                      * -->U_UCOMM text
                      * -->US_SELFIELD text
                      *----------------------------------------------------------------------*
                      FORM user_command_cajas USING u_ucomm TYPE syucomm
                      us_selfield TYPE slis_selfield. "#EC CALLED

                      CASE u_ucomm.
                      WHEN 'FC01'.
                      IF p_conso = ' '.
                      PERFORM llena_alv_fieldcat_pesos.
                      PERFORM layout_pesos.
                      PERFORM sort_pesos.
                      PERFORM ejec_alv_pesos.
                      ELSE.
                      PERFORM llena_alv_fieldcat_consolidado.
                      PERFORM layout_pesos.
                      PERFORM sort_pesos_consolidado.
                      PERFORM ejec_alv_pesos.
                      ENDIF.
                      WHEN 'FC02'.
                      IF p_conso = ' ' . " DETALLE POR CANAL DE VENTAS
                      PERFORM llena_alv_fieldcat_kilos.
                      PERFORM layout_kilos.
                      PERFORM sort_kilos.
                      PERFORM ejecucion_alv_kilos.
                      ELSE.
                      PERFORM llena_alv_fieldcat_kilos_con. " DETALLE CONSOLIDADO
                      PERFORM layout_kilos_con.
                      PERFORM sort_kilos_con.
                      PERFORM ejecucion_alv_kilos_con.
                      ENDIF.
                      WHEN 'FC03'.
                      IF p_conso = ' ' . " DETALLE POR CANAL DE VENTAS
                      PERFORM llena_alv_fieldcat_unidad.
                      PERFORM layout_unidad.
                      PERFORM sort_unidad.
                      PERFORM ejecucion_alv_unidad.
                      ELSE.
                      PERFORM llena_alv_fieldcat_unidad_con.
                      PERFORM layout_unidad.
                      PERFORM sort_unidad_con.
                      PERFORM ejecucion_alv_unidad.
                      ENDIF.

                      WHEN 'FC04'.
                      IF p_conso = ' ' . " DETALLE POR CANAL DE VENTAS
                      PERFORM llena_alv_fieldcat_margen.
                      PERFORM layout_margen.
                      PERFORM sort_margen.
                      PERFORM ejecucion_alv_margen.
                      ELSE.
                      PERFORM llena_alv_fieldcat_margen_con.
                      PERFORM layout_margen.
                      PERFORM sort_margen_con.
                      PERFORM ejecucion_alv_margen.
                      ENDIF.



                      ENDCASE.
                      ENDFORM. "user_command2
                      YPonce

                      Comentario

                      • Abaunus
                        Senior Member
                        • nov
                        • 119

                        #12
                        Yanett, dos cositas:

                        Primero, no hace falta que declares los eventos, ya que el evento del status lo estás declarando aca:
                        Código:
                        i_callback_pf_status_set = 'PF_STATUS_T_ALV_CAJAS'
                        Así que esto:
                        form pf_status_set using rt_extab type slis_t_extab.
                        set PF-STATUS 'ZSTAT' EXCLUDING rt_extab.
                        ENDFORM.
                        debería ser así:
                        Código:
                        form PF_STATUS_T_ALV_CAJAS using rt_extab type slis_t_extab.
                        set PF-STATUS 'ZSTAT' EXCLUDING rt_extab.
                        ENDFORM.
                        Y lo otro, en el FORM user_command_cajas, en el CASE, en vez de esos nombres FC01, etc... deberías poner los que asignaste a tus botones en la se41.

                        Comentario

                        • Yanett Ponce Seares
                          Member
                          • abr
                          • 61

                          #13
                          Originalmente publicado por Abaunus
                          Yanett, dos cositas:

                          Primero, no hace falta que declares los eventos, ya que el evento del status lo estás declarando aca:
                          Código:
                          i_callback_pf_status_set = 'PF_STATUS_T_ALV_CAJAS'
                          Así que esto:


                          debería ser así:
                          Código:
                          form PF_STATUS_T_ALV_CAJAS using rt_extab type slis_t_extab.
                          set PF-STATUS 'ZSTAT' EXCLUDING rt_extab.
                          ENDFORM.
                          Y lo otro, en el FORM user_command_cajas, en el CASE, en vez de esos nombres FC01, etc... deberías poner los que asignaste a tus botones en la se41.
                          Siiiiii ahora entendí y me funciono ... espectacular ... agradecida por tú buena onda !!!!
                          YPonce

                          Comentario

                          • Abaunus
                            Senior Member
                            • nov
                            • 119

                            #14
                            Bien!!

                            Comentario

                            • Yanett Ponce Seares
                              Member
                              • abr
                              • 61

                              #15
                              Originalmente publicado por Abaunus
                              Bien!!

                              Sigo molestando ....
                              Saben como puedo agregar los porcentajes de los totales y subtotales en un ALV .
                              Y lo otro que me esta pasando que dentro del evento 'pf_status_set' no puedo manejar la salida del programa como el &F03 BACK , cuando entro en el ALV y pulso los distintos botones creados y hago un BACK no se devuelve al inicio del programa, se devuelve cuantas veces haya pulsado el botón. Ojala se entienda ... Muchas Gracias por sus ayudas ....
                              YPonce

                              Comentario

                              Trabajando...