demora al cargar datos

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • marva300
    Junior Member
    • jun
    • 6

    #1

    demora al cargar datos

    Hola a todos estoy empezando en la programacion Abap y tengo un problema me han pedido optimizar el siguiente reporte puesto que en QAS y PRD demora demasiado en mostrarse el problema esta en un select que se le hace a MSEG para obtener los movimientos.


    FORM busca_fechas_mkpf USING e_salida TYPE t_salida
    CHANGING s_salida TYPE t_salida.

    DATA: wl_fecha1 TYPE mkpf-budat.
    DATA: wl_fecha2 TYPE mkpf-budat.
    DATA: wl_flag TYPE c.

    CLEAR: it_reg. REFRESH: it_reg.

    SELECT * INTO CORRESPONDING FIELDS OF TABLE it_reg FROM mseg
    WHERE mjahr = e_salida-mjahr
    AND werks EQ e_salida-werks
    AND lgort EQ e_salida-lgort
    AND charg EQ e_salida-charg
    AND matnr EQ e_salida-matnr
    AND bwart EQ e_salida-bwart.

    CLEAR: wl_fecha1, wl_fecha1, wl_flag.

    LOOP AT it_reg INTO w_reg.
    SELECT SINGLE budat INTO wl_fecha1 FROM mkpf WHERE mblnr EQ w_reg-mblnr.
    w_reg-budat = wl_fecha1.
    MODIFY it_reg FROM w_reg.
    IF wl_fecha2 IS INITIAL.
    wl_fecha2 = wl_fecha1.
    ELSE.
    IF wl_fecha2 NE wl_fecha1.
    wl_flag = 'X'.
    EXIT.
    ENDIF.
    ENDIF.

    ENDLOOP.

    IF wl_flag EQ 'X'.
    s_salida-e_fecha = 'X'.
    ENDIF.


    ENDFORM.



    este perform esta dentro de este loop

    LOOP AT it_salida INTO w_salida.
    PERFORM busca_fechas_mkpf USING w_salida CHANGING w_salida.
    MODIFY it_salida FROM w_salida.
    ENDLOOP.

    en QAS It_salida me da casi 500 registros y cuando se hace el select a la mseg se obtiene de 10 a 20 registros y es alli cuando demora mas o menos 20 segundos osea tardaria 500 registros x 20 segundos es demasiado tiempo de ejecucion que recomiendan hacer para optimizar ese select


    gracias de antemano
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    Hola Marva, lo primero que haria es quitar ese LOOP y tratar de realizar el SELECT a la MSEG con un FOR ALL ENTRIES, como dentro de la consulta participan el material, centro y lote, no habria problemas, xq dentro de la MSEG ya existe un indice por esos campos ....

    Código:
    SELECT (campos)
      INTO TABLE itab
        FROM mseg
          FOR ALL ENTRIES IN it_salida
            WHERE .....
    
    IF sy-subrc = 0.
      SELECT (campos)
        INTO TABLE it_mkpf
          FROM mkpf
            FOR ALL ENTRIES IN itab
              WHERE ....
    ENDIF.
    Y tbm si se desea optimizar ese SELECT se puede realizar un JOIN con la MKPF y MSEG ya que ambas tablas son cabecera y detalle de los mismos documentos, espero te pueda ayudar
    David Carballido Córdova

    Comentario

    Trabajando...