Este codigo abaixo tem por finalidade gerar tabelas internas automaticamente.
Não cheguei a testar, mas é bem provável que funcione:
*&---------------------------------------------------------------------*
*& Report ZGERA_TABELA_INTERNA *
*& Versões testadas: 4.6 e 4.7! *
*&---------------------------------------------------------------------*
REPORT zcompontes_dinamicos.
*&---------------------------------------------------------------------*
*ANTES DE EXECUTAR O PROGRAMA SIGA OS PASSOS ABAIXO:
*1- Copiar o status gui STANDARD_FULLSCREEN do grupo de funções
*SLVC_FULLSCREEN com o nome de ZAIRES
*2-Colocar os nomes dos campos da tela de seleção e mensagens!
*P_BW ?...
*P_NOME Nome da tabela interna
*P_NP ?...
*P_TABINT Nome da tabela
*P01 Via notepad! 12 50
*P02 Via browser (explorer)! 12 50
*P03 Modo de criação: 16 20
*T01 Componentes 11 50
*T02 Gambiarra plus! 15 50
*3-Colocar um botão no status-gui com o nome AIRES1
*Ativar tudo e executar!
*Para usar é simples, execute o programa passando o nome da tabela da
*qual se quer a tabela interna, o nome da tabela interna e a opção de
*visualização (pelo notepad ou browser).
*Será gerado um ALV com os campos da tabela da tela de seleção,
*selecione as linhas que irão para a tabela interna e clique no botão
*que foi habilitado no status-gui, será dado a opção de três tipo de
*geração do fonte da tabela interna, uma opção simples, outra com a
*descrição dos campos e outra com a descriçaõ dos campos, tamanho e
*tipo do campo.
*A tabela interna será gerada e exibida via notepad ou browser, se
*der algum erro verifique o código fonte!
*Esse fonte foi testado e funcionou nas versões 4.6C e 4.7!
*&---------------------------------------------------------------------*
*BEFORE EXECUTING THE PROGRAM IT FOLLOWS THE STEPS BELOW:
*1- To copy status-GUI STANDARD_FULLSCREEN of the group of functions
*SLVC_FULLSCREEN with the ZAIRES name
*2-To place the names of the fields of the selection screen
*and messages!
*P_BW ?...
*P_NOME Name of internal table
*P_NP ?...
*P_TABINT Nome of table
*P01 By notepad! 12 50
*P02 By browser (explorer)! 12 50
*P03 Way of creation: 16 20
*T01 Components 11 50
*T02 Gambiarra plus! 15 50
*3-To place a button in the status-GUI with name AIRES1
*To activate everything and to execute!
*To use it is simple, it executes the program passing the array name
*of which if it wants the internal table, the internal array name and
*the option of visualization (for notepad or to browser) .
*Será gerado um ALV com os campos da tabela da tela de seleção,
*selecione as linhas que irão para a tabela interna e clique no botão
*que foi habilitado no status-gui, será dado a opção de três tipo de
*geração do fonte da tabela interna, uma opção simples, outra com a
*descrição dos campos e outra com a descriçaõ dos campos, tamanho e
*tipo do campo.
*The internal table will be generated and shown way notepad or to
*browser, if to give some error verifies the code source!
*This source was tested and functioned in the versions 4.6C e 4.7!
*Any thing is alone to cry out in the mail andremd@gmail.com
*&---------------------------------------------------------------------*
*Tabelas
*&---------------------------------------------------------------------*
TABLES: dd04t, "DD-R/3: textos elementos dados
dd03l, "Campos tabela
dd02l, "Tabelas SAP
dd02t, "DD-R/3: textos de tabelas SAP
dd07t. "DD: textos p/valores fixos dom.(depend.idioma)
*&---------------------------------------------------------------------*
* TYPE-POOLS
*&---------------------------------------------------------------------*
TYPE-POOLS: slis, "Tipos globais para ALV
sydes.
*&---------------------------------------------------------------------*
* Tabelas Internas
*&---------------------------------------------------------------------*
DATA: BEGIN OF ti_tab OCCURS 0,
tabname LIKE dd03l-tabname,
fieldname LIKE dd03l-fieldname,
keyflag LIKE dd03l-keyflag,
rollname LIKE dd03l-rollname,
position LIKE dd03l-position,
inttype LIKE dd03l-inttype,
intlen LIKE dd03l-intlen,
scrtext_s LIKE dd04t-scrtext_s,
scrtext_m LIKE dd04t-scrtext_m,
scrtext_l LIKE dd04t-scrtext_l,
tabclass LIKE dd02l-tabclass,
nome LIKE dd02t-ddtext,
ddtext LIKE dd07t-ddtext,
mark,
ordem(3) TYPE n.
DATA: END OF ti_tab.
DATA: BEGIN OF ti_tab2 OCCURS 0.
INCLUDE STRUCTURE ti_tab.
DATA: alter(3),
campnou(16).
DATA: END OF ti_tab2.
DATA: BEGIN OF ti_down OCCURS 0,
linha(72).
DATA: END OF ti_down.
*ALV
DATA:
v_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
ti_listhead TYPE slis_t_listheader,
ti_listhead1 TYPE slis_listheader,
ti_list_header TYPE slis_t_listheader,
ti_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
ti_sort TYPE slis_sortinfo_alv OCCURS 0 WITH HEADER LINE,
wc_repid LIKE sy-repid,
wc_layout TYPE slis_layout_alv,
gt_events TYPE slis_t_event,
g_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE',
gt_list_top_of_page TYPE slis_t_listheader.
*&---------------------------------------------------------------------*
*Variáveis
*&---------------------------------------------------------------------*
DATA: v_info1(50),
v_data(10),
v_hora(10),
v_erro(50),
v_linha(10),
v_flinha(34),
v_cabec(30),
v_nome(60),
v_caminho LIKE rlgrap-filename,
v_url(250) TYPE c,
v_resp,
v_fun(2) TYPE c,
v_cont(3) TYPE n,
v_cont2(3) TYPE n,
v_cont3(3) TYPE n,
v_ult LIKE sy-tabix, "No. linhas da tabela
v_linhas(10) TYPE n. "No. linhas da tabela
*&---------------------------------------------------------------------*
*Constants
*&---------------------------------------------------------------------*
CONSTANTS: c_h VALUE 'H',
c_rele(50) VALUE 'Gerador de componentes dinâmicos!',
c_exec(15) VALUE 'Executado por:',
c_dpt(15) VALUE 'Data e hora:',
c_ntab(23) VALUE 'Nome da tabela:',
c_ttab(23) VALUE 'Tipo de tabela:',
c_linc(23) VALUE 'Qtd campos:',
c_data(5) VALUE 'DATA:',
c_tipo(5) VALUE 'Tipo:',
c_tipo2(14) VALUE 'Tipo do campo:',
c_comp(8) VALUE '#Compr.:',
c_comp2(17) VALUE '#Compr. do campo:',
c_desc(8) VALUE '#Descr.:',
c_like(4) VALUE 'LIKE',
c_begin(10) VALUE 'BEGIN OF',
c_end(8) VALUE 'END OF',
c_ponto VALUE '.',
c_velha VALUE '#',
c_aster VALUE '*',
c_aspas VALUE '"',
c_traco VALUE '-',
c_virgula VALUE ',',
c_3velha(3) VALUE '###',
c_mentor(72) VALUE
'*†By Gambi Plus®† - Sugestões enviar à andremd@gmail.com!!!',
c_occurs(10) VALUE 'OCCURS 0,',
c_x VALUE 'X',
c_s VALUE 'S'.
*&---------------------------------------------------------------------*
*Tela de seleção
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK a1 WITH FRAME TITLE text-t02.
*Nome da tabela
PARAMETERS: p_tabint LIKE dd02l-tabname OBLIGATORY.
*Noma da tabela interna
PARAMETERS: p_nome(30) OBLIGATORY.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN COMMENT 1(20) text-p03.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_np RADIOBUTTON GROUP visi DEFAULT 'X' .
SELECTION-SCREEN COMMENT 6(60) text-p01 FOR FIELD p_np.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS: p_bw RADIOBUTTON GROUP visi.
SELECTION-SCREEN COMMENT 6(60) text-p02 FOR FIELD p_bw.
SELECTION-SCREEN END OF LINE.
*SELECTION-SCREEN SKIP.
*SELECTION-SCREEN SKIP.
*SELECTION-SCREEN PUSHBUTTON 10(25) text-p04
* USER-COMMAND US01.
*SELECTION-SCREEN COMMENT 1(50) text-p05.
SELECTION-SCREEN END OF BLOCK a1.
*&---------------------------------------------------------------------*
*Initialization
*&---------------------------------------------------------------------*
INITIALIZATION.
*&---------------------------------------------------------------------*
*Start-of-selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Aguarde... Programa em processamento.'.
*Seleção da tabela!!!
SELECT a~tabname a~fieldname a~keyflag
a~rollname a~position a~inttype
a~intlen b~scrtext_s b~scrtext_m
b~scrtext_l c~tabclass n~ddtext
e~ddtext
INTO TABLE ti_tab
FROM dd03l AS a
INNER JOIN dd04t AS b
ON a~rollname = b~rollname
INNER JOIN dd02l AS c
ON a~tabname = c~tabname
INNER JOIN dd02t AS n
ON c~tabname = n~tabname
INNER JOIN dd07l AS d
ON c~tabclass = d~domvalue_l
INNER JOIN dd07t AS e
ON d~domvalue_l = e~domvalue_l
AND d~as4local = e~as4local
AND d~valpos = e~valpos
WHERE e~ddlanguage = sy-langu
AND b~ddlanguage = sy-langu
AND n~ddlanguage = sy-langu
AND a~tabname = p_tabint
AND d~domname = 'TABCLASS'
AND a~fieldname <> 'MANDT'.
IF NOT sy-subrc IS INITIAL.
*Se a budega num tá traduzida tem que refazer o select em inglês
*Se nem em inglês puxar todos os dados se vire e faça na mão a parada!!
SELECT a~tabname a~fieldname a~keyflag
a~rollname a~position a~inttype
a~intlen b~scrtext_s b~scrtext_m
b~scrtext_l c~tabclass n~ddtext
e~ddtext
INTO TABLE ti_tab
FROM dd03l AS a
INNER JOIN dd04t AS b
ON a~rollname = b~rollname
INNER JOIN dd02l AS c
ON a~tabname = c~tabname
INNER JOIN dd02t AS n
ON c~tabname = n~tabname
INNER JOIN dd07l AS d
ON c~tabclass = d~domvalue_l
INNER JOIN dd07t AS e
ON d~domvalue_l = e~domvalue_l
AND d~as4local = e~as4local
AND d~valpos = e~valpos
WHERE e~ddlanguage = 'EN'
AND b~ddlanguage = 'EN'
AND n~ddlanguage = 'EN'
AND a~tabname = p_tabint
AND d~domname = 'TABCLASS'
AND a~fieldname <> 'MANDT'.
ENDIF.
SORT ti_tab BY position.
DELETE ADJACENT DUPLICATES FROM ti_tab COMPARING position.
IF ti_tab[] IS INITIAL.
MESSAGE i011(pc) WITH 'Nenhum dado encontrado!'.
STOP.
ENDIF.
DESCRIBE TABLE ti_tab LINES v_linhas.
PERFORM monta_fieldcat USING :
'FIELDNAME' 'TI_TAB' 'DD03L' 'FIELDNAME'
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'KEYFLAG' 'TI_TAB' 'DD03L' 'KEYFLAG'
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'ROLLNAME' 'TI_TAB' 'DD03L' 'ROLLNAME'
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'POSITION' 'TI_TAB' 'DD03L' 'POSITION'
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ',
'SCRTEXT_L' 'TI_TAB' 'DD04T' 'SCRTEXT_L'
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '.
* 'ORDEM' 'TI_TAB' ' ' ' '
* 'Ordenação' ' ' ' ' ' ' ' ' ' ' ' ' 'X' ' '.
PERFORM eventtab_build USING gt_events[].
PERFORM comment_build USING gt_list_top_of_page[].
PERFORM zf_executar_alv.
*&---------------------------------------------------------------------*
*& FORM MONTA_FIELDCAT
*&---------------------------------------------------------------------*
FORM monta_fieldcat USING
x_field x_tab x_ref x_fil x_text
x_sum x_type x_just x_qfield x_checkbox
x_no_out x_edit x_hotspot.
v_fieldcat-fieldname = x_field.
v_fieldcat-tabname = x_tab.
v_fieldcat-ref_tabname = x_ref.
v_fieldcat-ref_fieldname = x_fil.
v_fieldcat-reptext_ddic = x_text.
v_fieldcat-do_sum = x_sum.
v_fieldcat-inttype = x_type.
v_fieldcat-just = x_just.
v_fieldcat-qfieldname = x_qfield.
v_fieldcat-checkbox = x_checkbox.
v_fieldcat-no_out = x_no_out.
v_fieldcat-edit = x_edit.
v_fieldcat-hotspot = x_hotspot.
APPEND v_fieldcat.
CLEAR v_fieldcat.
ENDFORM. " MONTA_FIELDCAT
*&---------------------------------------------------------------------*
*& Form EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* -->P_GT_EVENTS[] text
*----------------------------------------------------------------------*
FORM eventtab_build USING rt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = rt_events.
READ TABLE rt_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE g_top_of_page TO ls_event-form.
APPEND ls_event TO rt_events.
ENDIF.
ENDFORM. " EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*& Form COMMENT_BUILD
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* -->P_GT_LIST_TOP_OF_PAGE[] text
*----------------------------------------------------------------------*
FORM comment_build USING lt_top_of_page TYPE slis_t_listheader..
DATA: ls_line TYPE slis_listheader.
CLEAR: ls_line.
ls_line-typ = c_h.
ls_line-info = c_rele.
APPEND ls_line TO lt_top_of_page.
CLEAR ls_line.
READ TABLE ti_tab INDEX 1.
*-- Nome
ls_line-typ = c_s.
ls_line-key = c_ntab.
IF ti_tab-nome <> space.
CONCATENATE p_tabint ' - ' ti_tab-nome INTO v_info1.
ELSE.
WRITE p_tabint TO v_info1.
ENDIF.
WRITE v_info1 TO ls_line-info.
APPEND ls_line TO lt_top_of_page.
CLEAR: ls_line, v_info1.
*-- Tipo
ls_line-typ = c_s.
ls_line-key = c_ttab.
IF ti_tab-ddtext <> space.
WRITE ti_tab-ddtext TO v_info1.
ELSE.
WRITE 'Indefinida' TO v_info1.
ENDIF.
WRITE v_info1 TO ls_line-info.
APPEND ls_line TO lt_top_of_page.
CLEAR: ls_line, v_info1.
*-- Campos
ls_line-typ = c_s.
ls_line-key = c_linc.
WRITE v_linhas TO v_info1.
PACK v_info1 TO v_info1.
WRITE v_info1 TO ls_line-info.
APPEND ls_line TO lt_top_of_page.
CLEAR: ls_line, v_info1.
*Usuário
ls_line-typ = c_s.
ls_line-key = c_exec.
WRITE sy-uname TO v_info1.
WRITE v_info1 TO ls_line-info.
APPEND ls_line TO lt_top_of_page.
CLEAR: ls_line, v_info1.
*-- Data e Hora
ls_line-typ = c_s.
ls_line-key = c_dpt.
WRITE sy-datum TO v_data.
WRITE sy-uzeit TO v_hora.
CONCATENATE v_data '-' v_hora 'hs' INTO v_info1 SEPARATED BY space.
WRITE v_info1 TO ls_line-info.
APPEND ls_line TO lt_top_of_page.
CLEAR: ls_line, v_info1.
ENDFORM. " COMMENT_BUILD
*&---------------------------------------------------------------------*
*& FORM TOP_OF_PAGE *
*&---------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
i_logo = 'ENJOYSAP_LOGO' "ENJOYSAP_LOGO
it_list_commentary = gt_list_top_of_page.
ENDFORM. " top_of_page
*&---------------------------------------------------------------------
*
*& Form F_STATUS - GUI ALV
*&---------------------------------------------------------------------
*
FORM f_status USING rt_extab TYPE slis_t_extab. "#EC CALLED
SET PF-STATUS 'ZAIRES'.
ENDFORM. "f_status
*&---------------------------------------------------------------------*
*& Form zf_executar_alv_infor
*&---------------------------------------------------------------------*
FORM zf_executar_alv.
* Preenchendo algumas opções de impressão (Não é obrigatório)
wc_layout-expand_all = 'X'. "Abrir subitens
wc_layout-colwidth_optimize = 'X'. "Largura melhor possível coluna
* wc_layout-edit = 'X'. "Não Permitir a edição
wc_layout-zebra = 'X'. "Listagem aparece zebrada.
wc_repid = sy-repid.
wc_layout-box_tabname = 'TI_TAB'.
wc_layout-box_fieldname = 'MARK'.
wc_layout-box_rollname = space.
wc_layout-key_hotspot = c_x.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = wc_repid
i_background_id = 'ALV_BACKGROUND'
* i_callback_top_of_page = 'F_TOP_OF_PAGE'
i_callback_user_command = 'F_USER_COMMAND3'
i_callback_pf_status_set = 'F_STATUS'
it_fieldcat = v_fieldcat[]
is_layout = wc_layout
it_sort = ti_sort[]
i_default = 'X'
i_save = 'A'
it_events = gt_events[]
TABLES
t_outtab = ti_tab
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE i011(pc) WITH 'Erro ao gerar relatório ALV'.
STOP.
ENDIF.
ENDFORM. " zf_executar_alv_infor
*&--------------------------------------------------------------------*
*& Form F_USER_COMMAND_ANUAL
*&--------------------------------------------------------------------*
FORM f_user_command3 USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
CLEAR v_cont.
LOOP AT ti_tab WHERE mark = 'X'.
v_cont = v_cont + 1.
ENDLOOP.
IF v_cont = 0.
MESSAGE e011(pc) WITH 'Selecione as linhas para a tabela interna!'.
ELSEIF v_cont = 1.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'Y'
textline1 = 'Sua tabela terá apenas 1 campo!'
textline2 = 'Deseja realmente gerá-la?!'
titel = 'Geração de compontes'
start_column = 25
start_row = 6
cancel_display = 'X'
IMPORTING
answer = v_resp.
IF v_resp = 'J'.
MESSAGE i011(pc) WITH 'Santa preguiça viu!'.
ELSE.
MESSAGE e011(pc) WITH 'Selecione a(s) outra(s) linha(s)!'.
ENDIF.
ENDIF.
CASE ucomm.
WHEN 'AIRES1'.
CLEAR v_fun.
CALL FUNCTION 'K_KKB_POPUP_RADIO3'
EXPORTING
i_title = 'Tipo de tabela interna'
i_text1 = 'A mais simples!'
i_text2 = 'Meia boca...'
i_text3 = 'Tipo perfeccionista!!!'
i_default = '1'
IMPORTING
i_result = v_fun
EXCEPTIONS
cancel = 1
OTHERS = 2.
IF sy-subrc IS INITIAL AND v_fun <> space.
LOOP AT ti_tab WHERE mark = 'X'.
MOVE-CORRESPONDING ti_tab TO ti_tab2.
APPEND ti_tab2.
CLEAR ti_tab2.
ENDLOOP.
IF ti_tab2[] IS INITIAL.
MESSAGE e011(pc) WITH 'Execute o programa novamente!'.
ENDIF.
LOOP AT ti_tab2.
CLEAR v_cont2.
LOOP AT ti_tab2 WHERE fieldname+0(10) = ti_tab2-fieldname+0(10).
v_cont2 = v_cont2 + 1.
IF v_cont2 >= 2.
CONCATENATE ti_tab2-fieldname+0(5) v_cont2 INTO ti_tab2-fieldname.
MODIFY ti_tab2.
ENDIF.
ENDLOOP.
ENDLOOP.
CASE v_fun.
*######################################################################*
*#########################Opção 1######################################*
*######################################################################*
WHEN 1.
*Declaração
CONCATENATE c_data
c_velha
c_begin
c_velha
p_nome
c_velha
c_occurs
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
DESCRIBE TABLE ti_tab2 LINES v_ult.
*Linhas
LOOP AT ti_tab2.
CLEAR v_linha.
IF sy-tabix = v_ult.
v_linha = ti_tab2-fieldname+0(10).
TRANSLATE v_linha USING ' #'.
CONCATENATE c_3velha
v_linha
c_velha
c_like
c_velha
ti_tab2-tabname
c_traco
ti_tab2-fieldname
c_ponto
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ELSE.
v_linha = ti_tab2-fieldname+0(10).
TRANSLATE v_linha USING ' #'.
CONCATENATE c_3velha
v_linha
c_velha
c_like
c_velha
ti_tab2-tabname
c_traco
ti_tab2-fieldname
c_virgula
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ENDIF.
ENDLOOP.
*Declaração final
CONCATENATE c_data
c_velha
c_end
c_velha
p_nome
c_ponto
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
*Propaganda!
WRITE c_mentor TO ti_down-linha.
APPEND ti_down.
CLEAR ti_down.
*######################################################################*
*#########################Opção 2######################################*
*######################################################################*
WHEN 2.
CLEAR v_nome.
READ TABLE ti_tab2 INDEX 1.
IF sy-subrc IS INITIAL.
v_nome = ti_tab2-nome.
ENDIF.
IF v_nome <> space.
CONCATENATE c_aster
v_nome
INTO ti_down-linha.
APPEND ti_down.
CLEAR ti_down.
ENDIF.
*Declaração
CONCATENATE c_data
c_velha
c_begin
c_velha
p_nome
c_velha
c_occurs
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
DESCRIBE TABLE ti_tab2 LINES v_ult.
*Linhas
LOOP AT ti_tab2.
CLEAR v_linha.
IF sy-tabix = v_ult.
CLEAR: v_linha, v_flinha.
v_linha = ti_tab2-fieldname+0(10).
TRANSLATE v_linha USING ' #'.
CONCATENATE ti_tab2-tabname
c_traco
ti_tab2-fieldname
c_ponto
INTO v_flinha.
TRANSLATE v_flinha USING ' #'.
IF ti_tab2-scrtext_m = space.
CONCATENATE c_3velha
v_linha
c_velha
c_like
c_velha
v_flinha
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ELSE.
CONCATENATE c_3velha
v_linha
c_velha
c_like
c_velha
v_flinha
c_velha
c_aspas
ti_tab2-scrtext_m+0(17)
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ENDIF.
ELSE.
CLEAR: v_linha, v_flinha.
v_linha = ti_tab2-fieldname+0(10).
TRANSLATE v_linha USING ' #'.
CONCATENATE ti_tab2-tabname
c_traco
ti_tab2-fieldname
c_virgula
INTO v_flinha.
TRANSLATE v_flinha USING ' #'.
IF ti_tab2-scrtext_m = space.
CONCATENATE c_3velha
v_linha
c_velha
c_like
c_velha
v_flinha
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ELSE.
CONCATENATE c_3velha
v_linha
c_velha
c_like
c_velha
v_flinha
c_velha
c_aspas
ti_tab2-scrtext_m+0(17)
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ENDIF.
ENDIF.
ENDLOOP.
*Declaração final
CONCATENATE c_data
c_velha
c_end
c_velha
p_nome
c_ponto
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
*Propaganda!
WRITE c_mentor TO ti_down-linha.
APPEND ti_down.
CLEAR ti_down.
*######################################################################*
*#########################Opção 3######################################*
*######################################################################*
WHEN 3.
CLEAR v_nome.
READ TABLE ti_tab2 INDEX 1.
IF sy-subrc IS INITIAL.
v_nome = ti_tab2-nome.
ENDIF.
IF v_nome <> space.
CONCATENATE c_aster
v_nome
INTO ti_down-linha.
APPEND ti_down.
CLEAR ti_down.
ENDIF.
*Declaração
CONCATENATE c_data
c_velha
c_begin
c_velha
p_nome
c_velha
c_occurs
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
DESCRIBE TABLE ti_tab2 LINES v_ult.
*Linhas
LOOP AT ti_tab2.
CLEAR v_linha.
IF sy-tabix = v_ult.
CLEAR: v_linha, v_flinha.
v_linha = ti_tab2-fieldname+0(10).
TRANSLATE v_linha USING ' #'.
CONCATENATE ti_tab2-tabname
c_traco
ti_tab2-fieldname
c_ponto
INTO v_flinha.
TRANSLATE v_flinha USING ' #'.
CONCATENATE c_3velha
v_linha
c_velha
c_like
c_velha
v_flinha
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
IF ti_tab2-scrtext_l = space.
CONCATENATE c_aster
c_tipo2
ti_tab2-inttype
c_comp2
ti_tab2-intlen
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ELSE.
CONCATENATE c_aster
c_tipo
ti_tab2-inttype
c_comp
ti_tab2-intlen
c_desc
ti_tab2-scrtext_l
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ENDIF.
ELSE.
CLEAR: v_linha, v_flinha.
v_linha = ti_tab2-fieldname+0(10).
TRANSLATE v_linha USING ' #'.
CONCATENATE ti_tab2-tabname
c_traco
ti_tab2-fieldname
c_virgula
INTO v_flinha.
TRANSLATE v_flinha USING ' #'.
CONCATENATE c_3velha
v_linha
c_velha
c_like
c_velha
v_flinha
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
IF ti_tab2-scrtext_l = space.
CONCATENATE c_aster
c_tipo2
ti_tab2-inttype
c_comp2
ti_tab2-intlen
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ELSE.
CONCATENATE c_aster
c_tipo
ti_tab2-inttype
c_comp
ti_tab2-intlen
c_desc
ti_tab2-scrtext_l
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
ENDIF.
ENDIF.
ENDLOOP.
*Declaração final
CONCATENATE c_data
c_velha
c_end
c_velha
p_nome
c_ponto
INTO ti_down-linha.
TRANSLATE ti_down-linha USING '# '.
APPEND ti_down.
CLEAR ti_down.
*Propaganda!
WRITE c_mentor TO ti_down-linha.
APPEND ti_down.
CLEAR ti_down.
ENDCASE.
IF NOT ti_down[] IS INITIAL.
CONCATENATE 'C:\'
p_tabint
sy-datum
sy-uzeit
'.txt'
INTO v_caminho.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
filename = v_caminho
filetype = 'ASC'
TABLES
data_tab = ti_down
EXCEPTIONS
file_open_error = 1
file_write_error = 2
invalid_filesize = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
gui_refuse_filetransfer = 8
OTHERS = 9.
IF sy-subrc <> 0.
MESSAGE e011(pc) WITH
'Erro ao gerar a tabela interna! Debugue'.
ENDIF.
COMMIT WORK.
v_url = v_caminho.
FREE ti_down.
IF p_bw = 'X' .
CALL FUNCTION 'CALL_BROWSER'
EXPORTING
url = v_url
new_window = c_x
EXCEPTIONS
frontend_not_supported = 1
frontend_error = 2
prog_not_found = 3
no_batch = 4
unspecified_error = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE e011(pc) WITH
'Seu browser está bixado! Formate o pc!!!'.
ENDIF.
ELSE.
CALL FUNCTION 'WS_EXECUTE'
EXPORTING
commandline = v_url
program = 'notepad'
EXCEPTIONS
frontend_error = 1
no_batch = 2
prog_not_found = 3
illegal_option = 4
gui_refuse_execute = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE e011(pc) WITH
'Aff! Seu bloco de notas está bixado! Formate o pc!'.
ELSE.
WAIT UP TO 5 SECONDS.
CALL FUNCTION 'WS_FILE_DELETE'
EXPORTING
file = v_caminho.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
LEAVE TO SCREEN 0.
ENDFORM. "F_USER_COMMAND_MENSAL
terça-feira, 6 de janeiro de 2009
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário