Curso_Abap

136
SAP SAP SAP R/3 R/3 Curso de formação SAP R/3 B17774GR Página 1 de 83

description

Curso de ABAP/4SAP R3

Transcript of Curso_Abap

Page 1: Curso_Abap

SAP

SAPSAPR/3R/3

Curso de formação SAP R/3

B17774GRPágina 1 de 83

Page 2: Curso_Abap

Índice

1.Visão global do SAP

2.O ambiente de Desenvolvimento

3. Dicionário de Dados

Página 2 de 163

4. Intruções de Controle

5. Report (Write e ALV)

6. Module Pool (On-Line)

7. Outras Funcionalidades

Page 3: Curso_Abap

1. Visão global do SAP

1. Visão global da SAP

1.1. O que é SAP?

1.2. Módulos que engloba

Página 3 de 163

1.3. Tratamento de mandantes

1.4. Opções do menu principal

1.5. Opções da barra de ferramentas

Page 4: Curso_Abap

1.1. O que é SAP?

� Sap R/3 é um software de gestão que simplifica todo s os processos administrativos de uma empresa, principalmente as funcionalidades financeiras, logí stica e de recursos humanos.

� Uma característica destacada é seu alto grau de

Página 4 de 163

� Uma característica destacada é seu alto grau de integração.

� Deve ser destacado também sua grande flexibilidade, já que por ser parametrizável, pode ser implantado aos processos e necessidades de qualquer tipo de indúst ria.

Page 5: Curso_Abap

1.2. Módulos que engloba

Soluções

integradas

Sistemas abertos Arquitetura modular

Extensa funcionalidade

R/3R/3R/3R/3ProduçãoProdução

MateriaisMateriais

ComercialComercial

TesourariaTesouraria

ControllingControlling

Gestão Gestão FinanceiraFinanceira

SDSDSDSD

MMMMMMMM

PPPPPPPP

FIFIFIFI

COCOCOCO

TRTRTRTR

Página 5 de 163

Arquitetura Cliente/Servidor

Filosofia de gestão

empresarial

Multinacional

Neutralidade setorial

modularR/3R/3R/3R/3

RecursosRecursoshumanoshumanos

ManutençãoManutenção

QualidadeQualidadeQMQMQMQM

PMPMPMPM

HRHRHRHR

PSPSPSPS

WFWFWFWF

ISISISISSoluções Soluções SetoriaisSetoriais

WorkflowWorkflow

ProjetosProjetos

Client/ServerClient/ServerABAP/4ABAP/4

Client/ServerClient/ServerABAP/4ABAP/4

Multilinguagem

Page 6: Curso_Abap

1.3. Tratamento de mandantes

� Um mandante é um ambiente de trabalho. É a primei ra unidade organizacional que é necessária criar no SA P.

� Dentro de uma mesma máquina podemos ter vários mandantes (ex: desenvolvimento, testes e produtivo) .

Página 6 de 163

� Existem pontos de parametrização dependentes e independentes de mandante.

Page 7: Curso_Abap

2. O ambiente de Desenvolvimento

2. O ambiente de Desenvolvimento

2.1. Arquitetura do Sistema R/3

2.2. Tratamento de mandantes

Página 7 de 163

2.3. Logon no SAP R/3

2.4. Opções do menu principal

2.5. Opções da barra de ferramentas

Page 8: Curso_Abap

Arquitetura do Sistema R/3Arquitetura do Sistema R/3

3 Camadas

Cliente

Base de Dados

Página 8 de 163

Servidor

Page 9: Curso_Abap

Tratamento de MandantesTratamento de Mandantes

Client 100

Página 9 de 163

cc

PRDPRDQASQAS

DEVDEV

Client 200

Client ...

Page 10: Curso_Abap

Logon no SAP R/3Logon no SAP R/3

Página 10 de 163

Page 11: Curso_Abap

O Ambiente de DesenvolvimentoO Ambiente de Desenvolvimento

Página 11 de 163

Page 12: Curso_Abap

Opções do Menu Principal

� Acesso: Sistema > Criar modo.

� Cria um modo paralelo de forma que podamos trabalh ar com vários processos ao mesmo tempo.

� Acesso: Sistema > Sair do sistema.

Página 12 de 163

� Abandona SAP.

Page 13: Curso_Abap

Opções do Menu Principal

Página 13 de 163

Page 14: Curso_Abap

Opções da barra de ferramentas

Escrevendo a transação correspondente permite acessar os processos sem a necessidade dos Menus.

Página 14 de 163

Menus.

A transação /o, cria outro modo.

A transação /n, serve para sair de da transação.

Pressionando a flecha da direita visualizaremos as últimas transações realizadas.

Page 15: Curso_Abap

1.5. Opções da barra de ferramentas

Volta / Exit / Cancela

Salvar

Paginar

Exibir / Modificar

Página 15 de 163

Exibir / Modificar

Imprimir

Check

Enter

Abre Novo Modo

Page 16: Curso_Abap

1.5. Opções da barra de ferramentas

HELP

Ativar Objeto

Página 16 de 163

Matchcode. Equivale a pressionar F4. Permite visual izar os possíveis valores de entrada dos campos.

Page 17: Curso_Abap

3. Dicionário de Dados

3. Dicionário de Dados

3.1. Transações

Página 17 de 163

3.2. Composição e Tipos de Tabelas

3.3. Criando Tabelas

3.4. Prog. de Manutenção de Tabelas

Page 18: Curso_Abap

Transações – SE11 / SE16

Página 18 de 163

Page 19: Curso_Abap

Transparente : Mais utilizado. Relacionamento 1-1.

3 Tipos Específicos

Tipos de Tabelas

Página 19 de 163

Pool : Utilizados para dados do sistema. Relacionamento N-1 com uma tabela do DB.

Cluster : Armazenamento de dados de 2, ou mais, tabelas muito grandes . BSEG, por exemplo.

Page 20: Curso_Abap

Componentes de Tabelas

Banco de

Dados

Tabelas

Página 20 de 163

CAMPOS

-Elemento de Dados

- Domínio

Page 21: Curso_Abap

Domínio – Tipos de DadosDomínio – Tipos de Dados

Página 21 de 163

Tipo DescriçãoCHAR Strings de caractere (máximo de 255 caracteres)

DEC Valores decimais (comprimento máximo de 31)

DATS Campo Date

TIMS Campo Time

INT1, INT2, INT4 Valores inteiros

NUMCCampo de caractere que pode conter apenasnuméricos

Page 22: Curso_Abap

Elementos de DadosElementos de Dados

Página 22 de 163

Page 23: Curso_Abap

Criando TabelasCriando Tabelas

Página 23 de 163

Page 24: Curso_Abap

Criando TabelasCriando Tabelas

Página 24 de 163

Page 25: Curso_Abap

Criando TabelasCriando Tabelas

Página 25 de 163

Page 26: Curso_Abap

Criando TabelasCriando Tabelas

Página 26 de 163

Page 27: Curso_Abap

Programa de Manutenção de TabelasPrograma de Manutenção de Tabelas

•SE11;

• Digite o nome de sua tabela;

• Pressione o botão Display;

• Escolha o menu utilities -> Table Maintenance Generato r;

• Autorization Groups = &NC&;

• Function Group com o nome de função que você possa trabalhar, por exemplo, ZF01.

• Clique no botão FIND SCR. NUMBER(S) na parte superi or da

Página 27 de 163

• Clique no botão FIND SCR. NUMBER(S) na parte superi or da tela.

• Selecione a opção Propose screen number(s) e pressio ne ENTER.

Page 28: Curso_Abap

Programa de Manutenção de Tabelas – SM30Programa de Manutenção de Tabelas – SM30

Página 28 de 163

Page 29: Curso_Abap

Chave EstrangeiraChave Estrangeira

• Comece na SE11;

• Digite o nome da tabela no campo Database Name;

• Escolha o botão Change;

• Posicione no campo que será a chave estrangeira na sua tabela;

• Clique no ícone Foreign Key;

Página 29 de 163

• No campo Check Table, digite o nome da tabela que fará o relacionamento, ou seja, o nome da tabela que será de verificação;

• Pressione o botão Generate proposal;

• Em seguida clique no botão Copy.

• Ative a tabela, clicando no ícone Activate ou pressionando as teclas CTRL + F3.

Page 30: Curso_Abap

Tabelas do SAP FLIGHT ModelTabelas do SAP FLIGHT Model

Página 30 de 163

Page 31: Curso_Abap

Modelo de Dados da Ordem de Vendas (SD)Modelo de Dados da Ordem de Vendas (SD)

Página 31 de 163

Page 32: Curso_Abap

Criando Índices de TabelasCriando Índices de Tabelas

Página 32 de 163

Page 33: Curso_Abap

Criando Índices de TabelasCriando Índices de Tabelas

Página 33 de 163

Page 34: Curso_Abap

Criando Índices de TabelasCriando Índices de Tabelas

Página 34 de 163

Page 35: Curso_Abap

4. Conceitos de Dados

4.1. Tipos de Dados

4.2. Definindo Variáveis

4.3. Cálculos de Valores

Página 35 de 163

4.4. Conversões de Dados

4.5. Definindo Constantes

4.6. Definindo String de Campos

4.7. Expressões Lógicas

Page 36: Curso_Abap

Tipos de DadosTipos de Dados

Pré-Definidos P,I,F,C,N,D,T,X

Definidos por Usuário

Elementar

EstruturaTipo Estrutura

Tipo Tabela Interna

Página 36 de 163

