Você está na página 1de 4

************************************************************************* * * ************************************************************************* * Nome do Programa : REPORT ZGERA_COD_SHDB * * Ttulo do Programa : Gera codigo abap a partir de um mapeamento SHDB * * Programador

: * * Cliente : * * Data : * * ltima atualizao : * * Descrio : Gera um arquivo txt com o mapeamento de uma SHDB * * Transao : * * Sapscript : * * Mdulos de Funes : * ************************************************************************* * Histrico de Alteraes: * *-----------------------------------------------------------------------* * Data | Request | Autor | Alterao * *-----------------------------------------------------------------------* REPORT ZGERA_COD_SHDB. * Tabelas Transparentes * tables: apqi. " Relao de shdb (primeira tela da transao) * Tabelas Internas * tabela de retorno da funo DATA: t_bdc LIKE bdcdata OCCURS 0 WITH HEADER LINE, * tabela de exportao t_codigo(72) TYPE c OCCURS 0 WITH HEADER LINE. * Constantes CONSTANTS: c_aspa(1) c_tela(3) c_nada(3) * Tela de seleo SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE title1. * nome do shdb SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(29) t_shdb. PARAMETERS p_shdb LIKE apqi-groupid OBLIGATORY. SELECTION-SCREEN END OF LINE. * usurio criador da shdb SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(29) t_ucomm. PARAMETERS p_ucomm LIKE apqi-creator OBLIGATORY. SELECTION-SCREEN END OF LINE. * local de gerao do arquivo SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(29) t_path. PARAMETERS p_path LIKE rlgrap-filename OBLIGATORY. SELECTION-SCREEN END OF LINE. * tabela interna ultilizada para gerar o codigo SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 2(29) t_itab. PARAMETERS p_itab(13) TYPE c OBLIGATORY. VALUE '''', VALUE '''X''', VALUE ''' '''.

SELECTION-SCREEN END OF LINE. SELECTION-SCREEN END OF BLOCK bl01. * Inicializaes INITIALIZATION. title1 = 'Parametros de Seleo'. t_shdb = 'Nome SHDB'. t_ucomm = 'Usurio'. t_path = 'Local e nome do Arquivo'. t_itab = 'Tabela interna'. * Eventos At selection-screen AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. CALL FUNCTION 'KD_GET_FILENAME_ON_F4' EXPORTING mask = ',Arquivo Texto,*.txt' static = 'X' CHANGING file_name = p_path. * Rotina Principal START-OF-SELECTION. PERFORM: seleciona_dados, monta_arquivo, download. * Subrotinas *----------------------------------------------------------------------* * Form seleciona_dados *----------------------------------------------------------------------* * Busca chave para seleo da shdb e seleciona a shdb *----------------------------------------------------------------------* FORM seleciona_dados. * varivel local para a seleo da shdb STATICS: v_qid LIKE apqi-qid. CLEAR v_qid. * busca a chave para seleo da shdb SELECT SINGLE qid INTO v_qid FROM apqi WHERE groupid EQ p_shdb AND creator EQ p_ucomm. * busca a shdb CALL FUNCTION 'BDC_OBJECT_READ' EXPORTING queue_id = v_qid datatype = '%BDC' TABLES dynprotab = t_bdc EXCEPTIONS not_found = 1 system_failure = 2 invalid_datatype = 3 OTHERS = 4.

"#EC "#EC "#EC "#EC "#EC

NOTEXT NOTEXT NOTEXT NOTEXT NOTEXT

) ) ) ) )

"#EC NOTEXT )

IF sy-subrc NE 0. MESSAGE e000(zaquarela) WITH 'No foi encotrado o regidtro de shdb' p_shdb."#EC NOTEXT ) ENDIF. " sy-subrc ne 0 ENDFORM. " seleciona_dados *----------------------------------------------------------------------* * Form monta_arquivo *----------------------------------------------------------------------* * monta a tabela interna de exportao *----------------------------------------------------------------------* FORM monta_arquivo. * variveis locais para teatamento dos campos STATICS: v_program(23) TYPE c, v_screen(7) TYPE c, v_fnam(23) TYPE c, v_fval(40) TYPE c, v_itab(20) TYPE c, v_len(2) TYPE n. * mota a tabela interna itab-xxxxx CONCATENATE p_itab '-xxxxx,' INTO v_itab. TRANSLATE v_itab TO LOWER CASE. * limpa a tabela interna de download REFRESH t_codigo. CLEAR t_codigo. LOOP AT t_bdc. IF sy-tabix NE 1. IF NOT t_bdc-dynbegin IS INITIAL. pula uma linha. CLEAR t_codigo. APPEND t_codigo. concatena as aspas nos campos CONCATENATE: c_aspa t_bdc-program c_aspa INTO v_program, c_aspa t_bdc-dynpro c_aspa ',' INTO v_screen. move para a tabela de exportao MOVE: c_tela TO t_codigo+0(3), v_program TO t_codigo+4(23), v_screen TO t_codigo+25. ELSE. concatena aspas nos campos CONCATENATE: c_aspa t_bdc-fnam c_aspa INTO v_fnam. trata se ok code/cursor ou campo de tela IF t_bdc-fnam(3) EQ 'BDC'. " ok code/cursor IF t_bdc-fnam EQ 'BDC_SUBSCR'. MOVE: c_aspa TO v_fval(1), t_bdc-fval(10) TO v_fval+1(10), t_bdc-fval+40 TO v_fval+20. v_len = strlen( v_fval ). MOVE: ''',' TO v_fval+v_len(2). ELSE. CONCATENATE c_aspa t_bdc-fval c_aspa ',' INTO v_fval. ENDIF. " t_bdc-fnam eq 'BDC_SUBSCR' ELSE. " campo de tela translate v_itab to lower case.

* * *

* *

MOVE v_itab TO v_fval. ENDIF. " t_bdc-fnam(3) eq 'BDC' MOVE: c_nada v_fnam v_fval ENDIF. " if TO t_codigo+0(3), TO t_codigo+4(23), TO t_codigo+30. not t_bdc-dinbegin is initial

AT LAST. * ponto no final da ltima linha TRANSLATE t_codigo USING ',.'. ENDAT. " last * insetre o registro na tabela de exportao APPEND t_codigo. *limpa o header das tabelas internas e variveis locais. CLEAR: t_codigo, t_bdc, v_program, v_screen, v_fnam, v_fval, v_len. ENDIF. " sy-tabix ne 1 ENDLOOP. " at t_bdc. ENDFORM. " monta_arquivo *----------------------------------------------------------------------* * Form download *----------------------------------------------------------------------* * cria o arquivo .txt no local especificado *----------------------------------------------------------------------* FORM download. CALL FUNCTION 'WS_DOWNLOAD' EXPORTING filename = p_path filetype = 'ASC' TABLES data_tab = t_codigo EXCEPTIONS file_open_error = 1 file_write_error = 2 invalid_filesize = 3 invalid_type = 4 no_batch = 5 unknown_error = 6 invalid_table_width = 7 gui_refuse_filetransfer = 8 customer_error = 9 OTHERS = 10. IF sy-subrc EQ 0. MESSAGE s000(zaquarela) WITH 'Arquivo gerado com sucesso'. ELSE. MESSAGE e000(zaquarela) WITH 'Erro ao gerar o arquivo'. ENDIF. ENDFORM. " download

"#EC NOTEXT ) "#EC NOTEXT )

Você também pode gostar