ABAP_02

24
Documentação ABAP/4 1 CONCEITOS.................................................................. 2 1.1 ERP – ENTERPRISE RESOURCE PLANNING...........................................2 1.2 SAP R/3.................................................................2 1.3 HIERARQUIA - CLIENT / MANDANTE..............................................3 1.4 CLIENT DEPENDENTE E CLIENT INDEPENDENT........................................3 1.5 INSTÂNCIA.................................................................3 1.6 REQUEST..................................................................3 1.7 APLICAÇÃO DE NOTAS / HOT PACKAGE............................................3 1.8 INTERFACES BATCH E CONVERSÃO DE DADOS.........................................4 1.9 BASIS....................................................................5 1.10 CONTEXTO DO USUÁRIO........................................................5 1.11 ÁREA DE ROLAGEM........................................................... 5 1.12 PASSO DE DIÁLOGO...........................................................5 1.13 ROLL IN / ROLL OUT........................................................5 2 DICIONÁRIO DE DADOS........................................................ 6 2.1 TABELA...................................................................6 2.2 ELEMENTO DE DADOS..........................................................7 2.3 DOMÍNIO..................................................................7 3 ABAP/4..................................................................... 7 3.1 VARIÁVEIS DO SISTEMA....................................................... 7 3.2 FUNÇÕES..................................................................7 3.3 ALGUNS TIPOS DE SELECT......................................................7 3.4 PROGRAMA REPORT........................................................... 9 3.5 PROGRAMA ON-LINE......................................................... 10 4 DICAS..................................................................... 10 4.1 DICAS DE PERFORMANCE...................................................... 10 4.2 DICAS GERAIS PARA OTIMIZAÇÃO DE PROGRAMA......................................14 5 FERRAMENTAS E UTILITÁRIOS DO SISTEMA......................................15 Fiat Automóveis S/A 1

description

ABAP_02

Transcript of ABAP_02

1 Conceitos

Documentao ABAP/4

21Conceitos

1.1ERP Enterprise Resource Planning21.2SAP R/321.3Hierarquia - Client / Mandante31.4Client Dependente e Client Independent31.5Instncia31.6Request31.7Aplicao de Notas / Hot Package31.8Interfaces Batch e Converso de Dados41.9Basis51.10Contexto do usurio51.11rea de rolagem51.12Passo de dilogo51.13Roll in / Roll out52Dicionrio de Dados62.1Tabela62.2Elemento de Dados72.3Domnio73ABAP/473.1Variveis do sistema73.2Funes73.3Alguns tipos de select73.4Programa Report93.5Programa On-line104Dicas104.1Dicas de performance104.2Dicas gerais para otimizao de programa145Ferramentas e Utilitrios do sistema15

1 Conceitos

1.1 ERP Enterprise Resource Planning

ERP definido como uma arquitetura de software que facilita o fluxo de informaes entre todas as atividades da empresa como fabricao, logstica, finanas e recursos humanos. um sistema amplo de solues e informaes. Um banco de dados nico, operando em uma plataforma comum que interage com um conjunto integrado de aplicaes, consolidando todas as operaes do negcio em um simples ambiente computacional. Idealmente, a vantagem de um sistema ERP a habilidade de necessitar a entrada de informaes uma nica vez. Por exemplo, um representante de vendas grava um pedido de compra no sistema ERP da empresa. Quando a fbrica comea a processar a ordem, o faturamento e a expedio podem checar o status da ordem de produo e estimar a data de embarque. O estoque pode checar se a ordem pode ser suprida pelo saldo e podem ento notificar a produo com uma ordem que apenas complemente a quantidade de itens requisitados. Uma vez expedida, a informao vai direto a relatrio de vendas para gerenciamento superior.

O ERP emprega a tecnologia cliente/servidor. Isto significa que o usurio do sistema (cliente) roda uma aplicao (rotina de um mdulo do sistema) que acessa as informaoes de um sistema de gerenciamento de uma base de dados nica (servidor). Isto, ao contrrio do antigo sistema de mainframe, reflete o conceito de computao descentralizada.

O sistema opera ento com uma base de dados comum, no corao do sistema. O banco de dados interage com todos o aplicativos do sistema, desta forma, elimina-se a redundncia e redigitao de dados, o que assegura a integridade das informaes obtidas.

Cada sistema de ERP oferece um conjunto de mdulos (aplicativos) para aquisio. Estes so os pacotes funcionais, individualizados para cada unidade de negcio dentro da organizao (financeiro, engenharia, PCP, administrao de materiais, contabilidade, etc.).

Muitos sistemas ERP so comercializados em um pacote com os mdulos bsicos para a gesto do negcio e ento oferecem mdulos adicionais que podem ser adquiridos individualmente em funo do interesse e estratgia da empresa. Todos esses aplicativos so completamente integrados a fim de propiciar consistncia e visibilidade para todas as atividades inerentes ao processo da organizao. Entretanto, o sistema ERP requer do usurio o cumprimento dos procedimentos e processos como descrito pelo aplicativo.

Os vendedores de ERP tambm oferecem aplicativos especializados em gerir processos diferenciados de atividades especficas. Tais mdulos atendem a mercados verticais assim como reparties pblicas, planos de sade, financeiras, etc. Por exemplo a empresa SAP, oferece um mdulo especfico para o gerenciamento de planos de sade e convnios, que apoiam processos orientados ao paciente dentro do hospital.

