Pasar de Inner Join a Read Table

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • andresf02
    Senior Member
    • nov
    • 190

    #1

    Pasar de Inner Join a Read Table

    Buenos Dias

    Qusiera que por favor me ayudaran con el siguiente codigo, el cual usa Inner Joins.

    Lo que necesito es cambiarlo para bajar la informacion a tablas internas y luego hacer los cruzes de informacion con FOR ALL ENTRIES, READ TABLE y LOOP AT.

    He trabajdo con READ TABLE antes y he logrado hacerlos sin problemas, pero en este caso me surge una duda especial y es que dentro del SELECT se ejecutan PERFORMS que lo que hacen es calcular unos campos cuyo valor no se encuentra en la base de datos y no se en que momento llamarlo, si mientras voy bajando la informacion como esta en el codigo, o despues de haberla bajado toda a tablas internas.

    Agradeceria mucho si alguien pudiera transcribir el codigo a READ TABLE

    Gracias!

    ************************************************** *******
    select caufv~aufnr caufv~auart caufv~erdat
    caufv~objnr caufv~plnbez makt~maktg
    caufv~gamng cobrb~aufnr
    sum( afpo~wemng )
    into (wa_tabcon-aufnr, wa_tabcon-auart, wa_tabcon-erdat, lv_objnr,
    wa_tabcon-plnbez, wa_tabcon-maktg, wa_tabcon-gamng, lv_aufnr,
    wa_tabcon-wemng)
    from caufv inner join afpo on ( afpo~aufnr = caufv~aufnr )
    inner join makt on ( makt~matnr = caufv~plnbez )
    inner join cobrb on ( cobrb~objnr = caufv~objnr )
    where caufv~bukrs = p_bukrs
    and caufv~werks = p_werks
    and caufv~autyp = 10
    and caufv~auart in ('ZA11','ZA12','ZA13','ZL14','ZL15')
    and cobrb~konty = 'ORD'
    and cobrb~werks = p_werks
    group by caufv~aufnr caufv~auart caufv~erdat caufv~objnr
    caufv~plnbez makt~maktg caufv~gamng cobrb~aufnr
    having sum( afpo~wemng ) = 0.

    call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
    exporting
    input = wa_tabcon-aufnr
    importing
    output = wa_tabcon-aufnr.

    call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
    exporting
    input = wa_tabcon-plnbez
    importing
    output = wa_tabcon-plnbez.

    perform obtener_costo_real_orden using lv_objnr
    changing wa_tabcon-costo.

    if wa_tabcon-costo <> 0. " si la orden tiene costos reales.

    perform obtener_finca_suerte_orden using lv_aufnr
    changing lv_plnbez.
    move lv_plnbez+1(4) to wa_tabcon-tplnr.
    move lv_plnbez+6(3) to wa_tabcon-suertcdg.

    perform obtener_nombrefinca using wa_tabcon-tplnr
    changing wa_tabcon-pltxt.

    perform obtener_estado_orden using lv_objnr
    changing wa_tabcon-txt30.

    append wa_tabcon to p_tabla.

    endif.

    lv_reg_num = lv_reg_num + 1.
    perform mostrar_barra_progreso using 'Procesando ordenes... '
    lv_reg_tot
    lv_reg_num.

    endselect.
    ************************************************** **
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    Para no usar mucho la BD se puede hacer esto:

    Código:
    select caufv~aufnr caufv~auart caufv~erdat
    caufv~objnr caufv~plnbez makt~maktg
    caufv~gamng cobrb~aufnr
    sum( afpo~wemng ) AS wemmg
    into table gt_tabcon
    from caufv inner join afpo on ( afpo~aufnr = caufv~aufnr )
    inner join makt on ( makt~matnr = caufv~plnbez )
    inner join cobrb on ( cobrb~objnr = caufv~objnr )
    where caufv~bukrs = p_bukrs
    and caufv~werks = p_werks
    and caufv~autyp = 10
    and caufv~auart in ('ZA11','ZA12','ZA13','ZL14','ZL15')
    and cobrb~konty = 'ORD'
    and cobrb~werks = p_werks
    group by caufv~aufnr caufv~auart caufv~erdat caufv~objnr
    caufv~plnbez makt~maktg caufv~gamng cobrb~aufnr
    having sum( afpo~wemng ) = 0.
    
    LOOP AT gt_tabcon ASSIGNING <fs_tabcon>.
      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
          exporting
              input = <fs_tabcon>-aufnr
          importing
              output = <fs_tabcon>-aufnr.
    
      call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
          exporting
              input = <fs_tabcon>-plnbez
          importing
              output = <fs_tabcon>-plnbez.
    
      perform obtener_costo_real_orden using lv_objnr
                                      changing <fs_tabcon>-costo.
    
      if <fs_tabcon>-costo <> 0. " si la orden tiene costos reales.
        perform obtener_finca_suerte_orden using lv_aufnr
                                          changing lv_plnbez.
        move lv_plnbez+1(4) to <fs_tabcon>-tplnr.
        move lv_plnbez+6(3) to <fs_tabcon>-suertcdg.
    
        perform obtener_nombrefinca using <fs_tabcon>-tplnr
                                     changing <fs_tabcon>-pltxt.
    
        perform obtener_estado_orden using lv_objnr
                                     changing <fs_tabcon>n-txt30.
    
        append <fs_tabcon> to p_tabla.
    
      endif.
    
      lv_reg_num = lv_reg_num + 1.
      perform mostrar_barra_progreso using 'Procesando ordenes... '
                                           lv_reg_tot
                                           lv_reg_num.
    ENDLOOP.
    David Carballido Córdova

    Comentario

    Trabajando...