Problema para crear una variable dinamicamente

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • cdavidml
    Junior Member
    • may
    • 3

    #1

    Problema para crear una variable dinamicamente

    Hola comunidad buen día, tengo el siguiente caso:

    Necesito crear una variable de manera dinamica conforme el contenido de otra variable.

    *DINAMICAMENTE CONCATENO EN UNA VARIABLE LA TABLA Y EL CAMPO QUE NECESITO.
    *PROBLEMA... COMO GENERAR LA VARIABLE DE TIPO "EL CONTENIDO DE VL_FIELD"

    CONCATENATE STRUCTURE-TABLENAME '-' STRUCTURE-FIELDNAME INTO VL_FIELD.
    CONDENSE VL_FIELD NO-GAPS.
    VL_VARIABLE TYPE RANGE OF "EL CONTENIDO DE VL_FIELD".



    Ojala y puedan ayudarme.
    Saludos.

    David.
  • vanesamacri
    Senior Member
    • jun
    • 146

    #2
    Buenas tardes, David.

    Chequeate el siguiente ejemplo:
    Código:
    REPORT YPRUEBA.
    
    DATA: variable_generica TYPE REF TO data,
          tipo TYPE string VALUE 'T511P-MOLGA'.  " --> Es un CHAR2.
    
    FIELD-SYMBOLS <variable> TYPE ANY.
    
    CREATE DATA variable_generica TYPE (tipo).
    ASSIGN variable_generica->* TO <variable>.
    
    IF <variable> IS ASSIGNED.
    
    *** Se le pasa un valor con mayor longitud, para comprobar que se ha creado con el
    *** tipo del valor contenido en la variable TIPO (CHAR longitud 2).
      MOVE '123456' TO <variable>.
      WRITE <variable>.
    
    ENDIF.
    Avisame si algo no se entiende.
    Un saludo.

    Comentario

    • cdavidml
      Junior Member
      • may
      • 3

      #3
      resuelto

      Hola que tal, lo pude resolver con lo siguiente, y me genera los SO que necesito dinamicamente.

      * Reference variables
      DATA: go_struc TYPE REF TO cl_abap_structdescr,
      go_table TYPE REF TO cl_abap_tabledescr,
      dref TYPE REF TO data.

      DATA: gv_field TYPE fieldname VALUE 'BUKRS', "Dynamic Range Field
      gt_comp TYPE cl_abap_structdescr=>component_table,
      gs_comp TYPE cl_abap_structdescr=>component.

      FIELD-SYMBOLS <gt_range> TYPE STANDARD TABLE.

      gs_comp-name = 'SIGN'.
      gs_comp-type ?= cl_abap_elemdescr=>describe_by_name('CHAR1').
      APPEND gs_comp TO gt_comp. CLEAR gs_comp.

      gs_comp-name = 'OPTION'.
      gs_comp-type ?= cl_abap_elemdescr=>describe_by_name('CHAR2').
      APPEND gs_comp TO gt_comp. CLEAR gs_comp.

      gs_comp-name = 'LOW'.
      gs_comp-type ?= cl_abap_elemdescr=>describe_by_name( gv_field ).
      APPEND gs_comp TO gt_comp. CLEAR gs_comp.

      gs_comp-name = 'HIGH'.
      gs_comp-type ?= cl_abap_elemdescr=>describe_by_name( gv_field ).
      APPEND gs_comp TO gt_comp. CLEAR gs_comp.

      TRY.
      go_struc = cl_abap_structdescr=>create( gt_comp ).
      go_table = cl_abap_tabledescr=>create( go_struc ).
      CATCH: cx_sy_struct_creation,
      cx_sy_table_creation.
      ENDTRY.

      CREATE DATA dref TYPE HANDLE go_table. "Create Data Reference
      ASSIGN dref->* TO <gt_range>. "Dereferencing the data reference

      TRY .
      SELECT COUNT(*) FROM t001 WHERE bukrs IN <gt_range>.
      WRITE: / sy-dbcnt.
      CATCH cx_sy_open_sql_error.

      ENDTRY.

      los encontré en scn de sap, en un tread de Suhas Saha.

      Editado por última vez por cdavidml; 28/02/2014, 18:02:56.

      Comentario

      Trabajando...