Você está na página 1de 52

APRENDENDO ABAP no MINISAP NetWeaver 7.

0
Tela Inicial

Onde se digitam as transaes

Criando tabelas

Dentro da SE11 marque Database table e coloque o


nome da tabela que quer criar no campo

ZMARA e a ZMAKT

Transao: SE11 Dicionrio de dados

Clique
em
Create.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 1

Na tela que se abrir, na ABA Delivery and Maintenance preencha:

Descrio da tabela
Display/Maintenanc
e Allowed para
permitir a
manuteno da
tabela sem restrio

Classe de aplicao

Na ABA Fields repita a Descrio da tabela, e preencha os nomes dos campos como abaixo

O mandante deve
existir como
primeiro campo de
qualquer tabela e
sempre ser chave

No campo Nmero de Material coloque o elemento


de dados ZMATNR e d duplo clique para cri-lo

Clique em Local Object


Clique em Yes
para salvar a
tabela.

Confirme a
criao do
Elemento de
Dados

Desconsiderar essa telinha,


apenas confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 2

O Elemento de Dados carrega a descrio do campo e do domnio (caractersticas).

Coloque a descrio breve

preencha o nome do
domnio a ser criado

Na ABA Field Label, coloque as descries possveis


para os campos e clique ENTER

O preenchimento dos tamanhos


automtico

Voltando para ABA Data Type d duplo clique no nome do Domnio

Clique em Yes

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 3

Confirme a
criao do
Elemento de
Dados

Clique em
Local Object

Desconsiderar essa telinha,


simplesmente confirme.
Descrio
breve

O Domnio carrega as caractersticas do


campo, como tamanho e tipo; e neste caso o
tipo como
CHAR e o tamanho 18.

3 passos obrigatrios:
Salvar
Verificar
Inconsistncias
Ativar

para voltar.
Somente aps esses passos o objeto funciona. Clique em BACK
Para salvar o domnio aps o clique, marque o popup como objeto local, verifique e ative.
Voltando, salve, verifique e ative tambm o Elemento de Dados.
Campo
MATNR

Elmto Dd
ZMATNR

ERSDA

ZERSDA

MTART

ZMTART

Descries 1, 2, 3, e, 4
1- N. Matnr
2- N. Mater.
3- N. do Mater
4- N. do Material
1- Criado
2- Criado em
3- Data criao
4- Data da criao do
material
1- Tp. Material
2- Tipo material
3- Tipo de Material
4- Tipo de Mateiral

Domnio
ZMATNR

Tipo
CHAR

Tamanho
18

DATUM

DATS

ZMTART

CHAR

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Crie os outros
elementos de
dados e
domnios/nse11
conforme as
especificaes e
da mesma forma
que foram criados
o Elemento de
Dados e o
Domnio do
MATNR.

Pgina 4

Crie tambm a tabela ZMAKT de acordo com as especificaes abaixo.


Campo
MATNR

Elmto Dd
ZMATNR

SPRAS

ZSPRAS

MAKTX

ZMAKTX

ZMAKT Descrio: Textos breves de material


Descries 1, 2, 3, e, 4
Domnio
1- N. Matnr
ZMATNR
2- N. Mater.
3- N. do Mater
4- N. do Material
1- Idioma
CHAR2
2- Idioma
3- Cdigo do Idioma
4- Cdigo do Idioma do Material
1- Tx mat
TEXT40
2- Texto material
3- Texto breve material
4- Texto breve de material

Tipo
CHAR

Tamanho
18

CHAR

CHAR

40

Clique Technical Settings


para ativar a tabela.

Clique em Yes

Escolha APPL0 para Classe


de Dados e 0 para Categoria

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 5

Clique em
Salvar e
depois em
Voltar

Salvar,
Verificar e
Ativar a tabela

Manuteno das tabelas


- Transao: SE11
Dicionrio de dados.
Entrar na tabela ativada
Utilities  Table
Maintenace Generator

Clique em criar.

Preencha essa tela


com Grupo de
Autorizao
&NC&, e no
Grupo de Funes
coloque o mesmo
nome da tabela.

Marque one step em


Maintenance type
e coloque 1 em
overview screen.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 6

Para testar a
manuteno de tabela
gerada, v para a
transao SM30.

Preencha o nome da
tabela no campo
Table/View
(VIEWNAME) e clique
em Maintain (Update).

Entre com
os dados
do ex. e
salve

Para entrar
com novos
dados

Criando uma transao para manuteno de tabela - Transao: SE93 Criao de transao.
Como a SM30 no uma transao disponvel para o usurio, criar uma transao para a manuteno
da tabela na transao SE93.

Coloque o nome
da transao, no
ex. ZMARA e
clique em
Create

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 7

Preencha a
descrio breve,
marque a opo
Transao com
Parmetros e
confirme.

Marque as 3 opes
de interface

Preencha com a
transao SM30
Marque Pular a
Tela Inicial
Preencha os campos e os contedos da
primeira tela da transao SM30.

No topo da pgina, clique em Salvar.


Para criar a transao no necessrio ativar,
basta salvar como Objeto Local.
Faa tudo para as duas tabelas
Preencha a tabela ZMAKT com as linhas:
MATNR SPRAS
100001
BR
100002
BR
100003
BR
100005
BR

MAKTX
CANETA
LAPIZ
BORRACHA
CADERNO

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 8

Criando um REPORT, relatrio simples - Transao: SE38 Editor de programa ABAP

Preencha o nome do
programa clique em
Create, todo objeto
customizado, ou que
no seja Standard
comea com Z.

Preencha o campo
Title com o nome do
relatrio, o Type
como Executable
program e o Status
como SAP Standard
Prodution Program.
Salve como Objeto
Local.
O sistema abrir o
editor de programa
ABAP; complete o
cdigo como no
modelo abaixo:

*---------------------------------------------------------------------*
* Report ZRELMARA
*
*---------------------------------------------------------------------*
* Autor:
Responsvel:
* Data:
Mdulo:
*---------------------------------------------------------------------*
REPORT zrelmara.
*---------------------------------------------------------------------*
* Declarao
*---------------------------------------------------------------------*
* Tabelas transparentes do dicionrio de dados que sero usadas no cdigo.
TABLES: zmara,
zmakt.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 9

* Tipos de referncias para declaraes das tabelas internas.


