1 of 169

TREINAMENTO - ABAP

2 of 169

ABAP – Conceito

Conceito breve do SAP

 

O SAP é um sistema que trabalha com um número muito grande de tabelas interligadas, que armazenam e manipulam os valores de controle dos processos. Essas tabelas são responsáveis pelo armazenamento dos valores do sistema e são divididas em grupos que se interligam em um todo. Assim, existem tabelas responsáveis pelas informações de FI, outras pelas informações de SD, outras ainda por MM, mas todas elas apresentam campos chaves que permitem, pelos mais diferentes e complicados caminhos, a interligação e consistência de todo o sistema.

Embora a ferramenta ABAP/4 dentro do SAP seja muito poderosa e praticamente capaz de permitir qualquer customização do sistema, é muito importante manter os conceitos originais sempre em mente, e nunca tentar forçar alguma coisa que deveria ter um comportamento natural.

Por exemplo, nunca tente alterar um valor de uma tabela do SAP (embora perfeitamente possível, com o comando UPDATE), sem um minucioso estudo de suas implicações anteriormente. Isso pode comprometer a integridade dos dados do sistema, se não forem atualizados todos os valores de todas as tabelas relacionadas a essa alteração.

3 of 169

ABAP – Conceito

MANDANTE – Em uma mesma máquina pode-se Ter mais de um mandante ( client ) com o R/3, Trata-se uma divisão lógica de informações, num mesmo espaço físico, com o tempo irá se perceber que muitas coisas são dependentes de mandantes e outras não. Por exemplo o primeiro campo de 95 % das tabelas é o campo mandante, logo, quando nos logamos em um mandante ‘n’, não iremos acessar as informações desta tabela armazenadas para o mandante ‘n+1’. Por outro lado os programas desenvolvidos em uma máquina irão estar disponíveis para todos os mandantes.

 

TRANSAÇÃO – São códigos alfanuméricos, os quais estão relacionados com programas on-line ( Relatórios, Batch input, geração de arquivo texto etc... ), módulos de diálogo ou sub-menus. Além de agilizar a chegada ao programa pretendido, são a base para a montagem dos perfis de usuários finais. (Uma vez dominadas, muitas pessoas acabam digitando a transação ao invés de percorrer o Menu ).

 

ABAP WORKBENCH – ( Transação S001 ) Ambiente de desenvolvimento, onde se cria/altera dicionários de dados, programas, funções, Menus, etc ... ABAP -> Advanced Business Application Programming.

 

IMG ou CUSTOMIZING – Parametrização básica de todo o ambiente funcional do SAP, como Empresas, Estruturas de Empreendimentos, Plantas das Fábricas, Bancos, Moedas, etc ...

 

CLASSE DE DESENVOLVIMENTOOu development Class, trata-se da forma a qual o programa, o dicionário de dados, a transação etc.. serão gravadas para o R/3, ou seja normalmente sugere-se gerá-los em Objeto Local ( $TMP ), para futuramente ( depois de testes ) deslocá-los para uma classe de desenvolvimento possibilitando-se o transporte deste objeto para outras máquinas.

 

REQUESTSempre que um objeto estiver em uma classe de desenvolvimento diferente de $TMP, todas as alterações deste precisarão de um request, o qual será transportados para outras máquinas mantendo-se assim a integridade.

4 of 169

ABAP – Conceito

PROGRAMAS ON-LINETrata-se dos programas de manipulação de dados, na maioria das vezes somente para extração em arquivo texto, ou relatório. Também são programas on-line, os Batch Inputs (os quais alteram a base por executar transações ), mas principalmente divergem dos módulos de diálogo ( Módulo Pool ).

 

MODULE POOL – São a grande maioria de programas que manipulam telas e fazem manutenção de dados ( Standard ) tipo Inclusão, Alteração e Exclusão. Possui alguns conceitos novos tipo PBO e PAI, os quais serão explanados mais adiante.

 

BATCH INPUT – São programas que executam de forma automática ( todos os registros de um arquivo texto por exemplo ), qualquer transação do R3.

 

VARIANTES – São valores fixo pré-definidos, para qualquer tela de seleção de parâmetros de programas, ou seja, quando um usuário sempre informa os mesmos dados, ou para execução de um job. Difere do perfil de usuário > Manutenção de dados, o qual fixa dados para qualquer tela, para um usuário.

 

STATUS – Indica qual a transação, nome do programa, tela e outras informações, a qual o processo em questão se refere.

  

CLASSE DE MENSAGENS – Divisão física das Mensagens de erros e/ou sucessos para os diversos módulos e sub-divisões.

 

ANÁLISE DE DUMPS – Normalmente são gerados dumps, quando se ocorre um erro não previsto, tipo “Zero Divide”. Caminho para análise de dumps gerados: Ferramentas > Administração > Monitoramento > Análise Dump.

5 of 169

ABAP – Navegador

NAVEGAÇÃO BASICA

  

Menu Principal do R/3: ( Neste Menu estão todos os Módulos Funcionais e mais o ambiente de desenvolvimentos: Ferramentas > ABAP/4 Workbench ).

6 of 169

ABAP – Data Dictionary

DICIONÁRIO DE DADOS

  

O dicionário de dados do ABAP/4 (DD) é uma fonte central de informações provenientes do sistema gerenciador de dados do SAP. Sua principal função é suportar a criação e o gerenciamento das definições de dados, também conhecidas como “metadados”.

Este é o ambiente de dicionário de dados, display, criação e alteração de tabelas, e principalmente pela ferramenta de Data Browse – Utilitários > Table contents ( também disponível na transação SE16 ).

 

Escolha display de uma tabela qualquer por exemplo T001W ( Tabela de Centros ), para uma familiarização com alguns conceitos. ( Trata-se de uma tabela de 53 campos, dependente de mandante, com a chave primária de um só campo WERKS ).

�Muita coisa funciona no ABAP/4, com duplos cliques, por exemplo, dando duplo clique no DATA ELEMENT “NAME1”, é similar a voltar uma tela escolher o radio buttons Elemento de Dados com o nome “NAME1”. Podemos também navegar pelas tabelas que possuem chave estrangeira da tabela que estamos. No caso a T001W, possui chave estrangeira somente da tabela T000 ( Tabela de Mandantes ).

 

Data Element – Trata-se de um referência a qual pode ser a mesma para diferentes campos de diferentes tabelas, onde se define labels ( curtos e longos ) para o campo, e principalmente referencia-se ao domínio dele. ( domain ).

 

Domain – Trata-se como o próprio nome diz do domínio da informação que este campo pode conter. Este domínio pode ser uma outra tabela ou um domínio fixo.

Caminho: Ferramentas > ABAP/4 Workbench > Dictionary. ( SE11 )

7 of 169

ABAP – Data Dictionary

DICIONÁRIO DE DADOS

  

8 of 169

ABAP – Data Dictionary

Exercício: Visualizar Conteúdo das Tabelas

Exercício – Visualizar conteúdo das Tabelas:

  1. Transação SE11
  2. Informar o nome da tabela (VBAK)
  3. Menu Utilitários -> Conteúdo da Tabela -> Exibir

Para alterar os campos de filtro:

Menu Configurações -> Critérios de Seleção

Para alterar os campos de exibição:

Menu Configurações -> Formato de Lista -> Seleção Coluna

  1. Transação SE16
  2. Informar o nome da tabela (VBAK)
  3. Menu Utilitários -> Conteúdo da Tabela -> Exibir

Para alterar os campos de filtro:

Menu Configurações -> Critérios de Seleção

Para alterar os campos de exibição:

Menu Configurações -> Formato de Lista -> Seleção Coluna

9 of 169

ABAP – Tabela

ABAP Dictionary

Campo3

Campo2

Campo1

Campo3

Campo2

Campo1

Database – Definição Física

Definição Lógica

A definição de uma tabela no SAP contém os seguintes componentes:

  • Campos: define o nome e o tipo dos dados contidos na tabela

  • Chave Estrangeira: define a relação entre tabelas

  • Configurações Técnicas: controla como a tabela deve ser armazenada no BD

  • Índices: torna a seleção de registros mais rápida

10 of 169

ABAP – Tabela

Objeto

Descrição

Tabela

Repósitorio de armazenamento

Campos

Define as informações armazenadas na tabela

Elemento de Dados

Descreve o significado do domínio em relação ao negócio e determina como o campo será exibido ao usuário. Por ser armazenado como objeto no dicionário, pode ser reutilizado em outras tabelas.

Domínio

