MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Agregar columna a tabla dinámica. (foro/showthread.php?t=76943)

goyleo 27/03/17 20:13:54

Agregar columna a tabla dinámica.
 
Hola! ¿Como están?.

Hice un programa que baja el contenido de las tablas dinamicamente a una archivo en el servidor, funciona bien.

El probrlema que tengo es que se requiere agregar un campo adelante de todos los archivos (el campo sy-sysid), como las estrucutras y tablas se crean dinamicamente no se como agregar el dato.

En el siguiente perform bajo la tabla al servidor.

*&---------------------------------------------------------------------*
*& Form F_BAJAR_ARCHIVO_SERVIDOR
*&---------------------------------------------------------------------*
FORM f_bajar_archivo_servidor
CHANGING pve_fs_table TYPE STANDARD TABLE "-----> Tabla generica con datos
pvi_le_zuinfotabla TYPE tye_zuinfotabla. "-----> En pvi_le_zuinfotabla-ztabname figura el nombre de la tabla.

DATA: l_filename TYPE string,
lv_string TYPE c LENGTH 70,
le_estructura TYPE REF TO data.

FIELD-SYMBOLS <fs_estructura> TYPE ANY.

*Se crea tabla dinámica.
CREATE DATA le_estructura TYPE (pvi_le_zuinfotabla-ztabname).
ASSIGN le_estructura->* TO <fs_estructura>.

CONCATENATE pvi_le_zuinfotabla-zpath_server
pvi_le_zuinfotabla-zsysid
'_' pvi_le_zuinfotabla-zmandt
'_' pvi_le_zuinfotabla-ztabname
'.TXT' INTO l_filename.

OPEN DATASET l_filename FOR OUTPUT IN BINARY MODE.
IF sy-subrc = 0.
LOOP AT pve_fs_table INTO <fs_estructura>.
TRANSFER <fs_estructura> TO l_filename.
ENDLOOP.

CLOSE DATASET l_filename.

ENDIF.

goyleo 28/03/17 19:13:41

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


Husos Horarios son GMT. La hora en este momento es 00:14:57.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web