TYPES: BEGIN OF ty_zmara,
matnr TYPE zmara-matnr,
ersda TYPE zmara-ersda,
mtart TYPE zmara-mtart,
END OF ty_zmara.
TYPES: BEGIN OF ty_zmakt,
matnr TYPE zmakt-matnr,
spras TYPE zmakt-spras,
maktx TYPE zmakt-maktx,
END OF ty_zmakt.
* Tipo de referncia que vai receber os dados gerais do relatrio.
TYPES: BEGIN OF ty_saida,
matnr TYPE zmara-matnr,
ersda TYPE zmara-ersda,
mtart TYPE zmara-mtart,
spras TYPE zmakt-spras,
maktx TYPE zmakt-maktx,
END OF ty_saida.
* Tabelas Internas que vo receber os dados vindos do banco de dados;
* elas so temporrias e s existem durante o processamento do cdigo.
DATA: ti_zmara TYPE STANDARD TABLE OF ty_zmara,
ti_zmakt TYPE STANDARD TABLE OF ty_zmakt,
ti_saida TYPE STANDARD TABLE OF ty_saida.
* Work reas so iguais a 1 linha de cada tabela interna referente;
* na work rea que os dados so trabalhados.
DATA: wa_zmara LIKE LINE OF ti_zmara,
wa_zmakt LIKE LINE OF ti_zmakt,
wa_saida LIKE LINE OF ti_saida.
* Variveis, quando necessrio.
* Tela com os parmetros de entrada que serviro de filtro para a
* busca dos dados do relatrio.
* Parmetro de tela que recebe um nico valor
PARAMETERS: p_spras TYPE zmakt-spras.
* Parmetro de tela que recebe um perodo `de at' (ranger).
SELECT-OPTIONS: s_matnr FOR zmara-matnr.
*---------------------------------------------------------------------*
* Processamento
*---------------------------------------------------------------------*
* Busca Dados--------------------------* para organizar o processamento neste bloco utiliza-se forms, com a chamada
* pelo comando perform.
* para criar o form referente basta clicar duas vezes no nome do perform.
* Busca ZMARA - Busca dados da tabela zmara.
PERFORM busca_zmara.
* Busca ZMAKT - Busca dados da tabela zmakt
PERFORM busca_zmakt.
* Processa dados----------------------PERFORM processa_dados.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 10

* Saida-------------------------------PERFORM imprime_saida.
*---------------------------------------------------------------------*
* Subrotinas
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*
Form busca_zbseg
*---------------------------------------------------------------------*
FORM busca_zmara .
* Seleciona os dados matnr ersda mtart
SELECT matnr ersda mtart
* para dentro da tabela interna ti_zmara
INTO TABLE ti_zmara
* vindo da tatela transparente zmara
FROM zmara
* com a condio de acordo com a tela de seleo
WHERE matnr IN s_matnr. " ranger com 'IN'
* Para testar se houve erro no select.
* Sy-subrc = 0
=
ZERO ERRO , retornou pelo menos 1 registro.
* Sy-subrc <> 0
=
HOUVE ERRO , no retornou nada
IF sy-subrc <> 0 .
* Se no retornar nada vai dar mensagem de erro.
MESSAGE i000(su) WITH 'DEU ERRO'.
* Pra o processamento e retorna para a tela de parmetros de entrada
STOP.
ELSE.
* Se a busca no deu erro, a tabela tem algum registro ento sorteia.
SORT ti_zmara BY matnr.
ENDIF.
ENDFORM.
" busca_zmara
*---------------------------------------------------------------------*
*
Form busca_zbxt
*---------------------------------------------------------------------*
FORM busca_zmakt .
* sempre que for fazer um select relacionado com uma tabela transparente
* tem que garantir que isso no ser feito com uma tabela vazia.
IF NOT ti_zmara[] IS INITIAL.
* Seleciona os dados matnr spras maktx
SELECT matnr spras maktx
* para dentro da tabela interna ti_zmakt
INTO TABLE ti_zmakt
* vindo da tatela transparente zmakt
FROM zmakt
* para cada entrada da tabela ti_zmara
FOR ALL ENTRIES IN ti_zmara
* com a condio de acordo com a tela de seleo
* e com a tabela de comparao.
WHERE matnr = ti_zmara-matnr
AND spras = p_spras. "Parameters com =
* Para testar se houve erro no select.
* Sy-subrc = 0
=
ZERO ERRO , retornou pelo menos 1 registro.
* Sy-subrc <> 0
=
HOUVE ERRO , no retornou nada

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 11

IF sy-subrc = 0 .
* Neste caso pode testar se no houve erro
* e se a tabela foi preenchida ento sorteia, indexa.
SORT ti_zmakt BY matnr.
ENDIF.
ENDIF.
ENDFORM.
" busca_zmakt
*---------------------------------------------------------------------*
*
Form processa_dados
*---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM processa_dados .
* Para preencher a tabela com os dados de sada
* Para cada registro da tabela ti_mara.
LOOP AT ti_zmara INTO wa_zmara.
* move o contedo da wa_mara para wa_saida.
wa_saida-matnr = wa_zmara-matnr.
wa_saida-ersda = wa_zmara-ersda.
wa_saida-mtart = wa_zmara-mtart.
* Para carregar com os dados relacionados da ti_makt
* Tem que ler a ti_makt onde o campo chave matnr o mesmo
* Clusula Binary Serach faz uma pesquisa binria e mais rpida
READ TABLE ti_zmakt INTO wa_zmakt WITH KEY matnr = wa_zmara BINARY SEARCH.
* Para economizar processamento o valor da ti_zmakt para ti_saida
* s ser trasportado se a leitura com o comando read table tiver dado
* resultado.
IF sy-subrc = 0 .
wa_saida-spras = wa_zmakt-spras.
wa_saida-maktx = wa_zmakt-maktx.
ENDIF.
* No final do processamento o valor da wa_saida movido para ti_saida pelo
* comando APPEND.
APPEND wa_saida TO ti_saida.
ENDLOOP.
ENDFORM.

" processa_dados

*---------------------------------------------------------------------*
*
Form imprime_saida
*---------------------------------------------------------------------*
FORM imprime_saida .
* Para cada registro da tabela ti_saida
LOOP AT ti_saida INTO wa_saida.
* Imprime cada campo da tabela.
WRITE:/ wa_saida-matnr,
wa_saida-ersda,
wa_saida-mtart,
wa_saida-spras,
wa_saida-maktx.
ENDLOOP.
ENDFORM.

" imprime_saida

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 12

Aps a finalizao do relatrio,


Salvar
Verificar
Inconsistncias
Ativar
Clicar em Direct Processing (F8)
para rodar o programa.

O resultado ser uma tela


de entrada. Preenchendo
com BR e clicando em
executar...

O Relatrio impresso na tela.


Clicando em Voltar, retorna-se
ao cdigo e sero permitidas as
alteraes nos nomes dos
campos.

Clicando em Goto 
Text Elements 
Selections Texts.

Preencher com a
descrio dos campos,
Salvar
Voltar

, Ativar
.

O resultado ser a tela de


entrada com os nomes
corretos dos campos e no
como apresentados no
cdigo.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 13

Criando uma Funo - Transao: SE80 Objeto de Navegao


Para criar uma funo, primeiro cria-se o grupo de funo

Clique em Yes

Selecione Function Group ,


coloque o nome do grupo de
funo e tecle Enter.

Preencha a descrio breve e clique em Save;


como objeto local. O grupo est criado.
Criar a funo.

Fazendo uma Funo calculadora simples - Transao: SE37 Construtor de funo ABAP.

Coloque o nome da
funo e clique em
Create

Preencha o grupo de funo e


a descrio breve e Salve.

Desconsidere esta tela e


confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 14

Uma funo IMPORTA parmetros (variveis, works reas, tabelas internas) executa um
processamento e EXPORTA um parmetro de resultado .

Preencha os parmetros de importao como o modelo e use elementos de dados j existentes.

Preencha o parmetro de exportao que receber o resultado, usando um elemento j existente.

Em Source code, a
tela trar os
parmetros declarados
anteriormente.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 15

Escreva o cdigo e clique:


Salvar
Verificar
Ativar
Para testar a funo d F8

Preencha os parmetros
de entrada e d F8.
Segue o resultado.

Caso o sinal seja um invlido, verifique


a mensagem de erro tipo I.

Usando uma funo no cdigo - Crie o programa ZCALCSP na SE38, com o cdigo abaixo.
*---------------------------------------------------------------------*
* Report ZCALSP
*---------------------------------------------------------------------*
REPORT zcalcsp.
*---------------------------------------------------------------------*
* Declarao
*---------------------------------------------------------------------*
* Variveis
DATA: v_result(10) TYPE n.
* Tela com os parmetros de entrada que serviro de filtro para a
* busca dos dados do relatrio.
* Parmetro de tela que recebe o endereo de exportao do TXT.
PARAMETERS: p_valor1(5) TYPE n,
p_sinal(1) TYPE c,
p_valor2(5) TYPE n.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 16

*---------------------------------------------------------------------*
* Processamento
*---------------------------------------------------------------------*
* para organizar o processamento neste bloco utiliza-se forms, com a chamada
* pelo comando perform.
* para criar o form referente basta clicar duas vezes no nome do perform.
* Processa dados----------------------PERFORM chama_funcao.
* Sada-------------------------------* Imprime os dados da tabela ti_saida na tela.
PERFORM imprime_saida.
*---------------------------------------------------------------------*
* Subrotinas
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*
Form chama_funcao
*---------------------------------------------------------------------*
FORM chama_funcao .

Para chamar o corpo


da funo, localize o
cursor no local onde a
funo deve constar
no cdigo e clique em
Pattern.

Preencha o nome da
funo no campo ende
o CALL FUNCTION
estiver flegado e
confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 17

Vai aparecer a funo para completar com os parmetros do cdigo.


CALL FUNCTION 'ZCLCSP'
EXPORTING
p_valor1 = p_valor1
p_sinal = p_sinal
p_valor2 = p_valor2
IMPORTING
p_result = v_result.
ENDFORM.
" chama_funcao
*---------------------------------------------------------------------*
*
Form imprime_saida
*---------------------------------------------------------------------*
*
text
*---------------------------------------------------------------------*
FORM imprime_saida .
WRITE:/
/
/
/

'Primeiro valor:
'Sinal
:
'Segundo valor :
'Resultado
:

',
',
',
',

p_valor1,
p_sinal,
p_valor2,
v_result.

ENDFORM.
" imprime_saida
*---------------------------------------------------------------------*

Teste clicando em F8;


os parmetros so
como os declarados.
Para adequar o texto
aos usurios, retorne
ao cdigo...

Clique em Goto 
Text Elements 
Selection Texts

Preencher com
o texto que os
usurios iro
ver:
Salvar,

Execute
novamente

Ativar e
Voltar.

Criando uma Interface de remessa - Transao: SE38 Editor de programa ABAP.


O programa de interface tem o objetivo de troca de dados com outro sistema.
Agora vamos fazer uma interface de remessa, onde selecionamos dados no SAP e exportamos
um arquivo PONTO TXT, para um local disponvel para outro sistema importar.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 18

Crie um programa na SE38 com o nome de ZREMESSA e cole o cdigo do relatrio ZRELMARA
fazendo as alteraes abaixo.
* Tela com os parmetros de entrada que serviro de filtro para a
* busca dos dados do relatrio.
* Parmetro de tela que recebe o endereo de exportao do TXT.
PARAMETERS: p_path(128) TYPE c. <<<<<<<<<<<<<<<
* Parmetro de tela que recebe um nico valor
PARAMETERS: p_spras TYPE zmakt-spras.
* Parmetro de tela que recebe um perodo `de at' (ranger).
SELECT-OPTIONS: s_matnr FOR zmara-matnr.
*---------------------------------------------------------------------*
* Processamento
*---------------------------------------------------------------------*
* Busca Dados--------------------------* para organizar o processamento neste bloco utiliza-se forms, com a chamada
* pelo comando perform.
* para criar o form referente basta clicar duas vezes no nome do perform.
* Busca ZMARA - Busca dados da tabela zmara.
PERFORM busca_zmara.
* Busca ZMAKT - Busca dados da tabela zmakt
PERFORM busca_zmakt.
* Processa dados----------------------PERFORM processa_dados.
* Saida-------------------------------* Imprime os dados da tabela ti_saida na tela.
PERFORM imprime_saida.
* Exporta o txt baseado na ti_saida para o local c:/temp
Perform exporta_saida. <<<<<<<<<<<<<<
*---------------------------------------------------------------------*
* Subrotinas
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*
Form exporta_saida
*---------------------------------------------------------------------*
FORM exporta_saida .
* Essa varivel local tipo string compatvel com a funo
DATA l_path TYPE string.
* O tipo do p_path no compatvel com a funo
* mas, se o valor do que no compatvel for transportado para uma
* varivel (no ex. varivel local)compatvel o valor passa a ser til
l_path = p_path.
* A funo GUI_DOWLOAD exporta o contedo de uma tabela interna para
* um endereo local pr-definido.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename
= l_path
TABLES
data_tab
= ti_saida

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 19

EXCEPTIONS
file_write_error
no_batch
gui_refuse_filetransfer
invalid_type
no_authority
unknown_error
header_not_allowed
separator_not_allowed
filesize_not_allowed
header_too_long
dp_error_create
dp_error_send
dp_error_write
unknown_dp_error
access_denied
dp_out_of_memory
disk_full
dp_timeout
file_not_found
dataprovider_exception
control_flush_error
OTHERS

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22.

* para toda funo com EXCEPTIONS seve-se testar o subrc.


* Se houver erro, o comando message da forma abaixo, apresentar na tela
* mensagem standard.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.

" exporta_saida

Criando um online - Transao: SE80


Um programa online usado quando necessrio customizar uma tela fora do padro de Report e
normalmente serve para dar manutenes e entrada de dados, funciona em mdulos dentro de includes.

Selecione Program, coloque o nome que


deve comear com SAPMZ , tecle ENTER.
Abrir um popup para criar o objeto

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 20

Os prximos popups sugerem a criao


do objeto com o include TOP e o nome
a ser utilizado. Basta confirmar todas
as telas e salvar como Objeto Local.

Clique 2 X no nome do programa e


tire os asterscos de todos os
includes sugeridos no programa.

A organizao do programa deve ficar separada em blocos como em um report, porm tudo acontece
dentro dos respectivos includes.
Onde:

*---------------------------------------------------------------------*
no include TOP ficam todas as declaraes.
* Module Pool
SAPMZ1ONL
no include O01 ficam os processamentos
*---------------------------------------------------------------------*
* Declaraes
da tela. PBO Process Before
INCLUDE MZ1ONLTOP.
" global Data
Output
* Processamento
INCLUDE MZ1ONLO01.
INCLUDE MZ1ONLI01.

" PBO-Modules
" PAI-Modules

* Subrotinas.
INCLUDE MZ1ONLF01.

" FORM-Routines

no include I01 ficam os processamentos aps


um comando de tela.
PAI - Process After Input
no include F01 ficam todos os forms dos
processamentos.

Os includes foram sugeridos, mas devem ser criados, faa assim para cada um, (menos o TOP, que
j foi criado junto com o online). Clique 2 X no nome do include a ser criado.
Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com
ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 21

Clique em Yes nas telas que se abriro e por ltimo, salve


como Objeto Local.
Para criar os outros includes, clique 2 X no nome do
programa e clique 2 X no nome de outro include que ser
criado, faa isso para os 3 includes: O01, I01 e F01.

O include estar pronto para


receber cdigo. Sempre que for
sugerido salvar .... salve.

Neste ponto a estrutura do Online est pronta para receber qualquer processamento, tela, botes,
cdigos, lgica, declaraes, etc. Os includes so programinhas externos e lincados ao cdigo
principal, tudo acontece neles. No necessrio usar mais do que os 4 includes inicialmente
sugeridos, mesmo que outros venham a ser sugeridos pelo SAP.
Para esse online, vamos fazer a importao, na primeira tela, do TXT exportado pelo ltimo report
e apresentar o resultado em um TABLE CONTROL em uma segunda tela.
Cole no include TOP as declaraes que sero usadas neste processamento.
*---------------------------------------------------------------------*
* Include MZ1ONLTOP
Module Pool
SAPMZ1ONL
*---------------------------------------------------------------------*
PROGRAM sapmz1onl.
* Tabelas Transparentes
TABLES: zmara, zmakt.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 22

* Tipos
* A linha de Mil caracteres, receber todo o contedo do txt.
* Os campos de sada sero declarados com seus respectivos tamanhos.
TYPES: BEGIN OF ty_txt,
linha(1000) TYPE c,
END OF ty_txt.
TYPES: BEGIN OF ty_saida,
matnr(18) TYPE c,
ersda(08) TYPE c,
mtart(04) TYPE c,
spras(02) TYPE c,
maktx(30) TYPE c,
END OF ty_saida.
* Tabelas Internas
DATA: ti_txt TYPE STANDARD TABLE OF ty_txt,
ti_saida TYPE STANDARD TABLE OF ty_saida.
* Work reas
DATA: wa_txt LIKE LINE OF ti_txt,
wa_saida LIKE LINE OF ti_saida.
* Variveis
DATA: v_path(128) TYPE c,
okcode
TYPE sy-ucomm,
v_okcode
TYPE sy-ucomm.
-----------------------------------------------------------------------------------

Para os demais includes, uma


ordem deve ser seguida. Primeiro
crie a primeira tela com o nmero
de 0100.

Clique no nome do programa


com o boto da direita do mouse.
Clique em Create
Clique em Screen

Clique em Yes

Coloque um
nmero ( 0100,
5000 ou 9000 )
para identificar a
tela e confirme.

