Вы находитесь на странице: 1из 134

Programação ABAP

Ac a d em ia AB AP

Aluno: __________________________________________________

Instrutor: Roberto F. Gritenas - rgritenas@bbko.com.br

© by BBKO Consulting 1
Programação ABAP

Índice
CAPÍTULO 1 – MYSAP ERP __________________________________________________ 3
CAPÍTULO 2 – CONCEITO DE BANCO DE DADOS RELACIONAL _______________ 9
CAPÍTULO 3 – DICIONÁRIO DE DADOS _____________________________________ 10
CAPÍTULO 4 – ABAP OPEN SQL ____________________________________________ 36
CAPÍTULO 5 – TELA DE SELEÇÃO__________________________________________ 47
CAPÍTULO 6 – LISTAS _____________________________________________________ 54
CAPÍTULO 7 – LISTAS SECUNDÁRIAS ______________________________________ 64
CAPÍTULO 8 – MODULARIZAÇÃO __________________________________________ 73
CAPÍTULO 9 – DATA TRANSFER____________________________________________ 80
CAPÍTULO 10 – PROGRAMAÇÃO ON-LINE __________________________________ 95
APÊNDICE A – PROGRAMAÇÃO ON-LINE__________________________________ 128
OS COMPONENTES PRINCIPAIS DE UM DIALOG PROGRAM (ON-LINE) __________________ 128
SCREEN PAINTER - ABAP/4 _________________________________________________ 128
COMUNICAÇÃO: TELA  ABAP/4 MODULE POOL ________________________________ 128
DEFININDO O LAYOUT (GRAPHICAL SCREEN PAINTER) _____________________________ 128
VISUALIZAÇÕES DE LISTAS DE CAMPO (FIELD LIST VIEWS) _________________________ 130
DEFININDO O CONTROLE DO FLUXO ____________________________________________ 130
PROCESSANDO O MODULE POOL ____________________________________________ 130
DEFININDO CAMPOS NO MODULE POOL ______________________________________ 131
DEFININDO CHAMADAS (CÓDIGOS DE TRANSAÇÃO) _______________________________ 131
CHECAGEM AUTOMÁTICA DE CAMPO DE ENTRADA ________________________________ 131
CHECANDO CAMPO DE ENTRADA NO MODULE POOL COM DIÁLOGO DE ERRO __________ 132
CHECANDO GRUPO DE CAMPOS _______________________________________________ 132
LENDO CÓDIGOS DE FUNÇÃO EM PROGRAMAS ___________________________________ 133
SEQÜÊNCIA DINÂMICA DE TELA: OVERVIEW _____________________________________ 133
AJUSTANDO A PRÓXIMA TELA DINAMICAMENTE _________________________________ 133
MENU PAINTER - OVERVIEW _________________________________________________ 133
DEFININDO A INTERFACE I ___________________________________________________ 133
DEFININDO A INTERFACE II __________________________________________________ 134
DEFINIÇÃO AUTOMÁTICA DE ÍCONES PARA TECLAS DE FUNÇÃO ______________________ 134
DEFININDO MENUS DE ÁREA _________________________________________________ 134

© by BBKO Consulting 2
Programação ABAP

Capítulo 1 – mySAP ERP

• O que é o mySAP ERP ?


• Funções do mySAP ERP .
• Arquitetura três camadas.
• Landscape.
• Sistema de Transporte.

O q u e é o m y S AP E R P ?

• O mySAP ERP é um conjunto integrado


de aplicativos para tratar o
processamento de dados de grandes
corporações.
• Foi desenvolvido na Alemanha pela
empresa SAP (Systems Applications
and Products for data processing-
Aplicativos e produtos de sistemas
para processamento de dados).
3

© by BBKO Consulting 3
Programação ABAP

F unções myS AP B us ines s S uite

BASIS

 Oferece uma solução integrada de aplicativos empresariais.

 Todos os módulos de aplicativos do mySAP ERP 2005 (ECC 6.0 Atual)


são escritos em ABAP (Advanced Business Application Programing),
que é interpretado pelo Application Server que fica localizado na
camada SAP NetWeaver, que por sua vez, são executadas no sistema
Operacional.

(SAP NetWeaver – é como um sistema operacional para o mySAP ERP


2005 (ECC 6.0). Ele fica entre o código ABAP e o sistema operacional.).

Módulos Localizados no MySAP ERP


 MM (Materials Management – Gerenciamento de Materiais)
 SD (Sales and Distribution – Vendas e Distribuição)
 FI (Financial Accounting – Contabilidade Financeira)
 PP (Production Planning – Planejamento da Produção)
 HR (Human Resources – Recursos Humanos)
 WF (Workflow – Fluxo de Trabalho)
 PS (Project System – Sistema de Projeto)
 e outros.

© by BBKO Consulting 4
Programação ABAP

P a péis e R es pons a bilida des

B a s is – R esponsá v el pela insta la çã o do E R P e config ura ções do mesmo


(ex. impressora s, links, a dministra çã o de usuá rios e etc.)

AB AP – P rog ra ma dor

F u n cion a is – R esponsá v el pela pa rametriza çã o e a dequa çã o dos proces sos de


um determina do módulo.

© by BBKO Consulting 5
Programação ABAP

Arquitetura 3 ca ma da s Cliente/S ervidor

O Sistema R/3 é baseado na arquitetura cliente/servidor com 3 camadas:


Servidor de dados, servidor de aplicações e servidor de apresentação.
A arquitetura de 3 (três) camadas faz o sistema facilmente escalável. Para
adicionar usuários, você precisa instalar mais servidores de apresentação.
Você pode também aumentar a eficiência do todo o sistema adicionando mais
servidores de aplicação associados aos seus work precesses.
Servidor de aplicativos, consiste em um dispatcher e múltiplos processos
de trabalho (work processes). Todas as solicitações provenientes de
servidores de apresentação são dirigidas primeiro ao dispatcher. O dispatcher
grava-as primeiro na camada do dispatcher. O dispatcher extrai as
solicitações da camada utilizando o algoritmo primeiro a entrar, primeiro a
sair. Cada solicitação é então alocada para o primeiro work processes
disponível. Um work processes trata uma solicitação por vez.

Tipo de processo Tipo de solicitação de trabalho


D (Dialog) Solicitações de diálogo.
V (Update) Solicitações para atualizar dados no banco de dados.
B (Background) Trabalhos de segundo plano.
S (Spool) Imprime solicitações do spool.
E (Enqueue) Solicitações de bloqueio lógico.
M (Message) Roteia as msgs. entre os serv. de aplicativo dentro do sistema R/3.
G (Gateway) Afunila as mensagens dentro e fora do sistema R/3.

© by BBKO Consulting 6
Programação ABAP

S ys tem La nds ca pe
Sistema de Desenvolvimento Sistema de QA Sistema de Produção

PROD
DEV QTST

Client Client
Copy Copy
Client
Client Transport
MAST MAST
Transport

Client Client
Copy Copy

SBOX TRAI

Client-indep. Client-indep.
Client-indep.
Customizing Workbench Workbench Customizing
Customizing
Repository Request Repository
Request Repository
Objects Objects
Objects

© by BBKO Consulting 7
Programação ABAP

Workbench Org a nizer e o S is tema de


Tra ns porte

O Workbench Organizer permite ao usuário desenvolver o software de


maneira organizada.
O Sistema de transporte prove a execução do transporte.
Os objetos de repositório são conectados para o sistema de transporte
pela classe de desenvolvimento e associações com change requests. Depois
que as requests foram liberadas no sistema de desenvolvimento, ela é então
transportada para a rota pré determinada: sistema de qualidade ou para o
sistema de produção.

© by BBKO Consulting 8
Programação ABAP

Capítulo 2 – Conceito de Banco de Dados Relacional

Conceito de
B a nco de Da dos
R ela ciona l

Conceito de B a nco de Da dos

• Ca mpo
• R eg is tro
• Coluna
• Ta bela
• Unicida de de R eg is tro – Cha ve P rima ria (P K) e Cha ve
Alterna tiva (AK)
• R ela ciona mento – Cha ve E s tra ng eira (F K)
• ¸ndice

© by BBKO Consulting 9
Programação ABAP

Capítulo 3 – Dicionário de Dados

Dicioná rio de Da dos

© by BBKO Consulting 10
Programação ABAP

Dicioná rio de Da dos

• Domínio
• Elemento de Dados
• Campos
• Registros
• Tabelas
– Transparentes
– Interna

 O Dicionário Abap permite um gerenciamento central de todas as


definições de dados usada no sistema R/3

 No Dicionário você pode criar tipos definidos pelo usuário (data elements,
estruturas e table types). Objetos de banco de dados, tais como tabelas e
views de banco de dados, também podem ser definidas no Dicionário
ABAP e criada com estas definições no banco de dados.

 O Dicionário ABAP também provê um número de serviço que apóiam o


desenvolvimento de programas. Por exemplo, lock de tabelas, search help
(F4) e ajuda de campo (F1 help) usados nos campos de uma tela.

© by BBKO Consulting 11
Programação ABAP

Dicioná rio de Da dos - Tip os n o


Dic ion á rio AB AP

10

Dicioná rio de Da dos - Tip o de Da dos


m a is u tiliza dos
Tipo Descrição

CHAR String de caractere (máximo de 255


caracteres)
DEC Valores decimais
DATS Campo Date
TIMS Campo Time
INT1, INT2, INT4 Valores inteiros
NUMC Campo de caractere que pode
conter apenas numéricos

11

© by BBKO Consulting 12
Programação ABAP

Dicioná rio de Da dos - Tip os de Da dos


AB AP
Tipos de Dados

T1 TYPE I. T2(5) TYPE P.

DATA D3 TYPE T1 DATA D5 TYPE T2


DATA D1 TYPE T1 DATA D6 TYPE T2.
VALUE 123, VALUE ‘1.23’

Grupo de Tipos

12

 Data types:
 Apenas descrição do ‘type’
Não ocupa memória
 Caracteriza os atributos técnicos de todos os data objects que
possuem um type especificado

 Data Objects:
 É uma concreta representação do type
 Cada data object tem um type específico e ocupa espaço em
memória

© by BBKO Consulting 13
Programação ABAP

Dicioná rio de Da dos - Ob jetos B á s ic o


n o Dic ion á rio
Tabela 1 Tabela 2
Campo Campo
.... Valor_compra ... .... Valor_venda
Material
...
Material Uma tabela é
composta de
campos

Elemento de Dados Elemento de Dados


Para criar um
MATNR Campo, você
MATNR
precisa de um
Elemento de
Dados

Domínio Domínio
MATNR Uma definição MATNR
de elemento de
dados exige um
domínio

13

 Os objetos básicos do Dicionário ABAP são: tabelas, data elements e


domínios
 Domínio descreve os atributos técnicos dos campos das tabelas (ex:
type , tamanho do campo), enquanto os data elements contém a definição
semântica (descrição curta)

© by BBKO Consulting 14
Programação ABAP

Dicioná rio de Da dos - Cria r Dom í n io


Transação SE11

14

Dica: ao criar a tabela e seus data elements, associar a mesma Change


Request, para não dar problema durante o transporte de Desenvolvimento
para QA

© by BBKO Consulting 15
Programação ABAP

Dicioná rio de Da dos - Cria r Dom í n io


Transação SE11

15

Dicioná rio de Da dos - Cria r E lem en to


de Da dos
Transação SE11

16

© by BBKO Consulting 16
Programação ABAP

Dicioná rio de Da dos - Cria r E lem en to


de Da dos
Transação SE11

17

Dicioná rio de Da dos - Cria r E lem en to


de Da dos
Transação SE11

18

© by BBKO Consulting 17
Programação ABAP

Dicioná rio de Da dos - Cria r E lem en to


de Da dos
Transação SE11

19

Dicioná rio de Da dos - Tip os de Ta bela s


