Escolar Documentos
Profissional Documentos
Cultura Documentos
ABAP sem
segredo
Tudo Passo a Passo
1.6 Pacote
Agrupa todos os objetos criados no SAP. É possível EXPORTAR tudo que você criou em
ABAP nesse pacote e IMPORTAR para outra Empresa.
Camada de Transporte
Um recipiente onde terá todos os objetos que criamos, quando nós enviarmos para a camada
de transporte vai tudo que tem nela.
Clique no botão .
Aperte
Ordens Workbench – tudo que criamos como objetos (Tabelas, etc..), ou seja objetos
técnicos.
Ordens Customizing – Quando inserimos dados em uma tabela e pegamos todos esses dados
e colocamos em uma ordem de transporte.
Clique em exibir
Liberado – Não pode mexer mais nessa ordem, tem que criar nova ordem.
Clique em Gravar
Primeiros Passos
Ativando um Programa
Clique no palito de fósforo para ativar o programa, assim ele vai executar a última versão
Verificando o Código
Clique em salvar
Variáveis
Valor variável muda em tempo de execução.
Valor constante não muda em tem de execução.
Acesse a SE80.
Depuração
Verifica o sistema executando linha por linha e valores das variáveis para localizar o erro.
Para criar a condição que vai ser utilizada na parada clique no filtro com o quadrado azul (fim
da tela).
Parâmetros
Colocando um titulo
Salvar
Resultado.
Traduzir os campos
Utilizando condição IF
Dicas
Toda vez que iniciamos uma variável ela tem valor inicial, ex. data 0000000, em um IF
podemos verificar se a variável possui um valor inicial ou não.
Nesse exemple quando a variável não conter o valor inicial vai executar alguma coisa.
Utilizando condição Do
Faz um loop infinito.
Podemos fazer a condição de verificação para sair em qualquer parte do código.
Utilizamos o comando EXIT para sair.
Clique em Messages.
Tipo I – Informação
Tipo S – Sucesso
Tipo W – Aviso
Tipo E – Erro
Tipo A – Terminação
Tipo X – Dum
Utilizando as mensagens
O TYPE tem que ser em maiúsculo.
Classe de mensagens
Agrupador de mensagens, onde podemos colocar todas as mensagens e traduzi-las.
A transação para criar classe de mensagens é SE91.
Clique no OK.
Podemos colocar uma explicação mais detalhada, para isso desmarque a opção “Auto-
explciat.”, marque a linha e clique no botão “Texto descritivo” no topo da tela.
Salve.
CAUSE (Causa)
Usuário informou um mês inválido
Clique na aba Estruturas e em seguida digite o nome da sua estrutura, no caso WA_COLAB.
Volte na ABA Desktop 1 e Aperte F5 novamente, será preenchido o valor da segunda variável.
Acesse a SE11.
Após o ENTER irá aparecer o texto que já está sendo utilizado nessa estrutura.
Depurando.
Coloque um ponto de parada na linha 64, precione F5 até a linha 70 pois assim a tabela interna
será preenchida com o primeiro registro.
Modificando um registro
Aperte ENTER.
4.1 Modularização
Ajuda a agrupar o código.
Programa Exemplo.
Já vai trazer
CAP 9
5.1 Eventos
Ação que ocorre no sistema. Executar um código especifico.
AT SELECTION-SCREEN OUTPUT
Serve para desabilitar/habilitar, mostra/ocultar alguns campos na tela de seleção
AT SELECTION-SCREEN
Serve para colocar validações no código, ele entra em ação quando preenchemos os campos e
executamos.
Você pode definir vários valores para consultar na tabela, esses serão valores de inserção
(Inserção na Busca).
Quando chegar no ponto de parada clique em s_carrid, no lado direito irá aparecer a tabela
que armazerá o resultado da consulta, clique no desenho da tabela conforme circulado abaixo.
A letra “I“ significa que vai incluir na Busca, se houvesse uma exceção iria aparecer “E”.
6.1 Help
Professor: fabiopagoti@abap101.com
Esse é o executável
Chamador
A ser chamado
Programa chamador.
DICA
Execute o programa chamador, digite algo que será exportado para a memória.
Quando for executado ele irá chamar o segundo programa e vai preencher o campo p-nome
com os dados da memória.
Code Inspector
Clique com o botão direito sobre o programa, escolha verificar e em seguida “Code Inspector”.
Transação SE30
Clique em voltar duas vezes no voltar para chegar novamente na tela SE30.
ST05
Em Inglês
Domínio
Digite S_CITY em domínio e clique em Exibir.
7.1 Tabelas
Clique em Criar.
Intervalos
Cada campo que você preencher pressione ENTER para aparecer o martelinho amarelo.
É um molde para Work Área para nomes. Se quisermos uma workarea para estruturas de
nomes em programa poderemos usar essa.
Ampliável como Pretendido, permite modificar essa estrutura sem me apresentar avisos.
Tipo Incorporado
Coloque Sim.
Estamos criando uma relação entre o campo MANDT com a tabela T000, para que seja
valido somente os dados da tabela T000 no campo MANDT.
Marque o campo MANDT, depois clique na chavinha e depois Sim para criar a chave
estrangeira.
Após tudo isso irá aparecer a tabela de onde os valores serão puxados.
Se você quiser armazenar no buffer o campo EMP_NUM então informe 3 na tela acima.
Salve e Ative.
Clique no botão Relações e irá mostrar todas as tabelas que se relacionam com a tabela
SCARR.
Condições
Se eu quisesse somente os registros da American Air Line ou seja só ‘AA’.
Clique em atualizar.
Volte na SM30.
Clique em Entradas Novas para inserir dados.
Vá na em:
Altere:
Clique em Salvar.
Acesse a SM30.
Descobrindo o nome do campo da tabela na SM30 clique nele e depois aperte F1, depois
clique no martelinho que será exibida a tela abaixo:
Para executar a ação, vamos descobrir qual a função dos botões, para isso volte na SM30
clique sobre o botão EXIBIR e segure, arraste o cursor para fora do foco, o botão ficará
selecionado conforme imagem abaixo, após isso aperte F1.
BAPI
Select Option
Você consegue colocar um intervalo.
Proteger um campo
Preenchendo os campos
Crie um module com o nome ZMODULEPOOL_23 e deixe marcado a opção “Com include TOP”.
Você verá:
Salve e Ative, você vai notar que não conseguirá sair, ou seja, você será obrigado a preencher
os campos obrigatórios.
Para sair da tela sem preencher os campos obrigatórios, acesse os botões novamente clicando
duas vezes sobre STATUS_0100 conforme abaixo.
Salve e teste, quando acessar a tela você poderá sair dela sem preencher os campos
obrigatórios.
Se em informação global estiver vermelho significa que algo foi para produção com erro.
Salve.
Usando esse comando o SAP irá guardar a ultima coisa que você escreveu em qualquer campo
onde estiver marcado essas duas opções.
Saia da tela e volte novamente. Quando você voltar a tela estará preenchida com a última
informação digitada.
Liberando os campos
Deixando alguns campos liberados. Esse recurso serve para auxiliar o usuário no
preenchimento dos campos, ou seja, se ocorrer algum erro no preenchimento do formulário o
usuário será avisado e os campos escolhidos serão destravados.
No exemplo abaixo iremos deixar destravado somente 3 campos.
Conforme abaixo, isso significa que os três campos com FIELD ficarão destravados.
Para Lista:
ABAP sem segredo | Todos os direitos reservados | Revisado em 09/02/14 259
Autor Marcelo José de Oliveira Santos - marcelo@mjdos.com.br
Alterando ícone dependendo do conteúdo localizado na tabela.
Podemos usar a workarea para saber se foi localizado algum registro, se foi localizado então o
ícone ficará verde, senão amarelo.
Resultado
Colocando Ação
Exemplo:
AUTHORITY-CHECK
Acrescente o WAIT para parar a execução do programa e para você verificar se a tabela foi
travada.
Executando o Teste
Acesse a SM12 e verifique o que está bloqueado, conforme imagem abaixo:
DICA: Pacote Standard – SZN (Aqui que estão os módulos de funções para ser usado com
SNRO)
Transação AL11
OPEN DATASET (Cria um arquivo)
Aperte OK.
14.1 Continuação
*&--------------------------------------------------------------------
*& Report ZRFI_CLASSES_23
*&--------------------------------------------------------------------
REPORT ZRFI_CLASSES_23.
METHODS define_atributos
IMPORTING
im_titular TYPE string
im_saldo TYPE dec_16_02_s.
METHODS retorna_saldo
RETURNING VALUE(re_saldo) TYPE dec_16_02_s.
METHODS imprime_atributos.
ENDCLASS.
METHOD constructor.
lcl_conta=>num_contas = lcl_conta=>num_contas + 1.
ENDMETHOD.
METHOD define_atributos.
me->titular = im_titular.
me->saldo = im_saldo.
ENDMETHOD.
METHOD retorna_saldo.
re_saldo = me->saldo.
ENDMETHOD.
METHOD imprime_atributos.
ENDMETHOD.
METHOD retorna_num_contas.
re_num_contas = lcl_conta=>num_contas.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
r_contal->define_atributos(
EXPORTING
im_titular = 'Marcelo'
im_saldo = '100').
ULINE.
vl_saldo = r_contal2->retorna_saldo( ).
WRITE: 'Saldo Conta 2', vl_saldo.
ULINE.
vl_num_contas = lcl_conta=>retorna_num_contas( ).
WRITE: 'Número de contas', vl_num_contas.
ULINE.
REPORT ZRFI_CLASSES_23.
METHODS constructor
IMPORTING
im_titular TYPE string
im_saldo TYPE dec_16_02_s.
METHODS define_atributos
IMPORTING
im_titular TYPE string
im_saldo TYPE dec_16_02_s.
METHODS retorna_saldo
RETURNING VALUE(re_saldo) TYPE dec_16_02_s.
METHODS imprime_atributos.
ENDCLASS.
METHOD constructor.
me->titular = im_titular.
me->saldo = im_saldo.
lcl_conta=>num_contas = lcl_conta=>num_contas + 1.
ENDMETHOD.
METHOD define_atributos.
me->titular = im_titular.
me->saldo = im_saldo.
ENDMETHOD.
METHOD retorna_saldo.
re_saldo = me->saldo.
ENDMETHOD.
METHOD imprime_atributos.
ENDMETHOD.
METHOD retorna_num_contas.
re_num_contas = lcl_conta=>num_contas.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
r_contal->define_atributos(
EXPORTING
im_titular = 'Marcelo'
im_saldo = '100').
r_contal->imprime_atributos( ).
r_contal2->imprime_atributos( ).
ULINE.
vl_num_contas = lcl_conta=>retorna_num_contas( ).
WRITE: 'Número de contas', vl_num_contas.
ULINE.
REPORT ZRFI_HERANCA_23.
*---------------------------------------------------------------------
* CLASS lcl_conta DEFINITION
*---------------------------------------------------------------------
CLASS lcl_conta DEFINITION.
PUBLIC SECTION.
METHODS constructor
IMPORTING
im_titular TYPE string
im_saldo TYPE dec_16_02_s.
METHODS define_atributos
IMPORTING
im_titular TYPE string
im_saldo TYPE dec_16_02_s.
METHODS retorna_saldo
RETURNING value(re_saldo) TYPE dec_16_02_s.
METHODS imprime_atributos.
CLASS-METHODS retorna_num_contas
RETURNING value(re_num_contas) TYPE i.
PROTECTED SECTION.
DATA: titular TYPE string,
saldo TYPE dec_16_02_s.
CLASS-DATA num_contas TYPE i.
PRIVATE SECTION.
*---------------------------------------------------------------------
* CLASS lcl_conta IMPLEMENTATION
*---------------------------------------------------------------------
CLASS lcl_conta IMPLEMENTATION.
lcl_conta=>num_contas = lcl_conta=>num_contas + 1.
ENDMETHOD. "constructor
METHOD define_atributos.
me->titular = im_titular.
me->saldo = im_saldo.
ENDMETHOD. "define_atributos
METHOD retorna_saldo.
re_saldo = me->saldo.
ENDMETHOD. "retorna_saldo
METHOD imprime_atributos.
WRITE: 'Titular: ', me->titular.
WRITE: ' - Saldo: ', me->saldo.
NEW-LINE.
ENDMETHOD. "imprime_atributos
METHOD retorna_num_contas.
re_num_contas = lcl_conta=>num_contas.
ENDMETHOD. "retorna_num_contas
ENDCLASS. "lcl_conta IMPLEMENTATION
*---------------------------------------------------------------------
* CLASS lcl_conta_corrente DEFINITIO
*---------------------------------------------------------------------
CLASS lcl_conta_corrente DEFINITION
INHERITING FROM lcl_conta.
PUBLIC SECTION.
DATA limite TYPE dec_16_02_s READ-ONLY.
METHODS constructor
IMPORTING
im_titular TYPE string
im_saldo TYPE dec_16_02_s
im_limite TYPE dec_16_02_s.
METHODS retorna_limite
RETURNING value(re_limite) TYPE dec_16_02_s.
ENDCLASS. "lcl_conta_corrente DEFINITIO
*---------------------------------------------------------------------
* CLASS lcl_conta_corrente IMPLEMENTATION
*---------------------------------------------------------------------
CLASS lcl_conta_corrente IMPLEMENTATION.
METHOD constructor.
super->constructor(
EXPORTING
im_titular = im_titular
im_saldo = im_saldo
).
me->limite = im_limite.
ENDMETHOD. "constructor
METHOD retorna_saldo.
re_saldo = me->saldo + me->limite.
ENDMETHOD. "retorna_saldo
METHOD retorna_limite.
re_limite = me->limite.
ENDMETHOD. "retorna_limite
ENDCLASS. "lcl_conta_corrente IMPLEMENTATION
*---------------------------------------------------------------------
* CLASS lcl_conta_poupanca DEFINITIO
*---------------------------------------------------------------------
CLASS lcl_conta_poupanca DEFINITION
INHERITING FROM lcl_conta.
PUBLIC SECTION.
DATA taxa TYPE dec_16_02_s READ-ONLY.
METHODS constructor
IMPORTING
im_titular TYPE string
im_saldo TYPE dec_16_02_s
im_taxa TYPE dec_16_02_s.
METHODS retorna_taxa
RETURNING value(re_taxa) TYPE dec_16_02_s.
*---------------------------------------------------------------------
* CLASS lcl_conta_poupanca IMPLEMENTATION
*---------------------------------------------------------------------
CLASS lcl_conta_poupanca IMPLEMENTATION.
METHOD constructor.
super->constructor(
EXPORTING
im_titular = im_titular
im_saldo = im_saldo
).
me->taxa = im_taxa.
ENDMETHOD. "constructor
METHOD retorna_saldo.
re_saldo = me->saldo * ( 1 + me->taxa ).
ENDMETHOD. "retorna_saldo
METHOD retorna_taxa.
re_taxa = me->taxa.
ENDMETHOD. "retorna_taxa
ENDCLASS. "lcl_conta_poupanca IMPLEMENTATION
*---------------------------------------------------------------------
* CLASS lcl_banco DEFINITION
*---------------------------------------------------------------------
CLASS lcl_banco DEFINITION.
PUBLIC SECTION.
DATA conta_lista TYPE TABLE OF REF TO lcl_conta.
METHODS adiciona_conta
IMPORTING
im_nova_conta TYPE REF TO lcl_conta.
METHODS retorna_saldo_total
RETURNING value(re_saldo_total) TYPE dec_16_02_s.
METHODS retorna_limite_total
RETURNING value(re_limite_total) TYPE dec_16_02_s.
*---------------------------------------------------------------------
* CLASS lcl_banco IMPLEMENTATION
*---------------------------------------------------------------------
METHOD retorna_limite_total.
ENDMETHOD. "retorna_limite_total
START-OF-SELECTION.
vl_num_contas = lcl_conta=>retorna_num_contas( ).
WRITE: 'Numero de contas', vl_num_contas.
NEW-LINE.
r_conta1->define_atributos(
EXPORTING
im_titular = 'Fabio'
im_saldo = '100' ).
r_conta1->imprime_atributos( ).
r_conta2->imprime_atributos( ).
r_conta_generica->imprime_atributos( ).
ULINE.
vl_num_contas = lcl_conta=>retorna_num_contas( ).
WRITE: 'Numero de contas', vl_num_contas.
15.1 Herança
16.1 ALV
REUSE_ALV_LIST_DISPLAY (Função da SE37)
Transação SE24
REPORT ZRCA_ALV_SIMPLES_23.
START-OF-SELECTION.
SELECT *
UP TO 20 ROWS
FROM sflight
INTO TABLE it_sflight.
REPORT ZRCA_ALV_SIMPLES_23.
START-OF-SELECTION.
SELECT *
UP TO 30 ROWS
FROM sflight
INTO TABLE it_sflight.
PERFORM montar_campos.
PERFORM montar_layout.
PERFORM exibir_alv.
*&--------------------------------------------------------------------
*& Form MONTAR_CAMPOS
*&--------------------------------------------------------------------
* text
*---------------------------------------------------------------------
FORM montar_campos.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'CARRID'.
wa_fieldcat-tabname = 'IT_SFLIGHT'.
wa_fieldcat-seltext_m = 'Companhia'.
APPEND wa_fieldcat TO it_fieldcat.
ENDFORM. "MONTAR_CAMPOS
*&--------------------------------------------------------------------
*& Form montar_layout
*&--------------------------------------------------------------------
wa_layout-zebra = 'X'.
wa_layout-colwidth_optimize = 'X'.
ENDFORM. "montar_layout
*&--------------------------------------------------------------------
*& Form exibir_alv
*&--------------------------------------------------------------------
* text
*---------------------------------------------------------------------
FORM exibir_alv.
EXPORTING
i_callback_program = sy-repid
it_fieldcat = it_fieldcat
is_layout = wa_layout
i_grid_title = 'Lista de Voos'
TABLES
t_outtab = it_sflight.
ENDFORM. "exibir_alv
Coloque o nome do elemento de dados localizado no campo “Nº pessoal” da transação PA20.
Acesse o programa
Quando o programa abrir, clique uma vez no nome do programa e depois em “Procurar”.
Nesse caso encontrou 3 exit’s. Clique duas vezes sobre a primeira EXIT.
Nesse exemplo, não iremos criar pois ele já existe, iremos abri-lo através da SE37.
Ative o programa.
Salve e Ative
Ative.
O resultado será uma opção nova em seu menu que leva até a transação PA20.
Salve e Ative
Clique em voltar.
Clique com o botão direito no campo FUMANTE e siga os passos abaixo, isso irá transformar o
campo em Checkbox.
18.1 BADI
Antes de mexer na BADI, verifique se a mesma está desativada, ATENÇÃO, faça as alterações
somente se a BADI estiver inativa.
Ative a Implementação.
Isso porque no código do programa o tamanho da coluna é pego por essa variável.
19.1 Continuando
Clique com o botão direito e escolha Insert Element.
METHODS
Nó – Pode ser uma estrutura ou tabela interna. Se for uma variável utilizeAtribute.
O resultado será:
METHOD
S
* Ler dados Nó
LO_EL_SCARR->GET_STATIC_ATTRIBUTES(
IMPORTING
STATIC_ATTRIBUTES = LS_SCARR ).
SELECT SINGLE *
INTO LS_SCARR
FROM SCARR
WHERE CARRID EQ LS_SCARR-CARRID.
* Atualizar Nó
LO_EL_SCARR->SET_STATIC_ATTRIBUTES(
EXPORTING
STATIC_ATTRIBUTES = LS_SCARR ).
endmethod.
Clique em CONTEXT.
O resultado será:
Confirme.
20.1 Continuando
Crie um novo WEBD DRYNPRO.
Chamado SPFLI.
O resultado será:
Resultado:
method ONACTIONCARREGAR_DETALHES .
LO_EL_SPFLI->GET_STATIC_ATTRIBUTES(
IMPORTING
STATIC_ATTRIBUTES = LS_SPFLI ).
SELECT SINGLE *
INTO LS_SPFLI
FROM SPFLI
WHERE CARRID EQ LS_SFLIGHT-CARRID
AND CONNID EQ LS_SFLIGHT-CONNID.
LO_EL_SPFLI->SET_STATIC_ATTRIBUTES(
EXPORTING
STATIC_ATTRIBUTES = LS_SPFLI ).
endmethod.