`
Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com
ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 23

Na ABA Atributes,
preencha a descrio
da tela

Na ABA Element list,


preencha OKCODE

Na ABA Flow logic, existem os mdulos de


processamento PBO, o que acontece antes da
tela e o PAI, o processamento que acontece
aps o comando dado na tela.
No PBO descomente o module STATUS_0100
e d duplo clique no nome.

Clique em Yes

Para os modules do PBO


escolha o include O01

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 24

O module ser criado dentro do include escolhido, descomente a linha SET TITLEBAR, coloque
o nmero da tela entre as aspas e clique 2 X para criar o ttulo da tela na barra de botes.

Clique em Yes para criar o objeto;


Clique em Yes para salvar o programa e
na tela seguinte, coloque o Title (ttulo) e
confirme.
Repita a sequncia para o
PF_STATUS 0100.

Clique em Yes para criar o


objeto;
Clique em Yes para salvar o
programa e
na tela seguinte, coloque o
Short Text (Descrio
Breve) e confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 25

A tela a seguir apresenta diversos botes para se formar as telas desejadas. Clique no terceiro nvel,
Functions Keys, onde ficam os botes padres de tela.

Duplo clique
em ENTE

Na barra de Standard Toolbar,


preencha os botes ENTE e
BACK.
NOTA: so possveis apenas
4 caracteres.

Confirme

Preencha o
Function text
Com Enter e
Confirme.

Confirme e repita a
Seqncia para o
BACK e demais
botes que sejam
necessrio criar.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 26

A tela a seguir usada para customizao de botes: Application Toolbar

Preencha o espao com o


boto EXEC, d duplo
clique e confirme no
popup que se abrir.

Preencha os textos Function text


e Info. Text. Para os botes da
barra customizada necessrio a
representao por um cone.
No campo Icon name, atravs do
matchcode, selecione o que
melhor se enquadra no padro
SAP, de acordo com o costume
dos usurios.

Confirme.
Salvar
Verificar
Ativar
Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com
ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Os botes desta
primeira tela j
existem, volte
para a lgica de
processamento.

Pgina 27

Nesta tela, crie o Module USER_COMMAND_0100,


descomentando-o e clicando 2 X sobre o nome.

Neste mdulo, vamos colocar funcionalidade


nos botes, escolha o include relativo ao PAI
da tela, I01. Confirme e cole o cdigo abaixo.

*---------------------------------------------------------------------*
* Include
MZ1ONLI01
*---------------------------------------------------------------------*
*
Module USER_COMMAND_0100 INPUT
*---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
* o sy-ucomm recebe o nome do boto clicado,
* o okcode um elemento de tela que vai receber o sy-ucomm
* para asegurar que o valor do boto no vai se perder
* o v_okcode recebe o valor usado para o teste no CASE.
okcode = sy-ucomm.
v_okcode = okcode.
CLEAR okcode.
* Para cada comando vamos criar um form e evitar processamentos
* dentro do CASE. Os forms vo para o include com o final F01.
CASE v_okcode.
WHEN 'ENTE'.
PERFORM f_importa_txt.
WHEN 'EXEC'.
PERFORM f_importa_txt.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
" USER_COMMAND_0100 INPUT

Clicando 2 X no nome do perform, crie o


form no Include prprio. Clique em Yes,
escolha o include F01, confirme e salve.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 28

Cole o cdigo abaixo dentro do form criado.


*---------------------------------------------------------------------*
* Include
MZ1ONLF01
*---------------------------------------------------------------------*
*
Form f_importa_txt
*---------------------------------------------------------------------*
FORM f_importa_txt .
clear ti_txt[].
* A varivel local l_path necessria pois o v_path que recebe o
* endereo do arquivo txt na tela, do tipo char de 128 e no
* compatvel com a funo 'GUI_UPLOAD'.
* Ento cria-se uma varivel compatvel ( type string ) que vai
* receber o valor da v_path.
DATA l_path TYPE string.
l_path = v_path.
* Na funo passamos o endereo o arquivo txt no parmetro filename
* e a tabela interna que vai receber o contedo do TXT, neste caso
* a ti_txt, j est declarada no include TOP.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename
= l_path
TABLES
data_tab
= ti_txt
EXCEPTIONS
file_open_error
= 1
file_read_error
= 2
no_batch
= 3
gui_refuse_filetransfer = 4
invalid_type
= 5
no_authority
= 6
unknown_error
= 7
bad_data_format
= 8
header_not_allowed
= 9
separator_not_allowed
= 10
header_too_long
= 11
unknown_dp_error
= 12
access_denied
= 13
dp_out_of_memory
= 14
disk_full
= 15
dp_timeout
= 16
OTHERS
= 17.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.

" f_importa_txt

Neste ponto o cdigo j importou o arquivo txt para dentro da tabela interna it_txt.
Agora vamos mostrar este contedo em uma segunda tela, porm a tabela ti_txt tem apenas um
nico campo que uma linha de 1000 caracteres; pouco funcional no processamento.
Temos que quebrar essa linha campo a campo e depois chamar a prxima tela para exibi-los;
ento temos que criar outro form onde vamos quebrar as linhas da ti_txt em uma tabela interna
mais apropriada, a ti_saida e incluir a chamada da prxima tela de exibio.
Altere o mdulo USER_COMMAND_0100 do include I01 para que fique como abaixo.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 29

*---------------------------------------------------------------------*
* Include
MZ1ONLI01
*---------------------------------------------------------------------*
*
Module USER_COMMAND_0100 INPUT
*---------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
*
*
*
*

o sy-ucomm recebe o nome do boto clicado,


o okcode um elemento de tela que vai receber o sy-ucomm
para asegurar que o valor do boto no vai se perder
o v_okcode recebe o valor usado para o teste no CASE.
okcode = sy-ucomm.
v_okcode = okcode.
CLEAR okcode.

* Para cada comando vamos criar um form e evitar processamentos


* dentro do CASE. Os forms vo para o include com o final F01.
CASE v_okcode.
WHEN 'ENTE'.
* Importa arquivo TXT via funo GUI_UPLOAD
PERFORM f_importa_txt.
* Quebra linha do TXT para tabela interna ti_saida.
PERFORM f_quebra_txt.
* Chama a tela de exibio da ti_saida em TABLE CONTROL
CALL SCREEN '0110'.
WHEN 'EXEC'.
* Importa arquivo TXT via funo GUI_UPLOAD
PERFORM f_importa_txt.
* Quebra linha do TXT para tabela interna ti_saida.
PERFORM f_quebra_txt.
* Chama a tela de exibio da ti_saida em TABLE CONTROL
CALL SCREEN '0110'.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.

" USER_COMMAND_0100

INPUT

Clicando 2 X no perform f_quebra_txt,


crie o form no Include prprio. Clique
em Yes, escolha o include F01, confirme
e salve.

Cole o cdigo abaixo.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 30

*---------------------------------------------------------------------*
*
Form f_quebra_txt
*---------------------------------------------------------------------*
FORM f_quebra_txt .
clear ti_saida[].
* Para cada linha da ti_txt, carrega sua Work Area.
LOOP AT ti_txt INTO wa_txt.
* Move o trecho da linha referente a cada campo da wa_saida.
* Onde +XX = posio e o (XX) = o trecho.
wa_saida-matnr = wa_txt-linha+00(18).
wa_saida-ersda = wa_txt-linha+18(08).
wa_saida-mtart = wa_txt-linha+26(04).
wa_saida-spras = wa_txt-linha+30(02).
wa_saida-maktx = wa_txt-linha+32(30).
* Carrega a ti_saida com o contedo de sua Work Area.
APPEND wa_saida TO ti_saida.
ENDLOOP.
ENDFORM.

" f_quebra_txt

Para criar o desenho da tela, clique em LAYOUT. A ferramenta Screen Painter se abrir.

Primeiro, vamos fazer uma moldura com a ferramenta BOX; desenhe


clicando na ferramenta e arrastando na rea de desenho, coloque um nome
para o objeto criado e um texto que aparecer no topo da moldura.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 31

Com a ferramenta de texto, crie o campo que vai receber o endereo digitado.
Pra isso, clique na ferramenta, arraste para onde o texto ficar e depois
preencha os campos Name e Text conforme especificado.

Para colocar o campo que receber o endereo ( V_PATH, declarado no TOP), clique no quadrinho
vermelho no topo da tela. No popup que se abrir, clique em Get from Program e todas as declaraes
do TOP aparecero no grid; escolha a varivel V_PATH e confirme.

Localize o campo
V_PATH e
confirme o
prximo popup.
Salve e volte.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 32

O processamento da primeira tela (0100) est


completo, antes de criarmos a segunda tela
(0110), vamos ativar todos os cdigo de uma
maneira geral.
Clique 2 X no nome do programa principal,
clique com o boto da direita do mouse e clique
em ativar.

Confirme

Para criar a segunda tela (0110), clique com o


boto da direita do mouse no nome do
programa principal, escolha Create e Screen.

Na ABA Attributes coloque a descrio da tela.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 33

Na ABA Element list


preencha o OKCODE

Na ABA Flow
logic, descomente
o Module
STAUS_0110
para criar a barra
de botes da tela.

Clique 2 X no nome
STATUS_0110. Para esta tela,
que s vai mostrar os dados,
vamos colocar somente o boto
Voltar. Confirme o primeiro
popup, escolha o include de PBO
com o final O01 e confirme.

Perceba que o novo mdulo da tela 0110 foi


criado logo abaixo do mdulo da tela 0100.
Crie o TITLEBAR da tela 0110, como nome
110, clique 2 X no nome, confirme a criao do
objeto em YES, salve o programa em Yes e no
prximo popup, coloque o ttulo.
Confirme.

Preencha o PF-STATUS com a tela 0110,


clique 2 X sobre o nome, confirme a criao
do objeto em YES, salve o programa em Yes e
no prximo popup, coloque o ttulo.

Confirme

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 34

Clique no terceiro nvel,


Functions Keys, onde
ficam os botes padres de
tela. Escreva BACK no
boto voltar, clique no
nome 2 X e confirme o
prximo popup. Salve e
volte para o cdigo de
processamento da tela.

Descomente o mdulo
USER_COMMAND
_0110 e clique 2 X
para cri-lo.

Confirme a criao do objeto em YES,


escolha o include I01 e confirme.

O mdulo USER_COMMAND_0110 se abrir no include I01 abaixo do


USER_COMMAND_0100. Cole o cdigo abaixo:
*---------------------------------------------------------------------*
*
Module USER_COMMAND_0110 INPUT
*---------------------------------------------------------------------*
MODULE user_command_0110 INPUT.
okcode = sy-ucomm.
v_okcode = okcode.
CLEAR okcode.
* Se o comando escolhido for Voltar, volta para primeira tela.
IF v_okcode = 'BACK'.
LEAVE TO SCREEN '0100'.
ENDIF.
ENDMODULE.

" USER_COMMAND_0110

INPUT

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 35

Para desenhar o layout desta


tela, vamos aproveitar o
recurso automtico da Sreen
Painter.
Salve, volte e clique em
Layout.

Clique em
Table Control
(With Wizard)

Faa um quadro no meio da rea de desenho onde o


table control ser gerado. O Wizard ser aberto.
Siga conforme as marcas das telas.

Preencha com o nome


TC_SAIDA e continue.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 36

Escolha Internal program table


e coloque o nome ti_saida,
marque com Table work rea e
coloque a wa_saida

Marque todos os
campos e continue.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 37

O table control estar criado, mas


como os campos da tabela no so
type a elementos de dados do
dicionrio de dados, no veio
nenhum ttulo e sim o nome dos
campos, o que pode ser trocado,
clicando em cima e alterando o
Contedo do Text.

Salve e volte. O cdigo vai estar cheio de coisas novas que com tempo merecem estudos, pois o
ideal de um table control que ele seja feito mo. Ative o Cdigo de maneira GERAL.

D duplo clique no nome


do programa principal;
Clique com o boto
direito do mouse
novamente no nome e em
Activate.
Todos os objetos que
devem ser ativados
aparecero na tela.
Confirme.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 38

O Programa est pronto, mas para rodar um Online, a transao deve ser criada.
O programa stardado por sua transao.
Na SE93, preencha o nome do
programa e clique em Create.

Preencha a descrio breve,


marque a opo Program and
screen e confirme.

Use a transao ZONLINE


pra chamar o cdigo gerado.
Preencha o endereo do
arquivo e execute.
Preencha o nome do
programa e o nmero
da tela.
Marque as 3 opes de
GUI suport e salve
como objeto local.

Segue o resultado:

Os botes criados
nas telas, so os
nicos ativos.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 39

Criando um relatrio ALV - Transao: SE38 ABAP Editor.


O ALV um relatrio dinmico no sentido de que aps impresso na tela pode ser manipulado de vrias
formas, pelo usurio, obedecendo uma padro standard, lembrando uma tabela do excel.
Cole o programa abaixo.
*&---------------------------------------------------------------------*
*& Report ZRELALV
*&
*&---------------------------------------------------------------------*
REPORT zrelalv.
*---------------------------------------------------------------------*
*
Declaraces
*---------------------------------------------------------------------*
* Tabelas transparentes do dicionrio de dados que sero usadas no cdigo.
TABLES: zmara,
zmakt.
* Tipos de referncias para declaraes das tabelas internas.
TYPES: BEGIN OF ty_zmara,
matnr TYPE zmara-matnr,
ersda TYPE zmara-ersda,
mtart TYPE zmara-mtart,
END OF ty_zmara.
TYPES: BEGIN OF ty_zmakt,
matnr TYPE zmakt-matnr,
spras TYPE zmakt-spras,
maktx TYPE zmakt-maktx,
END OF ty_zmakt.
* Tipo de referncia que vai recerber os dados gerais do relatrio
TYPES: BEGIN OF ty_saida,
matnr TYPE zmara-matnr,
ersda TYPE zmara-ersda,
mtart TYPE zmara-mtart,
spras TYPE zmakt-spras,
maktx TYPE zmakt-maktx,
END OF ty_saida.
*Tabelas Internas que vo receber os dados vindos do banco de dados
* elas so temporrias e s existem durante o processamento do cdigo.
DATA: ti_zmara TYPE STANDARD TABLE OF ty_zmara,
ti_zmakt TYPE STANDARD TABLE OF ty_zmakt,
ti_saida TYPE STANDARD TABLE OF ty_saida.
*Work areas so iguais a 1 linha de cada tabela interna referente,
* na wrk area que os dados so trabalhados.
DATA: wa_zmara LIKE LINE OF ti_zmara,
wa_zmakt LIKE LINE OF ti_zmakt,
wa_saida LIKE LINE OF ti_saida.
*Variaveis, quando necessrio.
*Declarao para o ALV-----------------------------------------------*Pool de declaraes do ALV.
TYPE-POOLS: kkblo.
*Variveis do AVL
DATA: v_repid
v_save

LIKE sy-repid,
TYPE c.

*Tabelas internas do ALV.


DATA: it_fcat
TYPE slis_t_fieldcat_alv,
it_fieldcat
TYPE kkblo_t_fieldcat,
it_header
TYPE kkblo_t_listheader,

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 40

it_sort
*Works Area do AVL
DATA: wa_variant
wa_afield
wa_colinfo
wa_layout
wa_header
wa_lay
wa_sort

TYPE slis_t_sortinfo_alv .

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
LIKE

disvariant,
kkblo_fieldcat,
kkblo_specialcol,
kkblo_layout,
kkblo_listheader,
slis_layout_alv,
LINE OF it_sort.

*---------------------------------------------------------------------*
*Tela com os parmetros de entrada que serviro de filtro para a
*
busca dos dados do relatrio.
*---------------------------------------------------------------------*
**Parmetro de tela que recebe o endereo de exportao do TXT.
*PARAMETERS: p_path(128) TYPE c.
*Parmetro de tela que recebe um nico valor
PARAMETERS: p_spras TYPE zmakt-spras.
*Parmetro de tela que recebe um peroo `de at' (ranger).
SELECT-OPTIONS: s_matnr FOR zmara-matnr.
*Escolha do tipo de relatrio de sada
PARAMETERS: p_sim RADIOBUTTON GROUP said,
p_alv RADIOBUTTON GROUP said DEFAULT 'X'.
*---------------------------------------------------------------------*
*
Processamento
*---------------------------------------------------------------------*
*Busca Dados--------------------------*para organizar o processamento neste bloco utiliza-se forms, com a chamada
*pelo comando perform.
*para criar o form referente basta clicar duas vezes no nome do perform.
START-OF-SELECTION.
*Busca ZMARA - Busca dados da tabela zmara.
PERFORM busca_zmara.
*Busca ZMAKT - Busca dados da tabela zmakt
PERFORM busca_zmakt.
*Processa dados----------------------PERFORM processa_dados.
*Sada-------------------------------*Imprime os dados da tabela ti_saida na tela.
IF p_sim = 'X'.
*Imprime o relatrio com o comando WRITE
PERFORM imprime_simples.
ELSE.
*Imprime o relatrio com o processo de AVL
PERFORM imprime_alv.
ENDIF.
END-OF-SELECTION.
*Limpa todas as estruturas
PERFORM limpa_tudo.
*---------------------------------------------------------------------*
*
Subrotinas
*---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&
Form busca_zmara
*&---------------------------------------------------------------------*
FORM busca_zmara .
*Seleciona os dados matnr ersda mtart

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 41