n o R /3
• Tabelas Transparentes
- Uma tabela transparente tem relacionamento um-para-um com uma tabela
no banco de dados.
- Nós criamos somente tabelas transparentes
• Tabelas de Pool
- Uma tabela de pool tem um relacionamento de muitos-para-um com uma
tabela no banco de dados. Para uma tabela no banco de dados, há muitas
tabelas no Dicionário.
• Tabelas de Cluster
- Uma tabela de Cluster tem um relacionamento de muitos-para-um com uma
tabela no banco de dados. Para uma tabela no banco de dados, há muitas
tabelas no Dicionário. Muitas tabelas de cluster de cluster são armazenadas
em uma única tabela no banco de dados chamada de cluster de tabelas. Os
clusters de tabela armazenam dados de várias tabelas baseadas nos
campos de chave primária que elas têm em comum.

20

© by BBKO Consulting 18
Programação ABAP

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Transação SE11

21

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Pasta “Características”

22

© by BBKO Consulting 19
Programação ABAP

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
P a sta „E ntreg a e Atua liza çã o‰

27

© by BBKO Consulting 20
Programação ABAP

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Pasta “Campos”

24

O primeiro campo de uma tabela sempre deve ser o mandante;


 O campo Num_documento não tem nenhum data element associado a ele,
este campo é do tipo , apenas informo o tipo do
campo, seu tamanho e sua descrição.
 O Campo Usuário, utiliza o data element ‘UNAME’
 O Campo Data, utiliza o data element ‘DATUM’
 O Campo Material, utiliza o data element ‘MATNR’
 O Campo Valor, utiliza o data element ‘BWERT’
 O Campo Quantidade, utiliza o data element ‘BSTMG’

 O Campo Material possui check table, ou seja durante qualquer


manutenção da tabela Z ou Y, é checado se o material gravado nesta tabela,
existe na tabela Mestre de Material (MARA)

© by BBKO Consulting 21
Programação ABAP

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Pasta “Entrs. Possíveis/Verificações”

25

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Pasta “Campos Moeda/Quant.”

26

 Para campos do tipo moeda (valores) e quantidade, é necessário definir


tabela e campo de referência.

© by BBKO Consulting 22
Programação ABAP

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Check Table no Campo Material

27

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Check Table no Campo Material

28

© by BBKO Consulting 23
Programação ABAP

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Check Table no Campo Material

29

- Atribuir uma mensagem de erro para este check table.


- Neste caso foi criada uma classe de mensagem ZCURSO_00, com
número de mensagem 001, através da Transação SE91

© by BBKO Consulting 24
Programação ABAP

Dicioná rio de Da dos - Cha ves -


P rim á ria s e E s tra ng eira

Ch a v e P rim á ria

Ch a v e S ec u n d á ria

Ch a v e E s tra n g é ira

34

Dicioná rio de Da dos - Cha ves – P rim á ria s


e E s tra n g eira

Tabela ZFUNC
Mand CodFunc Cod Depto Nome Salario Area

Campos Chaves Check Table


Chave Primária Chave Estrangeira

Check Table ZDEPTO


Mand CodDepto Fone Fax

Campos Chaves
Chave Primária

31

© by BBKO Consulting 25
Programação ABAP

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Configurações Técnicas

32

© by BBKO Consulting 26
Programação ABAP

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Opções Técnicas

33

 Opções Técnicas:
Data Class – Define a área física do banco de dados, na qual a tabela deve
ser armazenada (no Oracle é o tablespace). Size category – Define o
tamanho do armazenamento esperado para esta tabela no banco de dados.
Buffering – define se e como a tabela deve ser ‘bufferizada’. Logging –
Modificações na entrada da tabela são armazenadas, mas também tem que
setar o parâmetro ‘rec/client’ (pode provocar ‘gargalos’ no sistema (devido a
esses adicionais acessos).

© by BBKO Consulting 27
Programação ABAP

Dicioná rio de Da dos - Cria r Ta bela


Tra n s p a ren te
Ativar Tabela

34

 Ao selecionar o ícone ativar no ABAP Dicitionary, a tabela transparente


é automaticamente criada no banco de dados. A tabela no banco de dados
possui o mesmo nome da tabela no ABAP Dictionary . O campo tem também
os mesmos nomes e os tipos do campo no ABAP Dicitionary são convertidos
para os tipos de dados correspondentes no sistema do banco de dados.

© by BBKO Consulting 28
Programação ABAP

Dicioná rio de Da dos - Cria r E s tru tura

35

Dicioná rio de Da dos - Cria r E s tru tura

36

© by BBKO Consulting 29
Programação ABAP

Dicioná rio de Da dos - Cria r E s tru tura

Pasta “Componentes”

37

Na criação da estrutura não precisa definir o mandante, pois armazena os


dados somente em tempo de execução.

Dicioná rio de Da dos - Cria r E s tru tura

Pasta “Campos moeda/quantidade”

38

© by BBKO Consulting 30
Programação ABAP

Ta b ela In tern a

43

Ta b ela In tern a - Con c eito

˘ rea s d e m em ó ria c h a m a d a s „ Ta b ela s In terna s ‰ , s ã o


u tiliza d a p a ra rea liza r a lg u n s p roc es s a m en tos n o AB AP .
Nes s a s á rea s de m em ó ria s ã o a loc a dos da d os q u e exis tem
(ou exis tirã o) a p en a s em tem p o d e exec u ç ã o do p rog ra m a ,
e q ue p od em v a ria r d e u m a exec u ç ã o p a ra outra ou a in d a
d u ra n te a m es m a exec u ç ã o.

44

© by BBKO Consulting 31
Programação ABAP

Ta b ela In tern a - Con c eito

No d ia -a -d ia d o p rog ra m a d or a s ta b ela s in tern a s têm u m


p a p el fu n d a m en ta l, p ois é a tra v é s d ela s q ue s e m a n ip u la a
m a ior p a rte dos d a dos d e u m p rog ra m a . Alé Al é m d is s o, s ã o d e
f á c il m a n u s eio, s en d o s u a d ec la ra ç ã o (d e tip os , es tru tu ra ) e
a trib u iç
i ç ã o d e c onte ú do (v a lores ) m u ito s im p les . É p os s í v el,
p or exem p lo, d ec la ra r u m a ta b ela in tern a c om a m es m a
es tru tu ra (tip os , c a m p os , etc .) d e u m a ta b ela do b a n c o de
d a dos (f í s ic o – ta b ela s tra n s p a ren tes ), e, a tra v é s d e u m
c om a n d o „ S E L E CT‰
CT ‰ , c op ia r tod o o c on te ú d o d a ta b ela do
b a nc o d e da dos p a ra a ta b ela in tern a .

45

Dica s - Ta b ela In terna - Con c eito

As ta b ela s in terna s p os s u em um a á rea d e tra b a lh o


c h a m a d a Hea d er‰
er‰ (c a b e ç a lh o), q u e p erm ite o a c es s o e u s o
m a is flexí
flex í v el dos reg is tros d a m es m a . O c om a n d o „ L OOP ‰ ,
p or exem p lo, a o „ v a rrer/ler‰
rrer/ler‰ u m a ta b ela in tern a reg is tro a
reg is tro, en v ia o reg is tro c orren te p a ra o „ Hea d er‰ er‰ ,
p erm itin d o q u e o p rog ra m a dor m a n ip u le es s e reg is tro d e
d ivers a s m a n eira s .

E xem p lo: Im p rim í -los n a tela (com a n d o WRITE ), u tiliza n d o


s eus c a m p os p a ra exec u ta r c á lc u los , c om p a ra r v a lores , etc .

46

© by BBKO Consulting 32
Programação ABAP

Dica s - F ield S trin g x Ta b ela Intern a

Field String
Cod Cliente Nome Cidade Rua Bairro

Tabela Interna
Cod Cliente Nome Cidade Rua Bairro
Header

47

Dica s - F ield S trin g e Ta b ela Intern a

Decla ra ndo F ield S tring


R E P OR T ZR E P OR T01.
TAB LE S : KNA1.
DATA: B E GIN OF F IE L D_CL IE NTE .
K UNNR L IKE K NA1-
NA1 -K UNNR ,
NAM E 1 L IKE K NA1-
NA1 - NAM E 1,
KNA1--OR T01,
OR T01 L IKE KNA1
S TR AS L IK E K NA1-
NA1 - S TR AS ,
OR T02 L IKE KNA1-
KNA1- OR T02,
E ND OF F IE L D_CL IE NTE .
S E LE CT *
F R OM KNA1
WHE R E LAND1 = ÂB R Ê AND
R E GIO = ÂS P Ê
MOVE -COR R E S P ONDING KNA1 TO F IE LD_CLIE NTE .
WR ITE : ÂCliente: Ê, KNA1-KUNNR , KNA1-NAME 1, KNA1-OR T01, KNA1-S TR AS .
E NDS E LE CT.

48

© by BBKO Consulting 33
Programação ABAP

Dica s - F ield S trin g e Ta b ela Intern a

Decla ra ndo Ta bela s Interna s


* Declara ç ã o de Tipos
Ty pe : b eg in of ty p e_c lien tes ,
ku n n r like kn a 1-
1-ku n n r,
r,
n a m e1 like kn a 1-
1 -n a m e1,
a ddrn r like kn a 1-
1 -a ddrn r,r,
en d of ty p e_c lientes .

* Declara ç ã o de Ta bela s Interna s


Da ta : T_CL IE NTE S ty p e_c lien tes oc c u rs 0 with h ea d er lin e.
e.
OU
Da ta : B E GIN OF T_CL IE NTE S OCCUR S 0,
ku n n r like kn a 1-
1 -ku n n r,
r,
n a m e1 like kn a 1-
1 -n a m e1,
a ddrn r like kn a 1-
1-a ddrn r, r,
E ND OF T_CL IE NTE S .
OU
DATA : B E GIN OF T_K NA1 OCCUR S 0.
in c lu de s tru c tu re kn a 1.
DATA : E ND OF T_K NA1.

49

Dica s - Ta b ela In tern a

Operações em tabelas internas:


Exemplos: Utilizando a tabela interna T_CLIENTES:

1.Read Table T_CLIENTES index 2.


Read Table T_CLIENTES with key kunnr = v_codcli.

2.Loop at t_clientes. ... Endloop.

3.T_CLIENTES-name1 = ‘Phonecell telefonia celular’.


Modify t_clientes.

4.Delete t_clientes where kunnr = v_codcliente.

5.Append t_clientes.

44

© by BBKO Consulting 34
Programação ABAP

Dica s - Ta b ela In tern a

Operações em tabelas internas:


Exemplos: Utilizando a tabela interna T_CLIENTES:

6. Collect t_clientes.

7. Sort t_clientes by kunnr name1 . (Ordena a tabela interna)

8. Clear t_clientes. (Limpa o header line)

9. Refresh t_clientes.(Deleta todos os registros da tabela interna,


porem o espaço de memória ainda fica ocupada)

10.Free t_clientes. Deleta todos os registros da tabela interna, limpa


a memória)

(obs: No comando ‘Refresh’ e ‘Free’ o header line não é alterado)

11. Describe table t_clientes lines vg_linhas (carrega o número de


registros da tabela interna na variável vg_linhas)

45

Dica s - Ta b ela In tern a – AP P E NG


<ta b > X COL L E CT <ta<ta b >
Inclui o header line ou como uma nova
entrada na tabela interna ou adiciona
-Grava o conteúdo do Header Line no fim
numa entrada já existente desde que tenha
da tabela interna
a mesma estrutura. Soma os campos do
tipo P,I e F)

APPEND <TAB> COLLECT <TAB>

Cod Func Cod Depto Salário Cod Func Cod Depto Salário

9944 HR 1000,00 9944 HR 1000,00

9944 HR 1000,00 9944 HR 1000,00

9933 INFO 500,00 9933 INFO 500,00

0100 FINAN 2000,00 0100 FINAN 2000,00

2000,00

46

© by BBKO Consulting 35
Programação ABAP

Capítulo 4 – ABAP Open SQL

Open S QL

47

AB AP Open S QL - Acessando a
base de dados

• SELECT
• INSERT
• DELETE
• UPDATE
• MODIFY

48

