Você está na página 1de 224

TREINAMENTO ABAP

ÍNDICE

 Curso Básico
 Data Dictionary
 Transportes
 Report
 Performance
 BDC Session
 On Line
 Sapscript
 Smartform

Título del documento | 2


CURSO BÁSICO
INSTÂNCIA

Instalação típica composta de 3 ambientes

Cada ambiente composto de 1 banco de dados,


1 instância central,
n servidores de aplicação e
m servidores de
apresentação

Arquitetura 3 camadas

Título del documento | 3


CURSO BÁSICO
MANDANTES E OBJETOS DO REPOSITÓRIO

Visão das aplicações por mandante (em cada ambiente)

Mandt Chave Valor

100 A 1
100 B 2
100 C 3
Tabela dependente de mandante
200 A 2
=
Primeira chave é o mandante 200 B 3
200 D 4
300 C 2
Título del documento | 4
CURSO BÁSICO
ORDENS DE TRANSPORTE
Dois tipos principais:
• Configuração (customizing): dados, usualmente dependente
de mandante
• Repositório (workbench): levam conteúdo independente de
mandante (objetos do repositório), mas podem levar dados,
inclusive os dependente de mandante.

• Ordem aberta
• Ordem fechada

Ordem

Mandt Chave Valor

100 A 1

100 C 3

Título del documento | 5


CURSO BÁSICO
TRANSAÇÕES

Chamadas aos programas


Principais transações para desenvolvedores:
SE80  transação central de desenvolvimento
SE38  abre o editor ABAP/4
SE37  criação de funções
SE16  permite a visualização do conteúdo de tabelas do
SAP
SE11  permite a visualização da arquitetura de uma
tabela/estrutura do SAP e criação de demais objetos do dicionário
SE43  criação de menus
SE93  criação de transações
SE71  criação e manutenção de formulários SAPscripts
CMOD  criação de projetos Enhancements (Field Exits, User
Exits, ...)

Título del documento | 6


CURSO BÁSICO
PADRÕES DE NOMENCLATURA
Nota SAP 16466

Maioria dos objetos: Y* e Z*


Exemplo de exceção: funções Y_* ou Z_*
Título del documento | 7
CURSO BÁSICO
BARRA DE BOTÕES
Barra de botões da primeira tela SE38

Verificar: verifica a sintaxe e consistência do código.


Ativar: ativa o programa, além de efetuar a verificação de sintaxe e consistência do
código.
Executar: executa o programa (opção válida apenas para programas do tipo
executável).
Lista de utilizações: verifica onde existem chamadas do programa.
Análise do ambiente: avalia os componentes do programa e lista um relatório no
final que permite a navegação nestes componentes.
Ajuda online: exibe ajuda online da documentação do SAP.
Eliminar: elimina programas.
Copiar: efetua cópia de programas.
Renomear: renomeia programas.
: Depuração: executa programa em modo de depuração (opção válida
apenas para programas do tipo executável).
: Executar c/ variante: executa programa com variante de seleção já
carregada em tela (opção válida apenas para programas do tipo executável).
: Variantes: permite o gerenciamento das variantes de seleção.

Título del documento | 8


CURSO BÁSICO
BARRA DE BOTÕES
Barra de botões do editor ABAP

Objeto anterior: permite a navegação ao objeto anterior.


Objeto seguinte: permite a navegação ao objeto seguinte (caso tenha ocorrido
retorno no editor).
Exibir/Modificar: permite exibir ou modificar o programa.
Ativo/Inativo: permite navegar entre as versões ativa e inativa do programa.
Outro objeto: permite navegar entre outros objetos.
Ampliar: permite utilizar pontos de ampliação disponíveis no programa.
Verificar: verifica a sintaxe e consistência do código.
Ativar: ativa o programa, além de efetuar a verificação de sintaxe e consistência do
código.
Executar: executa o programa (opção válida apenas para programas do tipo
executável).
Lista de utilizações: verifica onde existem chamadas do programa.

Título del documento | 9


CURSO BÁSICO
BARRA DE BOTÕES
Barra de botões do editor ABAP (continuação)

Exibir lista de objetos: exibe lista de projetos ligados ao programa (includes, tabelas,
telas, variáveis, tabelas internas, etc).
Exibir janela de navegação: exibe pilha de navegação de objetos.
Ajuda online: exibe ajuda online da documentação do SAP.
Definir/eliminar ponto parada sessão: permite definir um ponto de parada para
depuração para a sessão ativa.
Definir/eliminar ponto parada externo: permite definir um ponto de parada para
depuração para uma chamada externa (RFC, por exemplo).
Modelo: permite incluir modelos de chamadas funções, mensagens, classes, etc.
Pretty Printer: efetua identação e efetua conversões de maiúsculas e
minúsculas de acordo com a configuração do editor.

Título del documento | 10


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Exemplo 1
REPORT ZEXEMP_01.

WRITE: '111111'.
WRITE: '222222',
       '333333'.
WRITE: /'111111'.
WRITE: 15 '333333'.
WRITE: / text-001.
ULINE.
ULINE 8(6).
SKIP.
SKIP 2.
WRITE : 8 sy-langu.
WRITE : / sy-datum UNDER sy-langu.

Variáveis de ambiente: estrutura SYST

Título del documento | 11


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Exemplo 2
REPORT ZEXEMP_02.

TOP-OF-PAGE.

WRITE: 'EXEMPLO 2 - CURSO ABAP/4',
       80 'Page',
       SY-PAGNO.

Título del documento | 12


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Exemplo 3
REPORT ZEXEMP_03.

FORMAT COLOR COL_HEADING.

WRITE : 'FUNDO AZUL'.

Título del documento | 13


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Exemplo 4
REPORT ZEXEMP_04.

DATA: nome(20) TYPE c,
      rg       TYPE i,
      data     TYPE bkpf-budat,
      hora(8)  VALUE '14:05:45'.

MOVE 'Solution Center' TO nome.

COMPUTE rg = 42159818 + 1.

data = '19970530'. "aaaammdd

Título del documento | 14


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Exemplo 5
REPORT ZEXEMP_05.

PARAMETER: P_NOME1(15) TYPE C OBLIGATORY,
           P_NOME2(15) TYPE C DEFAULT 'Abap 
Factory' LOWER CASE,
           P_BOTAO1 RADIOBUTTON GROUP G1,
           P_BOTAO2 RADIOBUTTON GROUP G1.
SELECT-OPTIONS: s_data FOR sy-datum.

Título del documento | 15


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Título del documento | 16


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Exemplo 6
REPORT ZEXEMP_06.

DATA: ti_t005h TYPE TABLE OF t005h,
      wa_t005h TYPE t005h.
SELECT *
  FROM t005h
  INTO TABLE ti_t005h
  WHERE land1 = p_pais
    AND spras = sy-langu
  ORDER BY cityc.

Título del documento | 17


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Exemplo 7
REPORT ZEXEMP_07.

 LOOP AT tg_t005h INTO wa_t005h.

 ON CHANGE OF wa_t005h-land1.
 IF v_var1 = 0.
 NEW-PAGE.
 ENDIF.

 FORMAT COLOR OFF.
 WRITE 'COUNTRY          CITY'.

 CLEAR v_var1.
 ENDON.

 (…)
 ENDLOOP.

