PDA

Ver la Versión Completa : Transponer tabla AUSP usando field-symbols


andresf02
22/12/10, 20:25:15
Buenos tardes.

Quiero aprender a usar FILED_SYMBOLS y tablas dinamicas en ABAP. La verdad no soy experto en ABAP y mucho menos conozco sobre los terminos que acabo de mencionar.

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 la tabla AUSP (transaccion CL30n)

|-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---|


Como pueden ver, esta no es una transposicion de filas x columnas normal, sino que los valores de la columna CARACTERISTICA en la tabla original, van a ser los nombres de las columnas en la tabla transpuesta.


Gracias a este foro, me dieron una solucion muy buena que implemente al 100% y es la siguiente:


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.


Pero ahora quiero aprender a hacerlo con tablas dinamicas ya que ahora me enfrento a un objeto que tiene 101 caracteristicas, y si lo hago con la solucion anterior, el CASE tendria que tener 101 WHENs.


Estuve viendo ejemplos que me recomendaron pero no he logrado entenderlos al 100% ni mucho menos adaptarlos a mi codigo.



Por favor si alguien pudiera ayudarme con un ejemplo bien detallado (ojala como el codigo de mi solucion). Recuerden que la transposicion no se hace con todas las filas y columnas , por eso utilizé el "AT NEW OBJEK".





Mil Gracias!

Garces
23/12/10, 15:21:27
Tu solución usando field-symbols sería la siguiente:


FIELD-SYMBOLS: <fs> TYPE (tipo de dato de las características).
DATA: lv_campo TYPE string.
DATA: lv_contador TYPE n LENGTH 2.

SORT ti BY objeto. " Muy importante

LOOP AT ti INTO wa_ti.

* Obtener el número de característica
lv_contador = wa_ti-caracteristica+12(2).

* Armar el nombre del campo al que pertenece
CONCATENATE 'ti_alv-caracterist_' lv_contador INTO lv_campo.

* Asignar el nombre del campo al field symbol
ASSIGN (lv_campo) TO <fs>.

* Asignar el valor correspondiente al field symbol
<fs> = wa_ti-valor.

* Realizo el mismo append que tenías...
AT END OF objeto.
APPEND ti_alv.
CLEAR ti_alv.
ENDAT.

ENDLOOP.