Hola, Buenas tardes,
necesito ayuda... no sé como hacerlo.
Para el que no quiera leer todo (la explicación con código que hay en lo último), lo resumo:
- necesito tener una tabla interna con registros de MARA, MARC y /sapapo/matkey. Salen una cantidad de registros impresionantes.
Como con join y left outer join tarda mucho he pensado en hacerlo con 2 tablas interna:
- MARC y /sapapo/matkey
- MARA y MARC
Pero claro, cuando recorro la primera tabla interna, con el groso de registros, para modificar los campos que necesito, tambien tarda la vida.
He pensado en hacerlo con una vista, y he probado, pero creo que no me salen todos los registros ya que entre MARC y /sapapo/matkey necesito un lef outer join.
*** ¿Alguna sugerencia para hacerlo?
*** ¿se puede actualizar líneas de forma masiva entre 2 tablas internas?
+ con MODIFY <itab> FROM <wa> TRANSPORTING <f1> <f 2> ... WHERE <cond>.
+ haciendo en los selects into un FOR ALL ENTRIES IN
No tengo ni idea... ¡MUCHAS GRACIAS!
EXPLICACIÓN CON CÓDIGO:
Lo que me gustaría hacer es esto:
SELECT
ma~matnr
mc~matnr mc~werks
ma~ersda ma~ernam ma~laeda ma~aenam ma~serial
mc~sernp mk~matid mk~serial mk~createutc mk~createuser
mk~changeutc mk~changeuser
INTO CORRESPONDING FIELDS OF TABLE git_listmat
git_listmat-matnr git_listmat-werks git_listmat-ersda
git_listmat-ernam git_listmat-laeda git_listmat-aenam
git_listmat-serial git_listmat-sernp git_listmat-matid
git_listmat-serial_ewm git_listmat-createutc
git_listmat-createuser git_listmat-changeutc
git_listmat-changeuser
FROM mara AS ma
INNER JOIN marc AS mc
ON ma~matnr = mc~matnr
LEFT OUTER JOIN /sapapo/matkey AS mk
ON mk~matnr = mc~matnr
.
Como con este SELECT se puede tirar horas.
He pensado en hacerlo por trozos, primero lo pongo en una tabla interna lo más gordo:
SELECT
mc~matnr mc~werks
mc~sernp mk~matid mk~serial mk~createutc mk~createuser
mk~changeutc mk~changeuser
INTO CORRESPONDING FIELDS OF TABLE git_listmat
FROM marc AS mc
LEFT OUTER JOIN /sapapo/matkey AS mk
ON mk~matnr = mc~matnr
.
y luego actualizo los campos que necesito de MARA:
ma~ersda ma~ernam ma~laeda ma~aenam ma~serial.
Pues esto útimo no se como hacerlo... he pensado con lo siguiente:
SELECT
ma~matnr
mc~werks
ma~ersda ma~ernam ma~laeda ma~aenam ma~serial
mc~sernp
INTO TABLE git_erp
FROM mara AS ma
INNER JOIN marc AS mc
ON ma~matnr = mc~matnr
.
LOOP AT git_listmat.
READ TABLE git_erp WITH KEY MATNR = git_listmat-matnr.
git_listmat-matnr = git_erp-matnr.
git_listmat-ersda = git_erp-ersda.
git_listmat-ernam = git_erp-ernam.
git_listmat-laeda = git_erp-laeda.
git_listmat-aenam = git_erp-aenam.
git_listmat-serial = git_erp-serial.
modify git_listmat INDEX sy-tabix.
ENDLOOP.
pero también tarda una vida...
¡¡GRACIAS POR VUESTRO TIEMPO!!
necesito ayuda... no sé como hacerlo.
Para el que no quiera leer todo (la explicación con código que hay en lo último), lo resumo:
- necesito tener una tabla interna con registros de MARA, MARC y /sapapo/matkey. Salen una cantidad de registros impresionantes.
Como con join y left outer join tarda mucho he pensado en hacerlo con 2 tablas interna:
- MARC y /sapapo/matkey
- MARA y MARC
Pero claro, cuando recorro la primera tabla interna, con el groso de registros, para modificar los campos que necesito, tambien tarda la vida.
He pensado en hacerlo con una vista, y he probado, pero creo que no me salen todos los registros ya que entre MARC y /sapapo/matkey necesito un lef outer join.
*** ¿Alguna sugerencia para hacerlo?
*** ¿se puede actualizar líneas de forma masiva entre 2 tablas internas?
+ con MODIFY <itab> FROM <wa> TRANSPORTING <f1> <f 2> ... WHERE <cond>.
+ haciendo en los selects into un FOR ALL ENTRIES IN
No tengo ni idea... ¡MUCHAS GRACIAS!
EXPLICACIÓN CON CÓDIGO:
Lo que me gustaría hacer es esto:
SELECT
ma~matnr
mc~matnr mc~werks
ma~ersda ma~ernam ma~laeda ma~aenam ma~serial
mc~sernp mk~matid mk~serial mk~createutc mk~createuser
mk~changeutc mk~changeuser
INTO CORRESPONDING FIELDS OF TABLE git_listmat
git_listmat-matnr git_listmat-werks git_listmat-ersda
git_listmat-ernam git_listmat-laeda git_listmat-aenam
git_listmat-serial git_listmat-sernp git_listmat-matid
git_listmat-serial_ewm git_listmat-createutc
git_listmat-createuser git_listmat-changeutc
git_listmat-changeuser
FROM mara AS ma
INNER JOIN marc AS mc
ON ma~matnr = mc~matnr
LEFT OUTER JOIN /sapapo/matkey AS mk
ON mk~matnr = mc~matnr
.
Como con este SELECT se puede tirar horas.
He pensado en hacerlo por trozos, primero lo pongo en una tabla interna lo más gordo:
SELECT
mc~matnr mc~werks
mc~sernp mk~matid mk~serial mk~createutc mk~createuser
mk~changeutc mk~changeuser
INTO CORRESPONDING FIELDS OF TABLE git_listmat
FROM marc AS mc
LEFT OUTER JOIN /sapapo/matkey AS mk
ON mk~matnr = mc~matnr
.
y luego actualizo los campos que necesito de MARA:
ma~ersda ma~ernam ma~laeda ma~aenam ma~serial.
Pues esto útimo no se como hacerlo... he pensado con lo siguiente:
SELECT
ma~matnr
mc~werks
ma~ersda ma~ernam ma~laeda ma~aenam ma~serial
mc~sernp
INTO TABLE git_erp
FROM mara AS ma
INNER JOIN marc AS mc
ON ma~matnr = mc~matnr
.
LOOP AT git_listmat.
READ TABLE git_erp WITH KEY MATNR = git_listmat-matnr.
git_listmat-matnr = git_erp-matnr.
git_listmat-ersda = git_erp-ersda.
git_listmat-ernam = git_erp-ernam.
git_listmat-laeda = git_erp-laeda.
git_listmat-aenam = git_erp-aenam.
git_listmat-serial = git_erp-serial.
modify git_listmat INDEX sy-tabix.
ENDLOOP.
pero también tarda una vida...
¡¡GRACIAS POR VUESTRO TIEMPO!!
Comentario