Título del documento | 18


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Exemplo 8
REPORT ZEXEMP_08.

 CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename                = v_arquivo
      write_field_separator   = 'X'
    TABLES
      data_tab                = ti_spfli
    EXCEPTIONS
      file_write_error        = 1
      no_batch                = 2
      OTHERS                  = 22.

Título del documento | 19


CURSO BÁSICO
PRIMEIROS EXEMPLOS DE ABAP

Exemplo 9
REPORT ZEXEMP_09.

 CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    filename   = vg_arquivo
  TABLES
    data_tab   = tg_spfli
  EXCEPTIONS
    file_open_error = 1
    file_read_error = 2
    OTHERS          = 17.

Título del documento | 20


CURSO BÁSICO
EDITOR ABAP
Upload/Download de códigos

Todo código ABAP é aberto!


Título del documento | 21
CURSO BÁSICO
EXERCÍCIO I
Desenvolver o programa ZEXER01_## conforme print:
Variáveis de sistema utilizadas:
SY-DATUM
SY-UZEIT

IMPORTANTE
Ao salvar, indicar o pacote TRN e salvar.
O SAP pedirá uma request, clique em e digite a seguinte descrição:
Academia de Talentos Grupo 01 – Aluno ##
Anotar o número da change request para ser utilizado durante todo este curso

Título del documento | 22


CURSO BÁSICO
EXERCÍCIO II

Desenvolver o programa ZEXER02_## que resulte o cabeçalho seguinte:


Variáveis de sistema utilizadas:
SY-UNAME
SY-DATUM

Título del documento | 23


CURSO BÁSICO
EXERCÍCIO III

Desenvolver o programa ZEXER03_## que simule uma calculadora com


4 operações ( +, -, /, * ) e dois campos obrigatórios para entrada de
números (decimais). Layout:

Título del documento | 24


CURSO BÁSICO
CRIANDO TRANSAÇÕES
Transação SE93

Título del documento | 25


CURSO BÁSICO
CRIANDO TRANSAÇÕES
Transação SE93

Atributos da transação

Título del documento | 26


CURSO BÁSICO
CRIANDO TRANSAÇÕES
Transação SE93

Atributos da transação

Título del documento | 27


DATA DICTIONARY
MODELO RELACIONAL

Modelo Entidade – Relacionamento

• Entidade: agrupamento de objetos do mesmo tipo


Clientes, fornecedores, banco, moedas
• Atributo: qualificador de uma entidade
Nome, RG, número da agência, código internacional
• Domínio: conjunto de valores permissíveis a um atributo
Texto até 40 caracteres, quatro números, meses
• Relacionamento: associação entre duas entidades
Conta de um cliente, conta de uma agência

Título del documento | 28


DATA DICTIONARY
MODELO RELACIONAL

Cardinalidades

• Um-para-um: uma ocorrência da Entidade A está relacionada


com apenas uma ocorrência da Entidade B
Pessoa  RG e Pessoa  Mãe

• Um-para-N: uma ocorrência da Entidade A está relacionada


com uma ou várias ocorrências da Entidade B
Pessoa  Telefone e Pessoa  Nacionalidade

• N-para-N: várias ocorrências da Entidade A estão relacionadas


com várias ocorrências da Entidade B
Pessoa  Chefe e Autor  Livro

Título del documento | 29


DATA DICTIONARY
MODELO RELACIONAL

Formas Normais

Evitar as redundâncias, ajudando a estabelecer as entidades.

As três primeiras são:


1ª FN: Não ter elementos multivalorados
2ª FN: Em chaves primárias compostas, nenhum campo
depende só de parte da chave
3ª FN: Não deve haver dependências entre atributos

Título del documento | 30


DATA DICTIONARY
BANCO DE DADOS RELACIONAL

Implementação física do modelo relacional

• Entidades  Tabelas (linhas x colunas)


• Atributos  Colunas
• Ocorrências  Linhas (registros)

• Chave = conjunto de atributos que garantes a unicidade das


ocorrências

Toda tabela deve ter pelo menos um campo chave, que será
denominado “chave primária”

• Chave estrangeira = atributo que é chave primária de outra


tabela

Título del documento | 31


DATA DICTIONARY
BANCO DE DADOS RELACIONAL

SQL - Structured Query Language

DDL: Data Definition Language – Comandos específicos para


definição de objetos do banco de dados.

Ambiente SAP  pelo dicionário de dados (SE11)

DML: Data Manipulation Language - Comandos específicos


para tratamento dos dados armazenados nos objetos do banco

ABAP define “Open SQL”

Título del documento | 32


DATA DICTIONARY
DICIONÁRIO DE DADOS
Transação SE11

Título del documento | 33


DATA DICTIONARY
DICIONÁRIO DE DADOS - TABELA
Estrutura de uma tabela

Título del documento | 34


DATA DICTIONARY
DICIONÁRIO DE DADOS - TABELA
Entradas possíveis e verificações

Título del documento | 35


DATA DICTIONARY
DICIONÁRIO DE DADOS - TABELA
Opções técnicas

Título del documento | 36


DATA DICTIONARY
DICIONÁRIO DE DADOS - TABELA
Categoria de ampliação

No menu: Suplementos  Categoria de ampliação...

Título del documento | 37


DATA DICTIONARY
DICIONÁRIO DE DADOS - TABELA
Índices

O índice para chave primária é obrigatório e criado automaticamente


<tabela>~0
Título del documento | 38
DATA DICTIONARY
DICIONÁRIO DE DADOS - VISÃO
Tabelas e condições de join

A visão é criada no banco de dados


Título del documento | 39
DATA DICTIONARY
DICIONÁRIO DE DADOS - VISÃO
Campos da visão

Título del documento | 40


DATA DICTIONARY
DICIONÁRIO DE DADOS - ELEMENTO
Categoria de dados

Título del documento | 41


DATA DICTIONARY
DICIONÁRIO DE DADOS - ELEMENTO
Características adicionais

Título del documento | 42


DATA DICTIONARY
DICIONÁRIO DE DADOS - ELEMENTO
Denominação do campo

Título del documento | 43


DATA DICTIONARY
DICIONÁRIO DE DADOS - DOMÍNIO
Definição e rotina de conversão

Título del documento | 44


DATA DICTIONARY
DICIONÁRIO DE DADOS - DOMÍNIO
Intervalo de valores

Título del documento | 45


DATA DICTIONARY
EXEMPLOS
Criação de uma tabela

Título del documento | 46


DATA DICTIONARY
EXEMPLOS
Criação de uma tabela

Título del documento | 47


DATA DICTIONARY
EXEMPLOS
Criação de uma tabela

Título del documento | 48


DATA DICTIONARY
EXEMPLOS
Criação do diálogo de manutenção

Título del documento | 49


DATA DICTIONARY
EXEMPLOS
Criação do diálogo de manutenção

Título del documento | 50


DATA DICTIONARY
EXEMPLOS
Criação da transação para o diálogo de manutenção

Título del documento | 51


DATA DICTIONARY
EXEMPLOS
Criação da transação para o diálogo de manutenção

Título del documento | 52


DATA DICTIONARY
AJUDA DE PESQUISA
Criando ajuda de pesquisa

Título del documento | 53


DATA DICTIONARY
AJUDA DE PESQUISA
Definindo a fonte e características

Título del documento | 54


DATA DICTIONARY
AJUDA DE PESQUISA
Utilizando a ajuda de pesquisa (F4)