© by BBKO Consulting 36
Programação ABAP

AB AP Open S QL – S elect – S inta x

S E LE CT ma tnr Ca m pos S elecionados


INTO TABLE tg _ma ra Des tino dos da dos (Ta bela Interna )
F R OM ma ra Orig em dos da dos (Ta bela Tra ns pa rente)
WHE R E ma tnr = p_ma tnr. Condiçã o pa ra a s eleçã o dos da dos

DATA: B E GIN OF tg _ma ra OCCUR S 0,


matnr TYP E ma ra -matnr,
E ND OF tg _mara .
E x. Decla ra ções pa ra
ta bela interna
DATA: B E GIN OF tg _ma ra OCCUR S 0,
matnr TYP E mara -ma tnr,
fla g (1) TYP E c,
E ND OF tg _ma ra .
55

© by BBKO Consulting 37
Programação ABAP

AB AP Open S QL - Ac es s o a o B a n c o
de Da dos

Programa ABAP

Dicionário
ABAP Open SQL Banco de Dados

Relatório

49

- Para ler os dados das tabelas do banco de dados, você precisa utilizar o
comando SELECT
- O ABAP contém comandos similares ao do SQL padrão, na qual você pode
acessar seu banco de dados. ABAP OPEN SQL tem as seguintes
características:
- Sintaxe corresponde à sintaxe do SQL padrão
- O ABAP SQL é um subconjunto do SQL padrão
- O ABAP SQL contém SAP short forms

- As tabelas devem ser definidas no Repositório ABAP e tem chave primária.

© by BBKO Consulting 38
Programação ABAP

AB AP Open S QL - Ac es s o a o B a n c o
de Da dos
Acesso de um registro – SELECT SINGLE
•Seleciona dados do cliente código 10

Report ZSQL.
Tables: KNA1

Data: w_kunnr like kna1-kunnr,


w_name1 like kna1-name1,
w_addrnr like kna1-addrnr.

Select SINGLE KUNNR “Código do cliente


NAME1 “Nome
ADDRNR “Rua e Nr.
into (w_kunnr, w_name1, w_addrnr)
From kna1 “Tabela de clientes
Where kunnr = ‘0000000010’.

Para fazer SELECT SINGLE, você precisa passar como parâmetro na condição ‘WHERE’ a
chave completa da tabela.
Neste exemplo acima, os campos selecionados foram armazenados em variáveis de
memória, declarados no comando ‘DATA’

50

AB AP Open S QL - Ac es s o a o B a n c o
de Da dos
Processa em LOOP – SELECT e ENDSELECT
* Seleciona os clientes de São Paulo

SELECT *
From kna1 “Tabela de clientes
Where land1 = ‘BR’ and
regio = ‘SP’.

Move-corresponding kna1 to t_clientes.


Append t_clientes.

ENDSELECT.

Acessa a tabela e a cada registro encontrado, atendendo a condição ‘WHERE’ os dados


são movidos para uma tabela interna.

51

© by BBKO Consulting 39
Programação ABAP

AB AP Open S QL - Ac es s o a o B a n c o
de Da dos
Move campos para tabela interna, não fica em LOOPING
* Seleciona documentos de venda dos clientes de São Paulo

Select KNA1~KUNNR “Código do cliente


KNA1~NAME1 “Nome
VBAK~VBELN “Numero do documento de venda
Into Table T_DOCVENDAS
From kna1 “Tabela de clientes
Inner join vbak on vbak~kunnr = kna1~kunnr
Where kna1~land1 = ‘BR’ and
kna1~regio = ‘SP’.

INTO TABLE: Lê os registros da tabela e move para uma tabela interna. Sobrepõe os
registros existentes.
APPENDING TABLE: não sobrepõe os registros existentes, ele move para o fim da tabela
interna.

52

AB AP Open S QL - J oin en tre Ta b ela s


INNE R J OIN

Tabela MAKT
Mand SPRAS MATNR MAKTX

Check Table Check Table MARA


Campos Chaves
Chave Estrangeira
Chave Primária Mand MATNR

Campos Chaves
Chave Primária
SELECT mara~matnr makt~maktx
INTO TABLE tg_materiais
FROM mara
INNER JOIN makt ON makt~matnr = mara~matnr AND
makt~spras = sy-langu
WHERE mara~matnr = p_matnr.

53

© by BBKO Consulting 40
Programação ABAP

AB AP Open S QL - J oin en tre Ta b ela s


F OR AL L E NTR IE S

S E LE CT ma tnr
INTO TABLE tg _ma ra
F R OM ma ra
WHE R E ma tnr = p_ma tnr.

IF s y-s ubrc = 0.
S E LE CT ma tnr ma ktx Obs. A tabela interna utilizada no
INTO TAB LE tg _ma kt FOR ALL ENTRIES NUNCA deve
F R OM ma kt estar vazia no momento da seleção.
Pois isso irá acarretar a seleção de
F OR AL L E NTR IE S IN tg _ma ra todos os registros da tabela utilizada
WHE RE ma tnr = tg _ma ra -ma tnr. na clausula from.
E NDIF .
54

AB AP Open S QL - Ac es s o a o B a n c o
de Da dos

Acesso: Insert
TABLES ZTABELA

ZTABELA-MATNR = ‘10'.
ZTABELA-CAMPO2 = ‘002'.
ZTABELA-CAMPO3 = ‘INSERT'.

INSERT INTO ZTABELA VALUES ZTABELA.

53

© by BBKO Consulting 41
Programação ABAP

AB AP Open S QL - Ac es s o a o B a n c o
de Da dos

Acesso: Delete
TABLES ZTABELA.

DELETE FROM ZTABELA


WHERE MATNR = ‘10'.

54

AB AP Open S QL - Ac es s o a o B a n c o
de Da dos

Acesso: Update
UPDATE ZTABELA
SET: CAMPO2 = '002', CAMPO3 = ‘UPDATE'
WHERE MATNR = ‘20'.

55

© by BBKO Consulting 42
Programação ABAP

AB AP Open S QL - Ac es s o a o B a n c o
de Da dos

Acesso: Modify
TABLES ZTABELA.

ZTABELA-MATNR = ‘30'.
ZTABELA-CAMPO2 = ‘002'.
ZTABELA-CAMPO3 = ‘MODIFY'.

MODIFY ZTABELA.

Comando MODIFY: ou altera um registro já existente ou se não existe, adiciona um novo.

56

© by BBKO Consulting 43
Programação ABAP

Tip os d e
P rog ra m a s

66

Dica s - Tip os de P rog ra m a s

• Relatórios
- O programa consiste em duas telas, a primeira tela é chamada
de tela de seleção (selection screen) , nesta tela você define
os critérios do relatório e filtros. A segunda tela é a tela de
saída, contém a lista.

• Programas de Diálogo (Dialog / On-Line)


- O programa pode ter várias telas, em cada tela você pode ter
dados de entrada, saída, botões, table control...

• Includes

58

© by BBKO Consulting 44
Programação ABAP

Dica s - E ditor AB AP
Transação SE38, para Relatórios/Includes

59

-Os relatórios consistem em cinco componentes:


- Código Fonte
- As Características
- Os elementos de texto
- A documentação
- As variantes

© by BBKO Consulting 45
Programação ABAP

Dica s - Dec la ra ç ões „ B á s ic a s ‰ n os


p rog ra m a s AB AP
- Tables – Define de tabelas ou estruturas com o mesmo nome existente no
Dicionário de Dados.
- Types – Definição de Tipos de Dados.
- Data - Define campos, variável ou string de campo.
- Constants – Define um campo/variável com valor constnte, ou seja, não
poderá ser alterado.

Exemplo:
Report Zteste.
Tables: Mara.

Types: ty_campo2(2) type c,


ty_documento like bseg-ebeln.

Data: vg_campo1 type ty_campo2 value ‘XX’,


vg_campo2 type ty_documento.

Constants c_X(1) type c value ‘X’.


60

© by BBKO Consulting 46
Programação ABAP

Capítulo 5 – Tela de Seleção

Tela de S eleçã o

63

Tela de S eleçã o

• Tela de Seleção
• Eventos da Tela de Seleção

62

© by BBKO Consulting 47
Programação ABAP

Tela de S eleçã o - E xem p lo de


P a ra m eters

63

© by BBKO Consulting 48
Programação ABAP

Tela de S eleçã o - E xem p lo de


S elec t-
t-op tion s

64

-Internamente é gerada uma tabela interna so_func com 4 colunas:


- SIGN ( I – Include / E – Exclude)
- OPTION (EQ,NE,CP,NP,GE,LT,LE,GT, BT )
- LOW ( Intervalo – menor valor)
- HIGH ( Intervalo – maior valor)

-Você pode inicializar os valores do select-option no evento initialization, por


exemplo:

INITIALIZATION.
MOVE: 'I' TO SO_FUNC-SIGN,
'EQ' TO SO_FUNC-OPTION,
’1’ TO SO_FUNC-LOW.
APPEND SO_FUNC.

© by BBKO Consulting 49
Programação ABAP

Tela de S eleçã o - S elec tion -s c reen em


b loc os

SELECTION-SCREEN BEGIN OF BLOCK <block>


... WITH FRAME
... TITLE title
SELECTION-SCREEN END OF BLOCK <block>

SELECTION-SCREEN BEGIN OF BLOCK entre WITH FRAME TITLE text-001.


parameters:
* Nome do arquivo entrada
p_arqori like rlgrap-filename obligatory.
parameters :
p_asc radiobutton group g1 default 'X', " Tipo ASC
p_dat radiobutton group g1. " Tipo DAT

parameters :
p_pc radiobutton group g3 default 'X', " Tipo PC
p_unix radiobutton group g3. " Tipo UNIX

SELECTION-SCREEN END OF BLOCK entre.

66

Tela de S eleçã o - E v en tos da Tela de


s eleç
ele ç ã o

67

© by BBKO Consulting 50
Programação ABAP

Tela de S eleçã o - E v en tos em B loc o

Report Z...

Parameters: p_data like sy-datum default sy-datum.

Initialization. “Seta valores para a tela de seleção


p_data = p_data – 10.

Start-of-Selection. “Início do processamento dos dados


Write: p_data.

A seqüência dos eventos no código fonte não tem efeito na sequencia na qual eles são chamados pelo
ABAP Runtime System

68

Dica s

71

© by BBKO Consulting 51
Programação ABAP

Dica s - P roc es s a n do S trin g s

Example
DATA letters(3) TYPE C.
MOVE 'abc' TO letters.
TRANSLATE letters TO UPPER CASE.

letters now has the contents 'ABC'

Example
DATA: letters(20) TYPE C VALUE 'abcabcabcXabc',
change(15) TYPE C VALUE 'aXbaYBabZacZB'.
TRANSLATE letters USING change.

letters now contains 'XaZXaZXaZXXaZ'

70

Dica s - P roc es s a n do S trin g s

Exemplo
DATA NAME (30).
NAME(10) = ' Dr.',
NAME+10(10) = 'Michael',
NAME+20(10) = 'Hofmann'.
CONDENSE NAME.
WRITE NAME.

produces the output:


Dr. Michael Hofmann

Exemplo:
Alinha o material a direita e preenche com zeros a esquerda

SHIFT V_MATNR RIGHT DELETING TRAILING SPACE.

REPLACE ' ' WITH '0' INTO V_MATNR.

71

© by BBKO Consulting 52
Programação ABAP

Dica s – LOOP ´s

• DO ... ENDDO

• WHILE ... ENDWHILE

• LOOP ... ENDLOOP

• SELECT ... ENDSELECT

72

© by BBKO Consulting 53
Programação ABAP

Capítulo 6 – Listas

Lis ta s

84

L is ta s

• Formatação de Saída das Listas


• Definir o Formato das listas
• Armazenar Listas
• Imprimir Listas
• Controle de Nível das Listas, utilizando tabela Interna

82

© by BBKO Consulting 54
Programação ABAP

Lis ta s - F orm a ta ç ã o da s L is ta s

