duda FOR ALL ENTRIES

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • javico40
    Member
    • nov
    • 37

    #1

    duda FOR ALL ENTRIES

    Hola buenas, muchas gracias por ayudarme antes ya voy bien encaminado, queria preguntar si tienen algun codigo de ejemplo para unir selects, for ejemplo los siguientes tres selects como los puedo unir usando FOR ALL ENTRIES nunca habia usado esa sentencia y ando buscando como funciona, gracias.

    Código:
    SELECT mseg~matnr
            SUM( mseg~menge )
            SUM( mseg~dmbtr )
      FROM mseg
      INTO CORRESPONDING FIELDS OF TABLE pre_mattab_initial
      WHERE mseg~bwart IN ('561', '562')
      GROUP BY mseg~matnr.
    
      SELECT mseg~matnr
            SUM( mseg~menge )
            SUM( mseg~dmbtr )
      FROM mseg
      INTO CORRESPONDING FIELDS OF TABLE pre_mattab_initial
      WHERE mseg~bwart IN ('561', '562')
      GROUP BY mseg~matnr.
    
      SELECT mseg~matnr
            SUM( mseg~menge )
            SUM( mseg~dmbtr )
      FROM mseg
      INTO CORRESPONDING FIELDS OF TABLE pre_mattab_initial
      WHERE mseg~bwart IN ('561', '562')
      GROUP BY mseg~matnr.
  • javico40
    Member
    • nov
    • 37

    #2
    Quiero unirlos en una sola internal table.

    Comentario

    • DCErick
      Moderator
      • mar
      • 1090

      #3
      Para unir el resultado de los 3 select en una tabla interna haces el INTO... TABLE en el primer select y en los siguientes dos cambias el INTO por APPENDING.

      Originalmente publicado por javico40
      Código:
      SELECT mseg~matnr
              SUM( mseg~menge )
              SUM( mseg~dmbtr )
        FROM mseg
        INTO CORRESPONDING FIELDS OF TABLE pre_mattab_initial
        WHERE mseg~bwart IN ('561', '562')
        GROUP BY mseg~matnr.
      
        SELECT mseg~matnr
              SUM( mseg~menge )
              SUM( mseg~dmbtr )
        FROM mseg
      [B] APPENDING[/B] CORRESPONDING FIELDS OF TABLE pre_mattab_initial
        WHERE mseg~bwart IN ('561', '562')
        GROUP BY mseg~matnr.
      
        SELECT mseg~matnr
              SUM( mseg~menge )
              SUM( mseg~dmbtr )
        FROM mseg
        [B] APPENDING[/B] CORRESPONDING FIELDS OF TABLE pre_mattab_initial
        WHERE mseg~bwart IN ('561', '562')
        GROUP BY mseg~matnr.
      Forr All Entries no es para unir tablas internas.
      -------------------
      ¿Dudas para descargar manuales? Ver este tema -> Cómo descargar manuales de la sección "Descargas" ?

      Comentario

      • javico40
        Member
        • nov
        • 37

        #4
        Encontre una solucion, primero obtener toda la data en tablas internas, pasar toda la informacion a work areas, y llenar las filas de una tabla final con la informacion, aqui la solucion>

        Código:
        TYPES: BEGIN OF t_materials_description,
          matnr TYPE mseg-matnr,
          maktx TYPE makt-maktx,
          budat TYPE mkpf-budat,
        END OF  t_materials_description,
        
        BEGIN OF t_initial,
        matnr TYPE mseg-matnr,
        menge TYPE mseg-menge,
        dmbtr TYPE mseg-dmbtr,
        END OF t_initial,
        
        BEGIN OF t_issue,
        matnr TYPE mseg-matnr,
        menge TYPE mseg-menge,
        dmbtr TYPE mseg-dmbtr,
        END OF t_issue,
        
        BEGIN OF t_receip,
        matnr TYPE mseg-matnr,
        menge TYPE mseg-menge,
        dmbtr TYPE mseg-dmbtr,
        END OF t_receip.
        
        DATA: wa_matdescription TYPE t_materials_description,
              it_matdescription TYPE TABLE OF t_materials_description,
              it_matdescription_aux TYPE TABLE OF t_materials_description,
              wa_matinitial TYPE t_initial,
              it_matinitial TYPE TABLE OF t_initial,
              wa_matissue TYPE t_issue,
              it_matissue TYPE TABLE OF t_issue,
              wa_matreceip TYPE t_receip,
              it_matreceip TYPE TABLE OF t_receip,
              cantidad TYPE sy-dbcnt.
        
        * OBTENGO LA LISTA DE MATERIALES DESDE MSEG
        SELECT mseg~matnr
               makt~maktx
          FROM mseg
          INNER JOIN makt
          ON mseg~matnr EQ makt~matnr
          AND makt~spras EQ 'ES'
          INNER JOIN mkpf
          ON mseg~mblnr  EQ mkpf~mblnr
          AND mseg~mjahr EQ mkpf~mjahr
          INNER JOIN lfa1
          ON mseg~lifnr EQ lfa1~lifnr
          INTO TABLE it_matdescription
          WHERE mkpf~budat IN Material " Sel. Screen
            AND mseg~lifnr IN Type " Sel. Screen
            AND mseg~gjahr EQ Posting.  " Sel. Screen
        
        
          IF sy-subrc EQ 0.
        * SI EXISTEN MATERIALES
        * CUENTO CUANTOS EGISTROS OBTUVE
           cantidad = sy-dbcnt.
        * COPIO MI TABLA A UNA TABLA AUXILIAR
           it_matdescription_aux[] = it_matdescription[].
        * ORDENO LA TABLA
           SORT it_matdescription_aux BY matnr.
        
           DELETE ADJACENT DUPLICATES FROM it_matdescription_aux COMPARING matnr.
        
           SELECT  mseg~matnr
                   mseg~menge
                   mseg~dmbtr
           FROM MSEG INTO TABLE it_matinitial
           FOR ALL ENTRIES IN it_matdescription_aux
           WHERE  mseg~bwart IN ('561', '562')
           AND matnr  =  it_matdescription_aux-matnr.
        
           IF sy-subrc EQ 0.
        
           it_matdescription_aux[] = it_matdescription[].
        
           SORT it_matdescription_aux BY matnr.
        
           DELETE ADJACENT DUPLICATES FROM it_matdescription_aux COMPARING matnr.
        
           SELECT  mseg~matnr
                   mseg~menge
                   mseg~dmbtr
           FROM MSEG INTO TABLE it_matissue
           FOR ALL ENTRIES IN it_matdescription_aux
           WHERE  mseg~bwart IN ('281', '282', '261', '262', '201', '202')
           AND matnr  =  it_matdescription_aux-matnr.
        
           IF sy-subrc EQ 0.
        
           it_matdescription_aux[] = it_matdescription[].
        
           SORT it_matdescription_aux BY matnr.
        
           DELETE ADJACENT DUPLICATES FROM it_matdescription_aux COMPARING matnr.
        
           SELECT  mseg~matnr
                   mseg~menge
                   mseg~dmbtr
           FROM MSEG INTO TABLE it_matreceip
           FOR ALL ENTRIES IN it_matdescription_aux
           WHERE  mseg~bwart IN ('101', '102', '501', '502')
           AND matnr  =  it_matdescription_aux-matnr.
        
            SORT it_matinitial BY matnr.
            SORT it_matissue BY matnr.
            SORT it_matreceip BY matnr.
        
            LOOP AT it_matdescription INTO wa_matdescription.
        
            READ TABLE it_matinitial INTO wa_matinitial
            WITH KEY matnr = wa_matdescription-matnr
            BINARY SEARCH.
        
            IF sy-subrc EQ 0.
        
            READ TABLE it_matissue INTO wa_matissue
            WITH KEY matnr = wa_matdescription-matnr
            BINARY SEARCH.
        
            IF sy-subrc EQ 0.
        
            READ TABLE it_matreceip INTO wa_matreceip
            WITH KEY matnr = wa_matdescription-matnr
            BINARY SEARCH.
        
               IF sy-subrc EQ 0.
        
                  wa_outtab-matnr = wa_matdescription-matnr.
                  wa_outtab-maktx = wa_matdescription-maktx.
                  wa_outtab-menge = wa_matinitial-menge.
                  wa_outtab-dmbtr = wa_matinitial-dmbtr.
                  wa_outtab-menge2 = wa_matissue-menge.
                  wa_outtab-dmbtr2 = wa_matissue-dmbtr.
                  wa_outtab-menge3 = wa_matreceip-menge.
                  wa_outtab-dmbtr3 = wa_matreceip-dmbtr.
                  INSERT wa_outtab INTO TABLE pre_outtab.
        
               ENDIF.
              ENDIF.
             ENDIF.
             ENDLOOP.
            ENDIF.
           ENDIF.
          ENDIF.

        Comentario

        Trabajando...