Título del documento | 55


DATA DICTIONARY
EXERCÍCIO 1
Criar uma ESTRUTURA com as seguintes características:

Nome: ZESTRUT_##
Descrição: Estrutura de preenchimento do layout

Field NameKey Data Element Type Length Short Text


MANDT x MANDT CLNT 3 Client
BELNR x BELNR D CHAR 10 Acc. Doc Num
TXT50 TXT50_SKAT CHAR 50 G/L acct long txt

Título del documento | 56


DATA DICTIONARY
EXERCÍCIO 2
Criar uma tabela com as seguintes características:

Nome: ZTBL_##
Descrição: Tabela para manutenção via transação SM30

Field name Data elem. Type Length Short text _


MANDT MANDT CLNT 3 Mandante
HKONT HKONT CHAR 10 Conta do Razão
BELNR BELNR_D CHAR 10 Nº documento contábil
GJAHR GJAHR NUMC 4 Exercício
BKTXT BKTXT CHAR 25 Texto de cabeçalho de doc.
BLART BLART CHAR 2 Tipo de documento
BLDAT BLDAT DATS 8 Data no documento

Criar um diálogo de manutenção com as seguintes características:


Function Group: ZCURSOFG##
Utilizar a transação SM30 para manutenção desta tabela.

Título del documento | 57


DATA DICTIONARY
COMANDO SELECT

Detalhando o comando de leitura de dados

1-) SELECT * FROM dbtab.
....
ENDSELECT.
           if SY-SUBRC <> …

1a-)…WHERE Condition

1b-)…ORDER BY f1…fn
      …ORDER BY PRIMARY KEY

1c-)…UP TO n ROWS

Título del documento | 58


DATA DICTIONARY
COMANDO SELECT

Detalhando o comando de leitura de dados

2-) SELECT * FROM dbtab INTO TABLE itab.
2a-) …WHERE 
2b-) …ORDER BY
2c-) …UP TO n ROWS

3-) SELECT * FROM dbtab APPENDING TABLE itab.
3a-) …WHERE 
3b-) …ORDER BY
3c-) …UP TO n ROWS

4-) SELECT SINGLE * FROM dbtab INTO wa WHERE f1 = 
g1 AND …

Título del documento | 59


DATA DICTIONARY
COMANDO SELECT
Detalhando o comando de leitura de dados

5-) SELECT * FROM dbtab APPENDING CORRESPONDING 
FIELDS OF TABLE itab.
5a-) SELECT * FROM dbtab INTO CORRESPONDING FIELDS OF 
TABLE itab.

6-) SELECT * FROM dtab 
    FOR ALL ENTRIES IN itab where…

Nota: verificar se a tabela não está vazia, caso em que todos registros serão
selecionados

IF NOT ( itab[]  IS  INITIAL ).
  SELECT * FROM dtab FOR ALL ENTRIES in itab 
       where campo = itab-campo …
ENDIF.

Título del documento | 60


DATA DICTIONARY
COMANDO SELECT
Considerações sobre os vários tipos de SELECTs

1 - SELECT * FROM …<tabela> 

2 - SELECT * FROM <tabela> WHERE <campo> EQ <var>

3 - SELECT * FROM <table> WHERE <table field> BETWEEN 
<field1> and <field2>.

4 - SELECT * FROM <table> WHERE <table field> LIKE 
….’_R%’.

5 - SELECT * FROM <table> WHERE <table field> IN  
(var1,var2).

6 - SELECT * FROM <table> WHERE <table field> IN 
<internal table>.

Título del documento | 61


DATA DICTIONARY
COMANDO SELECT

Considerações sobre os vários tipos de SELECTs

7 - SELECT * FROM <table> ORDER BY <field1> 
<field2> … PRIMARY KEY.

8 - SELECT * FROM  <table> BYPASSING BUFFER.
(Usado para ler diretamente da tabela original, e não do buffer).

9 - SELECT * FROM <table> APPENDING TABLE 
<internal table>. 

10 - SELECT …FROM <table> INTO TABLE <INTERNAL 
TABLE>.

Título del documento | 62


DATA DICTIONARY
COMANDO SELECT

Considerações sobre os vários tipos de SELECTs

11 - SELECT …. INTO CORRESPONDING FIELDS OF TABLE 
<itab>.

12 - SELECT ….. APPENDING CORRESPONDING FIELDS OF 
TABLE  <itab>.

13 - SELECT SINGLE * FROM SPFLI WHERE 
…..<campo>….. EQ … <conteúdo>

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

Título del documento | 63


DATA DICTIONARY
COMANDO SELECT

Considerações sobre os vários tipos de SELECTs

15 - SELECT MAX(campo)
          MIN(campo)
          AVG(campo)
          COUNT(*)
FROM <table> INTO (…..,……,…..,….)
WHERE ………… .

AVG e SUM: somente para campos numéricos.


Não se usa endselect.

Título del documento | 64


DATA DICTIONARY
COMANDO SELECT
Considerações sobre os vários tipos de SELECTs

16 - SELECT * FROM SFLIGHT WHERE PRICE IN ITAB.

17 - SELECT * FROM (<table>) INTO <work area>.

Exemplo:

data: begin of WA,


line(100),
end of WA.

Parameters: tabname(10) default ‘SPFLI’.

Select * from (tabname) into WA


Write / WA .
Endselect.

Título del documento | 65


DATA DICTIONARY
COMANDO SELECT
Considerações sobre os vários tipos de SELECTs

18- SELECT * FROM <table> FOR ALL ENTRIES IN 
<internal table> WHERE
campo1 = <conteúdo> and
  campo2 = <conteúdo>

19 - SELECT MIN( price ) max (price ) INTO 
(minimum, maximum) FROM  sflight WHERE ...

19a - SELECT carrid MIN( price ) max (price ) 
    INTO TABLE itab  FROM sflight WHERE …
    GROUP BY  carrid.

Título del documento | 66


EXERCÍCIOS EXTRAS
EXERCÍCIO IV

Desenvolver o programa ZEXER04_## que possua as seguintes


características:
Parâmetros: SPFLI-CITYFROM e SPFLI-CITYTO com valores default
Opções: Informações e Reserva
Validações: buscar dados dos vôos que correspondam aos parâmetros
informados; exibir a aeronave utilizada e o preço da passagem apenas
quando for uma operação de reserva.
Campos para seleção:
SPFLI-CARRID
SPFLI-CITYFROM
SPFLI-CITYTO
SPFLI-FLTIME
SPFLI-ARRTIME
SPFLI-DEPTIME
SFLIGHT-FLDATE
SFLIGHT-PLANETYPE
SFLIGHT-PRICE

Título del documento | 67


EXERCÍCIOS EXTRAS
EXERCÍCIO IV

Título del documento | 68


EXERCÍCIOS EXTRAS
EXERCÍCIO V
Desenvolver o programa ZEXER05_## que a partir de um arquivo texto
contendo o tipo de aeronave, seja capaz de criar um novo arquivo com
o tipo de aeronave e o nome da companhia aérea.
Exibição de mensagem tanto no caso de sucesso na criação do arquivo
final como no caso da ocorrência de algum erro.
Campos utilizados: SFLIGHT-CARRID e SFLIGHT-PLANETYPE

Arquivo de entrada:
• Tipo de aeronave (1 linha por tipo)

