Você está na página 1de 61

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

Introduo ...........................................................................................5 Composio ........................................................................................5 Como entender a apostila .......................................................................5 Conhecimentos Bsicos sobre a Plataforma de Desenvolvimento ABAP ................7 Caractersticas 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 caractersticas tcnicas das tabelas do R/3 ............................................ 13 Verificaes de chave externa (foreign keys) ............................................. 15 Processos de ajuste 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 Function 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 Extracts .......................................................................................... 29 O Open SQL ........................................................................................ 31 Comandos ........................................................................................ 31 Campos de sistema ............................................................................. 32

I-PROVIDER

Pgina

Introduo 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 Modificando o formato de exibio standard .............................................. 37 Posicionando os campos ....................................................................... 38 Especificando 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 entre o comando PARAMETERS e o comando SELECT-OPTIONS............. 45 Agrupando parmetros em bordas e melhorando o layout............................... 48 Modificando o programa para usar bordas.................................................. 48 Janelas adicionais de parmetros............................................................ 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 Dentro de Relatrios ......................................................... 53 Chamando transaes a partir de listagens ................................................ 54

I-PROVIDER

Pgina

Introduo 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 logotipo SAP e todos os outros servios e marcas da SAP so marcas registradas da SAP AG.

I-PROVIDER

Pgina

Introduo 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.

I-PROVIDER

Pgina

Introduo 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

I-PROVIDER

Pgina

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

Conhecimentos Bsicos sobre a Plataforma de Desenvolvimento ABAP

Camada de Apresentao (Front-end)

Camada de Aplicao

Programa ABAP

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.

I-PROVIDER

Pgina

Introduo 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

I-PROVIDER

Pgina

Introduo 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.

I-PROVIDER

Pgina

Introduo 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.

I-PROVIDER

Pgina

10

Introduo 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.

I-PROVIDER

Pgina

11

Introduo 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.

I-PROVIDER

Pgina

12

Introduo 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

I-PROVIDER

Pgina

13

Introduo 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.

I-PROVIDER

Pgina

14

Introduo 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.

I-PROVIDER

Pgina

15

Introduo 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 MOVECORRESPONDING, que o comando usado para fazer a movimentao dos dados da tabela

I-PROVIDER

Pgina

16

Introduo 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.

I-PROVIDER

Pgina

17

Introduo 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 MANDT WERKS MATNR DTFAB PRVAL Exerccio 2 Criar uma Viso para visualizar os dados da tabela criada no exerccio anterior. CH X X X Elem. Dados MANDT WERKS MATNR DATAB MHDHB Mandante Centro Material Data de incio de validade Prazo de validade

I-PROVIDER

Pgina

18

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

Soluo: Exerccio 1 1. Entre no Dicionrio de Dados: Pelo menu: Pela transao: 2. 3. 4. 5. 6. 7. 8. 9. Ferramentas - Abap/Workbench - Data Dictionary SE11

Selecione TABELA BANCO DE DADOS, digite o nome da tabela a ser criada e depois clique sobre o boto CRIAR. Entre com uma descrio breve e defina Categoria da Tabela e Classe de Entrega. Digite o nome dos campos, lembrando sempre de inserir os Campos Chave primeiro, marcando-os na coluna CHAVE, e defina seus Elementos de Dados. Salvar. Identifique a Classe de Desenvolvimento. Defina com as Opes Tcnicas, clicando sobre o boto OPES TCNICAS. Selecione o Tipo de Dados e Categor. Tamanho adequados para a tabela que est sendo criada. Saia da janela de Opes Tcnicas, Salve e Ative a tabela.

Exerccio 2 1. Entre no Dicionrio de Dados: Pelo menu: Pela transao: 2. 3. 4. 5. 6. 7. 8. 9. Ferramentas - Abap/Workbench - Data Dictionary SE11

Selecionando VISO, digite com o nome da Viso a ser criada e clique sobre o boto CRIAR, Selecione tipo de viso como VISO DE BANCO DE DADOS. Na pasta Tabelas/Condies Join, na coluna TABELAS, entre com o nome da tabela para a qual a viso ser criada. Passando para a pasta Cpos.Viso, acrescente os campos que devem ser visualizados, incluindo o campo mandante. Salve. Identifique a Classe de Desenvolvimento. Ative. Para visualizar os dados, no menu, selecione: Utilitrios - Contedo.

I-PROVIDER

Pgina

19

Introduo 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:

I-PROVIDER

Pgina

20

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

REPORT ZHELLO2. INCLUDE ZCODIGO. TABLES: DATA: SFLIGHT. CAMPO_1(7) CAMPO_2(4) IT_SFLIGHT WA_SFLIGHT TYPE TYPE LIKE LIKE C, N, TABLE OF SFLIGHT, 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.

