PDA

Ver la Versión Completa : Trasponer una tabla (o tabla interna) en ABAP


andresf02
27/05/10, 12:42:34
Buenos dias

Tengo que trasponer una tabla interna que tengo ya creada y llena de datos; es decir cambiar las filas por columnas.

Mi caso concreto es con las caracteristicas de las clases (tablas KSSK, KSML, AUSP)

Donde tengo un objeto en la primera columna y por la organizacion de las tablas estandar en sap, se repite el mismo objeto hacia abajo por cada caracteristica que posea haciendo que el reporte sea muy grande verticalmente.


|-OBJETO-|-Caracteristica-|---Valor---|
|-100001-|-caracterist_01-|-Valor_01-|
|-100001-|-caracterist_02-|-Valor_02-|
|-100001-|-caracterist_03-|-Valor_03-|
|-100002-|-caracterist_01-|-Valor_04-|
|-100002-|-caracterist_02-|-Valor_05-|
|-100002-|-caracterist_03-|-Valor_06-|

y la idea es tener:

|-OBJETO-|-caracterist_01-|-caracterist_02-|-caracterist_03-|
|-100001-|----Valor_01----|----Valor_02----|----Valor_03---|
|-100002-|----Valor_04----|----Valor_05----|----Valor_06---|

Alguien me puede hacer el favor de guiarme sobre como hacer este proceso; si existe alguna funcion que lo haga automaticamente o en caso de tener que realizar un procedimiento manual por favor me explican.


Mil Gracias!

emerson.tosin
27/05/10, 14:00:15
Para eso, se utiliza el concepto de "DYNAMIC TABLES".
Sigue el ejemplo:

http://www.sap-img.com/ab030.htm

K-MUS
27/05/10, 15:38:56
Buenos dias

Tengo que trasponer una tabla interna que tengo ya creada y llena de datos; es decir cambiar las filas por columnas.

Mi caso concreto es con las caracteristicas de las clases (tablas KSSK, KSML, AUSP)

Donde tengo un objeto en la primera columna y por la organizacion de las tablas estandar en sap, se repite el mismo objeto hacia abajo por cada caracteristica que posea haciendo que el reporte sea muy grande verticalmente.


|-OBJETO-|-Caracteristica-|---Valor---|
|-100001-|-caracterist_01-|-Valor_01-|
|-100001-|-caracterist_02-|-Valor_02-|
|-100001-|-caracterist_03-|-Valor_03-|
|-100002-|-caracterist_01-|-Valor_04-|
|-100002-|-caracterist_02-|-Valor_05-|
|-100002-|-caracterist_03-|-Valor_06-|

y la idea es tener:

|-OBJETO-|-caracterist_01-|-caracterist_02-|-caracterist_03-|
|-100001-|----Valor_01----|----Valor_02----|----Valor_03---|
|-100002-|----Valor_04----|----Valor_05----|----Valor_06---|

Alguien me puede hacer el favor de guiarme sobre como hacer este proceso; si existe alguna funcion que lo haga automaticamente o en caso de tener que realizar un procedimiento manual por favor me explican.


Mil Gracias!

Si bien la solución efectivamente es usando tablas dinámicas, te vas a complicar mucho. Más aun si no tenes mucha idea del uso de field-symbols.

Si queres la solucion más simple y si el núm. decaracerísticas es finito.Entonces maneja vos el flujo de control


LOOP AT ti.
wa_ti = ti.

CASE wa_ti-caracteristica.
WHEN 'caract1'.
ti_alv-caract1 = wa_ti-valor.
WHEN 'caract2'.
ti_alv-caract2 = wa_ti-valor.
... etc
ENDCASE.

AT END OF objeto.
APPEND ti_alv.
CLEAR ti_alv.
ENDAT.

ENDLOOP.
De esta forma obtenes lo que queres, igualmente lo ideal sería que usas tablas dinámicas, yo te doy la solución con núm. finito de columnas por si se te complica mucho lo otro.

andresf02
27/05/10, 17:08:41
Muchas Gracias por responder.

La verdad es que estuve revisando la solucion por tablas dinamicas y si me tocaria primero comprender y uso y funcionamiento de las mismas.

Voy a optar por el momento por la solucion simple ya que el numero de caracteristicas es finito y no hay planes de aumentarlas. Ademas la necesidad del reporte es muy urgente.

De todas maneras estudiarè la solcuion por tablas dinamicas y mas adelante convierto el codigo.


Gracias!