Arquivo de saída:
• Tipo de aeronave
• ; (separador fixo)
• Companhia aérea

Título del documento | 69


EXERCÍCIOS EXTRAS
EXERCÍCIO V

Título del documento | 70


TRANSPORTE
ORDENS DE TRANSPORTE

Principais tipos de ordens de transporte

Transações SE09 ou SE10

Título del documento | 71


TRANSPORTE
ORDENS DE TRANSPORTE
Telas iniciais SE09 ou SE10

Título del documento | 72


TRANSPORTE
ORDENS DE TRANSPORTE
Localizando as ordens já criadas

Título del documento | 73


TRANSPORTE
ORDENS DE TRANSPORTE
Lista das ordens de transporte

Título del documento | 74


TRANSPORTE
ORDENS DE TRANSPORTE
Históricos: ação e transporte

Ir para 
Log de ação
Log de transporte

Título del documento | 75


TRANSPORTE
ORDENS DE TRANSPORTE
Características das ordens de transporte

Título del documento | 76


TRANSPORTE
ORDENS DE TRANSPORTE
Lista de objetos das ordens/tarefas

Título del documento | 77


TRANSPORTE
ORDENS DE TRANSPORTE
Documentação da ordem de transporte

Título del documento | 78


RELATÓRIOS
PROGRAMAÇÃO DE “REPORTS”

Conceito: Programação estruturada baseada em eventos

Não é apenas destinada a relatórios, podemos construir


programas de atualização de dados com esta técnica.
Podemos acrescentar elementos adicionais (botões, menus,
títulos e telas adicionais)

Tela de seleção Exibição Detalhes de uma linha

Tela 1000

Título del documento | 79


RELATÓRIOS
PROGRAMAÇÃO DE “REPORTS”
Processo geral de programação de relatórios

Nome e Descrição do Programa

Declaração de Variáveis

Montagem da Tela de parâmetros do usuário

Montagem e Impressão do Relatório ou outra lógica

Título del documento | 80


RELATÓRIOS
PROGRAMAÇÃO DE “REPORTS”
Modelo de um programa (template)
Nome do Programa e Descrição (cabeçalho)

No. de linhas e colunas classe de mensagem

Declaração de dados (variáveis, constantes e tabelas internas)

Parâmetros de entrada da tela do usuário

Lógica da tela de seleção

Seleção e Impressão de Dados ou outra lóg. (performs)

Ao comando do usuário (caso haja algum botão)

Cabeçalho e Rodapé

Seção das Sub-rotinas (forms)


Título del documento | 81
RELATÓRIOS
PROGRAMAÇÃO DE “REPORTS”
Descrição do modelo (comandos utilizados)

• Nome do Programa e Descrição (cabeçalho):


Nome do Programa
Data Comentários
Última atualização (padrão cliente)
Descrição
Histórico de Modificações

• Report: No. de Linhas, Colunas e Classe de Mensagem:


No Standard Page Heading
Line-Size
Line-Count
Message - ID

Título del documento | 82


RELATÓRIOS
PROGRAMAÇÃO DE “REPORTS”
Descrição do modelo (comandos utilizados)

• Declaração de Dados:
Include ZZIHEADR
Tabelas
Constantes e Variáveis
Tabelas Internas

• Parâmetros de Entrada:
Select-Option
Parameters
Selection-screen

• Lógica da Tela de Seleção (eventos):


Initialization
At Selection-Screen

Título del documento | 83


RELATÓRIOS
PROGRAMAÇÃO DE “REPORTS”
Descrição do modelo (comandos utilizados)

• Seleção e Impressão de Dados:


Start-of-Selection

• Ao Comando do Usuário:
At User-Command
At Line Selection

• Cabeçalho e Rodapé
Top-of-page
End-of-page

• Seção das Sub-rotinas


Forms Section

Título del documento | 84


RELATÓRIOS
PROGRAMAÇÃO DE “REPORTS”
Programas exemplos

• ZEXEMP_10a - Navegação em telas – drill down


• ZEXEMP_10b – Acrescentando títulos e status.
Respondendo a comandos do usuário.

Título del documento | 85


RELATÓRIOS
EXERCÍCIOS

Exercício 1

Desenvolver um programa ZEXER_REP_01_## que mostre as


conexões (tabela SPFLI) para a seleção do usuário realizada com os
seguintes campos:
• SPFLI-CARRID e SPFLI-CONNID

A primeira tela deve mostrar: ID da empresa, Conexão, Origem e


Destino.

O usuário pode selecionar qualquer linha com conexão, para obter as


datas de vôos para a conexão selecionada (tabela SFLIGHT).
Opcional: na primeira tela, realizar uma quebra a cada companhia
aérea, indicando o total de conexões encontradas.

Dica: dentro do loop utilize “AT END OF carrid.” ... “ENDAT”

Título del documento | 86


RELATÓRIOS
EXERCÍCIOS
Exercício 1

Título del documento | 87


RELATÓRIOS
EXERCÍCIOS
Exercício 2

Desenvolver um programa ZEXER_REP_02_##, relatório de


reservas, que imprima os campos abaixo:
Nome de uma companhia aérea (SCARR-CARRNAME)
Código da conexão de vôo individual (SPFLI-CONNID)
Duração do vôo (SPFLI- FLTIME)
Data do vôo (SFLIGHT-FLDATE)
Preço do vôo (SFLIGHT-PRICE)
Nº de marcação (SBOOK-BOOKID)
Nome do passageiro (SCUSTOM- NAME)
Classe vôo (SBOOK-CLASS)
Nome da agência de viagens (STRAVELAG- NAME)
Data marcação (SBOOK- ORDER_DATE)

A tela de seleção deve conter as chaves das tabelas consultadas.


(companhia aérea deve ser obrigatória)

Título del documento | 88


RELATÓRIOS
EXERCÍCIOS
Exercício 2

Título del documento | 89


PERFORMANCE
EXERCÍCIOS

Exercício 3

Copiar o programa ZEXER_REP_01_## com o nome


ZEXER_REP_03_##.

Acrescentar título (TITLE BAR) e status na primeira tela.


Incluir botões para ordenação da lista, de forma crescente e
decrescente.

Você pode inserir os comandos do status “PRINCIPAL” do


programa exemplo ZEXEMP_10B
(Suplemento Ajustar Modelo)

Título del documento | 90


PERFORMANCE
TÓPICOS

• Pensando em performance
• Acesso ao banco de dados
• Manipulação dos dados
• Caso particular de migrações

Título del documento | 91


PERFORMANCE
REGRAS E EXCEÇÕES

Ao tratarmos de performance em programas estaremos


continuamente tratando de regras e exceções
• Porque tanta exceções: o número de componentes
envolvidos e a contínua mudança trazem uma complexidade
que não deve ser desprezada
• Apenas três regras são absolutas:
Pensar
Pesquisar
Testar

Título del documento | 92


PERFORMANCE
O QUE É PERFORMANCE?

O conceito de performance está diretamente ligado ao conceito


de tempo requerido para realizar determinada tarefa em
determinadas condições.
Mais rápido = mais performático
Indiretamente, uma vez que trabalhamos com recursos
limitados, valores como menor consumo de memória e menor
utilização de processamento também estão associados a melhor
performance, uma vez que é a performance total que nos
interessa, e esta ocorrerá em ambiente com disputa pelos
recursos limitados
Mais econômico = mais performático
Estes dois requisitos podem resultar em decisões conflitantes.
Não é raro desenvolvedores negligenciarem demasiadamente o
segundo requisito.

