Beruflich Dokumente
Kultur Dokumente
"
"
"
"
"
"
"
"
"
"
" Vamos agora tentar explicar um Batch Input, sabe quando tem aquele
funcionrio que tem um monte de dados dentro de um arquivo externo como
um arquivo .xls ou .txt ou qualquer outro formato fora do SAP e este
funcinrio fala que os dados esto dentro de um arquivo e que pra
cadastrar todos dentro da SAP demoraria dias, nessa hora o funcional
escuta em sua mente sombria a palavra BATCH INPUT, a primeira coisa
que o funcional fala organize todos os dados em um nico arquivo
pulando uma linha por registro e separando os dados por ';' ou 'Space'
recomendo ';' pois as vezes contem dados com espao dentro e isso pode
atrapalhar o processo de Input no Sistema.
Crie um arquivo que servir como entrada de dados com as informaes:
" Tem um outro arquivo muito importante tb, o famoso SHDB contendo o
" mapeamento do processo por este arquivo vc consegue ver quais so os
" dados necessrios para realizar com sucesso o processo qualque dvida
" http://abapjuniores.blogspot.com/2011/04/shdb-basico.html.
" Segue abaixo um programa comentado bsico para um batch imput funciona.
*&---------------------------------------------------------------------*
REPORT zmj_batch.
"
"
"
"
Cdigo do cliente
Tipo da mensagem
Numero da mensagem
Descrio da mensagem
START-OF-SELECTION.
PERFORM: z_baixa_arquivo,
z_trata_arquivo,
z_monta_shdb,
z_manda_arquivo
.
*&---------------------------------------------------------------------*
*&
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_mostra_local
*&---------------------------------------------------------------------*
" Mostra o local onde ser gravado o arquivo de Log.
FORM z_mostra_local .
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title
= 'Informar o caminho para gerar o arquivo'
initial_folder
= 'C:\'
CHANGING
selected_folder
= p_log
EXCEPTIONS
cntl_error
= 1
error_no_gui
= 2
not_supported_by_gui = 3
OTHERS
= 4.
" Nome do Arquivo do Log contendo o endereo+NOME1+HORA+.TXT.
CONCATENATE p_log '\' sy-uname '_' sy-uzeit '.TXT' INTO p_log
.
ENDFORM.
" Z_MOSTRA_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.
" Z_MONTA_ARQUIVO
*&---------------------------------------------------------------------*
*&
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: st_arqui-cliente
st_arqui-nome
st_arqui-rua
st_arqui-end
st_arqui-tel
.
" Add registro na tabela.
APPEND st_arqui TO it_arqui.
ENDLOOP.
ENDFORM.
" Z_TRATA_ARQUIVO
*&---------------------------------------------------------------------*
*&
Form z_monta_shdb
*&---------------------------------------------------------------------*
FORM z_monta_shdb.
LOOP AT it_arqui INTO st_arqui.
" cria uma variavel pra informar qual cliente est porcessando no
" perform z_sapgui_progress_indicator.
CONCATENATE 'Processando o Cliente -' st_arqui-cliente
INTO vg_texto SEPARATED BY space.
" informa o processo atual
PERFORM z_sapgui_progress_indicator USING vg_texto.
" 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 crian
do
" 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',
st_arqui-cliente,
'X'.
'SAPMF02D'
'BDC_CURSOR'
'BDC_OKCODE'
'KNA1-NAME1'
'KNA1-STRAS'
'KNA1-ORT01'
'KNA1-TELF1'
'0110',
'KNA1-TELF1',
'/00',
st_arqui-nome,
st_arqui-rua,
st_arqui-end,
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
*&---------------------------------------------------------------------*
*&
Form Z_IMPRIME_MENSAGEM
*&---------------------------------------------------------------------*
FORM z_imprime_mensagem.
" D 'Loop na tabela de retorno da chamada da transao e alimenta outra
" tabela com a retorno referenciado com o Cliente
LOOP AT it_msg.
msgno = it_msg-msgnr.
" Function que faz mostrar a mensagem
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid
= it_msg-msgid
msgno
= msgno
msgty
= it_msg-msgtyp
msgv1
= it_msg-msgv1
msgv2
= it_msg-msgv2
msgv3
= it_msg-msgv3
msgv4
= it_msg-msgv4
msgv5
= ' '
IMPORTING
*
ERROR
=
messg
= mensg
*
MSGLN
=
.
ENDLOOP.
st_message-cliente = st_arqui-cliente.
st_message-msgty
= mensg-msgty.
st_message-msgno
= mensg-msgno.
st_message-msgtx
= mensg-msgtx.
" popula a tabela principal de mensagem que ser o Log de erro.
APPEND st_message TO it_message.
*
*
*
*
WRITE: / , st_arqui-cliente ,
mensg-msgtx,
mensg-msgty
.
ENDFORM.
" Z_IMPRIME_MENSAGEM
*&---------------------------------------------------------------------*
*&
Form Z_MANDA_ARQUIVO
*&---------------------------------------------------------------------*
FORM z_manda_arquivo .
" Cria um arquivo externo conforme 'Filename com as informaes da 'Data_tab
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p_log
TABLES
data_tab = it_message
EXCEPTIONS
OTHERS
= 17.
ENDFORM.
" Z_MANDA_ARQUIVO
*&---------------------------------------------------------------------*
*&
Form Z_SAPGUI_PROGRESS_INDICATOR
*&---------------------------------------------------------------------*
FORM z_sapgui_progress_indicator USING texto.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage = 10
text
= texto.
ENDFORM.
"
"
"
"
s
"
" Z_SAPGUI_PROGRESS_INDICATOR
"
"SAPMF02D 0101
"
"
"
"
"SAPMF02D 0110
"
"
T XD02
BS AA X
X
BDC_CURSOR
BDC_OKCODE
RF02D-KUNNR
RF02D-D0110
RF02D-D0110
/00
8000000001
X
BDC_CURSOR
BDC_OKCODE
KNA1-TELF1
/00
"
"
"
"
KNA1-NAME1
KNA1-STRAS
KNA1-ORT01
KNA1-TELF1
teste
rua teste
So Paulo
12345678