• Parâmetros de Saída:
– Write ...
– Format ...
– New-Page ...
• Eventos
– TOP-OF-PAGE.
– END-OF-PAGE.
• Elementos de Texto
– Text Symbols
– Heading
– Selection texts
• System fields (tabela Syst)

83

© by BBKO Consulting 55
Programação ABAP

Lis ta s - E xem p lo dos c om a n dos

Report Rel1.
DATA: DATUM Type D,
TIME TYPE T.

DATUM = SY-DATUM.
TIME = SY-UZEIT.

WRITE: 5 ‘Data’(001),
20 DATUM DD/MM/YYYY.
WRITE: /5 ‘Hora’ (002),
TIME using edit mask ‘_ _:_ _:_ _’
under datum.

84

-WRITE:
-Comando que gera saída de dados no relatório.
-Exemplo: WRITE 'Hello, here I am!'.

-System fields (tabela SYST):


-Alguns campos da tabela SYST sao interessantes para uso em
reports:
-SY-PAGNO:
-Numerous da pagina.

-SY-DATUM:
-Data atual.

-SY-UZEIT:
-Hora atual.

-SY-UNAME:
-Usuário do login.

© by BBKO Consulting 56
Programação ABAP

Lis ta s - E xem p lo u s a n do  F orm a tÊ


Report Rel1.
DATA: DATUM Type D,
TIME TYPE T.

DATUM = SY-DATUM.
TIME = SY-UZEIT.

Format color col_normal.


WRITE: 5 ‘Data’(001),
20 DATUM DD/MM/YYYY.
Format color off.
WRITE: /5 ‘Hora’ (002),
TIME using edit mask ‘_ _:_ _:_ _’
under datum.

85

-FORMAT:
-Através do FORMAT pode-se manipular o formato dos dados a serem
apresentados com WRITE. Pode-se controlar a color, intensidade, etc.

© by BBKO Consulting 57
Programação ABAP

Lis ta s - E xem p lo u s a n do  New P a g eÊ


Com o parâmetro New-Page, você pode forçar uma nova página.


O contador de página é ajustado automaticamente e o cabeçalho específico é
exibido.
Report Rel1.
DATA: DATUM Type D,
TIME TYPE T.
* Nova página
NEW_PAGE.
Write: /5 ’Usuário’(003), sy-uname,
80 text-001, sy-page. “Página
DATUM = SY-DATUM.
TIME = SY-UZEIT.
Format color col_normal.
WRITE: 5 ‘Data’(001),
20 DATUM DD/MM/YYYY.
Format color off.
WRITE: /5 ‘Hora’ (002),
TIME using edit mask ‘_ _:_ _:_ _’
under datum.
86

-NEW-PAGE:
-Salta uma pagina do relatório.

© by BBKO Consulting 58
Programação ABAP

Lis ta s - Top -of -p a g e e E n d -of -p a g e

Você pode usar o parâmetro NO STANDARD PAGE HEADING no parâmetro do REPORT para
desabilitar a linha de cabeçalho do sistema.
Se uma nova página é iniciada o sistema chama o evento TOP-OF-PAGE.
Report Rel1 NO STANDARD PAGE HEADING
line-size 132
line-count 15.
DATA: DATUM Type D,
TIME TYPE T.
* Nova página
TOP-OF-PAGE.
Write: /5 ’Usuário’(003), sy-uname,
80 text-001, sy-pagno. “PáginaO END-OF-PAGE não ocorre quando a quebra de página
foi chamada por um evento NEW-PAGE. O tamanho da
Página deve ser determinado pelo parâmetro do line-count
END-OF-PAGE.
Para chamar o bloco do processamento do END-OF-PAGE
ULINE.
WRITE: /10, TEXT-001. “FIM DE PÁGINA
DATUM = SY-DATUM.
TIME = SY-UZEIT.
Format color col_normal.
WRITE: 5 ‘Data’(001),
20 DATUM DD/MM/YYYY.
Skip 2. “Pula duas linhas
Format color off.
WRITE: /5 ‘Hora’ (002),
TIME using edit mask ‘_ _:_ _:_ _’
under datum. 87

-Eventos:
-Eventos são identificados por uma palavra-chave de evento, ou seja, o
próprio nome do evento. Eles terminam onde o bloco do próximo
evento começa. O próximo bloco deve ser uma outra palavra-chave de
evento, ou algum outro bloco de processamento valido no contexto,
como uma sub-rotina ou modulo de dialogo. Os principais eventos para
processamento de relatórios são:

-INITIALIZATION:
-Próprio para inicializar os campos da tela de seleção. E
executado antes da exibição da tela.

-START-OF-SELECTION:
-Neste evento e colocada a lógica principal da montagem
do relatório. E executado logo apos a tela de seleção.

-END-OF-SELECTION:
-E executado apos o START-OF-SELECTION, antes da
apresentação da lista.

© by BBKO Consulting 59
Programação ABAP

Lis ta s - Arm a zen a r Lis ta s

• Você pode armazenar listas resultante de programa

88

© by BBKO Consulting 60
Programação ABAP

Lis ta s - E n v ia r direta m en te p /
im pres s ora
O parâmetro NEW-PAGE PRINT ON envia a lista para o SAP spool database
O parâmetro NO DIALOG desabilita a exibição da tela de parâmetros de
impressão.

Report rel3.

NEW-PAGE PRINT ON
NO DIALOG
DESTINATION ‘LPT1’
IMMEDIATELY ‘X’.

WRITE: / ....

89

Lis ta s - Con trole de Ní


Ní v el: Ta bela
In tern a
• Ao p roces s a r ta b ela s intern a s c om o c om a n do LOOP , v oc ê p ode exec u ta r
proc es s a m entos c om n í v el de c on trole, u tiliza n do ta is pa râ m etros :

- AT F IR S T
- AT NE W
- AT E ND OF
- AT LAS T

Ob s .: O ca m p o da ta b ela in tern a u tiliza do n os c om a n dos AT NE W e AT E ND OF


tem q u e s er o p rim eiro c a m p o da ta bela in tern a e a m es m a dev e es ta r
orden a da .

91

© by BBKO Consulting 61
Programação ABAP

Lis ta s - Con trole de Ní


Ní v el: Ta bela
In tern a

Report rel4.
TABLES KNA1.
...
DATA ITAB TYPE T_ITAB OCCURS 0 WITH HEADER LINE.
* FILL INTERNAL TABLE
...
LOOP AT ITAB
AT FIRST. ... ENDAT.
SORT ITAB BY ORT01 NAME1 ADDRNR . AT NEW < campo> ... ENDAT.
LOOP AT ITAB. AT END OF < campo> ... ENDAT.
AT NEW ORT01. AT LAST. ... ENDAT.
WRITE: / ITAB-ORT01. ENDLOOP
ENDAT.
AT END OF ORT01.
ULINE.
WRITE: / ITAB-ORT01.
ENDAT.
ENDLOOP.

Obs: o campo ORT01 neste exemplo tem que ser o primeiro campo
da tabela interna
ITAB.
91

Lis ta s - Con trole de Ní


Ní v el: ON
CHANGE
Para o comando ON CHANGE o campo da tabela interna não precisa ser o primeiro.

TABLES T100.
SELECT * FROM T100 WHERE SPRSL = SY-LANGU AND
MSGNR < '010'
ORDER BY PRIMARY KEY.
ON CHANGE OF T100-ARBGB.
ULINE.
WRITE: / '***', T100-ARBGB, '***'.
ENDON.
WRITE: / T100-MSGNR, T100-TEXT.
ENDSELECT.

Report rel4.
TABLES KNA1.
...
DATA ITAB TYPE T_ITAB OCCURS 0 WITH HEADER LINE.
* FILL INTERNAL TABLE
...
SORT ITAB BY ORT01 NAME1 ADDRNR .
LOOP AT ITAB.
ON CHANGE ITAB-ORT01.
WRITE: / ITAB-ORT01.
ENDON.
ENDLOOP.
92

© by BBKO Consulting 62
Programação ABAP

Dica s

96

Dica s - Com a n do Mes s a g e

Message Ennn with <field1> <field2> <field3> <field4> (<message-class>)

Tipo de mensagens:
E – Erro
A – Abend
X – Exit (termina com um short Dump)
W – Warning
I – Informação
S - Sucesso

No parâmetro “REPORT” pode-se acrescentar o parâmetro “MESSAGE-ID”.


Exemplo:
REPORT ZSDR0010 NO STANDARD PAGE HEADING
LINE-SIZE 132
LINE-COUNT 65
MESSAGE-ID ZSD.

94

© by BBKO Consulting 63
Programação ABAP

Capítulo 7 – Listas Secundárias

Lis ta s S ecundá ria s

98

© by BBKO Consulting 64
Programação ABAP

Lis ta s S ecundá ria s

96

-O ABAP runtime system :


- Exibe a lista básica. A variável de sistema SY-LSIND = 0 (contador de
lista)
- Neste exemplo, se você “clicar” duas vezes sobre uma linha da lista
básica, será exibido detalhes desta linha, isso através do evento
“AT-LINE-SELECTION”

© by BBKO Consulting 65
Programação ABAP

Lis ta s S ecundá ria s - Com o s elec ion a r

97

Lis ta s S ecundá ria s - E xem p lo do


c om a n do HIDE
HIDE <data object> Hide Area

Line WA_ZFUNC-NUM_ID
Line
1
0000000001
2
0000000002
1
2 3 0000000003
3

98

© by BBKO Consulting 66
Programação ABAP

Lis ta s S ecundá ria s - E xem p lo do


c om a n do HIDE
HIDE <data object> Hide Area

Line WA_ZFUNC-NUM_ID
Line
1
0000000001
2
0000000002
1
2 3 0000000003
3

98

Lis ta s S ecundá ria s - E xem p lo

SY-LSIND = 0

Duplo click na linha do relatório, ou clicar no


ícone

SY-LSIND = 1

Traz dados da Lista Secundária

SY-LSIND = variável de sistema de indica o índice da lista corrente

99

© by BBKO Consulting 67
Programação ABAP

Lis ta s S ecundá ria s - E xem p lo

100

Lis ta s S ecundá ria s - L is ta S ec u n d á ria


c om GUI S TATUS

Lista Básica

Lista Secundária

101

© by BBKO Consulting 68
Programação ABAP

Lis ta s S ecundá ria s - GUI Title e GUI


S ta tu s

102

Lis ta s S ecundá ria s - Men u P a inter –


S E 41

103

© by BBKO Consulting 69
Programação ABAP

Lis ta s S ecundá ria s - Men u P a inter

104

Lis ta s S ecundá ria s - Gui S ta tu s


(exem p lo: L IS T)

105

© by BBKO Consulting 70
Programação ABAP

Lis ta s S ecundá ria s - B a rra de Men u

106

Lis ta s S ecundá ria s - B a rra de


F erra m en ta s da Ap lic a ç ã o

107

© by BBKO Consulting 71
Programação ABAP

Lis ta s S ecundá ria s - Men u S ta nda rd

108

Lis ta s S ecundá ria s - L is ta S ec u n d á ria


c om GUI S TATUS
• Select matnr ersda ernam from mara
• REPORT ZTESTE_LISTA_SEC_II . • into table t_mara
• * • where matnr in so_matnr.
• tables: mara, makt. • *
• data: begin of t_mara occurs 0, • loop at t_mara.
• matnr like mara-matnr, • write: /'Material', t_mara-matnr, t_mara-ersda,
• ersda like mara-ersda, t_mara-ernam.
• ernam like mara-ernam, • hide: t_mara.
• end of t_mara. • endloop.
• *

• data: begin of t_makt,
• AT USER-COMMAND.
• matnr like makt-matnr,
• maktx like makt-maktx, • CASE sy-ucomm.
• end of t_makt. • when 'TEXTO'.
• * • set pf-status 'LIST' excluding 'TEXTO'.
• select-options: so_matnr for mara-matnr. • set titlebar 'LIST1'.
• ******************************************************** • select single matnr maktx
**** • into (t_makt-matnr,t_makt-maktx)
• * Evento START-OF-SELECTION
• from makt
• ********************************************************
**** • where matnr = t_mara-matnr AND
• start-of-selection. • spras = 'P '.
• set pf-status 'LIST'.
• set titlebar 'LIST'. • WRITE: 'Material lista secundária', t_makt-
• * matnr, t_makt-maktx.
• ENDCASE.
109

