You are on page 1of 12

report zbc001_ga .

*----------------------------------------------------------------------*
* data....: 23.05.2007 *
* objetivo: download/upload conte�do de tabelas *
*----------------------------------------------------------------------*

* tabelas sap
tables: dd02l.

* tabelas internas
data: begin of t_dd02l occurs 100,
tabname like dd02l-tabname,
end of t_dd02l.

data: t_prog(100) type c occurs 0 with header line.


data: w_prog like trdir-name.
data: v_range(30) type c.

* macros
define _apps.
clear t_prog.
concatenate &1 &2 &3 &4 into t_prog separated by space.
append t_prog.
end-of-definition.

define _app.
clear t_prog.
concatenate &1 &2 &3 &4 into t_prog.
append t_prog.
end-of-definition.

* par�metros de sele��o
selection-screen begin of block b1 with frame.
select-options: s_table for dd02l-tabname obligatory.
*parameters: p_dir like rlgrap-filename obligatory default 'c:\'.
parameters: p_dir type string.
parameters: p_dwn radiobutton group b1,
p_upd radiobutton group b1 default 'x',
p_field type char50.
select-options s_range for v_range.

selection-screen skip.
parameters: p_char as checkbox.
selection-screen end of block b1.

* initialization
initialization.

move 'tabela' to %_s_table_%_app_%-text.


move 'diret�rio' " (com barra ''\'')'
to %_p_dir_%_app_%-text.
move 'download' to %_p_dwn_%_app_%-text.
move 'upload' to %_p_upd_%_app_%-text.
move 'tabela no formato char' to %_p_char_%_app_%-text.

* at selection-screen.
at selection-screen on value-request for p_dir.
perform filemane_get.

*----------------------------------------------------------------------*
* start-of-selection *
*----------------------------------------------------------------------*
start-of-selection.
if not p_dwn is initial. " p_field is initial and s_range is initial
if ( p_field is initial and s_range is not initial ) or ( p_field is
not initial and s_range is initial ).
message i000(zcbr) with '� obrigat�rio o preenchimento dos campos'.
stop.
endif.
endif.

* selecionar dados para upload/download


perform seleciona_dados.

* tratar a nomenclatura da tabela


perform nomenclatura.

* efetuar o download/upload
perform processamento.

*----------------------------------------------------------------------*
* form : f_get_table *
* descri��o : se a op��o selecionada for 'download' monta arquivo de *
* sa�da *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form f_get_table.

if not p_char is initial.


perform get_table_char.
else.
perform get_table_stru.
endif.

endform. " f_get_table


*----------------------------------------------------------------------*
* form : f_upl_table *
* descri��o : se a op��o selecionada for 'upload' importa o arquivo *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form f_upl_table.

if not p_char is initial.


perform upl_table_char.
else.
perform upl_table_stru.
endif.

endform. " f_upl_table


*----------------------------------------------------------------------*
* form : filename_get *
* descri��o : recuperar diret�rio/nome de arquivo a ser gravado *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form filemane_get.

call method cl_gui_frontend_services=>directory_browse


exporting
* window_title =
initial_folder = 'c:'
changing
selected_folder = p_dir.

* call function 'ws_filename_get'


* exporting
* def_filename = ''
* def_path = 'c:\'
* mask = ',all files, *.*.'
* mode = 'o'
* title = 'indicar o arquivo\diret�rio'
* importing
* filename = p_dir
* exceptions
* inv_winsys = 1
* no_batch = 2
* selection_cancel = 3
* selection_error = 4
* others = 5.

endform. " filemane_get


*----------------------------------------------------------------------*
* form : seleciona_dados *
* descri��o : selecionar os dados da tabela escolhida *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form seleciona_dados.

* shift p_dir right deleting trailing space.


* if p_dir+127(1) <> '\'.
concatenate p_dir '\' into p_dir.
* endif.
* shift p_dir left deleting leading space.

select tabname
from dd02l
into table t_dd02l
where as4local = 'a'
and tabname in s_table.

endform. " seleciona_dados


*----------------------------------------------------------------------*
* form : nomenclatura *
* descri��o : consiste a nomenclatura da tabela, de forma que sejam *
* processadas apenas tabelas 'z*', 'y*' ou 'cf98*' *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form nomenclatura.

ranges r_tabname for dd02l-tabname.


r_tabname-sign = 'i'.
r_tabname-option = 'cp'.

r_tabname-low = 'z*'.
append r_tabname.

r_tabname-low = 'y*'.
append r_tabname.

*delete t_dd02l where not tabname in r_tabname.

endform. " nomenclatura


*----------------------------------------------------------------------*
* form : processamento *
* descri��o : efetua o processamento para a op��o selecionada: upload *
* ou download *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form processamento.

if not p_dwn is initial.