Descreve os valores válidos para um campo. O domínio especifica informações como o tipo de dados e o tamanho do campo. Por ser armazenado como objeto no dicionário, pode ser reutilizado assim como os Elementos de Dados.

11 of 169

ABAP – Tabela

Campo

Elemento de Dados

Domínio

Usa

Usa

Tabela

12 of 169

ABAP – Tabela

Neste exemplo, os campos FORCURAM (tabela SBOOK) e PRICE (tabela SFLIGHT) possuem o mesmo domínio S_PRICE.

Para distinguir a aplicação nos negócios SAP, cada campo utiliza um Elemento de Dados.

Utilizam o mesmo domínio pois ambos os campos possuem atributos técnicos similares.

13 of 169

ABAP – Tabela

Tipo de Dados:

14 of 169

ABAP – Tabela

2 x

Transação : SE11

15 of 169

ABAP – Tabela

Para criar uma tabela devemos seguir os seguintes passos:

    • Criar a tabela

    • Especificar os campos

    • Definir os “elementos de dados” e “domínios”

    • Especificar as configurações técnicas

    • Ativar a tabela

Criação de Tabela

16 of 169

ABAP – Tabela

Exercício: Criar Tabela

Exercício - Criar Tabela

  1. Transação SE11

  • Escolha “Tab. Banco Dados”, entre com o nome da tabela

  • Escolha criar

  • Entre com as seguintes informações:

Descrição Breve: Descrição da tabela

Classe de entrega: A

Atualiz. Visão tabs: Permitida

5. Salve a tabela

17 of 169

ABAP – Tabela

Exercício: Especificar os campos da tabela

Exercício – Especificar os campos da tabela

  1. Transação SE11

  • Escolha “Tab. Banco Dados”, entre com o nome da tabela previamente criada

  • Escolha modificar

  • Entre com os nomes dos campos

  • Salve a tabela

18 of 169

ABAP – Tabela

Exercício: Criar Domínio e Elemento de Dados

Exercício – Definir Elemento de dados e Domínio

  1. Certifique-se que a tabela está em modo de edição.

  • Atribua um nome para o elemento de dados dos campos criado acima.

  • Duplo click sobre o campo `Elemento de Dados´.

  • Entre com as seguintes informações:

  • Descrição Breve : texto identificador do E.D.

  • Domínio: atribua um nome ao domínio que será criado

  • Duplo click sobre o campo `Domínio´

  • Categoria de Dados : Tipo de Dados do campo

  • Nº de Posições: Tamanho do campo

  • Ative o domínio e click no botão `voltar´

  • Ative o elemento de dados e click no botão `voltar´

  • Salve a tabela

19 of 169

ABAP – Tabela

Exercício: Modificar Domínio - Lista de Valores

Exercício – Definir uma lista de valores ao Domínio

  1. Na tela de edição de domínio, certifique-se que estamos em modo de modificação

  • Selecione a aba `Interv.vals´

  • Adicione ao grid de valores individuais os valores desejados

  • Ative o domínio

20 of 169

ABAP – Tabela

Define como a tabela será armazenada no BD.

Os parâmetros mais importantes são:

  • Data Class: informa a área física na qual a tabela será armazenada.

  • APPL0 – Registros raramente alterados
  • APPL1 – Registros frequentemente alterados
  • APPL2 – Dados customizáveis definidos na instalação do software

  • Size Category: define o tamanho previsto da tabela.

Configurações Técnicas

21 of 169

ABAP – Tabela

Exercício: Atualizar Configurações Técnicas

Exercício – Atualizar Configurações Técnicas

  1. Transação SE11

  • Escolha “Tab. Banco Dados”, entre com o nome da tabela

  • Escolha modificar

  • Clicar sobre o botão `Configurações Técnicas´

  • Preencher o campo Categoria Dados

  • Preencher o campo Categor. Tamanho

  • Salvar

22 of 169

ABAP – Tabela

Exercício: Criar Índice

Exercício – Criar Índice na tabela

  • Com a tabela em modo de edição clicar sobre o botão `Índice´ (SE11)

  • Informar uma identificação única para o índice a ser criado

  • Preencher o campo Descrição Breve

  • Se atentar se o índice deve ser único ou não

  • Preencher todas as colunas que devem fazer parte do índice no grid apresentado

  • Ativar

23 of 169

ABAP – Tabela

Para definir relacionamentos entre tabelas utilizamos ‘Foreign Keys’.

Usando essa chave, criamos rapidamente uma validação para o campo de entrada.

Chaves Estrangeiras

24 of 169

ABAP – Tabela

Exercício: Criar Chave Estrangeira

Exercício – Criar Chave Estrangeira

  1. Certifique-se que a tabela está em modo de edição
  2. Selecione a coluna que queremos adicionar a chave.

  • Click sobre o botão “chave externa” em destaque na figura acima
  • Informe a tabela e clique sobre o botão “gerar proposta”

  • Automaticamente será informado os campos do relacionamento

                  • Clicar sobre o botão “Transferir”

25 of 169

ABAP – Tabela

Exercício: Criar Diálogo de Manutenção de Tabela (SM30)

Exercício – Criar Diálogo de Manutenção de Tabela (SM30)

  1. Com a tabela em edição na transação SE11, acessar no Menu a opção Utilitário -> Gerador de Atualização de Tabela
  2. Preencher os campos em destaque abaixo
  3. Clicar no botão `Criar´

26 of 169

ABAP – Principais Tabelas

Genéricas

KNA1 - Mestre de clientes

TVARV - Variáveis para variantes

T012K - Mestre de bancos

EKKO - Cabeçalho de pedidos

EKPO - Item de pedidos

LFB1 - Mestre de fornecedores

T000 - Tabela de mandantes

T001 - Tabela de empresas

T001W - Tabela de centros e filiais

TCURR - Taxas de conversão de valores

CSKS - Registro mestre de centro de custo

CSKT - Textos de centro de custo

TBTCO - Tabela de jobs

MARV - Períodos corrente e precedente de materiais

TADIR - Catálogo de objetos do R/3

  • MM & PP

PLAF - Tabela de Ordem planejada

MARA - Mestre de Materiais

MARM - Tabela de unidade de medida

MKPF - Cabeçalho de documentos de material

MSEG - Item de documentos de material

MARD - Estoques por depósito / centro

MAKT - Descrições de materiais

MARC - Segmento de materiais por centro

MAST - Ligação Material com lista técnica

STKO - Cabeçalho lista técnica

STPO - Item da lista técnica

S032 - Estoque retroativo

S031 - Estoque retroativo

AFKO - Cabeçalho da ordem PCP

MBEW - Avaliação de material

T134T - Denominação de tipos de material

27 of 169

ABAP – Principais Tabelas

FI & CO

BKPF - Cabeçalho de documentos contábeis

BSEG - Itens de documentos contábeis

BSIS - Contrapartida por contas contábeis de clientes

BSAS - Contrapartida por contas contábeis de fornecedores

BSIK - Partidas compensadas de fornecedores

BSAK - Partidas abertas de fornecedores

BSID - Partidas compensadas de clientes

BSAD - Partidas abertas de clientes

LFA1 - Mestre de fornecedores

LFB1 - Mestre de fornecedores ( Empresa )

GLT0 - Mestre de contas razão

AUFK - Mestre de ordens

COSP - Objetos CO – valores de ordens de investimentos

SKA1 - Mestre das contas razão

COBK - Cabeçalho de documentos de CO

COEP - Partidas de CO

COVP - View das tabelas COBK e COEP

  • SD

VBAK - Cabeçalho de ordem de venda

VBAP - Itens de ordem de venda

LIKP - Cabeçalho de fornecimentos

LIPS - Itens de fornecimentos

VTTK - Cabeçalho de transportes

VTTP - Itens de transportes

VBRK - Cabeçalho de faturamento

VBRP - Itens de faturamento

J_1BNFDOC - Cabeçalho de notas fiscais

J_1BNFLIN - Itens de notas fiscais

28 of 169

ABAP – View

Uma visão em um banco de dados é uma relação que não armazena dados, mas é definida dinamicamente por uma consulta que é previamente analisada e otimizada.

Entre as principais utilidades estão o aumento de segurança por propiciar uma visão limitada e controlada dos dados que podem ser obtidos da base (a depender do SGDB utilizado) e a performance por utilizar uma consulta previamente otimizada, tornando desnecessário este processo quando ela é realizada.

29 of 169

ABAP – View

Exercício: Criar VIEW

