Você está na página 1de 5

*&---------------------------------------------------------------------*

*& Report Z22RP_EXERCICIO13


*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z22RP_EXERCICIO13.
TYPES: BEGIN OF TY_CLIENTE,
CPF
TYPE Z22TB_CLIENTE-CPF,
RG
TYPE Z22TB_CLIENTE-RG,
NOME
TYPE Z22TB_CLIENTE-NOME,
DATANASC TYPE Z22TB_CLIENTE-DATANASC,
ENDERECO TYPE Z22TB_CLIENTE-ENDERECO,
NUMERO
TYPE Z22TB_CLIENTE-NUMERO,
BAIRRO
TYPE Z22TB_CLIENTE-BAIRRO,
CIDADE
TYPE Z22TB_CLIENTE-CIDADE,
CEP
type Z22TB_CLIENTE-cep,
TELEFONE type Z22TB_CLIENTE-TELEFONE,
EMAIL
TYPE Z22TB_CLIENTE-EMAIL,
END OF TY_CLIENTE.
types: BEGIN OF ty_bdcdata,
program TYPE bdcdata-program,
dynpro
TYPE bdcdata-dynpro,
dynbegin TYPE bdcdata-dynbegin,
fnam
TYPE bdcdata-fnam,
fval
TYPE bdcdata-fval,
END OF ty_bdcdata.

"
"
"
"
"

Pool de mdulos BDC


Nmero de tela BDC
Incio BDC de uma tela
Nome do campo
Valor do campo BDC

" Relao informativa do log


*types: BEGIN OF ty_message,
*
CPF
TYPE Z22TB_CLIENTE-CPF,
" Cdigo do cliente
*
msgty TYPE bdcmsgcoll-msgtyp,
" Tipo da mensagem
*
msgno TYPE message-msgno,
" Numero da mensagem
*
msgtx TYPE message-msgtx,
" Descrio da mensagem
* END OF ty_message.
*
DATA: BEGIN OF t_line OCCURS 0,
linha(108) TYPE c,
END OF t_line.
DATA: it_cliente
TYPE TABLE OF ty_cliente,
it_bdcdata TYPE TABLE OF ty_bdcdata.
*
it_msg
TYPE TABLE OF bdcmsgcoll WITH HEADER LINE,
*
it_message TYPE TABLE OF ty_message.

DATA: wa_cliente TYPE ty_cliente,


wa_bdcdata TYPE ty_bdcdata.
*
wa_message TYPE ty_message.

" Variaveis ....


DATA: v_gmode(1) TYPE c VALUE 'N',
v_gtexto(100) TYPE c,
v_gs TYPE c VALUE 'S'.
*
mensg LIKE message VALUE IS
*
msgno LIKE sy-msgno.

" informa o Modo do Call Transaction


" Texto para o Indicator
" Informa o Update do call Transaction
INITIAL, " variavel que recebe retorno

" Tela de Seleo ....


" texto (
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.
PARAMETERS:
p_dest TYPE string. " Texto ( Arquivo txt: )
*
p_log TYPE string " Texto ( Arquivo log: )
.
SELECTION-SCREEN END OF BLOCK a.
" Quando for requisitado um valor no 'Parameter faa ...
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dest.
PERFORM z_busca_arquivo.

" Comea aki ...


START-OF-SELECTION.
PERFORM: z_baixa_arquivo,
z_trata_arquivo,
z_monta_shdb,
z_carrega_transacao,
z_preenche_bdc.

*&---------------------------------------------------------------------*
*&
Form z_busca_arquivo
*&---------------------------------------------------------------------*
" Pega o valor contido no parameters e add o texto '.txt' no final assim o
" o nome do arquivo fica com a extenso desejada.
FORM z_busca_arquivo.
CONCATENATE p_dest '.txt' INTO p_dest.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = ' '
def_path
= 'C:\'
mask
= ',Texto,*.txt,Todos,*.*.'
mode
= 'O'
title
= 'Arquivo de Entrada'(004)
IMPORTING
filename
= p_dest
EXCEPTIONS
OTHERS.
ENDFORM.

" z_busca_local

*&---------------------------------------------------------------------*
*&
Form Z_MONTA_ARQUIVO
*&---------------------------------------------------------------------*
" Pega o arquivo externo relacionado e coloca os dados na 'T_LINE
FORM z_baixa_arquivo.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = p_dest
TABLES
data_tab = t_line
EXCEPTIONS
OTHERS = 17.
ENDFORM.

*&---------------------------------------------------------------------*
*&
Form Z_TRATA_ARQUIVO
*&---------------------------------------------------------------------*
" Ser os dados conforme sequencia de campos e add na tabela principal
FORM z_trata_arquivo.