A tendncia atual mostra as vendas movendo-se mais ainda para reas especficas assim como gerenciamento do cho-de-fbrica, logstica e automao de marketing direto.

1.2 SAP R/3

O R/3 trabalha com uma filosofia de cliente/servidor de 3 camadas.

Database Server: Responsvel pelo acesso e pela atualizao dos dados.

Application Server: Responsvel pelo processamento da aplicao, isto , interpretao de comandos

Abap/4.

Frontend: Responsvel pelo processamento da interface com usurio.

O R/3 dividido em mdulos funcionais abrangendo as principais reas de uma empresa.

Os principais mdulos so:

SD Gesto de Pedidos de Clientes

MM Administrao de Materiais

FI Finanas

PP Manufatura pata Indstria Discreta e de Processo

CO Controlling

HR Recursos Humanos

PM Manuteno

1.3 Hierarquia - Client / Mandante

A base estrutural do SAP para se conseguir informaes gerenciais que reflitam o negcio da companhia, com influncia nas operaes e segurana de dados. O Client ou Mandante, representa o mais alto nvel hierrquico do sistema, sendo o objeto chave de integrao de todos os nveis e elementos da hierarquia no SAP. Posiciona-se como uma unidade independente com arquivos principais e tabelas prprias.

1.4 Client Dependente e Client Independent

Estes conceitos esto ligados a estrutura de dados do sistema, tabelas e relacionamentos. Deve-se entender que Client Dependent so tabelas ligadas a um nico Mandante, isto , uma determinada tabela somente vlida para o ambiente mandante no qual se efetuou o login.

Deve-se entender que Client Independent so tabelas que no esto ligadas a um Mandante especfico, isto , uma determinada tabela vlida para todos os Mandantes de uma Instncia.

Na prtica estes conceitos so caracterizados pelo primeiro campo de uma tabela. Para uma tabela Client Dependent este campo sempre do tipo CLNT, com tamanho de 03 posies e por conveno sempre identificado como MANDT. Se o primeiro campo no for do tipo CLNT, a tabela Client Independent.

1.5 Instncia

Instncia o termo utilizado para descrever um Servidor de Aplicativos. Para descrever um Servidor de Banco de Dados utiliza-se o termo Instncia Central.

1.6 Request

Funcionalidade utilizada para registrar todas as modificaes feitas em objetos desenvolvidos e/ou customizados. Estas modificaes so organizadas em tarefas e transportadas entre ambientes do SAP R/3, aps a liberao do processo de Change Request. Associando objetos Request, assegura-se que todas as modificaes feitas no Abap Workbenck sero registradas, possibilitando inclusive o controle das diversas verses de um objeto.

1.7 Aplicao de Notas / Hot Package

Nota um procedimento de atualizao de cdigos no pacote Standard do SAP para correo de funcionalidades. A aplicao de notas efetuada sempre que for necessrio a correo de algum problema do SAP, e normalmente orientado pela prpria SAP. O Hot Package um conjunto de notas, que so colocadas em um nico pacote visando uma soluo mais completa.

1.8 Interfaces Batch e Converso de Dados

Direct Input - um dos mtodos para transferncia de dados do sistema legado para o sistema R/3. considerado o mtodo mais rpido. Um arquivo sequencial no formato texto gerado para processamento por alguns function modules especiais. Estas funes executam todas as checagens normais para garantir a integridade de dados. Quando os registros so processados com sucesso, eles so gravados diretamente nas correspondentes tabelas do banco de dados da aplicao. Na ocorrncia de erros, os dados errados so passados para uma rotina de manuseio de exceo. O gargalo associado com o processamento do dialog e update so eliminados neste caso. Para todas as necessidades de transferncia de dados, especialmente com transaes de alto volume, o direct input o mtodo mais indicado. Nota: este mtodo deveria ser usado em todas as situaes nas quais funes de aplicao utilizando esta tecnologia existam.

Call Transaction - o prximo mtodo mais rpido para processamento de dados do sistema legado para o sistema R/3. Neste caso, o programa de transferncia processa os dados do arquivo sequencial e chama a transao desejada usando um comando Abap. Dados de um arquivo sequencial so processados via telas de aplicao para uma nica transao. A lgica de aplicao executa todos os checks e a validao dos dados. Este um processamento sncrono. Quando o processamento do dialog realizado com sucesso, o processamento do update chamado pela aplicao correspondente para executar todas as solicitaes do banco de dados. A escolha pode ser feita entre update sncrono ou assncrono. Nenhum protocolo de erros ou sada para lidar com os erros fornecida por esta tcnica. responsabilidade do programador da aplicao incorporar rotinas de execuo e funes dos protocolos desejados como parte do programa de transferncia de dados. A nossa recomendao usar o mtodo Call Transaction em todos os casos em que no existe um programa Direct Input. Somente em situaes de lidar com erros ns recomendamos que o batch-input tradicional seja realizado para posterior processamento. Resumo: em contraste com o Batch-Input, o Call Transaction permite que sejam passados dados diretamente ao dialog interface sem usar uma fila. Para armazenar estes dados temporariamente, voc usa uma internal table (uma tabela BDC, a qual tem a mesma estrutura daquela utilizada no batch-input). Antes de inputar dados na BDC table necessrio fazer um ckeck nos dados.

