LOOP AT... WHERE campo IN ITAB???? se puede?

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • kachalot
    Junior Member
    • ene
    • 9

    #1

    LOOP AT... WHERE campo IN ITAB???? se puede?

    Hola, hoy no es mi día...

    Tengo una tabla interna y quiero recorrerla pero solo si está en otra.

    yo juraría que era así:

    TYPES: BEGIN OF gt_matid,
    matid TYPE /sapapo/matkey-matid,
    END OF gt_matid.
    DATA: git_matid TYPE TABLE OF gt_matid WITH HEADER LINE.
    * DATA: git_matid TYPE STANDARD TABLE OF gt_matid.

    SELECT
    lwh~matid
    INTO TABLE git_matid
    FROM /sapapo/matlwh AS lwh
    FOR ALL ENTRIES IN git_lwh WHERE matid = git_lwh-matid
    * INNER JOIN marc AS mc
    * ON ma~matnr = mc~matnr
    .

    LOOP AT git_listmat
    WHERE matid IN git_matid.
    ENDLOOP.


    pero me da ERROR. Me dice que "git_matid, no tiene estructura de una tabla de selección".

    ¿¿que es que no se puede y me he liedo yo son un selection-option??


    gracias.
  • vanesamacri
    Senior Member
    • jun
    • 146

    #2
    Originalmente publicado por kachalot
    LOOP AT git_listmat
    WHERE matid IN git_matid.
    ENDLOOP.
    Probá declarando a la tabla git_matid de la siguiente manera:

    DATA git_matid TYPE RANGE OF /sapapo/matkey-matid WITH HEADER LINE.

    Comentario

    • rubendaga
      Junior Member
      • sep
      • 13

      #3
      Crea un rango con la tabla git_listmat, la recorres en un loop y llenas el campo low del rango con el dato que necesitas comparar, luego podrás utilizar el rango para tu condición.

      Saludos.

      Comentario

      • kachalot
        Junior Member
        • ene
        • 9

        #4
        Así es vanesamacri y rubendaga!! Muchas gracias!!

        Este es mi código resultante por si a alguien más le sirve:

        ***Faltaría comprobaciones y control de errores.


        TYPES: BEGIN OF gt_matid,
        matid TYPE /sapapo/matkey-matid,
        END OF gt_matid.
        DATA: git_matid TYPE TABLE OF gt_matid WITH HEADER LINE.


        *Declaracio rango
        *[======================================
        DATA: rang_matid TYPE RANGE OF gt_matid WITH HEADER LINE.
        *======================================]

        *inicializar rangos con tabla interna
        *[=====================================
        SELECT
        lwh~matid
        INTO TABLE git_matid
        FROM /sapapo/matlwh AS lwh
        FOR ALL ENTRIES IN git_lwh WHERE matid = git_lwh-matid
        * INNER JOIN marc AS mc
        * ON ma~matnr = mc~matnr
        .

        SORT git_matid BY matid.

        * IF git_matid IS NOT INITIAL.
        LOOP AT git_matid.
        CLEAR: rang_matid.
        rang_matid-sign = 'I'.
        rang_matid-option = 'EQ'.
        rang_matid-low = git_matid-matid.
        APPEND rang_matid.
        ENDLOOP.
        * ENDIF.
        *=======================================]

        DATA l_tabix_lismat TYPE i.
        *utilización
        *[=====================================
        LOOP AT git_listmat
        WHERE matid IN rang_matid.

        l_tabix_lismat = sy-tabix.

        READ TABLE git_lwh WITH KEY matid = git_listmat-matid.

        git_listmat-scuguid = git_lwh-scuguid.
        git_listmat-ptdetind = git_lwh-ptdetind.
        git_listmat-put_stra = git_lwh-put_stra.
        git_listmat-rem_stra = git_lwh-rem_stra.

        MODIFY git_listmat INDEX l_tabix_lismat.

        ENDLOOP.
        *=======================================]

        Comentario

        Trabajando...