Tipo de Tipo de DadosDados

SignificadoSignificado Valor InicialValor InicialTamanho Tamanho

defaultdefaultTamanho Tamanho PermitidoPermitido

P Número Packed 0 8 1-16

I Inteiro 0 4 4

F Float(ponto flutuante) 0.000 8 8

N Texto Numérico 00...0 1 1-max

C Caracter Branco(vazio) 1 1-max

D Data(YYYYMMDD) 00000000 8 8

T Hora(HHMMSS) 000000 6 6

X Hexadecimal X’00 1 1-max

Page 37: Curso_Abap

Definindo VariáveisDefinindo Variáveis

- Variável Local

- Variável Global

- Variável Externa

Variáveis, Strings de campos(estruturas) e Tabelas

Internas

Página 37 de 163

- Variável Externa

- Constantes

- Literal

Page 38: Curso_Abap

Definindo Variáveis - SintaxeDefinindo Variáveis - Sintaxe

Onde:• v1 é o nome da variável;

data v1[(l)] [type t] [decimals d] [value ‘xxx’].

data v1 like v2 [value ‘xxx’].

Página 38 de 163

• v1 é o nome da variável;• v2 é o nome de uma variável previamente definida no programa ou é onome de um campo que pertence a uma tabela ou estrutura no dicionário dedados;• (l) é a especificação interna do comprimento;• T é o tipo de dado;• D é o número de espaços de decimais (utilizado para apenas com o tipoP);• ‘xxx’ é um literal que fornece um valor padrão;

Page 39: Curso_Abap

Definindo Variáveis - ExemploDefinindo Variáveis - Exemplo

DATA contador type I.

DATA: nome(30) type C,

Dt_nascimento type D,

SOMA type I value 1.

Página 39 de 163

SOMA type I value 1.

DATA: begin of table i_tabela occurs 0,

id_campo(3) type n,

nome_campo like [tabela]-[campo]

end of table i_tabela.

Page 40: Curso_Abap

Inicializando e Atribuindo Valores a VariáveisInicializando e Atribuindo Valores a Variáveis

InicializandoInicializando umauma VariávelVariável

Comando CLEAR

SintaxeCLEAR: NOME, DT_NASCIMENTO, SOMA, it_tabela[], it_tabela.

Página 40 de 163

AtribuindoAtribuindo ValoresValores aa umauma VariávelVariável

Comando MOVE

SintaxesMOVE <dado1> TO <dado2>.

Dado1 = dado2.

Page 41: Curso_Abap

Cálculo de ValoresCálculo de Valores

OperadorOperador OperaçãoOperação

+ Adição

- Subtração

* Multiplicação

/ Divisão

** Exponenciação

DIV Divisão de inteiro

Página 41 de 163

MOD Resto da divisão de inteiro

ComandoV_total = dado1 [operador] dado2.

SintaxesV_total = dado1 + dado2.

V_total = dado1 MOD dado2.

Page 42: Curso_Abap

Conversão de DadosConversão de Dados

TipoTipoQuando atribuir Quando atribuir para para um campo um campo

maior, o valor ‘maior, o valor ‘fromfrom’ será:’ será:Quando atribuir para um campo Quando atribuir para um campo

menor, o valor ‘menor, o valor ‘fromfrom’ será:’ será:

C Preenchido à direita com espaços em branco Truncando à direita

X Preenchido à direita com zeros Truncado à direita

N Preenchido à esquerda com zeros Truncado à esquerda

P Preenchido à esquerda com zeros

Atribuído se o valor numérico se adequar ao campo ‘to’.

Se o valor numérico for grande demais para o campo de recebimento, um curto dump ocorrerá.

Página 42 de 163

recebimento, um curto dump ocorrerá.

PONTOS DE ATENÇÃO

-A compactação peculiar executada para os tipos de c a n;

- A capacidade de atribuir valores inválidos aos tipo s d e t;

- O tratamento desigual de caracteres inválidos duran te a conversão dos tipos de c a x;

- A utilização inesperada do byte de sinal reservado em conversões de p para c;

- O uso de * para indicar estouro em conversões de p para c;

- Um campo c completamente em branco é convertido par a um campo p com um valor zero;

Page 43: Curso_Abap

SubcamposSubcampos

A parte de um campo referenciada pela especificação de um deslocamento e/ou comprimento.

ComandoCampo1[+x][(y)] = Campo2[+x][(y)].

Sintaxe

Página 43 de 163

SintaxeV_dia = v_data+6(2).

Onde:- Campo1 e Campo2 são nomes de strings de campo ou d e variável;- X é um deslocamento baseado em zero desde o início do campo;- Y é um comprimento em bytes.

Page 44: Curso_Abap

Cálculo de DatasCálculo de Datas

SintaxeV_diferença_dias = data1 – data2.

Atribuir o resultado de um cálculo de dois, ou mais , campo data (tipo d) a uma variável compactada (tipo n, i, p) dará a

diferença em dias.

Página 44 de 163

ExemploData: data1 type d,

data2 type d,

v_dif_dias(3) type n.

Data1 = sy-datum.

Data2 = 20080101.

V_dif_dias = data1 – data2.

V_dif_dias = número de dias já corridos no ano.

Page 45: Curso_Abap

Definindo TiposDefinindo Tipos

ComandoTypes t [(l)] [type t] [decimals d].

Types t1 like v1.

Onde:- T1 é o nome do tipo- V1 é o nome de uma variável previamente definida no programa ou é o nome de

Página 45 de 163

- V1 é o nome de uma variável previamente definida no programa ou é o nome de um campo que pertence a uma tabela ou estrutura no Data Dictionary.- (l) é a especificação interna de comprimento- t é o tipo de dado.- d é o número de casas decimais(utilizadas apenas c om o tipo p).

Considere um tipo definido pelo usuário como uma va riável, mas uma que você não possa utilizar par armazenar dados. Po derá apenas ser

utilizado para definir o tipo de criação de outras variáveis.

Page 46: Curso_Abap

Definindo String de CampoDefinindo String de Campo

ComandosData: begin of fs1,

f1[(l)] [type t] [decimals d] [value ‘xxx’],

f2[(l)] [type t] [decimals d] [value ‘xxx’],

…..

End of fs1.

--------------------ou------------------

Data begin of fs1.

Onde:

- FS1 é o nome da string de campo.- F1 e F2 são os campos (também denominados componentes) da string de campo.- FS2 é o nome de uma string de campo previamente definida ou é o nome de uma tabela ou estrutura no Data Dictionary.

Página 46 de 163

Data begin of fs1.

Data f1[(l)] [type t] [decimals d] [value ‘xxx’].

Data f2[(l)] [type t] [decimals d] [value ‘xxx’].

….

[include structure st1.]

--------------------ou------------------

Data fs1 like fs2.

Data Dictionary.- (l) é a especificação interna de comprimento- T é o tipo de dado.- D é o número de casas decimais (utilizadas apenas com o tipo p).‘xxx’ é um literal que fornece um valor padrão.- ST1 é o nome de uma estrutura ou tabela no Data Dictionary.

Page 47: Curso_Abap

Definição de ConstantesDefinição de Constantes

Comando

Constants c1[(l)] [type t] [decimals d] value ‘xxx’.

Constants c1 like cv value ‘xxxx’.

Onde:- C1 é o nome da constante.- Cv é o nome de uma constante ou variável previament e definida ou é o nome de

Página 47 de 163

- Cv é o nome de uma constante ou variável previament e definida ou é o nome de um campo que pertence a uma tabela ou estrutura no Data Dictionary.- (l) é a especificação interna de comprimento- t é o tipo de dado- d é o número de casas decimais (utilizadas apenas com o tipo p)- ‘xxx’ é um literal que fornece o valor da constant e.

Exemplos

Constants c1(2) type c value ‘AA’.

Constants c2 like c1 value ‘BB’.

Constants data_inicio like sy-datum value ‘20050301’.

Page 48: Curso_Abap

Expressões LógicasExpressões Lógicas

OperadorOperador SignificadoSignificado

EQ = Igual

NE <> ou >< Diferente

GT > Maior que

São os comandos de operação que indicam alguma regr a lógica a ser aplicada a uma ou mais variáveis, dent ro do

contexto e necessidade do programa.

Página 48 de 163

GT > Maior que

GE >= ou => Maior ou igual a

LT < Menor que

LE <= ou =< Menor ou igual a

BETWEEN f1 and f2 Intervalo

IS INITIAL Valor inicial

AND E

OR Ou

NOT Negação

Page 49: Curso_Abap

5. Instruções de Controle Comuns

5.1. Editor ABAP-4

5.2. IF

5.3. CASE

Página 49 de 163

5.4. EXIT / CONTINUE

5.5. DO

5.6. WHILE

5.7. CHECK

Page 50: Curso_Abap

Instrução IFInstrução IF

ComandosIF / ELSEIF / ELSE / ENDIF.

SintaxeIf [not] expressão [ and [not] expressão ] [ or [not] expressão].

……..

[elseif expressão .]

Página 50 de 163

.......

[else.]

.......

Endif.

Onde:- Expressão é uma expressão lógica que avalia quanto a uma condição

verdadeira ou falsa.- ..... representa qualquer número de linhas de códi go. Até mesmo zero linhas

são permitidas.

Page 51: Curso_Abap

Utilizando Operadores de StringUtilizando Operadores de String

OperadorOperador SignificaSignifica Verdadeiro quandoVerdadeiro quandoHá distinção entre Há distinção entre