Batch Input - Tem sido tradicionalmente selecionado como um mtodo de implementao de programas de transferncia de dados. Um benefcio que este mtodo traz sobre o Call Transaction que o batch-input tem um utilitrio responsvel pela administrao e gerenciamento das funes do batch-input. Alm do mais, utilitrios existem para monitorar e dar manuteno em tarefas associadas com este mtodo. Assim, no h necessidade de nenhuma programao adicional para anlise de excees e funes de protocolo. Dados vindos de um arquivo sequencial so processados via telas de aplicao e armazenados numa sesso batch-input. Por definio, uma sesso uma coleo de dados de transao para uma ou mais transaes. As sesses batch-input so fisicamente armazenadas pelo sistema num banco de dados como uma fila. Estas sesses podem conter tanto registros de dados corretos quanto incorretos. O batch-input trata tanto o update sncrono como o assncrono. O mtodo batch-input, em contraste com o mtodo Call Transaction, pode transferir dados do sistema legado para o sistema R/3 para mltiplas transaes da aplicao. Todavia, nenhuma nova transao startada at que a transao anterior tenha sido gravada no correspondente banco de dados durante o processamento das sesses de batch-input. Tambm, sesses de batch-input no podem ser geradas em paralelo. Ele pode ser processado de trs modos: foreground, display erros only ou background. Este mtodo oferece excelente capacidade para gerenciamento de erros e detalhado para anlise do protocolo da transao. Resumo: gerado um log e pode ser programada a execuo. Em caso de erro, o registro pode ser corrigido e inserido novamente. Atravs deste recurso, todos os dados so inputados na transao original SAP, ou seja, seguindo todas as consistncias necessrias, evitando assim que erros de integridade sejam cometidos.

1.9 Basis

Principais atividades e caractersticas de um profissional Basis:

Executar as tarefas peridicas de administrao do sistema.

Executar tarefas especiais de administrao do R/3 incluindo anlise de erros.

Executar as tarefas principais de administrao do R/3 .

Conhecer o desempenho, monitoramento e configurao do R/3 .

Conhecer a metodologia, conceitos e ferramentas da logstica do software R/3.

Executar tarefas de desenvolvimento e manuteno da infra-estrutura do sistema R/3.

Conhecer os conceitos e ferramentas utilizados na manuteno e transporte de objetos.

Entender o uso do sapdba do R/3 e ferramentas para administrao do banco de dados.

Desenvolver estratgias para backup e recuperao de dados.

Anlise e ajuste do desempenho do banco de dados .

Avaliar riscos de segurana dentro de uma instalao de R/3.

Descrever as relaes existentes entre objetos de autorizao, profiles de autorizao e usurios.

Processo de criao de usurios.

Habilitar a criao de autorizaes e perfis de autorizaes.

Utilizao de ferramentas que auxiliam na identificao de autorizaes necessrias para a criao de um perfil que se adapte exatamente s restries de acesso

1.10 Contexto do usurio

a memria alocada que contm as caractersticas de um usurio que est conectado ao sistema R/3. Ele armazena as informaes necessrias para o R/3 sobre o usurio (configuraes, autorizaes do usurio, nome dos programas que esto sendo executados pelo usurio). No momento em que efetuado o logon, um contexto do usurio alocado. No logoff, o contexto liberado.

1.11 rea de rolagem

a memria alocada por um processo de trabalho para uma instncia de um programa. Armazena informaes necessrias para o R/3 sobre a execuo do programa (valores das variveis, alocaes de memria dinmica, ponteiro do programa atual). Toda vez que um usurio inicia um programa, uma rea de rolagem criada para essa instncia do programa. Se dois usurios utilizarem o mesmo programa simultaneamente, existiro duas reas de rolagem. A rea de rolagem liberada quando o programa encerrado.

1.12 Passo de dilogo

Serve como uma unidade de medida para o tempo de resposta do sistema. o processamento necessrio para sair de uma tela para a prxima. Inclui todo o processamento que ocorre desde que o usurio faz uma solicitao at, e incluindo, o processamento necessrio para exibir a prxima tela. Existem quatro maneiras de se iniciar um passo de dilogo no SAPGUI (software do servidor de apresentao):

Pressionar Enter;

Pressionar uma tecla de funo;

Dar um clique em um boto na tela;

Escolher um item de menu.

1.13 Roll in / Roll out

Um programa ABAP/4 ocupa apenas um processo de trabalho para um passo de dilogo. No comeo do passo, a rea de rolagem e o contexto do usurio so copiados (roll in) para o processo de trabalho. No fim do passo de dilogo, eles so retirados do processo de trabalho (roll out).

Durante o roll in, os ponteiros para a rea de rolagem e o contexto do usurio so ocupados no processo de trabalho. Isso permite ao processo de trabalho acessar os dados nessas reas e ento executar processamento para esse usurio e tal programa. O processamento continua at o programa enviar uma tela ao usurio. Nesse momento, as duas reas sofrem roll out, invalidando os ponteiros e desassociando essas reas do processo de trabalho, que agora est livre para executar processamento para outra solicitao. O programa est no momento apenas ocupando memria e no consome nada da CPU, at que seja enviada da tela uma nova solicitao.

