Ver Mensaje Individual
  #2  
Viejo 28/03/17, 19:13:41
goyleo goyleo is offline
Senior Member
 
Fecha de Ingreso: sep 2007
Mensajes: 102
Ya lo resolví.

Cualqueir cosa que quieran mas info, por inbox.

Para el que quiera le dejo parte del codigo donde se realiza la generación del archivo.

Saludos.


DATA: le_zuinfotabla TYPE tye_zuinfotabla,
lt_generic_table TYPE REF TO data,
lv_tabix TYPE sy-tabix,
lt_dd03l TYPE tyt_dd03l,
lt_dd04t TYPE tyt_dd04t.

* Se crea dinamicamente la tabla
CREATE DATA lt_generic_table
TYPE STANDARD TABLE OF (le_zuinfotabla-ztabname). "--> Tabla generica
ASSIGN lt_generic_table->* TO <fs_table>.


PERFORM f_bajar_archivo_servidor CHANGING lt_dd03l
<fs_table>
le_zuinfotabla.



*&---------------------------------------------------------------------*
*& Form F_BAJAR_ARCHIVO_SERVIDOR
*&---------------------------------------------------------------------*
FORM f_bajar_archivo_servidor
CHANGING pve_gt_dd03l TYPE tyt_dd03l
pve_fs_table TYPE STANDARD TABLE
pvi_le_zuinfotabla TYPE tye_zuinfotabla.

*&---------------------------------------------------------------------*
*& Declaración de datos.
*&---------------------------------------------------------------------*

* Datos para el proceso.
DATA: l_filename TYPE string,
lv_string TYPE c LENGTH 70,

* Estrucutra del tipo pve_fs_table que viene por parametro.
le_estructura TYPE REF TO data.
FIELD-SYMBOLS <fs_estructura> TYPE ANY.

* Estrucutra que contiene los campos a declarar.
DATA: lt_comp_tab TYPE cl_abap_structdescr=>component_table,

* Estructura Dinámica.
le_dref TYPE REF TO data,
le_struct_type TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS: <fs_struc> TYPE ANY.

* Tabla Dinámica
DATA: lt_tabla TYPE REF TO data,
lt_table_type TYPE REF TO cl_abap_tabledescr.
FIELD-SYMBOLS: <fs_tabla> TYPE STANDARD TABLE.

* Campo Sysid
FIELD-SYMBOLS: <fs_comp> TYPE ANY.

*&---------------------------------------------------------------------*
*& Proceso de bajada de tabla dinámico.
*&---------------------------------------------------------------------*

* Asígnación dinámica de la estructura del diccionario.
CREATE DATA le_estructura TYPE (pvi_le_zuinfotabla-ztabname).
ASSIGN le_estructura->* TO <fs_estructura>.

PERFORM f_obtener_campos_estructura CHANGING pve_gt_dd03l
lt_comp_tab.

* Se crea una estrucutra dinámica.
le_struct_type = cl_abap_structdescr=>create( lt_comp_tab ).
CREATE DATA le_dref TYPE HANDLE le_struct_type.
ASSIGN le_dref->* TO <fs_struc>.

* Se crea la tabla dinámica.
lt_table_type = cl_abap_tabledescr=>create(
p_line_type = le_struct_type
p_table_kind = cl_abap_tabledescr=>tablekind_std ).
CREATE DATA lt_tabla TYPE HANDLE lt_table_type .
ASSIGN lt_tabla->* TO <fs_tabla>.

* Se recorren los registros de la tabla generica.
LOOP AT pve_fs_table INTO <fs_estructura>.
ASSIGN COMPONENT 'ZSYSID' OF STRUCTURE <fs_struc> TO <fs_comp>.
<fs_comp> = pvi_le_zuinfotabla-zsysid.
MOVE-CORRESPONDING <fs_estructura> TO <fs_struc>.
APPEND <fs_struc> TO <fs_tabla>.
ENDLOOP.

* Ruta de bajada.
CONCATENATE pvi_le_zuinfotabla-zpath_server
pvi_le_zuinfotabla-zsysid
'_' pvi_le_zuinfotabla-zmandt
'_' pvi_le_zuinfotabla-ztabname
'.TXT' INTO l_filename.

* Bajada de archivo.
OPEN DATASET l_filename FOR OUTPUT IN BINARY MODE.
IF sy-subrc = 0.
LOOP AT <fs_tabla> INTO <fs_struc>.
TRANSFER <fs_struc> TO l_filename.
ENDLOOP.

CLOSE DATASET l_filename.

ELSE.
CONCATENATE text-004 l_filename
INTO pvi_le_zuinfotabla-message
SEPARATED BY space.
pvi_le_zuinfotabla-id = c_error.
ENDIF.

ENDFORM. "F_BAJAR_ARCHIVO_SERVIDOR



*&---------------------------------------------------------------------*
*& Form F_OBTENER_CAMPOS_ESTRUCTURA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_PVE_GT_DD03L text
* <--P_LT_COMP_TAB text
*----------------------------------------------------------------------*
FORM f_obtener_campos_estructura
CHANGING pve_gt_dd03l TYPE tyt_dd03l
pve_comp_tab TYPE cl_abap_structdescr=>component_table.

DATA: le_comp LIKE LINE OF pve_comp_tab,
le_dd03l TYPE dd03l,
le_aux TYPE dd03l,
lv_length TYPE i,
lv_decimals TYPE i.

DELETE pve_gt_dd03l WHERE fieldname = '.INCLUDE'.

* Se recorren los campos de la tabla.
SORT pve_gt_dd03l BY position.
LOOP AT pve_gt_dd03l INTO le_aux.

le_dd03l = le_aux.

AT FIRST.
le_comp-name = 'ZSYSID'.
le_comp-type = cl_abap_elemdescr=>get_c( 8 ).
APPEND le_comp TO pve_comp_tab.
ENDAT.

* Nombre del campo.
le_comp-name = le_dd03l-fieldname.

CASE le_dd03l-inttype.
WHEN 'I'.
le_comp-type = cl_abap_elemdescr=>get_i( ).
WHEN 'F'.
le_comp-type = cl_abap_elemdescr=>get_f( ).
WHEN 'D'.
le_comp-type = cl_abap_elemdescr=>get_d( ).
WHEN 'T'.
le_comp-type = cl_abap_elemdescr=>get_t( ).
WHEN 'C'.
lv_length = le_dd03l-intlen.
le_comp-type = cl_abap_elemdescr=>get_c( lv_length ).
WHEN 'N'.
lv_length = le_dd03l-intlen.
le_comp-type = cl_abap_elemdescr=>get_n( lv_length ).
WHEN 'X'.
lv_length = le_dd03l-intlen.
le_comp-type = cl_abap_elemdescr=>get_x( lv_length ).
WHEN 'P'.
lv_length = le_dd03l-intlen.
lv_decimals = le_dd03l-decimals.
le_comp-type = cl_abap_elemdescr=>get_p( p_length = lv_length
p_decimals = lv_decimals ).
ENDCASE.

* Se guardan los campos de la estructura.
APPEND le_comp TO pve_comp_tab.

ENDLOOP.

ENDFORM. " F_OBTENER_CAMPOS_ESTRUCTURA
Responder Con Cita