maiúsculo e maiúsculo e minúsculo.minúsculo.

Os espaços em Os espaços em branco finais branco finais

são ignorados.são ignorados.

v1 CO v2 Contém somenteV1 for composto somente de caracteres emv2

Sim Não

v1 CN v2 Not v1 CO v2V1 pode conter caracteres que não estão emv2

Sim Não

v1 CA v2 Contém qualquerV1 pode conter pelo menos um caractere emv2

Sim Não

Página 51 de 163

v1 CA v2 Contém qualquerv2

Sim Não

v1 NA v2 Not v1 ca v2 V1 não pode conter nenhum caractere em v Sim Não

v1 CS v2 Contém string V1 pode conter a string de caractere em v2 Não Sim

v1 NS v2 Not v1 CS v2V1 não pode conter a string de caractere emv2

Não Sim

v1 CP v2 Contém padrão V1 pode conter o padrão em v2 Não Sim

v1 NP v2 Not v1 CP v2 V1 não pode conter o padrão em v2 Não Sim

Page 52: Curso_Abap

Instrução CASEInstrução CASE

ComandosCASE / WHEN / ENDCASE.

SintaxeCase v1.

When v2[ or vn … ].

When v3 [or vn … ].

Página 52 de 163

When others.

Endcase.

Onde:- V1 ou v2 podem ser uma variável, literal, constant e ou string de campo.- ... representa qualquer número de linhas de código . Até mesmo zero linhas são

permitidas.

Observações – Verificar Apostila. (Pág 71)

Page 53: Curso_Abap

Instrução EXITInstrução EXIT

ComandosEXIT

SintaxeExit.

Página 53 de 163

ExitExit pode ser utilizada em várias situações.

Essa instrução pode ter diversos efeitos, dependend o do local onde aparece no código. Entretanto, ela sempre impede processamentos poster iores.

Dentro de estruturas de loop, tal instrução ignora o processamento de loop introduzido pelas instruções como loop, select, do e while.

Dentro de sub-rotinas, ignora as sub-rotinas introd uzidas por FORM.

Page 54: Curso_Abap

Instrução DOInstrução DO

ComandosDO / ENDDO.

SintaxeDo [v1 times] [ varying f1 from s-c1 next

s-c2 [varying f2 from s2-c1 next s2-c2 ...]].

…..

Onde:- V1 é uma variável, literal ou constante.- S é uma string de campo com os componentes c1 e c2.- F1 é uma variável. Os componentes de s podem ser convertidos para o tipo de dados e compri-mentos de f1.- .... representa qualquer número de cláusulas varying completas.- ----- representa qualquer número de linhas de código

Página 54 de 163

[exit]

-------

Enddo.

código- Os seguintes pontos se aplicam:- Os loops DO podem ser aninhados por um número ilimitado de vezes.- exit impede o processamento de loop posterior e sai imediatamente do loop atual. Não termina o programa quando dentro de um loop DO. O processamento continuará na próxima instrução executável depois de ENDDO.- Você pode criar um loop infinito pela codificação de DO sem qualquer adição. Nessa situação, utilize exit dentro do loop para terminar o processamento de loop.- Modificar o valor de v1 dentro do loop não afetará o processamento de loop.

Page 55: Curso_Abap

Instrução WhileInstrução While

ComandosWHILE / ENDWHILE.

SintaxeWhile exp [ vary f1 form s-c1 next s-c2 [ vary f2 from s2-c1 next s2-c2 ....]

…….

[exit]

Página 55 de 163

[exit]

…….

Endwhile.

Onde:- Exp é uma expressão lógica- S é uma string de campo com os componentes c1 e c2- F1 é uma variável. Os componentes de s podem ser c onvertidos para o tipo de dado e comprimento de f1.- ..... representa qualquer número de cláusula vary c ompletas.- ..... representa qualquer número de linhas de códi go.

Page 56: Curso_Abap

Instrução CONTINUEInstrução CONTINUE

ComandosCONTINUE.

Sintaxe[do/while/select/loop}

..........

Continue

Página 56 de 163

Continue

.........

Enddo/endwhile/endselect/endloop]

Onde:- …… representa qualquer número de linhas de código.- O continue pode somente ser codificado dentro de u m loop. - Continue não tem adições.

Page 57: Curso_Abap

Instrução CHECKInstrução CHECK

ComandosCHECK

Sintaxe[do/while/select/loop}

..........

Check exp

Página 57 de 163

Check exp

.........

Enddo/endwhile/endselect/endloop]

Onde:- exp é uma expressão lógica- ..... representa qualquer número de linhas de códi go.

Page 58: Curso_Abap

Comparação CHECK / EXIT / CONTINUEComparação CHECK / EXIT / CONTINUE

InstruçãoInstrução EfeitoEfeito

Exit Sai do loop atual

Continue Faz um salto incondicional para o final do loop

Página 58 de 163

Continue Faz um salto incondicional para o final do loop

Check exp Saltará para o final do loop se exp for falso.

Page 59: Curso_Abap

6. Tabelas Internas6. Tabelas Internas

6.1. O que é? Declaração

6.2. Comando APPEND

6.3. Comandos de Leitura

Página 59 de 163

6.4. Comandos Adicionais

6.5. Trabalhando com TI

6.6. Interrupções de Controle

Page 60: Curso_Abap

O que é? Declaração de uma TIO que é? Declaração de uma TI

Uma tabela interna é uma tabela temporária armazenad a na RAM do servidor do aplicativo. Ela é criada e preenchida por um pro grama durante a execução

e é descartada quando o programa termina.

Utilize a tabela interna como um armazenamento tempor ário para a manipulação de dados ou como um buffer privado temp orário.

Sintaxe de declaração de uma TI

Página 60 de 163

Data: begin of nome_tabela occurs num_registros,

mandt like sflight-mandt,

carrid like sflight-carrid,

connid like sflight-connid,

fldate like sflight-fldate,

end of nome_tabela.

Data: nome_tabela like sflight occurs 0 with header line.

A tabela interna existe apenas durante a execução d o programa.

Page 61: Curso_Abap

O que é? Declaração de uma TIO que é? Declaração de uma TI

IndiceIndice MANDTMANDT CARRIDCARRID CONNIDCONNID FLDATEFLDATE

Header 000 AA 1907 20.02.2008

1 000 AA 1920 01.01.2008

2 000 DT 0601 15.02.2008

3 000 AA 1907 20.02.2008

4 000 AA 1900 05.03.2008

Uma Tabela interna consiste em um corpo e uma linha opcional d e cabeçalho.

Página 61 de 163

5 000 DT 0625 10.04.2008

6 000 DT 0612 20.05.3008

7 000 AA 1907 23.06.2008

O corpo armazena as linhas da tabela interna. Todas as linhas dentro dela têm a mesma estrutura.

A linha de cabeçalho é uma string de campo com a me sma estrutura de uma linha do corpo, mas pode apenas armazenar uma li nha única.

Page 62: Curso_Abap

Instrução APPENDInstrução APPEND

ComandosAPPEND

SintaxeAPPEND [wa to] [initial line to] it.

Onde:- Wa é o nome de uma área de trabalho.- It é o nome de uma tabela interna previamente defin ida.

Página 62 de 163

- It é o nome de uma tabela interna previamente defin ida.

Os seguintes pontos se aplicam:- wa deve ter a mesma estrutura de uma linha do corpo .- wa pode ser a linha de cabeçalho ou pode ser qualqu er string de campo com a mesma estrutura de uma linha no corpo.- Se você não especificar uma área de trabalho, o si stema utilizará a linha de cabeçalho como padrão. Na verdade, a linha de cabeç alho é a área de trabalho padrão.- Depois de append, sy-tabix é configurada com o núme ro de linha relativo da linha recém acrescentada. Por exemplo, depois de ac rescentar a primeira linha, sy-tabix será configurada como 1. Depois de acrescen tar asegunda linha, sy-tabix será configurada com 2 e assim por diante.

Page 63: Curso_Abap

Comandos de Leitura - LOOPComandos de Leitura - LOOP

ComandosLOOP – Leitura de várias linhas da Tabela Interna

SintaxeLoop at it [into wa] [from m] [to n] [where exp].

……

Endloop.

Página 63 de 163

Onde:- it é o nome de uma tabela interna.- wa é o nome de uma área de trabalho- m e n são literais de inteiro, constantes ou variáveis que re presentam umnúmero de linha relativo. Por exemplo, 1 significa a primeir a linha na tabela, 2significa a segunda e assim por diante.- exp é uma expressão lógica que restringe as linhas que são li das.- ...... representa qualquer número de linhas de código. Ess as linhas sãoexecutadas uma única vez para cada linha recuperada da tabel a interna.

Page 64: Curso_Abap

Comandos de Leitura - LOOPComandos de Leitura - LOOP

Os seguintes pontos se aplicam:

- wa deve ter a mesma estrutura de uma linha do corpo- wa pode ser a linha de cabeçalho ou qualquer string de campo com a mesma estrutura de uma linha no corpo.- Se você não especificar uma área de trabalho, o si stema utilizará a linha de cabeçalho como padrão. Por exemplo, loop at it into i t lê as linhas da tabela interna it, colocando-as uma por vez na linha de ca beçalho it. Uma instrução equivalente é loop at it.- Se from não for especificada, o padrão será começar a leitu ra a partir da

Página 64 de 163

