Transponer tabla AUSP usando field-symbols

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • andresf02
    Senior Member
    • nov
    • 190

    #1

    Transponer tabla AUSP usando field-symbols

    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:

    Código:
    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
    Senior Member
    • ago
    • 321

    #2
    Tu solución usando field-symbols sería la siguiente:

    Código:
    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.
    Editado por última vez por Garces; 23/12/2010, 15:25:11.
    Miguel Ángel Garcés Ramírez

    Comentario

    Trabajando...