Catálogo Dinámico para ALV

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • anyita18
    Member
    • jun
    • 52

    #1

    Catálogo Dinámico para ALV

    Hola expertos.
    Mi caso es que necesito mostrar un log de errores en un ALV pero no van a ser siempre las mismas columnas. El usuario va a seleccionar una tabla con un radiobutton y dependiendo del nombre de la tabla debo mostrar columnas con información diferente del procesamiento de los datos.
    Me han dicho que con field symbls se puede hacer pero la verdad no tengo mucha experiencia al respecto y no se como hacerlo.
    Agradecería su ayuda enormemente.
    Sl2.
    Anyelini
  • Melandry
    Senior Member
    • ene
    • 110

    #2
    Hola.
    Un opción es que ocultes los campos que no te marque el usuario si no son muchos.

    Aquí te pongo como crear tu tabla dinámicamente.
    Código:
    FORM CREATE_DYNAMIC_TABLE .
    
      DATA:   L_COMPONENT_WA       TYPE ABAP_COMPONENTDESCR,
                 L_COMPONENT_TAB       TYPE ABAP_COMPONENT_TAB,
                 L_STRUCTDESCR_OREF   TYPE REF TO CL_ABAP_STRUCTDESCR,
                 L_TABLEDESCR_OREF     TYPE REF TO CL_ABAP_TABLEDESCR,
                 L_STRUCTDESCR_DREF   TYPE REF TO DATA,
                 L_TABLEDESCR_DREF     TYPE REF TO DATA.
    
      FIELD-SYMBOLS: <RESULT_TAB> TYPE STANDARD TABLE,
                              <RESULT_WA>  TYPE ANY.
    
      FIELD-SYMBOLS: <L_FIELDCAT_WA>   TYPE SLIS_FIELDCAT_ALV,
                             <L_COMPONENTS_WA> TYPE ABAP_COMPDESCR.
    
      "1-CONFIGURAR LOS CAMPOS DESEADOS
      L_COMPONENT_WA-NAME = 'VBELN'.
      L_COMPONENT_WA-TYPE
        ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( 'VBAP-VBELN' ).
      APPEND L_COMPONENT_WA TO L_COMPONENT_TAB.
      L_COMPONENT_WA-NAME = 'POSNR'.
      L_COMPONENT_WA-TYPE
        ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_NAME( 'VBAP-POSNR' ).
      APPEND L_COMPONENT_WA TO L_COMPONENT_TAB.
    
    
      "Crear los objetos dinámicos.
      IF NOT L_COMPONENT_TAB IS INITIAL.
    * 3º) Creamos el tipo de estructura de acuerdo con sus componentes.
        L_STRUCTDESCR_OREF =
          CL_ABAP_STRUCTDESCR=>CREATE( L_COMPONENT_TAB ).
    * 4º) Creamos el tipo de tabla de acuerdo con el tipo de estructura.
        L_TABLEDESCR_OREF =
          CL_ABAP_TABLEDESCR=>CREATE( P_LINE_TYPE = L_STRUCTDESCR_OREF ).
    * 5º) Creamos la estructura.
        CREATE DATA L_STRUCTDESCR_DREF TYPE HANDLE L_STRUCTDESCR_OREF.
        L_STRUCTDESCR_DREF = L_STRUCTDESCR_DREF.
    * 6º) Creamos la tabla.
        CREATE DATA L_TABLEDESCR_DREF TYPE HANDLE L_TABLEDESCR_OREF.
        L_TABLEDESCR_DREF = L_TABLEDESCR_DREF.
      ENDIF.
    
      "Asignamos la estructura a nuestros field-symbol y ya podemos
      "trabajar con ella
      ASSIGN L_STRUCTDESCR_DREF->* TO <RESULT_WA>.
      ASSIGN L_TABLEDESCR_DREF->*  TO <RESULT_TAB>.
    
    
    
    ENDFORM.                    " CREATE_DYNAMIC_TABLE
    Para configurar los componentes de la estructura te será util tener una tabla interna previa con el campo y tipo (como tu usuario te ha marcado la tabla ya lo sabrás) y tambien te será útil tenerlo para cuando vayas a rellenar tu tabla.

    Espero te sirva.
    Editado por última vez por Melandry; 24/01/2012, 12:38:53.

    Comentario

    • anyita18
      Member
      • jun
      • 52

      #3
      Hola....lo probé y me sirvió bien. Sólo que hay que tener mucho cuidado con cómo se usan los fs pero todo bien.
      Gracias.
      Anyelini

      Comentario

      Trabajando...