Exercício – Criar View de Banco de Dados

  • Na transação SE11, marcar a opção `Visão´ e clicar Criar
  • Selecionar `Visão de banco de dados´, transferir
  • Preencher o campo Descrição Breve
  • Na Aba Tabelas/Condições join informamos as tabelas e os campos de relacionamento entre essas tabelas, conforme imagem abaixo

30 of 169

ABAP – Search Help

  • Na transação SE11 cria-se uma ajuda de pesquisa.

  • Atribui-se a tabela e os campos que servirão de ajuda quando o search-help for acionado, conforme imagem que segue.

31 of 169

ABAP – Search Help

Defini-se o nome da tabela que vai mostrar o dados na ajuda de pesquisa

- Se flegar o campo IMP e EXP, o campo irá aparecer na Ajuda de pesquisa e irá também retornar para a tabela com o valor selecionado. 

- Se Flegar somente o IMP, simplesmente mostrará o campo como uma descrição

32 of 169

ABAP – Search Help

Para “amarrar” o search-help a um campo da tabela siga os passos seguintes

1- Selecionar o campo desejado da tabela e clicar sobre o botão ‘Aj.p/pes.’

2- Informar o nome da ajuda de pesquisa.

3- <Enter>

33 of 169

ABAP – Search Help

4- Devemos associar o campo de IMP e EXP do search-help ao da tabela

5- Click no botão Transferir

34 of 169

ABAP – Report parte I

35 of 169

ABAP – Reports

Um trabalho muito comum, a ser realizado em novos projetos ( implementações ), e também em projetos que já estejam em andamento, são os relatórios.

 

Normalmente são extrações da base de dados, geração de tabelas internas, e posterior impressão com quebras e totais.

 

Como vimos anteriormente o grande trabalho esta em determinar aonde estão as informações na base de dados, pois uma vez determinadas estas tabelas, o ABAP/4 é bastante simples para a montagem de Reports.

  

Abaixo segue um exemplo de como o Report fica armazenado em tela, após a execução.

36 of 169

ABAP – Reports

Transação: SE38

37 of 169

ABAP – Tela de Seleção

38 of 169

ABAP – Parameters

Disponibiliza um campo de entrada na tela, para que o usuário possa entrar um valor único.

Parameters <nome> TYPE/LIKE <tipo> [DEFAULT <valor>] [OBLIGATORY].

Parameters: <nome> TYPE/LIKE <tipo> [DEFAULT <valor>] [OBLIGATORY],

<nome> TYPE/LIKE <tipo> [DEFAULT <valor>] [OBLIGATORY],

<nome> TYPE/LIKE <tipo> [DEFAULT <valor>] [OBLIGATORY].

Parameters: <nome> AS CHECKBOX [DEFAULT X].

Parameters: <nome1> RADIOBUTTON GROUP <grupo1> [DEFAULT X],

<nome2> RADIOBUTTON GROUP <grupo1>,

<nome3> RADIOBUTTON GROUP <grupo2> [DEFAULT X],

<nome4> RADIOBUTTON GROUP <grupo2>.

REPORT zcalculo.

DATA: v_result(4) TYPE N.

PARAMETERS p_valor(2) TYPE n default 1 obligatory.

v_result = ( p_valor ) * ( 5 ) .

WRITE: v_result.

39 of 169

REPORT zteste.

TABLES: T001.

SELECT-OPTIONS: so_filt FOR t001-bukrs OBLIGATORY.

WRITE: so_filt-low,

so_filt-high.

ABAP – Select Options

SIGN

OPTION

LOW

HIGH

I

BT

0001

2236

SELECT-OPTIONS <campo> FOR <campo> [OBLIGATORY].

Disponibiliza um campo de entrada na tela, para que o usuário possa entrar um range de valor.

LOW

HIGH

Tabela Interna : so_filt

40 of 169

ABAP – Select Options

Clicando no botão em destaque, ele disponibiliza outras opções de seleção.

SIGN

OPTION

LOW

HIGH

I

EQ

AA

I

EQ

AB

I

EQ

AC

I

EQ

UA

Tabela Interna : so_fli

41 of 169

ABAP – Elemento de Texto

42 of 169

ABAP – Frame

SELECTION-SCREEN BEGIN OF BLOCK <nm_bloco> WITH FRAME TITLE <texto>.

Parameters: ...

Select-Options: ...

SELECTION-SCREEN END OF BLOCK <nm_bloco>.

REPORT zcalculo.

DATA: v_result(4) TYPE N.

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

PARAMETERS p_valor(2) TYPE n default 1 obligatory.

SELECTION-SCREEN END OF BLOCK bl1.

v_result = ( p_valor ) * ( 5 ) .

WRITE: v_result.

2x

43 of 169

ABAP – Variáveis

44 of 169

ABAP – Iniciando uma Variável

MOVE <objeto> TO <objeto2>.

<objeto2> = <objeto>.

REPORT zcalculo.

DATA: v_result(4) TYPE N,

v_nome(30) TYPE C.

CLEAR: v_result, v_nome.

MOVE: 2 TO v_result.

V_nome = ‘Joao’.

Para atribuir Valor à uma variável

45 of 169

ABAP – Cálculos

<variavel> = <expressão aritmética>.

DATA: v_result(4) TYPE N,

v_numero(4) TYPE N,

v_nome(30) TYPE C.

v_result = 3 + 5.

v_numero = v_result * 3.

V_result = ( 18 mod 5 ).

46 of 169

ABAP – Cálculos

Operações Básicas Aritméticas

Operador

Significado

+

Adição

-

Subtração

*

Multiplicação

/

Divisão

DIV

Quociente da Divisão

MOD

Resto da Divisão

Funções Numéricas

Função

Resultado

ABS

Valor Absoluto

SIGN

Sinal Se > 0 , 1

Se = 0 , 0

Se < 0, -1

CEIL

Maior Inteiro Menor que o arqumento

FLOOR

Menor Inteiro Maior que o arqumento

TRUNC

Parte inteira do argumento

FRAC

Parte fracional do argumento

47 of 169

ABAP – Sub-Valores

<valor> [+i] [(t)] .

Onde: i = posição inicial ( a partir de )

t = tamanho total a ser capturado

REPORT zstring.

TABLES: SPFLI.

DATA: v_string(20) TYPE C VALUE 'Joao Silva',

v_numero(4) TYPE N VALUE '1234'.

WRITE:/ v_string(6).

WRITE:/ v_string+7(1).

WRITE:/ v_string+2(8).

WRITE:/ v_numero+1.

48 of 169

ABAP – Constante

Comentários:

49 of 169

ABAP – Ranges

SIGN

OPTION

LOW

HIGH

50 of 169

ABAP – Write

Comando básico para exibição de valores na tela.

51 of 169

ABAP – Formar Color

52 of 169

ABAP – Processando String de Caracteres

53 of 169

ABAP – Break Point / DEBUG

 Trata-se de uma ferramenta muito útil no dia-a-dia, tanto para encontrar erros em programas desenvolvidos, como para entender processamentos Standard. Para programas Standard, o Debugging pode ser muito difícil e demorado.

 

Podemos marcar BreakPoints nos programas a serem debugados, parando o processamento e disponibilizando neste momento, valores de variáveis, tabelas internas, tabela SY, e outros dados. Podemos até mesmo mudar o conteúdo da variável para continuar a execução.

 

Além do BreakPoint ( parada esta que acontece somente para o usuário que gerou o BreakPoint ), outra maneira de debuggar um programa é colocar “/H”, na linha de comando.

 

Existe também uma ferramenta bastante útil, na procura de tabelas em transações standard, é a análise de tempo de execução, pois além de outras informações, apresenta todas as tabelas e views que o programa passou.

54 of 169

ABAP – Break Point / DEBUG

55 of 169

ABAP – Write

Exercício: Tela de Seleção / WRITE

Exercício: Tela de Seleção / WRITE.

  1. Criar programa onde o usuário informe o nome e a idade. Após a execução do mesmo, deve ser exibido na tela as primeiras 5 posições do nome e o dobro da idade.

  • Criar programa onde o usuário possa informar um intervalo de valores que vai ser preenchido com números. (VBAK- AWAHR). Com os valores inputados exibir o resto da divisão entre o valor superior e inferior.

  • Criar programa onde o usuário informa o nome e o sobrenome (2 campos). Após a execução do mesmo, deve ser exibido na tela o tamanho dos parâmetros concatenados, assim como o mesmo em caracteres minúsculos.

56 of 169

ABAP – JOBS