2 Dicionrio de Dados

2.1 Tabela

H no dicionrio de dados do R/3 trs tipos de tabelas: Transparentes, Pool e Cluster. O primeiro tipo o mais comum e provavelmente sempre ser o tipo a ser utilizado ao se criar uma nova tabela em customizaes do sistema. Pool e cluster so tipos de armazenamentos proprietrios da SAP. Segue abaixo uma comparao entre os trs tipos de tabela:

Transparente: Uma tabela transparente no dicionrio tem relacionamento um-para-um com uma tabela no banco de dados. Sua estrutura no dicionrio de dados do R/3 corresponde a uma nica tabela de banco de dados. Para cada definio de tabela transparente no dicionrio, h uma tabela associada no banco de dados. A tabela de banco de dados tem o mesmo nome, o mesmo nmero de campos e os campos tm os mesmos nomes que a definio de tabela do R/3. Quando examinar a definio de uma tabela transparente do R/3, voc pode achar que est olhando para a prpria tabela de banco de dados. Pool: Uma tabela de pool no R/3 tem um relacionamento muitos-para-um com uma tabela no banco de dados. Para uma tabela no banco de dados, h muitas tabelas no dicionrio de dados do R/3. A tabela no banco de dados tem um nome diferente do das tabelas no dicionrio de dados, tem um nmero de campos diferente e os campos tambm tm nomes diferentes. O R/3 utiliza pools de tabela para armazenar um grande nmero (dezenas a milhares) de tabelas muito pequenas (aproximadamente de 10 a 100 linhas cada uma). Os pools de tabela reduzem a quantidade de recursos de banco de dados necessrios quando muitas tabelas pequenas tm de ser abertas ao mesmo tempo. A SAP os utiliza para dados de sistema. Cluster: So utilizadas para armazenar dados de algumas (aproximadamente de 2 a 10) tabelas muito grandes. As tabelas de cluster seriam utilizadas quando essas tabelas tivessem uma parte de suas chaves primrias em comum e se os dados nessas tabelas fossem todos acessados simultaneamente. Os clusters de tabela contm menos tabelas que os pools de tabela e, diferente dos pools de tabela, a chave primria de cada tabela dentro do cluster de tabelas comea com o mesmo campo ou campos. As linhas das tabelas de cluster so combinadas em uma nica linha no cluster de tabelas. As linhas so combinadas com base na parte da chave primria que elas tm em comum. Assim, quando uma linha lida de qualquer uma das tabelas no cluster, todas as linhas relacionadas em todas as tabelas de cluster tambm so recuperadas, mas apenas uma nica operao de I/O necessria. Um cluster vantajoso no caso em que os dados so acessados a partir de mltiplas tabelas simultaneamente e essas tabelas tm pelo menos um de seus campos de chave primria em comum. As tabelas de cluster reduzem o nmero de leituras do banco de dados e assim melhoram o desempenho.As tabelas de pool e de cluster so normalmente utilizadas somente pela SAP e no pelos desenvolvimentos dos clientes, provavelmente por causa do formato proprietrio dessas tabelas dentro do banco de dados e por causa das restries tcnicas colocadas sobre sua utilizao dentro dos programas ABAP/4, como a seguir:

No se pode criar ndices secundrios;

No se pode utilizar select distinct ou group by;

No se pode utilizar SQL nativo;

No se pode especificar nomes de campos depois da clusula order by. A nica variao permitida order by primary key.

No caso especfico das tabelas de cluster, no possvel realizar leitura atravs de joins, nem a criao de views.

2.2 Elemento de Dados

Contm os rtulos de campo e a documentao on-line (ajuda F1) para o campo. Ele puramente descritivo, contm as caractersticas semnticas para o campo, tambm conhecidas como contexto do negcio. Os rtulos que voc oferece dentro de um elemento de dados sero exibidos na tela ao lado de um campo de entrada. O elemento de dados tambm contm documentao que exibida quando o usurio pede ajuda nesse campo pressionando a tecla F1.

2.3 Domnio

Contm a caracterstica tcnica de um campo, como o comprimento do campo e o tipo de dado.

Tanto o domnio quanto o elemento de dados so objetos independentes que podem ser utilizados em diversos campos de diversas tabelas. Deve-se porm, tomar as devidas precaues quando da atribuio destes objetos aos campos de tabelas, uma vez que a alterao de um elemento de dados ou de um domnio implica na alterao das caractersticas de todos os campos que estejam utilizando este(s) objetos(s) alterados.

3 ABAP/4

3.1 Variveis do sistema

As variveis do sistema esto agrupadas na estrutura SYST, bastando, portanto, exibir esta estrutura atravs do Dicionrio de Dados do R/3 (transao SE11), para que se tenha uma lista completa das mesmas. Dentro do programa, deve-se referenci-las por nomeestrutura-nomevarivel, onde no nome da estrutura pode-se utilizar syst- ou somente sy-, sendo mais usual a segunda forma. Exemplo: A varivel que contm a data do sistema a syst-datum ou simplemente sy-datum.

3.2 Funes