Título del documento | 93


PERFORMANCE
SEMPRE MELHORAR A PERFORMANCE?

Boa performance é apenas uma das dimensões de


qualidade de um desenvolvimento.
Outras dimensões podem ser conflitantes com a otimização
da performance:
• Manutenabilidade
• Finalidade
• Usabilidade
• Robustez
• Consistência
• Confiabilidade
A solução de compromisso entre estas dimensões
determina o ponto adequado para a otimização da
performance do desenvolvimento.

Levar em conta o uso do desenvolvimento e o ganho real com a


melhoria de performance para o negócio.
Título del documento | 94
ACESSO AO BANCO DE DADOS
HIERARQUIA DE ACESSO

SELECT campos FROM tabela(s) WHERE condições

Título del documento | 95


ARQUITETURA SAP
ARQUITETURA CLIENTE SERVIDOR

O banco é
único Rede e
estações

Comunicação Banco
x Aplicação

Limitação nos
servidores de
aplicação

Título del documento | 96


ACESSO AO BANCO DE DADOS
COMO OCORRE O ACESSO

Quando um programa realiza uma requisição de dado, o


seguinte caminho é seguido (simplificado):

1. O servidor de aplicação determina se o dado está no


buffer local e pode ser lido (tabelas buferizadas).
2. O servidor do banco de dados verifica se a consulta tem
uma estratégia já definida (cache de estratégias SQL).
Realiza a consulta com a estratégia encontrada.
3. O otimizador determina a melhor estratégia de consulta,
levando em conta as estatísticas disponíveis.
4. Caches de dados do banco de dados são considerados
para as consultas.
5. Acesso aos dados em arquivos do banco de dado com a
melhor estratégia (leitura completa ou via índice)

Título del documento | 97


ACESSO AO BANCO DE DADOS
BUFERIZAÇÃO DE TABELAS

Nem todas tabelas permitem buferização.

As regras negócio devem permitir acesso a dados obsoletos


sem impactos ( sincronização da ordem de 1 a 2 minutos ).
Dados que sofrem muitas mudanças ( + 1% dos acessos for de
atualização ) podem degradar a performance do ambiente se as
tabelas forem buferizadas. Tipicamente recomendada para
dados de configuração e para alguns dados mestres.
Diferentes tipos de buferização e regras em que o servidor pula
o bufer e força a leitura no banco devem ser consideradas.

Título del documento | 98


ACESSO AO BANCO DE DADOS
OTIMIZADOR DO BANCO DE DADOS

O otimizador define a estratégia de acesso e guarda esta


estratégia em um cache para utilização futura.
As estratégias consideradas:
Em uma única tabela:
• Leitura completa (full scan)
• Leitura direta por índice (index unique scan)
• Leitura com apoio de índices (index range scan)
Em várias tabelas:
• Seqüência de acesso entre as tabelas (Join)
A escolha é definida pelo custo estimado (quantidade de
acessos e dados transferidos), baseado nas estatísticas
disponíveis.

Título del documento | 99


ACESSO AO BANCO DE DADOS
REDAÇÃO DAS CONSULTAS

A ordem que as tabelas aparecem em uma consulta com "join",


a ordem dos campos consultados e a ordem dos campos na
cláusula "where" não afetam a estratégia do otimizador, que é
preparado para procurar a melhor opção da ordem de consulta.

Porém, expressões iguais permitem evitar o acionamento do


otimizador e ganhar este tempo de análise.

Recomenda-se utilizar a ordem que os elementos aparecem no


banco de dados como padronização das expressões de acesso
ao banco.

A utilização de HINTS também evita a utilização do otimizador,


mas neste caso, podendo fazer uma consulta por uma
estratégia pior. Evite usar, a menos que for necessário.

Título del documento | 100


ACESSO AO BANCO DE DADOS
ÍNDICES

Os índices são tabelas auxiliares, organizadas como um


estrutura "árvore", cujos registros estão ordenados segundo
os campos do índice.

Principais cuidados:
• Não criar índices demasiados para tabelas com muita
atualização, pois os índices degradam estas operações.
• Criar índices disjuntos (campos distintos) e bem seletivos.
• Levar em conta a semântica do campo.
• Campo MANDT não é necessário (foi no passado)

Título del documento | 101


ACESSO AO BANCO DE DADOS
RECOMENDAÇÕES GERAIS

• Diminua os valores possíveis (WHERE)

• Mantenha o custo da pesquisa pequeno. Atenção à


estratégia de acesso: índices podem ter grande impacto
nas leituras, porém degradam as atualizações

• Diminua a quantidade de dados transferida entre o


banco de dados e o servidor de aplicação

• Diminua o número de acessos ao banco de dados

Título del documento | 102


MANIPULAÇÃO DOS DADOS
TABELAS INTERNAS

Enorme mito: sempre é melhor trazer os dados e


manipulá-los internamente no programa

Levar em contra o consumo de memória e o tempo na


manipulação de grandes volumes de dados.
(particularmente se uma seleção menor for possível)

Considerar a otimização dos programas também na


manipulação interna dos dados.

Título del documento | 103


MANIPULAÇÃO DOS DADOS
RECOMENDAÇÕES GERAIS

• Escolha o tipo adequado de tabela interna, utilize


SORTED e HASHED se necessário
• Utilize “binary search” em tabelas standard grandes
• Libere a memória de tabelas internas após o uso
(REFRESH)
• Ordene tabelas internas apenas pelos campos
necessários
• Transfira apenas os campos necessários
• Utilize ponteiros para manipular grandes tabelas
• Evite conversões desnecessárias, indique os valores no
formato das variáveis

Título del documento | 104


PERFORMANCE
PODE SER DEMAIS?

Cuidado com o excesso de otimização!

A análise e otimização de performance é importantíssima e


falhas podem impactar a utilização do sistema, porém sempre
considere as demais dimensões da qualidade

Ganhos de otimização encontram-se na escala de segundos,


minutos e até mesmo horas, para programas longos

Capacidade de manutenção encontra-se na escala de horas,


dias e até mesmo meses

Nosso foco é atender o negócio, não ter apenas os


programas mais performáticos!

Título del documento | 105


PERFORMANCE
MIGRAÇÃO DE DADOS

Tipos de programas de carga

• Direct input
• BAPI
• iDoc Melhor
• Call transaction performance
• Pasta batch input
Estes métodos podem ser utilizados via transação LSMW
ou diretamente a partir de programação

Título del documento | 106


PERFORMANCE
TRANSAÇÕES ANALISADAS

ST05 – Performance analysis


DB05 – Análise de tabelas relativamente a campos
indexados
SAT – Run time analysis (antiga SE30)

Comando GET RUN TIME na análise de performance de


comandos

Título del documento | 107


PERFORMANCE
READ TABLE

READ TABLE <ITAB>


[INTO <WA>]
[WITH KEY <CAMPO> = <VALOR>]
[INDEX n]
[BINARY SEARCH]
[TRANSPORTING NO FIELDS]

Título del documento | 108


PERFORMANCE
EXERCÍCIOS
Exercício 1

Criar o programa ZEXER_PER_01_##