_apps 'report sy-repid.' '' '' ''.
_apps 'form f_get_data.' '' '' ''.
clear t_prog.
loop at t_dd02l.
_apps ' tables:' t_dd02l-tabname '.' ''.
clear t_prog.
endloop.

**********range*****************
if ( p_field is not initial and s_range is not initial ).
concatenate t_prog 'ranges: r_' p_field into t_prog.
concatenate t_prog 'for' t_dd02l-tabname into t_prog separated
by space.
concatenate t_prog '-' p_field '.' into t_prog.
append t_prog.
clear t_prog.
endif.

loop at t_dd02l.
perform f_get_table.
endloop.

_apps 'endform.' '' '' ''.

generate subroutine pool t_prog name w_prog.


if sy-subrc = 0.
perform f_get_data in program (w_prog).
endif.
elseif not p_upd is initial.
_apps 'report sy-repid.' '' '' ''.
_apps 'form f_upd_data.'
'' '' ''.
loop at t_dd02l.
perform f_upl_table.
endloop.
_apps 'endform.' '' '' ''.

generate subroutine pool t_prog name w_prog.


if sy-subrc = 0.
perform f_upd_data in program (w_prog).
endif.
endif.

endform. " processamento


*----------------------------------------------------------------------*
* form : f_get_table *
* descri��o : se a op��o selecionada for 'download' monta arquivo de *
* sa�da com os dados convertidos para o formato char. *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form get_table_char.
data: begin of t_campos occurs 0,
fieldname like dd03l-fieldname,
position like dd03l-position,
datatype like dd03l-datatype,
leng like dd03l-leng,
decimals like dd03l-decimals,
end of t_campos.

data: w_length(6) type n,


w_aux1(80) type c,
w_aux(80) type c.

* cria a tabela com a mesma estrutura da tabela sap


concatenate ' data: t_' t_dd02l-tabname into t_prog.
concatenate t_prog 'like' t_dd02l-tabname
'occurs 100 with header line.'
into t_prog separated by space.
append t_prog.
clear t_prog.

* campo a campo - em modo char.


concatenate ' data: begin of t_' t_dd02l-tabname '_c' into
t_prog.
concatenate t_prog 'occurs 100,'
into t_prog separated by space.

append t_prog.
clear t_prog.

select fieldname position


datatype leng decimals
into table t_campos
from dd03l
where tabname eq t_dd02l-tabname
order by position.

clear w_length.
loop at t_campos.
case t_campos-datatype.

when 'dec'.
w_length = t_campos-leng + 1 + t_campos-decimals.

when 'curr'.
w_length = t_campos-leng + 1 + t_campos-decimals.

when others.
w_length = t_campos-leng.

endcase.

concatenate t_campos-fieldname '(' w_length ')'


into t_prog.
condense t_prog no-gaps.
concatenate t_prog 'type c,'
into t_prog separated by space.
append t_prog.
clear t_prog.
endloop.

concatenate ' end of t_' t_dd02l-tabname '_c.' into t_prog.


append t_prog.
clear t_prog.

**************************************************************************
* teste range
**************************************************************************
if ( p_field is not initial and s_range is not initial ).

concatenate t_prog 'r_' p_field '-low' into t_prog.


concatenate t_prog '=' into t_prog separated by space.
concatenate t_prog '''' s_range-low '''.' into t_prog.
append t_prog.
clear t_prog.

concatenate t_prog 'r_' p_field '-high' into t_prog.


concatenate t_prog '=' into t_prog separated by space.
concatenate t_prog '''' s_range-high '''.' into t_prog.
append t_prog.
clear t_prog.

concatenate t_prog 'r_' p_field '-sign' into t_prog.


concatenate t_prog '=' into t_prog separated by space.
concatenate t_prog ' ''' s_range-sign '''.' into t_prog.
append t_prog.
clear t_prog.

concatenate t_prog 'r_' p_field '-option' into t_prog.


concatenate t_prog '=' into t_prog separated by space.
concatenate t_prog ' ''' s_range-option '''.' into t_prog.
append t_prog.
clear t_prog.
concatenate t_prog 'append r_' p_field '.' into t_prog.
append t_prog.
clear t_prog.

concatenate 'select * from' t_dd02l-tabname 'into table t_'


into t_prog separated by space.
concatenate t_prog t_dd02l-tabname into t_prog.
append t_prog.
clear t_prog.
concatenate t_prog 'where' p_field 'in r_'
into t_prog separated by space.
concatenate t_prog p_field '.' into t_prog.
append t_prog.
clear t_prog.
else.
************************* fim do teste de range*****************************

**********************para selecionar a tabela inteira******abaixo***********


concatenate 'select * from' t_dd02l-tabname 'into table t_'
into t_prog separated by space.
concatenate t_prog t_dd02l-tabname into t_prog.
concatenate t_prog p_field '.' into t_prog.
append t_prog.
clear t_prog.
endif.

* mover de uma tabela para outra, convertendo o formato


concatenate 't_' t_dd02l-tabname '.' into w_aux.
_apps 'loop at' w_aux '' ''.

concatenate 't_' t_dd02l-tabname into w_aux.


concatenate 't_' t_dd02l-tabname '_c.' into w_aux1.
_apps 'move-corresponding' w_aux 'to' w_aux1.
_apps 'append' w_aux1 '' '' .
_apps 'clear' w_aux1 '' '' .
_apps 'endloop.' '' '' ''.

_apps ' call function ''ws_download'' ' '' '' ''.


_apps ' exporting' '' '' ''.

clear t_prog.
concatenate 'filename' '=' into t_prog separated by space.
concatenate t_prog ' ''' p_dir t_dd02l-tabname '.tab'''
into t_prog.
condense t_prog.
append t_prog.