Funes so objetos externos aos programas e executam tarefas especficas. So construdas de forma a permitir sua utilizao por diversos programas do sistema. Valores podem ser passados s funes atravs dos parmetros de exportao (do ponto de vista do programa chamador) e o resultado devolvido atravs dos parmetros de importao (idem observao anterior). O R/3 possui inmeras funes standards que podem ser aproveitadas para utilizao em programas desenvolvidos pelos clientes. Para conhec-las, necessrio utilizar-se da transao SE37 (Function Builder) do ABAP Workbench. Atravs desta transao, podemos criar, modificar e exibir a interface e o texto fonte das funes e at mesmo, realizar uma execuo de teste, onde pode-se entrar manualmente com valores para os parmetros da funo e observar seu resultado.

3.3 Alguns tipos de select

Select * seleciona todas as colunas de uma tabela. melhor sempre especificar as colunas, pois em caso de tabelas com muitas colunas, prejudicar a performance.

Select single * sempre deve ser utilizado com chave completa especificada. Particularidade do Abap/4.

SELECT FROM INTO TABLE .

A estrutura da tabela interna deve corresponder estrutura da tabela que est sendo acessada. O sistema l os registros em conjunto, no individualmente, e os coloca dentro de uma internal table. Este processo mais rpido que ler individualmente atravs de um LOOP e ir gravando os registros, um a um.

SELECT * FROM APPENDING TABLE .

L os registros e os inclui - no sobrepe - em uma internal table.

SELECT INTO CORRESPONDING FIELDS OF TABLE .

Neste caso a estrutura da tabela interna no precisa corresponder estrutura da tabela que est sendo acessada. Movimentar os registros para as colunas definidas na internal table que possuam nome igual ao da tabela acessada.

Obs.: corresponding ou appending corresponding no exigem o endselect.

SELECT APPENDING CORRESPONDING FIELDS OF TABLE .

L e grava (no sobrepe) os dados em uma internal table que possua nomes idnticos aos nomes da tabela que est sendo lida.

SELECT SINGLE * FROM SPFLI WHERE .... EQ .

Toda vez que se usa select single * a chave primria completa deve ser especificada. Se a chave especificada no qualificada, voc receber uma mensagem de warning e a performance ficar prejudicada. No caso de haver a necessidade de acessar um nico registro via select, as opes so: select * .. seguido de comando exit OU select * up to 1 row. Neste caso no necessrio especificar a chave completa.

SELECT * FROM .

Quando no se impe nenhum tipo de restrio, ocorre uma varredura sequencial dos registros da tabela. Quando se utiliza grandes tabelas, isso obviamente afeta o runtime.

SELECT * FROM WHERE eq .

L todos os registros da tabela especificada onde o campo igual ao contedo especificado. O ideal que se qualifique a clusula WHERE tanto mais quanto seja possvel. Atentar que isso vlido para tabelas do tipo Pool e Transparent. Para tabelas de Cluster, na clusula WHERE deve constar apenas os campos chaves e os demais campos devem ser checados atravs do comando CHECK.

SELECT INTO (, , ) FROM... WHERE

L as colunas especificadas (a1, a2). Aps INTO devero ser especificadas as reas de trabalho auxiliares (f1, f2). O nmero de colunas lidas dever ser igual ao nmero de work-areas especificadas.

SELECT * FROM WHERE BETWEEN and .

Ex.: field1 = 100 e field2 = 500. Pega inclusive 100 e 500. Voc trabalha com o range.

SELECT * FROM WHERE LIKE ._A%.

_ : na primeira posio no importa o contedo

neste exemplo, a segunda dever ser A

% : no importa a sequncia de caracteres que vir.

SELECTMAX(campo)

MIN(campo)

AVG(campo)

COUNT(*)

FROM INTO (..,,..,.)

WHERE .

AVG e SUM: somente para campos numricos.

No se usa endselect.

SELECT * FROM WHERE IN (.,.).

Exemplo: select * from where campo1 in (123,1000) - podem ser valores ou literais.

SELECT * FROM WHERE IN .

Exemplo:

DATA: begin of ITAB occurs 10,

sign(1),

option(2),

low like sflight-price,

high like sflight-price,

end of ITAB.

* RANGES: ITAB for sflight-table

Move: I to itab-sign, bt to itab-option, 500 to itab-low, 1000 to itab-high.

Append itab.

Move: I to itab-sign, bt to itab-option, 440 to itab-low.

Append itab.

SELECT * FROM () INTO .

Exemplo:

data: begin of WA,

line(100),

end of WA.

SELECT * FROM (tabname) INTO WA

Write .

ENDSELECT.

Parameters: tabname(10) default SPFLI.

Obs.: especificando o nome da tabela dinamicamente no select statement sempre consome mais tempo de CPU que especificando estaticamente no programa.

SELECT * FROM FOR ALL ENTRIES IN

WHERE campo1 = and campo2 =

Define-se uma tabela interna e alimenta-se os seus campos (move e append). No select, campo1 e campo2 sero os campos definidos e alimentados na tabela interna.

Esta uma excelente soluo quando se trabalha com grandes tabelas.

O select for all entries simula a funcionalidade join.

SELECT * FROM ORDER BY PRIMARY KEY.

Obs: Classifica a tabela interna numa rea auxiliar, sem afetar a tabela original. Evitar o uso de sorts dentro de um select. Consome mais tempo que descarregar os dados em uma tabela interna e classific-los.