O JOB possui o mesmo conceito dos JOBS nos ambientes de grande porte, ou seja, trata-se de uma encadeação de STEPS ( execução de programas ), a qual depende de outros JOBS, roda em horário pré-determinado, pode ou não ser periódico etc...

 

É importante salientar que todo JOB roda em Background. A execução normal de qualquer transação, possibilita a execução em Background, Programa > Exec. Em Background. Deve-se neste momento especificar a impressora, se o relatório vai direto para a impressora ou se vai ser gerado novo SPOOL.

 

Para a definição de JOBS, Sistema > Serviços > Jobs > Definição de Jobs

 

Para a Monitoração do JOB, seguir o mesmo caminho anterior e trocar de Definição para Síntese de Jobs.

É possível também a monitoração do JOB através da transação SM37.

 

Para a checagem de SPOOL do usuário, Sistema > Serviços > Controle de Saída. O SPOOL, de relatórios possui um número limitado de impressão de linhas, porém existe um botão dentro do SPOOL, onde aumentamos para aquele momento este limite.

57 of 169

ABAP – JOBS

Exercício: JOBS

Exercício: JOB

  1. Gerar um job para um programa para execução programada. Utilizar o conceito de variante.

58 of 169

REPORT zstring.

MESSAGE e001(ZWA) WITH ‘ZPROGRAMA’.

REPORT zstring.

MESSAGE e000(ZWA) WITH ‘Mensagem’ ‘de’ ‘Warning’ ‘exibida’ .

ABAP – Message

Transação SE91

Trata-se de uma separação lógica de mensagens: E – Erro, W – Warnings, I – Informations e S – Sucesso, ou seja, basicamente uma tabela de erro que para não ser única foi dividida em várias menores ( Message Class ), por isso normalmente em um desenvolvimento, criamos uma classe de mensagens ( começadas por Z ou Y, é claro ), e a utilizamos para indicar nossos erros, sucessos etc...

59 of 169

ABAP – Message

Exercício – MESSAGE:

1 – Criar Classe e Mensagens

  • Transação SE91
  • Informar o nome da classe de mensagem.
  • <Criar>.
  • Na aba ‘Características’, preencher o campo ‘Texto Breve’
  • Na aba ‘Mensagens’ criar duas mensagens, sendo uma delas com o caractere de substituição (&).
  • <Salvar>.

2 – Criar report que receba o Tipo de Mensagem / Número da mensagem por parâmetro e exiba a mensagem criada no exercício acima.

Exercício: MESSAGE

60 of 169

ABAP – Banco de Dados

61 of 169

ABAP – SELECT

62 of 169

ABAP – SELECT... ENDSELECT

63 of 169

ABAP – SELECT... INTO TABLE <i_tab>

64 of 169

ABAP – SELECT... APPENDING TABLE <i_tab>

65 of 169

ABAP – SELECT... INTO CORRESPONDING FIELDS OF TABLE <i_tab>

66 of 169

ABAP – SELECT... APPENDING CORRESPONDING FIELDS OF TABLE

67 of 169

ABAP – SELECT... FOR ALL ENTRIES

EBELN

BUKRS

450000

WABR

450001

WABR

450002

WABR

68 of 169

ABAP – SELECT SINGLE...

69 of 169

ABAP – SELECT... UP TO <n> ROWS

70 of 169

ABAP – SELECT... INTO (<var1>, <var2>, ... <varN>) FROM

71 of 169

ABAP – INNER JOIN

72 of 169

ABAP – WHERE

Sintaxe

Descrição

Exemplo

<campo> = <conteúdo>.

Lê os registros onde o campo <campo> é igual ao <conteúdo>

SELECT * INTO TABLE ti_aux

FROM t001

WHERE bukrs = ‘TCSBR’.

<campo> IN (<conteúdo1>,

<conteúdo2>,

...

<conteúdoN>).

Lê os registros onde o campo <campo> é igual ao <conteúdo1> ou <campo> é igual ao <conteúdo2> ou ... ou <campo> é igual ao <conteúdoN>

SELECT * INTO TABLE ti_aux

FROM t001

WHERE bukrs IN (‘TCSBR’, ‘TCSPT’).

<campo> BETWEEN <conteúdo1>

AND <conteúdo2>.

Lê os registros onde o campo <campo> esteja no intervalo <conteúdo1> e <conteúdo2>, incluindo-os

SELECT * INTO TABLE ti_aux

FROM ekko

WHERE ebeln BETWEEN 450000

AND 450005.

<campo> LIKE <conteúdo>.

Caracteres coringas:

% sequência de 1 ou n caracteres

_ 1 caractere

Lê os registros onde o campo <campo> possua o conteúdo <conteúdo>

SELECT * INTO TABLE ti_aux

FROM t001

WHERE bukrs LIKE ‘TCS%’.

73 of 169

ABAP – ORDER BY

74 of 169

ABAP – SELEÇÕES

75 of 169

ABAP – SELEÇÕES

Exercício: SELECT

Exercício: SELECT

  1. Selecionar todos os pedidos de compra (EKKO) onde o tipo de documento (BSART) seja igual a ‘FO’.

  • Selecionar o primeiro pedido de compra (EKKO) cujo criador (ERNAM) seja igual a ‘ALUNO10’.

  • Selecionar os pedidos de compra (EKKO) cujo criador (ERNAM) seja igual a ‘ALUNO10’ ou ‘ALUNO9’.

  • Selecionar todos os itens (EKPO) dos pedidos de compra (EKKO) cujo criador seja o ‘ALUNO13’

76 of 169

ABAP – Report parte II

77 of 169

ABAP – Data Type

    • Tipo de Dados
      • Pré-Definidos

      • Definido pelo Usuário
        • Elementar

        • Estruturado

C,I,P,T ...

78 of 169

ABAP – Data Type / Data Objects

    • Types T1(3) Type C.
      • Data D1 TYPE T1.

      • Data D2 TYPE T1
      • value ‘ABC’.

Data Types

Data Objects

    • Type C.
      • Data D3 TYPE C.

      • Data D4 TYPE C.

Definido pelo Usuário

Pré-Definido

79 of 169

ABAP – TYPE

  • ELEMENTAR:
  • ESTRUTURADO:

80 of 169

ABAP – Tabela Interna

Trata-se de um conceito muito utilizado em programas ABAP/4, são similares a arrays, ou temp-tables de outras linguagens. Apesar do inconveniente de serem armazenadas na memória RAM da máquina (o que pode acarretar problemas quando tentarmos montar uma tabela interna muito grande), possui comandos muito interessantes para sorts, quebras e totalizações.

 

Deve-se sempre lembrar que a tabela interna trabalha com o conceito de buffer, ou seja, após armazenarmos o buffer devemos appendar este novo registro a nossa tabela interna. Sempre que possível nos programas onde a tabela interna já não será mais utilizada na lógica, devemos liberar este espaço de memória.

 

Comandos associados:

 

DATA: BEGIN OF t_tabela OCCURS 0,

CAMPO 1

CAMPO 2

END OF t_tabela.

Definição da tabela interna, também é valido se criar uma tabela interna com include de uma estrutura, além disso existem outras variações de definição como definir um type ( tabela interna ) e utilizar este type WITH HEADER LINE, tem o mesmo efeito, porém é melhor utilizar a definição acima.

81 of 169

ABAP – Tabela Interna

CLEAR t_tabela.

 

Limpa o buffer da tabela interna.

 

APPEND t_tabela.

 

Inclui efetivamente o registro do buffer na tabela interna

 

COLLECT t_tabela.

 

Para registros com a mesma parte alfa-numérica, este commando soma todos os campos numéricos.

 

SORT t_tabela BY campo.

 

Ordena a tabela interna pelos campos desejados. OBS. Para uma perfeita manipulação dos dados nos comando AT, deve-se definir os campos da tabela interna na mesma ordem que serão sortiados no comando SORT.

 

LOOP AT t_tabela.

 

Varre todos os registros da tabela interna, ou somente os registros que se pretende percorrer (WHERE )

82 of 169

ABAP – Tabela Interna

AT FIRST.

 

Em conjunto com o comando LOOP, identifica o primeiro registro da tabela percorrida.

 

AT NEW campo.

 

Em conjunto com o comando LOOP, identifica o primeiro registro de uma sequência ( quebra ).

 

AT END OF campo.

 

Em conjunto com o comando LOOP, identifica o último registro de uma sequência ( quebra ).

 

AT LAST.

 

Em conjunto com o comando LOOP, identifica o último registro da tabela percorrida.

 