_apps ' filetype = ''asc''' '' '' ''.


_apps ' tables' '' '' ''.
clear t_prog.
concatenate ' data_tab = t_' t_dd02l-tabname '_c.' into
t_prog.
append t_prog.

endform. " get_table_char


*----------------------------------------------------------------------*
* form : f_get_table *
* descri��o : se a op��o selecionada for 'download' monta arquivo de *
* sa�da utilizando a pr�pia estrutura da tabela *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form get_table_stru.

concatenate ' data: t_' t_dd02l-tabname into t_prog.


concatenate t_prog 'like' t_dd02l-tabname
'occurs 100 with header line.'
into t_prog separated by space.
append t_prog.
clear t_prog.

**************************************************************************
* teste range
**************************************************************************
if ( p_field is not initial and s_range is not initial ).
concatenate t_prog 'r_' p_field '-low' into t_prog.
concatenate t_prog '=' into t_prog separated by space.
concatenate t_prog '''' s_range-low '''.' into t_prog.
append t_prog.
clear t_prog.

concatenate t_prog 'r_' p_field '-high' into t_prog.


concatenate t_prog '=' into t_prog separated by space.
concatenate t_prog '''' s_range-high '''.' into t_prog.
append t_prog.
clear t_prog.

concatenate t_prog 'r_' p_field '-sign' into t_prog.


concatenate t_prog '=' into t_prog separated by space.
concatenate t_prog ' ''' s_range-sign '''.' into t_prog.
append t_prog.
clear t_prog.

concatenate t_prog 'r_' p_field '-option' into t_prog.


concatenate t_prog '=' into t_prog separated by space.
concatenate t_prog ' ''' s_range-option '''.' into t_prog.
append t_prog.
clear t_prog.

concatenate t_prog 'append r_' p_field '.' into t_prog.


append t_prog.
clear t_prog.

concatenate 'select * from' t_dd02l-tabname 'into table t_'


into t_prog separated by space.
concatenate t_prog t_dd02l-tabname into t_prog.
append t_prog.
clear t_prog.
concatenate t_prog 'where' p_field 'in r_'
into t_prog separated by space.
concatenate t_prog p_field '.' into t_prog.
append t_prog.
clear t_prog.

else.

concatenate 'select * from' t_dd02l-tabname 'into table t_'


into t_prog separated by space.
concatenate t_prog t_dd02l-tabname '.' into t_prog. "***
append t_prog.
clear t_prog.
endif.

_apps ' call function ''ws_download'' ' '' '' ''.


_apps ' exporting' '' '' ''.

clear t_prog.
concatenate 'filename' '=' into t_prog separated by space.
concatenate t_prog ' ''' p_dir t_dd02l-tabname '.tab'''
into t_prog.
condense t_prog.
append t_prog.

_apps ' filetype = ''asc''' '' '' ''.


_apps ' tables' '' '' ''.
clear t_prog.
concatenate ' data_tab = t_' t_dd02l-tabname '.' into t_prog.
append t_prog.

endform. " get_table_stru


*----------------------------------------------------------------------*
* form : f_upl_table *
* descri��o : se a op��o selecionada for 'upload' importa o arquivo *
* com os dados gerados em formato char. *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form upl_table_char.
data: begin of t_campos occurs 0,
fieldname like dd03l-fieldname,
position like dd03l-position,
datatype like dd03l-datatype,
leng like dd03l-leng,
decimals like dd03l-decimals,
end of t_campos.

data: w_length(6) type n,


w_aux1(80) type c,
w_aux(80) type c.

_apps ' tables:' t_dd02l-tabname '.' ''.


clear t_prog.
concatenate ' data: t_' t_dd02l-tabname into t_prog.
concatenate t_prog 'like' t_dd02l-tabname
'occurs 100 with header line.'
into t_prog separated by space.
append t_prog.
* campo a campo - em modo char.
concatenate ' data: begin of t_' t_dd02l-tabname '_c' into
t_prog.
concatenate t_prog 'occurs 100,'
into t_prog separated by space.

