Problema Con Select Single

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • aaron alfonso
    Junior Member
    • may
    • 27

    #1

    Problema Con Select Single

    Hola Necesito Dejar De Usar El Select Single Por que Solo Me Trae Un Solo Registro Pero He Intentado Pero No He Podido Alguien Me Puede Apoyar Con Un Ejemplo O Algun Comentario Se Lo Agradeceria Mucho.

    Select Single Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart
    From Bkpf Into (t_datos-bukrs , T_datos-belnr , T_datos-gjahr , T_datos-bldat , T_datos-budat , T_datos-xblnr , T_datos-bktxt , T_datos-blart)
    Where Bukrs Eq P_bukrs
    And Belnr In S_belnr
    And Gjahr In S_gjahr.

    Select Single Sgtxt Prctr
    Into (t_datos-sgtxt , T_datos-prctr)
    From Bseg
    Where Bukrs Eq T_datos-bukrs
    And Belnr Eq T_datos-belnr
    And Gjahr Eq T_datos-gjahr.

    Loop At T_datos.
    Select Single Sgtxt Prctr
    Into (t_datos-sgtxt , T_datos-prctr)
    From Bseg
    Where Bukrs Eq T_datos-bukrs
    And Belnr Eq T_datos-belnr
    And Gjahr Eq T_datos-gjahr.
    Endloop.

    Append T_datos.

    Endform.
    tenchy
  • Desmoquattro
    Junior Member
    • may
    • 27

    #2
    Originalmente publicado por aaron alfonso
    Hola Necesito Dejar De Usar El Select Single Por que Solo Me Trae Un Solo Registro Pero He Intentado Pero No He Podido Alguien Me Puede Apoyar Con Un Ejemplo O Algun Comentario Se Lo Agradeceria Mucho.

    Select Single Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart
    From Bkpf Into (t_datos-bukrs , T_datos-belnr , T_datos-gjahr , T_datos-bldat , T_datos-budat , T_datos-xblnr , T_datos-bktxt , T_datos-blart)
    Where Bukrs Eq P_bukrs
    And Belnr In S_belnr
    And Gjahr In S_gjahr.

    Select Single Sgtxt Prctr
    Into (t_datos-sgtxt , T_datos-prctr)
    From Bseg
    Where Bukrs Eq T_datos-bukrs
    And Belnr Eq T_datos-belnr
    And Gjahr Eq T_datos-gjahr.

    Loop At T_datos.
    Select Single Sgtxt Prctr
    Into (t_datos-sgtxt , T_datos-prctr)
    From Bseg
    Where Bukrs Eq T_datos-bukrs
    And Belnr Eq T_datos-belnr
    And Gjahr Eq T_datos-gjahr.
    Endloop.

    Append T_datos.

    Endform.
    types: begin of ty_bkpf,
    bukrs type bkpf-bukrs,
    belnr type bkpf-belnr,
    gjahr type bkpf-gjahr,
    bldat type bkpf-bldat,
    budat type bkpf-budat,
    xblnr type bkpf-xblnr,
    bktxt type bkpf-bktxt,
    blart type bkpf-blart,
    end of ty_bkpf.

    types: begin of ty_bseg,
    bukrs type bseg-bukrs,
    belnr type bseg-belnr,
    gjahr type bseg-gjahr,
    buzei type bseg-buzei,
    sgtxt type bseg-sgtxt,
    prctr type bseg-prctr,
    end of ty_bseg.

    types: begin of ty_datos,
    bukrs type bkpf-bukrs,
    belnr type bkpf-belnr,
    gjahr type bkpf-gjahr,
    buzei type bseg-buzei,
    bldat type bkpf-bldat,
    budat type bkpf-budat,
    xblnr type bkpf-xblnr,
    bktxt type bkpf-bktxt,
    blart type bkpf-blart,
    Sgtxt type bseg-sgtxt,
    Prctr type bseg-prctr,
    end of ty_datos.

    data: t_datos type standard table of ty_datos,
    t_bkpf type standard table of ty_bkpf,
    t_bseg type standard table of ty_bseg.

    data: wa_bkpf type ty_bkpf,
    wa_bseg type ty_bseg,
    wa_datos type ty_datos.

    ** También podrías llenar t_datos directamente
    Select Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart
    From Bkpf
    Into table t_bkpf
    Where Bukrs Eq P_bukrs
    And Belnr In S_belnr
    And Gjahr In S_gjahr.

    if t_bkpf[] is not initial.
    Select bukrs belnr gjahr buzei Sgtxt Prctr
    From Bseg
    Into table t_bseg
    for all entries in t_bkpf
    Where Bukrs Eq T_bkpf-bukrs
    And Belnr Eq T_bkpf-belnr
    And Gjahr Eq T_bkpf-gjahr.

    endif.

    Loop At T_bkpf into wa_bkpf.
    ** Movés los campos de wa_bkpf a wa_datos.
    loop at t_bseg into wa_bseg
    where bukrs eq wa_bkpf-bukrs
    and belnr eq wa_bkpf-belnr
    and gjahr eq wa_bkpf-gjahr.
    ** Movés los campos de wa_bseg a wa_datos.
    append wa_datos to t_datos.
    clear wa_datos.
    endloop.
    Endloop.

    Básicamente sería eso... después hay varias cosas para mejorar si necesitás performance (tablas sorted, loopear la bseg directo y un read a bkpf si cambió el valor, usar índices, etc etc)


    Saludos!

    Comentario

    • awas90
      Member
      • may
      • 68

      #3
      No estaras haciendo un select single de campos no clave no?

      Comentario

      • aaron alfonso
        Junior Member
        • may
        • 27

        #4
        Desmoquattro

        HOLA PUES AMIGO PARECE QUE SI ES CORRECTO TODO LO UNICO QUE NO ENTIENDO ES QUE AL MOMENTO DE CHECAR NO TRAE NADA .
        SUPONGO SEA POR DONDE COLOCASTE EL APPEND DENTRO DEL LOOP.
        PERO YA LO SAQUE NO ME MANDA NADA AL ALV.
        CREO QUE TENGO COLOCARE TODO MI CODIGO ESPERO ESTE ENTENDIBLE.

        Editado por última vez por aaron alfonso; 28/05/2014, 17:48:40.
        tenchy

        Comentario

        • aaron alfonso
          Junior Member
          • may
          • 27

          #5
          Codigo


          REPORT ZCONSULTA_DOCFI.

          TABLES:BKPF,BSEG.
          TYPES: BEGIN OF TY_BKPF,
          BUKRS TYPE BKPF-BUKRS,
          BELNR TYPE BKPF-BELNR,
          GJAHR TYPE BKPF-GJAHR,
          BLDAT TYPE BKPF-BLDAT,
          BUDAT TYPE BKPF-BUDAT,
          XBLNR TYPE BKPF-XBLNR,
          BKTXT TYPE BKPF-BKTXT,
          BLART TYPE BKPF-BLART,
          END OF TY_BKPF.

          TYPES: BEGIN OF TY_BSEG,
          BUKRS TYPE BSEG-BUKRS,
          BELNR TYPE BSEG-BELNR,
          GJAHR TYPE BSEG-GJAHR,
          SGTXT TYPE BSEG-SGTXT,
          PRCTR TYPE BSEG-PRCTR,
          END OF TY_BSEG.

          TYPES: BEGIN OF TY_DATOS,
          BUKRS TYPE BKPF-BUKRS,
          BELNR TYPE BKPF-BELNR,
          GJAHR TYPE BKPF-GJAHR,
          BLDAT TYPE BKPF-BLDAT,
          BUDAT TYPE BKPF-BUDAT,
          XBLNR TYPE BKPF-BKTXT,
          BKTXT TYPE BKPF-bktxt,
          BLART TYPE BKPF-BLART,
          SGTXT TYPE BSEG-SGTXT,
          PRCTR TYPE BSEG-PRCTR,
          END OF TY_DATOS.

          DATA:e_layout TYPE lvc_s_layo,
          t_fcat TYPE lvc_t_fcat,
          fldtext TYPE char50.

          DATA: T_DATOS TYPE STANDARD TABLE OF TY_DATOS,
          T_BKPF TYPE STANDARD TABLE OF TY_BKPF,
          T_BSEG TYPE STANDARD TABLE OF TY_BSEG.

          DATA: WA_BKPF TYPE TY_BKPF,
          WA_BSEG TYPE TY_BSEG,
          WA_DATOS TYPE TY_DATOS.

          " FILTROS DE BUSQUEDA DE CAMPOS
          SELECT-OPTIONS:
          S_BELNR FOR BKPF-BELNR,
          S_BLDAT FOR BKPF-BLDAT,
          S_GJAHR FOR BKPF-GJAHR,
          S_BUDAT FOR BKPF-BUDAT,
          S_XBLNR FOR BKPF-XBLNR,
          S_BLART FOR BKPF-BLART.
          PARAMETERS:
          P_BUKRS LIKE BKPF-BUKRS OBLIGATORY.
          *&--------------------------------------------------------------------*
          START-OF-SELECTION."Ejecuta sub-rutinas
          PERFORM PIDE_DATOS. "Sub-rutina paso 1
          PERFORM REPORTE_ALV."Sub-rutina paso 2
          *&--------------------------------------------------------------------*
          FORM PIDE_DATOS.
          SELECT BUKRS BELNR GJAHR BLDAT BUDAT XBLNR BKTXT BLART
          FROM BKPF INTO TABLE T_BKPF
          WHERE BUKRS EQ P_BUKRS
          AND BELNR IN S_BELNR
          AND GJAHR IN S_GJAHR.

          IF T_BKPF[] IS NOT INITIAL.
          SELECT BUKRS BELNR GJAHR SGTXT PRCTR
          FROM BSEG INTO TABLE T_BSEG
          FOR ALL ENTRIES IN T_BKPF
          WHERE BUKRS EQ T_BKPF-BUKRS
          AND BELNR EQ T_BKPF-BELNR
          AND GJAHR EQ T_BKPF-GJAHR.
          ENDIF.

          LOOP AT T_BKPF INTO WA_BKPF.
          ** Movés los campos de wa_bkpf a wa_datos.
          LOOP AT T_BSEG INTO WA_BSEG
          WHERE BUKRS EQ WA_BKPF-BUKRS
          AND BELNR EQ WA_BKPF-BELNR
          AND GJAHR EQ WA_BKPF-GJAHR.
          ** Movés los campos de wa_bseg a wa_datos.
          ENDLOOP.
          ENDLOOP.

          APPEND WA_DATOS TO T_DATOS.
          CLEAR WA_DATOS.
          ENDFORM.
          *&--------------------------------------------------------------------*
          *REPORTE_ALV.- "SUBRUTINA" (SI AHI DATOS EMPIEZA)SI HAY DATOS,CARGA LOS DATOS Y EL CATALOGO.
          *SI NO(NO PRESENTA DATOS)
          *&--------------------------------------------------------------------*
          FORM REPORTE_ALV.
          CHECK NOT T_DATOS[] IS INITIAL." REVISA SI REALMENTE AHI DATOS EN (TAB.INT.) T_DATOS
          PERFORM catalogo_fcat.
          e_layout-zebra = 'X'.
          e_layout-sel_mode = 'D'.
          e_layout-no_rowmove = 'X'.
          e_layout-col_opt = 'X'.
          CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' "LLAMADO DE FUNCION ALV.
          EXPORTING
          i_callback_program = sy-repid
          i_callback_html_top_of_page = 'MY_HTML_TOP_PAGE'
          is_layout_lvc = e_layout
          it_fieldcat_lvc = t_fcat
          TABLES
          t_outtab = T_DATOS
          EXCEPTIONS
          program_error = 1.

          IF SY-TCODE ='ZCONSULTA_DOCFI'.
          ENDIF.
          ENDFORM.
          *&---------------------------------------------------------------------*
          * CATALOGO.- COLOCA LAS CABECERAS DEL ALV
          *&---------------------------------------------------------------------*
          FORM catalogo_fcat.
          PERFORM agrega_campos USING:
          'BUKRS' 'BUKRS' 'BKPF' space space,
          'BELNR' 'BELNR' 'BKPF' space space,
          'GJAHR' 'GJAHR' 'BKPF' space space,
          'BLDAT' 'BLDAT' 'BKPF' space space,
          'BUDAT' 'BUDAT' 'BKPF' space space,
          'XBLNR' 'XBLNR' 'BKPF' space space,
          'BKTXT' 'BKTXT' 'BKPF' space space,
          'BLART' 'BLART' 'BKPF' space space,
          'SGTXT' 'SGTXT' 'BSEG' space space,
          'PRCTR' 'PRCTR' 'BSEG' space space.
          ENDFORM. " CATALOGO_FCAT
          *&---------------------------------------------------------------------*
          * AGREGA CAMPOS
          *&---------------------------------------------------------------------*
          FORM agrega_campos USING
          value(p1) value(p2) value(p3) value(p4) value(p5).
          DATA l_fcat TYPE lvc_s_fcat.
          l_fcat-fieldname = p1.
          l_fcat-ref_field = p2.
          l_fcat-ref_table = p3.
          l_fcat-coltext = p4.
          l_fcat-inttype = p5.
          l_fcat-col_opt = 'X'.
          IF p5 NE space.
          l_fcat-intlen = 20.
          l_fcat-decimals = 2.
          l_fcat-decimals_o = 2.
          ENDIF.
          APPEND l_fcat TO t_fcat.
          ENDFORM. " finliza agrega_campos
          *&---------------------------------------------------------------------*
          *&Form MY_USER_COMMAND
          *&---------------------------------------------------------------------*
          FORM my_user_command USING p_ucomm TYPE sy-ucomm
          p_selfield TYPE slis_selfield.
          CASE p_ucomm.
          WHEN 'REGR' OR 'SALI'.
          p_selfield-exit = abap_true.
          ENDCASE.

          ENDFORM. " MY_USER_COMMAND
          *-----------------------------------------------------------------------*
          tenchy

          Comentario

          • Ripper87
            Member
            • dic
            • 37

            #6
            Puedes hacer todo en un solo INNER JOIN:

            Código:
            SELECT a~bukrs a~belnr a~gjahr a~buzei b~bldat b~budat
                       a~xblnr a~bktxt a~blart b~sgtxt b~prctr  
              INTO TABLE t_datos
              FROM bkpf AS a INNER JOIN bseg AS b
              ON a~bukrs EQ b~bukrs AND a~belnr EQ b~belnr AND 
                   a~gjahr EQ b~gjahr AND a~buzei EQ b~buzei
              WHERE a~bukrs EQ p_bukrs
                  AND a~belnr IN s_belnr
                  AND a~gjahr IN s_gjahr
            Por razones de rendimiento, no deberias hacer un SELECT dentro de un LOOP, imaginate que tengas 1000 registros en el LOOP vas a realizar 1000 consultas a la base de datos, cuando puedes hacer una sola consulta que te traiga toda la data.
            Editado por última vez por Ripper87; 28/05/2014, 18:24:30.

            Comentario

            • aaron alfonso
              Junior Member
              • may
              • 27

              #7
              Ripper

              me parece buena tu observación ripper pero el problema es la tabla bseg


              *Para tablas pool, tablas cluster y vistas de supresión no se permite JOIN:BSEG
              tenchy

              Comentario

              • Ripper87
                Member
                • dic
                • 37

                #8
                Tienes razón, se me olvidó...

                Entonces hay que hacerlo como te lo colocó el amigo más arriba, solo te faltaría hacer el APPEND a la tabla, y yo agregaría el campo BUZEI a las consultas y condiciones, ya que es un campo clave que identifica la posición del documento, si un documento tiene varias posiciones y no verificas ese campo puedes estar mezclando datos de posiciones diferentes y traerte data erronea.

                Código:
                SELECT BUKRS BELNR BUZEI GJAHR BLDAT BUDAT XBLNR BKTXT BLART
                FROM BKPF INTO TABLE T_BKPF
                WHERE BUKRS EQ P_BUKRS
                AND BELNR IN S_BELNR
                AND GJAHR IN S_GJAHR.
                
                IF T_BKPF[] IS NOT INITIAL.
                SELECT BUKRS BELNR BUZEI GJAHR SGTXT PRCTR
                FROM BSEG INTO TABLE T_BSEG
                FOR ALL ENTRIES IN T_BKPF
                WHERE BUKRS EQ T_BKPF-BUKRS
                AND BELNR EQ T_BKPF-BELNR
                AND BUZEI EQ T_BKPF-BUZEI
                AND GJAHR EQ T_BKPF-GJAHR.
                ENDIF.
                
                LOOP AT T_BKPF INTO WA_BKPF.
                
                WA_DATOS-BUKRS = WA_BKPF-BUKRS.
                WA_DATOS-BELNR = WA_BKPF-BELNR.
                WA_DATOS-BUZEI = WA_BKPF-BUZEI.
                WA_DATOS-GJAHR = WA_BKPF-GJAHR.
                WA_DATOS-XBLNR = WA_BKPF-XBLNR.
                WA_DATOS-BKTXT = WA_BKPF-BKTXT.
                WA_DATOS-BLART = WA_BKPF-BLART.
                WA_DATOS-BUDAT = WA_BKPF-BUDAT.
                WA_DATOS-BLDAT = WA_BKPF-BLDAT.
                
                READ TABLE T_BKPF INTO WA_BKPF 
                WITH KEY BUKRS = WA_BKPF-BUKRS
                BELNR = WA_BKPF-BELNR
                BUZEI = WA_BKPF-BUZEI
                GJAHR = WA_BKPF-GJAHR.
                
                IF SY-SUBRC EQ 0.
                WA_DATOS-SGTXT = WA_BSEG-SGTXT.
                WA_DATOS-PRCTR = WA_BSEG-PRCTR.
                ENDIF.
                
                APPEND WA_DATOS TO T_DATOS.
                CLEAR WA_DATOS.
                ENDLOOP.

                Comentario

                • xtralex89
                  Junior Member
                  • jun
                  • 4

                  #9
                  Originalmente publicado por aaron alfonso
                  Hola Necesito Dejar De Usar El Select Single Por que Solo Me Trae Un Solo Registro Pero He Intentado Pero No He Podido Alguien Me Puede Apoyar Con Un Ejemplo O Algun Comentario Se Lo Agradeceria Mucho.

                  Select Single Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart
                  From Bkpf Into (t_datos-bukrs , T_datos-belnr , T_datos-gjahr , T_datos-bldat , T_datos-budat , T_datos-xblnr , T_datos-bktxt , T_datos-blart)
                  Where Bukrs Eq P_bukrs
                  And Belnr In S_belnr
                  And Gjahr In S_gjahr.

                  Select Single Sgtxt Prctr
                  Into (t_datos-sgtxt , T_datos-prctr)
                  From Bseg
                  Where Bukrs Eq T_datos-bukrs
                  And Belnr Eq T_datos-belnr
                  And Gjahr Eq T_datos-gjahr.

                  Loop At T_datos.
                  Select Single Sgtxt Prctr
                  Into (t_datos-sgtxt , T_datos-prctr)
                  From Bseg
                  Where Bukrs Eq T_datos-bukrs
                  And Belnr Eq T_datos-belnr
                  And Gjahr Eq T_datos-gjahr.
                  Endloop.

                  Append T_datos.

                  Endform.

                  Cuando usas un SELECT SINGLE la consulta solo te regresa un registro, si lo que quieres es obtener mas registros debes quitar la palabra SINGLE y poner que reciba los datos en una tabla de la misma estructura con los datos que estas consultando, usando INTO TABLE.


                  Select Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart
                  From Bkpf
                  Into TABLE (t_datos-bukrs , T_datos-belnr , T_datos-gjahr , T_datos-bldat, T_datos-budat , T_datos-xblnr , T_datos-bktxt , T_datos-blart)
                  Where Bukrs Eq P_bukrs
                  And Belnr In S_belnr
                  And Gjahr In S_gjahr.

                  En la parte del INTO TABLE puedes generar un types y posteriormente una workarea con esa estructura y su tabla interna .

                  TYPES: BEGIN OF ty_wa,
                  Bukrs type bukrs,
                  Belnr type belnr_d,
                  Gjahr type gjahr,
                  Bldat type bldat,
                  Budat type budat,
                  Xblnr type xblnr,
                  Bktxt type bktxt,
                  Blart type blart,
                  END OF ty_wa.

                  data: it_tabla type table of ty_wa,
                  wa_tabla type ty_wa.

                  quedaría la consulta así:

                  Select Bukrs Belnr Gjahr Bldat Budat Xblnr Bktxt Blart
                  From Bkpf
                  Into table it_tabla
                  Where Bukrs Eq P_bukrs
                  And Belnr In S_belnr
                  And Gjahr In S_gjahr.

                  Saludos.

                  Comentario

                  • aaron alfonso
                    Junior Member
                    • may
                    • 27

                    #10
                    problema con las modificaciones propuestas

                    hola
                    he estado trando de entender sus opiniones encuanto alo que debo de hacer
                    pero mi programa con alv no funciona no me trae los datos debuggie y no inserta , espero puedan seguirme ayudando para solucionar mi problema.
                    saludos .!le dejo lo que hasta el momento llevo

                    *&---------------------------------------------------------------------*
                    *&Report ZVERCONSULTA
                    *&---------------------------------------------------------------------*
                    *&Analisis de Documentos FI
                    *&---------------------------------------------------------------------*
                    REPORT ZCONSULTA_DOCFI.

                    TABLES:BKPF,BSEG.
                    TYPES: BEGIN OF TY_BKPF,
                    BUKRS TYPE BKPF-BUKRS,
                    BELNR TYPE BKPF-BELNR,
                    GJAHR TYPE BKPF-GJAHR,
                    BLDAT TYPE BKPF-BLDAT,
                    BUDAT TYPE BKPF-BUDAT,
                    XBLNR TYPE BKPF-XBLNR,
                    BKTXT TYPE BKPF-BKTXT,
                    BLART TYPE BKPF-BLART,
                    END OF TY_BKPF.

                    TYPES: BEGIN OF TY_BSEG,
                    BUKRS TYPE BSEG-BUKRS,
                    BELNR TYPE BSEG-BELNR,
                    GJAHR TYPE BSEG-GJAHR,
                    SGTXT TYPE BSEG-SGTXT,
                    PRCTR TYPE BSEG-PRCTR,
                    END OF TY_BSEG.

                    TYPES: BEGIN OF TY_DATOS,
                    BUKRS TYPE BKPF-BUKRS,
                    BELNR TYPE BKPF-BELNR,
                    GJAHR TYPE BKPF-GJAHR,
                    BLDAT TYPE BKPF-BLDAT,
                    BUDAT TYPE BKPF-BUDAT,
                    XBLNR TYPE BKPF-XBLNR,
                    BKTXT TYPE BKPF-BKTXT,
                    BLART TYPE BKPF-BLART,
                    SGTXT TYPE BSEG-SGTXT,
                    PRCTR TYPE BSEG-PRCTR,
                    END OF TY_DATOS.

                    DATA:e_layout TYPE lvc_s_layo,
                    t_fcat TYPE lvc_t_fcat,
                    fldtext TYPE char50.

                    DATA: T_DATOS TYPE STANDARD TABLE OF TY_DATOS,
                    T_BKPF TYPE STANDARD TABLE OF TY_BKPF,
                    T_BSEG TYPE STANDARD TABLE OF TY_BSEG.

                    DATA: WA_BKPF TYPE TY_BKPF,
                    WA_BSEG TYPE TY_BSEG,
                    WA_DATOS TYPE TY_DATOS.

                    " FILTROS DE BUSQUEDA DE CAMPOS
                    SELECT-OPTIONS:
                    S_BELNR FOR BKPF-BELNR,
                    S_BLDAT FOR BKPF-BLDAT,
                    S_GJAHR FOR BKPF-GJAHR,
                    S_BUDAT FOR BKPF-BUDAT,
                    S_XBLNR FOR BKPF-XBLNR,
                    S_BLART FOR BKPF-BLART.
                    PARAMETERS:
                    P_BUKRS LIKE BKPF-BUKRS OBLIGATORY.
                    *&--------------------------------------------------------------------*
                    START-OF-SELECTION."Ejecuta sub-rutinas
                    PERFORM PIDE_DATOS. "Sub-rutina paso 1
                    PERFORM REPORTE_ALV."Sub-rutina paso 2
                    *&--------------------------------------------------------------------*
                    FORM PIDE_DATOS.
                    SELECT BUKRS BELNR GJAHR BLDAT BUDAT XBLNR BKTXT BLART
                    FROM BKPF INTO TABLE T_BKPF
                    WHERE BUKRS EQ P_BUKRS
                    AND BELNR IN S_BELNR
                    AND GJAHR IN S_GJAHR.

                    IF T_BKPF[] IS NOT INITIAL.

                    SELECT BUKRS BELNR GJAHR SGTXT PRCTR
                    FROM BSEG INTO TABLE T_BSEG
                    FOR ALL ENTRIES IN T_BKPF
                    WHERE BUKRS EQ T_BKPF-BUKRS
                    AND BELNR EQ T_BKPF-BELNR
                    AND GJAHR EQ T_BKPF-GJAHR.
                    ENDIF.

                    LOOP AT T_BKPF INTO WA_BKPF.

                    WA_DATOS-BUKRS = WA_BKPF-BUKRS.
                    WA_DATOS-BELNR = WA_BKPF-BELNR.
                    WA_DATOS-GJAHR = WA_BKPF-GJAHR.
                    WA_DATOS-XBLNR = WA_BKPF-XBLNR.
                    WA_DATOS-BKTXT = WA_BKPF-BKTXT.
                    WA_DATOS-BLART = WA_BKPF-BLART.
                    WA_DATOS-BUDAT = WA_BKPF-BUDAT.
                    WA_DATOS-BLDAT = WA_BKPF-BLDAT.

                    READ TABLE T_BKPF INTO WA_BKPF
                    WITH KEY BUKRS = WA_BKPF-BUKRS
                    BELNR = WA_BKPF-BELNR
                    GJAHR = WA_BKPF-GJAHR.

                    IF SY-SUBRC EQ 0.
                    WA_DATOS-SGTXT = WA_BSEG-SGTXT.
                    WA_DATOS-PRCTR = WA_BSEG-PRCTR.
                    ENDIF.

                    APPEND WA_DATOS TO T_DATOS.
                    CLEAR WA_DATOS.
                    ENDLOOP.

                    ENDFORM.
                    *&--------------------------------------------------------------------*
                    *REPORTE_ALV.- "SUBRUTINA" (SI AHI DATOS EMPIEZA)SI HAY DATOS,CARGA LOS DATOS Y EL CATALOGO.
                    *SI NO(NO PRESENTA DATOS)
                    *&--------------------------------------------------------------------*
                    FORM REPORTE_ALV.
                    CHECK NOT T_DATOS[] IS INITIAL." REVISA SI REALMENTE AHI DATOS EN (TAB.INT.) T_DATOS
                    PERFORM catalogo_fcat.
                    e_layout-zebra = 'X'.
                    e_layout-sel_mode = 'D'.
                    e_layout-no_rowmove = 'X'.
                    e_layout-col_opt = 'X'.
                    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' "LLAMADO DE FUNCION ALV.
                    EXPORTING
                    i_callback_program = sy-repid
                    i_callback_html_top_of_page = 'MY_HTML_TOP_PAGE'
                    is_layout_lvc = e_layout
                    it_fieldcat_lvc = t_fcat
                    TABLES
                    t_outtab = T_DATOS
                    EXCEPTIONS
                    program_error = 1.

                    IF SY-TCODE ='ZCONSULTA_DOCFI'.
                    ENDIF.
                    ENDFORM.
                    *&---------------------------------------------------------------------*
                    * CATALOGO.- COLOCA LAS CABECERAS DEL ALV
                    *&---------------------------------------------------------------------*
                    FORM catalogo_fcat.
                    PERFORM agrega_campos USING:
                    'BUKRS' 'BUKRS' 'BKPF' space space,
                    'BELNR' 'BELNR' 'BKPF' space space,
                    'GJAHR' 'GJAHR' 'BKPF' space space,
                    'BLDAT' 'BLDAT' 'BKPF' space space,
                    'BUDAT' 'BUDAT' 'BKPF' space space,
                    'XBLNR' 'XBLNR' 'BKPF' space space,
                    'BKTXT' 'BKTXT' 'BKPF' space space,
                    'BLART' 'BLART' 'BKPF' space space,
                    'SGTXT' 'SGTXT' 'BSEG' space space,
                    'PRCTR' 'PRCTR' 'BSEG' space space.
                    ENDFORM. " CATALOGO_FCAT
                    *&---------------------------------------------------------------------*
                    * AGREGA CAMPOS
                    *&---------------------------------------------------------------------*
                    FORM agrega_campos USING
                    value(p1) value(p2) value(p3) value(p4) value(p5).
                    DATA l_fcat TYPE lvc_s_fcat.
                    l_fcat-fieldname = p1.
                    l_fcat-ref_field = p2.
                    l_fcat-ref_table = p3.
                    l_fcat-coltext = p4.
                    l_fcat-inttype = p5.
                    l_fcat-col_opt = 'X'.
                    IF p5 NE space.
                    l_fcat-intlen = 20.
                    l_fcat-decimals = 2.
                    l_fcat-decimals_o = 2.
                    ENDIF.
                    APPEND l_fcat TO t_fcat.
                    ENDFORM. " finliza agrega_campos
                    *&---------------------------------------------------------------------*
                    *&Form MY_USER_COMMAND
                    *&---------------------------------------------------------------------*
                    FORM my_user_command USING p_ucomm TYPE sy-ucomm
                    p_selfield TYPE slis_selfield.
                    CASE p_ucomm.
                    WHEN 'REGR' OR 'SALI'.
                    p_selfield-exit = abap_true.
                    ENDCASE.

                    ENDFORM. " MY_USER_COMMAND
                    *-----------------------------------------------------------------------*
                    tenchy

                    Comentario

                    • aaron alfonso
                      Junior Member
                      • may
                      • 27

                      #11
                      Modificando Aun

                      Originalmente publicado por Ripper87
                      Tienes razón, se me olvidó...

                      Entonces hay que hacerlo como te lo colocó el amigo más arriba, solo te faltaría hacer el APPEND a la tabla, y yo agregaría el campo BUZEI a las consultas y condiciones, ya que es un campo clave que identifica la posición del documento, si un documento tiene varias posiciones y no verificas ese campo puedes estar mezclando datos de posiciones diferentes y traerte data erronea.

                      Código:
                      SELECT BUKRS BELNR BUZEI GJAHR BLDAT BUDAT XBLNR BKTXT BLART
                      FROM BKPF INTO TABLE T_BKPF
                      WHERE BUKRS EQ P_BUKRS
                      AND BELNR IN S_BELNR
                      AND GJAHR IN S_GJAHR.
                      
                      IF T_BKPF[] IS NOT INITIAL.
                      SELECT BUKRS BELNR BUZEI GJAHR SGTXT PRCTR
                      FROM BSEG INTO TABLE T_BSEG
                      FOR ALL ENTRIES IN T_BKPF
                      WHERE BUKRS EQ T_BKPF-BUKRS
                      AND BELNR EQ T_BKPF-BELNR
                      AND BUZEI EQ T_BKPF-BUZEI
                      AND GJAHR EQ T_BKPF-GJAHR.
                      ENDIF.
                      
                      LOOP AT T_BKPF INTO WA_BKPF.
                      
                      WA_DATOS-BUKRS = WA_BKPF-BUKRS.
                      WA_DATOS-BELNR = WA_BKPF-BELNR.
                      WA_DATOS-BUZEI = WA_BKPF-BUZEI.
                      WA_DATOS-GJAHR = WA_BKPF-GJAHR.
                      WA_DATOS-XBLNR = WA_BKPF-XBLNR.
                      WA_DATOS-BKTXT = WA_BKPF-BKTXT.
                      WA_DATOS-BLART = WA_BKPF-BLART.
                      WA_DATOS-BUDAT = WA_BKPF-BUDAT.
                      WA_DATOS-BLDAT = WA_BKPF-BLDAT.
                      
                      READ TABLE T_BKPF INTO WA_BKPF 
                      WITH KEY BUKRS = WA_BKPF-BUKRS
                      BELNR = WA_BKPF-BELNR
                      BUZEI = WA_BKPF-BUZEI
                      GJAHR = WA_BKPF-GJAHR.
                      
                      IF SY-SUBRC EQ 0.
                      WA_DATOS-SGTXT = WA_BSEG-SGTXT.
                      WA_DATOS-PRCTR = WA_BSEG-PRCTR.
                      ENDIF.
                      
                      APPEND WA_DATOS TO T_DATOS.
                      CLEAR WA_DATOS.
                      ENDLOOP.
                      EL UNICO DETALLE QUE ASI COMO LO TIENES NO TRAE NADA PERO SI LO MODIFICO SOLO UN POCO ME TRAE SOLO 1 REGISTRO SE SUPONE QUE TRAIGA MUCHOS REGISTROS. TODOS LOS QUE EXISTA EN UN AÑO, O DEL TIPO ZC O DE CIERTO CENTRO :


                      SELECT BUKRS BELNR GJAHR BLDAT BUDAT XBLNR BKTXT BLART
                      FROM BKPF INTO TABLE T_BKPF
                      WHERE
                      BUKRS EQ P_BUKRS
                      AND BELNR IN S_BELNR
                      AND GJAHR IN S_GJAHR
                      AND BLART IN S_BLART.

                      IF T_BKPF[] IS NOT INITIAL.

                      SELECT BUKRS BELNR GJAHR SGTXT PRCTR
                      FROM BSEG INTO TABLE T_BSEG
                      FOR ALL ENTRIES IN T_BKPF
                      WHERE
                      BUKRS EQ T_BKPF-BUKRS
                      AND BELNR EQ T_BKPF-BELNR
                      AND GJAHR EQ T_BKPF-GJAHR.
                      ENDIF.

                      LOOP AT T_BKPF INTO WA_BKPF.
                      WA_DATOS-BUKRS = WA_BKPF-BUKRS.
                      WA_DATOS-BELNR = WA_BKPF-BELNR.
                      WA_DATOS-GJAHR = WA_BKPF-GJAHR.
                      WA_DATOS-XBLNR = WA_BKPF-XBLNR.
                      WA_DATOS-BKTXT = WA_BKPF-BKTXT.
                      WA_DATOS-BLART = WA_BKPF-BLART.
                      WA_DATOS-BUDAT = WA_BKPF-BUDAT.
                      WA_DATOS-BLDAT = WA_BKPF-BLDAT.
                      WA_DATOS-SGTXT = WA_BSEG-SGTXT.
                      WA_DATOS-PRCTR = WA_BSEG-PRCTR.

                      ENDLOOP.

                      IF SY-SUBRC EQ 0.
                      WA_DATOS-SGTXT = WA_BSEG-SGTXT.
                      WA_DATOS-PRCTR = WA_BSEG-PRCTR.
                      ENDIF.

                      READ TABLE T_BKPF INTO WA_BKPF
                      WITH KEY
                      BUKRS = WA_BKPF-BUKRS
                      BELNR = WA_BKPF-BELNR
                      GJAHR = WA_BKPF-GJAHR.

                      APPEND WA_DATOS TO T_DATOS.
                      CLEAR WA_DATOS.
                      tenchy

                      Comentario

                      • awas90
                        Member
                        • may
                        • 68

                        #12
                        Originalmente publicado por aaron alfonso
                        EL UNICO DETALLE QUE ASI COMO LO TIENES NO TRAE NADA PERO SI LO MODIFICO SOLO UN POCO ME TRAE SOLO 1 REGISTRO SE SUPONE QUE TRAIGA MUCHOS REGISTROS. TODOS LOS QUE EXISTA EN UN AÑO, O DEL TIPO ZC O DE CIERTO CENTRO :


                        SELECT BUKRS BELNR GJAHR BLDAT BUDAT XBLNR BKTXT BLART
                        FROM BKPF INTO TABLE T_BKPF
                        WHERE
                        BUKRS EQ P_BUKRS AND
                        BELNR IN S_BELNR AND
                        GJAHR IN S_GJAHR AND
                        BLART IN S_BLART.

                        IF T_BKPF[] IS NOT INITIAL.

                        SELECT BUKRS BELNR GJAHR SGTXT PRCTR
                        FROM BSEG INTO TABLE T_BSEG
                        FOR ALL ENTRIES IN T_BKPF
                        WHERE
                        BUKRS EQ T_BKPF-BUKRS AND
                        BELNR EQ T_BKPF-BELNR AND
                        GJAHR EQ T_BKPF-GJAHR.

                        ENDIF.

                        LOOP AT T_BKPF INTO WA_BKPF.
                        WA_DATOS-BUKRS = WA_BKPF-BUKRS.
                        WA_DATOS-BELNR = WA_BKPF-BELNR.
                        WA_DATOS-GJAHR = WA_BKPF-GJAHR.
                        WA_DATOS-XBLNR = WA_BKPF-XBLNR.
                        WA_DATOS-BKTXT = WA_BKPF-BKTXT.
                        WA_DATOS-BLART = WA_BKPF-BLART.
                        WA_DATOS-BUDAT = WA_BKPF-BUDAT.
                        WA_DATOS-BLDAT = WA_BKPF-BLDAT.
                        WA_DATOS-SGTXT = WA_BSEG-SGTXT.
                        WA_DATOS-PRCTR = WA_BSEG-PRCTR.
                        APPEND WA_DATOS TO T_DATOS.

                        IF SY-SUBRC EQ 0.
                        WA_DATOS-SGTXT = WA_BSEG-SGTXT.
                        WA_DATOS-PRCTR = WA_BSEG-PRCTR.
                        ENDIF.


                        ENDLOOP.


                        READ TABLE T_BKPF INTO WA_BKPF
                        WITH KEY
                        BUKRS = WA_BKPF-BUKRS
                        BELNR = WA_BKPF-BELNR
                        GJAHR = WA_BKPF-GJAHR.


                        " Para que quieres el WA_BKPF?

                        CLEAR WA_DATOS.
                        El append tiene que ser dentro del loop, sino no vale para nada. Te he corregido a priori los fallos.

                        cuentame para que haces ese READ TABLE

                        Comentario

                        • aaron alfonso
                          Junior Member
                          • may
                          • 27

                          #13
                          Aun Nada

                          Originalmente publicado por awas90
                          El append tiene que ser dentro del loop, sino no vale para nada. Te he corregido a priori los fallos.

                          cuentame para que haces ese READ TABLE
                          COMPAÑERO OKEY SI VA DENTRO .
                          PERO AL INGRESAR EN EL DEBUG Y EL IF QUE ME COLOCAS NO LEE
                          COMO LE HAGO PARA QUE ESTE LOOP NO SE DETENGA DE LEER LO QUE CONTENGA LA TABLA .
                          SI SACO EL APPEND DEL LOOP SOLO UNO TRAE .

                          IF SY-SUBRC = 0.
                          WA_DATOS-SGTXT = WA_BSEG-SGTXT.
                          WA_DATOS-PRCTR = WA_BSEG-PRCTR.
                          ENDIF.
                          APPEND WA_DATOS TO T_DATOS.
                          clear wa_datos.
                          POR CIERTO GRACIAS POR LA AYUDA
                          tenchy

                          Comentario

                          • awas90
                            Member
                            • may
                            • 68

                            #14
                            Originalmente publicado por aaron alfonso
                            COMPAÑERO OKEY SI VA DENTRO .
                            PERO AL INGRESAR EN EL DEBUG Y EL IF QUE ME COLOCAS NO LEE
                            COMO LE HAGO PARA QUE ESTE LOOP NO SE DETENGA DE LEER LO QUE CONTENGA LA TABLA .
                            SI SACO EL APPEND DEL LOOP SOLO UNO TRAE .

                            IF SY-SUBRC = 0.
                            WA_DATOS-SGTXT = WA_BSEG-SGTXT.
                            WA_DATOS-PRCTR = WA_BSEG-PRCTR.
                            ENDIF.
                            APPEND WA_DATOS TO T_DATOS.
                            clear wa_datos.
                            POR CIERTO GRACIAS POR LA AYUDA
                            Copiame el código entero en pastebin (www.pastebin.com) y me pasas el enlace por aqui.

                            Comentario

                            Trabajando...