- Se from não for especificada, o padrão será começar a leitu ra a partir da primeira linha.- Se to não for especificada, o padrão será ler até a última linha.- Os componentes de it especificados na expressão ló gica não devem ser precedidos pelo nome da tabela interna. Por exemplo , where f1=’X’ está correta, mas where it-f1 = ‘X’ causará um erro de si ntaxe.- exp pode ser qualquer expressão lógica. Entretanto, o primeiro operando de cada comparação deve ser um componente da tabela in terna. Por exemplo, se it contivesse um componente f1, então where f1 = ‘X’ estaria correta; where ‘X’ = f1 estaria incorreta e causaria um erro de sintax e.- As adições from, to e where poderão ser misturadas, se assim for desejado.

Page 65: Curso_Abap

Comandos de Leitura – READ TABLEComandos de Leitura – READ TABLE

ComandosREAD TABLE – Leitura de uma única linha da Tabela Interna

SintaxeRead table it [into wa] [index i : with key keyexp [binary search] ]

[comparing cmpexp].

Onde:

Página 65 de 163

Onde:- It é o nome de uma tabela interna- Wa é o nome da área de trabalho- I é um literal de inteiro, constante ou variável q ue representa um número de linha relativo. Por exemplo, 1 significa a primeira linha na tabela, 2 significa a segunda e assim por diante.- Keyexp é uma expressão que representa um valor a se r localizado- Cmpexp é uma expressão de comparação que representa um teste a ser executado na linha localizada.

Page 66: Curso_Abap

Comandos de Leitura – READ TABLEComandos de Leitura – READ TABLE

Instruções Adicionais :

- INDEX - O índice de linha de uma tabela interna corresponde ao seu nú mero de linharelativa. Por exemplo, a primeira linha na tabela tem o índic e 1, a segunda tem o índice 2 e assimpor diante. Na instrução read table, se index i estiver espec ificada, o sistema irá recuperar

- WITH KEY - Se with key keyexp for expecificada, o sistema localizará u ma linha quecorresponda com a expressão key e a colocará na linha de cabeçalho . Se mais de uma linha

Página 66 de 163

corresponda com a expressão key e a colocará na linha de cabeçalho . Se mais de uma linhacorresponder com a expressão, a primeira localizada(a que t iver o menor índice) será retornada.

- Binary Search - Sempre que utilizar a adição with key, você também deverá ut ilizar aadição binary search, o que faz com que a linha seja localizad a com o uso de um algoritmo bináriode pesquisa, em vez de uma varredura de tabela linear. Isso re sulta nos mesmos ganhos dedesempenho dos alcançados com a pesquisa de uma tabela de ban co de dados através de umíndice. De antemão, a tabela deve ser classificada em ordem a scendente pelos componentesespecificados na expressão key.

Page 67: Curso_Abap

Instrução SORTInstrução SORT

ComandosSORT

SintaxeSort it [descending] [as text] [by f1 [ascending: descending] [as text] f2 .....].

Onde:

Página 67 de 163

Onde:- It é o nome de uma tabela interna.- F1 e f2 são os componentes de it.- .... representa qualquer número de nomes de campo opcional mente seguidospor ascending , descending, e/ou as text.

Page 68: Curso_Abap

Verificando conteúdo de uma TIVerificando conteúdo de uma TI

Verificando se uma TI está vazia

SintaxeIf it[] is initial.

Se o teste for verdadeiro, a tabela interna estará vazia. Qua ndo falso, ele irá conter pelomenos uma linha.

Página 68 de 163

Verificando a quantidade de registros de uma TI

SintaxeDescribe table it [lines i] [occurs j].

Se a adição lines i for especificada, o número de linhas será c olocado em sy-tfill e i.Se a adição occurs j for especificada, o tamanho da cláusula o ccurs será colocado em sy-toccu e j.

Page 69: Curso_Abap

Trabalhando com TI – Inserindo LinhasTrabalhando com TI – Inserindo Linhas

ComandosINSERT

SintaxeInsert [wa into] it [index n].

Onde:- Wa é uma área de trabalho com a mesma estrutura de uma linha da tabela interna it.

Página 69 de 163

interna it.- N é um constante, literal ou variável numérica.

Pontos de Atenção:- Se wa for especificado, o conteúdo de wa será inseri do em it. Wa deverá ter a mesma estrutura que it.- Se wa não for especificado, o conteúdo da linha de cabeçalho será inserido em it. Se it não tiver uma linha de cabeçalho, wa dever á ser especificado.- Se index for especificado, a nova linha será inseri da antes da linha n. A linha n se tornará então a linha n+1.- Instrução insert pode ser utilizada dentro ou fora de loop at it. Se utilizada fora, a adição index deverá ser especificada. Se utilizada dentro, index será opcional. Se a adição for especificada, a linha atual será as sumida.

Page 70: Curso_Abap

Trabalhando com TI – Modificando LinhasTrabalhando com TI – Modificando Linhas

ComandosINSERT

SintaxeModify it [from wa] [index n] [ transporting c1 c2 ....[where exp]].

Onde:- it é o nome de uma tabela interna com ou sem uma l inha de cabeçalho- wa é uma área de trabalho com a mesma estrutura de uma linha no corpo de it.

Página 70 de 163

- wa é uma área de trabalho com a mesma estrutura de uma linha no corpo de it.- N é uma constante, variável ou literal numérico.- C1 e c2 são componentes de it- Exp é uma expressão lógica envolvendo componentes d e it

Pontos de Atenção:- Se from wa for especificada, a linha será sobrescrita com o c onteúdo de wa.- Se from wa não for especificada, a linha será sobrescrita co m o conteúdo do cabeçalho.- Se index n for especificada, n identificará o número da linh a que será sobrescrita.- Modify it pode ser especificada dentro ou fora de loop at it.

Se especificada fora, index n deverá ser especificado.Quando especificada dentro, index n será opcional.

- Transporting especifica quais componentes devem ser sobr escritos.Sem ela, todos eles serão sobrescritos.

Page 71: Curso_Abap

Trabalhando com TI – Apagando LinhasTrabalhando com TI – Apagando Linhas

ComandosFREE

SintaxeFREE it.

Onde:- it é o nome de uma tabela interna com ou sem uma li nha de cabeçalho.

Página 71 de 163

- it é o nome de uma tabela interna com ou sem uma li nha de cabeçalho.

Utilize FREE quando quiser excluir todas as linhas, e não for utilizar novamente a tabela interna, desalocando a memória destinada a ela.

Page 72: Curso_Abap

Trabalhando com TI – Apagando LinhasTrabalhando com TI – Apagando Linhas

ComandosCLEAR

SintaxeCLEAR it.

CLEAR it[].

Página 72 de 163

Onde:- it é o nome de uma tabela interna com ou sem uma l inha de cabeçalho.

Utilize CLEAR quando quiser excluir todas as linhas, mas quiser preencher a tabela interna novamente .

InstruçãoInstrução Se it tiver uma linha de Se it tiver uma linha de cabeçalhocabeçalho

Se it não tiver uma linha Se it não tiver uma linha de cabeçalhode cabeçalho

Clear it Limpará a linha de cabeçalho

Excluirá todas as linhas

Clear it[] Excluirá todas as linhas Excluirá todas as linhas

Page 73: Curso_Abap

Trabalhando com TI – Apagando LinhasTrabalhando com TI – Apagando Linhas

ComandosREFRESH

SintaxeREFRESH it.

Onde:

Página 73 de 163

Onde:- it é o nome de uma tabela interna com ou sem uma l inha de cabeçalho.

Utilize REFRESH quando quiser excluir todas as linha s, mas quiser preencher a tabela interna novamente .

Page 74: Curso_Abap

Trabalhando com TI – Apagando LinhasTrabalhando com TI – Apagando Linhas

ComandosDELETE

SintaxeDelete it (a) index n

(b) from i to j

(c) where exp

Página 74 de 163

Onde:- n é um valor constante, variável ou literal numéri co;- exp é uma expressão lógica envolvendo os componente s de it.

Page 75: Curso_Abap

Trabalhando com TI – Comando COLLECTTrabalhando com TI – Comando COLLECT

ComandosCOLLECT

SintaxeCollect [wa into] it

Onde:- It é uma tabela interna

Página 75 de 163

- It é uma tabela interna- Wa é uma área de trabalho que tem a mesma estrutura de it.

Quando collect for executado, o sistema formará uma chave a p artir dos campos de chavepadrão na área de trabalho. Os campos de chave padrão são os ca mpos de caractere (tipoc, n, d, t e x).

O sistema então pesquisará o corpo da tabela interna quanto a uma linha com a mesmachave daquela na área de trabalho. Se não localizar uma, a lin ha será acrescentada ao finalda tabela. Se localizar uma, os campos numéricos (tipos i, p e f) na área de trabalho serãoadicionados nos campos correspondentes da linha localizad a.

Page 76: Curso_Abap

TI – Interrupções de ControleTI – Interrupções de Controle

ComandosAT FIRST / ENDAT

AT END / ENDAT

SintaxeLoop at it.

.....

At first.

Onde:- It é uma tabela interna- ..... representa qualquer número de linhas de códigos(até mesmo zero).

Utilize at first para:- Executar o loop do processamento de inicialização- Escrever os totais no início de um relatório

Página 76 de 163

At first.

.....

Endat.

....

At last.

.....

Endat.

.....

Endloop.

- Escrever os totais no início de um relatório- Escrever cabeçalhos

Utilize at last para:- Executar o loop do processamento de terminação- Escrever os totais ao término de um relatório- Escrever rodapés

Page 77: Curso_Abap