SELECT carrid MIN( price ) max( price ) INTO (carrid, minimum, maximum)

FROM sflight

GROUP BY carrid.

(Todos os campos que devem aparecer na lista precisam ser especificados aps a clusula GROUP BY. Carrid, maximum e minimum so campos auxiliares. Se o nome do database no conhecido at runtime no se pode especificar a clusula GROUP BY).

Performance no to boa (funes MIN, MAX, etc. geram uma varredura sequencial na tabela).

3.4 Programa Report

Programas do tipo report so geralmente utilizados para listas (relatrios) e outras funes de processamento e/ou atualizao de dados sem a necessidade de uma navegao envolvendo vrias telas. Normalmente se tem para estes programas uma tela de seleo (parmetros) para a gerao da lista ou execuo de atualizaes individuais ou em massa. Atravs da transao SE38 (Editor ABAP) do ABAP Workbench, podemos criar programas do tipo report, atribuindo categoria do programa (campo Categoria da tela de Atributos do programa) o valor 1(Programa executvel). A tela de seleo (quando necessria) criada dinamicamente pelo sistema, ao identificar no programa a declarao de parmetros utilizando os comandos parameter ou select-options.

3.5 Programa On-line

Programas do tipo on-line ou de dilogo so programas que necessitam de uma maior interao com o usurio, utilizando-se de telas que permitam um certo nvel de navegao no sistema, atravs de objetos e recursos grficos. Necessariamente, devem possuir uma transao para que sejam executados a partir dela. A transao indica o nome do programa e a tela inicial que ser exibida, iniciando a execuo do programa.

As telas so criadas atravs da transao SE51 (Screen Painter) do ABAP Workbench. Elas possuem lgica de processamento e dois eventos bsicos: PBO (Process Before Output), que executado antes que a tela seja exibida para o usurio e PAI (Process After Input), que executa aps a entrada de dados e acionamento de algum comando na tela pelo usurio.

Nesta configurao, o programa principal torna-se um pool de includes, onde esto presentes os diversos mdulos que so chamados pela lgica de processamento das telas. No corpo do programa, esto presentes um include TOP, onde so declaradas as reas de dados para o processamento e um include para cada evento da tela, onde so agrupados todos os mdulos chamados por aquele evento.

4 Dicas

4.1 Dicas de performance

Mtodos para extrao de dados em mais de uma tabela

A fim de minimizar o tempo gasto no acesso ao banco de dados, vale lembrar que em ABAP/4, os mtodos de extrao de dados (do mais eficiente para o menos) so:

1. Utilizao do conceito de join na clusula select (verso 4.0 B em diante)

2. Executar uma clusula select numa view ao invs de utilizarmos vrias tabelas.

3. Realizar um loop numa internal table.

4. Executar uma clusula select numa tabela

5. Utilizar uma tabela lgica usando o comando get.

Acessando apenas alguns campos da tabela

Programa est usando o comando SELECT * ?

Troque por SELECT coluna1, coluna2 ou use projection views.

Utilizao da clusula WHERE

Existem comandos CHECK para campos de tabelas que poderiam ser includos no SELECT ENDSELECT?

Incorpore o comando CHECK dentro da clusula WHERE do comando SELECT.

SELECTs em campos no chave

Existem SELECTs em campos no chave usando um apropriado ndice do DB ou utilizando o buffer da tabela?

Crie ndice para esta tabela no dicionrio de dados ou tabelas buferizadas se estas forem somente para leitura. Antes de criar ndices verifique se com alguma pequena mudana de lgica no possvel utilizar um ndice j existente.

SELECTs aninhados

Programa est utilizando SELECTs aninhados para recuperar dados?

Converta os SELECTs aninhados para database views, DB joins ou SELECT FOR ALL ENTRIES IN ITAB.

Preenchimento de tabelas internas

Programa est usando a tcnica SELECT APEND ITAB ENDSELECT para preencher tabelas internas?

Altere o processamento para ler os dados diretamente para a tabela interna usando SELECT (campos) INTO TABLE (itab) FROM (tabela)

Ordenao de dados

Programa est utilizando o comando SELECT ORDER BY?

Dados devem ser lidos para uma tabela interna primeiramente e ento ordenados (SORT) a no ser que se tenha um ndice apropriado para as colunas a serem ordenadas.

Capacidades de clculo do banco de dados

Programa faz clculos e somas que podem ser feitos no banco de dados via SUM, AVG, MIN ou MAX (funes do comando SELECT)?

Use as capacidades de clculo do banco de dados via SELECT SUM AVG

Leitura indexada da tabela interna

Existem tabelas internas sendo processadas usando READ TABLE itab WITH KEY sem utilizao da tcnica de BINARY SEARCH?

Altere os acessos para utilizar o mtodo de BINARY SEARCH.

Leitura de um registro com chave incompleta

Para ler apenas um registro, utilizar Select up to 1 row ao invs de Select single, quando no for possvel especificar a chave completa.

Select exit versus Select Up to 1 rows.

Vantagem em performance:

Select

exit.

Endselect.

(150.000 ms)

Select up to 1 rows.( 1.500 ms)

Select... Check versus Select where

Comparao de Runtime baseada numa varredura de 57.000 registros na VBAK

Select & Check

=27.958.000 ms

Select com clusula WHERE= 3.065.000 ms