SELECT matnr ersda mtart


* para dentro da tabela interna ti_zmara
INTO TABLE ti_zmara
* vindo da tatela transparente zmara
FROM zmara
* com a condio de acordo com a tela de seleo
WHERE matnr IN s_matnr. " ranger com 'IN'
* Para testar se houve erro no select.
* Sy-subrc = 0
=
ZERO ERRO , retornou ao menos 1 resgistro.
* Sy-subrc <> 0
=
HOUVE ERRO , no retornou nada
IF sy-subrc <> 0 .
* Se no retornar nada vai dar mensagem de erro.
MESSAGE i000(su) WITH 'DEU ERRO'.
* Para o processamento e retorna para tela de parmetros de entrada
STOP.
ELSE.
* Se a busca no deu erro, a tabela tem algum registro ento sortea.
SORT ti_zmara BY matnr.
ENDIF.
ENDFORM.
" busca_zmara
*&---------------------------------------------------------------------*
*&
Form busca_zbxt
*&---------------------------------------------------------------------*
FORM busca_zmakt .
*sempre que for fazer um select relacionado com uma tabela transparente
*tem que garantir que isso no ser feito com uma tabela vazia
IF NOT ti_zmara[] IS INITIAL.
*Seleciona os dados matnr spras maktx
SELECT matnr spras maktx
* para dentro da tabela interna ti_zmakt
INTO TABLE ti_zmakt
* vindo da tatela transparente zmakt
FROM zmakt
* para cada entrada da tabela ti_zmara
FOR ALL ENTRIES IN ti_zmara
* com a condio de acordo com a tela de seleo
* e com a tabela de comparao.
WHERE matnr = ti_zmara-matnr
AND spras = p_spras. "Parameters com =
* Para testar se houve erro no select.
* Sy-subrc = 0
=
ZERO ERRO , retornou ao menos 1 registro.
* Sy-subrc <> 0
=
HOUVE ERRO , no retornou nada
IF sy-subrc = 0 .
* Neste caso pode testar se no houve erro
* e se a tabela foi preenchida ento sorteia, indexa.
SORT ti_zmakt BY matnr.
ENDIF.
ENDIF.
ENDFORM.
" busca_zmakt
*&---------------------------------------------------------------------*
*&
Form processa_dados
*&---------------------------------------------------------------------*
FORM processa_dados .
*Para preencher a tabela com os dados de sada
*Para cada registro da tabela ti_mara.
LOOP AT ti_zmara INTO wa_zmara.
*move o contedo da wa_mara para wa_saida.
wa_saida-matnr = wa_zmara-matnr.
wa_saida-ersda = wa_zmara-ersda.
wa_saida-mtart = wa_zmara-mtart.
*Para carregar com os dados relacionados da ti_makt

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 42