READ TABLE t_tabela WITH KEY campo =

 

Leitura de um registro específico. Este comando retorna SY-SUBRC = 0 se o registro for encontrado e diferente de zero caso contrário.

 

83 of 169

ABAP – Tabela Interna

DELETE t_tabela.

 

Deleta um registro da tabela Interna

 

MODIFY t_tabela.

 

Modifica o registro na tabela Interna

 

REFRESH t_tabela.

 

Todos os Registro da Tabela Interna são deletados.

 

FREE t_tabela.

 

Libera o espaço utilizado pela Tabela Interna na memória

 

84 of 169

ABAP – Tabela Interna

  • Com Header Line

85 of 169

ABAP – Tabela Interna

  • Sem Header Line

86 of 169

ABAP – Tabela Interna

87 of 169

ABAP – Tabela Interna

VBAP

TABELA INTERNA it_vbap

Work-Area

APPEND

SELECT

VBAP

TABELA INTERNA it_vbap

MANDT

VBELN

POSNR

100

0000000001

0010

100

0000000002

0010

MANDT

VBELN

POSNR

100

0000000001

0010

100

0000000002

0010

100

0000000001

0010

MANDT

VBELN

POSNR

100

0000000001

0010

100

0000000002

0010

MANDT

VBELN

POSNR

100

0000000001

0010

100

0000000002

0010

  • Inserir registro

88 of 169

ABAP – Tabela Interna

MANDT

VBELN

POSNR

100

0000000001

0010

100

0000000002

0010

MANDT

VBELN

POSNR

100

0000000001

0010

100

0000000002

0010

  • Ordenar:

89 of 169

ABAP – Tabela Interna

  • Ler um registro específico:

BINARY SEARCH – aumenta a performance na busca. Para usá-lo a tabela deve estar ordenada pelos campos de filtro.

90 of 169

ABAP – Tabela Interna

  • LOOP

91 of 169

ABAP – Tabela Interna

  • LOOP em Tabela

92 of 169

ABAP – Tabela Interna

  • Alterar registro

93 of 169

ABAP – Tabela Interna

  • Excluir registro

94 of 169

ABAP – Tabela Interna

  • Excluir Tabela interna

95 of 169

ABAP – Tabela Interna

  • Verificar se possui registros

96 of 169

ABAP – Tabela Interna

  • Move - Corresponding

97 of 169

ABAP – Tabela Interna

  • Informação

MANDT

VBELN

POSNR

100

0000000001

0010

100

0000000002

0010

98 of 169

ABAP – Tabela Interna

  • Acumular Valores

99 of 169

ABAP – Tabela Interna

Exercício: Tabela Interna

Exercício: Tabela Interna

  1. Selecionar todos os pedidos de compra (EKKO) onde o tipo de documento (BSART) seja igual a ‘FO’.

  • Selecionar o primeiro pedido de compra (EKKO) cujo criador (ERNAM) seja igual a ‘ALUNO10’.

  • Selecionar os pedidos de compra (EKKO) cujo criador (ERNAM) seja igual a ‘ALUNO10’ ou ‘ALUNO9’. Exibir na tela a somatória da quantidade dos itens (NETWR) por criador.

  • Selecionar todos os itens (EKPO) dos pedidos de compra (EKKO) cujo criador seja o ‘ALUNO13’.

100 of 169

ABAP – Tabela SYST (SY)

Trata-se de uma estrutura, a qual de momento a momento ( em tempo de execução ) está disponível para o programa. Por exemplo mesmo sem definição em TABLES, está disponível a qualquer momento no programa a variável SY-UNAME, a qual contém o nome do usuário que logou o SAP.

 

Segue abaixo uma relação das mais importantes variáveis. Sempre que necessário, cheque o dicionário desta estrutura para verificar se existe alguma variável que possa ser útil ao seus futuros programas.

 

SY-SUBRC – Retorno dinâmico após cada comando. Normalmente quando o comando funcionou o SY-SUBRC = 0, porém o help de cada comando indica qual o SUBRC para cada hipótese. No caso de CALL FUNCTION, o SUBRC é determinado pelas EXCEPTIONS.

 

SY-DATUM – Data do sistema. Esta data está armazenada AAAAMMDD, ou seja para se separar em uma variável o dia : w_variavel = SY-DATUM+6(2). Vale lembrar que algumas datas em determinadas tabelas transparentes, estão armazenadas em formato anormal ( quando fazem parte da chave primária), exemplo tabela TCURR. Verificar para estes casos a rotina de conversão do campo ( CONVERSION_EXIT_XXXXX_INPUT ).

101 of 169

ABAP – Tabela SYST (SY)

SY-UZEIT – Hora do Sistema

SY-LANGU – Linguagem de Logon

 

SY-TABIX – Linha Corrente de uma Tabela Interna

 

SY-ULINE – Similar ao comando ULINE, porém permite linhas menores que o tamanho definido no LINE-SIZE do REPORT, por exemplo: WRITE: / SY-ULINE(10).

 

SY-VLINE – Caracter de fechamento lateral de Boxes.

 

SY-PAGNO – Número da Página corrente no relatório

 

SY-LINNO – Linha corrente no relatório

 

SY-UNAME – Usuário de Logon

 

SY-BATCH – Indicativo de execução em Background

 

SY-UCOMM – Comando escolhido em Relatórios Interativos

 

SY-LISEL – Linha escolhida em Relatórios Interativos

 

SY-TVAR0 – SY-TVAR9 – Espécie de Elemento de Texto, para Títulos de Relatórios.

102 of 169

ABAP – Tabela SYST (SY)

Exercício: Tabela SYST (SY)

Exercício: Tabela SYST (SY)

  1. Dar o display das variáveis sy-datum, sy-uzeit, sy-uline e sy-uname.

103 of 169

ABAP – Comandos

104 of 169

ABAP – Comandos

Relacionaremos a seguir alguns comandos e conceitos importantes no ABAP, sendo que a totalidade dos comandos e suas sintaxes, podem ser encontradas no help. Os comandos relativos a tabelas internas serão tratados mais adiante.

DECLARATIVE KEY WORDS

 

DATA

Internal fields, field strings, internal tables, common areas

LOCAL

Global fields in subroutines

TABLES

SAP tables

PARAMETERS

Internal fields set by the user after starting the program

SELECT-OPTIONS

Selection criterion set by the user for data selection purposes after starting the program

SELECTION-SCREEN

Selection screen layout

RANGES

Selection criterion handled within the program only

105 of 169

ABAP – Comandos

CONTROL KEY WORDS

 

IF..ELSE..ENDIF

Conditional processing

You can use the following comparison operators here:

- EQ, NE, GT, LT, GE, LE

- O, Z, M (bit comparison)

- CO, CN, CA, NA, CS, NS ,CP, NP (string comparison)

- BETWEEN...AND

- IS INITIAL

- IN

- All comparison operators are documented under ==>IF.

CHECK Selection condition, leaving loops and subroutines

Comparison operators: ==>IF

CASE..WHEN..ENDCASE

CONTROL KEY WORDS (cont..)

 

Case distinction

FORM..ENDFORM

Defines a subroutine

PERFORM..

Calls a subroutine

SELECT..ENDSELECT

Reads tables (ATAB, database)

Comparison operators: ==>IF

WHILE..ENDWHILE

Loop processing

Comparison operators: ==>IF

DO..ENDDO Loop processing

EXIT - Leaves loops or subroutines

LEAVE - Leaves program processing, goes to a transaction, list or menu

STOP Exit selection

CONTINUE Leaves loops

106 of 169

ABAP – Comandos

OPERATIONAL KEY WORD

ADD Adds fields together

CALL Calls a transaction, screen, dialog module or function module

CLEAR Resets to initial value

COMMIT Executes DB changes

COMPUTE Compute

You can use the following functions here:

SQRT Square root

EXP Exponential function to e

LO Natural logarithm

SIN Sine

COS Cosine

STRLEN Character string length

CONDENSE Compresses a field

DIVIDE Divides fields

FORMAT Sets the report output format

HIDE Notes line-related field contents

FORMAT Sets the report output format

HIDE Notes line-related field contents

INCLUDE Inserts a program component

MESSAGE Outputs messages

MOVE Moves field contents

FORMAT Sets the report output format

HIDE Notes line-related field contents

INCLUDE Inserts a program component

MESSAGE Outputs messages

MOVE Moves field contents

MOVE-CORRESPONDING

OPERATIONAL KEY WORD (cont..)