LOOP AT t_line.
" o Split quebra a linha e separa por delimitador ';' colocando cada dado
" em cada campo sequencialmente.
SPLIT t_line AT ';' INTO: wa_cliente-cpf
wa_cliente-RG
wa_cliente-NOME
wa_cliente-DATANASC
wa_cliente-ENDERECO
wa_cliente-NUMERO
wa_cliente-BAIRRO
wa_cliente-CIDADE
wa_cliente-cep
wa_cliente-TELEFONE
wa_cliente-EMAIL.
" Add registro na tabela.
APPEND wa_cliente TO it_cliente.

ENDLOOP.
ENDFORM.
O

" Z_TRATA_ARQUIVO

" Z_MONTA_ARQUIV

FORM z_monta_shdb.
LOOP AT it_cliente INTO wa_cliente.
" cria uma variavel pra informar qual cliente est porcessando no
" perform z_sapgui_progress_indicator.
CONCATENATE 'Processando o Cliente -' wa_cliente-cpf
INTO v_gtexto SEPARATED BY space.
" informa o processo atual
PERFORM z_sapgui_progress_indicator USING v_gtexto.
" aki que o bixo pega, lembra dakele arquivo SHDB que enviaram pra vc
" aki que ele comea a faze sentido, oq ns estamos fazendo aki e criando
" uma tabela com as informaes conforme o SHDB s mundando a informao
" que vc quer que mude conforme o registro.
" Depois de terminar os performs z_preenche_bdc vc vai dar uma olhada
" na tabela it_bdcdata pq ela vai estar igualzinha com o SHDB que
" enviaram pra vc.
" Crie um 'Perform pra cada tela que tiver no SHDB.
PERFORM z_preenche_bdc USING:
'X'
' '
' '
' '
' '

'SAPMF02D'
'BDC_CURSOR'
'BDC_OKCODE'
'RF02D-KUNNR'
'RF02D-D0110'

'0101',
'RF02D-D0110',
'/00',
wa_cliente-cpf,
'X'.

PERFORM z_preenche_bdc USING:


'X'
' '
' '
' '
' '
' '

'SAPMF02D'
'BDC_CURSOR'
'BDC_OKCODE'
'KNA1-NAME1'
'KNA1-STRAS'
'KNA1-ORT01'

'0110',
'KNA1-TELF1',
'/00',
st_arqui-nome,
st_arqui-rua,
st_arqui-end,

' '

'KNA1-TELF1'

st_arqui-tel.

PERFORM z_carrega_transacao.
PERFORM z_imprime_mensagem.
CLEAR it_bdcdata.
ENDLOOP.
ENDFORM.

" z_monta_shdb

*&---------------------------------------------------------------------*
*&
Form Z_PREENCHE_BDC
*&---------------------------------------------------------------------*
" Se Dynbegin = 'X' ele preenche as informaes da tela, seno ele preenche
" o campo e o dado dela. prontio.
FORM z_preenche_bdc USING dynbegin
name
value.
IF dynbegin = 'X'.
MOVE: name
TO st_bdcdata-program,
value
TO st_bdcdata-dynpro,
dynbegin TO st_bdcdata-dynbegin.
APPEND st_bdcdata TO it_bdcdata.
ELSE.
MOVE: name TO st_bdcdata-fnam,
value TO st_bdcdata-fval.
APPEND st_bdcdata TO it_bdcdata.
ENDIF.
" prepara a estrutura para o Loop.
CLEAR st_bdcdata.
ENDFORM.
" Z_PREENCHE_BDC
*&---------------------------------------------------------------------*
*&
Form Z_CARREGA_TRANSACAO
*&---------------------------------------------------------------------*
FORM z_carrega_transacao .
" Chama a trasao informada usando a tabela 'IT_BDCDATA que na verdade
" um shdb que vai automtiza o processo at o ultimo registro, existe
" dois metodos de ver o processo, no 'MODE se colocar 'N' vc no visualiza
" o processo, agora se vc coloca 'A' no 'MODE vc ter que apertar 'Enter
" por processo e depois de efetuar o processo por registro ele popula a
" tabela 'IT_MSG com os dados de retorno,se foi realizado com exito, ou se
" deu algum problema.
CALL TRANSACTION 'XD02' USING it_bdcdata
MODE vg_mode
UPDATE vg_s
MESSAGES INTO it_msg
.
ENDFORM.

" Z_CARREGA_TRANSACAO

http://codigofonte.uol.com.br/codigos/batch-input

Você também pode gostar