© by BBKO Consulting 72
Programação ABAP

Capítulo 8 – Modularização

Modula riza çã o

75

Modula riza çã o

• Sub-rotinas
• Grupo de Funções
• Funções

74

© by BBKO Consulting 73
Programação ABAP

Modula riza çã o - S u brotin a s

Inicio do Programa

Perform carrega_tab Form carrega_tab


Using Campo 1 Using Campo 1
Changing tab1 Changing tab1

....

75

Se no programa ABAP uma sub-rotina é chamada por um comando


PERFORM, o sistema interrompe o processamento corrente para processar a
sub-rotina. Quando a ultima linha da sub-rotina (ENDFORM), é executada, o
sistema continua o processamento do programa, após a linha do comando
‘PERFORM’.

© by BBKO Consulting 74
Programação ABAP

Modula riza çã o - Ch a m a n do p or v a lor e


p or referên c ia

76

Os parâmetros podem ser enviados por referência ou por valor:


- Por referencia: o parâmetro destino faz referencia ao endereço do
parâmetro origem.
- Por valor: Quando a sub-rotina é chamada, uma variável local é criada e o
conteúdo é copiado, existem dois tipos de chamadas por valor:
- chamada por valor: passa apenas os conteúdos
- chamada por valor e resultado: passa o conteúdo do campo e toda
alteração efetuada no campo, na sub-rotina e passada de volta.

© by BBKO Consulting 75
Programação ABAP

Modula riza çã o - Grup o de F u n ç ã o e


Função

77

Módulo de função são unidades modulares com a interface. A interface


pode conter os seguintes elementos:
Parâmetros de Importação: são parâmetros passados para o módulo de
função. Em geral, estes são associados aos tipos do Dicionário ABAP. Podem
ser opcionais.
Parâmetros de Exportação: são passados do módulo de função para o
programa chamador. Parâmetros de exportação são sempre opcionais.
Parâmetros Modificáveis: são passados para o módulo de função e podem
ser alterados pela função. Podem ser opcionais.
Exceções: São usados para interceptar erros. Se um erro aciona uma
exceção na função, esta função pára. Você pode associar números a exceção
no programa, na qual são verificados pelos valores do sy-subrc.
Cada módulo de função pode conter dados locais e acessar dados
globais, pertencentes ao grupo de função.

© by BBKO Consulting 76
Programação ABAP

Modula riza çã o - Grup o de F u n ç ã o e


Função
• Grupo de F unções e F unções

78

- Um grupo de função é um programa ABAP do tipo F, na qual o programa é


criado exclusivamente para conter módulos de função. Os módulos de função
podem ser chamados de qualquer programa ABAP.

© by BBKO Consulting 77
Programação ABAP

Modula riza çã o - Grup o de F u n ç ã o e


Função

1. Criar o Grupo de função

2. Associar o módulo de função ao Grupo

Crie grupo de função por ‘assunto’, evite utilizar vários módulos de função num mesmo
grupo, pois se alguém estiver codificando um módulo, e você quiser transportar a sua função
e eles pertencerem ao mesmo grupo, você só vai conseguir transportar no momento que
todos as funções deste grupo estiverem sem erro de sintaxe.

79

Modula riza çã o - E xem plo de p rog ra m a


e fu n ç ã o

80

© by BBKO Consulting 78
Programação ABAP

AL V Grid Con trol

TYP E -P OOL S : s lis , kkblo.


kkblo.

DATA: fieldc a t TYP E s lis _t_fieldca t_a lv WITH HE ADE R L INE .

CAL L F UNCTION 'R E US E _AL V_GR ID_DIS P L AY'


