ABAP 01 Libre

61
Int rodução aos Conceit os de Desenvolviment o e Cust omização de Relatórios

description

ABAP

Transcript of ABAP 01 Libre

  • Introduo aos Conceitos de Desenvolvimento e Customizao

    de Relatrios

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Introduo .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Composio.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Como entender a apost ila... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    Conhecimentos Bsicos sobre a Plataforma de Desenvolvimento ABAP ..... . . . . . . . . . . .7 Caracterst icas Principais ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    O Repositrio do R/3.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 O que o Repositrio ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Classes de desenvolvimento .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    O Dicionrio de Dados.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Definies bsicas.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 As caracterst icas tcnicas das tabelas do R/ 3 .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Verif icaes de chave externa (foreign keys) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Processos de aj uste e converso de tabelas .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Vises no R/ 3.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    Al, Mundo! .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Criando seu primeiro programa ABAP/ 4 .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    Bibliotecas de Funes.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 O que so as funes no R/ 3.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 RFC..... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Funct ion Groups .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    Os Criadores de Menus e Telas .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Criando menus .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Criando Telas.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    Criando Tabelas Internas e Estruturas Complexas de Armazenagem Temporria.. 28 Tabela interna .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Tipos de tabelas internas.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Ext racts ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    O Open SQL.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Comandos.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Campos de sistema.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    Pgina 2 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Trabalhando com os Mandantes.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 SELECT .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 INSERT.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 UPDATE..... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 MODIFY.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 DELETE .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 OPEN CURSOR, FETCH, CLOSE CURSOR ..... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    Criao de Listas Bsicas.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 O comando WRITE.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Criando uma lista simples.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Cabealhos e rodaps.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Mudando a apresentao dos campos.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Modif icando o formato de exibio standard .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Posicionando os campos.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Especif icando unidades de medida e moedas.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Smbolos de Texto .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    O SAP Query .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Grupos de usurios e reas funcionais ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    Definindo telas de seleo de parmetros.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Diferena ent re o comando PARAMETERS e o comando SELECT-OPTIONS.... . . . . . . . . . 45 Agrupando parmet ros em bordas e melhorando o layout ... . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Modif icando o programa para usar bordas.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Janelas adicionais de parmet ros.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

    Criao de Listas Complexas.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 O Evento AT LINE-SELECTION..... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 HIDE.... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Listas em mais de dois nveis... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 AT USER-COMMAND..... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Abrindo Telas Dent ro de Relatrios .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Chamando t ransaes a part ir de listagens .... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    Pgina 3 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Copyright 2005 I-PROVIDER. Todos os direitos reservados.

    Este material de propriedade intelectual da I-PROVIDER, sendo terminantemente proibida sua reproduo, total ou parcial, por qualquer forma, sem autorizao prvia e expressa..

    R/ 3, ABAP, SAP, SAPScript , o logot ipo SAP e todos os out ros servios e marcas da SAP so marcas regist radas da SAP AG.

    Pgina 4 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Introduo

    Composio

    Este material tem como objetivo principal apresentar o ambiente de programao ABAP aos profissionais que no desenvolvero programas diretamente, mas necessitam conhecer a ferramenta para embasar seu trabalho.

    Para o aprendizado mais especfico desta ferramenta, aconselha-se a preparao em programas de treinamentos oficiais, junto a SAP Brasil.

    Como entender a apostila

    Este material foi desenvolvido com base nas operaes do sistema SAP R/3, sendo em alguns casos exemplificados com as prprias telas de utilizao do sistema.

    Todos os captulos desta apostila foram estruturados nos conceitos tcnicos do ABAP, compositores dos elementos da linguagem de programao do SAP R/3, e possuem suas definies e exemplos similares aos previstos em material tcnico da prpria SAP.

    Os exerccios de fixao do contexto tcnico sero aplicados conforme acompanhamento de profissional capacitado, e sero atribudos ao sistema, de acordo com a programao dos temas que sero discutidos em workshop.

    Pgina 5 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Contedo Programtico

    Conhecimentos bsicos sobre a plataforma de desenvolvimento ABAP; Trabalhando com o Repositrio de Programas; Conhecendo os elementos do Dicionrio de dados ABAP; Biblioteca de Funes; Criador de Menus e Telas; Classes de Desenvolvimento e tipos de programas; Desenvolvimento de relatrios e consultas; Definio de elementos de texto; Criando tabelas internas e estruturas complexas de armazenagem temporria; Definindo telas de seleo de parmetros; Chamadas de telas de seleo em consultas complexas; Criao de listas bsicas; Criao de listas complexas com recurso de drill down; Criao de consulta interativa com funes adicionais; Carregando telas em relatrios; Conhecimentos de comandos ABAP Open-SQL; Atribuindo funes extras aos relatrios e consultas; Chamando transaes a partir de listagens.

    Carga Horria : 28 horas

    Pgina 6 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Conhecimentos Bsicos sobre a Plataforma de Desenvolvimento ABAP

    Programa ABAP Camada de Aplicao

    Camada de Apresentao (Front-end)

    Servidor de Banco de Dados

    Caractersticas Principais

    O R/3 usa o modelo cliente-servidor de trs camadas, com a primeira camada composta pelo servidor de banco de dados, uma outra camada de aplicao, onde so executadas as regras de negcio, e uma camada de apresentao, onde os usurios rodam o programa de front-end responsvel pela interface do usurio com o sistema.

    O ABAP a linguagem de programao nativa do SAP R/3, e uma linguagem interpretada de alto nvel. Dentro do servidor de aplicao do R/3, todos os programas responsveis pelas regras de negcio so programas ABAP que fazem uso de bibliotecas escritas, em sua maioria, em linguagem C (kernel do R/3).

    Os programas ABAP ficam armazenados no banco de dados, sendo que o R/3 gera, na primeira execuo de cada programa ou em bloco, um cdigo intermdirio pseudo-compilado, especfico para cada combinao de sistema operacional + verso do R/3. At mesmo alguns nveis de atualizao de kernel tornam incompatvel o cdigo previamente gerado, havendo necessidade de recompilar os programas ABAP.

    Todo o desenvolvimento dos programas ABAP pode ser realizado usando ferramentas disponibilizadas pelas transaes apropriadas dentro do prprio R/3, dispensando o uso de ferramentas externas. Essas transaes sero detalhadas durante o curso.

    Pgina 7 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    O Repositrio do R/3

    O que o Repositrio

    O Repositrio do R/3 a coleo de todos os programas ABAP, classes, interfaces, grupos de funo e objetos do Dicionrio de Dados presentes num sistema R/3, quer sejam objetos originais da SAP, quer sejam objetos criados pelo cliente.

    Os programas e outros objetos do repositrio criados pelo cliente devem estar no namespace de cliente, ou seja, seus nomes devem comear com as letras Z ou Y (com exceo dos campos em append structures, que devem comear por ZZ ou YY). Os clientes s devem alterar objetos com nomes fora dessa especificao quando expressamente orientados pela SAP a faz-lo (por exemplo, para aplicar notas de correo). A SAP garante que os programas desenvolvidos pelos clientes que observarem as especificaes de namespace no sero afetados quando houver uma atualizao do sistema, como uma aplicao de Support Package. No entanto, caso seja alterado um programa standard da SAP, no h garantias de que o programa alterado permanecer como tal aps qualquer modificao no sistema. Para agregar funcionalidades a programas da SAP, existe o recurso das User Exits, que ser tratado posteriormente, na terceira semana do workshop.

    Classes de desenvolvimento

    Pgina 8 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    O Repositrio est separado pelos mdulos funcionais, e os objetos nele contidos esto separados logicamente em classes de desenvolvimento. As classes de desenvolvimento so agrupamentos de objetos do repositrio que esto relacionados entre si. Todo objeto do repositrio deve pertencer a uma classe de desenvolvimento e toda classe de desenvolvimento deve ter definido um transport layer, que uma definio de Basis que define qual a rota de transporte (para quais sistemas o objeto pode ser transportado numa change request, ou se no pode ser transportado, caso seja um layer local).

    Para encontrar os objetos no Repositrio do R/3, existe o Sistema de Informao do

    Repositrio (transao SE84), que uma coleo de relatrios que permitem procurar por um determinado objeto e navegar pelas definies do Repositrio.

    Pgina 9 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    O Dicionrio de Dados

    Definies bsicas

    O dicionrio ABAP permite a administrao central de todas as definies de dados do R/3, permitindo a criao de tipos de dados definidos pelo usurio para uso posterior, alm de vrios itens auxiliares ao desenvolvimento de programas (p.ex. search helps).

    Podem ser definidas tabelas e vises dentro do dicionrio. O R/3 se encarrega, durante a ativao desses elementos, de cri-los no banco de dados. O dicionrio permite, ainda, a criao de ndices, que agilizam as buscas. A definio de ndices apropriados de suma importncia para o bom desempenho do sistema. Cabe lembrar que uma busca sem ndice realizada em uma tabela extensa pode ter pesado custo em termos de performance.

    As definies de tipos de dados dentro do R/3 incluem os elementos de dados, que definem um tipo elementar descrevendo o tipo bsico de dados, o comprimento e, eventualmente, as casas decimais; as estruturas, que podem receber elementos de vrios tipos (semelhante representao de um registro numa tabela); e os table types, que seriam campos em formato de tabela. Por exemplo, uma estrutura do registro de uma estrutura de usurio que tivesse um campo para nmeros de telefone poderia usar um table type e permitir colocar vrios nmeros num mesmo campo.

    Pgina 10 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Alm dessas definies, o dicionrio ABAP permite criar os search helps, que so tabelas de busca auxiliares aos campos de tela so as buscas e tabelas que aparecem quando se tecla F4 dentro de um campo em qualquer tela do R/3. Criando documentao para o elemento de dados dentro do dicionrio, automaticamente est disponvel a ajuda do campo, que pode ser invocada usando-se a tecla F1 dentro dos campos de tela. Pode-se, ainda, definir verificaes de entrada automaticamente, bastando definir uma relao de foreign key.

    No dicionrio tambm so criados os objetos de lock, que permitem definir o travamento de dados dentro do R/3. Por exemplo, podem-se definir objetos de lock para impedir que dois usurios editem a mesma informao ao mesmo tempo no sistema.

    O dicionrio integrado s ferramentas de desenvolvimento e execuo do R/3, permitindo o acesso das ferramentas s definies nele contidas. Por exemplo, possvel navegar de um programa que esteja sendo criado no editor ABAP para definies de campos, elementos e tabelas usadas no programa.

    Definio de tabelas

    Uma tabela consiste de colunas (campos) e linhas (registros). Cada tabela possui um nome e atributos, como por exemplo a classe de desenvolvimento e a autorizao para manuteno. Cada campo deve ter um nome nico dentro da tabela, e pode fazer parte de uma chave. Cada tabela deve ter uma chave primria, que composta por campos cujos valores identificam unicamente os registros de uma tabela. As tabelas definidas no dicionrio de dados do R/3 so criadas no banco de dados assim que ativadas.

    Pgina 11 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Durante a ativao, a descrio da tabela dentro do dicionrio traduzida para a definio de tabela correspondente na linguagem do banco de dados que estiver sendo usado. A ordem dos campos no banco de dados no precisa seguir a ordem estabelecida no dicionrio de dados (com exceo dos campos de chave primria), o que permite a extenso das tabelas standard do R/3 atravs e append structures, que so definies de campos adicionais definveis pelo usurio sem haver a necessidade de alterao da definio normal da tabela standard. Os includes so estruturas definidas separadamente que podem ser inseridas em outras tabelas.

    O conceito de domnio de dois nveis

    Basicamente, as tabelas dentro do R/3 so compostas de campos, cada um usando um determinado elemento de dados, que por sua vez usam domnios. O domnio define o tipo bsico de dados, seu comprimento e o intervalo de valores permitido; o elemento de dados descreve o significado de um domnio dentro de um determinado cenrio. Por exemplo, um campo de cdigo de aeroporto de destino deve estar ligado a um elemento de dados aeroporto de destino, que por sua vez usa um domnio cdigo de aeroporto, que est definido como trs posies de caractere, apenas com letras.

    Pgina 12 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    As caractersticas tcnicas das tabelas do R/3

    Quando uma tabela definida no dicionrio de dados do R/3, devem ser definidas as caractersticas tcnicas (technical settings) para a tabela. Essas caractersticas so usadas para otimizar o acesso e a armazenagem da tabela individualmente.

    As caractersticas tcnicas podem ser usadas para definir como a tabela deve ser manipulada quando for criada no banco de dados, se ela deve ser includa em buffer e de que forma, e se as mudanas nela realizadas devem ser registradas em log.

    Para definir a armazenagem da tabela, deve-se indicar uma classe de dados. Essa classe de dados determina de que forma o banco de dados deve armazen-la. As classes principais so master

    Pgina 13 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    data, transaction data, organizational data e system data. Os dados mestres devem ser classificados como master data, os dados transacionais como transaction data, a configurao funcional como organizational data e os dados de sistema como system data. Geralmente, dentro de um projeto, so criadas tabelas dos tipos master e transaction somente. De posse dessa informao, o R/3 separa as tabelas em diferentes arquivos do banco de dados de forma a otimizar a performance.

    A categoria de tamanho das tabelas permite ao R/3 alocar espao no banco de dados de acordo com o tamanho projetado para a tabela, de modo a evitar fragmentao dos dados.

    Pode-se definir que uma determinada tabela ser armazenada em buffer de memria. Com isso, o acesso tabela otimizado, mas deve-se usar de bom senso para colocar tabelas em buffer. Por exemplo, tabelas candidatas a entrar no buffer so dados mestres com muita utilizao e raramente atualizadas. Tabelas de dados transacionais no devem ser colocadas em buffer, pois cada registro dentro delas menos frequentemente acessado que nas tabelas de dados mestres, e esto sujeitos a atualizaes. A atualizao de uma tabela que esteja no buffer provoca seu re-carregamento com consequente impacto no desempenho dos programas.

    O buffer pode ser definido nos modos full, no qual a tabela inteira colocada no buffer, single-record, onde apenas os registros eventualmente acessados so colocados no buffer, e generic, no qual so colocados no buffer registros que tenham determinados valores na chave. Os dados no so automaticamente colocados no buffer assim que o sistema entra no ar; isso s acontecer no primeiro acesso a um registro que esteja em um intervalo de buffer.

    Caso seja necessrio, pode-se definir o registro em log das alteraes feitas numa tabela. Porm, deve-se ter em mente que isso pode criar um impacto na performance do sistema.

    Pgina 14 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Verificaes de chave externa (foreign keys) As foreign keys so campos, dentro de uma determinada tabela, que fazem referncia aos

    campos da chave de uma outra tabela e devem apenas apresentar valores que existam na tabela referenciada. Por exemplo, numa tabela contendo os dados de um pedido, um campo de cliente deve referenciar um cliente existente ou, automaticamente, quando se tentar colocar um pedido com um cliente que no exista, ocorrer um erro. As relaes de chave externa so definidas na transao de manuteno de tabelas do dicionrio.

    Pgina 15 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Processos de ajuste e converso de tabelas Deve-se assegurar que os objetos no dicionrio de dados estejam sincronizadas com suas

    implementaes no banco de dados. Ao ser feita uma modificao na tabela, como por exemplo a incluso de um registro, as mudanas feitas no dicionrio devem ser refletidas pelo R/3 no banco de dados, quer seja atravs da alterao de estrutura (via comandoALTER TABLE do banco), ou deletando e recriando a tabela o que acarreta perda de dados, ou atravs do ajuste do banco, que um processo trabalhoso. Qualquer uma dessas formas pode ser escolhida pelo usurio; para alguns tipos de modificao, apenas a alterao da estrutura no bastar, sendo necessria a deleo ou ajuste da tabela.

    Caso os dados na tabela no possam ser perdidos, deve-se fazer o ajuste da mesma, no qual a tabela original renomeada, criada uma nova tabela com o nome original, e nessa tabela so copiados os registros da tabela original. Dependendo da quantidade de dados na tabela, o ajuste pode ter um tempo de execuo considervel. Alguns problemas podem surgir durante a converso quando, por exemplo, algum arquivo do banco de dados for totalmente preenchido, ou os tipos de campos forem alterados de modo a no poderem mais ser movidos via MOVE-CORRESPONDING, que o comando usado para fazer a movimentao dos dados da tabela

    Pgina 16 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    original para a nova tabela. Porm, o grande problema na converso ocorre quando a chave reduzida de tamanho. Corre-se o risco de, considerada a nova chave, registros que no incorriam em problemas de chave duplicada passarem a s-lo. Nesse caso, apenas um dos registros ser copiado, e no se pode ter certeza qual ser. Assim, recomendvel evitar ao mximo a alterao de chaves nas tabelas criadas no R/3 que j possuam volume de dados produtivos.

    Vises no R/3

    As vises so queries de uma ou mais tabelas, que retornam um conjunto de dados que pode ser tratado como uma tabela pelos programas ABAP. As vises so definidas no dicionrio de dados, estando disponveis para uso em todo o sistema. As vises podem ser do tipo join, nas quais trazido um conjunto de dados a partir de vrias tabelas unidas por joins; do tipo projection, nas quais selecionam-se apenas os campos desejados de uma tabela especfica; ou do tipo selection, nas quais se deseja exibir apenas os registros que satisfaam um determinado critrio.

    Pgina 17 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Exerccios de Fixao

    Segue abaixo um conjunto de exerccios prticos para aprimorar o aprendizado referente a:

    - Conhecimentos bsicos sobre a plataforma de desenvolvimento ABAP

    - O Repositrio do SAP R/3

    - O dicionrio de dados

    Exerccio proposto:

    Exerccio 1

    Criar uma tabela transparente, para controlar prazo de validade de produtos perecveis.

    A tabela deve ter os seguintes campos:

    Campo CH Elem. Dados

    MANDT X MANDT Mandante

    WERKS X WERKS Centro

    MATNR X MATNR Material

    DTFAB DATAB Data de incio de validade

    PRVAL MHDHB Prazo de validade

    Exerccio 2

    Criar uma Viso para visualizar os dados da tabela criada no exerccio anterior.

    Pgina 18 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Soluo:

    Exerccio 1

    1. Entre no Dicionrio de Dados:

    Pelo menu: Ferramentas - Abap/Workbench - Data Dictionary

    Pela transao: SE11

    2. Selecione TABELA BANCO DE DADOS, digite o nome da tabela a ser criada e depois clique sobre o boto CRIAR.

    3. Entre com uma descrio breve e defina Categoria da Tabela e Classe de Entrega.

    4. Digite o nome dos campos, lembrando sempre de inserir os Campos Chave primeiro, marcando-os na coluna CHAVE, e defina seus Elementos de Dados.

    5. Salvar.

    6. Identifique a Classe de Desenvolvimento.

    7. Defina com as Opes Tcnicas, clicando sobre o boto OPES TCNICAS.

    8. Selecione o Tipo de Dados e Categor. Tamanho adequados para a tabela que est sendo criada.

    9. Saia da janela de Opes Tcnicas, Salve e Ative a tabela.

    Exerccio 2

    1. Entre no Dicionrio de Dados:

    Pelo menu: Ferramentas - Abap/Workbench - Data Dictionary

    Pela transao: SE11

    2. Selecionando VISO, digite com o nome da Viso a ser criada e clique sobre o boto CRIAR,

    3. Selecione tipo de viso como VISO DE BANCO DE DADOS.

    4. Na pasta Tabelas/Condies Join, na coluna TABELAS, entre com o nome da tabela para a qual a viso ser criada.

    5. Passando para a pasta Cpos.Viso, acrescente os campos que devem ser visualizados, incluindo o campo mandante.

    6. Salve.

    7. Identifique a Classe de Desenvolvimento.

    8. Ative.

    9. Para visualizar os dados, no menu, selecione: Utilitrios - Contedo.

    Pgina 19 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Al, Mundo!

    Criando seu primeiro programa ABAP

    Vamos criar um programa ABAP simples para nos ambientarmos s peculiaridades da programao para o SAP R/3. Como usual, vamos criar um programa que escreva uma frase simples na tela. Vamos entrar na transao SE38, solicitar a criao de um novo programa com o nome ZHELLO:

    REPORT HELLO. WRITE: / Al, Mundo!.

    Com apenas duas linhas de cdigo, acabamos de criar nosso primeiro programa ABAP. Selecione F8 (executar), e misso cumprida. Por ser este exemplo muito simples, introduziremos um exemplo mais elaborado, que permitir explicar alguns pontos iniciais sobre a programao:

    Pgina 20 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    REPORT ZHELLO2. INCLUDE ZCODIGO. TABLES: SFLIGHT. DATA: CAMPO_1(7) TYPE C, CAMPO_2(4) TYPE N, IT_SFLIGHT LIKE TABLE OF SFLIGHT, WA_SFLIGHT LIKE LINE OF IT_SFLIGHT. START-OF-SELECTION. SELECT CARRID CONNID FLDATE SEATSMAX SEATSOCC INTO CORRESPONDING FIELDS OF TABLE IT_SFLIGHT FROM SFLIGHT WHERE CARRID = 'AA'. CAMPO_1 = 'LIVRE: '. LOOP AT IT_SFLIGHT INTO WA_SFLIGHT. CAMPO_2 = WA_SFLIGHT-SEATSMAX - WA_SFLIGHT-SEATSOCC. WRITE: /10 WA_SFLIGHT-CONNID, WA_SFLIGHT-CARRID, CAMPO_1, CAMPO_2.

    ENDLOOP.

    Vamos analisar cada componente do novo trecho de cdigo. Primeiro, temos as declaraes REPORT, INCLUDE, TABLES e DATA. REPORT a declarao bsica do programa, que especifica seu nome e eventualmente alguma opo extra. INCLUDE especifica um trecho de programa que deve ser includo durante a compilao/execuo do programa. TABLES declara uma rea de trabalho para o uso de uma tabela do dicionrio, e DATA contm as declaraes dos campos e reas de dados internos ao programa. Existem outras declaraes no includas neste programa, e, dependendo do tipo de programa, as declaraes aqui mostradas no so obrigatrias.

    Em seguida temos um evento do ABAP, neste caso o evento START-OF-SELECTION, que disparado sempre no incio do programa. Existem outros eventos e, neste caso, no seria realmente necessrio o evento, apenas o inclumos para explic-lo. Um evento encerrado pelo incio de outro evento ou pelo final do programa.

    Dentro do evento temos os comandos, que executam efetivamente as aes dentro do ABAP. Neste caso especfico temos um comando SELECT, que busca os dados no banco e os coloca na tabela interna, que uma rea de memria especificada na declarao DATA, um comando de atribuio de valor para o campo CAMPO_1, e um LOOP na tabela interna que imprime algumas informaes baseado nas informaes da tabela interna e dos campos locais.

    Nos prximos captulos estaremos detalhando com um pouco mais de profundidade a criao de programas ABAP.

    Pgina 21 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Bibliotecas de Funes

    O que so as funes no R/3

    Dentro do R/3, as funes so elementos do repositrio que encapsulam uma determinada operao. Por estarem dentro do repositrio, podem ser usadas por qualquer programa. No R/3, as funes so definidas em uma transao apropriada, o Function Builder (SE37). Cada funo deve ter determinados os parmetros de entrada, sada, tabelas que porventura sejam usadas e condies de exceo que possam ser encontradas durante a execuo.

    Alm do uso das funes standard do R/3, til criar uma funo quando a operao ser usada por vrios programas diferentes, aumentando o reuso do cdigo e uniformizando a codificao dos programas. Por exemplo, um programador ABAP mais experiente pode criar funes que ocultam a complexidade de uma determinada operao, podendo ser usadas por programadores menos experientes para elaborar programas que se tornam mais simples. Suponha que um programa contenha acesso a vrias tabelas crticas do R/3, com massa considervel de dados. Talvez esse programa no possa ser criado por um programador iniciante, e o programa ento passado inteiramente responsabilidade de um pleno ou snior, que pode ficar sobrecarregado com a quantidade de programas atribudos a ele, ou ela.

    Pgina 22 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Usando funes, podemos ter um cenrio em que o snior apenas desenvolve a funo de busca, retornando os valores desejados, que seguem no processamento do programa, que agora est simplificado e pode ser passado para um programador menos experiente. O snior, ao desenvolver a funo, poder concentrar-se em otimizar sua performance e adotar tcnicas mais eficientes de programao.

    Isso no se aplica a todos os casos, mas a adoo dessa ttica e de outros esquemas de encapsulamento do R/3 (logical databases, classes) pode trazer benefcios produtividade da equipe de desenvolvimento.

    A idia central no uso das funes que seu uso no dependa dos detalhes de sua implementao (por exemplo, se vou usar uma funo que retorna as vendas de um ms, deve bastar que eu saiba quais valores devo passar e onde desejo receber o resultado, e no quais tabelas devem ser verificadas e somadas), dentro de um conceito estrito de encapsulamento.

    Para usar uma funo dentro do R/3, usa-se o comando CALL FUNCTION. Existe um mecanismo de busca no repositrio (o boto Modelo presente no editor de programas) que, dado um nome de funo, automaticamente insere no cdigo o esqueleto da chamada de funo, com todos seus parmetros listados.

    RFC

    O RFC um mecanismo do R/3 que permite a execuo de uma funo a partir de uma outra mquina por exemplo, digamos que o servidor PRD execute uma funo RFC do servidor QAS. Essa funo ir ser executada no servidor QAS, e os resultados sero passados para o servidor PRD. Qualquer funo de usurio pode se tornar uma funo RFC, bastando para tanto que seja selecionada a opo apropriada nas opes tcnicas do mdulo de funo. A chamada RFC no se limita comunicao entre sistemas R/3 outros sistemas podem fazer uso desse protocolo. Porm, ao invs do RFC, que trabalhoso para ser usado de fora do R/3, a maneira atualmente mais indicada para usar funcionalidades do R/3 a partir de um programa externo so as BAPIs (Business Application Programming Interfaces), que usam um mecanismo RFC encapsulado e simplificado.

    Function Groups

    Toda funo dentro do R/3 deve pertencer a um function group, que um agrupamento de funes com caractersticas e propsitos semelhantes. Quando um function group transportado, so transportadas juntas todas as funes a ele ligadas que tenham sido modificadas ou criadas.

    Pgina 23 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Os Criadores de Menus e Telas

    Criando menus

    Dentro de um programa ABAP, possvel definir menus, botes e combinaes de teclas especficas para o contexto em que se esteja trabalhando. Por exemplo, pode-se colocar itens de menu referentes insero de um pedido e outros itens diferentes para quando se estiver apenas exibindo um pedido. Esses menus so definidos atravs do Menu Painter (SE41) e chamados, dentro do programa ABAP, pelo comando SET PF-STATUS , onde o nome definido para o conjunto de menus, botes e combinaes de tela escolhido.

    Criando Telas

    As telas, dentro do R/3, podem ser classificadas em selection-screens e dialogs. As selection-screens so definidas atravs de declaraes, e sero abordadas num captulo especial. As dialogs correspondem s telas criadas com o Screen Painter (SE51)que uma ferramenta visual de definio de telas. Dentro de uma tela, pode-se criar botes, campos de entrada e sada, tabs e outros elementos.

    Pgina 24 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Exerccios de Fixao

    Segue abaixo um conjunto de exerccios prticos para aprimorar o aprendizado referente a:

    - Alo Mundo!

    - Biblioteca de Funes

    - Os criadores de menus e telas

    Exerccio proposto:

    Exerccio 1

    Copie da apostila o programa Al, Mundo!.

    Declare as variveis lc_frase1 como caracter com 26 posies, e lc_frase2 como caracter com 24 posies e atribua as frases Meu primeiro programa ABAP varivel lc_frase1 e Programando para SAP R/3 varivel lc_frase2.

    Escreva as frases na tela nas linhas imediatamente abaixo de Al, Mundo!.

    Exerccio 2

    Para o programa Al, Mundo!, crie uma barra de menu Relatrio com as opes de Imprimir, Voltar e Encerrar.

    Pgina 25 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Soluo:

    Exerccio 1

    1. Entre no Editor de programas ABAP: Pelo menu: Ferramentas - Abap/Workbench - Editor Abap Pela transao: SE38

    2. Entre com o nome do Programa a ser criado e, com o boto de rdio Cdigo Fonte selecionado, clique sobre o boto CRIAR.

    3. Na janela de Atributos do Programa, digite o ttulo do programa e defina o tipo de programa como Programa Executvel e a Aplicao.

    4. Identifique a Classe de Desenvolvimento.

    5. Na janela do editor, digite o cdigo:

    REPORT HELLO.

    DATA: lc_frase1(26) type c, lc_frase2(24) type c.

    WRITE: / 'Al, Mundo!'. WRITE: / lc_frase1. WRITE: / lc_frase2.

    Exerccio 2

    1. Entre no Menu Painter: Pelo menu: Ferramentas - Abap/Workbench Menu Painter Pela transao: SE41

    2. Na caixa programa, digite o nome do programa para o qual ser criada a barra de menus.

    3. Selecione STATUS, digite o nome do menu a ser criado e clique sobre o boto CRIAR.

    4. Entre com a descrio do Menu.

    5. Na linha Barra de Menu, clique sobre o boto para incluir o menu.

    6. Digite nome que se quer que aparea na barra de menu, no caso do exerccio: Relatrio.

    7. Clique duas vezes sobre a palavra Relatrio. Para inserir os itens do menu.

    8. Inclua, na coluna de Cdigo e Texto os cdigos de comando e descries desejados. No

    caso do exerccio: PRI Imprimir, BACK Voltar e %EX Encerrar.

    9. Salve e Ative.

    10. Entre no Editor de programas ABAP: Pelo menu: Ferramentas - Abap/Workbench - Editor Abap Pela transao: SE38

    Pgina 26 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    11. Digite o nome do Programa do exerccio anterior, com o boto de rdio Cdigo Fonte selecionado, clique sobre o boto MODIFICAR.

    12. Faa a chamada do menu, digitando, no cdigo do programa ABAP, o comando SET PF-STATUS , onde o nome do menu criado na transao SE41.

    Pgina 27 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Criando Tabelas Internas e Estruturas Complexas de Armazenagem Temporria

    REPORT ZTABELAINTERNA.

    TYPES: BEGIN OF MYSTRUCT,

    CARRID LIKE SPFLI-CARRID,

    CONNID LIKE SPFLI-CONNID,

    FLDATE LIKE SFLIGHT-FLDATE,

    SEATSOCC LIKE SFLIGHT-SEATSOCC,

    SEATSMAX LIKE SFLIGHT-SEATSMAX,

    SEATFREE LIKE SFLIGHT-SEATSMAX,

    END OF MYSTRUCT.

    DATA: MYTABLE TYPE STANDARD TABLE OF MYSTRUCT

    WITH NON-UNIQUE KEY CARRID CONNID

    WITH HEADER LINE.

    Tabela interna

    Dentro de um programa ABAP, muitas vezes impossvel trabalhar apenas com os comandos de seleo e alterao de dados diretamente na tabela. Para manipular localmente os dados, o ABAP permite o uso de tabelas internas, que so reas de memria organizadas como tabelas. Essas tabelas internas podem ter o mesmo formato de uma tabela do banco de dados, o que as qualifica para serem usadas como reas de manipulao intermediria, o que traz benefcios em termos de performance geral do R/3. Uma tabela interna declarada atravs do comando DATA, onde se especifica qual o tipo de linha da tabela, se ela tem headerline e qual a forma de operao da mesma. A tabela pode ser manipulada por comandos de insero (APPEND, INSERT, COLLECT), deleo (DELETE, REFRESH) e alterao de dados (MODIFY, COLLECT).

    Por exemplo, para declarar uma tabela interna, conforme no exemplo, usou-se a declarao TYPES para declarar uma estrutura que contm os campos que desejamos ter na tabela. Em seguida, a tabela criada atravs da declarao DATA, usando a estrutura como modelo.

    Tipos de tabelas internas

    Pgina 28 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    O ABAP oferece trs tipos de tabelas internas: STANDARD, SORTED e HASHED. As tabelas standard permitem o acesso sequencial aos dados, alm de permitir o acesso mediante as chaves especificadas na declarao das tabelas. As tabelas do tipo sorted j esto pr-ordenadas de acordo com a chave as operaes realizadas nesse tipo de tabela devem ter o cuidado de no alterar a ordem, sob pena de ocorrer um erro de execuo. As tabelas do tipo hashed so organizadas de acordo com a chave especificada e no permitem operaes utilizando o nmero sequencial dos registros. So adequadas a grandes volumes de dados.

    Extracts

    Extracts so estruturas de dados especiais que permitem montar uma rea interna com registros de tipos diferentes. A tabela interna est limitada a um tipo de linha de dados (registro) fixo, enquanto o extract pode receber linhas com vrias estruturas diferentes. Por exemplo, suponha que voc tenha que gerar um relatrio das tabelas SPFLI e SFLIGHT. Voc pode montar um extract com linhas da SPFLI e da SFLIGHT em registros diferentes:

    REPORT ZHELLO2. TABLES: SPFLI, SFLIGHT. FIELD-GROUPS: HEADER, CARRINFO, CONNINFO. INSERT: SPFLI-CARRID SPFLI-CONNID SFLIGHT-FLDATE INTO HEADER. INSERT: SPFLI-CITYFROM SPFLI-CITYTO INTO CARRINFO. INSERT: SFLIGHT-PLANETYPE SFLIGHT-SEATSOCC SFLIGHT-SEATSMAX INTO CONNINFO. SELECT * FROM SPFLI. EXTRACT CARRINFO. SELECT * FROM SFLIGHT WHERE CARRID = SPFLI-CARRID AND CONNID = SPFLI-CONNID. EXTRACT CONNINFO. ENDSELECT. ENDSELECT. SORT. LOOP. AT CARRINFO. WRITE: / SPFLI-CITYFROM, SPFLI-CITYTO. ENDAT. AT CONNINFO. WRITE: /10 SFLIGHT-PLANETYPE, SFLIGHT-SEATSOCC, SFLIGHT-SEATSMAX. ENDAT. ENDLOOP.

    No comando FIELD-GROUPS, so especificados os grupos de campos que sero usados no extract. O grupo header deve sempre ser utilizado. Nesse grupo, voc dever incluir os campos que fazem parte da chave de todos os tipos de registro que voc ter em seu extract.

    Pgina 29 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    O comando INSERT insere os campos em cada tipo de registro (grupo de campos) definido. Usando o comando EXTRACT, os dados so copiados para um novo registro com o tipo especificado.

    Para ler os dados do extract, primeiramente seu contedo deve ser ordenado, usando-se o comando SORT. No necessrio especificar que trata-se de um extract, o sistema o especifica automaticamente. Feito o SORT, pode-se usar o comando LOOP..ENDLOOP para extrair os dados, usando os eventos AT para cada quebra de tipo de registro.

    Pgina 30 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    O Open SQL

    O ABAP oferece um conjunto de comandos que permite realizar operaes com os dados armazenados no banco, o Open SQL. A idia central do Open SQL prover uma linguagem de acesso ao banco independente de plataforma. Os comandos Open SQL tm de passar pelo interpretador ABAP, que os traduz para os comandos SQL do banco de dados que esteja sendo utilizado.

    Comandos

    Dentro do Open SQL, podem-se utilizar os seguintes comandos:

    Pgina 31 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    SELECT: permite a leitura de dados do banco de dados. INSERT: insere dados no banco. UPDATE: atualiza dados. MODIFY: atualiza dados existentes ou os acrescenta caso no existam no banco. DELETE: apaga registros do banco de dados. OPEN CURSOR, FETCH, CLOSE CURSOR: respectivamente cria, l e fecha um

    cursor dentro do banco de dados.

    Campos de sistema

    Os dois principais campos de sistema envolvidos em operaes do Open SQL so o SY-SUBRC, que retorna 0 caso a operao tenha sido bem-sucedida, e o SY-DBCNT, que retorna o nmero de registros afetados pelo comando.

    Trabalhando com os Mandantes

    Num comando Open-SQL no necessrio especificar o mandante nas clusulas discriminadoras dos comandos. Automaticamente, o interpretador ABAP definir o mandante como o mandante atual, a no ser que seja especificada a opo CLIENT SPECIFIED.

    SELECT

    O comando SELECT retorna um conjunto de dados (registros) que atendam a um determinado critrio. As clusulas do comando SELECT so as seguintes:

    SELECT : Pode-se selecionar uma lista de campos a serem retornados, separados por espaos, ou o caractere * para retornar todos os campos disponveis. A opo SINGLE retorna somente um registro que atenda s restries impostas. Caso a tabela tenha sido declarada atravs de TABLES, automaticamente criada um registro na memria com o mesmo nome para manipul-la; caso o SELECT traga campos de mais de uma tabela, no possvel utilizar esse artifcio. Nesse caso, as tabelas no precisam ser declaradas em TABLES, mas a seleo dos campos deve separar o nome da tabela e o campo com um til (~). Exemplo:

    TABLES: SFLIGHT. DATA: IT_SFLIGHT LIKE SFLIGHT. SELECT CARRID CONNID FLDATE SEATSOCC FROM SFLIGHT INTO TABLE IT_SFLIGHT.

    Ou

    Pgina 32 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    DATA: IT_SFLIGHT LIKE SFLIGHT. SELECT SFLIGHT~CARRID SFLIGHT~CONNID SFLIGHT~FLDATE SFLIGHT~SEATSOCC FROM SFLIGHT INTO TABLE IT_SFLIGHT

    INTO [| TABLE ]: Permite armazenar o retorno numa tabela interna ou em campos definidos com o comando DATA. O uso de SELECT sem especificar SINGLE ou INTO TABLE exige o uso de ENDSELECT.

    FROM [[INNER|LEFT OUTER] JOIN , ..]: Especifica a origem dos dados.

    WHERE : A clusula WHERE especifica as condies de busca. Por exemplo, WHERE CARRID = AA faz com que apenas os registros em que o campo CARRID tenha contedo igual a AA sejam retornados.

    Maiores detalhes sobre o comando SELECT podem ser encontrados no Help On-Line do R/3.

    INSERT

    O comando INSERT insere um novo registro no banco de dados, a partir de uma rea de dados especificada em TABLES ou uma rea declarada com DATA. Para usar INSERT, deve-se colocar os dados desejados na rea intermediria e, em seguida, chamar o comando INSERT. Caso a rea no seja especificada em TABLES, deve ser usada a opo FROM:

    REPORT ZTESTE. TABLES SPFLI. DATA WA TYPE SPFLI. WA-CARRID = 'LH'. WA-CITYFROM = 'WASHINGTON'. ... INSERT INTO SPFLI VALUES WA. WA-CARRID = 'UA'. WA-CITYFROM = 'LONDON'. ... INSERT SPFLI FROM WA. SPFLI-CARRID = 'LH'. SPFLI-CITYFROM = 'BERLIN'. ... INSERT SPFLI.

    UPDATE

    O comando UPDATE funciona como o comando INSERT, podendo alterar dados no banco a partir de uma rea ou tabela interna. No caso da tabela interna, no necessrio especificar a clusula WHERE: sero alterados os registros correspondentes de acordo com as chaves. Por exemplo:

    Pgina 33 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    DATA: ITAB TYPE HASHED TABLE OF SPFLI WITH UNIQUE KEY CARRID CONNID, WA LIKE LINE OF ITAB.

    WA-CARRID = 'UA'. WA-CONNID = '0011'. WA-CITYFROM = ... INSERT WA INTO TABLE ITAB. WA-CARRID = 'LH'. WA-CONNID = '1245'. WA-CITYFROM = ... INSERT WA INTO TABLE ITAB. WA-CARRID = 'AA'. WA-CONNID = '4574'. WA-CITYFROM = ... INSERT WA INTO TABLE ITAB. ... UPDATE SPFLI FROM TABLE ITAB.

    MODIFY

    O comando MODIFY opera da mesma forma que o comando UPDATE, mas insere um novo registro caso o registro especificado no exista.

    DELETE

    O comando DELETE elimina registros do banco. Ele opera da mesma forma que o comando INSERT.

    OPEN CURSOR, FETCH, CLOSE CURSOR

    Esses comandos permitem acessar o resultado da query sequencialmente, um registro aps o outro. Seu uso desencorajado, por incorrer em problemas de performance. Recomenda-se o uso de tabelas internas em seu lugar.

    Pgina 34 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Criao de Listas Bsicas

    O comando WRITE

    O comando bsico para criao de relatrios usando ABAP o WRITE. Quando um programa ABAP executado, basta o interpretador ABAP encontrar este comando para disparar o gerador de lista. A lista um relatrio visualmente simples, montado com letras de espaamento constante. Essa simplicidade aumenta a independncia de plataforma do gerador de lista.

    Criando uma lista simples

    A sintaxe bsica do comando a seguinte:

    WRITE [:] [/] [|] [, |] [, ...] [opes].

    A sintaxe completa do comando pode ser encontrada no Help do R/3. Existem opes para alterar a cor dos elementos da tela, criao de molduras e insero de cones na lista. Observe o cdigo a seguir:

    REPORT ZAPOSTILA00 . TABLES: SPFLI, SFLIGHT. SELECT * FROM SPFLI. WRITE: / SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM, SPFLI-AIRPFROM, SPFLI-CITYTO, SPFLI-AIRPTO.

    ENDSELECT.

    Com esse trecho de cdigo apenas, o R/3 gera uma lista simples do contedo de alguns campos da tabela SPFLI:

    Pgina 35 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Cabealhos e rodaps

    Existem alguns comandos e opes que permitem melhorar o aspecto e a funcionalidade de uma lista. No exemplo, a lista ainda no tem cabealho. Para cri-los, pode-se editar diretamente o cabealho usando a opo Saltar Elementos de Texto Ttulos de Lista. Nesse caso, deve-se saber previamente em que posio deve ficar o texto no cabealho. Por outro lado, utilizando-se a opo Sistema Lista Ttulo da Lista possvel editar o ttulo no momento da exibio da lista, facilitando muito o posicionamento dos textos. Tambm possvel suprimir a gerao do ttulo bsico, substituindo-o por um ttulo composto pelo programa ABAP. Para tanto, deve-se colocar na declarao REPORT do incio do programa a opo NO STANDARD PAGE HEADING e implementar no programa o evento TOP-OF-PAGE. Caso tambm queira um rodap para cada pgina, use o evento END-OF-PAGE para escrev-lo.

    Mudando a apresentao dos campos

    Para melhorar a apresentao da lista, podemos modificar a forma como os campos so exibidos. Por exemplo, podemos mudar a cor com a opo COLOR do comando WRITE; podemos mudar a intensidade da cor com a opo INTENSIFIED {ON|OFF}, transformar o campo num HOTSPOT para uso em listas com drill-down, e mudar o posicionamento dos campos com WRITE AT. A opo COLOR admite qualquer uma das cores padro do R/3, disponveis na transao LIBS:

    Pgina 36 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Por exemplo, para modificar um campo de forma a usar a cor COL_KEY menos intensa,

    como hotspot, centralizado, escreveramos o cdigo como segue:

    WRITE: / SPFLI-CARRID COLOR COL_KEY INTENSIFIED OFF HOTSPOT CENTERED.

    A opo HOTSPOT faz com que, ao se apontar o campo com o cursor, o mesmo fique no formato de uma mozinha, como num hyperlink da Internet, permitindo a seleo do registro com um nico clique do mouse. Essa caracterstica muito til no processamento de listas em vrios nveis.

    Modificando o formato de exibio standard

    As opes dentro do comando WRITE tm efeito apenas no campo a que se referem. Caso se necessite mudar todos os campos a partir de um determinado ponto do programa, pode-se usar o comando FORMAT, com as mesmas opes de formatao vistas para o comando WRITE. Com isso, todos os campos a seguir sero exibidos com as opes especificadas pelo comando FORMAT, at que seja encontrado um novo comando FORMAT. Pode-se continuar usando os modificadores no WRITE, mas os mesmos iro basear-se no novo padro estabelecido no comando WRITE. Por exemplo, caso seja colocado o comando

    FORMAT COLOR COL_KEY INTENSIFIED ON CENTERED

    todos os campos a seguir passaro a ser exibidos na cor COL_KEY INTENSIFIED, e sero apresentados centralizados. Caso tenhamos em seguida o comando

    WRITE: / SPFLI-CARRID INTENSIFIED OFF, SPFLI-CONNID.

    Pgina 37 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    a cor exibida para o campo SPFLI-CARRID ser COL_KEY INTENSIFIED OFF, e no a cor padro sem INTENSIFIED. O campo SPFLI-CONNID aparecer da forma estipulada no comando FORMAT.

    O formato pode retornar ao formato standard usando o comando FORMAT RESET.

    Posicionando os campos

    Pode-se alterar o posicionamento dos campos dentro de uma linha colocando o nmero da coluna na qual queremos que o campo comece na frente do campo. Pode-se tambm especificar a largura do campo colocando a mesma em seguida, entre parnteses (sem essa opo, o tamanho do campo utilizado ser o tamanho dele no dicionrio de dados). Por exemplo, para posicionarmos o mesmo campo que modificamos anteriormente na dcima coluna, estabelecendo um tamanho de cinco caracteres, usamos o comando

    WRITE: /10(5) SPFLI-CARRID COLOR COL_KEY INTENSIFIED OFF HOTSPOT.

    Especificando unidades de medida e moedas

    Para formatar automaticamente na lista campos numa determinada unidade de medida e valores monetrios, pode-se utilizar as opes UNIT e CURRENCY, seguidas do campo que contm a chave da unidade, aps o campo que se quer formatar. Com isso, o campo ser formatado de acordo com a definio nas tabelas standard de unidades e de moedas do R/3. Veja o exemplo a seguir:

    WRITE: /20(6) SFLIGHT-FLDATE, SFLIGHT-CURRENCY,

    'Sem CURRENCY:', (12) SFLIGHT-PAYMENTSUM, 'Com CURRENCY:', (12) SFLIGHT-PAYMENTSUM

    CURRENCY SFLIGHT-CURRENCY.

    Pgina 38 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Um trecho do report seria:

    150420 ITL Sem CURRENCY: 683.231,44 Com CURRENCY: 68.323.144 130520 ITL Sem CURRENCY: 318.202,60 Com CURRENCY: 31.820.260

    Sem o uso da opo CURRENCY, o valor apresentado no formato genrico do usurio; com o CURRENCY, mesmo caso tenhamos moedas diferentes em cada registro, cada uma ser exibida no formato correto.

    Smbolos de Texto

    O ABAP permite a criao de smbolos de texto, que so elementos do repositrio que permitem a criao de tabelas de texto para uso nos programas ABAP. Os smbolos de texto so criados dentro de classes de mensagem, que servem para separar logicamente os smbolos de texto relacionados. Dentro da classe de mensagem, cada texto deve ser identificado por um nmero de trs posies. Cada smbolo de texto pode ser criado em vrias linguagens.

    Suponha que exista o seguinte trecho de cdigo:

    WRITE: /10 'Assentos ocupados:', SFLIGHT-SEATSOCC.

    Utilizando smbolos de texto, o comando ficaria

    WRITE: /10 TEXT-001(ZCLMENS), SFLIGHT-SEATSOCC.

    Toda vez que o interpretador ABAP encontra um campo que comea com TEXT, coloca naquela posio um smbolo de texto correspondente ao nmero aps o hfen na classe entre parnteses. Caso seja usada a opo MESSAGE-ID na declarao REPORT, no necessrio especificar a classe de mensagem junto ao smbolo de texto. O uso de smbolos de texto pode simplificar a manuteno de programas complexos ao agrupar todas as mensagens de texto em um s local.

    Para editar os smbolos de texto, use, na janela do editor ABAP, a opo Saltar Elementos de Texto Smbolos de Texto.

    Pgina 39 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Exerccios de Fixao

    Segue abaixo um conjunto de exerccios prticos para aprimorar o aprendizado referente a:

    - Criando tabelas internas e estruturas complexas de armazenagem temporria

    - O Open SQL

    - Criao de Listas Bsicas

    Exerccio proposto:

    Exerccio 1

    Criar um programa que imprima os campos CARRID, CONNID, CITYFROM, AIRPFROM, CITYTO e AIRPTO da tabela SPFLI. Os dados devem ser armazenados em uma tabela interna antes de serem impressos.

    O relatrio deve ser impresso com as cores das linhas intercaladas entre cinza e branco.

    Exerccio 2

    Utilizando o comando DELETE do Open_SQL, apague da tabela interna todos os registros onde o campo CITYFROM = SINGAPORE.

    Exerccio 3

    Monte o cabealho como a seguir:

    Nota: As descries devem estar definidas como smbolos de texto.

    RELAO DE VOS ID Num. Partindo de Aer. Pousando em Aer.

    Pgina 40 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Soluo:

    Exerccio 1

    1. Entre no Editor de programas ABAP:

    Pelo menu: Ferramentas - Abap/Workbench - Editor Abap Pela transao: SE38

    2. Entre com o nome do Programa a ser criado e, com o boto de rdio Cdigo Fonte selecionado, clique sobre o boto CRIAR.

    3. Na janela de Atributos do Programa, digite o ttulo do programa e defina o tipo de programa como Programa Executvel e a Aplicao.

    4. Identifique a Classe de Desenvolvimento.

    5. Na janela do editor, digite o cdigo:

    DATA: lc_cor type c value '1', begin of T_SPFLI occurs 0, carrid like spfli-carrid, connid like spfli-connid, cityfrom like spfli-cityfrom, airpfrom like spfli-airpfrom, cityto like spfli-cityto, airpto like spfli-airpto, end of T_SPFLI. START-OF-SELECTION. SELECT carrid connid cityfrom airpfrom cityto airpto FROM SPFLI into table T_SPFLI. Loop at T_SPFLI. if lc_cor = '1'. FORMAT COLOR 2 INTENSIFIED OFF. clear lc_cor. else. FORMAT RESET. lc_cor = '1'. endif. WRITE: / T_SPFLI-CARRID, T_SPFLI-CONNID,

    T_SPFLI-CITYFROM, T_SPFLI-AIRPFROM, T_SPFLI-CITYTO, T_SPFLI-AIRPTO.

    Endloop.

    Exerccio 2

    1. No programa, aps a seleo dos dados, digitar o cdigo:

    Cdigo: DELETE t_spfli WHERE cityfrom = 'SINGAPORE'.

    Pgina 41 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Exerccio 3

    1. Na tela de edio do programa, para definir os smbolos de texto para o cabealho, entre na opo Saltar Elementos de Texto Smbolos de Texto e defina os smbolos com os textos:

    001 RELAO DE VOS 002 ID 003 Num. 004 Partindo de 005 Aer. 006 Pousando em

    2. Salve os textos e Ative. 3. Na tela de edio do programa, entre a declarao da tabela interna e o evento START-

    OF-SELECTION, digite o cdigo:

    TOP-OF-PAGE. FORMAT COLOR 6 INTENSIFIED OFF. WRITE: /22 text-001, 60 ''. FORMAT COLOR 2 INTENSIFIED ON. WRITE: /1 text-002, 05 text-003, 10 text-004, 31 text-005, 35 text-006, 56 text-005, 60 ''.

    Nota: 60 ''. usado para que a linha fique da cor desejada at a coluna 60.

    Pgina 42 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    O SAP Query

    Algumas consultas podem ser elaboradas usando-se a ferramenta SAP Query. Nela, possvel ao usurio criar consultas visualmente, sem conhecimento da linguagem de programao.

    Os dados em uma Query podem ser ordenados, agrupados, totalizados, etc., e os relatrios podem ser impressos, gravados em planilhas, arquivos ou editores de texto, ou podem ser enviados a um ou mais destinatrios.

    Exemplo de utilizao de Querys:

    Relatrios simples e de utilizao espordica. Auxiliar na conferncia das Cargas de Dados. Listar dados incorretos no ps-Go Live.

    A utilizao de Querys desaconselhada para:

    Criar relatrios complexos, que exijam a leitura de vrias tabelas no banco de dados, ou que sejam utilizados com freqncia.

    Listar dados que no existem no banco de dados.

    Pgina 43 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Exemplo: Produtos Acabados sem Listas Tcnicas

    Pontos Positivos Pontos Negativos

    X Possibilita criar relatrios rapidamente sem a necessidade de criar programas em ABAP.

    X Baixa performance se comparado com programas ABAP.

    X Os relatrios podem ser criados por usurios finais.

    X Limitaes para relatrios que exigem a leitura de muitas tabelas.

    X Facilidades e recursos na sua criao e utilizao.

    X No possvel incluir lgica de programao.

    X Controle de acesso aos dados deficiente.

    Grupos de usurios e reas funcionais

    Para poder criar uma SAP Query, deve existir pelo menos um grupo de usurios e uma rea funcional criados. O grupo de usurios contm os usurios que podem criar e rodar queries, e as reas funcionais so definies de quais dados sero usados na query. Por exemplo, pode-se criar uma rea funcional com um join de vrias tabelas e com campos calculados, alm dos campos definidos nas tabelas. A rea funcional deve estar sempre associada a um ou mais grupos de usurios para ser utilizada, e apenas os usurios que fazem parte dos grupos podem criar queries que a acessem.

    As reas funcionais so criadas na transao SQ02, e os grupos de usurios so definidos na transao SQ03.

    Criando um grupo de usurios os grupos de usurios so criados na transao SQ02. A operao muito simples basta definir o nome do grupo e uma descrio, e em seguida colocar os nomes dos usurios que dele fazem parte.

    Criando uma rea funcional as reas funcionais so criadas na transao SQ03. Nela so definidas as tabelas que compem a rea funcional, e seus relacionamentos. que um conjunto de dados a serem usados pela query (composto de tabelas, vises e/ou dados de arquivos TXT, por exemplo).

    A query propriamente dita criada usando-se a transao SQ01. Nela, escolhe-se a rea funcional que ser usada na query (h uma lista com as reas funcionais associadas ao grupo ao qual o usurio pertence) e qual ser a estrutura da lista a ser exibida.

    Pgina 44 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Definindo telas de seleo de parmetros

    Para selecionar intervalos de dados a serem exibidos em um relatrio, o R/3 disponibiliza os comandos PARAMETERS e SELECT-OPTIONS.

    Em todo relatrio, existe uma tela padro de seleo a tela 1000 que ativada sempre que o sistema encontra uma declarao PARAMETERS ou SELECT-OPTIONS sem especificao de nmero de tela. Portanto, para criar uma tela de seleo simples, basta especificar dentro do programa os parmetros, como no exemplo a seguir:

    REPORT ZAPOSTILA00 . TABLES: SPFLI, SFLIGHT. TYPES: BEGIN OF MYSTRUCT, CARRID LIKE SPFLI-CARRID, CONNID LIKE SPFLI-CONNID, FLDATE LIKE SFLIGHT-FLDATE, SEATSOCC LIKE SFLIGHT-SEATSOCC, SEATSMAX LIKE SFLIGHT-SEATSMAX, SEATFREE LIKE SFLIGHT-SEATSMAX, END OF MYSTRUCT. DATA: MYTABLE TYPE STANDARD TABLE OF MYSTRUCT WITH NON-UNIQUE KEY CARRID CONNID WITH HEADER LINE. SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID, S_CONNID FOR SPFLI-CONNID. PARAMETERS: S_CHECK AS CHECKBOX, S_RADIO1 RADIOBUTTON GROUP RAD,

    S_RADIO2 RADIOBUTTON GROUP RAD,

    S_RADIO3 RADIOBUTTON GROUP TTN,

    S_RADIO4 RADIOBUTTON GROUP TTN,

    S_RADIO5 RADIOBUTTON GROUP TTN.

    Diferena entre o comando PARAMETERS e o comando SELECT-OPTIONS

    O comando PARAMETERS permite que se especifique um valor nico e oferece a opo de colocar os valores como checkboxes, nos quais o usurio pode escolher como um flag, ou radiobuttons, que devem ser agrupados para que o usurio escolha entre as opes disponveis num grupo.

    Sintaxe bsica do comando PARAMETERS:

    PARAMETERS: p_carrid LIKE spfli-carrid.

    O comando PARAMETERS pode aceitar caractersticas adicionais, que so opcionais, as mais utilizadas so:

    DEFAULT : Toda vez que o programa executado, o campo j vem preenchido com um valor default na tela de seleo.

    Pgina 45 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    DECIMALS dec: Nmero de casas decimais para campos tipo p.

    MEMORY ID: Toda vez que o programa executado, o campo j vem preenchido com o ltimo valor entrado pelo usurio em um campo com o mesmo Memory ID.

    MATCHCODE OBJECT mobj: Atribui um matchcode para o campo.

    NO-DISPLAY: No exibe o campo na tela de seleo.

    LOWER CASE: O campo se torna sensvel a letras maisculas e minsculas.

    OBLIGATORY: O preenchimento do campo obrigatrio.

    A clusula WHERE, nos comandos OPEN-SQL, deve se referir ao campo normalmente, como no exemplo:

    SELECT carrid connid FROM spfli WHERE carrid = p_carrid.

    ENDSELECT.

    O comando SELECT-OPTIONS tem como caracterstica que o campo de seleo possa conter um ou mais intervalos de valores possveis, inclusive indicando intervalos e valores que devem ser excludos do resultado. Como o SELECT-OPTIONS permite uma extenso de seleo, o SAP guarda os valores do SELECT-OPTIONS em uma tabela interna de quatro campos, similar a esta:

    SIGN OPTION LOW HIGH

    I NE DL

    I BT AA LH

    Este exemplo, significa que os valores para esta seleo devem estar entre AA e LH, excluindo DL.

    Sintaxe bsica do comando SELECT-OPTIONS:

    SELECT-OPTIONS: s_carrid FOR spfli-carrid.

    O comando SELECT-OPTIONS pode aceitar caractersticas adicionais, que so opcionais, as mais utilizadas so:

    DEFAULT : Toda vez que o programa executado, o campo j vem preenchido com um VALOR default na tela de seleo.

    DEFAULT g TO h: Toda vez que o programa executado, o campo j vem preenchido com um INTERVALO default na tela de seleo.

    DEFAULT g ... OPTION xx ... SIGN s e DEFAULT g TO h ... OPTION xx ... SIGN s: Definir os VALORES e INTERVALOS default que devem ser excludos do resultado.

    O valor default para SIGN I (Incluso) e para OPTION EQ (Igual).

    O campo SIGN tambm pode aceitar o valor E (Excluso), e o campo OPTION pode aceitar os valores: EQ (Igual), NE (No Igual), CP (Contm (para valores com *)), NP (No pode conter (valores com *)), GE (Maior Igual), LT (Menor que), LE (Menor Igual) e GT (Maior que).

    Pgina 46 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    MEMORY ID pid: MEMORY ID: Toda vez que o programa executado, o campo j vem preenchido com o ltimo valor entrado pelo usurio em um campo com o mesmo Memory ID.

    MATCHCODE OBJECT mobj: : Atribui um matchcode para o campo.

    NO-DISPLAY: No exibe o select-option na tela de seleo.

    LOWER CASE: O campo se torna sensvel a letras maisculas e minsculas.

    OBLIGATORY: O preenchimento obrigatrio.

    NO-EXTENSION: No exibe o boto a direita do select-option, permitindo somente um intervalo de seleo.

    NO INTERVALS: No exibe a segunda caixa do intervalo. No permitindo assim definio de intervalos na seleo.

    A clusula WHERE, nos comandos OPEN-SQL, deve se referir ao campo como no exemplo:

    SELECT carrid connid FROM spfli WHERE carrid IN s_carrid.

    ENDSELECT.

    Pgina 47 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Agrupando parmetros em bordas e melhorando o layout

    Pode-se melhorar o layout dos parmetros logicamente relacionados agrupando-os em blocos com a opo BEGIN OF BLOCKEND OF BLOCK. Caso usemos o exemplo anterior sem nenhuma outra formatao, a sada na tela ficar confusa:

    Modificando o programa para usar bordas

    Para melhorar o aspecto da janela de seleo anterior, vamos utilizar a opo BEGIN OF BLOCK END OF BLOCK no mesmo trecho de cdigo:

    SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID, S_CONNID FOR SPFLI-CONNID. SELECTION-SCREEN END OF BLOCK BL1. SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-002. PARAMETERS: S_CHECK AS CHECKBOX. SELECTION-SCREEN END OF BLOCK BL2. SELECTION-SCREEN BEGIN OF BLOCK BL3 WITH FRAME TITLE TEXT-003. PARAMETERS: S_RADIO1 RADIOBUTTON GROUP RAD, S_RADIO2 RADIOBUTTON GROUP RAD. SELECTION-SCREEN END OF BLOCK BL3. SELECTION-SCREEN BEGIN OF BLOCK BL4 WITH FRAME TITLE TEXT-004. PARAMETERS: S_RADIO3 RADIOBUTTON GROUP TTN, S_RADIO4 RADIOBUTTON GROUP TTN, S_RADIO5 RADIOBUTTON GROUP TTN.

    Pgina 48 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    SELECTION-SCREEN END OF BLOCK BL4 .

    Com isso, criamos bordas ao redor de cada grupo logicamente ligado, melhorando o aspecto da tela e evitando confuso no momento de sua utilizao:

    Janelas adicionais de parmetros

    Podem ser definidas janelas alm da janela 1000 default para tanto, basta agrupar os select-options e parameters dentro das declaraes SELECTION-SCREEN BEGIN OF SCREEN e SELECTION SCREEN END OF SCREEN . Essa janela dever ser posteriormente chamada com o uso do comando CALL SELECTION SCREEN seguido do nmero definido da tela, inclusive podendo-se transform-la numa tela modal usando a opo AS WINDOW na declarao SELECTION-SCREEN BEGIN OF SCREEN e a opo STARTING AT/ENDING AT com as coordenadas (coluna, linha) das extremidades superior esquerda e inferior direita da tela na chamada CALL SELECTION SCREEN. Por exemplo, modificando o cdigo da seguinte forma:

    ...

    Pgina 49 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001. SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID, S_CONNID FOR SPFLI-CONNID. SELECTION-SCREEN END OF BLOCK BL1. SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-002. PARAMETERS: S_CHECK AS CHECKBOX. SELECTION-SCREEN END OF BLOCK BL2. SELECTION-SCREEN BEGIN OF SCREEN 0150 AS WINDOW.

    SELECTION-SCREEN BEGIN OF BLOCK BL3 WITH FRAME TITLE TEXT-003. PARAMETERS: S_RADIO1 RADIOBUTTON GROUP RAD, S_RADIO2 RADIOBUTTON GROUP RAD. SELECTION-SCREEN END OF BLOCK BL3. SELECTION-SCREEN BEGIN OF BLOCK BL4 WITH FRAME TITLE TEXT-004. PARAMETERS: S_RADIO3 RADIOBUTTON GROUP TTN, S_RADIO4 RADIOBUTTON GROUP TTN, S_RADIO5 RADIOBUTTON GROUP TTN. SELECTION-SCREEN END OF BLOCK BL4. SELECTION-SCREEN END OF SCREEN 0150.

    START-OF-SELECTION.

    CALL SELECTION-SCREEN 0150 STARTING AT 20 5 ENDING AT 90 15.

    ...

    Alm de surgir a janela padro de select-options, surgir uma nova janela modal a seguir:

    Pgina 50 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Criao de Listas Complexas

    At agora, as listas criadas apresentam um nvel de dados apenas, mas o ABAP tem recursos que permitem a exibio de listas de detalhe a partir de uma lista.

    O Evento AT LINE-SELECTION

    O processamento das listas de detalhe dentro do R/3 feito pelo evento AT LINE-SELECTION. O R/3 executa os comandos que houver dentro desse evento toda vez que o usurio clica duas vezes sobre uma linha em uma lista ouclica sobre um campo marcado com HOTSPOT, ou teclando-se F2 sobre um registro, ou escolhendo um boto que tenha o cdigo standard PICK a ele associado.

    HIDE

    Atravs do comando HIDE, possvel armazenar informao a respeito de uma linha para uso do evento AT LINE-SELECTION. Suponha que exista uma lista com os vos para uma determinada companhia area, e deseja-se exibir as reservas para aquele vo. Para exibir a lista, necessrio armazenar em algum local informaes sobre a linha selecionada pelo usurio, e isso pode ser feito atravs do comando HIDE do ABAP.

    O comando HIDE guarda a informao sobre os campos desejados, alm do nmero da linha que est sendo processada, em uma tabela interna, que automaticamente acessada no evento AT LINE-SELECTION. Veja o seguinte exemplo:

    REPORT ZTESTE. TABLES: SFLIGHT, SBOOK. START-OF-SELECTION. SELECT * FROM SFLIGHT. WRITE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE, SFLIGHT-SEATSOCC. HIDE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE. ENDSELECT. AT LINE-SELECTION. SELECT * FROM SBOOK WHERE CARRID = SFLIGHT-CARRID AND CONNID = SFLIGHT-CONNID AND FLDATE = SFLIGHT-FLDATE. WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID. ENDSELECT.

    Dentro desse programa, a cada linha lida no comando SELECT, est sendo armazenada informao sobre a chave dentro da rea de HIDE. No necessrio que os campos selecionados com HIDE faam parte da lista impressa via WRITE. Quando o usurio seleciona um determinado

    Pgina 51 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    registro, o processador de lista ABAP automaticamente procura na rea de HIDE o registro correspondente quele nmero de linha, e os disponibiliza para uso com o mesmo nome.

    Cabealhos de listas secundrias

    Para definir um cabealho prprio para listas secundrias, existe o evento TOP-OF-PAGE DURING LINE-SELECTION, que permite redefinir o cabealho e os comandos disponveis dentro da lista secundria. Por exemplo,

    REPORT ZTESTE NO STANDARD PAGE HEADING. TABLES: SFLIGHT, SBOOK. START-OF-SELECTION. ... TOP-OF-PAGE. SET PF-STATUS LISTA1. WRITE: Lista Primria. TOP-OF-PAGE DURING LINE-SELECTION. SET PF-STATUS LISTA2. WRITE: Lista Secundria. AT LINE-SELECTION. ...

    Listas em mais de dois nveis

    Quando a lista apresentar mais de dois nveis, necessrio identificar o nvel que est sendo processado s existe um evento AT LINE-SELECTION e um TOP-OF-PAGE DURING LINE-SELECTION por programa. Para tanto, deve-se utilizar o campo de sistema SY-LSIND, que tem o nvel corrente de lista. A primeira sub-lista tem SY-LSIND igual a 1, a segunda, 2, e assim por diante, at o subnvel mximo 19. Por exemplo:

    REPORT ZTESTE2N NO STANDARD PAGE HEADING. TABLES: SFLIGHT, SBOOK. START-OF-SELECTION. SELECT * FROM SFLIGHT. WRITE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE, SFLIGHT-SEATSOCC. HIDE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE. ENDSELECT. TOP-OF-PAGE. WRITE: Vos. TOP-OF-PAGE DURING LINE-SELECTION. CASE SY-LSIND. WHEN 1.

    Pgina 52 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    WRITE: Reservas. WHEN 2. WRITE: Cliente. ENDCASE. AT LINE-SELECTION. CASE SY-LSIND. WHEN 1. SELECT * FROM SBOOK WHERE CARRID = SFLIGHT-CARRID AND CONNID = SFLIGHT-CONNID AND FLDATE = SFLIGHT-FLDATE. WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID. HIDE: SBOOK-CUSTOMID. ENDSELECT. WHEN 2. SELECT * FROM SCUSTOM WHERE ID = SBOOK-CUSTOMID. WRITE: / SCUSTOM-ID, SCUSTOM-NAME. ENDSELECT. ENDCASE.

    AT USER-COMMAND

    O processamento de lista tambm pode ser feito atravs do evento AT USER-COMMAND. Nesse caso, ser feito o processamento dos comandos (menu, teclas de funo, botes da barra), alm do comando standard PICK.

    Abrindo Telas Dentro de Relatrios

    Uma lista secundria pode ser mostrada dentro de uma janela ao colocar-se a declarao WINDOW STARTING AT [ENDING AT ]. Os comandos WRITE subseqentes sero direcionados para a janela especificada. Por exemplo, alterando o cdigo da seguinte maneira, podemos criar janelas nas listas secundrias:

    AT LINE-SELECTION. CASE SY-LSIND. WHEN 1. WINDOW STARTING AT 5 3 ENDING AT 40 10. SELECT * FROM SBOOK WHERE CARRID = SFLIGHT-CARRID AND CONNID = SFLIGHT-CONNID AND FLDATE = SFLIGHT-FLDATE. WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID. HIDE: SBOOK-CUSTOMID. ENDSELECT. WHEN 2. WINDOW STARTING AT 45 10 ENDING AT 60 12. SELECT * FROM SCUSTOM WHERE ID = SBOOK-CUSTOMID. WRITE: / SCUSTOM-ID, SCUSTOM-NAME. ENDSELECT. ENDCASE.

    Pgina 53 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Chamando transaes a partir de listagens

    Para chamar uma transao a partir de uma listagem, pode-se utilizar o comando CALL TRANSACTION dentro do AT LINE-SELECTION, onde o cdigo da transao. Aps executar a transao, o controle de execuo passar para a linha seguinte ao CALL TRANSACTION.

    Pgina 54 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Exerccios de Fixao

    Segue abaixo um conjunto de exerccios prticos para aprimorar o aprendizado referente a:

    - O SAP Query

    - Definindo telas de seleo de parmetros

    - Criao de Listas Complexas

    Exerccio proposto:

    Exerccio 1

    1. Criar uma query, que exiba os CARRID, CONNID, CITYFROM, AIRPFROM, CITYTO e AIRPTO da tabela SPFLI.

    Exerccio 2

    1. Para o programa do exerccio anterior, criar uma tela de seleo similar a:

    Select-Options

    Parameters

    Sem extenso

    Obrigatrio

    Pgina 55 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Exerccio 3

    1. Fazer com que toda vez que o cursor do mouse passe sobre um campo da coluna Vo, tome a forma de uma mozinha.

    2. Exiba uma janela contendo o nome da empresa area, o nmero do vo, nome do aeroporto, cidade e horrio de sada do vo e nome do aeroporto, cidade e horrio de chagada do vo referente a linha clicada na tela.

    Pgina 56 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    Soluo:

    Exerccio 1

    1. Criar Grupo de Usurios:

    1.1. Acessar a transao SQ03. 1.2. Entrar o nome do Grupo de Usurios e teclar em CRIAR. 1.3. Atribuir usurios ao Grupo e Salvar.

    2. Criar a rea Funcional:

    2.2. Acessar a transao SQ02. 2.3. Entrar o nome da rea Funcional e teclar em CRIAR. 2.4. Entrar a Denominao e a primeira tabela que ser lida.

    Obs: No confundir Grupo de autorizao com Grupo de usurios. 2.5. A tela de juno de tabelas (JOIN) exibida, inserir as tabelas na ordem em que

    devem ser lidas. 2.6. Alterar a Condio Join, se necessrio, clicando com o boto direito do mouse.

    INNER: S lista o registro da Tabela direita se o registro da Tabela esquerda existir. Aps a concluso, Clicar F3 (Voltar).

    2.7. Voltando da tela de JOIN,

    2.8. Escolher: Criar Grupo de Campos Vazio.

    2.9. Eliminar os Grupos de campos.

    Obs: A SAP recomenda manter um Grupo de campos para cada tabela.

    2.10. Criar um novo Grupos de Campos. 2.11. Arrastar os campos desejados para o Grupo de campos. A ordem dos campos no

    importante. 2.12. Gerar e salvar.

    3. Atribuir a rea Funcional a um ou mais Grupos de Usurios:

    4.1. Acessar a transao SQ02. 4.2. Entrar o nome da rea Funcional e clicar sobre Atribuio a Grupos de Usurios. 4.3. Marcar os Grupos, salvar e sair.

    4. Criar a Query:

    4.1. Acessar a transao SQ01. 4.2. Entrar o nome da Query e clicar em CRIAR. 4.3. Escolher a rea Funcional que ser a base para a Query. 4.4. Entrar o Ttulo (que ser o ttulo do relatrio) e o nmero de colunas. 4.5. Clicar em Tela seguinte ou teclar F6. 4.6. Selecionar o Grupo ou os Grupos de campos que sero utilizados na Query.

    Pgina 57 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    OBS: Nem todos os Grupos de campos precisam ser utilizados. 4.7. Marcar os campos que sero Critrio de seleo.

    Pgina 58

    4.8. Indicar em que ordem os campos devem aparecer na tela de Seleo:

    I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    4.9. Neste ponto recomendvel salvar a Query e depois clicar em Lista bsica. 4.10. Indicar em que linha do relatrio cada campo deve ser exibido, em que seqncia,

    qual o critrio de ordenao e os campos que devem ser totalizados e contados.

    4.1. Salvar.

    Exerccio 2

    1. Entre no Editor de programas ABAP:

    Pelo menu: Ferramentas - Abap/Workbench - Editor Abap Pela transao: SE38

    2. Entre com o nome do Programa a ser alterado e, com o boto de rdio Cdigo Fonte selecionado, clique sobre o boto MODIFICAR.

    3. Na tela de edio do programa, para definir os smbolos de texto para o cabealho, entre na opo Saltar Elementos de Texto Smbolos de Texto e defina os smbolos com os textos:

    007 Relao de Vos

    008 Localidades

    Pgina 59 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    4. Inclua os parmetros como a seguir:

    TABLES: spfli. SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-007. SELECT-OPTIONS: s_carrid FOR spfli-carrid NO INTERVALS, s_connid FOR spfli-connid. SELECTION-SCREEN ULINE. SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-008. PARAMETERS: p_cityfr LIKE spfli-cityfrom, p_cityto LIKE spfli-cityto. SELECTION-SCREEN END OF BLOCK bl2. SELECTION-SCREEN END OF BLOCK bl1.

    Exerccio 3 1. Inclua a linha de comando HIDE, dentro do Looping de impresso dos registros:

    LOOP AT t_spfli. IF lc_cor = '1'. FORMAT COLOR 2 INTENSIFIED OFF. CLEAR lc_cor. ELSE. FORMAT RESET. lc_cor = '1'. ENDIF. WRITE: / t_spfli-carrid, t_spfli-connid, t_spfli-cityfrom, t_spfli-airpfrom, t_spfli-cityto, t_spfli-airpto, 60 ''. HIDE: t_spfli-carrid, t_spfli-airpfrom, t_spfli-cityfrom, t_spfli-deptime, t_spfli-airpto, t_spfli-cityto, t_spfli-arrtime. ENDLOOP.

    2. Inclua o evento AT SELECTION-SCREEN com o cdigo:

    AT LINE-SELECTION. WINDOW STARTING AT 5 3 ENDING AT 40 10. FORMAT COLOR 6 INTENSIFIED OFF. SELECT carrname FROM scarr INTO lc_name WHERE carrid = t_spfli-carrid. WRITE: / 'Empresa Area:', lc_name. ENDSELECT. FORMAT COLOR 2 INTENSIFIED ON. WRITE: / 'Vo Nmero :', t_spfli-connid, 35 ''. FORMAT COLOR 2 INTENSIFIED OFF. WRITE: / 'Partindo de :', 35 ''. FORMAT reset. SELECT name FROM sairport

    Pgina 60 I-PROVIDER

  • Int roduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

    INTO lc_name WHERE id = t_spfli-airpfrom. write: /3 'Aeroporto :', lc_name. endselect. WRITE: /3 'Cidade :', t_spfli-cityfrom. WRITE: /3 'Horrio :', t_spfli-deptime. FORMAT COLOR 2 INTENSIFIED OFF. WRITE: / 'Chegando em :', 35 ''. FORMAT reset. SELECT name FROM sairport INTO lc_name WHERE id = t_spfli-airpto. write: /3 'Aeroporto :', lc_name. endselect. WRITE: /3 'Cidade :', t_spfli-cityto. WRITE: /3 'Horrio :', t_spfli-arrtime.

    Pgina 61 I-PROVIDER

    IntroduoConhecimentos Bsicos sobre a Plataforma de Desenvolvimento ABAPO Repositrio do R/3O Dicionrio de Dados Exerccios de FixaoExerccio 1Exerccio 2Exerccio 1Exerccio 2

    Al, Mundo!Bibliotecas de FunesOs Criadores de Menus e Telas Exerccios de FixaoExerccio 2Exerccio 1Exerccio 2

    Criando Tabelas Internas e Estruturas Complexas de Armazenagem TemporriaO Open SQL SELECT: permite a leitura de dados do banco de dados. INSERT: insere dados no banco. UPDATE: atualiza dados. MODIFY: atualiza dados existentes ou os acrescenta caso no existam no banco. DELETE: apaga registros do banco de dados. OPEN CURSOR, FETCH, CLOSE CURSOR: respectivamente cria, l e fecha um cursor dentro do banco de dados. SELECT : Pode-se selecionar uma lista de campos a serem retornados, separados por espaos, ou o caractere * para retornar todos os campos disponveis. A opo SINGLE retorna somente um registro que atenda s restries impostas. Caso a tabela tenha sido declarada atravs de TABLES, automaticamente criada um registro na memria com o mesmo nome para manipul-la; caso o SELECT traga campos de mais de uma tabela, no possvel utilizar esse artifcio. Nesse caso, as tabelas no precisam ser declaradas em TABLES, mas a seleo dos campos deve separar o nome da tabela e o campo com um til (~). Exemplo: INTO [| TABLE ]: Permite armazenar o retorno numa tabela interna ou em campos definidos com o comando DATA. O uso de SELECT sem especificar SINGLE ou INTO TABLE exige o uso de ENDSELECT. FROM [[INNER|LEFT OUTER] JOIN , ..]: Especifica a origem dos dados. WHERE : A clusula WHERE especifica as condies de busca. Por exemplo, WHERE CARRID = AA faz com que apenas os registros em que o campo CARRID tenha contedo igual a AA sejam retornados.

    Criao de Listas Bsicas Exerccios de FixaoExerccio 1Exerccio 1

    O SAP QueryDefinindo telas de seleo de parmetrosCriao de Listas Complexas Exerccios de FixaoExerccio 1Exerccio 2Exerccio 31. Fazer com que toda vez que o cursor do mouse passe sobre um campo da coluna Vo, tome a forma de uma mozinha.Exerccio 1Exerccio 2Exerccio 3