TI – Interrupções de ControleTI – Interrupções de Controle

ComandosAT NEW / ENDAT

AT END OF / ENDAT

SintaxeLoop at it.

.....

At new c.

Onde:- It é uma tabela interna- c é um campo componente de It- ..... representa qualquer número de linhas de códigos(até mesmo zero).

Utilizando at new:- Se o nível de controle for alterado;- Se qualquer campo antes do nível de controle for alterado;- Se essa for a primeira execução do loop;

Página 77 de 163

At new c.

.....

Endat.

....

At end of c.

.....

Endat.

.....

Endloop.

- Se essa for a primeira execução do loop;

Utilizando at end of:- Se o nível de controle for alterado;- Se qualquer campo antes do nível de controle for alterado;- Se essa for a última linha da tabela;

Não utilize as instruções de interrupção de controle dentro de uma estrutura loop at it where ....; os efeitos serão

imprevisíveis.

Page 78: Curso_Abap

TI – Interrupções de ControleTI – Interrupções de Controle

ComandosSUM

SintaxeLoop at it.

.....

At first/last/new/end of.

Onde:- It é uma tabela interna- ..... representa qualquer número de linhas de códigos(até mesmo zero).

Utilize sum para:

Página 78 de 163

At first/last/new/end of.

….

Sum.

….

Endat.

.....

Endloop.

- Localiza todas as linhas que têm os mesmos valores dentro do campo de nível de controle e todos os campos à esquerda dele;- Soma cada coluna numérica à direita do nível de controle;- Coloca os totais nos campos correspondentes da área de trabalho.

Page 79: Curso_Abap

TI – Interrupções de ControleTI – Interrupções de Controle

ComandosON CHANGE OF

SintaxeLoop at it.

.....

On change of v1 [or v2…].

Onde:- v1 e v2 são nomes de string de campo ou variáveis;- ..... Indica que qualquer número de condições que poderá vir em seguida;- ..... representa qualquer número de linhas de códigos(até mesmo zero).

Página 79 de 163

On change of v1 [or v2…].

….

[else.

….]

Endon.

.....

Endloop.

linhas de códigos(até mesmo zero).

O on change of se caracteriza por poder ser utilizado em qualquer instrução de loop, não apenas em loop at. Por exemplo, pode ser utilizada no do enddo, while endwhile.

Já a instrução at new só pode ser utilizada dentro da instrução loop at.

Page 80: Curso_Abap

7. Instrução WRITE7. Instrução WRITE

7.1. Utilização

7.2. Formatações

Página 80 de 163

7.3. Adições para a instrução

7.4. Máscara de Edição

7.5. Instrução LINE

Page 81: Curso_Abap

WRITE - UtilizaçãoWRITE - Utilização

ComandosWRITE

SintaxeWrite [at] [/p(l)] v1[+o(sl)]

(1) under v2 : no-gap

(2) using edit mask m : using no edit mask

Página 81 de 163

(3) mm/dd/yy : dd/mm/yy

(4) mm/dd/yyyy : dd/mm/yyyy

(5) mmddyy : ddmmyy :yymmdd

(6) no-zero

(7) no-sign

(8) decimals n

(9) round n

(10) currency c : unit u

(11) left-justified : centered : right-justified

Page 82: Curso_Abap

Formatações – Comprimento de exibiçãoFormatações – Comprimento de exibição

• O comprimento de saída de um campo corresponde ao n úmero de caracteres utilizados para a exibição do valor daquele campo (comprimento padrão);

• Os campos do Data Dictionary te tipos de dados do D DIC, como DEC, CHAR, CURR e assim por diante. Todos eles são baseados em tipos de dad os do ABAP/4 e herdam o formato e o comprimento padrão do tipo de dado do abap/4;

• Além disso, os campos do DDIC têm seu comprimento d e saída e número de decimais definidos no domínio.

Página 82 de 163

• Campos Compactadores: o comprimento de saída padrão de um campo do tipo p é duas vezes o comprimento de campo definido. Se casas dec imais forem definidas, o comprimento de saída padrão será aumentado em 1, equivalente en tão a 2 * comprimento do campo + 1.

• Formatação Padrão: o formato padrão é derivado do t ipo de dado da variável. A saída de campos numéricos (tipo p, i e f) é alinhada à direi ta com zeros iniciais suprimidos e para o restante é alinhada à esquerda. Formatação adiciona l específica ao tipo também se aplica. Para campos do tipo D (data) será utilizada a forma tação definida em User Defaults, contanto que o comprimento de saída mínimo (10) seja respeit ado.

Page 83: Curso_Abap

Instrução WRITEInstrução WRITE

ComandosWRITE

SintaxeWrite [at] [/p(l)] v1[+o(sl)]

Onde:

Página 83 de 163

Onde:- V1 é um nome de string de campo, variável ou literal- P, l e n são literais numéricos ou variáveis- P é a especificação de posição. Identifica a coluna de saída na qual ocampo de saída deve começar.- L é a especificação de comprimento. Identifica o comprimen to docampo de saída no qual o valor deve ser escrito.- o é uma especificação de deslocamento de subcampo que pode c ontersomente literais numéricos.- sl é uma especificação de comprimento de subcampo que pode c ontersomente literais numéricos.

Page 84: Curso_Abap

Adições p/ Instrução WRITEAdições p/ Instrução WRITE

ComandosUNDER v2 : no-gap.

SintaxeWrite [at] [/p(l)] v1[+o(sl)] under v2 : no-gap.

Página 84 de 163

Utilizar under fará com que o primeiro caractere do campo seja posicionado n amesma coluna do primeiro caractere de um campo anteriorment e escrito. Vocênão poderá utilizar under com uma especificação explícita de posição.

A utilização de no-gap irá suprimir o espaço intermediário, colocandoautomaticamente depois de um campo, se o campo seguinte não t iver nenhumaespecificação de coluna.

Page 85: Curso_Abap

Adições p/ Instrução WRITEAdições p/ Instrução WRITE

ComandosUSING EDIT MASK M : USING NO EDIT MASK.

SintaxeWrite [at] [/p(l)] v1[+o(sl)] Using edit mask m : using no edit mask.

Onde:- m é uma mascara de edição .

Página 85 de 163

- m é uma mascara de edição .

As máscaras de edição permitem:

- Inserir caracteres na saída- Mover o sinal para o início de um campo numérico- Inserir ou mover artificialmente um ponto decimal- Exibir um número de ponto flutuante sem a utilização de nota çãocientífica

Page 86: Curso_Abap

Adições p/ Instrução WRITEAdições p/ Instrução WRITE

ComandosLEFT-JUSTIFIED, CENTERED E RIGHT-JUSTIFIED

SintaxeWrite [at] [/p(l)] v1[+o(sl)] left-justified.

Página 86 de 163

Com a utilização de left-justified, centered e right-justified, você pode mudar o valor de saída dentro do espaço distribuído para o campo de saída.

Page 87: Curso_Abap

Adições p/ Instrução WRITEAdições p/ Instrução WRITE

ComandosSY-ULINE / SY-VLINE

SintaxeWrite [at] [/p(l)] sy-uline.

Página 87 de 163

Para escrever um linha horizontal que começa em pos ição 5 para um comprimento de 10, você codifica write 5(10) sy-uline. Para criar uma linha vertical, utilize su-vline; por exemplo, write: sy-vline, ‘X’, sy-vline escreveria uma linha vertical em

qualquer lado de um X.

Page 88: Curso_Abap

Adições p/ Geração de RelatórioAdições p/ Geração de Relatório

ComandosLINE-COUNT / LINE-SIZE

SintaxeReport line-size i line-count j(k).

Onde:

Página 88 de 163

Onde:- I, j e k são constantes numéricas.- i especifica a largura da lista de saída (em caracteres).- j especifica o número de linhas por página na lista de saída.- k especifica o número de linhas reservado para um rodapé naparte inferior de cada página.- Não coloque i, j ou k entre aspas.

Page 89: Curso_Abap

Adições p/ Geração de RelatórioAdições p/ Geração de Relatório

ComandosSKIP

SintaxeSkip [n: to line n].

Página 89 de 163

Onde:- n é um literal numérico ou uma variável.

A instrução SKIP permite que você gere linhas em branco e mova a pos ição atual de saída para cima ou para baixo dentro da página a tual de saída.

Page 90: Curso_Abap

Adições p/ Geração de RelatórioAdições p/ Geração de Relatório

ComandosNEW-PAGE.

SintaxeNew-page.

Página 90 de 163

No momento em que reconhecer a instrução New-page, o compilador ABAP-4 irá criar uma nova página no seu relatório.

Page 91: Curso_Abap

8. Modularização: Eventos e Sub-Rotinas8. Modularização: Eventos e Sub-Rotinas

8.1. Unidades de Modularização

8.2. Eventos

Página 91 de 163

8.3. Sub-Rotinas

8.4. Passagem de Parâmetros

8.5. Módulos de Função

Page 92: Curso_Abap

Unidades de ModularizaçãoUnidades de Modularização

O ABAP/4 oferece três tipos de unidades de modularização:

Ela permite a você separar um grupo de linhas de có digo do restante e então executá-las em um tempo especifico. As linhas de código dentro

de uma unidade de modularização comportam-se de man eira muito semelhante a um mini-programa que pode ser chamado de outro

programa.

Página 92 de 163

- Eventos- Sub-rotinas- Módulo de função

Utilize as unidades de modularização para eliminar o código redundante dentro de seu programa e para torná-lo m ais fácil de ler.