Moves matching fields of field strings

MULTIPLY Multiplies fields

NEW-PAGE Sets a new page

REPLACE Replaces character strings

RESERVE Reserves output lines on the current page

SEARCH Finds character strings in tables

SHIFT Moves field contents

SKIP Sets blank lines, goes to a particular line

SUBMIT Starts another program

SUBTRACT Subtracts fields

TRANSFER Sequential data output

TRANSLATE Conversion to upper / lower case

ULINE Underline

UNPACK Unpacked with leading zeros

WINDOW Define screen section (window)

WRITE Output

 COMMENTS

* In first column: Whole line is a comment

" In any other column: Rest of line is a comment

 INTEGRATING OTHER PROGRAM COMPONENTS

INCLUDE nserts specified program component at this point

PERFORM form(prog),

Calls a subroutine from another program

107 of 169

ABAP – Comandos - IF

108 of 169

ABAP – Comandos - Case

CASE <campo>.

WHEN <valor1>.

...

WHEN <valor2>.

...

WHEN <valor3> OR <valor4>.

...

WHEN OTHERS.

...

ENDCASE

109 of 169

ABAP – Comandos - DO

110 of 169

ABAP – Comandos - WHILE

111 of 169

ABAP – Comandos - CONTINUE / CHECK / EXIT

CONTINUE

CHECK

EXIT

Dentro do LOOP

Dentro do LOOP

Dentro do LOOP

DATA: v_cont(1) TYPE n VALUE 5.

WHILE v_cont > 0.

v_cont = v_cont – 1.

IF <expressão lógica>.

CONTINUE.

ENDIF.

WRITE:/ sy-index.

ENDWHILE.

DATA: v_cont(1) TYPE n VALUE 5.

WHILE v_cont > 0.

v_cont = v_cont – 1.

CHECK <expressão lógica>.

WRITE:/ sy-index.

ENDWHILE.

DO.

IF v_cont = 5.

EXIT.

ENDIF.

v_cont = v_cont + 1.

WRITE:/ 'Contador',

v_cont.

ENDDO.

WRITE:/ ‘Saiu do loop’.

Fora do LOOP

Fora do Loop

Fora do LOOP

...

CHECK <expressão lógica>.

...

...

EXIT.

...

Processa o

próximo loop

Processa o

próximo loop

Sai do loop

Abandona o bloco imediatamente

Abandona o bloco imediatamente

112 of 169

ABAP – Comandos

Exercício: Comandos

  1. Percorrer todos os números inteiros até 100 e imprimir somente os números divisíveis por 11.

  • Percorrer todos os números inteiros até 100 e imprimir os números 1, 10, 20 , 30 , 40, 50, 60, 70, 80, 90 e 100.

  • Percorrer todos os números inteiros até 100 e imprimir na tela somente os números primos.

Exercício: Comandos

113 of 169

ABAP – Evento

Evento

Descrição

INITIALIZATION

Ocorre antes da tela de seleção ser exibida. Usada para, por exemplo, inicializar parâmetros. É a única maneira de alterar os valores defaults dos parâmetros.

AT SELECTION-SCREEN

Ocorre quando ocorre uma interação do usuário com a tela de seleção.

START-OF-SELECTION

Ocorre após o processamento da tela de seleção. Usada para leitura de dados, criação de listas.

AT USER-COMMAND

Ocorre após interação do usuário em algum botão.

Uma forma fácil de se entender a tratativa de eventos, seria imaginar cada evento como um programa a parte, onde um evento termina quando começa o próximo, e independente do posicionamento destes eventos no código fonte, a sequência de execução destes “sub-programas” é a seguinte:

 

1 – INITIALIZATION – Inicializa variáveis de parâmetros ( antes da exibição da tela ).

2 – AT-SELECTION-SCREEN – Validação das informações solicitadas ( após intervenção do usuário ).

3 – START-OF-SELECTION – Evento de extração de dados da base.

4 – END-OF-SELECTION – Display dos dados extraídos.

 

Os eventos TOP-OF-PAGE e END-OF-PAGE, são executados a cada quebra de página, sendo que após o comando NEW-PAGE, não se executa o evento END-OF-PAGE.

114 of 169

ABAP – Perform

115 of 169

ABAP – Perform

REPORT zwrite.

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

PARAMETERS p_valor(1) TYPE n default 1.

SELECTION-SCREEN END OF BLOCK bl1.

DATA: v_calc(3) TYPE N.

DATA: tcs_vbap LIKE vbap.

DATA: it_vbap LIKE vbap OCCURS 0.

START-OF-SELECTION.

SELECT * UP TO 10 ROWS

INTO TABLE it_vbap

FROM VBAP.

PERFORM ZCalcular_Dobro USING p_valor

CHANGING v_calc.

WRITE:/ v_calc.

PERFORM ZImprimir_Tabela TABLES it_vbap

USING p_valor

CHANGING v_calc.

WRITE:/ v_calc.

*&------------------------------------------*& Form ZCALCULAR_DOBRO

*&------------------------------------------form ZCALCULAR_DOBRO USING p_numero TYPE n

CHANGING p_dobro TYPE n.

CLEAR: p_dobro.

p_dobro = p_numero * 2.

endform. " ZCALCULAR_DOBRO

*&------------------------------------------*& Form ZIMPRIMIR_TABELA

*&------------------------------------------form ZIMPRIMIR_TABELA

TABLES p_tabela STRUCTURE tcs_vbap

USING p_indice TYPE n

CHANGING p_triplo TYPE n.

LOOP AT p_tabela INTO tcs_vbap FROM p_indice.

WRITE:/ tcs_vbap-vbeln,

tcs_vbap-posnr.

ENDLOOP.

CLEAR: p_triplo.

p_triplo = p_indice * 3.

endform. " ZIMPRIMIR_TABELA

116 of 169

ABAP – Transação

São códigos alfanuméricos com no máximo 4 posições, o qual corresponde a um objeto, ou seja, a transação é uma chamada rápida a um programa on-line, programa “module pool”, menu etc..

 

Para se executar um programa via Menu, este deve obrigatoriamente possuir uma transação associada, pois é ela que o menu vai executar.

 

Caminho: Ferramenta > ABAP/4 Workbench > Desenvolvimento > Outras Ferramentas > Transações.

 

As transações não são dependente de mandante.

117 of 169

ABAP – Transação

Exercício: Criar Transação para Diálogo de Manutenção

Exercício – Criar Transação para o Diálogo de manutenção

  • Executar a transação SE93
  • Informar o nome da nova transação
  • <CRIAR>
  • Preencher a txt breve e Escolher a opção “Transação com parâmetros”
  • <CONTINUAR>
  • Informar texto de descrição da transação (Texto da transação)
  • No quadro “Valor proposto para, informar código da transação SM30
  • Escolher a opção “ignorar 1ª tela”
  • Na primeria linha do quadro "Valores Propostos" :

"Nome da área da Tela" atribuir "VIEWNAME"

"Valor" atribuir < Nome da Tabela >

  • Na segunda linha do quadro "Default Values" :

"Nome da área da Tela" atribuir “UPDATE"

"Valor" atribuir ‘X’

  • <SALVAR>

118 of 169

INCLUDE L <nm_grp> TOP.

INCLUDE L <nm_grp> UXX.

INCLUDE L <nm_grp> F<xx>.

ABAP – Funções

    • Grupo de Função
      • Função 1

      • Função 2

      • Função N

Container para módulos de função. O diagrama abaixo nos mostra a estrutura de um grupo de função

Programa Básico SAPL <nm_grp>

Declarações globais para todo o grupo de funções

Módulos de Função

Sub-rotinas chamadas por todos os Módulos de Função

FUNCTION-POOL <fgrp>.

TABLES: ...

TYPES: ...

DATA: ...

FUNCTION <nm_funçao>.

....

ENDFUNCTION.

INCLUDE L <nm_grp> U01.

INCLUDE L <nm_grp> U02.

INCLUDE L <nm_grp> U03.

FORM <nm_form>.

...

ENDFORM.

119 of 169

ABAP – Funções

120 of 169

ABAP – Funções

Transação: SE37

Declaração dos Parâmetros

Editor

121 of 169

ABAP – Funções

Exercício: Criar Grupo de Função

  1. Ir na transação SE37.
  2. Menu: Ir Para -> Administração de grupo de funções -> Criar grupo
  3. Informar o nome e o texto breve do grupo a ser criado
  4. Gravar

Exercício: Criar Grupo de Função

Transação: SE37

122 of 169

