PDA

Ver la Versión Completa : Añadir campos en ALV


tabi.rivero
29/01/15, 18:10:07
Hola
Tengo una duda. Soy Abap Jr apenas 3 semanas con esto de abap :( . Tengo un problemita con un ALV. Me pidieron una modificación, agregar 2 columnas: denominación de tipo de material y denominación de Gpo. de Artículos.

Aparte del TYPE-POOLS: slis, el FM = REUSE_ALV_GRID_DISPLAY y el catálogo, tengo esto que creo es importante.
Tengo esto:

* Tablas.
TABLES: mara, "Maestro de Materiales.
makt. "Textos breves - Material.

TYPES: BEGIN OF ty_lista,
matnr LIKE mara-matnr, "No. Material.
maktx LIKE makt-maktx, "Descrip. Material.
ersda LIKE mara-ersda, "Fecha de Creación.
mtart LIKE mara-mtart, "Tipo de Material
matkl LIKE mara-matkl, "Gpo. de Artículos.
meins LIKE mara-meins, "UMB.
gewei LIKE mara-gewei, "UM Peso.
mtbez LIKE t134t-mtbez, "Add 29.01.2015
wgbez LIKE t023t-wgbez, "Add 29.01.2015
END OF ty_lista,

* Inicio modif. 29.01.2015
BEGIN OF ty_mtart,
mtart LIKE t134t-mtart, "Tipo de Material.
mtbez LIKE t134t-mtbez, "Descrip. Tipo de Material.
END OF ty_mtart,

BEGIN OF ty_matkl,
matkl LIKE t023t-matkl, "Gpo. Artículos.
wgbez LIKE t023t-wgbez, "Descrip. Gpo. Artículos.
END OF ty_matkl.
* Final modif. 29.01.2015

* Declaración de tablas internas.
DATA: lt_lista TYPE STANDARD TABLE OF ty_lista WITH HEADER LINE,
lt_mtart TYPE STANDARD TABLE OF ty_mtart WITH HEADER LINE, "Add 29.01.2015
lt_matkl TYPE STANDARD TABLE OF ty_matkl WITH HEADER LINE. "Add 29.01.2015

* Declaraciones del ALV.
DATA: ls_layout TYPE slis_layout_alv,
lt_catalog TYPE slis_t_fieldcat_alv,
ls_catalog TYPE slis_fieldcat_alv.

* Pantalla de selección.
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: so_matnr FOR mara-matnr OBLIGATORY,
so_ersda FOR mara-ersda,
so_mtart FOR mara-mtart.
SELECTION-SCREEN: END OF BLOCK b1.

START-OF-SELECTION.
PERFORM obtener_datos.
PERFORM catalogo_alv.
PERFORM llamar_alv.

FORM obtener_datos.
* Extracción de datos de materiales.
SELECT mara~matnr
maktx
ersda
mtart
matkl
meins
gewei
FROM mara INNER JOIN makt
ON mara~matnr EQ makt~matnr
INTO TABLE lt_lista
WHERE mara~matnr IN so_matnr
AND ersda IN so_ersda
AND mtart IN so_ersda
AND spras EQ sy-langu.

* Inicio modif. 29.01.2015
* Extracción de denominaciones de tipo de material.
SELECT mtart
mtbez
FROM t134t
INTO TABLE lt_mtart
WHERE spras EQ sy-langu.

* Extracción de denominaciones de Gpo. Artículos.
SELECT matkl
wgbez
FROM t023t
INTO TABLE lt_matkl
WHERE spras EQ sy-langu.

LOOP AT lt_lista.
READ TABLE lt_lista WITH KEY mtart = lt_lista-mtart.
IF sy-subrc EQ 0.
MODIFY lt_lista INDEX sy-tabix TRANSPORTING mtbez.
ENDIF.

READ TABLE lt_matkl WITH KEY matkl = lt_lista-matkl.
IF sy-subrc EQ 0.
ENDIF.
ENDLOOP.
* Final modif. 29.01.2015
ENDFORM. " OBTENER_DATOS

En el debug se muestran ya las 2 columnas (ya están en el catálogo) que me piden, pero no hay datos. Hice lo del MODIFY, pero creo que no es eso. No se como unir datos de 2 o mas tablas internas :confused:

Espero puedan ayudarme.

Saludos.

ABellamy
19/02/15, 22:21:39
Hola tabi.rivero
No tendría caso corregirte pues es algo básico y muy importante en cualquier desarrollo las operaciones con tablas internas, mejor te paso un link del que te puedes aprender, practicar y debugear: https://www.sapnuts.com/courses/core-abap/internal-table-work-area/internal-table-operations.html
Sirve de mucho, lo que no entiendas presiona F1, lee la ayuda, realiza muchos ejercicios y debugea, no queda de otra

Suerte
Saludos

sconoredhot
20/02/15, 10:36:17
Hola,

Si, como dicen arriba deberías debuguearlo.

Pero fijate que el mayor problema está aca:

LOOP AT lt_lista.
READ TABLE lt_lista WITH KEY mtart = lt_lista-mtart.
***** aca tenes que leer la otra tabla, no lt_lista ********
IF sy-subrc EQ 0.
MODIFY lt_lista INDEX sy-tabix TRANSPORTING mtbez.
ENDIF.

READ TABLE lt_matkl WITH KEY matkl = lt_lista-matkl.
IF sy-subrc EQ 0.
******* aca te falta pasar el valor a lt_lista **********
ENDIF.
ENDLOOP