Page 93: Curso_Abap

EventosEventos

Ao contrário da primeira impressão, os programas AB AP/4 são baseados em eventos. Um bom entendimento sobre eles é a chav e para um bom

entendimento de ABAP/4.

ComandosINITIALIZATION.

START-OF-SELECTION / END-OF-SELECTION.

TOP-OF-PAGE / END-OF-PAGE.

Página 93 de 163

TOP-OF-PAGE / END-OF-PAGE.

Quando você executa um programa, esses eventos são associados pro um programa de driver.

Page 94: Curso_Abap

EventosEventos

Um programa em geral segue os seguintes passos:

- Aciona o evento initialization, fazendo com que o código que pertence ainitialization seja executado. Se você não tiver codificado um evento initialization emseu programa, o programa de driver pulará esse passo.

- Mostra a tela de seleção para seu programa. (Uma tela de sele ção contém oscampos de entrada para suas instruções de parâmetro.) Se seu programa não tiveruma tela de seleção, ele pulará esse passo .

Página 94 de 163

uma tela de seleção, ele pulará esse passo .

- Aciona o evento start-of-selection, fazendo com que o código que pertence a esseevento seja executado. Se você não tiver codificado um event o start-of-selection emseu programa, ele pulará esse passo.

- Aciona o evento end-of-selection em seu programa, executando todo o código quepertence a ele. Se você não tiver codificado um end-of-selection, ele pulará essepasso.

- Mostra a lista de saída para o usuário.

Page 95: Curso_Abap

EventosEventos

CategoriaCategoria EventosEventos

Driver Initialization

At selection-screen

Start-of-selection

Get

End-of-selection

Usuário At line -selection

Página 95 de 163

Usuário At line -selection

At pfn

At user-command

Programa Top-of-page

End-of-page

Os eventos de driver são acionados pelo programa de driver. Os eventos de usuário são acionados pelo usuário através da interface com ele. Os eventos de programa são

os acionados de dentro de seu programa.

Page 96: Curso_Abap

EventosEventos

AcionandoAcionando toptop--ofof--pagepage

Se seu programa não tiver uma tela de seleção, a primeira inst rução writeexecutada aciona o evento top-of-page. Se seu programa tive r uma tela deseleção, é possível que top-of-page seja acionada duas veze s:

- Pela primeira instrução write executada antes de a tela de s eleção ser mostrada- Pela primeira instrução write executada depois que a tela d e seleção é mostrada.

Somente se estiver fazendo algo incomum em top-of page, como abrir arquivos ouinicializar dados, você precisará ter cuidado com o efeito de acionamento duplo .

Página 96 de 163

inicializar dados, você precisará ter cuidado com o efeito de acionamento duplo .

PadronizandoPadronizando startstart--selectionselection

Se a primeira instrução executável em seu programa não for pr ecedida por umnome de evento, em tempo de execução o sistema automaticamen te insere start-of-selection antes da primeira linha de código executável.

Você não deve colocar definições de dados dentro de eventos. Embora Você não deve colocar definições de dados dentro de eventos. Embora isso não cause um erro de sintaxe, trataisso não cause um erro de sintaxe, trata--se de um estilo de se de um estilo de

programação pobre. Todas as definições de dados ser iam feitas na programação pobre. Todas as definições de dados ser iam feitas na parte superior do programa.parte superior do programa.

Page 97: Curso_Abap

EventosEventos

SaindoSaindo dede umum eventoevento

Você pode sair de um evento a qualquer hora utilizando as segu intes instruções:

- Exit-Check- Stop

Em todos os eventos:

Página 97 de 163

- Check imediatamente deixa o evento atual e o processamento contin ua com opróximo evento (ou ação, como exibir a tela de seleção ou list a de saída).

- Stop imediatamente deixa o evento atual e vai diretamente para o e vento end-of-selection. Executar stop dentro de end-of-selection deixa o evento. Não causa umloop infinito.

Page 98: Curso_Abap

EventosEventos

Em eventos que ocorrem antes de start-of-selection

- exit e check têm o mesmo comportamento. Eles deixam o evento imediatamen tee o processamento continua com o próximo evento (ou ação, com o exibição datela de seleção).

Em start-of-selection e eventos que ocorrem depois dele:

- exit termina o relatório e mostra a lista de saída. Existe uma única exceção ;

Página 98 de 163

- exit termina o relatório e mostra a lista de saída. Existe uma única exceção ;dentro de top-of-page, exit comporta-se como check.- check deixa o evento e o processamento continua com o próximo event o (ouação, como exibição da lista de saída).

Check, exit e stop não configuram o valor de sy-subrc. Se quis er configurá-la,você pode atribuir um valor numérico a ela antes de partir.

Page 99: Curso_Abap

Sub-RotinasSub-Rotinas

Uma sub-rotina é uma seção de código reutilizável. É como uma mini-programaque pode ser chamado de outro ponto em seu programa. Dentro de le você podedefinir variáveis, executar instruções, computar resulta dos e escrever saída.

Para chamar uma sub-rotina, utilize a instrução perform.

Para definir uma sub -rotina, utilize a instrução form para indicar o início de uma

Página 99 de 163

Para definir uma sub -rotina, utilize a instrução form para indicar o início de umasub-rotina e utilize enform para indicar o seu fim.

O nome de uma sub-rotina não pode exceder 30 caracteres.

Page 100: Curso_Abap

Sub-RotinasSub-Rotinas

ComandosFORM / ENDFORM.

SintaxeForm [tables t1 t2 ....]

[using u1 value(u2) ….]

[changing c1 value(c2) ….]

Onde:

-S é o nome da sub-rotina.-T1, t2, u1, u2, c1 e c2 são parâmetros.- Tables permite que as tabelas internas sejampassadas como parâmetros.- A adição value não pode ser utilizada depois detables.- A adição value pode ser aplicada a quaisquervariáveis passadas via using ou changing.

Página 100 de 163

[changing c1 value(c2) ….] variáveis passadas via using ou changing.- ..... representa qualquer número de linhas decódigo.

Os seguintes pontos se aplicam:- Todas as adições são opcionais.- Quando elas são codificadas, as adições devem aparecer na o rdem mostrada aqui. Se codificadas, tablesdeverá vir primeiro, e depois dela using e changing.- Cada adição somente pode ser especificada uma vez. Por exem plo, a adição tables somente podeaparecer uma vez. Entretanto, tabelas múltiplas podem apar ecer depois dela.- Não utilize vírgulas para separar parâmetros.- tables somente permite que tabelas internas sejam passada s – não tabelas de banco de dados.- Uma sub-rotina pode chamar outra sub-rotina.- A recursão é suportada. Uma sub-rotina pode chamar a si mesm a ou uma sub-rotina que a chama devolta.- As definições de sub-rotina não podem ser aninhadas.

Page 101: Curso_Abap

Sub-RotinasSub-Rotinas

ComandosPERFORM

SintaxeForm [tables t1 t2 ....]

[using u1 value(u2) ….]

[changing c1 value(c2) ….]

Onde:- s, s1, s2, s3, são nomes de sub-rotina.- N é uma variável numérica.- A) e b) são mutuamente exclusivos.- Tables , using e changing podem aparecer com a) ou b).- A adição value() não pode ser utilizada com perform.

Página 101 de 163

[changing c1 value(c2) ….]

Utilizando a sintaxe b) você pode especificar que u ma sub-rotina de uma lista de sub-rotina seja executada. A n-ésima sub-rotina na lista de nom es seguindo of é executada.

Page 102: Curso_Abap

Sub-rotinasSub-rotinas

SaindoSaindo dede umum eventoevento

Você pode sair de um evento a qualquer hora utilizando as segu intes instruções:

- Exit-Check- Stop

Em todos os eventos:

Página 102 de 163

- check e exit imediatamente deixam a sub-rotina e o processamento continua com a próxima instrução executável depois de perform.

- stop imediatamente deixa a sub-rotina e vai diretamente para o evento end-of-selection.

Check, exit e stop não configuram o valor de sy-subrc. Se você quiser configurá-lo, atribua um valor numérico para ele antes de deixar.

Page 103: Curso_Abap

Sub-RotinasSub-Rotinas

DefinindoDefinindo variáveisvariáveis locaislocais ee globaisglobais

Uma variável global é aquela que é definida fora de uma sub-ro tina utilzando ainstrução tables ou data. Ela pode ser acessada de qualquer p onto no programa, sejadentro de um evento ou dentro de uma sub-rotina. É boa prática de programaçãocolocar definições de variáveis globais na parte superior d o programa, e algum lugarantes da primeira linha de código executável .

Página 103 de 163

antes da primeira linha de código executável .

Uma variável é definida dentro de uma sub-rotina utilizando a instrução local, data oustatic. Dizemos que ela é local à sub-rotina. As variáveis de finidas utilizando local sãoacessíveis de fora da sub-rotina; as variáveis definidas ut ilizando data ou statics nãosão. Assim, se a sub-rotina chama outra sub-rotina, variáve is definidas utilizandolocal são visíveis de dentro da sub-rotina chamada variávei s definidas utilizando dataou statics não são.

Page 104: Curso_Abap

Sub-Rotinas – Passando ParâmetrosSub-Rotinas – Passando Parâmetros

ComandosTABLES / USING / CHANGING

SintaxeForm [tables t1 t2 ....]

[using u1 value(u2) ….]

[changing c1 value(c2) ….]

Página 104 de 163

[changing c1 value(c2) ….]

Lembre-se:

- perform e form devem conter o mesmo número de parâmetros.- A sintaxe nas instruções perform e form pode diferir.- A sintaxe na instrução form determina apenas o método pelo qual um parâmetro épassado.- A adição value() não pode ser utilizada na instrução perform.- Using deve vir antes de changing.- A adição using só pode ocorrer uma vez em uma instrução. A mesma regra se apli ca achanging.

Page 105: Curso_Abap

Sub-Rotinas – Passando TI como ParâmetroSub-Rotinas – Passando TI como Parâmetro

Você pode utilizar um dos dois métodos para passar uma tabela interna para uma sub-rotina:

1 – Passar com a linha de cabeçalho2 – Passar apenas o corpo

MétodoMétodo SintaxeSintaxe Como passadoComo passado

Com linha Form s1 tables it Por referência

Página 105 de 163

Com linha Form s1 tables it Por referência

Corpo apenas Form s1 using it[] Por referência

Form s1 changing it[] Por referência

Form s1 using value (it[]) Por valor

Form s1 changing value(it[]) Por valor e resultado

Page 106: Curso_Abap

IncludeInclude

ComandosINCLUDE

SintaxeInclude ipgm

Onde Ipgm é um programa do tipo i.

Página 106 de 163

Onde Ipgm é um programa do tipo i.

Um programa include deve ser do tipo i. Você especifica o programa do tipo no campo Typena tela Program Attributes quando você cria o programa.

A instrução include copia o conteúdo do programa include no programa de inclusão. Ocódigo do programa include é copiado como está e substitui a instrução include no tempoda geração de programa.

A SAP utiliza includes para reduzir a redundância de código e dividir programas mui tograndes em unidade menores.

Page 107: Curso_Abap

Módulos de FunçãoMódulos de Função

Um módulo de função é a última das quatro unidades principais de modularização doABAP/4. Ele é muito semelhante a uma sub-rotina externa sob e sses aspectos:

- Ambos existem dentro de um programa externo;- Ambos ativam os parâmetros a serem passados e retornados;- Os parâmetros podem ser passados por valor, por valor e resu ltado, ou porreferência.

As diferenças importantes entre módulos de função e sub-rot inas externas são asseguintes :

Página 107 de 163

seguintes :

- Os módulos de função têm uma tela especial utilizada para de finir parâmetros – osparâmetros não são definidos via instruções de ABAP/4;- As áreas de trabalho tables não são compartilhadas entre o m ódulo de função e oprograma de chamada;- Para chamar um módulo de função, é utilizada uma sintaxe dif erente da empregadapara chamar uma sub-rotina.- Para sair de um módulo de função, é utilizada a instrução raise em vez de check, exitou stop.

Page 108: Curso_Abap

9. Tela de Seleção9. Tela de Seleção

9.1. Eventos

9.2. Selection-Screen

Página 108 de 163

9.3. Parameter

9.4. Select-Options

9.5. Message

Page 109: Curso_Abap

EventosEventos

- O evento INITIALIZATION

É esse bloco no qual você especifica os valores-padrão inici ais de sua tela deseleção, com base no fato de os critérios serem ou não necessá rios para manter aintegridade de dados digitados pelo usuário.

- O evento AT SELECTION-SCREEN

Página 109 de 163

- O evento AT SELECTION-SCREEN

é processado depois da entrada do usuário na tela de seleção a tiva. Isso pode ocorrerquando o usuário pressiona um tecla de função ou dá um clique e m um botão., bemcomo no caso de muitos outros elementos que podem interagir c om o usuário. Alémde verificação de validações de dados, mensagens de aviso, a lteração do status GUI eaté mesmo janelas pop-up podem ser abertas utilizando o even to at selection-screen.

Page 110: Curso_Abap

Eventos – AT USER COMMANDEventos – AT USER COMMAND

Os botões , assim como muitas outras opções de tela de seleção baseadas em evento, podem ser muito úteis na manutenção da inte ração com o usuário e na

validação de entrada do usuário. Essa instrução, quando utilizada junto com o comand o at selection-screen, é uma

excelente maneira de interagir com o usuário quando este digita dados.

Sintaxeselection-screen pushbutton 10(20) text-003 user-command eng1.

selection-screen pushbutton 50(20) text-004 user-command germ.

Página 110 de 163

selection-screen pushbutton 50(20) text-004 user-command germ.

at selection-screen.

at user-command.

case sy-ucomm.

when 'eng1'.

lang-english = 'Y'.

when 'germ'.

lang-english = 'Y'.

Endcase.

Page 111: Curso_Abap

Selection-ScreenSelection-Screen

ComandosSELECTION-SCREEN

SintaxeSelection-screen begin of block block0 with frame title text-000.

Página 111 de 163

Ao definir telas de entrada para utilização na info rmação de dados, vários elementos de seleção podem ser combinados para manter a integrid ade dos dados e ainda continuarem de fácil utilização. Esses elementos incluem campos de entrada padrão como opções de

seleção e parâmetros, assim como outros, tais como caixas de seleção, botões de opção e botões pushbutton.

Page 112: Curso_Abap

Selection-Screen – Outras AdiçõesSelection-Screen – Outras Adições

- Selection-screen comment - coloca um comentário na tela de seleção.

- Selection-screen uline - coloca um sublinhado na tela em uma posiçãoespecificada para um comprimento especificado;

- Selection-screen position - Uma ferramenta muito útil que especifica umcomentário para o próximo parâmetro de campo na tela. É útil p araselection-options assim como pra parameters.

Página 112 de 163

selection-options assim como pra parameters.

- Selection-screen begin-of-line e selection-screen end-of-line - Todos oscampos de entrada definidos entre essas duas instruções são colocados umdo lado do outro na mesma linha.

- Selection-screen skip o n - Essa instrução cria uma linha em branco paraas n linhas na tela de seleção.

Page 113: Curso_Abap

PARAMETERPARAMETER

ComandosPARAMETERS

SintaxeParameters v1[(n)] [type t1] [like tabela-campo]

(1) obligatory

Página 113 de 163

(1) obligatory

(2) default

(3) lower case

A instrução parameter nas telas de seleção cria uma estrutura de dados no programa que armazena a entrada inserida no campo Parameter pelo usuário em

tempo de execução.

Page 114: Curso_Abap

PARAMETER – Checkbox / RadiobuttonPARAMETER – Checkbox / Radiobutton

ComandosCHECKBOX

Sintaxeparameters: testparm as checkbox default 'X'.

Página 114 de 163

ComandosRADIOBUTTON

Sintaxeparameters: opcao1 as radiobutton group opcao,

opcao2 as radiobutton group opcao.

Page 115: Curso_Abap

SELECT-OPTIONSSELECT-OPTIONS

ComandosSELECT-OPTIONS

SintaxeSelect-options sel FOR f.

A instrução select-options é utilizada de maneira semelhante à instrução parameters,

Página 115 de 163

A instrução select-options é utilizada de maneira semelhante à instrução parameters,no sentido de que cria critérios de seleção para um campo de ba nco de dados. Adiferença principal entre as duas é que a instrução select-options cria dois campos deentrada que contêm tanto um campo FROM como um campo TO, em opo sição asomente uma única entrada de campo.

-SIGN - Pode significar INCLUSIVE, que é o padrão, ou EXCLUSIV E, que pode sermarcada na janela Complex Selections.- OPTION - Pode armazenar valores BT (entre), CP (contém padr ão), EQ (igual para) eGE (maior que ou igual a).- Low - Armazena a entrada de valor no campo FROM.- HIGH - Armazena a entrada de valor no campo TO.

Page 116: Curso_Abap

MESSAGEMESSAGE

ComandosMESSAGE

Sintaxereport example line-count 65 line-size 132 message-id fs.

Message tiponnn(classe) [with text text-campotexto].

As mensagens são mantidas e armazenadas na tabela T100 e pode m ser acessadas apartir do ABAP workbench . Um programador efetivo emite mensagens que são

Página 116 de 163

partir do ABAP workbench . Um programador efetivo emite mensagens que sãodescritivas e ajudam o usuário a entender a natureza do fluxo do programa.

Tipos de Mensagens:

- S - sucess, essa mensagem é exibida na linha de status da tela seguinte.- A - Abend, a transação atual é interrompida e uma mensagem é e xibida até que ousuário confirme-a.- E - Error, o usuário deve inserir dados para continuar.- W - Warning, o usuário pode tanto modificar os dados de entra da como pressionarEnter para prosseguir.- I - Information, o usuário deve pressionar <enter> par cont inuar no mesmo ponto doprograma.

Page 117: Curso_Abap

10. SELECT10. SELECT

10.1. Introdução

10.2. Seleção

Página 117 de 163

10.3. Adições

10.4. JOIN

10.5. Performance

Page 118: Curso_Abap

Seleção de DadosSeleção de Dados

ComandosSELECT

SintaxeSELECT * FROM dbtab.

ENDSELECT.

ComandosINTO / WHERE

SintaxeSELECT f1 f2 f3 … fn

FROM dbtab

INTO [(f1,f2,f3,…,fn)] [table i_tabela]

Where f1 = [constante/variável] [and/or]

Página 118 de 163

Where f1 = [constante/variável] [and/or]

fn = [constante/variável].

[…]

[ENDSELECT.]

Teste de sucesso do select:

If sy-subrc ne 0.

Write: ‘Nenhum dado foi

selecionado’.

Endif.

Page 119: Curso_Abap

Select - AditionsSelect - Aditions

Adições

