You are on page 1of 8

Batch Input - Bsico

"
"
"
"
"
"
"
"
"
"

" 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:

" 8000000001;nome teste1;rua teste1;So Paulo1;12345671


" 8000000002;nome teste2;rua teste2;So Paulo2;12345672
"

Lembrando que a ordem muito importante pois eh gravado na ordem.

" 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.

" Tipos ....


TYPES:
" Dados que sero informados pelo arquivo.
BEGIN OF ty_arqui,
cliente TYPE rf02d-kunnr,
" Cdigo do Cliente
nome
TYPE kna1-name1,
" Nome do cliente
rua
TYPE kna1-stras,
" Rua do cliente
end
TYPE kna1-ort01,
" Endereo do cliente
tel
TYPE kna1-telf1,
" telefone do cliente
END OF ty_arqui,
" Batch input nova estrutura do campo de tabela
BEGIN OF ty_bdcdata,
program
TYPE bdcdata-program, " Pool de mdulos BDC
dynpro
TYPE bdcdata-dynpro,
" Nmero de tela BDC
dynbegin TYPE bdcdata-dynbegin, " Incio BDC de uma tela
fnam
TYPE bdcdata-fnam,
" Nome do campo
fval
TYPE bdcdata-fval,
" Valor do campo BDC
END OF ty_bdcdata,
" Relao informativa do log
BEGIN OF ty_message,

cliente TYPE rf02d-kunnr,


msgty
TYPE message-msgty,
msgno
TYPE message-msgno,
msgtx
TYPE message-msgtx,
END OF
ty_message
.

"
"
"
"

Cdigo do cliente
Tipo da mensagem
Numero da mensagem
Descrio da mensagem

" Tabelas Internas ....


DATA: it_arqui
TYPE TABLE OF ty_arqui,
it_bdcdata TYPE TABLE OF ty_bdcdata,
it_msg
TYPE TABLE OF bdcmsgcoll WITH HEADER LINE,
it_message TYPE TABLE OF ty_message
.
" Tabela que recebe as informaes crua do arquivo que ser tratado
DATA: BEGIN OF t_line OCCURS 0,
linha(108) TYPE c,
END OF t_line
.
" Estruturas ...
DATA: st_arqui
TYPE ty_arqui,
st_bdcdata TYPE ty_bdcdata,
st_message TYPE ty_message
.
" Variaveis ....
DATA: vg_mode(1) TYPE c VALUE 'N', " informa o Modo do Call Transaction
vg_texto(100) TYPE c,
" Texto para o Indicator
vg_s TYPE c VALUE 'S',
" Informa o Update do call Transaction
mensg LIKE message VALUE IS INITIAL, " variavel que recebe retorno
msgno LIKE sy-msgno
.

" 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.
" Quando for requisitado um valor no 'Parameter faa ...
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_log.
PERFORM z_mostra_local.
"

Comea aki ...

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'.

PERFORM z_preenche_bdc USING:


'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

Debugem isso, estudem, faam de outra forma pois no eh to facil assim,


apertem F1, muda o 'MODE no 'CALL TRANSACTION pra ver processo por processo
abusem deste programa, olhem abaixo o SHDB possivel para este Batch input,
provavelmente deve ter mais campo mostrando valores mas ns no precisavamo
cadatrar outros campos, e qualquer dvida e soh fala, t+.

"
"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