Objetivo: comparar a performance dos comandos READ


TABLE e READ TABLE BINARY SEARCH.

Para a tarefa criar uma tabela interna de números inteiros.


O programa deve preencher esta tabela com n números
inteiros, seqüenciais (1, 2, 3... ), onde n é informado por
parâmetro do usuário.

O programa deve fazer a busca do número m informado


também por parâmetro, utilizando as duas opções de busca.

Comparar os tempos obtidos utilizando o comando


GET RUN TIME FIELD

Título del documento | 109


BDC SESSION
CONCEITOS INICIAIS

• O que são sessões BDC


Batch Data Communication
Uso da transação SM35
Uso da transação SHDB

• Relação com Call transaction

Título del documento | 110


BDC SESSION
TABELA BDC
A tabela BDC é uma tabela interna com estrutura BDCDATA.

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
)

Esta tabela deve ser enviada para a Sessão Batch Input ou a


instrução call transaction

 Como obter as informações nas telas SAP

Título del documento | 111


BDC SESSION
PREENCHENDO A TABELA BDC

REPORT zxxxxxxx.

DATA: BEGIN OF tbdc OCCURS 100.
        INCLUDE STRUCTURE bdcdata.
DATA: END OF tbdc.

* Início do programa principal

MOVE ‘sapmf02k’    TO tbdc-program.
MOVE ‘0100’        TO tbdc-dynpro.
MOVE ‘x’           TO tbdc-dynbegin.
APPEND tbdc.

MOVE ‘rf02k-lifnr’ TO tbdc-fnam.
MOVE ‘0010010’     TO tbdc-fval.
APPEND tbdc.

MOVE ‘rf02k-ekorg’ TO tbdc-fnam.
MOVE ‘cntl’        TO tbdc-fval.
APPEND tbdc.

Título del documento | 112


BDC SESSION
TRANSAÇÃO SHDB

Título del documento | 113


BDC SESSION
TRANSAÇÃO SHDB

Título del documento | 114


BDC SESSION
TRANSAÇÃO SHDB

Título del documento | 115


BDC SESSION
TRANSAÇÃO SHDB

Título del documento | 116


BDC SESSION
UTILIZANDO A TABELA BDC

Processando como pasta batch input


Uso da transação SM35

Funções para criação da pasta:


BDC_OPEN_GROUP
Abre a sessão de BDC e necessita ser chamada antes de qualquer
processamento.

BDC_INSERT
Chamada para cada transação no processamento Batch.

BDC_CLOSE_GROUP
Chamada após todo processamento para que a pasta de
processamento Batch seja criada.

Título del documento | 117


BDC SESSION
CRIANDO A PASTA BATCH INPUT

Função BDC_OPEN_GROUP

Os seguintes parâmetros são passados para a função:

CLIENT - Mandante 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 - Mantém a pasta de Batch Input após o processamento
USER - Nome de usuário que executará o Batch Input.

Título del documento | 118


BDC SESSION
CRIANDO A PASTA BATCH INPUT

Função BDC_INSERT

Os seguintes parâmetros são passados para a função:

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 (tabela BDC)

Função BDC_CLOSE_GROUP

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


• Pasta é criada

Título del documento | 119


BDC SESSION
SM35

Título del documento | 120


BDC SESSION
UTILIZANDO A TABELA BDC
Instrução CALL TRANSACTION

CALL TRANSACTION <trans> [USING <bdctab> MODE


<mode> MESSAGE <t_msg>].

Onde: <bdctab> - TYPE TABLE OF bdcdata


<t_msg> - TYPE TABLE OF bdcmsgcoll

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
P Em background e depurável (break-point)

Além do SY-SUBRC, na tabela t_msg teremos todas as


mensagens de retorno da transação (sucesso, alertas e erros)
Título del documento | 121
BDC SESSION
EXERCÍCIO
Exercício

Criar um programa ZEXER_BATCH_## que recebe um arquivo


de entrada com uma única coluna de valores. O programa deve
ler o arquivo e executar a transação FB01 para cada linha.
Imprimir as mensagens de retorno da transação na tela.

BLDAT = sy-datum no formato dd.mm.aaaa


BUDAT = sy-datum no formato dd.mm.aaaa
WRBTR = valor do arquivo
ZFBDT = sy-datum no formato dd.mm.aaaa
VALUT = sy-datum no formato dd.mm.aaaa

Demais campos passar valor do SHDB entre aspas simples

Título del documento | 122


BDC SESSION
EXERCÍCIO
Exercício – SHDB FB01 (EXER_BATCH)
SAPMF05A 0100 X
                            BDC_CURSOR RF05A-NEWKO
                            BDC_OKCODE /00
                            BKPF-BLDAT 05.04.2013
                            BKPF-BLART AB
                            BKPF-BUKRS 0005
                            BKPF-BUDAT 05.04.2013
                            BKPF-WAERS EUR
                            FS006-DOCID*
                            RF05A-NEWBS31
                            RF05A-NEWKO100
                            BDC_SUBSCR SAPMF05A                                1300APPL_SUB_T
                            BDC_SUBSCR SAPLSEXM                                0200APPL_SUB
SAPMF05A 0302 X
                            BDC_CURSOR RF05A-NEWKO
                            BDC_OKCODE /00
                            BSEG-WRBTR 100
                            BSEG-MWSKZ V1
                            BSEG-ZFBDT 05.04.2013
                            RF05A-NEWBS40
                            RF05A-NEWKO10900050
SAPMF05A 0300 X
                            BDC_CURSOR BSEG-WRBTR
                            BDC_OKCODE =BU
                            BSEG-WRBTR 100
                            BSEG-MWSKZ V1
                            BSEG-VALUT 05.04.2013
                            BDC_SUBSCR SAPLKACB                                0001BLOCK
                            DKACB-FMOREX
SAPLKACB 0002 X
                            BDC_CURSOR COBL-GSBER
                            BDC_OKCODE =ENTE
                            BDC_SUBSCR SAPLKACB                                9999BLOCK1

Título del documento | 123


ON LINE
PROGRAMAÇÃO ON LINE

Online ou Dialog programming: processamento de telas, que alterna


com o processamento de uma listagem.
O processamento é transferido entre estes dois processadores
alternadamente.

Título del documento | 124


ON LINE
PROGRAMAÇÃO ON LINE

Tela

PBO – Process Before Output

Exibição (campos)

PAI – Process After Input

A execução de cada tela é dividida em dois eventos:


• PBO – execução antes da exibição
• PAI – execução após a exibição

Título del documento | 125


ON LINE
PROGRAMAÇÃO ON LINE
Módulos PBO
Screen 1 tela 1

Módulos PAI tela


1

GUI-01

Módulos PBO
Programa
Principal Screen 2 tela 2

Módulos PAI tela


2

GUI-02

Módulos PBO
Screen 3 tela 3

Módulos PAI tela


3 Título del documento | 126
ON LINE
PROGRAMAÇÃO ON LINE
Estrutura de um programa

Programa principal
Include TOP

Include Módulos PBO

Include Módulos PAI


Include Subrotinas (Forms)

A estruturação de programas on line em includes não é


obrigatória, porém facilita a organização do código e é
incentivada pelo editor.

Título del documento | 127


ON LINE
PROGRAMAÇÃO ON LINE
Processo geral de programação on line

Nome e Descrição do Programa e TOP