*Tem que ler a ti_makt onde o campo chave matnr o mesmo


*Clusula Binary Serach faz uma pesquisa binria e mais rpida
READ TABLE ti_zmakt INTO wa_zmakt WITH KEY matnr = wa_zmara BINARY SEARCH.
*Para economizar processamento o valor da ti_zmakt para ti_saida
*s ser transportado se a leitura com o comando read table tiver dado
*resultado.
IF sy-subrc = 0 .
wa_saida-spras = wa_zmakt-spras.
wa_saida-maktx = wa_zmakt-maktx.
ENDIF.
*No final do processamento o valor da wa_saida movido para ti_saida pelo
*comando APPEND.
APPEND wa_saida TO ti_saida.
ENDLOOP.
ENDFORM.
" processa_dados
*&---------------------------------------------------------------------*
*&
Form imprime_simples
*&---------------------------------------------------------------------*
FORM imprime_simples.
*Para cada registro da tabela ti_saida
LOOP AT ti_saida INTO wa_saida.
ULINE. "Imprime um linha contnua
*Imprime cada campo da tabela.
WRITE:/ '|', wa_saida-matnr, '|',
wa_saida-ersda, '|',
wa_saida-mtart, '|',
wa_saida-spras, '|',
wa_saida-maktx.
ENDLOOP.
ULINE.
ENDFORM.
" imprime_simples
*&---------------------------------------------------------------------*
*&
Form imprime_alv
*&---------------------------------------------------------------------*
FORM imprime_alv .
*Carrega dados do cabealho
PERFORM: f_alv_header.
*Define a indexao da impresso
PERFORM: f_alv_sort.
*Define as caractersticas dos campos
PERFORM: f_alv_fildcat.
*Imprime o relatrio
PERFORM: f_alv_imprime.
ENDFORM.
" imprime_alv
*&---------------------------------------------------------------------*
*&
Form f_alv_header
*&---------------------------------------------------------------------*
FORM f_alv_header .
*A tabela it_header, carregada com dados e caractersticas que sero
*usadas na impresso do cabealho do relatrio
*Carrega uma linha
CLEAR wa_header.
wa_header-typ =
wa_header-info =
APPEND wa_header

com um fonte maior para ttulo, tipo 'H'.

*Carrega uma linha


CLEAR wa_header.
wa_header-typ =
wa_header-key =
wa_header-info =
APPEND wa_header

com um fonte mdia para sub-ttulos, tipo 'S'.

'H'.
'Listagem de Impresso ALV'(001).
TO it_header.

'S'.
'Materiais'(002). "imprime uma parte em negrito
'Dados Mestres Materiais'. "imprime outra parte normal
TO it_header.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 43

DATA: l_linha(40) TYPE c.


l_data(10) TYPE c.
*Carrega uma linha com um fonte menor para detalhes, tipo 'A'.
WRITE sy-datum TO l_data.
CONCATENATE 'Data:' l_data INTO l_linha.
CLEAR wa_header.
wa_header-typ = 'A'.
wa_header-info = l_linha.
APPEND wa_header TO it_header.
ENDFORM.
" f_alv_header
*&---------------------------------------------------------------------*
*&
Form f_alv_sort
*&---------------------------------------------------------------------*
FORM f_alv_sort .
* A tabela it_sorte carrega a ordem dos campos
* na seguncia que deve ser impressa
DATA i TYPE i.
i = i + 1.
CLEAR wa_sort.
wa_sort-spos
wa_sort-fieldname
wa_sort-subtot
wa_sort-up
APPEND wa_sort TO

= i. "Sequncia da ordem
= 'MATNR'. "Campo da tabela interna - Cx alta.
= 'X'. "Quebra e subtotaliza valores por este campo
= 'X'. "Sort descendente
it_sort.

i = i + 1.
CLEAR wa_sort.
wa_sort-spos
= i.
wa_sort-fieldname = 'ERSDA'.
APPEND wa_sort TO it_sort.
i = i + 1.
CLEAR wa_sort.
wa_sort-spos
wa_sort-fieldname
wa_sort-subtot
wa_sort-up
APPEND wa_sort TO

= i.
= 'MTART'.
= 'X'. "Outro quebra de subtotal por este campo.
= 'X'.
it_sort.