E XP OR TING
i_ca llb a c k_p rog ra m = 'Nom
' Nom e_do_prog ra m a '
i_g rid_title = 'Tes te Rela tótó rio AL V'
it_fieldc a t = fieldca t[t[ ]
TAB L E S fieldcat-col_pos =
'01'.
t_outta b = Ta b ela de Da dos fieldcat-key =
'X'.
fieldcat-tabname =
'T_ALV'.
E XCE P TIONS fieldcat-fieldname
= 'COL_01'.
fieldcat-seltext_l
= 'Material'.
prog ra m _error =1 fieldcat-seltext_m
= 'Material'.
OTHE R S = 2. fieldcat-seltext_s
= 'Material'.
fieldcat-fix_column = 'X'.
Append fieldcat.
81

© by BBKO Consulting 79
Programação ABAP

Capítulo 9 – Data Transfer

Tra ns ferência de Da dos

114

Tra n s ferên c ia d e Da d os

• Processando Arquivo Seqüencial


• Call Transaction
• Batch Input

111

© by BBKO Consulting 80
Programação ABAP

Tra ns ferência de Da dos - Abrir e ler a rquivo


s equencia l - Inbound

IF p_unix = 'X'.
OPEN DATASET p_arqori FOR INPTU IN text MODE MESSAGE v_msg.

DO.
READ DATASET P_ARQORI INTO T_DATA_LOAD. "lê um reg. do arquivo

IF SY-SUBRC NE 0. "fim de arquivo/arq. s/ registros


EXIT. "indica fim de arquivo
ENDIF.
APPEND T_DATA_LOAD.
ENDDO.
ENDIF.

112

Tra ns ferência de Da dos - B ina ry Mode e


Text Mode

113

© by BBKO Consulting 81
Programação ABAP

Tra ns ferência de Da dos - Gera ndo a rquivo


s eqüencia l -Outbound

IF P_UNIX EQ 'X'.

OPEN DATASET V_ARQSAIDA FOR OUTPUT IN TEXT MODE MESSAGE V_MSG.


IF SY-SUBRC NE 0.
MESSAGE E001(ZI) WITH V_ARQSAIDA V_MSG.
ENDIF.
LOOP AT T_SAIDA.
TRANSFER T_SAIDA TO V_ARQSAIDA.
ENDLOOP.

CLOSE DATASET V_ARQSAIDA.


IF SY-SUBRC NE 0.
MESSAGE E011(ZI) WITH V_ARQSAIDA.
ENDIF.
ELSEIF P_PC EQ 'X'.
.....

114

Tra ns ferência de Da dos - Aces s o a


a rquivos externos
Entrada de dados - Inbound

Acesso a arquivo externo via PC, utilizar a função:


call function ‘GUI_UPLOAD'
exporting
filename = l_filename
filetype = v_type
tables
data_tab = t_data_load
exceptions
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
others = 10.

Acesso a arquivo externo via UNIX, utilizar os comandos:


OPEN DATASET <arq> FOR INPUT IN TEXT MODE MESSAGE <msg>
DO.
READ DATASET P_ARQORI INTO T_DATA_LOAD. "le um reg. do arquivo
IF SY-SUBRC NE 0. "fim de arquivo/arq. s/ registros
EXIT. "indica fim de arquivo
ENDIF.
APPEND T_DATA_LOAD.
ENDDO.

115

© by BBKO Consulting 82
Programação ABAP

Tra ns ferência de Da dos - Ac es s o a


a rq u iv os extern os
Acesso a arquivo externo via UNIX, utilizar os comandos:

OPEN DATASET <arq> FOR INPUT IN TEXT MODE MESSAGE <msg>


DO.
READ DATASET P_ARQORI INTO T_DATA_LOAD. "le um reg. do arquivo
IF SY-SUBRC NE 0. "fim de arquivo/arq. s/ registros
EXIT. "indica fim de arquivo
ENDIF.
APPEND T_DATA_LOAD.
ENDDO.

116

Tra ns ferência de Da dos - Ac es s o a


a rq u iv os extern os
Saída de dados - Outbound

Acesso a arquivo externo via PC, utilizar a função:


CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = V_ARQSAIDA
TABLES
DATA_TAB = T_SAIDA
EXCEPTIONS
OTHERS = 8.

117

© by BBKO Consulting 83
Programação ABAP

Tra ns ferência de Da dos - Ac es s o a


a rq u iv os extern os
Acesso a arquivo externo via UNIX, utilizar os comandos:

CONCATENATE P_PATH 'arq' SY-DATUM SY-UZEIT+0(4) INTO <arq>.

OPEN DATASET <arq> FOR OUTPUT IN TEXT MODE MESSAGE <msg>


LOOP AT <tab_interna>.
TRANSFER <tab_interna> TO <arq>.
ENDLOOP.
CLOSE DATASET <arq>.

118

Tra ns ferência de Da dos - Tra ns ferindo


Da dos E xternos

SAP ( Host )

Dados SAP
Externos INTERFACES BANCO SAP

119

© by BBKO Consulting 84
Programação ABAP

Tra ns ferencia de Da dos - Tra n s ferin do


Da dos E xtern os
Arquivo
Seqüêncial

Dicionário
READ DATASET ABAP/4

Programa de BATCH INPUT


Estrutura BDCDATA

Tabela
BDC

INCLUDE STRUCTURE

CALL FUNCTION

FILA

120

Tra ns ferência de Da dos - S eqüência p/


B a tch Input

ABRIR SESSÃO DE BATCH INPUT

INSERIR DADOS DA TRANSAÇÃO

FECHAR SESSÃO DE BATCH INPUT

121

© by BBKO Consulting 85
Programação ABAP

Tra ns ferência de Da dos - E n tra da e


S a í da de Da dos
Atualizando dados
Update Z_CONTAS set fornecedor = ‘X’
Where grupo = 1.
Update não deve ser utilizado para atualizar dados de tabelas Standard do
SAP. Toda a atualização deve ser feita através das transações que garantam a
integridade da base de dados. Esta atualização é feita através do comando Call
Transaction.
Call Transaction
WA_BDCDATA-PROGRAM = 'SAPMS38M'. “Informa o nome/numero da tela
WA_BDCDATA-DYNPRO = '0100'.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO BDCDATA.

CLEAR WA_BDCDATA.
WA_BDCDATA-FNAM = 'RS38M-PROGRAMM'. “Preenche campos da tela
WA_BDCDATA-FVAL = PROGRAM.
APPEND WA_BDCDATA TO BDCDATA.
...
* Chama a transação com os dados de tela e campos definidos

CALL TRANSACTION 'SE38' USING BDCDATA MODE 'N'


MESSAGES INTO ITAB.

122

Tra ns ferência de Da dos - E n tra da e


S a í da de Da dos
Para melhor organizar um programa que utiliza Call Transaction normalmente são
criadas funções para preencher a tabela de dados da transação (BDCDATA).

****************************************************************
* Rotinas para criação da t_bdc
****************************************************************
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR T_BDC.
T_BDC-PROGRAM = PROGRAM.
T_BDC-DYNPRO = DYNPRO.
T_BDC-DYNBEGIN = 'X'.
APPEND T_BDC.
ENDFORM.

********************************************

FORM BDC_FIELD USING FNAM FVAL.


IF FVAL <> ''.
CLEAR T_BDC.
T_BDC-FNAM = FNAM.
T_BDC-FVAL = FVAL.
APPEND T_BDC.
ENDIF.
ENDFORM.
123

© by BBKO Consulting 86
Programação ABAP

Tra ns ferência de Da dos - E n tra da e


S a í da de Da dos
**********************************************************************
* FORM CALL_TRANSACTION
**********************************************************************
FORM CALL_TRANSACTION TABLES T_BDC_DATA USING W_TCODE.

CALL TRANSACTION W_TCODE


USING T_BDC_DATA MODE 'N' UPDATE 'S'
MESSAGES INTO T_MESS.

IF SY-SUBRC NE 0.
LOOP AT T_MESS.
PERFORM BDC_MESSAGE.
WRITE: / W_MESS.
ENDLOOP.
ENDIF.

CLEAR: T_MESS, T_BDC.


REFRESH: T_MESS, T_BDC.

ENDFORM. " CALL_TRANSACTION

**********************************************************************
* FORM BDC_MESSAGE
**********************************************************************
FORM BDC_MESSAGE.

CLEAR W_MESS.

124

Tra ns ferência de Da dos - E n tra da e


S a í da de Da dos
SELECT SINGLE * FROM T100
WHERE SPRSL = 'P'
AND ARBGB = T_MESS-MSGID
AND MSGNR = T_MESS-MSGNR.

W_MESS = T100-TEXT.

STRAUX4 = T_MESS-MSGV1.
REPLACE '&' WITH STRAUX4 INTO W_MESS.
CONDENSE W_MESS.

STRAUX4 = T_MESS-MSGV2.
REPLACE '&' WITH STRAUX4 INTO W_MESS.
CONDENSE W_MESS.

STRAUX4 = T_MESS-MSGV3.
REPLACE '&' WITH STRAUX4 INTO W_MESS.
CONDENSE W_MESS.

STRAUX4 = T_MESS-MSGV4.
REPLACE '&' WITH STRAUX4 INTO W_MESS.
CONDENSE W_MESS.

ENDFORM.
125

© by BBKO Consulting 87
Programação ABAP

Tra ns ferência de Da dos - E n tra da e


S a í da de Da dos
Exemplo de código para chamada de Call Transaction a partir das
funções criadas :
...
PERFORM BDC_DYNPRO USING 'SAPMM07I' '0721'.
PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BU'. “Salvar
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ISEG-
MATNR(01)'.

PERFORM CALL_TRANSACTION TABLES T_BDC USING 'MI01'.

O nome do campo na tela pode ser verificado clicando-se F1


sobre o campo acessando a opção Informações Técnicas. O nome do
campo encontra-se em Denominação do campo para batch input.

Além dos campos de tela existem dois campos especiais :

BDC_CURSOR : Para indica a posição do cursor


BDC_OKCODE : Para indicar a operação a realizar após o
preenchimento da tela.
126

Tra ns ferência de Da dos - E n tra da e


S a í da de Da dos
Batch Input

O programa cria uma pasta ou arquivo contendo os dados da


tabela BDC_DATA (mesma utilizada no Call Transaction).

Esta será processada posteriormente através da transação SM35.

CALL FUNCTION 'BDC_OPEN_GROUP'


EXPORTING CLIENT = SY-MANDT
GROUP = NOMEPASTA
USER = USER
KEEP = KEEP
HOLDDATE = HOLDDATE.

CALL FUNCTION 'BDC_INSERT'


EXPORTING TCODE = TCODE
TABLES DYNPROTAB = T_BDCDATA.

CALL FUNCTION 'BDC_CLOSE_GROUP'.


127

© by BBKO Consulting 88
Programação ABAP

Tra ns ferência de Da dos - P rog ra m a


In b ou n d
• Passos para criar programa Inbound
– Executar a transação SHDB:
• Juntamente com o Funcional executar a transação desejada e preencher os
campos necessários
– Após mapear os campos necessários, definir o layout do arquivo .txt de
entrada
– Criar a especificação técnica
– Criar o programa de Inbound

Obs: Segue exemplo: transação MM02 (alteração de material) onde vamos apenas alterar a
descrição dos materiais

128

Tra ns ferência de Da dos - Tra n s a ç ã o


S HDB

129

© by BBKO Consulting 89
Programação ABAP

Tra ns ferência de Da dos - Tra n s a ç ã o


S HDB

130

Tra ns ferência de Da dos - Tra n s a ç ã o


S HDB

131

© by BBKO Consulting 90
Programação ABAP

Tra ns ferência de Da dos - Tra n s a ç ã o


S HDB

132

Tra ns ferência de Da dos - Tra n s a ç ã o


S HDB

133

© by BBKO Consulting 91
Programação ABAP

Tra ns ferência de Da dos - Tra n s a ç ã o


S HDB

134

Tra ns ferência de Da dos - L a y out do


a rq u iv o de en tra da
Arquivo .txt de entrada
(para este exemplo do SHDB, executado):

Seq Campo Tipo


1– Código do material – char 18 posições, alinhado a esquerda

2– Descrição do Material – char 40 posições

135

© by BBKO Consulting 92
Programação ABAP

Tra ns ferência de Da dos - Tela c om


p a râ m etros de B a tc h In p u t

136

Tra ns ferência de Da dos - S M35- M35 -


E xec u ta r p a s ta de B a tc h In p u t

137

© by BBKO Consulting 93
Programação ABAP

Tra ns ferência de Da dos - S M35

138

- Tem três opções de executar a pasta: Processamento visível


(Foreground visualizando as telas), Oculto (background), Exibir só erros
(quando ocorrer erro mostra a tela)

-Quando executa a pasta Batch Input em foreground, significa que está


rodando a transação com todos os dados mapeados no programa,
preenchidos, apenas teclar < ENTER >.
- Caso queira cancelar o processamento em foreground do registro
corrente, digitar no campo de comando < /n>.
- Caso queira cancelar o processamento em foreground, digitar no campo
de comando < /nend>

© by BBKO Consulting 94
Programação ABAP

Capítulo 10 – Programação On-Line

P rog ra ma çã o On-Line

143

© by BBKO Consulting 95
Programação ABAP

P rog ra ma çã o On-line - Modu le-


le -p ool

• Partes de uma tela

Atributos Layout Controle do Fluxo


Atributos
Da Tela Da Tela
dos campos Process Before Output.
Module Clear-ok_code.

Screen Number Screen Number


Field Name
Short Description Short Description
Type Controle do Fluxo
Screen type Screen type
Length
Next Screen Next Screen
... Process After Input
... ...
Module User_Command_0100

140

Os principais processos de criar uma tela:


- Especificar as suas propriedades (Atributos da tela)
- Especificar o layout (Editor Fullscreen)
- Definir os atributos dos elementos da tela (Field List)
- Programar o seu fluxo lógico
- O Fluxo lógico é dividido em dois eventos para cada tela:
- O PROCESS BEFORE OUTPUT evento (PBO), é executado antes
da tela ser apresentada.
- O PROCESS AFTER INPUT evento (PAI), é executado após o
usuário ter acionado algum botão ou disparado algum evento na
tela anteriormente apresentada.

© by BBKO Consulting 96
Programação ABAP

P rog ra ma çã o On-line - Cria ç ã o d e u m


Dia log P rog ra m

Código
Código do
do Cliente
Cliente

Nome
Nome

Endereço
Endereço

141

- Dialog Program que mostrará dados do Cliente.


- Neste exemplo, a primeira tela, o usuário entrará com código do funcionário.
(chave da tabela), e na segunda tela, será mostrado o conteúdo dos campos
referentes à tabela ao funcionário.

© by BBKO Consulting 97
Programação ABAP

P rog ra ma çã o On-line – Ch a m a d a d in â m ic a d a
p ró
ró xim a tela

Tela 100 Tela 300


Próxima tela 200 Próxima tela 400

PBO PAI
PBO PAI

Module ... Module ...


Set Screen 300. Set Screen 0.
Leave Screen. Leave Screen.
Endmodule. Endmodule.

O comando SET SCREEN <nnnn> sobrepõe temporariamente o atributo ‘próxima tela’.


Para executar a chamada a outra tela em um único programa pode ser feito desta forma: “LEAVE TO SCREEN < nnnn>”

O comando SET SCREEN 0 e LEAVE Screen volta para a tela que chamou, no caso tela 300.

142

© by BBKO Consulting 98
Programação ABAP

P rog ra ma çã o On-line - P rog ra m a


L ó g ic o

143

Você pode definir um campo OK_CODE como um campo da tela. Neste


campo conterá o código de função do botão selecionado na tela. Para evitar
erros de campo OK_CODE não inicializado, você deve criar um campo
auxiliar que salva o conteúdo do OK_CODE e então você inicializa o campo
OK_CODE e ‘trabalha’ com o campo auxiliar .

© by BBKO Consulting 99
Programação ABAP

P rog ra ma çã o On-line - Dia log P rog ra m


– S eq A ç ões

Sequência de Ações
Screen Action sequence
PROCESS BEFORE OUTPUT. Painter
MODULE A. Execute module A

PROCESS AFTER INPUT.


MODULE B. Data transport from
ABAP/4 to screen
work area

Send screen

ENTER

Data transport from


screen to ABAP/4
work area

Execute module B

144

- Quando todos os módulos do PBO terminarem a execução, os conteúdos


dos campos na Work Área do ABAP são copiados para a Work Área da tela
em nomes idênticos.
- Antes do PAI ser processado, os conteúdos dos campos na Work Área da
tela são copiados para a Work Área do ABAP em nomes idênticos.

© by BBKO Consulting 100


Programação ABAP

P rog ra ma çã o On-line - Atrib u tos da


tela

Modificações Dinâmicas em Telas

Change <-> Display Change <-> Display

A A
B B

output field input and


output field

146

- Podem ser feitas mudanças temporárias em certos atributos de campos.


Ex.: Fazer com que um campo com atributo de display somente, seja alterado
para receber entrada de digitação etc.
- Esta facilidade faz com que possam ser utilizadas as mesmas telas,
somente com a alteração dos atributos dos seus campos, desta forma a
quantidade de telas é reduzida consideravelmente.

© by BBKO Consulting 101


Programação ABAP

P rog ra ma çã o On-line - Atrib u tos da


tela

Atributos modificábeis da tabela SCREEN


SCREEN-NAME Field name
SCREEN-GROUP1 Modification group 1
SCREEN-GROUP2 Modification group 2
SCREEN-GROUP3 Modification group 3
SCREEN-GROUP4 Modification group 4

SCREEN-REQUIRED Required field

SCREEN-INPUT Input field

SCREEN-OUTPUT Output field

SCREEN-INTENSIFIED Highlighted field

SCREEN-INVISIBLE Invisible field

SCREEN-LENGTH Field length

SCREEN-ACTIVE Active field

SCREEN-DISPLAY_3D 3-dimensional field

SCREEN-VALUE_HELP Field with value help

SCREEN-REQUEST Input exists (PAI only)


146

- Os campos da tela e seus respectivos atributos são armazenados


automaticamente em uma tabela interna (do sistema) chamada SCREEN.
- A tabela SCREEN é inicializada com os campos definidos no Caiem Pointer
e tem seus campos reinicializados a cada execução do PBO.
- Para determinar o campo que você deve alterar um ou mais atributos, você
precisa ler o campo SCREEN-NAME e os campos SCREEN-GROUP1 até
SCREEN-GROUP4, através de um Loop na tabela SCREEN.
- As funções standard são automaticamente associadas.

© by BBKO Consulting 102


Programação ABAP

P rog ra ma çã o On-line - Atrib u tos do


c a m p o na tela

Atributos do campo – Grupos de Modificação

Screen
Painter
Field list: Modification groups

Field name Gr1 Gr2 Gr3 Gr4 ...

SPFLI_ITAB-CONNID SEL
SPFLI_ITAB-CITYFROM SEL
SPFLI_ITAB-CITYTO SEL
...

147

- Você pode associar um campo a quatro diferentes grupos. Os nomes dos


grupos podem ter até 3 caracteres e podem ser definidos livremente.

© by BBKO Consulting 103


Programação ABAP

P rog ra ma çã o On-line - Modifica ç ã o em


tela s

Modificações Dinâmicas em Telas - Programa


Screen
PROCESS BEFORE OUTPUT. Painter
.
.
.
MODULE MODIFY_SCREEN.
.
.
.

ABAP/4
MODULE MODIFY_SCREEN OUTPUT.
...
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'SEL'.
SCREEN-INPUT = 1.
ENDIF.
IF SCREEN-NAME = ' SFLIGHT-CARRID '.
SCREEN-ACTIVE = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE.

148

- O código (programa) para alterar dinamicamente os atributos dos campos


devem ser executados no evento PBO.
- As mudanças devem ser feitas dentro de um Loop na tabela SCREEN, e
somente desta forma.(Não é possível o acesso via READ TABLE...).
- As mudanças feitas são realmente ativadas após o comando MODIFY
SCREEN.

© by BBKO Consulting 104


Programação ABAP

P rog ra ma çã o On-line - Con diç


di ç ã o n a
c h a m a da d os Modu les
- Se quiser que o module seja chamado somente se o conteúdo do campo foi alterado do seu
valor inicial.

PROCESS AFTER INPUT. Module Verifica_Campo


FIELD <campo> ...
Module Verifica_Campo ON INPUT. message E ...
Endmodule.

- Dentro do bloco CHAIN, você deve usar o ON CHAIN-INPUT, o module é então chamado se o
conteúdo de uma das telas foi alterado do valor inicial.

PROCESS AFTER INPUT. Module Verifica_Campo


CHAIN. ...
FIELD <campo1>, message E ...
<campo2> Endmodule.
... < campo n>
Module Verifica_Campo ON CHAIN-INPUT.
ENDCHAIN.

150

P rog ra ma çã o On-line - Con diç


di ç ã o n a
c h a m a da d os Modu les
- Se quiser que o module seja chamado somente se o conteúdo do campo foi alterado do seu
valor inicial.

PROCESS AFTER INPUT. Module Verifica_Campo


FIELD <campo> ...
Module Verifica_Campo ON INPUT. message E ...
Endmodule.

- Dentro do bloco CHAIN, você deve usar o ON CHAIN-INPUT, o module é então chamado se o
conteúdo de uma das telas foi alterado do valor inicial.

PROCESS AFTER INPUT. Module Verifica_Campo


CHAIN. ...
FIELD <campo1>, message E ...
<campo2> Endmodule.
... < campo n>
Module Verifica_Campo ON CHAIN-INPUT.
ENDCHAIN.

150

© by BBKO Consulting 105


Programação ABAP

P rog ra ma çã o On-line - Con diç


di ç ã o n a
c h a m a da d os Modu les
- Se adicionar o parâmetro ON REQUEST no module, o module somente é chamado se o usuário
digitar um novo valor neste campo

PROCESS AFTER INPUT. Module Verifica_Campo


FIELD <campo> ...
Module Verifica_Campo ON REQUEST. message E ...
Endmodule.

- Dentro do bloco CHAIN, você deve usar o ON CHAIN-REQUEST, o module é então chamado se
o usuário alterou o conteúdo de um dos campos dentro do bloco CHAIN.

PROCESS AFTER INPUT. Module Verifica_Campo


CHAIN. ...
FIELD <campo1>, message E ...
<campo2> Endmodule.
... < campo n>
Module Verifica_Campo ON CHAIN-REQUEST.
ENDCHAIN.

151

P rog ra ma çã o On-line - Con diç


di ç ã o n a
c h a m a da d os Modu les

- O parâmetro adicional AT EXIT-COMMAND, faz com que o module seja processado antes das
verificações automáticas de entrada de dados.

PROCESS AFTER INPUT. Module EXIT Input.


Module exit AT EXIT-COMMAND. Case ok_code.
when ‘CANCEL’.
clear ok_code.
leave to screen 0.
when ‘EXIT’.
leave program.
Endcase.
Endmodule.

152

© by BBKO Consulting 106


Programação ABAP

P rog ra ma çã o On-line - Cria r Dia log


P rog ra m – S E 80

153

- Crie o seu programa (ABAP Module Pool) no Development Workbench


(SE80) seguindo a regra de nomenclatura abaixo:
O nome deverá iniciar com as letras SAP.
A quarta posição do nome do programa deverá ser sempre M (Module
Pool).
A quinta posição, no caso de programas customizáveis deverá ser Z ou Y,
(como nos programas reports, iniciados obrigatoriamente com essas letras).
Escolha a opção TOP Include, pois desta forma, será criado o include que
será utilizado para a declaração dos dados globais.
Se você utilizar os includes, o sistema automaticamente sugerirá os nomes
para eles, seguindo uma regra particular, de acordo com o nome do programa
principal (module pool) e com um determinado sufixo, o qual facilitará a sua
identificação dentro do programa.
Exemplo: O nome do TOP Include para um programa Module Pool cujo
nome é SAPMZSD001 será MZSD001TOP.

© by BBKO Consulting 107


Programação ABAP

P rog ra ma çã o On-line - Cria Dia log


P rog ra m

154

-Nos atributos do programa, você define o Título, categoria e a aplicação.


Categoria é Module Pool e Aplicação é BASE

© by BBKO Consulting 108


Programação ABAP

P rog ra ma çã o On-line - Cria r tela em


Dia log P rog ra m

155

- Criar tela no Dialog Program: Posicionar o cursor no nome do programa e


clicar o botão direto do mouse

© by BBKO Consulting 109


Programação ABAP

P rog ra ma çã o On-line - Cria r tela em Dia log


P rog ra m

1 - Digitar o numero da tela

156

© by BBKO Consulting 110


Programação ABAP

P rog ra ma çã o On-line - Cria r tela Dia log


P rog ra m

157

- Nos atributos da tela, digitar a descrição da tela.


- Escolha a opção NORMAL, e especifique o número da próxima tela (se
necessário, no momento da execução, o sistema desviará para o número da
tela indicado nesse campo, caso esteja preenchido).

© by BBKO Consulting 111


Programação ABAP

P rog ra ma çã o On-line - Cria r tela Dia log


P rog ra m
Clica no ícone

158

- Para desenhar telas, utilize o Screen Painter.


- A interface do Screen Painter Gráfico contém funções easy-to-use para
definição de diversos elementos da tela (ex: campos de entrada/saída, labels,
boxes, botões, etc). Você escolhe cada elemento e os posiciona na tela
utilizando o mouse.
- Para deletar elementos da tela, é necessário selecionar cada elemento com
o mouse (foco) e pressionar delete.
- É possível também mover os elementos gráficos pela tela, somente clicando
e arrastando o mesmo.
-Na tela acima para digitar a constante ‘Código do Funcionário’ utilizamos o

ícone e digitamos esta literal no campo e

para digitar o campo variável utilizamos o ícone da barra de


ferramentas.

© by BBKO Consulting 112


Programação ABAP

P rog ra ma çã o On-line - E xem p lo: Cria r


tela 200

159

-Duplo click no campo variável e então aparece a janela de atributos do


campo, no nome do campo, foi digitado o nome de uma tabela e campo,
então digita enter e aparece uma pergunta se este campo está associado ao
Dicionário.
- No nosso exemplo este campo está associado ao dicionário, através desta
table ZFUNC01.

- Não esquecer de ativar a tela.

© by BBKO Consulting 113


Programação ABAP

P rog ra ma çã o On-line - Cria r tela –


Dec la ra r a riá
ri á v eis

160

- No processamento do diálogo, os dados são passados entre as telas e


programas ABAP durante a execução. O sistema efetua a comunicação
automaticamente, mas é necessário que seja utilizado o nome idêntico dos
campos nas telas e no module pool.
- Defina os dados globais no TOP include. Para que todas as telas possam
“enxergá-lo”.

© by BBKO Consulting 114


Programação ABAP

P rog ra ma çã o On-line - Cria r Tela –


Cria r Modu les

161

-Observe no exemplo acima que ‘clicando’ na tela 100, aparece o fluxo lógico
da tela 0100 (PBO e PAI).
- Os modules estão comentados, caso utilize, tirar os comentários e os
modules serão criados em includes.
- Durante o processo de criação dos módulos PAI e/ou PBO, você pode
associá-los aos includes desejados ou deixar que o sistema automaticamente
faça isto por você. Neste caso os módulos no PBO serão criados nos includes
com o sufixo I01 (xxxxxI01), e os do PAI, nos includes com sufixo O01
(xxxxxO01).
- Nos Flow Logics não são permitidos palavras reservadas (IF, PERFORM,
WHILE etc) da mesma forma em que são permitidos nos programas. O Flow
Logic, embora se pareça muito com o programa (o editor é o mesmo), não
tem o mesmo comportamento. Ele é usado basicamente para ordenar o
processamento da tela, e para isso são criados os MODULES, que têm uma
função análoga à do PERFORM.
- Para criarmos um MODULE, escreva o seu nome no flow logic no lugar
desejado e efetue um double-click. O sistema criará uma sub-rotina iniciando
com MODULE <nome> e terminando com ENDMODULE no include
apropriado. Isto pode ser facilmente observado efetuando uma navegação
pelo include.
- Se não existirem includes, o sistema poderá criar um (se você permitir) ou
poderá incluir a sub-rotina no programa principal (o que aliás, não é
recomendado).

© by BBKO Consulting 115


Programação ABAP

-Tirar das linhas o comentário e atribuir algum código ao GUI status e ao GUI
title, no exemplo acima foi atribuído o ‘0100’.

P rog ra ma çã o On-line - Cria r Modu les

162

P rog ra ma çã o On-line - Cria r Modu les

163

© by BBKO Consulting 116


Programação ABAP

P rog ra ma çã o On-line - GUI Title e GUI


S ta tu s

168

- Usa-se o Menu Painter para definir funções na tela em um status particular e


associá-los a um apropriado menu, a saber: menu bar, standard toolbar e
application toolbar.
- Pode-se também definir um título para a tela.
- Em geral, define-se um menu bar para cada dialog program e associa-se
esse menu bar a um status. Para todos os status, define-se qual função
estará ativa/inativa.
- Cada alteração nos status (menus) deve ser seguida de uma re-geração da
tela completa.
- Para associar um status e um título a uma tela, isto deve ser feito no seu
PBO, usando o comando SET PF-STATUS e SET TITLEBAR,
respectivamente.

© by BBKO Consulting 117


Programação ABAP

P rog ra ma çã o On-line - Cria ç ã o de GUI


S ta tu s

165

P rog ra ma çã o On-line - Cria r GUI S ta tu s –


B a rra d e Men u

166

© by BBKO Consulting 118


Programação ABAP

P rog ra ma çã o On-line - Cria r GUI S ta tu s –


B a rra d e B otões

167

-Você pode criar botões associados aos ‘Códigos’ criados na Barra de Menu
ou não.
- Quando cria botões, você pode associar a uma tecla de função

© by BBKO Consulting 119


Programação ABAP

P rog ra ma çã o On-line - Cria r GUI Title

168

-Você pode usar até nove variáveis no título. Veja abaixo o Module chamando
o titlebar ‘CONS’ passando a variável código do funcionário.

© by BBKO Consulting 120


Programação ABAP

P rog ra ma çã o On-line - F lu xo L ó g ic o –
tela 100

169

Código dos Modules, acima:

© by BBKO Consulting 121


Programação ABAP

P rog ra ma çã o On-line - F lu xo L ó g ic o –
tela 100

169

Código dos Modules, acima:

© by BBKO Consulting 122


Programação ABAP

P rog ra ma çã o On-line - F lu xo L ó g ic o –
tela 200

170

-Segue

© by BBKO Consulting 123


Programação ABAP

P rog ra ma çã o On-line - F lu xo L ó g ic o –
tela 200

170

-Segue

© by BBKO Consulting 124


Programação ABAP

P rog ra ma çã o On-line - Org a niza ç ã o do


P rog ra ma

Sub-Rotinas
PAI
PBO
Declarações
Globais

171

Cria r tra ns a çã o pa ra On-Line

172

© by BBKO Consulting 125


Programação ABAP

Cria r tra ns a çã o pa ra On-Line

173

- Para executar programa tipo ‘M’ (Module Pool) você deve criar pelo menos
uma transação.

© by BBKO Consulting 126


Programação ABAP

P rog ra ma çã o On-line - Tra n s a ç ã o


– ZF UNC01 – tela 100

174

P rog ra ma çã o On-line - Tela 200 -


Con s u lta

175

© by BBKO Consulting 127


Programação ABAP

Apêndice A – Programação On-Line

Os Componentes Principais de um Dialog Program (On-line)


• Você usa o Screen Paiter e o Menu Painter para criar e desenhar telas modelas e programas de
telas.
• Você define o processamento lógico no module pool do programa ABAP/4 .
• Estruturas de dados são definidas no Dicionário ABAP/4. Você pode acessar esses estruturas do
programa ABAP/4 e quando define campos de tela.
• O processador de diálogo controla o fluxo do seus programa diálogo.

Screen Painter - ABAP/4


• Para criar uma tela, siga os seguintes passos:
o Defina as características básicas da tela (screen atributes)
o Projete um layout de tela (in full screen editor)
o Defina os atributos dos campos (field list)
o Escreva o fluxo lógico da tela (programa)
• Os componentes do programa ABAP/4 mais importantes são encontrados nos seguintes objetos:
o Global data ou Estruturas do Dicionário no programa include TOP (declarações data)
o Module PBO (Process Before Output – Processos antes de Apresentar a Tela)
o Module PAI (Process After Input – Processos após Entrada de Dados)
o Sub-rotinas (se necessário)

Comunicação: Tela  ABAP/4 module Pool


• O fluxo lógico da tela é dividido em dois eventos para cada tela:
o O evento PBO é executado antes da tela ser apresentada.
o O evento PAI é executado após o usuário pressionar ENTER.
• O sistema processa os módulos de evento numa seqüência
• Em cada módulo, o controle passa do processador de diálogo para o processador ABAP/4. Depois
do processamento, o controle é retornado para o processador de diálogo.
• Quando todos os módulos do PBO forem processados, o conteúdo dos campos da área de
trabalho (work área) ABAP/4 são copiados para os campos de mesmo nome da área de trabalho
(work área) da tela.
• Antes do módulo PAI é processado. O conteúdo dos campos na área de trabalho da tela (work
área) são copiados para campos de mesmo nome na área de trabalho (work área) ABAP/4.

Definindo o Layout (Graphical Screen Painter)


• Para projetar telas, você usa o Screen Painter.
• A interface do Graphical Screen Painter contém funções fáceis de usar para definir os vários
elementos da tela (ex.: campos de entrada e saída, campos textos, caixas, etc.). Você escolhe
cada elemento da tela e posiciona na tela usando o mouse.
• Para deletar elementos da tela, você seleciona o elemento com o mouse e então escolhe Delete.
• Para mover elementos da tela, você usa o mouse para arrastar o elemento para a posição
desejada.

© by BBKO Consulting 128


Programação ABAP

Note: Na versão 3.0, a Graphical Screen Painter é suportada pelo Windows NT, Windows 9x
e UNIX. Se você está usando outro sistema operacional, você usa a Alphanumeric
Screen Painter.

© by BBKO Consulting 129


Programação ABAP

Visualizações de Listas de Campo (Field List Views)


 Field types
 Texts/templates
 General attributes
 Display attributes
 Modification groups
 Matchcode/reference

• Há seis visualizações de listas de campos para manutenção dos atributos dos campos da tela.
Alternativamente, você pode defini-los de uma das listas. Manutenção de atributos para um
campo também é possível no fullscreen editor.
• Você pode descobrir o correspondente do tipo de dado externo para o tipo de dado interno (ex.:
tipos de dados ABAP/4) pela referida documentação da palavra chave TABLES no ABAP/4.
Exemplos são os seguintes:

Tipo de dados do dicionário ABAP/4 Tipo de dados no ABAP/4


CHAR C
NUMC N

Definindo o controle do fluxo


PORCESS BEFORE OUTPUT.
MODULE
INITIALIZE.

PROCESS AFTER INPUT.


MODULE
READ_SPFLI.

• Você especifica a definição de seus Módulos de comandos na lógica do fluxo.


• Se você escolhe um módulo com duplo clique, o sistema cria os comandos adequados MODULE
... ENDMODULE no programa include apropriado. Este é conhecido como navegação adiantada.
• Se não existe o programa include, o sistema criará um se você permitir. Ele também insere um
comando INCLUDE no programa principal.

Processando o MODULE POOL


MODULE INITIALIZE OUTPUT.
CLEAR SPFLI.
ENDMODULE.

MODULE READ_SPFLI INPUT.


SELECT SINGLE * FROM SPFLI
WHERE CARRID = SPFLI-CARRID
AND CONNID = SPFLI-CONNID.
.
.
.
ENDMODULE.

• Os comandos do ABAP/4 do MODULE para PBO contém uma adição OUTPUT, quando os
comandos do módulo for do módulo PAI contém uma adição INPUT.

© by BBKO Consulting 130


Programação ABAP

Definindo campos no MODULE POOL


Top include

MTALATOP
PROGRAM SAPMTALA.

TABLES: SPFLI.
DATA: ... .

OU

GLOBAL DATA
DATA: ... .

• No processamento de diálogo, o dado é passado entre as telas e o processamento do programa


ABAP/4. O sistema executa esta comunicação automaticamente, mas você deve usar nomes
idênticos nas telas e no MODULE POOL.
• Defina os campos relevantes como dados globais no programa include TOP. Para fazer isso, você
processa o programa include como um todo ou relacionando seções de dados globais ou
estruturas do Dicionário. Mesmo que, o programa include TOP está implicitamente no controle.

Definindo chamadas (Códigos de Transação)


STMP
Programs
SAPMTALA
Create
Transactions
Escolher
Código de Transação TALA
Tipo de Transação X Dialog transaction
Continue
Transaction code TALA
Transaction text Test
Program SAPMTALA
Screen number 100

• Você pode iniciar um programa de diálogo ABAP/4 (transação) com um específico código de
transação.
• Tansações customizadas devem começar com Z ou Y.
• O sistema cria suas especificações na tabela TSTC (ao invés de criar uma transação na lista de
objetos, você pode dar manutenção na tabela você mesmo)

Checagem automática de campo de Entrada


• Após o usuário ter finalizado uma tela (ex. ter entrado dados e pressionado a tecla ENTER ou ter
acionado alguma outra função), mas antes dos módulos do PAI serem processados, o
processador de diálogo executa um número de checagens automáticas.
• O primeiro destes s ser certificado são os campos requeridos na entrada de dados.

© by BBKO Consulting 131


Programação ABAP

• Uma chave estrangeira é executada somente se um campo da tela se referir a um campo do


Dicionário pela qual a checagem da tabela tem de estar definida e o atributo apropriado tem de
estar selecionado.
• Em algum momento, a funcionalidade F4 é ativada. Isso significa que é possível a entrada de
dados para um campo. Ex.: a chave de valores da tabela de checagem – são apresentadas.

Checando campo de entrada no MODULE POOL com diálogo


de erro

MODULE module INPUT.


PROCESS AFTER INPUT. .
FIELD <screen field> .
MODULE <module>. .
MESSAGE E... .
ENDMODULE.

• Se você quer checar valores de entrada no MODULE POOL e iniciar um diálogo de erro de um
resultado negativo, você usa o comando FIELD com a adição MODULE. Isto significa que o
relevante módulo é executado somente para o campo especificado no comando FIELD.
• Se o módulo resulta numa mensagem de erro (E) ou warning (W), a tela é reapresentada sem o
processamento dos módulos PBO. O texto da mensagem é apresentado e somente o campo
checado por este módulo é apresentado para entrada de dados novamente.
• Note que somente o comando FIELD é responsável por fazer a leitura do campo para entrada
novamente. Se você formular uma mensagem num módulo sem chamar o módulo no comando
FIELD, a mensagem é apresentada, mas o campo não é lido para entrada de dados novamente.

Checando Grupo de Campos


PROCESS AFTER INPUT.
CHAIN.
FIELD: screen field1,
screen field2,
...
screen fieldn.
MODULE module.
ENDCHAIN.

MODULE module INPUT.


...
MESSAGE E ... .
ENDMODULE.

• Se você quer checar muitos campos para entrada de dados novamente no evento de um erro de
diálogo, você deve especificar todos no comando FIELD e concatenar estes junto com o comando
MODULE para checagem no CHAIN.
• Um campo pode ser usado em diferentes CHAINs.
• Note que o comando FIELD não somente faz a leitura para entrada de dados novamente.
Qualquer um dos campos modificado durante o processamento do PAI somente se torna visíveis
no evento do erro se eles são também especificados no comando FIELD do referido CHAIN.

© by BBKO Consulting 132


Programação ABAP

Lendo Códigos de Função em Programas


• Cada botão deve ter um código de função
• Quando o usuário pressionar o botão, o módulo PAI é acionado.
• Quando o usuário chama uma função (pelo significado do botão, menu de entrada ou tecla de
função), o código de função aparece no campo que você entra no na lista de campo que os
atributos pré-definidos de tamanho 4 e formato OK. Isto é conhecido como campo de OK code.
• Poder reagir a um código de função no module pool do ABAP/4, você define um identificador
nomeado Ok code. Este contém o código da função atual depois do campo ter sido transportado.
• Você está recomendado a usar uma versão de backup do campo de okcode para evitar enviar
uma tela que já tem um código de função.

Seqüência Dinâmica de Tela: Overview


• Você pode modificar uma seqüência de tela dinamicamente por
o Usando SET SCREEN para atualizar a próxima tela temporariamente
o Usando CALL SCREEN para inserir um processamento de uma ou mais telas antes da tela
atual. O processamento da tela atual continua com os comandos após esta chamada.

Ajustando a Próxima Tela Dinamicamente


• O comando SET SCREEN nnnn altera temporariamente a próxima tela.
• A tela nnnn deve ter uma tela no mesmo module pool.
• A próxima tela é processada depois da tela atual, a menos que você termine a tela atual com o
comando LEAVE SCREEN.
• Se você quer encerrar a tela atual e ir diretamente para a próxima tela num único passo, você
pode usar o comando LEAVE TO SCREEN nnn.

Menu Painter - Overview


• Você usa o Menu Painter para definir funções na tela no stautus particular e determina-as para a
barra de menus própria. Para cada status, você define que as funções de menu estão ativas ou
inativas.

Definindo a Interface I
• Numa request, o sistema propõe valores padrões para barra de menu e define a tecla de função,
mas você pode modificar isso.
• Barras de menu podem conter até oito menus. Você pode definir até seis destes, mas os menus
System e Help são adicionados automaticamente pelo sistema.
• Um único menu contém até 15 entradas, incluindo as funções e suas descrições, nomes de sub-
menus e linhas separadoras.
• Você poderia especificar também todas as funções que são ativadas num status como ativa na
barra de menu.

© by BBKO Consulting 133


Programação ABAP

Definindo a Interface II
• Você determina as funções ativas que um usuário provavelmente mais precisa no situação atual
para a barra de botões. Antes de você fazer isso, o código de função deve ser determinado para
uma tecla de função.
• Você determina códigos de função para teclas de função pelas entradas destas em
“Configurações Recomendadas de Teclas de Funções” ou “Seções de Teclas de Função Definidas
Livremente” .
• O sistema automaticamente define as teclas de função no padrão barra de ferramentas para
teclas de função especial.

Definição Automática de Ícones para Teclas de Função


Tecla de Função Significado Icon (Símbolo)
Enter Enter “ticado”
F11 Salvar Pasta
F3 Voltar Seta p/ a esquerda
Shift+F3 Sair (programa) Seta p/ cima
F12 Cancelar (tela) “X”
Ctrl+P Imprimir Impressora
Ctrl+F Pesquisar Binóculo
Ctrl+G Continuar Pesquisando Binóculo “+”
Ctrl+Screen up Primeira Página Página com seta dupla
Screen up Página Anterior Página com seta p/ cima
Screen down Próxima Página Página com seta p/ baixo
Ctrl+Screen down Última Página Página com seta dupla
F1 Help Interrogação

• O sistema define automaticamente códigos de função que você define na barra de ferramentas
padrão para teclas de função especial.
• Para descobrir quais definições aplicadas para as funções no status atual, clique no termo “Barra
de Ferramentas Padrão”.

Definindo Menus de Área


• Quando for dar manutenção em Menus de Área (que são desenvolvimentos de objetos de
classes), você usa uma versão especial do Menu Painter. Aqui, você define os códigos de
transação para programas diálogos chamados ao invés de especificar códigos de função.
• Esses códigos de transação não têm tipos especiais de função. Eles trabalham como CALL
TRANSACTION.

© by BBKO Consulting 134