MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   LOOP AT... WHERE campo IN ITAB???? se puede? (foro/showthread.php?t=66162)

kachalot 14/02/13 15:02:39

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 14/02/13 16:24:11


Probá declarando a la tabla git_matid de la siguiente manera:

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

rubendaga 14/02/13 22:31:24

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.

kachalot 15/02/13 07:18:40

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.
*=======================================]


Husos Horarios son GMT. La hora en este momento es 04:14:17.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web