ENDFORM.
" f_alv_sort
*&---------------------------------------------------------------------*
*&
Form f_alv_fildcat
*&---------------------------------------------------------------------*
FORM f_alv_fildcat .
*
*
*
*

A tabela it_fieldcat guarda todos os campos e suas caractersticas


que devero ser impressos no relatrio, somente estes campos sero
impressos, mesmo que haja outros campos na tabela interna de sada.
se forem para imprimir, eles devem estar carregados na it_fieldcat.
DATA i TYPE i.
i = i + 1.
CLEAR wa_afield.
wa_afield-col_pos
= i. "Ordem do fieldcat
wa_afield-fieldname
= 'MATNR'. "Nome do campo da tb. de sada
wa_afield-ref_fieldname = 'MATNR'. "Campo de refrncia para herdar caractersticas
wa_afield-ref_tabname
= 'ZMARA'. "Tabela transparente que tem o campo acima
wa_afield-key
= 'X'.
"Marca como chave
APPEND wa_afield TO it_fieldcat.
i = i + 1.
CLEAR wa_afield.
wa_afield-col_pos
wa_afield-fieldname

= i.
= 'ERSDA'.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 44

wa_afield-ref_fieldname = 'ERSDA'.
wa_afield-ref_tabname
= 'ZMARA'.
wa_afield-key
= 'X'.
APPEND wa_afield TO it_fieldcat.
i = i + 1.
CLEAR wa_afield.
wa_afield-col_pos
= i.
wa_afield-fieldname
= 'MTART'.
wa_afield-ref_fieldname = 'MTART'.
wa_afield-ref_tabname
= 'ZMARA'.
wa_afield-key
= 'X'.
APPEND wa_afield TO it_fieldcat.
i = i + 1.
CLEAR wa_afield.
wa_afield-col_pos
= i.
wa_afield-fieldname
= 'SPRAS'.
wa_afield-ref_fieldname = 'SPRAS'.
wa_afield-ref_tabname
= 'ZMARA'.
APPEND wa_afield TO it_fieldcat.
i = i + 1.
CLEAR wa_afield.
wa_afield-col_pos
= i.
wa_afield-fieldname
= 'MAKTX'.
wa_afield-ref_fieldname = 'MAKTX'.
wa_afield-ref_tabname
= 'ZMARA'.
APPEND wa_afield TO it_fieldcat.
ENDFORM.
" f_alv_fildcat
*&---------------------------------------------------------------------*
*&
Form f_alv_imprime
*&---------------------------------------------------------------------*
FORM f_alv_imprime .
* Depois que as tabelas auxiliares de impresso so carregadas...
* Os dados do Fieldcat, dever ser configurados na funo abaixo,
* para outra tabela auxiliar, neste caso a it_fcat.
* A estrutura wa_layout carrega as caractersticas do layout de
* impresso como por exemplo a otimizao das colunas ou se
* as linhas sero zebradas. Ela tambm ser configurada para w_lay.
*Transfere dados----------------------------------wa_layout-colwidth_optimize
= 'X'.
CALL FUNCTION 'REUSE_ALV_TRANSFER_DATA_BACK'
EXPORTING
it_fieldcat = it_fieldcat
is_layout
= wa_layout
IMPORTING
et_fieldcat = it_fcat
es_layout
= wa_lay.
*Imprime dados-------------------------------MOVE sy-repid TO v_repid.
MOVE v_repid TO wa_variant-report.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program
= v_repid
is_layout
= wa_lay
it_fieldcat
= it_fcat
i_callback_top_of_page = 'F_TOP_OF_PAGE'
i_background_id
= 'ALV_BACKGROUND'
it_sort
= it_sort[]
i_save
= v_save
is_variant
= wa_variant
TABLES
t_outtab
= ti_saida[]

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 45

EXCEPTIONS
program_error
OTHERS

= 1
= 2.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
STOP.
ENDIF.
ENDFORM.
" f_alv_imprime
*---------------------------------------------------------------------*
*
Form f_top_of_page
*---------------------------------------------------------------------*
FORM f_top_of_page .
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_header
i_logo
= 'ENJOYSAP_LOGO'.
ENDFORM.
" f_top_of_page
*&---------------------------------------------------------------------*
*&
Form limpa_tudo
*&---------------------------------------------------------------------*
FORM limpa_tudo .
CLEAR: ti_zmara[], ti_zmakt[], ti_saida[],
wa_zmara , wa_zmakt , wa_saida ,
v_repid
, v_save
, it_fcat[],
it_fieldcat[], it_header[], it_sort[],
wa_variant , wa_afield , wa_colinfo ,
wa_layout , wa_header , wa_lay , wa_sort .
ENDFORM.

" limpa_tudo

__________________________________________________________________________________

Criando um processo de Batch Input - Transao: SE38 ABAP Editor.


O Processo de Batch Input tem o objetivo de dar carga nas tabelas transparentes do SAP, porm
obedecendo todas as consistncias e integridades geradas pelas regras de negcio de cada transao.
Nenhuma carga no SAP efetuada diretamente no Banco de Dados (direct input tem que ser bem
estudado). O processo se divide em Mapeamento e Programa de Carga.
Transao: SHDB / Mapeamento Gravador de Transao.

Clique em
Nova Gravao

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 46

D um nome para Gravao, coloque o nome da


Transao que ser gravada e confirme.

Estude bem a transao que ser gravada, porque a


cada comando dado ser gravado o programa, a tela
e os dados de tela do momento. A gravao deve ser
a mais limpa e completa possvel, sem telas
desnecessrias ao processo e chegando at o
momento de salvar ou encerrar completamente; logo
aps, o mapeamento ser apresentado em uma
tabela. Salve.
No utilize matchcode. Pode colar e copiar mas
saiba exatamente quais os dados e os campos que
sero utilizados. ENTER comando igual boto.
Mandando processar, ser apresentado passo a
passo cada tela preenchida, somente aguardando a
confirmao dos comandos.
No final ser apresentado um relatrio com todas
as mensagens de Sucesso ou Erro dadas durante o
processo.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 47

Programa de Carga bsico de Batch Input.


A tela de parmetros de seleo ficar assim:

Cole o programa abaixo.


*&---------------------------------------------------------------------*
*& Report ZBATCH1
*&
*&---------------------------------------------------------------------*
REPORT zbatch1 LINE-SIZE 140 NO STANDARD PAGE HEADING.
*---------------------------------------------------------------------*
*
Declaraes
*---------------------------------------------------------------------*
* Tabelas transparentes
TABLES : zmara.
* Tipos
* Receber os dados importados para o SAP pela funo GUI_UPLOAD.
TYPES: BEGIN OF ty_arq,
matnr(18) TYPE c,
ersda(8) TYPE c,
mtart(4) TYPE c,
spras(2) TYPE c,
maktx(40) TYPE c,
END OF ty_arq.
* Tabelas internas
DATA: ti_arq TYPE STANDARD TABLE OF ty_arq.
* Work areas
DATA: wa_arq LIKE LINE OF ti_arq.
* Declaraes para o Batch Input--------------* Tipos:
* Recebe os dados configurados de ERRO do Batch Input + campos chaves.
TYPES: BEGIN OF ty_log,
matnr(18)
TYPE c,
ersda(8)
TYPE c,
tipo(1)
TYPE c,
msg_erro(100) TYPE c,
END OF ty_log.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 48

* Tabelas Internas auxiliares no processo de batch input.


DATA: ti_bdcdata
TYPE STANDARD TABLE OF bdcdata ,
"Guarda o mapeamento
ti_bdcmsgcoll TYPE STANDARD TABLE OF bdcmsgcoll, "Guarda as mensagens
ti_log
TYPE STANDARD TABLE OF ty_log.
"Relatrio de mensagens
* Work Areas
DATA: wa_bdcdata
LIKE LINE OF ti_bdcdata ,
wa_bdcmsgcoll LIKE LINE OF ti_bdcmsgcoll,
wa_log
LIKE LINE OF ti_log.
*Variveis
DATA: v_msg
v_msgv1
v_msgv2
v_msgv3
v_msgv4

LIKE
LIKE
LIKE
LIKE
LIKE