I-PROVIDER

Pgina

21

Introduo 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.

I-PROVIDER

Pgina

22

Introduo 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.

I-PROVIDER

Pgina

23

Introduo 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 <nome>, onde <nome> 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 selectionscreens 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.

I-PROVIDER

Pgina

24

Introduo 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.

I-PROVIDER

Pgina

25

Introduo 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 Entre com o nome do Programa a ser criado e, com o boto de rdio Cdigo Fonte selecionado, clique sobre o boto CRIAR. Na janela de Atributos do Programa, digite o ttulo do programa e defina o tipo de programa como Programa Executvel e a Aplicao. Identifique a Classe de Desenvolvimento. Na janela do editor, digite o cdigo:
REPORT HELLO. DATA: WRITE: WRITE: WRITE: lc_frase1(26) type c, lc_frase2(24) type c. / / / 'Al, Mundo!'. lc_frase1. lc_frase2.

2. 3. 4. 5.

Exerccio 2 1. Entre no Menu Painter: Pelo menu: Ferramentas - Abap/Workbench Menu Painter Pela transao: SE41 Na caixa programa, digite o nome do programa para o qual ser criada a barra de menus. Selecione STATUS, digite o nome do menu a ser criado e clique sobre o boto CRIAR. Entre com a descrio do Menu. Na linha Barra de Menu, clique sobre o boto para incluir o menu. Digite nome que se quer que aparea na barra de menu, no caso do exerccio: Relatrio. Clique duas vezes sobre a palavra Relatrio. Para inserir os itens do menu. 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. 10. Salve e Ative. Entre no Editor de programas ABAP: Pelo menu: Ferramentas - Abap/Workbench - Editor Abap Pela transao: SE38

2. 3. 4. 5. 6. 7. 8.

I-PROVIDER

Pgina

26

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

11. 12.

Digite o nome do Programa do exerccio anterior, com o boto de rdio Cdigo Fonte selecionado, clique sobre o boto MODIFICAR. Faa a chamada do menu, digitando, no cdigo do programa ABAP, o comando SET PF-STATUS <nome>, onde <nome> o nome do menu criado na transao SE41.

I-PROVIDER

Pgina

27

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

Criando Tabelas Internas e Estruturas Complexas de Armazenagem Temporria


REPORT ZTABELAINTERNA. TYPES: BEGIN OF MYSTRUCT, CARRID CONNID FLDATE LIKE SPFLI-CARRID, LIKE SPFLI-CONNID, 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

I-PROVIDER

Pgina

28

Introduo 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.

I-PROVIDER

Pgina

29

Introduo 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 <nome field-group> para cada quebra de tipo de registro.

I-PROVIDER

Pgina

30

Introduo 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:

I-PROVIDER

Pgina

31

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

SELECT: INSERT: UPDATE: MODIFY: DELETE:

permite a leitura de dados do banco de dados. insere dados no banco. atualiza dados. atualiza dados existentes ou os acrescenta caso no existam no banco. 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 SYSUBRC, 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 <lista de campos>: 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

I-PROVIDER

Pgina

32

Introduo 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 [<lista de campos>| TABLE <tabela interna>]: 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 <tabela> [[INNER|LEFT OUTER] JOIN <tabela>, ..]: Especifica a origem dos dados. WHERE <condies>: 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:

I-PROVIDER

Pgina

33

Introduo 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.

I-PROVIDER

Pgina

34