declaração das variáveis

Definição das telas e campos


Telas

Definição dos módulos PBO e PAI Módulos

Programação da lógica (encapsulada em subrotinas) Forms

Título del documento | 128


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 129


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 130


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 131


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 132


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 133


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 134


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 135


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 136


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 137


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 138


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 139


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 140


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 141


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 142


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 143


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 144


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 145


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 146


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 147


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 148


ON LINE
PROGRAMAÇÃO ON LINE
Exemplo de Programa Online

Título del documento | 149


ON LINE
EXERCÍCIO 1

Criar o programa online ZEXER_ON_01_## para dar


manutenção na tabela criada no módulo de dicionário de
dados ZTBL_##.
Opções de criar, exibir e alterar dados.
Registro não deve existir para ser criado, e registro deve
existir para alterar ou exibir.
Na exibição, deixar os campos fechados utilizando o
comando abaixo:

LOOP AT SCREEN.
IF screen-group1 = 'G1'.
CLEAR screen-input.
MODIFY SCREEN.
ENDIF.
ENDLOOP.

Título del documento | 150


ON LINE
EXERCÍCIO 1

Título del documento | 151


ON LINE
EXERCÍCIO 2

Criar um programa online para simular uma calculadora no


SAP, com o nome ZEXER_ON_02##.

Título del documento | 152


ON LINE
USO DE TABLESTRIP

Para incluir o tablestrip na tela, utilizar o assistente.

Título del documento | 153


ON LINE
USO DE TABLESTRIP

Título del documento | 154


ON LINE
USO DE TABLESTRIP

Título del documento | 155


ON LINE
USO DE TABLESTRIP

Título del documento | 156


ON LINE
USO DE TABLESTRIP

Título del documento | 157


ON LINE
USO DE TABLESTRIP

Título del documento | 158


ON LINE
USO DE TABLESTRIP

Título del documento | 159


ON LINE
USO DE TABLESTRIP

Título del documento | 160


ON LINE
USO DE TABLESTRIP

Título del documento | 161


ON LINE
TABLE CONTROL

Table control é um componente que permite a exibição e


manipulação de dados de tabelas internas de forma muito
amigável pelo usuário, com exibição semelhante a uma
planilha.
A visualização é realizada em várias linhas simultaneamente
e, quando corretamente codificado, pode contar com
paginação e seleção das linhas para posterior ação.

As table controls são declaradas como controles nos


programas e seus dados associados a tabelas internas do
programa.

Considere utilizar o assistente para a criação de table


controls.

Título del documento | 162


ON LINE
TABLE CONTROL

Título del documento | 163


ON LINE
TABLE CONTROL

Título del documento | 164


ON LINE
TABLE CONTROL

Título del documento | 165


ON LINE
TABLE CONTROL

Título del documento | 166


ON LINE
TABLE CONTROL

Título del documento | 167


ON LINE
TABLE CONTROL

Título del documento | 168


ON LINE
TABLE CONTROL

Título del documento | 169


ON LINE
TABLE CONTROL

Título del documento | 170


ON LINE
TABLE CONTROL

Título del documento | 171


ON LINE
TABLE CONTROL

Título del documento | 172


ON LINE
EXERCÍCIO 3

Criar o report ZEXER_ON_03_##, com um parâmetro


obrigatório com o código da empresa aérea (CARRID) e um
intervalo de valores, não obrigatório da data do vôo (SFLIGHT-
FLDATE).
A primeira tela de resultados deve mostrar os seguintes
valores:
• SCARR-CARRID - Denominação breve
• SCARR-CARRNAME – Nome da companhia

Em uma tabela:
• SPFLI-CONNID – Conexão
• CITYFROM – Origem
• CITYTO – Destino
• Total de vôos no intervalo de datas (pode ser zero)

Título del documento | 173


ON LINE
EXERCÍCIO 3
O usuário apenas poderá selecionar linhas com quantidade de
vôos maior que zero, caso em que uma segunda tela de
detalhes mostra a lista dos vôos disponíveis para a conexão
selecionada, com os seguintes campos:
• SPFLI-CARRID – Denominação breve
• SPFLI-CONNID – Conexão

Em uma tabela:
• SFLIGHT-FLDATE
• SFLIGHT-PRICE
• SFLIGHT-CURRENCY

Nota: o programa deve mostrar mensagem de erro se a


empresa indicada não tem conexões cadastradas, deixando o
campo aberto para outra empresa.

Título del documento | 174


SAPSCRIPT
FORMULÁRIOS SAPSCRIPT
Conceitos iniciais

O Sapscript é a forma original de criar formulários com precisão


dentro do SAP. Os formulários são gravados em separado em
repositório acessível pela transação SE71.

Os formulários Sapscript são utilizados em vários pontos do SAP,


gerados por programas. Estes programas recebem o nome de
“programa de povoamento”.

Lógica de negócio Programa de povoamento


(abap)

Dados

Formatação
Formulário Sapscript

Título del documento | 175


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Programa ABAP

Um programa de povoamento deve seguir a seguinte estrutura:

• Abertura de um formulário
• Inicialização de um formulário
• Seleção dos dados do formulário
• Impressão dos dados nas janelas do formulário
• Finalização do formulário
• Fechamento do formulário

Título del documento | 176


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Abertura de formulário

call function 'OPEN_FORM'                
     exporting                           
DEVICE = 'PRINTER'
*         DIALOG             = 'X'       
FORM = (Nome do Formulário)
LANGUAGE = (Idioma do Formulário)
OPTIONS            = ITCPO       
     exceptions         
          canceled           = 1          
          device             = 2         
          form               = 3         
          options            = 4         
          unclosed           = 5         
          others             = 6.

A estrutura ITCPO define parâmetros de impressão: nº cópias,


Impressora, saída imediata, etc.

Título del documento | 177


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Inicialização de formulário

call function 'START_FORM'    
     exporting                
          FORM          = ' ' 
          LANGUAGE      = ' ' 
     exceptions               
          form          = 1   
          format        = 2   
          unended       = 3   
          unopened      = 4   
          unused        = 5   
          others        = 6.

Não é obrigatório para o primeiro formulário, pois o comando


de abertura inicializa automaticamente. Necessário quando
utilizamos mais de um formulário (a partir do segundo)

Título del documento | 178


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Impressão dos dados
Os dados são enviados em estruturas

call function 'WRITE_FORM'       
     exporting                   
          ELEMENT       = ' '    
          WINDOW        = 'MAIN' 
     exceptions                  
          element       = 1      
          function      = 2      
          type          = 3      
          unopened      = 4      
          unstarted     = 5      
          window        = 6      
          others        = 7.

A janela MAIN tem comportamento diferente das demais janelas.

Título del documento | 179


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Finalização de formulário
Finaliza os formulários inicializados

CALL FUNCTION 'END_FORM'.
*    IMPORTING
*         RESULT                   =
*    EXCEPTIONS
*         UNOPENED  = 1
* BAD_PAGEFORMAT_FOR_PRINT = 2
*         OTHERS                   = 3

Título del documento | 180


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Fechando o formulário
Fecha os formulários abertos

CALL FUNCTION 'CLOSE_FORM'.
*    IMPORTING
*         RESULT                   =
*         RDI_RESULT               =
*    TABLES
*         OTFDATA                  =
*    EXCEPTIONS
*         UNOPENED                 = 1
*         BAD_PAGEFORMAT_FOR_PRINT = 2
*         SEND_ERROR               = 3
*         OTHERS                   = 4