t100-text,
balm-msgv1,
balm-msgv2,
balm-msgv3,
balm-msgv4.

*---------------------------------------------------------------------*
*
Tela
*---------------------------------------------------------------------*
* Endereo do Txt.
* Batch Input
SELECTION-SCREEN BEGIN OF BLOCK b001 WITH FRAME TITLE text-001.
PARAMETERS: p_path(128) TYPE c, "Endereo de importao do arquivo TXT.
p_mode(1)
TYPE C DEFAULT 'N' . "Modo de execuo do batch input.
*O modos modos so: A - Passo a passo
N - Background
E - Erro.
SELECTION-SCREEN END OF BLOCK b001.
*Define Sada
SELECTION-SCREEN BEGIN OF BLOCK b002 WITH FRAME TITLE text-002.
*Grupo de botes que vo definir a maneira que o log ser impresso.
PARAMETERS:
p_spl RADIOBUTTON GROUP impr, " Impresso simples
p_alv RADIOBUTTON GROUP impr. " Impresso em ALV
SELECTION-SCREEN END OF BLOCK b002.
*---------------------------------------------------------------------*
*
Processamento
*---------------------------------------------------------------------*

START-OF-SELECTION.
* Busca dados
PERFORM busca_dados.
* Processa Dados
PERFORM executa_shdb.
* Sada
PERFORM imprime_log.
END-OF-SELECTION.
*Limpa todas as estruturas
PERFORM limpa_tudo.
*---------------------------------------------------------------------*
*
Subrotinas
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
*
Form busca_dados
*---------------------------------------------------------------------*
FORM busca_dados .
* A busca de dados (TXT) feita pela funo GUI_UPLOAD
DATA l_path TYPE string.
l_path = p_path.

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 49

CALL FUNCTION 'GUI_UPLOAD'


EXPORTING
filename
= l_path
TABLES
data_tab
= ti_arq
EXCEPTIONS
file_open_error
= 1
file_read_error
= 2
no_batch
= 3
gui_refuse_filetransfer = 4
invalid_type
= 5
no_authority
= 6
unknown_error
= 7
bad_data_format
= 8
header_not_allowed
= 9
separator_not_allowed
= 10
header_too_long
= 11
unknown_dp_error
= 12
access_denied
= 13
dp_out_of_memory
= 14
disk_full
= 15
dp_timeout
= 16
OTHERS
= 17.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
STOP.
ENDIF.
ENDFORM.

" busca_dados

*---------------------------------------------------------------------*
*
Form executa_shdb
*---------------------------------------------------------------------*
FORM executa_shdb .
CLEAR ti_log[].
* Para cada registro retornado pela importao do TXT.
LOOP AT ti_arq INTO wa_arq.
* Monta o SHDB da transao
PERFORM f_monta_bdc_data.
* Executa a transao
PERFORM f_call_trasaction.
* Tratamento de log de mensagens
PERFORM f_trata_log.
ENDLOOP.
ENDFORM.

" executa_shdb

*---------------------------------------------------------------------*
*
Form f_monta_bdc_data
*---------------------------------------------------------------------*
FORM f_monta_bdc_data .
CLEAR ti_bdcdata[].
* O Mapeamento feito no SHDB passado para o Cdigo no formato abaixo.
* O parmetro USING transporta cada contedo pra dentro do form f_bdc_data.
PERFORM f_bdc_data USING:
'SAPLZMARA' '0001' 'X' ''
'',
''
''
''
'BDC_OKCODE'
'=NEWL',
'SAPLZMARA' '0001' 'X' ''
'',
''
''
''
'BDC_OKCODE'
'=SAVE',
''
''
''
'ZMARA-MATNR(01)'
wa_arq-matnr,
''
''
''
'ZMARA-ERSDA(01)'
wa_arq-ersda,
''
''
''
'ZMARA-MTART(01)'
wa_arq-mtart.
ENDFORM.

" f_monta_bdc_data

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 50

*---------------------------------------------------------------------*
*
Form f_call_trasaction
*---------------------------------------------------------------------*
FORM f_call_trasaction .
CLEAR ti_bdcmsgcoll[].
CALL TRANSACTION 'ZMARA'
USING
ti_bdcdata
MODE
p_mode
UPDATE
'S'
MESSAGES INTO ti_bdcmsgcoll.
" f_call_trasaction

ENDFORM.

*---------------------------------------------------------------------*
*
Form f_trata_log
*---------------------------------------------------------------------*
FORM f_trata_log .
wa_log-matnr = wa_arq-matnr.
wa_log-ersda = wa_arq-ersda.
* Monta mensagem standard
LOOP AT ti_bdcmsgcoll INTO wa_bdcmsgcoll.
v_msgv1
v_msgv2
v_msgv3
v_msgv4

=
=
=
=

wa_bdcmsgcoll-msgv1.
wa_bdcmsgcoll-msgv2.
wa_bdcmsgcoll-msgv3.
wa_bdcmsgcoll-msgv4.

CALL FUNCTION 'MESSAGE_PREPARE'


EXPORTING
language
= wa_bdcmsgcoll-msgspra
msg_id
= wa_bdcmsgcoll-msgid
msg_no
= wa_bdcmsgcoll-msgnr
msg_var1
= v_msgv1
msg_var2
= v_msgv2
msg_var3
= v_msgv3
msg_var4
= v_msgv4
IMPORTING
msg_text
= v_msg
EXCEPTIONS
function_not_completed = 1
message_not_found
= 2
OTHERS
= 3.
IF sy-subrc <> 0 .
CLEAR wa_log-tipo.
v_msg = 'No houve mensagem'.
ENDIF.
wa_log-tipo
= wa_bdcmsgcoll-msgtyp.
wa_log-msg_erro = v_msg.
APPEND wa_log TO ti_log.
ENDLOOP.
ENDFORM.

" f_trata_log

*---------------------------------------------------------------------*
*
Form F_BDC_DATA
*---------------------------------------------------------------------*
*
-->P_program
programa
*
-->P_dynpro
tela
*
-->P_start
define a tela
*
-->P_fnam
nome do campo ou comando
*
-->P_fval
contedo do campo ou comando
*----------------------------------------------------------------------*

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 51

FORM f_bdc_data USING p_program p_dynpro p_start p_fnam p_fval.


* Este form recebe cada contedo passado em ordem para os parmetros de
* entrada e abaixo preenche a wa_bdcdata que por sua vez carrega a ti_bdcdata.
CLEAR wa_bdcdata.
wa_bdcdata-program
= p_program.
wa_bdcdata-dynpro
= p_dynpro.
wa_bdcdata-dynbegin = p_start.
wa_bdcdata-fnam
= p_fnam.
wa_bdcdata-fval
= p_fval.
APPEND wa_bdcdata TO ti_bdcdata.
ENDFORM.

" F_BDC_DATA

*---------------------------------------------------------------------*
*
Form imprime_log
*---------------------------------------------------------------------*
FORM imprime_log .
IF NOT p_spl IS INITIAL.
ULINE.
LOOP AT ti_log INTO wa_log.
WRITE: / '|', wa_log-matnr,
wa_log-ersda,
wa_log-tipo,
wa_log-msg_erro,
ULINE.
ENDLOOP.
ELSE.

'|',
'|',
'|',
'|'.

*********EXERCCIO*************
* COMPLETAR O PROGRAMA COM UM PROCESSO DE IMPRESSO
* EM ALV UTILIZANDO A ti_log COMO SADA.
ENDIF.
ENDFORM.

" imprime_log

*---------------------------------------------------------------------*
*
Form limpa_tudo
*---------------------------------------------------------------------*
FORM limpa_tudo .
CLEAR: ti_arq[], wa_arq,
ti_bdcdata[], ti_bdcmsgcoll[],
ti_log[], wa_bdcdata, wa_bdcmsgcoll, wa_log, v_msg ,
v_msgv1 , v_msgv2 ,
v_msgv3 ,
v_msgv4 .
ENDFORM.

" limpa_tudo

Autores: Emmanuel de Souza Lima emmanuel.cebola@gmail.com


ngela Cristina Junqueira angelacristina.junqueira@gmail.com

Pgina 52

Você também pode gostar