Introduo 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 [:] [/] [<campo>|<literal>] [, <campo>|<literal>] [, ...] [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:

I-PROVIDER

Pgina

35

Introduo 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:

I-PROVIDER

Pgina

36

Introduo 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.

I-PROVIDER

Pgina

37

Introduo 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.

I-PROVIDER

Pgina

38

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

Um trecho do report seria:


150420 ITL 130520 ITL Sem CURRENCY: Sem CURRENCY: 683.231,44 318.202,60 Com CURRENCY: Com CURRENCY: 68.323.144 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 <classe> 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.

I-PROVIDER

Pgina

39

Introduo 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. ID Num. RELAO DE VOS Partindo de Aer. Pousando em Aer.

I-PROVIDER

Pgina

40

Introduo 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 Entre com o nome do Programa a ser criado e, com o boto de rdio Cdigo Fonte selecionado, clique sobre o boto CRIAR. Na janela de Atributos do Programa, digite o ttulo do programa e defina o tipo de programa como Programa Executvel e a Aplicao. Identifique a Classe de Desenvolvimento. 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.

2. 3. 4. 5.

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


DELETE t_spfli WHERE cityfrom = 'SINGAPORE'.

I-PROVIDER

Pgina

41

Introduo 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 002 003 004 005 006 RELAO DE VOS ID Num. Partindo de Aer. Pousando em

2. 3.

Salve os textos e Ative. Na tela de edio do programa, entre a declarao da tabela interna e o evento STARTOF-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.

I-PROVIDER

Pgina

42

Introduo 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.

I-PROVIDER

Pgina

43

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

Exemplo: Produtos Acabados sem Listas Tcnicas

Pontos Positivos Possibilita criar relatrios rapidamente sem a necessidade de criar programas em ABAP. Os relatrios podem ser criados por usurios finais. Facilidades e recursos na sua criao e utilizao.

Pontos Negativos Baixa performance se comparado com programas ABAP. Limitaes para relatrios que exigem a leitura de muitas tabelas. No possvel programao. incluir lgica de

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.

I-PROVIDER

Pgina

44

Introduo 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 CONNID LIKE FLDATE LIKE SEATSOCC LIKE SEATSMAX LIKE SEATFREE LIKE END OF MYSTRUCT. DATA: SPFLI-CARRID, SPFLI-CONNID, SFLIGHT-FLDATE, SFLIGHT-SEATSOCC, SFLIGHT-SEATSMAX, SFLIGHT-SEATSMAX,

MYTABLE TYPE STANDARD TABLE OF MYSTRUCT WITH NON-UNIQUE KEY CARRID CONNID WITH HEADER LINE. S_CARRID FOR SPFLI-CARRID, S_CONNID FOR SPFLI-CONNID. S_CHECK S_RADIO1 S_RADIO2 S_RADIO3 S_RADIO4 S_RADIO5 AS CHECKBOX, RADIOBUTTON GROUP RADIOBUTTON GROUP RADIOBUTTON GROUP RADIOBUTTON GROUP RADIOBUTTON GROUP RAD, RAD, TTN, TTN, TTN.

SELECT-OPTIONS: PARAMETERS:

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.

I-PROVIDER

Pgina

45

Introduo 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 I NE BT DL 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).

I-PROVIDER

Pgina

46

Introduo 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.

I-PROVIDER

Pgina

47

Introduo 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.

I-PROVIDER

Pgina

48

Introduo 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 selectoptions e parameters dentro das declaraes SELECTION-SCREEN BEGIN OF SCREEN <nmero da tela> e SELECTION SCREEN END OF SCREEN <nmero da tela>. 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: ...

I-PROVIDER

Pgina

49

Introduo 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 PARAMETERS: S_RADIO3 RADIOBUTTON S_RADIO4 RADIOBUTTON S_RADIO5 RADIOBUTTON SELECTION-SCREEN END OF BLOCK BL4. SELECTION-SCREEN END OF SCREEN 0150. TITLE GROUP GROUP GROUP TEXT-004. TTN, TTN, TTN.

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:

I-PROVIDER

Pgina

50

Introduo 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 LINESELECTION. 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

I-PROVIDER

Pgina

51

Introduo 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 LINESELECTION 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.

I-PROVIDER

Pgina

52

Introduo 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 <col> <lin> [ENDING AT <col> <lin>]. 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.

I-PROVIDER

Pgina

53

Introduo 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 <codtran> dentro do AT LINE-SELECTION, onde <codtran> o cdigo da transao. Aps executar a transao, o controle de execuo passar para a linha seguinte ao CALL TRANSACTION.

I-PROVIDER

Pgina

54

Introduo 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

I-PROVIDER

Pgina

55

Introduo 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.

I-PROVIDER

Pgina

56

Introduo 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.

I-PROVIDER

Pgina

57

Introduo 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.

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

I-PROVIDER

Pgina

58

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

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.9.

4.1. Salvar.

Exerccio 2 1. Entre no Editor de programas ABAP: Pelo menu: Ferramentas - Abap/Workbench - Editor Abap Pela transao: SE38 Entre com o nome do Programa a ser alterado e, com o boto de rdio Cdigo Fonte selecionado, clique sobre o boto MODIFICAR. 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 008 Relao de Vos Localidades

2. 3.

I-PROVIDER

Pgina

59

Introduo 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

I-PROVIDER

Pgina

60

Introduo aos Conceitos de Desenvolvimento e Customizao de Relatrios

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

SELECT name FROM sairport INTO lc_name WHERE id = t_spfli-airpto. write: /3 'Aeroporto :', lc_name. endselect. WRITE: /3 'Cidade WRITE: /3 'Horrio :', t_spfli-cityto. :', t_spfli-arrtime.

I-PROVIDER

Pgina

61