Anuncio

Colapsar
No hay anuncio todavía.

Tablas Hashed o Sorted?

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Tablas Hashed o Sorted?

    Buenas Noches:
    Tengo una consulta un poco basica pero no entiendo bien como debo hacer con este tipo de tablas..
    Tengo un problema con un programa ya que consulto a la BKPF pero sin numero de documento y traigo gran cantidad de registros..ya se le hizo toda clase de performance pero el programa no logra terminar para la consulta de un mes completo..mi pregunta es si creo una tabla interna donde almaceno los registros de la BKPF reducire el tiempo? son mas rapidas para este tipo de consultas?

    Bueno espero que alguien que conozca mejor el tema me pueda ayudar.

    Muchas Gracias.

  • #2
    El problema del acceso a la tabla de la Cabecera de los Documentos Financieros (tabla BKPF) es que contiene todos los documentos financieros existentes, por lo que es una tabla que perfectamente pueda tener más de un millón de registros (incluso dos millones...) para un solo año.

    Intenta mirar el tipo de acceso, los indices de la tabla y busca de algun modo como restringir los accesos.
    SAP solo es el medio a través del cual se expresa nuestra imaginación.

    Comentario


    • #3
      Desde luego obtener todos los registros de la BKPF me parece un poro "heavy"

      Lo lógico es que límites cuanto más mejor. Por tu post entiendo que además tratas los datos de alguna forma en un select - endselect.
      La mejor opción es pasar los datos de la BKPF lo más limitados posibles a una tabla y trabajar con esta en lugar de select end select.

      Saludos
      "Soy el señor Lobo, arreglo problemas"
      http://sapymas.blogspot.com/

      Comentario


      • #4
        Muchas gracias por responder pero mi consulta no trata de traer todos los registros existentes de la BKPF..es la siguiente solo que no cuento con el campo numero de documento..
        SELECT bukrs belnr gjahr blart monat
        INTO CORRESPONDING FIELDS OF TABLE tp_bkpf
        FROM bkpf
        WHERE bukrs EQ p_bukrs AND
        belnr IN s_belnr AND --Si acá mandan vacío entonces demora una eternidad!!!
        gjahr EQ p_gjahr AND
        blart IN s_blart AND
        monat IN s_monat.

        Saludos!

        Comentario


        • #5
          Si haces una tabla Hash o Sorted el rendimiento de la consulta no te va a mejorar. Yo creo que la mejor opción es que pongas obligatorio el número de documento.

          Saludos
          "Soy el señor Lobo, arreglo problemas"
          http://sapymas.blogspot.com/

          Comentario


          • #6
            Existe un indice en la tabla BKPF por Sociedad (campo BUKRS), Status del Documento (campo BSTAT) y Clase de Documento (campo BLART) que quizá te pueda ayudar.
            O en lugar de solicitar el Mes Contable (campo MONAT), puedes solicitar la Fecha del Documento (campo BLDAT), que tambien existe un indice por la misma clave.

            Espero haberte podido ayudar.
            SAP solo es el medio a través del cual se expresa nuestra imaginación.

            Comentario


            • #7
              voy a hacer todas las pruebas posibles porque el programa no termina y hace dump por tiempo de ejecución.. lamentablemente los usuarios no conocen el número de documento para ponerlo como campo obligatorio en el programa.

              Muchas Gracias por la ayuda.

              Comentario


              • #8
                Originalmente publicado por diogo2008 Ver Mensaje
                voy a hacer todas las pruebas posibles porque el programa no termina y hace dump por tiempo de ejecución.. lamentablemente los usuarios no conocen el número de documento para ponerlo como campo obligatorio en el programa.

                Muchas Gracias por la ayuda.
                Si tenes que recorrer toda la BKPF utiliza Base de Datos Logicas de dicha TABLA, es lo que usan todos los reportes standard de SAP.

                Con eso no vas a tener problemas, y si te sigue tirando dump consulta con un BASIS temas de la base de datos y lentitud.

                Saludos

                Comentario


                • #9
                  Muchas Gracias por responder...
                  ya no tengo problemas con la BKPF...a pesar que no se le pone numero de documento hace la consulta normal..pero luego cuando voy a ver el detalle a la BSIS ahi si que no soporta la consulta y se cae..

                  Saludos!!

                  Comentario


                  • #10
                    Originalmente publicado por diogo2008 Ver Mensaje
                    Muchas Gracias por responder...
                    ya no tengo problemas con la BKPF...a pesar que no se le pone numero de documento hace la consulta normal..pero luego cuando voy a ver el detalle a la BSIS ahi si que no soporta la consulta y se cae..

                    Saludos!!
                    Hola,

                    sino recuerdo mal existe una nota para establecer los índices en la BSIS más performantes.

                    Con respecto a la velocidad de la ejecución, puedes hacer una ejecución de fondo y realizar un trace de SQL a través de la Tx ST05.

                    Otra cosa, tu tabla interna tiene sólo esos 5 campos? si es así te conviene realizar un into table y no un into corresponding fields of table.

                    Saludos!

                    Comentario


                    • #11
                      bueno se cae en la lectura a la BSIS cuando lo he ejecutado en fondo..
                      con respecto al into table eso tbn ya lo arregle muchas gracias!!

                      Donde podria consultar la nota sobre la BSIS que mencionas?


                      Muchas Gracias.

                      Comentario


                      • #12
                        Originalmente publicado por diogo2008 Ver Mensaje
                        Muchas Gracias por responder...
                        ya no tengo problemas con la BKPF...a pesar que no se le pone numero de documento hace la consulta normal..pero luego cuando voy a ver el detalle a la BSIS ahi si que no soporta la consulta y se cae..

                        Saludos!!
                        Justamente una base de datos logicas esta compuesta de muchas tablas.
                        Por cada regsitro de la BKPF va a etrar a la BSEG, BSIS, BSAS, BSAK, BSIK, etc.
                        Pone BKPF referencia de utilizacion base de datos logicas o buscate info sobre ellas... es lo que necesitas.

                        Igualmente si vos accedes por Sociedad, Doc. y Ejercicio no debería tardarte mucho la BSIS.

                        Podrias poner el código de tus consultas.

                        Comentario


                        • #13
                          Yo tbn creo que no deberia de tardar mucho..tal vez el problema sea que el servidor no es muy potente o la version de sap es muy antigua ya que es la version 4.0
                          mi consulta es la siguiente:
                          SELECT
                          bukrs hkont gjahr belnr buzei xblnr
                          blart monat shkzg mwskz dmbtr dmbe2
                          INTO TABLE gt_bsis
                          FROM bsis
                          WHERE bukrs EQ p_bukrs
                          AND hkont IN s_hkont
                          AND gjahr EQ p_gjahr
                          AND belnr IN gr_belnr "s_belnr
                          AND budat LE gv_budat
                          AND blart IN s_blart
                          AND monat IN s_monat.

                          Comentario


                          • #14
                            Originalmente publicado por diogo2008 Ver Mensaje
                            Yo tbn creo que no deberia de tardar mucho..tal vez el problema sea que el servidor no es muy potente o la version de sap es muy antigua ya que es la version 4.0
                            mi consulta es la siguiente:
                            SELECT
                            bukrs hkont gjahr belnr buzei xblnr
                            blart monat shkzg mwskz dmbtr dmbe2
                            INTO TABLE gt_bsis
                            FROM bsis
                            WHERE bukrs EQ p_bukrs
                            AND hkont IN s_hkont
                            AND gjahr EQ p_gjahr
                            AND belnr IN gr_belnr "s_belnr
                            AND budat LE gv_budat
                            AND blart IN s_blart
                            AND monat IN s_monat.
                            El problema esta ahi, vos lo que tenes que hacer es primero acceder a la BKPF y luego entrar a la BSIS.

                            Vos tenes que hacer un select a la BKPF con todas las restricciones que puedas (bukrs, gjarh, belnr, budat, blart. Esos estan seguro en la BKPF).

                            y luego con la tabla interna con los datos de la BKPF accedes a la BSIS usando FOR ALL ENTRIES filtrando por los campos propios de la BSIS.

                            Proba eso, y vas a ver que te va a tardar mucho menos.

                            PD: antes de hacer el select a la BSIS con el for all entries acordate de chequear que la tabla interna no este vacia sino ahi si te va a explotar la consulta porque estas pidiendo todos los datos de la BSIS.

                            Saludos

                            Comentario


                            • #15
                              Antes de ponerla asi como esta ahora le habia hecho un for all entries con la consulta de la BKPF que hago antes pero igual no consigo que haga el dump por eso que las hice por separado..

                              SELECT bukrs belnr gjahr blart monat
                              INTO CORRESPONDING FIELDS OF TABLE gt_bkpf
                              FROM bkpf
                              WHERE bukrs EQ p_bukrs AND
                              belnr IN s_belnr AND
                              gjahr EQ p_gjahr AND
                              blart IN s_blart AND
                              monat IN s_monat.
                              LOOP AT gt_bkpf.
                              gr_belnr-sign = 'I'.
                              gr_belnr-option = 'EQ'.
                              gr_belnr-low = gt_bkpf-belnr.
                              APPEND gr_belnr.
                              endloop.

                              SELECT
                              bukrs hkont gjahr belnr buzei xblnr
                              blart monat shkzg mwskz dmbtr dmbe2
                              INTO TABLE gt_bsis
                              FROM bsis
                              WHERE bukrs EQ p_bukrs
                              AND hkont IN s_hkont
                              AND gjahr EQ p_gjahr
                              AND belnr IN gr_belnr "s_belnr
                              AND budat LE gv_budat
                              AND blart IN s_blart
                              AND monat IN s_monat.

                              Muchas Gracias por la ayuda.

                              Comentario

                              Trabajando...
                              X