Refrescar ALV

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • tate
    Senior Member
    • feb
    • 106

    #1

    Refrescar ALV

    Buenas, tengo un programa saca una alv, y al pinchar en el documento de compra, me va a la transaccion ME23N y modifico lo que sea.
    El caso esque le doy al boton refrescar y no me hace nada de nada, y ya no se como hacerlo.
    He probado a poner: rs_selfield-refresh = 'X'.
    lo e puesto en mil sitios para probar y nada de nada, no me refresca , aber si alguien me echa una mano.
    Dejo el perfom q uso:

    *---------------------------------------------------------------------*
    * FORM user_command *
    *---------------------------------------------------------------------*
    FORM callback_ucomm USING r_ucomm LIKE sy-ucomm
    rs_selfield TYPE slis_selfield.
    DATA answer.
    CONSTANTS ansy VALUE 'J'.
    DATA noborra.

    DATA: usuario TYPE r_usuario.
    DATA: usuario_altern TYPE r_usuario.

    CASE r_ucomm.
    WHEN '&REF'.
    rs_selfield-refresh = 'X'.
    w_res-refresh = 'X'.
    WHEN '&IC1'.
    * Mostramos el pedido o el listado secundario
    SELECT SINGLE * FROM ekko WHERE ebeln = rs_selfield-value.
    IF sy-subrc = 0.
    rs_selfield-refresh = 'X'.
    SET PARAMETER ID 'BES' FIELD rs_selfield-value.
    = 'X'.
    CALL TRANSACTION 'ME23N'.
    ELSE.
    READ TABLE i_data INDEX rs_selfield-tabindex.
    PERFORM pantalla_historial.
    ENDIF.
    *- Ini Ins SIS5F 13/10/05
    WHEN '&DEL'.
    LOOP AT i_data WHERE mark = 'X'.
    PERFORM borrado_pos USING i_data
    noborra.
    * La desmarco en el ALV
    IF noborra = 'X'.
    i_data-mark = ' '.
    CLEAR noborra.
    MODIFY i_data.
    ELSE.
    ENDIF.
    ENDLOOP.
    PERFORM mostrar_posibles_mod.
    IF NOT tab_borrado IS INITIAL.
    CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
    EXPORTING
    defaultoption = 'N'
    diagnosetext1 = text-006
    diagnosetext2 = text-007
    diagnosetext3 = text-008
    textline1 = text-010
    titel = text-009
    IMPORTING
    answer = answer.

    CASE answer.
    WHEN ansy.
    PERFORM ejecutar_borrado.
    MOVE 'X' TO rs_selfield-refresh.
    WHEN OTHERS.
    *** Cancelada por usuario
    MESSAGE s000(zmm) WITH text-014.
    ENDCASE.
    ENDIF.

    ********Tratamiento Usuario Alternativo.*************
    WHEN '&USU'.
    CLEAR: i_data_altern,
    usuario,
    usuario_altern.
    REFRESH i_data_altern[].
    LOOP AT i_data WHERE mark = 'X'.
    MOVE-CORRESPONDING i_data TO i_data_altern.
    APPEND i_data_altern.
    ENDLOOP.
    IF sy-subrc <> 0.
    MESSAGE e000(zmm) WITH 'Seleccione al menos un registro'.
    ENDIF.
    PERFORM usuario_alternativo USING usuario
    usuario_altern.
    *6º Vuelvo. al alv (1º refrescar)
    MOVE 'X' TO rs_selfield-refresh.
    *- FIn Ins SIS5F 5/02/06
    WHEN OTHERS.
    ENDCASE.
    ENDFORM.
  • robert_milan
    Senior Member
    • jun
    • 315

    #2
    Que cosas cambias?'

    O a que te refieres de que no cambia los datos?'


    Si pones un ejemplo estaria mejor
    Editado por última vez por robert_milan; 03/03/2008, 13:28:47.
    Un Huevon No Inútil


    Solo di lo que piensas, a la mejor tienes la mejor respuesta....

    Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

    Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

    Consultor FI jr/ABAP Sr.

    Comentario

    • vickxo
      Senior Member
      • nov
      • 118

      #3
      Que tipo de cambio quieres?

      Por lo que he entendido, lo que quieres es ver reflejados los cambios en el ALV que has hecho por la transaccion, si es asi, el problema que veo a primera vista es que en ningun momento le dices a la transaccion que devuleva los datos, cosa que veo dificil o al menos yo no tengo idea de como hacerlo si no es a traves de una consulta a tablas. De cualquier manera si aclaras un poco mas el problema para mas o menos entenderte mejor, saludos...
      el tema esta en hacer la pregunta correcta...

      Comentario

      • abapconsultoria
        Senior Member
        • ene
        • 101

        #4
        Buenas que tal. No te esta refrescando el ALV porque la tabla interna no es alterada cuando ejecutas la trx ME23N. Se me ocurren una par de cosas que te lo actualizarian pero no son buenas practicas. Hasta me da verguenza escribirlas

        Saludos.

        PD: Field symbol a la tabla del programa y modificarla desde ahi . Con un refresh deberia funcionar.
        ABAPCONSULTORIA@GMAIL.COM

        www.consultoriaabap.blogspot.com

        Lo importante no es saber sino saber quien es el que sabe

        Comentario

        • tate
          Senior Member
          • feb
          • 106

          #5
          Bien, lo que digo, esque llamo a la transaccion me23n, y cambio el importe por ejemplo, entonces al grabar, me vuelve a la alv, pero, en la columna importe, sigue siendo la misma, no me a cambiado el importe, y yo kiero eso, o que cuando regrese de la transacion, cambial el contedo de la fila que e cambiado o que le de al boton refrescar y me lo cambie.

          Como uso Field symbol , y el refres?? por probarlo..........

          Comentario

          • robert_milan
            Senior Member
            • jun
            • 315

            #6
            Lo que he visto es que no vuelves a llamar a los datos guardados en la transaccion ME23N, por lo que veo es que te falta primero volver a consultar los datos de las tablas.
            Un Huevon No Inútil


            Solo di lo que piensas, a la mejor tienes la mejor respuesta....

            Si alguien ya lo hizo, copialo y cambiale las variables total es un codigo nuevo.....

            Si SAP lo hace se puede hacer, no me pidas hacer algo que SAP no ha hecho.....

            Consultor FI jr/ABAP Sr.

            Comentario

            • tate
              Senior Member
              • feb
              • 106

              #7
              Bueno el ejemplo, seria q pincho en el doc. de compra, me va a la me23n, cambio el importe, le doy a grabar, me volveria a la alv, y una de dos, o bien le doy a un boton y q me la actualize, pero e probado con :
              CASE r_ucomm.
              WHEN '&REFRESH'.
              rs_selfield-refresh = 'X'.
              pero no refresca ni nada, o sino, que al grabar, cambiara los datos de la alv

              Comentario

              • LouieBoy
                Member
                • ago
                • 86

                #8
                Buenas, hmmm, si no he entendido mal, lo que deberias hacer es refrescar la tabla interna, osease volver a seleccionar todos los datos ya que tienes una incoherencia, actualizas el diccionario mediante la transaccion y pretendes actualizar el alv con los datos que hay en la tabla interna.

                Create un perform de seleccion, lo llamas en el start of selecction, muestras el alv, controlas de alguna manera si los datos cambian, por ejemplo cuando haces el call transaction, marcas un flag, si el flag esta marcado refresh de la tabla interna, llamas el perform de seleccion de datos y luego refresh del alv.
                Yo haria esto, antes de liarme con field symbols

                Saludos,

                LouieBoy

                Comentario

                • tate
                  Senior Member
                  • feb
                  • 106

                  #9
                  Bueno os adjunto el programa por si alguien me le puede echar un vistazo y decirme.
                  Archivos Adjuntos

                  Comentario

                  • LouieBoy
                    Member
                    • ago
                    • 86

                    #10
                    Buenas, ¿te has leido mi post? Si es asi, explicame que parte no entiendes y tel a vuelvo a explicar.

                    Saludos,

                    LouieBoy

                    Comentario

                    • abapconsultoria
                      Senior Member
                      • ene
                      • 101

                      #11
                      Tu opcion del form me parece viable. Viendo un poco el codigo.... el mismo deberia estar insertado detras de la llamada al call transactioncodigo.

                      CALL TRANSACTION 'ME23N'.
                      PERFORM LLENAR_TABLA_INTERNA.
                      rs_selfield-refresh = 'X'.

                      Esto va a lograr que luego que vuelve de la trx ME23N se refresque tu tabla interna. Una vez qeu la tabla interna esta refrescada podes ejecutar el comando para hacer el refresh.

                      Saludos.

                      Javier.
                      ABAPCONSULTORIA@GMAIL.COM

                      www.consultoriaabap.blogspot.com

                      Lo importante no es saber sino saber quien es el que sabe

                      Comentario

                      • tate
                        Senior Member
                        • feb
                        • 106

                        #12
                        Perdona, no lo abia leido, te comento:
                        "Create un perform de seleccion, lo llamas en el start of selecction"
                        me creo un perform y dentro de este, aga la llamada a la pantalla de seleccion o a q te refieres???

                        lo de controlar ya e puesto un flag, al acer refresh a la tabla, esta se borra entera, y a q te refieres con redresh del alv??


                        Perdon por ser tan pesado

                        Comentario

                        • DavidXD_XD
                          Moderator
                          • ago
                          • 1255

                          #13
                          Hola, no me familiarizo mucho con los ALV List y casi nunca los he hecho, pero ahi viendo un programa veo que lo hacen asi:

                          FORM user_command USING r_ucomm LIKE sy-ucomm
                          rs_selfield TYPE slis_selfield.

                          * refrescar la vista con lo que pase acá...
                          CLEAR rs_selfield-refresh.

                          CASE r_ucomm.
                          WHEN '&IC1'.
                          rs_selfield-refresh = 'X'.
                          PERFORM detop1 USING rs_selfield.

                          WHEN 'RFSH'. "refrescar el reporte
                          rs_selfield-refresh = 'X'.
                          PERFORM entrada.
                          ENDCASE.
                          ENDFORM.

                          En la subrutina "entrada" nuevamente se hace la seleccion de datos que se colocan en la tabla interna, y el cual es desplegada en el ALV ... espero sirva
                          David Carballido Córdova

                          Comentario

                          • tate
                            Senior Member
                            • feb
                            • 106

                            #14
                            abapconsultoria, cuando llamo otra vez al perform que rellena mi tabla interna, vamos el permform get_data, si pongo un doc. de compra, me lo duplica y no me lo cambia ni nada.

                            DavidXD_XD a q te refieres con este perform: PERFORM detop1 USING rs_selfield , y el perform entrada, te refieres al que me rellena la tabla interna???

                            Comentario

                            • LouieBoy
                              Member
                              • ago
                              • 86

                              #15
                              A ver... vamos por partes.

                              1-Seleccionas los datos
                              2-Muestras los datos
                              3-llamas la transaccion
                              4-Determinamos si ha cambiado algo (opcional, solo para mejorar rendimiento)
                              5-REFRESCAS LA TABLA INTERNA
                              6-VUELVES A SELECCIONAR LOS DATOS Y LOS METES EN LA MISMA TABLA INTERNA
                              7-haces lo del refresh del alv

                              A ver si asi queda un poco mas claro, el problema principal lo tienes en que si cambias las tablas de diccionario y no actualizas la tabla interna, por mucho que refresques el ALV te seguira mostrando lo q hay dentro de la tabla interna. Creo que la solucion es mucho mas sencilla...

                              Saludos,

                              LouieBoy

                              Comentario

                              Trabajando...