Título del documento | 181


SAPSCRIPT
FORMULÁRIO

Transação SE71

• Criar novos formulários (definir o idioma do formulário)

• Copiar de outros formulários no mandante, com ou sem


mudança de idioma

• Traduzir formulários

• Copiar de outros mandantes

A SAP disponibiliza muitos formulários para serem copiados e


alterados (p.ex.: cartas, comunicados, boletos, cheques)

Título del documento | 182


SAPSCRIPT
FORMULÁRIO
Tipos de janelas
Janelas MAIN

Janela principal e a única obrigatória.


Podemos ter mais de uma janela MAIN
Preenchimento seqüencial das janelas
(forçado com /: NEXT-WINDOW)

Título del documento | 183


SAPSCRIPT
FORMULÁRIO
Tipos de janelas

Janelas VAR
Dados podem mudar, durante o preenchimento do formulário

Janelas CONST
Dados permanecem constantes após o primeiro preenchimento.

Título del documento | 184


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 185


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 186


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 187


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 188


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 189


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 190


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Utilização: similar a HTML: <B>Texto</>


Título del documento | 191
SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 192


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 193


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 194


SAPSCRIPT
FORMULÁRIO
Comandos dentro do formulário
Os comandos são indicados por /:

IF..ELSE..ENDIF
CASE..WHEN
DEFINE
PERFORM..USING..CHANGING
BOX..FRAME
INCLUDE

Exemplo:
/: INCLUDE name OBJECT object ID id LANGUAGE spras

Título del documento | 195


SAPSCRIPT
FORMULÁRIO
Tabuladores

Definidos nos parágrafos, com posicionamento em


caracteres(CH), centímetros (CM) ou milímetros (MM)

IL Linha de item
Atributos standard
Espacej.linhas 1.00 LN
Alinhamento Alinh.esq.
Tabuladores
6.00 CH Alinh.à esquerda
25.00 CH Alinh.à esquerda
54.00 CH Alinh.à esquerda
73.00 CH Alinh.à esquerda

Uso:
IL &EKPO-EBELP&,,&EKPO-EMATN&,,&EKPO-TXZ01&

Título del documento | 196


SAPSCRIPT
PROGRAMA DE POVOAMENTO
Exemplo SAPSCRIPT – SE71

Título del documento | 197


SAPSCRIPT
EXERCÍCIO

Criar programa de povoamento ZEXERC_SS_## com


parâmetro de entrada CARRID e um formulário Sapscript
ZEXERSS_## para imprimir os vôos (SFLIGHT) para a
companhia selecionada.
Exemplo de saída:

DADOS DE VÔO DA COMPANHIA LH
_______________________________

Relatório de Vôos

Companhia Vôo Data


LH 0400 28.02.1995
LH 0454 17.11.1995
LH 9981 21.12.2002

Título del documento | 198


SMARTFORMS
O QUE É?

• ‘Nova’ tecnologia para substituir o Recuperar o nome


Sapscript dinamicamente

• Transação SMARTFORMS Função do formulário

• Impressão através de função gerada Dados

• A função contém todo o


Formulário Smartform
processamento do formulário

• O nome da função é gerado


dinamicamente por ambiente

• Existe outra função para encontrar o


nome função do formulário no
ambiente

Título del documento | 199


SMARTFORMS
BENEFÍCIOS

• Ambiente gráfico para desenvolvimento

• Maior flexibilidade no desenvolvimento e manutenção

• O programa de impressão, basicamente, só seleciona os


dados

• Alterações no layout do formulário não requerem alterar o


programa, exceto nos casos em que se altere a quantidade
ou tipo de dados

• É independente de mandante.

Título del documento | 200


SMARTFORMS
SAP SMARTFORMS – 1ª TELA

Na transação SMARTFORMS é possível criar:

Formulário: é a interface de saída dos dados, onde é


criado o layout do formulário.

Estilo: é um conjunto de parágrafos e formatos de


caracteres que serão associados ao formulário.

Módulo de texto: serve para se armazenar textos padrões


que podem ser utilizados em mais de um formulário.

Título del documento | 201


SMARTFORMS
SMARTFORM BUILDER

Menu de Quadro de Form


navegação Manutenção Painter

Título del documento | 202


SMARTFORMS
SMARTFORM BUILDER

Menu de navegação: Exibe os nós contidos no formulário, e


permite incluir novos nós, alterar posição no formulário,
eliminar, etc.

Quadro de manutenção: Exibe as propriedades do nó


selecionado no menu de navegação.

Form Painter: Exibe e permite manipular as janelas e alguns


outros objetos(nós) do formulário em formato gráfico.

Título del documento | 203


SMARTFORMS
FUNÇÕES DE EXECUÇÃO

Função para obter o nome da função do formulário:

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
    EXPORTING
      FORMNAME           = 'ZEXEMPLO_00'
    IMPORTING
      FM_NAME            = V_SMART
    EXCEPTIONS
      NO_FORM            = 1
      NO_FUNCTION_MODULE = 2
      OTHERS             = 3. 

Título del documento | 204


SMARTFORMS
FUNÇÕES DE EXECUÇÃO

Função do formulário. Onde V_SMART indica o nome da


função do formulário (chamada dinâmica).

 CALL FUNCTION V_SMART
    TABLES
      T_SPFLI                    = T_SPFLI
      T_SFLIGHT                  = T_SFLIGHT
      T_SCARR                    = T_SCARR
      T_SAPLANE                  = T_SAPLANE
   EXCEPTIONS
     FORMATTING_ERROR           = 1
     INTERNAL_ERROR             = 2
     SEND_ERROR                 = 3
     USER_CANCELED              = 4
     OTHERS                     = 5. 

Título del documento | 205


SMARTFORMS
EXEMPLO

Título del documento | 206


SMARTFORMS
EXEMPLO

Título del documento | 207


SMARTFORMS
EXEMPLO

Título del documento | 208


SMARTFORMS
EXEMPLO

Título del documento | 209


SMARTFORMS
EXEMPLO

Título del documento | 210


SMARTFORMS
EXEMPLO

Título del documento | 211


SMARTFORMS
EXEMPLO

Título del documento | 212


SMARTFORMS
EXEMPLO

Título del documento | 213


SMARTFORMS
EXEMPLO

Título del documento | 214


SMARTFORMS
EXEMPLO

Opções de saída: definir linha e coluna

Título del documento | 215


SMARTFORMS
EXEMPLO

Título del documento | 216


SMARTFORMS
EXEMPLO

Título del documento | 217


SMARTFORMS
EXEMPLO

Título del documento | 218


SMARTFORMS
EXEMPLO

Título del documento | 219


SMARTFORMS
EXEMPLO

Título del documento | 220


SMARTFORMS
EXEMPLO

Título del documento | 221


SMARTFORMS
EXEMPLO

Título del documento | 222


SMARTFORMS
EXEMPLO

Título del documento | 223


SMARTFORMS
ATIVIDADE
Desenvolver um programa que selecione a companhia aérea e
exiba os vôos e datas desta companhia num Smartform.
(mesmo layout do Sapscript criado)

Opcional: incluir imagem no cabeçalho conforme exemplo abaixo

Título del documento | 224

Você também pode gostar