Em caso de condies de checagens muito complexas poderia ser mais rpido obter dados do banco de dados primeiramente. SQL Trace precisa ser usado para verificar qual mtodo o mais rpido.

Isso tambm vlido para select single.

Selects em campos sem ndices

Select-options: so_bname for vbak-bname.

Selectvbeln bname... Into (vbak-vbeln)

Fromvbak

Wherebname in so_bname order by descending.

Instrues...

Endselect.

O sistema standard distribudo sem um ndice para o campo bname. A seleo acima ir resultar numa varredura sequencial da tabela vbak. Isto no aceitvel num sistema em produo. Criando um ndice na tabela vbak para o campo bname ir resolver o problema neste caso. Exceo: tabelas cuja buferizao full ou generic (neste caso no tem sentido pois o primeiro acesso ir trazer todos os dados para a memria. Das prximas vezes, o sistema busca do buffer e no do database at que o dado mude novamente).

Select sum, avg, min, max versus ABAP calculations

Selectmatnr kwmeng meins into

Fromvbap

Where...

Collect .

Endselect.

Ao invs use:

Select matnr sum( kwmeng ) meins into table

From vbap where...

Group by matnr meins.

O ganho em performance para o processamento de 10.000 registros:

Select + collect = 2.370.000 ms

Select sum . Into table= 1.574.000 ms

OBS.: o group by no pode ser usado para tabelas pool e cluster.

Select sem clusula where

Select col1 col2. Into .

From vbak.

Perform calculate_stuff.

Endselect.

Um select sem clusula WHERE indica um erro no desenho do programa, especialmente se o select usado em tabelas SAP com grande crescimento/tamanho em pouco tempo, em geral, BKPF, BSEG, COBK, COEP, LIPK, LIPS, MKPF, MSEG, VBAK, VBAP, VBPA, VBFA..

Programas iro rodar de forma correta e bem na entrada em produo, todavia a performance ir decrescer medida que dados so adicionados diariamente.

Buferizao de tabelas

Para analisar a buferizao de tabelas use funo de chamadas estatsticas: Transao ST02 -> details analysis menu -> call statistics (tables). Esta funo ajuda voc a determinar se tabelas desenvolvidas pelo cliente so buferizadas corretamente.

Para analisar a qualidade da buferizao de tabelas use a transao ST02, d duplo click em TABLES (generic key) e clique no pushbutton buffered objects.

Por que buferizar?

Usando buferizao pode-se reduzir consideravelmente o tempo que se leva para recuperar um registro.

Tipos de buferizao:

Full: resident buffer (100%): o contedo de toda a tabela carregado no buffer no primeiro acesso realizado na tabela.

Generic: uma chave genrica (primeiros n campo chaves) especificado quando da criao da tabela, quando se mantm technical settings. Esta chave genrica divide o contedo da tabela em chamadas reas genricas. Quando acessando qualquer dado com uma deteminada/especificada chave genrica, toda a rea genrica carregada no buffer.

Partial (single record): somente registros nicos so lidos do banco de dados e armazenados no buffer.

Quando bufferizar uma tabela ?

Uma tabela dever ser buferizada quando:

Menor em tamanho (poucas linhas ou poucas colunas com tamanho de campos pequenos)

Acessada muito mais para leitura

Alteraes no ocorrem freqentemente

Tabelas que so boas candidatas a buferizao:

Tabelas de controle/tabelas de customizao

smal master data tables (ex.: 100 material master records -> few changes)

Como ativar/desativar uma buferizao:

dictionary maintenance (SE11 -> technical settings)

technical settings for a table (transaction SE13)

Decidindo sobre o tipo de buferizao:

full (resident = 100 %)

generic (with number of key fields for the generic key)

single records (partial buffering)

Comandos de seleo que ignoram a buferizao da tabela:

select bypassing buffer;

select com vises do banco de dados ;

select distinct;

select count, sum, avg, min, max;

select order by (campos que no sejam a chave primria);

select para update;

clusula where contendo adio IS NULL;

Comandos do SQL nativo (EXEC SQL ENDEXEC);

Evite estes comandos quando quiser trabalhar com tabelas buferizadas.

Quando da definio de uma tabela no dicionrio de dados do R/3 os campos chave sempre devem ser colocados nas primeiras posies do registro da tabela (primeiras colunas). O banco de dados comprime os dados para todos os campos da tabela, mas a compresso no ocorre para campos chave. A compresso tambm s possvel para as colunas aps o ltimo campo chave: isso explica o porque de agrupar todos os campos chaves nas primeiras posies. Transparent e Pool Tables: sempre que for feito um select para buscar dados de tabelas deste tipo pode-se qualificar a clusula WHERE com campos chave e no chave, ou seja, quanto mais condies puderem ser definidas, melhor para a obteno de performance.

Cluster table: ocorre exatamente o inverso: devido a forma de armazenamento destas tabelas, na clusula WHERE deve constar apenas os campos chaves e os demais campos devem ser checados atravs do comando CHECK. O banco de dados no consegue processar cluster tables como ele processa transparent tables. Forando o banco de dados a descompactar e checar campos (em caso de Select com campos no chaves na clusula WHERE) menos eficiente, na maioria dos casos, que qualificando somente com campos chaves e deixando o CHECK para os campos no chave aps eles terem sido retornados. Na verdade ambos modos iro funcionar, porm um deles ser ineficiente pois ir requerer grande parte da memria disponvel, espao em buffer e tempo do banco de dados para descompactar campos no chave, o que certamente ir refletir negativamente em performance.