• ORDER BY f’1…fn / … ORDER BY PRIMARY KEY

• UP TO n ROWS.

• INTO TABLE itab

• APPENDING TABLE itab

• APPENDING CORRESPONDING FILEDS OF TABLE itab.

Página 119 de 163

•• FOR ALL ENTRIES in itab

• MIN (campo)

• MAX (campo)

• AVG (campo)

• COUNT (*)

Page 120: Curso_Abap

Select – Mais UsadosSelect – Mais Usados

Mais Usados:

• SELECT * FROM ... <tabela>

• SELECT * FROM <tabela> WHERE <campo> EQ <conteúdo>.

• SELECT * FROM <tabela> WHERE <table field> BETWEEN <field1> AND

<field2>.

• SELECT * FROM <tabela> WHERE <table field> IN <internal table>.

• SELECT * FROM <tabela> APPENDING TABLE <internal table>.

Página 120 de 163

• SELECT * FROM <tabela> APPENDING TABLE <internal table>.

• SELECT * FROM <tabela> INTO TABLE <internal table>.

• SELECT … INTO CORRESPONDING FIELDS OF TABLE <internal table>.

• SELECT SINGLE * FROM <tabela> WHERE <campo> EQ <conteúdo>.

• SELECT <a1> <a2> ... INTO ( <f1>, <f2>, …) FROM … <tabela> WHERE …

• SELECT * FROM (<tabela>) INTO <work area>.

• SELECT * FROM <tabela> FOR ALL ENTRIES IN <tabela interna>

WHERE campo1 = conteúdo AND

campo2 = conteúdo .

Page 121: Curso_Abap

10. ALV10. ALV

10.1. Introdução

10.2. Barra de Ferramentas

Página 121 de 163

10.3. Imagens

10.4. Principais Funções

10.5. Programa Exemplo

Page 122: Curso_Abap

ALV – Relatórios InterativosALV – Relatórios Interativos

Report TradicionalReport Tradicional

Página 122 de 163

Page 123: Curso_Abap

ALV – Relatórios InterativosALV – Relatórios Interativos

Página 123 de 163

Report ALVReport ALV

Page 124: Curso_Abap

Selecione uma linha e clique nesse botão. A linha s erá destacada em forma de coluna.

Reapresenta do relatório.

Marca todas as linhas.

Desmarca todas as linhas.

Todo o relatório ficará classificado na ordem cresc ente por essa coluna.

ALV - Barra de FerramentasALV - Barra de Ferramentas

Página 124 de 163

Todo o relatório ficará classificado na ordem cresc ente por essa coluna.

Idem ao anterior, mas a classificação é na ordem de crescente.

Você poderá filtrar o seu relatório baseando-se em valores de campos.

Totaliza a coluna selecionada. A coluna deve conter um valor.

Apresenta subtotais de um total geral, para a colun a selecionada.

Mostra como irá ficar a impressão do relatório.

Exporta o relatório para o Microsoft Excel.

Exporta o relatório para o Microsoft Word.

Grava o relatório em arquivo.

Page 125: Curso_Abap

ALV – Barra de FerramentasALV – Barra de Ferramentas

Página 125 de 163

Page 126: Curso_Abap

ALV – Barra de FerramentasALV – Barra de Ferramentas

Página 126 de 163

Page 127: Curso_Abap

ALV - FiguraALV - Figura

No exemplo acima foi utilizado como background a imagem ALV_BACKGROUND e o nome dologotipo é ENJOYSAP_LOGO.

Página 127 de 163

Page 128: Curso_Abap

ALV – Figura – Transação ‘0FPM002’ALV – Figura – Transação ‘0FPM002’

Página 128 de 163

Page 129: Curso_Abap

ALV - FiguraALV - Figura

Página 129 de 163

Page 130: Curso_Abap

ALV – Funções e Comandos NecessáriosALV – Funções e Comandos Necessários

type-pools:

vrm, "Necessário para uso de ALV

slis. "Tipos globais para ALV

Definição de tipos

data:

t_linecolor type slis_specialcol_alv occurs 0 with header line,

t_listheader type slis_t_listheader,

t_fieldcat type slis_t_fieldcat_alv with header line,

Definição de tabelas

Página 130 de 163

t_fieldcat type slis_t_fieldcat_alv with header line,

t_sort type slis_sortinfo_alv occurs 0 with header line.utilizadas

data:

v_listheader type slis_listheader, "Cabeçalho

v_layout type slis_layout_alv, "layout para saída

v_print type slis_print_alv, "Ctrl de impressão

v_variante like disvariant. "Variante de exibição

Definição de

variáveis

Page 131: Curso_Abap

ALV – Funções e Comandos NecessáriosALV – Funções e Comandos Necessários

call function 'REUSE_ALV_VARIANT_DEFAULT_GET'

EXPORTING

i_save = 'A'

CHANGING

cs_variant = v_variante

EXCEPTIONS

Busca layout de exibiçãodefault para o relatório. Sehouver algum formato padrãopara o relatório, essa funçãobusca e já apresenta o

Página 131 de 163

EXCEPTIONS

not_found = 2.

busca e já apresenta orelatório nesse formato.

t_linecolor-fieldname = 'VBELN'.

t_linecolor-color-col = '6'.

t_linecolor-color-inv = '1'. "Inverso, 1 liga e 0 desliga

append t_linecolor.

Permite informar a cor quevocê deseja para a coluna,inclusive pelo valor da variável

Page 132: Curso_Abap

ALV – Funções e Comandos NecessáriosALV – Funções e Comandos Necessários

clear t_fieldcat.

t_fieldcat-fieldname = 'MARK'.

t_fieldcat-tabname = 'T_ALV'.

t_fieldcat-reptext_ddic = 'S'.

t_fieldcat-inttype = 'C'.

t_fieldcat-outputlen = 1.

t_fieldcat-checkbox = 'X'.

append t_fieldcat.

Principal tabela do ALV, a tabela deFIELDCAT contém todos os campos, aseqüência, a formatação a ser utilizadae outras características de exibição.

Monta tabela para apresentação dorelatório . Aqui montamos um catálogo

Página 132 de 163

clear t_fieldcat.

t_fieldcat-fieldname = 'VBELN'.

t_fieldcat-tabname = 'T_ALV'.

t_fieldcat-reptext_ddic = 'Doc.

Fatura'.

t_fieldcat-inttype = 'C'.

t_fieldcat-outputlen = 10.

append t_fieldcat.

… (todos os campos a serem exibidos na

tela devem constar na tabela FIELDCAT)

relatório . Aqui montamos um catálogocom as informações dos campos.

Veja que não estamos preenchendotodas as opções do catálogo, não énecessário.

No programa você poderá analisar asprincipais opções.

Page 133: Curso_Abap

ALV – Campos Especiais da Tab FIELDCATALV – Campos Especiais da Tab FIELDCAT

* Para o campo NETWR, o relatório já vai

mostrar linha de total

clear t_fieldcat.

t_fieldcat-fieldname = 'NETWR'.

t_fieldcat-tabname = 'T_ALV'.

t_fieldcat-reptext_ddic = 'Valor líquido'.

t_fieldcat-inttype = 'P'.

* Os campos abaixo não irão aparecer no

* relatório, apenas quando o usuário modificar

* o layout e inserir esses campos nas colunas a

* serem apresentadas

clear t_fieldcat.

t_fieldcat-fieldname = 'FKART'.

t_fieldcat-tabname = 'T_ALV'.

Página 133 de 163

t_fieldcat-inttype = 'P'.

t_fieldcat-outputlen = 15.

t_fieldcat-do_sum = 'X'.

append t_fieldcat.

t_fieldcat-tabname = 'T_ALV'.

t_fieldcat-reptext_ddic = 'Tp do documento'.

t_fieldcat-inttype = 'C'.

t_fieldcat-outputlen = 4.

t_fieldcat-no_out = 'X'.

append t_fieldcat.

Page 134: Curso_Abap

ALV – Funções e Comandos NecessáriosALV – Funções e Comandos Necessários

* Preenchendo algumas opções de impressão (Não é obrigatório)

v_layout-expand_all = 'X'. "Abrir subitens

v_layout-colwidth_optimize = 'X'. "Largura melhor possível da coluna

v_layout-edit = 'X'. "Permitir a edição

* Indicando para função qual o layout que deve ser apresentado inicialmente

Preparação p/ chamada da Exibição do Relatório

Página 134 de 163

* Indicando para função qual o layout que deve ser apresentado inicialmente

v_variante-variant = p_varia.

v_print-no_print_listinfos = 'X'.

Page 135: Curso_Abap

ALV – Funções e Comandos NecessáriosALV – Funções e Comandos Necessários

call function 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = v_repid

i_background_id = 'ALV_BACKGROUND'

i_callback_top_of_page = 'ZF_TOP_OF_PAGE'

* i_callback_pf_status_set = 'ZF_STATUS'

i_callback_user_command = 'ZF_USER_COMMAND'

it_fieldcat = t_fieldcat[]

Chamada da Exibição do Relatório

Página 135 de 163

it_fieldcat = t_fieldcat[]

is_layout = v_layout

it_sort = t_sort[]

i_default = 'X'

i_save = 'A'

is_variant = v_variante

is_print = v_print

TABLES

t_outtab = t_alv

EXCEPTIONS

program_error = 1

others = 2.

Page 136: Curso_Abap

10. SELECT10. SELECT

10.1. Introdução

10.2. Seleção

Página 136 de 163

10.3. Adições

10.4. JOIN

10.5. Performance