ABAP – Funções

Exercício: Criar Função (SE37)

  1. Criar uma função que receba como parâmetro um número e retorne o triplo do mesmo.

  • Criar uma função que receba o pedido de compra (EKKO-EBELN) e retorne todos os itens de compra (EKPO) desse pedido. Caso não seja encontrado nenhum registro retornar erro (Exceção).

Exercício: Criar Função

123 of 169

ABAP – Funções

Nome da Função

Automaticamente trás a função com sua estrutura completa

124 of 169

ABAP – Funções

Exercício: Utilizar função num report

Criar uma função que receba o pedido de compra (EKKO-EBELN) e retorne todos os itens de compra (EKPO) desse pedido. Caso não seja encontrado nenhum registro retornar erro (Exceção). -> Já criada

  1. Criar um report para utilizar essa função.

Exercício: Utilizar Função num Report

125 of 169

ABAP – Funções

  • Exemplo Search Help Dinâmico

REPORT ZFRRF0001 .

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-099.

PARAMETERS:

p_werks TYPE mseg-werks OBLIGATORY,

p_bdatj TYPE mseg-gjahr OBLIGATORY.

SELECTION-SCREEN: END OF BLOCK b1.

*&-----------------------------------------------------------

* AT SELECTION-SCREEN ON

*&-----------------------------------------------------------

AT SELECTION-SCREEN ON p_bdatj.

PERFORM ValidarPeriodo. "Validar Ano

*&-----------------------------------------------------------

* AT SELECTION-SCREEN ON VALUE-REQUEST FOR

*&-----------------------------------------------------------

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_werks.

PERFORM MatchcodeWerks. "Search Help Dinâmico

*&-----------------------------------------------------------* START-OF-SELECTION

*&-----------------------------------------------------------

START-OF-SELECTION.

WRITE:/ p_bdatj,

p_werks.

*&-----------------------------------------------------------*& Form ValidarPeriodo

*&-----------------------------------------------------------

FORM ValidarPeriodo.

IF p_bdatj > '2008'.

MESSAGE i888(sabapdocu) WITH 'Ano inválido'.

STOP.

ENDIF.

ENDFORM. " ValidarPeriodo

FORM MatchcodeWerks.

constants: c_fieldname type help_value-fieldname value 'WERKS'.

types: begin of ty_valuetab,

werks LIKE t001w-werks,

name1 LIKE t001w-name1,

end of ty_valuetab.

data: t_valuetab type table of ty_valuetab,

t_return_tab type table of ddshretval.

data: tcs_return_tab type ddshretval,

tcs_valuetab type ty_valuetab.

SELECT t001w~werks t001w~name1

INTO TABLE t_valuetab

FROM t001w.

call function 'F4IF_INT_TABLE_VALUE_REQUEST'

exporting

retfield = c_fieldname

value_org = 'S'

tables

value_tab = t_valuetab

return_tab = t_return_tab

exceptions

parameter_error = 1

no_values_found = 2

others = 3.

if sy-subrc = 0.

read table t_return_tab into tcs_return_tab index 1.

if sy-subrc = 0.

p_werks = tcs_return_tab-fieldval.

endif.

endif.

ENDFORM. " MatchcodeWerks

126 of 169

ABAP – Macro

127 of 169

ABAP – Operações em tabela do Dicionário

  • Inserir registros em tabelas transparentes

128 of 169

ABAP – Operações em tabela do Dicionário

  • Alterar registros em tabelas transparentes

129 of 169

ABAP – Operações em tabela do Dicionário

  • Modificar registros em tabelas transparentes

130 of 169

ABAP – Operações em tabela do Dicionário

  • Excluir registros em tabelas transparentes

131 of 169

ABAP – Manipular Arquivos

  • Arquivo Servidor.

132 of 169

ABAP – Manipular Arquivos

  • Download Arquivo Local

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING

filename = 'c:\temp\teste_down.csv'

FILETYPE = 'ASC'

tables

data_tab = it_arquivo

EXCEPTIONS

FILE_WRITE_ERROR = 1

NO_BATCH = 2

GUI_REFUSE_FILETRANSFER = 3

INVALID_TYPE = 4

NO_AUTHORITY = 5

UNKNOWN_ERROR = 6

HEADER_NOT_ALLOWED = 7

SEPARATOR_NOT_ALLOWED = 8

FILESIZE_NOT_ALLOWED = 9

HEADER_TOO_LONG = 10

DP_ERROR_CREATE = 11

DP_ERROR_SEND = 12

DP_ERROR_WRITE = 13

UNKNOWN_DP_ERROR = 14

ACCESS_DENIED = 15

DP_OUT_OF_MEMORY = 16

DISK_FULL = 17

DP_TIMEOUT = 18

FILE_NOT_FOUND = 19

DATAPROVIDER_EXCEPTION = 20

CONTROL_FLUSH_ERROR = 21

OTHERS = 22.

133 of 169

ABAP – Manipular Arquivos

  • Upload Arquivo Local

call function 'GUI_UPLOAD'

exporting

filename = 'c:\temp\teste.csv'

tables

data_tab = it_saida

exceptions

file_open_error = 1

file_read_error = 2

no_batch = 3

gui_refuse_filetransfer = 4

invalid_type = 5

no_authority = 6

unknown_error = 7

bad_data_format = 8

header_not_allowed = 9

separator_not_allowed = 10

header_too_long = 11

unknown_dp_error = 12

access_denied = 13

dp_out_of_memory = 14

disk_full = 15

dp_timeout = 16

others = 17

.

134 of 169

ABAP – Interfaces

  • BDC

Técnica de programação para a inserção de dados dentro do SAP.

Passos para criação de uma BDC Session:

 

  • Identificar as telas que a transação processará

  • Escrever o programa em ABAP para gerar a tabela de BDC que submeterá os dados na transação

  • Submeter a tabela de BDC para o sistema em modo batch ou através do comando CALL TRANSACTION

135 of 169

ABAP – Interfaces

  • BDC

Identificar tela a ser processada

Quando um usuário entra com dados no SAP utiliza transações. Cada transação tem várias telas identificadas por um nome de programa e um número de tela. As informações sobre a tela atual é obtida através no menu System, item Status.

 

 

Além de identificar o nome do programa e número da tela, deve-se também identicar o(s) campo(s) que se deseja entrar com o dados. Para conseguir saber o nome da tabela/estrutura e o nome do campo deve-se clicar sobre o campo que entraria com o dado e teclar <F1> seguido do botão “Informações Técnicas”.

Nesta tela consegue-se quase todos os dados para a sessão de BDC. O nome do programa, o número da tela e o nome do campo para a sessão de Batch input.

Além destes dados deve-se saber quais as teclas/funções de movimentação entres as telas. Por exemplo, se para passar para a próxima tela da transação deve-se teclar <Enter>, o código para a BDC é “/0”.

136 of 169

ABAP – Interfaces

  • BDC

Gerar tabela BDC

A tabela BDC é uma tabela interna com uma estrutura específica no qual é preenchida para ser enviada para a sessão batch input. Esta estrutura se chama BDCDATA e tem os seguintes campos:

 

Campo Tipo Descrição

Program Char(40) Nome do programa da transação

Dynpro Numc(4) Número da tela da transação

Dynbegin Char(1) Indicador de uma nova tela

Fnam Char(132) Nome do campo da tela

Fval Char(132) Valor a ser colocado no campo

Exemplo de uma tabela com estrutura BDCDATA com dados:

 

Program dynpro dynbegin fnam fval

SAPMF02K 0100 X 

RF02K-LIFNR 0010010

RF02K-EKORG CNTL

SAPMF02K 0200 X

...

...

137 of 169

ABAP – Interfaces

  • BDC

Para facilitar o trabalho de mapeamento dos campos, o SAP dispõe de uma ferramenta que faz isso para o programador. É a transação SHDB. Essa transação monitora todos os passos que o usuário faz quando utiliza uma transação e a resposta do SHDB é uma lista com os campos e telas que foram utilizados, permitindo que o programador crie as tabelas BDC.

Essa transação funciona da seguinte forma:

  • Na primeira tela, informa-se um nome para o mapeamento que se deseja efetuar

  • Em seguida, informa-se a transação que deve ser mapeada

  • A transação é então chamada. Deve-se fazer o processamento normal nesta transação. Quando terminar, o SHDB exibe a seguinte tela, com a lista dos campos e telas utilizados.

138 of 169

ABAP – Interfaces

  • Enviando uma tabela BDC para o sistema – Call Transaction