Campos que sero comparados na clusula WHERE devem ter atributos similares. Se isso no ocorre, o sistema tem que converter o dado toda vez que a comparao feita. Quando isso no possvel, mova o dado a ser comparado para uma rea auxiliar, antes de efetuar a comparao (esta rea auxiliar deve ser definida com o mesmo tipo e tamanho da coluna da tabela).

4.2 Dicas gerais para otimizao de programa

Evite comparaes num SELECT com campos numricos versus campos alfanumricos; o sistema perde tempo para converso.

Testar SY-SUBRC aps cada acesso ao banco de dados.

O comando MOVE-CORRESPONDING bom para tabelas pequenas. interessante que a tabela interna contenha os campos na sequncia em que sero movimentados.

Sempre identifique se um SORT ascending ou descending e especifique a clusula BY . Caso contrrio, todos os campos sero classificados.

Campos chave devem ser sempre os primeiros campos da tabela. Assim, todos os demais campos sero comprimidos.

SELECT (para Transparent e Pool Tables): a clusula WHERE deve conter, preferencialmente, os campos chaves e demais campos que possam restringir a pesquisa.

SELECT (para Cluster Tables): s os campos chaves devem ser especificados na clusula WHERE. Os demais devem ser checados atravs do comando CHECK.

O conhecimento do contedo dos dados de uma tabela pode auxiliar no momento da codificao do comando select. O campo que ocorrer em nmero menor de vezes dever constar na clusula where antes daquele que ocorre um nmero maior de vezes, caso seja necessrio satisfazer a ambas condies. Isso faz com que o processamento seja mais gil.

Manuseio de tabelas: Estudar a possibilidade de manuseio em tabelas internas para agilizar o processo. Analisar tambm o uso de comando select, sendo o que melhor se adapte a situao em questo.

Evite a utilizao de valores explcitos no programa. Para obter os dados necessrios lgica do programa, clusulas de seleo (select statement), arquivos de entrada ou sada, utilize parmetros ou telas de seleo para garantir flexibilidade de manuteno. Caso no seja possvel usar parmetro, usar constantes. Portanto evite comandos do tipo:

Select *

from marc

where werks = 5000.

if vbfa-vbtyp_n = J.v_custo = mbew-strps * 1,2.

Endif.

Endselect.

Evite o uso do default para atribuir valores iniciais aos parmetros ou em telas de selees. Esses valores podem mudar no futuro. D preferncia criao de variantes para setar esses valores.

Defina todos os parmetros para seleo de nomes de arquivos com entradas em caracteres minsculos de tamanho 128 bytes. (Use like rlgrap-filename).

Defina as variveis de data e hora com like sy-datum e like sy-uzeit, respectivamente.

Para manter o layout do cdigo uniforme, utilize a funcionalidade Pretty printer do editor para auxiliar na identao do cdigo fonte.

Para saber se o ndice definido e solicitado na leitura est sendo usado:

Use o SQL Trace (transao ST05) para ativar e desativar o trace.

Clique em trace on.

Execute a transao em questo em uma outra sesso.

Retorne a ST05 e clique em trace off.

Clique em list trace para visualizar os resultados de seu trace.

Clique em prepare, open ou reopen para selecionar o comando SQL que ser avaliado.

Clique em EXPLAIN para obter o resultado do comando SQL.

5 Ferramentas e Utilitrios do sistema

Existem algumas ferramentas que auxiliam os desenvolvedores a descobrir erros (errors, warnings, etc), bem como avaliar a performance de seus programas.

Path: Tools Abap/4 Workbench Test - Runtime Analysis

Existe um pushbutton chamado Tips and Tricks Clicando-se nele poder ser feita comparao entre comandos Select (diferentes tipos). Dando double-click sobre um dos exemplos voc passar para outra tela, onde voc visualizar a medida do tempo em microsegundos de ambos, servindo de base de comparao.

Neste mesmo path, pode-se utilizar as facilidades do Runtime Analysis para verificar a performance de seu programa. Ao final da execuo voc poder acessar informaes sobre o seu programa (grficos, acesso a tabelas, etc). Para tanto clique o pushbutton ANALYSE, que somente aparecer depois que for informado o nome do programa e/ou transao e clicado execute.

O SQL Trace (transao ST05) outra facilidade que pode ser utilizada para trilhar a lgica de sua aplicao e verificar possveis pontos de correo. Voc poder visualizar os comandos de acesso a banco de dados utilizados, obter informaes sobre um comando especfico, visualizar os ndices que esto sendo utilizados.

O Extended Program Check outra facilidade que deve ser empregada visando manter o seu cdigo o mais correto possvel. Nesta opo voc poder selecionar os itens que voc deseja que sejam checados e o sistema apontar o seu parecer. Para tanto basta clicar os itens e o pushbutton PERFORM CHECK. Selecionando uma linha voc poder ver os detalhes, bem como posicionando o cursor em uma linha e clicando o pushbutton DISPLAY ALL CHANGES.

Fiat Automveis S/A

1