append t_prog.
clear t_prog.

select fieldname position


datatype leng decimals
into table t_campos
from dd03l
where tabname eq t_dd02l-tabname
order by position.

clear w_length.
loop at t_campos.

case t_campos-datatype.

when 'dec'.
w_length = t_campos-leng + 1 + t_campos-decimals.

when 'curr'.
w_length = t_campos-leng + 1 + t_campos-decimals.

when others.
w_length = t_campos-leng.

endcase.

concatenate t_campos-fieldname '(' w_length ')'


into t_prog.
condense t_prog no-gaps.
concatenate t_prog 'type c,'
into t_prog separated by space.
append t_prog.
clear t_prog.
endloop.

concatenate ' end of t_' t_dd02l-tabname '_c.' into t_prog.


append t_prog.
clear t_prog.

_apps ' call function ''ws_upload'' ' '' '' ''.


* _apps ' call function ''gui_upload'' ' '' '' ''.
_apps ' exporting' '' '' ''.

clear t_prog.
concatenate 'filename' '=' into t_prog separated by space.

concatenate t_prog ' ''' p_dir t_dd02l-tabname '.tab'''


into t_prog.
append t_prog.

_apps ' filetype = ''asc''' '' '' ''.


_apps ' tables' '' '' ''.
clear t_prog.

concatenate ' data_tab = t_' t_dd02l-tabname '_c.' into


t_prog.
append t_prog.
_apps ' if sy-subrc = 0.' '' '' ''.
clear t_prog.

_app ' loop at t_' t_dd02l-tabname '_c.' ''.


clear t_prog.

* mover de uma tabela para outra, convertendo o formato


loop at t_campos.
clear: w_aux, w_aux1.
concatenate 't_' t_dd02l-tabname '_c' into w_aux.
concatenate 't_' t_dd02l-tabname ' ' into w_aux1.

case t_campos-datatype.

when 'dec'.
concatenate w_aux '-' t_campos-fieldname into w_aux.
concatenate w_aux1 '-' t_campos-fieldname into w_aux1.
_apps w_aux1 '=' w_aux '.'.

when 'curr'.
concatenate w_aux '-' t_campos-fieldname into w_aux.
concatenate w_aux1 '-' t_campos-fieldname into w_aux1.
_apps w_aux1 '=' w_aux '.'.

when others.
concatenate w_aux '-' t_campos-fieldname into w_aux.
concatenate w_aux1 '-' t_campos-fieldname '.' into
w_aux1.
_apps 'move' w_aux 'to' w_aux1.

endcase.

endloop.

append t_prog.
clear t_prog.

concatenate 't_' t_dd02l-tabname '.' into t_prog.


concatenate ' insert ' t_dd02l-tabname ' from ' t_prog
into t_prog separated by space.
append t_prog.
clear t_prog.

_app ' endloop.' '' '' ''.


_apps ' endif.' '' '' ''..

endform. " upl_table_char


*----------------------------------------------------------------------*
* form : f_upl_table *
* descri��o : se a op��o selecionada for 'upload' importa o arquivo *
* com os utilizando a estrutura da tabela *
* entrada : n�o h�. *
* sa�da : n�o h�. *
*----------------------------------------------------------------------*
form upl_table_stru.

_apps ' tables:' t_dd02l-tabname '.' ''.


clear t_prog.
concatenate ' data: t_' t_dd02l-tabname into t_prog.
concatenate t_prog 'like' t_dd02l-tabname
'occurs 100 with header line.'
into t_prog separated by space.
append t_prog.

_apps ' call function ''ws_upload'' ' '' '' ''.


* _apps ' call function ''gui_upload'' ' '' '' ''.
_apps ' exporting' '' '' ''.

clear t_prog.
concatenate 'filename' '=' into t_prog separated by space.
concatenate t_prog ' ''' p_dir t_dd02l-tabname '.tab'''
into t_prog.
append t_prog.

_apps ' filetype = ''asc''' '' '' ''.


_apps ' tables' '' '' ''.
clear t_prog.
concatenate ' data_tab = t_' t_dd02l-tabname '.' into t_prog.
append t_prog.

_apps ' if sy-subrc = 0.' '' '' ''.


clear t_prog.
_app ' loop at t_' t_dd02l-tabname '.' ''.
clear t_prog.
concatenate ' insert ' t_dd02l-tabname ' from t_'
into t_prog separated by space.
concatenate t_prog t_dd02l-tabname '.' into t_prog.
append t_prog.
_app ' endloop.' '' '' ''.
_apps ' endif.' '' '' ''..

endform. " upl_table_stru

You might also like