Call transaction

Possibilita o processamento de uma tabela BDC imediatamente pelo sistema. Os dados da tabela BDC são utilizados para executar a transação e o return code deste comando nos mostra se a transação foi executada com sucesso ou não.

 

A sintaxe deste comando é:

 

 

Os modos para executar este comando são:

 

A Mostra todas as telas

E Mostra apenas telas com erros

N Não mostra as telas

 

Em adição ao return code, podemos utilizar as variáveis de sistema para recuperar a mensagem que o SAP enviou ao término do processamento. As variáveis mais utilizadas são: SY-MSGID, SY-MSGV1, SY-MSGV2, SY-MSGV3 e SY-MSGV4.

139 of 169

ABAP – Interfaces

Exemplo:

140 of 169

ABAP – Interfaces

  • Batch Input - Conceito

É um conceito muito utilizados nas implantações, e mesmo em interfaces no dia-a-dia, trata-se de um processamento automático, com todos os passos de um processamento manual, para qualquer transação do ECC, ou seja, qualquer transação do ECC, pode ser executada via um arquivo texto, montando-se uma máscara e executando-se automaticamente uma certa transação, quantos forem os registros do arquivo texto.

É primordial para a integridade dos dados, que as tabelas não seja armazenadas diretamente (comandos INSERT, MODIFY ... ), pois por mais que achemos que sabemos quais as tabelas que são armazenadas quando uma transação é executada, somente poderemos garantir a integridade executando-se a própria transação.

Relacionaremos abaixo os passos necessários para a montagem de um programa de BATCH INPUT (Carga automática de dados ).

 

1 – Determinar a transação desejada.

 

2 – Determinar os campos e funções por tela a serem preenchidas em uma execução manual.

 

3 – Montar o layout do arquivo texto a ser processado.

4 – No programa : Pedir parâmetros e consistir parâmetros.

 

5 – Para cada registro lido, Montar máscara de dados ( Tabela Interna BDCDATA ).

 

6 – Para Interfaces não críticas: Tentar executar com método CALL TRANSACTION, se o retorno não for sucesso enviar para a pasta de BATCH INPUT.

 

7 – Para Interfaces críticas: Enviar para a pasta de BATCH INPUT.

8 – Emitir um resumo de Execução.

141 of 169

ABAP – Interfaces

  • Enviando uma tabela BDC para o sistema – Batch Input

Batch Input

A segunda maneira para processar uma sessão de BDC é submetendo-a ao sistema via processamento batch. Ao contrário do CALL TRANSACTION, estas transações não serão executadas imediatamente, serão colocadas em uma pasta de Batch Input que pode ser executada na transação SM35 ou schedulada para rodar em um dia e uma hora desejada.

Existem três módulos de funções que devem ser executados para este tipo de processamento.

  • BDC_OPEN_GROUP

Esta função abre a sessão de BDC e necessita ser chamada antes de qualquer processamento.

 

  • BDC_INSERT

Esta função é chamada para cada transação no processamento Batch.

 

  • BDC_CLOSE_GROUP

Esta função deve ser chamada após todo processamento para que a pasta de processamento Batch seja criada.

142 of 169

ABAP – Interfaces

  • Enviando uma tabela BDC para o sistema – Batch Input

BDC_OPEN_GROUP

CLIENT Cliente do SAP que será processada a sessão

GROUP Nome para a pasta de Batch input (não precisa ser único)

HOLDDATE Suspende o processamento da pasta de Batch input até a data especificada

KEEP Mantem a pasta de Batch Input após o processamento

USER Nome de usuário que executará o Batch Input.

BDC_INSERT

TCODE Código da transação na qual será executada a tabela BDC

DYNPROTAB Nome da tabela interna utilizada para gerar a pasta de Batch

BDC_CLOSE_GROUP

 

Não existem parâmetros a serem passados para esta função

143 of 169

ABAP – Interfaces

Exemplo:

144 of 169

ABAP – Interfaces

  • Enviando uma tabela BDC para o sistema – Batch Input

Exercício: Call Transaction

Batch Input

Exercício: Utilizar função num report

  1. Desenvolver um programa em ABAP que envie dados para a transação VA01 através de CALL TRANSACTION ou BATCH INPUT de acordo com o desejado pelo usuário seguindo o seguinte mapeamento da transação: (Obs: Informar os dados a serem inputados por parameter)

  • Modificar o exercício anterior para que os dados a serem inputados venham de um arquivo “.csv”.

SAPMV45A

0101

X

BDC_OKCODE

/00

VBAK-AUART

ZVPT

VBAK-VKORG

B004

VBAK-VTWEG

01

VBAK-SPART

02

SAPMV45A

4001

X

BDC_OKCODE

/00

VBKD-BSTKD

testeDRP

KUAGV-KUNNR

15

RV45A-KETDAT

29.04.2008

RV45A-KPRGBZ

D

VBKD-PRSDT

29.04.2008

VBKD-ZTERM

0001

RV45A-MABNR(01)

OMO EM PO

RV45A-KWMENG(01)

10

VBAP-VRKME(01)

001

SAPMV45A

4001

X

BDC_OKCODE

=SICH

145 of 169

ABAP – Interfaces

  • BAPI

Business Application Programming Interface (BAPI) - Interface de programação standard que permite acesso externo a processos e dados do SAP.

Como encontrar BAPI para uma transação

  • Na SE93 informar o código da transação e clicar em Exibir.

  • Duplo click no campo pacote.

  • Clicar no botão “Exibir lista de objetos” conforme figura que segue.

  • Selecionar a pasta “Business Engeneering” -> “Tps business object”.

146 of 169

ABAP – Interfaces

  • BAPI
  • Ir na árvore de métodos e achar um que atenda o seu objetivo, clicar 2 vezes para na aba ABAP ver o nome da função.

147 of 169

ABAP – Interfaces

  • BAPI

Como encontrar BAPI opção 2.

  • Ir na transação BAPI, e pela árvore de navegação encontrar a opção que atenda o objetivo

148 of 169

ABAP – Interfaces

  • BAPI

Exercício: BAPI

  1. Criar um programa para exibir detalhes da empresa através de BAPI. (BAPI_COMPANYCODE_GETDETAIL)

  • Desenvolver um programa em ABAP que envie dados para a transação VA01 através de BAPI, conforme exercício de “call transaction” efetuado anteriormente.

Exercício: BAPI

149 of 169

ABAP – Enhancements

São “aberturas” para adicionar funcionalidades específicas a programas “Standards”, sem a necessidade de modificar a aplicação original.

Trás como benefício:

- Não afetar o código standard SAP

- Não afetar atualizações de versão

Porém, nem todos os programas e telas do SAP possuem essas exits.

  • EXIT

150 of 169

ABAP – Enhancements

  • Field Exit

151 of 169

ABAP – Enhancements

  • USER EXIT

152 of 169

ABAP – SCREEN EXIT

  • BADI

153 of 169

ABAP – SCREEN EXIT

  • FIELD SYMBOLS

Quando implantamos uma exit, muitas vezes precisamos ler dados adicionais disponíveis no programa principal da SAP mas não visíveis dentro da exit.

Com o uso de field-symbols podemos acessar essas informações externas. O código abaixo demonstra como fazê-lo numa field-exit do campo BSTNR na transação ME21.

154 of 169

ABAP – SCREEN EXIT

  • ALV GRID

Macro

Função p/ Exibir Grid

155 of 169

ABAP – SCREEN EXIT

  • ALV GRID (ICON)

156 of 169

ABAP – SCREEN EXIT

  • ALV GRID - Layout

157 of 169

ABAP – Performance

  • Melhores Práticas

158 of 169

ABAP – Performance

  • Melhores Práticas

159 of 169

ABAP – Performance

  • Melhores Práticas

160 of 169

ABAP – Module Pool

  • Exemplo Tela Inicial

161 of 169

ABAP – Module Pool

  • Exemplo Tela Entrada de dados

162 of 169

ABAP – Module Pool

  • Exemplo Tela com Table Control

163 of 169

ABAP – Module Pool

  • Exemplo de Sub-tela com botões

164 of 169

ABAP – Module Pool

  • PAI / PBO

165 of 169

ABAP – Module Pool

  • Layout de criação de tela

166 of 169

ABAP – Smartforms

  • Tela Inicial

167 of 169

ABAP – Smartforms

  • Area de desenvolvimento

168 of 169

ABAP – Smartforms

  • Exemplo

169 of 169

ABAP – Dúvidas

?