academia abap.doc
TRANSCRIPT
-
7/27/2019 Academia ABAP.doc
1/162
Sumrio
Workshop para desenvolvedores ABAP/4 1
-
7/27/2019 Academia ABAP.doc
2/162
Conceito breve do SAP................................................................................................3
Criao de Listas Bsicas...............................................................................57
Criao de Listas Complexas.........................................................................62Criando Tabelas Internas (Estruturas Complexas de Armazenagem
Temporria)...........................................................................................................73
CRIANDO PROGRAMAS..........................................................................................91
ATRIBUTOS DO PROGRAMA..................................................................................91
UTILIZANDO CAMPOS DO DICIONARIO ABAP............................................92
DEFININDO O FLOW CONTROL.....................................................................94
CRIANDO UMA SEQUENCIA DE TELAS........................................................95DEFININDO CAMPOS NO MODULE POOL....................................................96
CRIANDO MODULES ABAP............................................................................96
O PROCESSAMENTO DO MODULE POOL....................................................96
DEFININDO CHAMADAS VIA TRANSAO..................................................97
Utilizando SAPSCRIPT............................................................................................113
Header......................................................................................................................114
Basic Setting ............................................................................................................115
Page.........................................................................................................................116
Windows...................................................................................................................117
Page Windows.........................................................................................................118
Pargrafo..................................................................................................................122
Tabs..........................................................................................................................123
Text Elements...........................................................................................................124
Criao de Bordas....................................................................................................125
Ativando SAPSCRIPT..............................................................................................126
Testando SAPSCRIPT.............................................................................................126
O Relatrio...............................................................................................................126
Workshop para desenvolvedores ABAP/4 2
-
7/27/2019 Academia ABAP.doc
3/162
1- Overview ABAP/4
Conceito breve do SAP
O SAP um sistema que trabalha com um nmero muito grande de tabelasinterligadas, que armazenam e manipulam os valores de controle dos processos.Essas tabelas so responsveis pelo armazenamento dos valores do sistema e sodivididas em grupos que se interligam em um todo. Assim, existem tabelasresponsveis pelas informaes de FI, outras pelas informaes de SD, outrasainda por MM, mas todas elas apresentam campos chaves que permitem, pelosmais diferentes e complicados caminhos, a interligao e consistncia de todo osistema. Embora a ferramenta ABAP/4 dentro do SAP seja muito poderosa epraticamente capaz de permitir qualquer customizao do sistema, muitoimportante manter os conceitos originais sempre em mente, e nunca tentar foraralguma coisa que deveria ter um comportamento natural. Por exemplo, nunca tentealterar um valor de uma tabela do SAP (embora perfeitamente possvel, com ocomando UPDATE), sem um minucioso estudo de suas implicaes anteriormente.Isso pode comprometer a integridade dos dados do sistema, se no forematualizados todos os valores de todas as tabelas relacionadas a essa alterao.
ABAP a linguagem de programao que a SAP criou para desenvolver asaplicaes do R/3, focada em tarefas comerciais especficas e totalmentevoltada para atender as necessidades dos usurios deste software, como:processamento de dados em massa, moeda especifica, mltiplos idiomas, etc.
Workshop para desenvolvedores ABAP/4 3
-
7/27/2019 Academia ABAP.doc
4/162
O ambiente de desenvolvimento muito eficiente no trabalho em equipe, osdesenvolvedores no precisam se preocupar com quaisquer problemas decomunicao ou de distribuio entre os diferentes nveis (camadas) do software.
Falando em banco de dados o ABAP tambm tem suas particularidades, o
desenvolvedor no necessita conhecer o banco no qual est rodando o R/3( trabalha com vrios bancos relacionais), apenas cabe ao programador conhecer oOpen SQL, que uma definio especial de comando para acesso ao banco dedados.
A rea de trabalho dos desenvolvedores chamada de ABAP Workbench etodos os objetos de desenvolvimento criados com as ferramentas do ABAPWorkbench so classificadas como objetos do repository. O Repository umaparte do banco de dados central do R/3 e est organizado por aplicaes e dentrodas aplicaes ainda encontramos uma outra subdiviso denominada Classes deDesenvolvimento. Todo desenvolvimento do ABAP Workbench tem que estar
relacionado obrigatoriamente a uma aplicao e a uma Classe de Desenvolvimento.
1- Overview ABAP/4
Transaes
Transao um cdigo alfanumrico de 20 caracteres, utilizado para iniciarum processo dentro do sistema SAP. Todo e qualquer processo ou parte dele deveser executado dentro do sistema atravs de uma transao. Na customizao deABAP/4, sempre que um GAP do sistema coberto, isso gera pelo menos umatransao, de modo que o usurio possa executar esse produto customizado dedentro do sistema.
Toda operao realizada atravs do menu do sistema, tambm corresponde auma transao. Um mtodo para conhecermos o cdigo de uma transao cujocaminho pelo menu sabido, entrarmos na mesma, e na tela inicial desta
transao, utilizarmos o menu Sistema Status, que informa o programa tela etransao executados.No desenvolvimento de customizaes ABAP/4, as principais transaes
utilizadas, so:
ABAP Editor (SE38) para escrita e edio de programas, mais utilizadopara desenvolvimentos de programas do tipo executvel (Relatrios eCargas).
ABAP Dictionary (SE11) para edio de objetos relacionados com obanco de dados e objetos especficos da aplicao.
Menu Painter (SE41) para desenho de interfaces de usurio (barra demenu, ferramentas standard e ferramentas de aplicao).
Workshop para desenvolvedores ABAP/4 4
-
7/27/2019 Academia ABAP.doc
5/162
Screen Painter(SE51) para desenho de telas para dilogo de usurio, no utilizado para criao de telas de seleo.
Function Builder(SE37) para programao de mdulos de funes (sub-rotinas, com interface fixa que esto disponveis em todo o sistema).
Repository Browser (SE80) integra todas as ferramentas do ABAPWorkbench, muito utilizado para criao de programas do tipo on-line oumodule pool, pois, facilita e muito a visualizao de todos os objetos emuma mesma tela. Todo objeto do ABAP Workbench pode ser editado nessatransao e de uma forma bem mais organizada.
O ambiente de trabalho do ABAP normalmente funciona da seguinte maneira:
Ambiente de Desenvolvimento ( Client desenvolvimento ABAP eClient de customizaes funcionais/Testes ).
Ambiente de Qualidade ( onde so feitos os testes de usurios para
aprovao final). Ambiente de Produo ( onde realmente os dados da empresa esto
sendo processados).
1- Overview ABAP/4
A rea do desenvolvedor ABAP, isto , o local onde ele ir criar seus objetosser no Ambiente de Desenvolvimento no client especfico para isso, os objetoscriados ali so amarrados a uma Classe de desenvolvimento e tambm a umaChange Request/Task (normalmente o gerente de projeto cria uma request ondesero amarradas as Tasks do projeto). No final do projeto cada desenvolvedorlibera sua Task para ser transportada e o Gerente aps todas as Tasks liberadaspode liberar a Request, nesse ponto entra em ao o pessoal de BASIS queexecutam o transporte dessa Request para o outro ambiente QA e aps os testesfeitos e aprovados transporta-se para a PRD.
Instncia X Client
Tambm muito importante o conceito do funcionamento do ambiente dosistema durante a evoluo de um projeto. Inicialmente devemos entender osconceitos de client e instncia:
Client definido como sendo uma unidade independente do R/3, em termoscomerciais, organizacionais e tcnicos. Isso significa que possuem sua prpriaconfigurao, dados de aplicao e dados cadastrais (master data).
Instncia definida como um ambiente do R/3 que agrupa um ou maisclients, onde se executa um determinado trabalho.
Uma instncia de trabalho, geralmente possui mais de um client, onde sotrabalhados simultaneamente diferentes frentes de trabalho do projeto. A inteno
Workshop para desenvolvedores ABAP/4 5
-
7/27/2019 Academia ABAP.doc
6/162
dessa diviso que se possa trabalhar somando valores, sem que haja conflitos deinteresse. Por exemplo, durante um projeto, o client para desenvolvimento dascustomizaes de ABAP deve ser diferente dos outros, pois trabalha muito comtestes e alteraes constantes, o que inviabiliza outros tipos de servios.
Se essa diviso muitas vezes ajuda, algumas vezes atrapalha. Geralmenteas massas de dados so diferentes nos clients, e o comportamento principalmentenos testes dos produtos customizados pode ser diferente. O recomendado pelaprpria SAP que exista um client s para testes, com massa de dados completaque permita recarga sempre que necessrio, o que permitiria que as condies deteste pudessem ser repetidas. No dia a dia de um projeto isso muito difcil, pois amanuteno desses clients pelo time de basis geralmente no muito bem vista.
As instncias variam tambm ao longo de um projeto. A medida que osistema vai sendo refinado, geralmente se inicia uma nova instncia livre dos vciose restos de testes da anterior. Pelo menos 3 instncias sempre existem durante operodo de um projeto. A instncia de desenvolvimento,
a de pr-produo e finalmente a de produo. Cada vez que o sistema migrado de uma instncia para a outra, somente deve ser aproveitado o que estcomprovadamente funcionando na instncia anterior, de modo a diminuir os erros acada migrao.
1- Overview ABAP/4
Client dependent/independent
Esse conceito de objeto client dependent e client independent necessrioestar bem claro, como a base de desenvolvimento normalmente dividida em clientou mandante alguns objetos quando desenvolvidos em um determinado clientsomente so enxergados ali (para esses casos necessrio fazer transporte entreclients) e outros so enxergados em todos os clients do ambiente, abaixo est umarelao de objetos para facilitar:
Cdigo fonte de programas Independent
Telas, Menus e Funes - Independent Estrutura de tabela, elemento de dados e domnios Independent Registro de dados da tabela Dependent Objetos de Textos, Formulrio SapScript - Dependent
Particularidades.
Os programas e outros objetos do repositrio criados pelo cliente devem estarno 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 ouYY). Os clientes s devem alterar objetos com nomes fora dessa especificao
Workshop para desenvolvedores ABAP/4 6
-
7/27/2019 Academia ABAP.doc
7/162
quando expressamente orientados pela SAP a faz-lo (por exemplo, para aplicarnotas de correo). A SAP garante que os programas desenvolvidos pelos clientesque observarem as especificaes de namespace no sero afetados quandohouver uma atualizao do sistema, como uma aplicao de Support Package. Noentanto, caso seja alterado um programa standard da SAP, no h garantias de
que o programa alterado permanecer como tal aps qualquer modificao nosistema. Para agregar funcionalidades a programas da SAP, existe o recurso dasUser Exits.
2 Request
Ordens (Change Requests): Recurso atravs do qual um conjunto deobjetos C.D. ou C.I. que podem ser transferidos de um client para outro ou deuma instncia para outra.
Utilizam-se ordens para segurana na alterao de objetos j existentes,sejam eles standards do SAP ou customizados, e para efetuar controle deverses destes objetos.
A nomenclatura das ordens controlada pelo prprio SAP, que promove a
criao do cdigo do transporte, no momento em que a manuteno de objetosespecficos exige que o mesmo seja associado a uma ordem.
AF1K900109
Objeto SAP (Interno SAP)
Workshop para desenvolvedores ABAP/4 7
Nmero do transporte
Instncia
Gerao de Arquivo de Controle (Interno SAP)
-
7/27/2019 Academia ABAP.doc
8/162
Tipos de Objetos: Locais ou Transportveis
Ordens e Tarefas (Tasks): Cada ordem pode possuir uma ou mais Tasks.Cada Task possui os objetos agrupados de acordo com seu tipo e ordem na qual
devero ser criados no Cliente de destino.
Padronizao ABAP Factory :
Ordem: 1 programa + objetos associadosOU1 alterao de programa + objetos associados
Descrio da ordem:
nome_da_tarefa ou nome_do_produto - Gerao Inicialnome_da_tarefa ou nome_do_produto - 1a Correo
2 Request
Controlando e Administrando Transportes
Uma ordem criada por um determinado usurio garante que os objetos a eleassociados ficam reservados para tal usurio e somente sero liberados nomomento que a ordem for encerrada.
Quando uma ordem ainda permanece associado a um usurio, dizemos queele est com o status de Modifiable.
Quando uma ordem encerrada, deixa de estar associado a um usurio epassa a ter o status de Released (liberada), ou seja, os objetos a ela associadosso liberados para alterao por outros usurios.
Enquanto uma ordem possui o status Modifiable, pode-se manipular seusobjetos livrevente, mudar o usurio responsvel transferindo a responsabilidade, ousimplesmente eliminar a ordem, liberando assim seus objetos, ao passo que umaordem liberada algo imutvel.
Transao SE01 Permite verificar o contedo das ordens (objetos) e sua Logde transporte (sucessos, erros ou warnings) para os outros clientes e instncias.
Workshop para desenvolvedores ABAP/4 8
-
7/27/2019 Academia ABAP.doc
9/162
Transao SE09 Permite verificar as ordens de objetos Client Independent(Workbench Organizer) criados por um determinado usurio, bem como efetuar oRelease de tasks e da ordem em si.
Transao SE10 Permite verificar os transportes de objetos Client Dependent e
Client Independent (Customizing Organizer) criados por um determinado usurio,bem como efetuar o Release de tasks e do transporte em si.
Tais transaes fornecem informaes para que criemos a planilha de controledas ordens criadas e transportadas dentro de um projeto, permitindo assim,conhecermos o histrico da criao e transporte dos objetos entre as vriasinstncias.
2 RequestWorkbench Organizer
Esta transao permite controlar as ordens (requests) geradas atravs dasalteraes feitas nos objetos ABAP.
As alteraes so sempre registradas em ordens do tipo local e transportvel.
Ordem tranportvel: Alteraes transportveis para objetos do ABAP/4Development Workbench so gravados em ordens transportveis. Isto permite queas ordens possam ser enviadas ao demais ambientes do SAP, cada ordem gerada
para um objeto ABAP/4 consiste em uma nova verso para este objeto, permitindoassim comparar, verificar e consolidar as alteraes entre os ambientes dedesenvolvimento e produo.
Ordem Local: Alteraes no transportveis para objetos do ABAP/4 DevelopmentWorkbench so gravados em ordens locais. Isto garante que as ordens estosujeitas ao mesmo tipo de controle aplicado aos objetos transportveis. Da mesmaforma, quando uma ordem local liberada so criadas verses para o objeto.
Workshop para desenvolvedores ABAP/4 9
-
7/27/2019 Academia ABAP.doc
10/162
Nesta opo podemos acompanhar o transporte de todas as requests queforam liberadas
2 Request
Clicando no boto de transportes podemos acompanhar todas as requests dotipo Desenvolvimento/Correo.
Workshop para desenvolvedores ABAP/4 10
-
7/27/2019 Academia ABAP.doc
11/162
Toda alterao em objetos standard feita em requests do tipo Reparao.
2 Request
Acessando pelo menu Ordem/tarefa Procurar Ordens, podemos efetuar
pesquisas nas request do sistema.
Workshop para desenvolvedores ABAP/4 11
-
7/27/2019 Academia ABAP.doc
12/162
Clicando no boto de seleo de valores na seo Tipo de Ordem podemosselecionar os tipos de change request que sero pesquisados.
3 - Dicionrio de Dados - Introduo
Conceitos de Bancos de Dados Relacionais
Workshop para desenvolvedores ABAP/4 12
-
7/27/2019 Academia ABAP.doc
13/162
Modelo Entidade-Relacionamento
Modelo desenvolvido para facilitar o projeto de banco de dados, permitindo aespecificao de um esquema que represente a estrutura lgica global de um bancode dados.
Entidade: um objeto que existe e distinguvel de outros objetos, ou seja,identifica o agrupamento de objetos do mesmo tipo. Exemplos: Clientes, Bancos,Agncias, Contas-Corrente.
Atributos: So os qualificadores de uma entidade, isto , representam no modeloo que uma entidade pretende ser. Exemplos: Nome, RG, CPF, Endereo, NroConta, Nro Agncia, Nro Banco
Domnio: Conjunto de valores permissveis para um atributo. Exemplo: EstadoCivil, Sexo, Cor, Meses do Ano.
Relacionamento: a associao entre duas entidades, ou seja, representa amaneira como duas entidades esto relacionadas ou ligadas. Exemplos: Conta-Corrente de um Cliente, Agncias de um Banco, Contas-Corrente de uma Agncia.
Restries de Mapeamento: Representam o modo como as diferentes entidadesde um modelo se relacionam. Determinadas pela cardinalidade dosrelacionamentos entre as entidades.
Um-para-Um: Uma ocorrncia da Entidade A est relacionada com uma e apenasuma ocorrncia da Entidade B.
Um-para-N: Uma ocorrncia da Entidade A est relacionada com uma ou vriasocorrncias da Entidade B.
N-para-Um: Vrias ocorrncias da Entidade A esto relacionadas com apenas umaocorrncia da Entidade B.
N-para-N: Vrias ocorrncias da Entidade A est relacionada com vriasocorrncias da Entidade B.Modelo Relacional
3 - Dicionrio de Dados - Introduo
Um banco de Dados Relacional a implementao fsica do Modelo Entidade-Relacionamento e traduz concretamente o que o modelo conceitual procura
representar. Consiste em uma coleo de tabelas cada uma das quais associada a
Workshop para desenvolvedores ABAP/4 13
-
7/27/2019 Academia ABAP.doc
14/162
um nome nico e que possuem relacionamentos entre si. Tabelas representamfisicamente as Entidades.
Cada tabela possui uma estrutura similar quilo que pretende a representar,isto , tabelas so formadas de linhas que por sua vez so formadas porcolunas.
Colunas representam fisicamente os Atributos.
A cada linha da tabela chamamos de Ocorrncia e o conjunto de ocorrnciaspode ou no estar relacionado com ocorrncias de outras tabelas.
Como distinguir as ocorrncias umas das outras?
Utilizando o conceito de Chave Primria!!
Chave Primria: Conjunto de atributos que garante a unicidade de cada ocorrnciada tabela. Exemplos: RG, CPF, Nro Chassis.
Normalizao: Processo de reconhecimento da chave primria
Como representar os relacionamentos entre tabelas?
Transferindo a chave primria de uma tabela para a outra!!
Chave Estrangeira: Quando a chave primria de uma tabela um atributo emoutra(s) tabela(s).
3 - Dicionrio de Dados - Introduo
O dicionrio ABAP (transao SE11) permite a administrao central de todasas definies de dados do R/3, permitindo a criao de tipos de dados definidos
Workshop para desenvolvedores ABAP/4 14
-
7/27/2019 Academia ABAP.doc
15/162
pelo usurio para uso posterior, alm de vrios itens auxiliares ao desenvolvimentode programas (p.ex. search helps).
Podem ser definidas tabelas e vises dentro do dicionrio. O R/3 seencarrega, durante a ativao desses elementos, de cri-los no banco de dados. Odicionrio 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 terpesado custo em termos de performance.
As definies de tipos de dados dentro do R/3 incluem os elementos dedados, que definem um tipo elementar descrevendo o tipo bsico de dados, ocomprimento e, eventualmente, as casas decimais; as estruturas, que podemreceber elementos de vrios tipos (semelhante representao de um registronuma tabela); e os table types, que seriam campos em formato de tabela. Porexemplo, uma estrutura do registro de uma estrutura de usurio que tivesse umcampo para nmeros de telefone poderia usar um table type e permitir colocarvrios nmeros num mesmo campo.
Alm dessas definies, o dicionrio ABAP permite criar os search helps, queso tabelas de busca auxiliares aos campos de tela so as buscas e tabelas queaparecem 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 invocadausando-se a tecla F1 dentro dos campos de tela. Pode-se, ainda, definirverificaes de entrada automaticamente, bastando definir uma relao de foreignkey.
No dicionrio tambm so criados os objetos de lock, que permitem definir otravamento de dados dentro do R/3. Por exemplo, podem-se definir objetos de lockpara impedir que dois usurios editem a mesma informao ao mesmo tempo nosistema.
O dicionrio integrado s ferramentas de desenvolvimento e execuo doR/3, permitindo o acesso das ferramentas s definies nele contidas. Por exemplo, possvel navegar de um programa que esteja sendo criado no editor ABAP paradefinies de campos, elementos e tabelas usadas no programa.
3 - Dicionrio de Dados - Tipos de Dados
1. Dados elementares pr-definidos
Workshop para desenvolvedores ABAP/4 15
-
7/27/2019 Academia ABAP.doc
16/162
Detalhes bsicos dos tipos mais utilizados e exemplos de utilizao:
I - campos numricos sem decimais, contadores, etc. P campos numricos com decimais, quantidade e moeda. Tomar cuidado
com clculos feitos entre campos com nmero de casas decimais diferentes. C campo alfa, mais utilizado para conter textos, pode conter nmeros e at
efetuar clculos, mas no usual. N campo alfa, utilizado para conter nmeros sem decimais e preenchidos
com zero a esquerda. D campo data, armazenado no banco de dados no formato AAAAMMDD,
mostrado em tela de acordo com a customizao de cada usurio, permite-se fazer contas do tipo 20041201 + 31 = 20050101.
T - campo hora, armazenado no banco de dados no formato HHMMSS, mostrado em tela de acordo com a customizao de cada usurio.
3 - Dicionrio de Dados - Tipos de Dados
2. Dados definidos no programa
Workshop para desenvolvedores ABAP/4 16
-
7/27/2019 Academia ABAP.doc
17/162
Entre as formas de tipos de dados mostrados acima, as mais usadas nodesenvolvimento de programas ABAP/4 so:
1 - Estrutura: consiste em vrios campos com tipos de dados
elementares e tem tamanho fixo. (array) 3 Tabela Interna: uma estrutura que pode variar em tamanho, no quediz respeito a linhas. (matriz)
Os outros tipos acima, so variaes dos dois j explicados e muitopouco utilizados nos programas.
Exemplos:
TYPES: number TYPE i,length TYPE p DECIMAL 2,code(3) TYPE c.
TYPES: BEGIN OF ,..END OF .
3 - Dicionrio de Dados - Tipos de Dados
3. Tipo de dados do Dicionrio de Dados ABAP.
Workshop para desenvolvedores ABAP/4 17
-
7/27/2019 Academia ABAP.doc
18/162
Elemento de Dados: a definio semntica para um campo individual, nelecolocamos os textos do campo e amarramos a um domnio.
Domnio: e a definio tcnica do campo, onde colocamos o tipo de dados, otamanho do campo e tabela de valores possveis.
Estrutura: So conjuntos de campos elementares ou do prprio tipoestrutura e so utilizadas para referncias em tela ou no programa.
Tabela Transparente (database table): So as tabelas que possuem umaestrutura criada no dicionrio de dados e que so refletidas no banco dedados, so elas que contm os dados necessrios para o sistema, atravsde instrues do ABAP OPEN SQL conseguimos obter essas informaes.
Vises: So agrupamentos de tabelas transparentes que possuemligaes entre si, funciona como se fosse um INNER JOIN s que j est pr-criado no dicionrio de dados, pode ser utilizada no SELECT como se fosseuma tabela normal.
3 - Dicionrio de Dados Definies
Definio de tabelas transparentes
Workshop para desenvolvedores ABAP/4 18
Transao SE11
-
7/27/2019 Academia ABAP.doc
19/162
Uma tabela consiste de colunas (campos) e linhas (registros). Cada tabelapossui um nome e atributos, como por exemplo, a classe de desenvolvimento e aautorizao para manuteno. Cada campo deve ter um nome nico dentro databela, e pode fazer parte de uma chave. Cada tabela deve ter uma chaveprimria, que composta por campos cujos valores identificam unicamente osregistros de uma tabela. As tabelas definidas no dicionrio de dados do R/3 socriadas no banco de dados assim que ativadas.
Durante a ativao, a descrio da tabela dentro do dicionrio traduzida paraa definio de tabela correspondente na linguagem do banco de dados que estiversendo usado. A ordem dos campos no banco de dados no precisa seguir a ordemestabelecida no dicionrio de dados (com exceo dos campos de chave primria),o que permite a extenso das tabelas standard do R/3 atravs e appendstructures, que so definies de campos adicionais definveis pelo usurio semhaver a necessidade de alterao da definio normal da tabela Standard. Osincludes so estruturas definidas separadamente que podem ser inseridas emoutras tabelas.
3 - Dicionrio de Dados Definies
Entendendo melhor: Elemento de Dados e Domnio
Workshop para desenvolvedores ABAP/4 19
-
7/27/2019 Academia ABAP.doc
20/162
Basicamente, as tabelas dentro do R/3 so compostas de campos, cada umusando um determinado elemento de dados, que por sua vez usam domnios. Odomnio define o tipo bsico de dados, seu comprimento e o intervalo de valorespermitido; o elemento de dados descreve o significado de um domnio dentro de umdeterminado cenrio. Por exemplo, um campo de cdigo de aeroporto de destinodeve estar ligado a um elemento de dados aeroporto de destino, que por sua vezusa um domnio cdigo de aeroporto, que est definido como trs posies decaractere, apenas com letras.
3 - Dicionrio de Dados Definies
Workshop para desenvolvedores ABAP/4 20
-
7/27/2019 Academia ABAP.doc
21/162
As caractersticas tcnicas das tabelas do R/3
Quando uma tabela definida no dicionrio de dados do R/3, devem serdefinidas as caractersticas tcnicas (technical settings) para a tabela. Essascaractersticas so usadas para otimizar o acesso e a armazenagem da tabela
individualmente.As caractersticas tcnicas podem ser usadas para definir como a tabela deveser manipulada quando for criada no banco de dados, se ela deve ser includa embuffere de que forma, e se as mudanas nela realizadas devem ser registradas emlog.
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 data, transaction data, organizational data esystem data. Os dados mestres devem ser classificados como master data, osdados transacionais como transaction data, a configurao funcional comoorganizational data e os dados de sistema como system data. Geralmente, dentro
de um projeto, so criadas tabelas dos tipos master e transaction somente. Deposse dessa informao, o R/3 separa as tabelas em diferentes arquivos do bancode dados de forma a otimizar a performance.
A categoria de tamanho das tabelas permite ao R/3 alocar espao no bancode dados de acordo com o tamanho projetado para a tabela, de modo a evitarfragmentao dos dados.
Pode-se definir que uma determinada tabela ser armazenada em bufferdememria. Com isso, o acesso tabela otimizado, mas deve-se usar de bom sensopara colocar tabelas em buffer. Por exemplo, tabelas candidatas a entrar no bufferso dados mestres com muita utilizao e raramente atualizadas. Tabelas de dadostransacionais no devem ser colocadas em buffer, pois cada registro dentro delas menos freqentemente acessado que nas tabelas de dados mestres, e estosujeitos a atualizaes. A atualizao de uma tabela que esteja no buffer provocaseu re-carregamento com conseqente impacto no desempenho dos programas.
O buffer pode ser definido nos modos full, no qual a tabela inteira colocadano buffer, single-record, onde apenas os registros eventualmente acessados socolocados no buffer, e generic, no qual so colocados no buffer registros quetenham determinados valores na chave. Os dados no so automaticamentecolocados no buffer assim que o sistema entra no ar; isso s acontecer no primeiroacesso 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 naperformance do sistema.
3 - Dicionrio de Dados Visibilidade e Referncia
Visibilidade dos Tipos de Dados
Workshop para desenvolvedores ABAP/4 21
-
7/27/2019 Academia ABAP.doc
22/162
Conceito LIKE
Eu utilizo o comando LIKE na criao de um tipo de dados dentro do programaABAP para referenciar diretamente o objeto a um tipo de dados do Dicionrio deDados ABAP, isto muito utilizado, pois, se eu estou trabalhando com um campoque reflexo de um campo que j existe em uma tabela transparente eu nopreciso descobrir o tipo e tamanho do campo para defini-lo no programa basta eureferenci-lo utilizando LIKE.
Exemplos:
Type: LIKE .
3 - Dicionrio de Dados Definies
Workshop para desenvolvedores ABAP/4 22
-
7/27/2019 Academia ABAP.doc
23/162
Exemplo Criao de Tabela, Manuteno e criao de transao
Criando uma tabela transparente customizada (tcode SE11). Por exemploZCONTROLE.
Definir as caractersticas da tabela transparente.
3 - Dicionrio de Dados Definies
Definir a estrutura da tabela (campos, data elements e domnios) e salv-la.
Workshop para desenvolvedores ABAP/4 23
-
7/27/2019 Academia ABAP.doc
24/162
Definir as opes tcnicas e .
Ao final ativar a nova tabela criada.
3 - Dicionrio de Dados Definies
COMO CRIAR A MANUTENO DA TABELA CUSTOMIZADA
Workshop para desenvolvedores ABAP/4 24
Atribuir as opes
tcnicas.
-
7/27/2019 Academia ABAP.doc
25/162
Agora vamos definir a manuteno da tabela transparente. Para acessar o Geradorde atualizao de tabela, selecionar no menu Utilitrios conforme descrito abaixo.
Definir os parmetros de manipulao da tabela transparente.
Definir o Grupo de Funo a ser utilizado pelo Repository Object (tcode SE80).
3 - Dicionrio de Dados Definies
Workshop para desenvolvedores ABAP/4 25
Selecionar o
objeto.
-
7/27/2019 Academia ABAP.doc
26/162
Definir as caractersticas do objeto Grupo de Funo.
Selecionar a Classe de Desenvolvimento a ser utilizado e .
Criar uma nova Request e Avanar .
O grupo de funo definido ser criado na classe de desenvolvimento.
3 - Dicionrio de Dados Definies
Workshop para desenvolvedores ABAP/4 26
Este boto permite o
sistema sugerir as telas
de atualizao a serem
utilizadas.
Criar novo
objeto.
O novo Grupo de Funofoi definido.
-
7/27/2019 Academia ABAP.doc
27/162
Para que o usurio tenha acesso a manuteno da tabela customizada, utilizar ocaminho apresentado abaixo.
3 - Dicionrio de Dados Definies
Workshop para desenvolvedores ABAP/4 27
Pode ser utilizado telas de
atualizao de duas
categorias:
apenas um nvel (apresenta a
sntese da tabela e a alterao
da entrada de dados
efetuada nesta tela mesmo);
2 nveis: um nvel de tela de
sntese e uma tela seguinte
somente para alterar a entrada
de dados.
-
7/27/2019 Academia ABAP.doc
28/162
Nesta tela de viso de tabelas possvel efetuar a atualizao de dados.
Esta tela de atualizao a tela de sntese (o 1 nvel de acesso definido nagerao de manuteno).
3 - Dicionrio de Dados Definies
Workshop para desenvolvedores ABAP/4 28
Permite o cadastramento
de dados novos na tabela.
-
7/27/2019 Academia ABAP.doc
29/162
Esta tela de atualizao a tela individual (o 2 nvel de acesso definido nagerao de manuteno).
A seguir apresentado a entrada efetuada na tabela pela tela de atualizaoindividual.
3 - Dicionrio de Dados Definies
Workshop para desenvolvedores ABAP/4 29
-
7/27/2019 Academia ABAP.doc
30/162
PARA ACESSAR A MANUTENO DA TABELA VIA TRANSAOCUSTOMIZADA.
Criar uma nova transao pelo Repository Object (tcode SE80).
Selecionar a opo de transao c/parmetros.
3 - Dicionrio de Dados Definies
Workshop para desenvolvedores ABAP/4 30
-
7/27/2019 Academia ABAP.doc
31/162
Definir as caractersticas da transao.
Definir tambm a tabela a ser acessada.
Selecionar a Classe de Desenvolvimento a ser utilizado e .
Criar uma nova Request e Avanar .
4- Editor ABAP
Workshop para desenvolvedores ABAP/4 31
Utilizar a transao
para Atualizao
de tabela ampliada.
Definir os parmetros
da tabela a ser
atualizada .
-
7/27/2019 Academia ABAP.doc
32/162
Editor ABAP/4
O editor de programao ABAP/4 do SAP pode ser encontrado atravs docaminho :
Menu SAP Ferramentas ABAP Workbench Desenvolvimento EditorAbap
Workshop para desenvolvedores ABAP/4 32
-
7/27/2019 Academia ABAP.doc
33/162
4- Editor ABAPou pela transao SE38.
Uma tela para a entrada do nome do programa aberta, como exemplificadaabaixo. Para criar um programa novo, utilize um nome ainda no existente no
repositrio, e apertar o boto Criar. Para editar ou exibir um programa j existente,entrar com o nome do programa e apertar os botes respectivos.
Existe um padro de nomenclatura que deve ser seguido, no s para nomede programas, mas para todos os desenvolvimentos no SAP R/3. Esses padrespodem variar de projeto a projeto e principalmente com a verso do SAP com a qualse est trabalhando. Em todos os casos os nomes dos desenvolvimentos comeamsempre com Z ouY.
Antes de iniciarmos o estudo dos Reports, devemos entender primeiro o
conceito de Report dentro do SAP. Apesar do nome indicar que so relatrios,Report tem uma abrangncia maior do que isso. Devemos entend-los comoprogramas, que so capazes de fazer muito mais coisas do que exibir relatrios.
Workshop para desenvolvedores ABAP/4 33
-
7/27/2019 Academia ABAP.doc
34/162
4- Editor ABAP
No editor ABAP, alm de digitar o cdigo fonte do programa, possveltambm efetuar outras tarefas e adicionar outros objetos inerentes sua execuo.
Na janela de Objetos parciais h 5 opes bsicas de objetos associados aum programa ABAP:
Texto fonte: Atravs desta opo acionamos o editor de programas ABAP.
Variantes: Definem-se os valores pr-definidos para os parmetros de execuo deum programa ABAP. Os parmetros de um programa so definidos pelos comandosParameters e Select-options do ABAP.
Atributos: Definem-se os atributos de programa, como classe de desenvolvimento,ttulo, categoria, status, aplicao, etc.
Documentao: Texto com uma descrio breve do que o programa executa e assuas condies necessrias para execuo.
Elementos de texto: Definem-se os textos que sero relacionados s mensagens,rtulos de parmetros do programa e ttulos e nome de colunas para o relatriogerado pelo programa.
Criando um programa passo-a-passo.
Entrar no editor ABAP na transao SE38, preencher o nome do programacomeando com Z, clicar em create.
Workshop para desenvolvedores ABAP/4 34
Entra do cdigo fonte
Para editar variantes de execuo do programa
Editar os atributos do Programa
Alterar os Textos dos Parmetros de Seleo
-
7/27/2019 Academia ABAP.doc
35/162
4- Editor ABAP
Logo aps entrar com os atributos do programa, entrar com a Classe deDesenvolvimento/Package (perguntar para o gerente qual classe dedesenvolvimento se no estiver na especificao)
Quando a escolha for SAVE/SALVAR, deve-se entrar com a REQUEST/TASK.
Workshop para desenvolvedores ABAP/4 35
Aplicao: Voc entra com omdulo ou a aplicao que oprograma faz parte
Clicar em SAVE
Entrar com a Classede Desenvolvimento
SAVE para
amarrar a umaRequest/Task Objeto Local quando no voutransportar somente teste
-
7/27/2019 Academia ABAP.doc
36/162
4- Editor ABAP
Para evitar maiores problemas crie um habito de salvar verificar ativar.
Verificao de sintaxe muito importante ir verificando a sintaxe sempre, pois,isso facilita para encontrar os erros, caso d algum erro na verificao de sintaxeaparecer da seguinte forma.
Workshop para desenvolvedores ABAP/4 36
Clicar aqui ou tecla F4,para escolher umaRequest j criada
Clicar em Criar quando for amarrar emuma nova request
OK apsescolher Req.
Prestar ateno noStatus, sempre deixaractive, se for feita umaalterao e salva, masno ativa, o depurador
considera a ltima ativa.
1 - Salvar
2 - Verificar, faz
a verificao desintaxe.
3 - Ativar,
ativa averso atual
Testar paraexecuo do
programa diretodo cdigo fonte
Caso ocorra algum errona verificao de sintaxe,aparecer assim. O(s)erro(s) logo abaixo docdigo fonte.Para ir direto na linha
que est acusandoerro clicar aqui
-
7/27/2019 Academia ABAP.doc
37/162
4- Editor ABAPCriando telas de Seleo:
SELECTION-SCREEN: comando utilizado para definir a tela de seleo, com elepode se criar blocos dentro de uma mesma tela, incluir frames com textos
explicativos, etc.
PARAMETER: utilizado para criao de um campo nico de seleo, obter assuas variaes de sintaxe atravs do help (F1).
SELECTION-SCREEN BEGIN OF BLOCK bloco3 WITH FRAME TITLE text-003.PARAMETER: p_num1 TYPE i,
p_sin(1) TYPE c,p_num2 TYPE i.
PARAMETER: P_MATNR LIKE MARA-MATNR.SELECTION-SCREEN end of BLOCK bloco3.
OBS: TEXT-003 uma forma de se incluir textos de uma forma dinmica, para criaresses objetos digite text-003, d dois clicks e se no existir o editor vai perguntar sevoc deseja criar. Voc entra com o texto na linguagem e depois faz a traduopara as outras linguagens na transao SE63.
TYPE: est definindo o tipo da varivel de tela de seleo, deve-se entrar
com o tamanho e o tipo do dado a ser armazenado.
LIKE: est definindo o tipo da varivel de tela de seleo por referncia,dizendo que a varivel ter o mesmo tipo e tamanho da varivel MATNR databela MARA que esto no Dicionrio ABAP.
Utilizao no SELECT: para utilizao no comando select, usa-se ocomparativo = ou EQ caso o campo esteja em branco ele busca todos osregistros que tenham contedo igual a branco.
Where MATNR = P_MATNR.
4- Editor ABAP
Workshop para desenvolvedores ABAP/4 37
-
7/27/2019 Academia ABAP.doc
38/162
SELECT-OPTIONS: utilizado para criao de um campo de/at de seleo comvrias opes de comparaes, obter as suas variaes de sintaxe atravs do help(F1).
TABLES: MARA.
SELECTION-SCREEN BEGIN OF BLOCK bloco4 WITH FRAME TITLE text-004.SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.SELECTION-SCREEN end of BLOCK bloco4.
FOR: Para a opo Select-options utilizasse FOR no lugar do LIKE.
TABLES: O Comando tables, disponibiliza a estrutura da tabela do banco dedados, para ser utilizada dentro do programa, obrigatria essa disponibilizaoquando a tabela vai ser utilizada no FOR.
TABELA DO SELECT-OPTIONS:
Utilizao no SELECT: para utilizao no comando select, usa-se ocomparativo IN e automaticamente ele j entende o tipo de comparao a fazer,caso o campo esteja em branco ele busca todos os registros.
Where MATNR IN S_MATNR.
Para alterar os textos que aparecem na tela de seleo:
Workshop para desenvolvedores ABAP/4 38
SIGN OPTION LOW HIGH
I EQ MATERIAL
I BT 100 200
Clicando aqui, vocpode definir vriascomparaes a seremfeitas na seleo
Entrar comos textosAqui
-
7/27/2019 Academia ABAP.doc
39/162
4- Editor ABAPAlguns Comandos:
DATA: utilizado para definir uma varivel de qualquer tipo (simples, estruturaou tabela interna).
DATA: V_num TYPE i.
DATA: v_matnr LIKE mara-matnr.
DATA: s_mara LIKE mara.
DATA: begin of t_mara occurs 0,matnr LIKE mara-matnr,
end of t_mara.
IF e CASE: so utilizados como comparativos na lgica do ABAP.
IF p_sin = '+'. Ouv_num = p_num1 + p_num2.
ELSEIF p_sin = '-'.v_num = p_num1 + p_num2.
ELSE.
ENDIF.
Detalhes:o No trmino de toda instruo ABAP, deve ter um ponto final, para evitar
repeties pode-se utilizar : aps o comando e , separando as instrues,mas, deve terminar com .
o Quando me referencio a uma string utilizo aspas simples.
MOVE ou = : esses so os comandos de atribuio de valores.
MOVE: 2 to v_num,'MATERIAL to v_matnr.
ouv_num = 2.
v_matnr = MATERIAL.
WRITE e WRITE ... TO ... : Utilizado para imprimir em tela, pode se tambmmover o resultado dessa impresso para dentro de outra varivel. Quando seexecuta o comando write o ABAP faz todas as tradues necessrias de acordocom a configurao do usurio (moeda, quantidade). Ver variaes com o F1.
write: / v_num. Ou write; v_num to v_aux.
Workshop para desenvolvedores ABAP/4 39
CASE p_sin.WHEN '+'.v_num = p_num1 + p_num2.
WHEN '-'.v_num = p_num1 + p_num2.
WHEN OTHERS.
ENDCASE.
Na SE38 Escolheropes Elemento detextos e
-
7/27/2019 Academia ABAP.doc
40/162
4- Editor ABAPExecutando Programa:
Alguns Exemplos
EXEMPLO 1REPORT ZEXP0001.WRITE: '111111'.WRITE: '222222',
'333333'.WRITE: /'111111'.WRITE: 15 '333333'.WRITE: / TEXT-001.ULINE.ULINE 8(6).
SKIP.SKIP 2.WRITE : 8 SY-LANGU.WRITE : / SY-DATUM UNDER SY-LANGU.
Existem alguns tipos de variveis chamadas de variveis do sistema. Elaspossuem informaes e dados do processamento, como o idioma de acesso (sy-langu), a data (sy-datum), a hora (sy-uzeit), etc.. Essas informaes esto contidasna estrutura SYST (Campos de sistema ABAP, que pode ser abreviada para SY) epodem ser acessadas conforme o exemplo acima, o nome da estrutura mais ocampo que se deseja.
EXEMPLO 2REPORT ZEXC0002 NO STANDARD PAGE HEADING.WRITE 'PAG 1'.NEW-PAGE.WRITE 'PAG 2'.TOP-OF-PAGE.WRITE : 'EXEMPLO 2 - CURSO ABAP/4',
80 'Page',SY-PAGNO.
ULINE.
Workshop para desenvolvedores ABAP/4 40
Na SE38 s clicar aquiou tecla F8 aqui ou dentrodo cdigo fonte
-
7/27/2019 Academia ABAP.doc
41/162
4- Editor ABAP
EXEMPLO 3
REPORT ZEXP0003.
WRITE : 'NORMAL'.
FORMAT INTENSIFIED OFF.
WRITE : 'NEGRITO '.
FORMAT COLOR 1.
WRITE : 'FUNDO AZUL'.
FORMAT COLOR OFF.
FORMAT INTENSIFIED ON.
WRITE : 'NORMAL'.
EXEMPLO 4
REPORT ZEXP0004.
DATA: NOME(20) TYPE C,RG(10) TYPE I,DATA LIKE BKPF-BUDAT,HORA(8) VALUE '14:05:45'.
MOVE 'Solution Center' TO NOME.RG = 42159818.DATA = '19973005'.
SKIP 2.WRITE: 'Nome:',NOME,
/ 'RG:',RG UNDER NOME,
/ 'Data:',DATA,
/ 'Hora:',HORA.
Workshop para desenvolvedores ABAP/4 41
-
7/27/2019 Academia ABAP.doc
42/162
4- Editor ABAP
EXEMPLO 5
REPORT ZEXP0005.
PARAMETER: P_NOME1(15) TYPE C,P_NOME2(15) TYPE C DEFAULT 'Abap Factory',P_BOTAO1 RADIOBUTTON GROUP G1,P_BOTAO2 RADIOBUTTON GROUP G1.
WRITE P_NOME1.
IF P_NOME2 NE 'ABAP FACTORY'.WRITE P_NOME2.
ENDIF.
IF P_BOTAO1 = 'X'.WRITE / 'BOTO 1 ACIONADO'.
ELSE.WRITE / 'BOTO 2 ACIONADO'.
ENDIF.
Workshop para desenvolvedores ABAP/4 42
-
7/27/2019 Academia ABAP.doc
43/162
5- Open SQL
O ABAP oferece um conjunto de comandos que permite realizar operaescom os dados armazenados no banco, o Open SQL.A idia central do Open SQL prover uma linguagem de acesso ao banco independente de plataforma. Oscomandos Open SQL tm de passar pelo interpretador ABAP, que os traduz paraos comandos SQL do banco de dados que esteja sendo utilizado.
Comandos
Dentro do Open SQL, podem-se utilizar os seguintes comandos:
SELECT: permite a leitura de dados do banco de dados.
INSERT: insere dados no banco.
UPDATE: atualiza dados.
MODIFY: atualiza dados existentes ou os acrescenta caso noexistam no banco.
DELETE: apaga registros do banco de dados.
OPEN CURSOR, FETCH, CLOSE CURSOR: respectivamente cria, l e fecha
um cursor dentro do banco de dados.
Campos de sistema
Os dois principais campos de sistema envolvidos em operaes do Open SQLso o SY-SUBRC, que retorna zero caso a operao tenha sido bem-sucedida, e oSY-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 ABAPdefinir o mandante como o mandante atual, a no ser que seja especificada aopo CLIENT SPECIFIED.
Workshop para desenvolvedores ABAP/4 43
-
7/27/2019 Academia ABAP.doc
44/162
5- Open SQL
SELECT
O comando SELECT retorna um conjunto de dados (registros) que atendam aum determinado critrio. As clusulas do comando SELECT so as seguintes:
SELECT : Pode-se selecionar uma lista de campos aserem retornados, separados por espaos, ou o caractere * para retornartodos os campos disponveis. A opo SINGLE retorna somente umregistro que atenda s restries impostas. Caso a tabela tenha sidodeclarada atravs de TABLES, automaticamente criado um registro na
memria com o mesmo nome para manipul-la; caso o SELECT tragacampos de mais de uma tabela, no possvel utilizar esse artifcio.Nesse caso, as tabelas no precisam ser declaradas em TABLES, mas aseleo dos campos deve separar o nome da tabela e o campo com umtil (~). Exemplo:
TABLES: SFLIGHT.
DATA: T_SFLIGHT LIKE SFLIGHT.
SELECT CARRID CONNID FLDATE SEATSOCCFROM SFLIGHT INTO TABLE T_SFLIGHT.
INTO [| TABLE ]: Permite armazenar oretorno numa tabela interna ou em campos definidos com o comandoDATA. O uso de SELECT sem especificar SINGLE ou INTO TABLEexige o uso de ENDSELECT.
FROM [[INNER|LEFT OUTER] JOIN , ..]: Especifica aorigem dos dados.
FOR ALL ENTRIES Usado quando selecionamos dados de uma
tabela e precisamos de dados de outra tabela para compr ascondies do where.
SELECT * FROM dtab FOR ALL ENTRIES in itab where
EXEMPLO:SELECT * FROM BSEG FOR ALL ENTRIES IN T_BKPF
WHERE BUKRS = T_BKPF-BUKRSAND BELNR = T_BKPF-BELNRAND BELNR = T_BKPF-BELNR.
Onde T_BKPF uma tabela interna que recebeu a tebela BKPF.
Workshop para desenvolvedores ABAP/4 44
-
7/27/2019 Academia ABAP.doc
45/162
5- Open SQL
NOTA: se itab estiver vazia, esse comando selecionar todo o contedo da tabela,pois nenhuma restrio est sendo colocada. Uma maneira de fazer essaverificao a seguinte:
IF NOT itab[] IS INITIAL. se itab no est vaziaSELECT * FROM dtab FOR ALL ENTRIES in itab
where campo = itab-campo ENDIF. fim do: se itab no est vazia
WHERE : A clusula WHERE especifica as condies de busca.Por exemplo, WHERE CARRID = AA faz com que apenas os registrosem que o campo CARRID tenha contedo igual a AA sejam retornados.
Maiores detalhes sobre o comando SELECT podem ser encontrados noHelp On-Line do R/3.
TESTE SELECT: Para saber se o select encontrou algum registro ou no,utilizamos uma varivel de sistema SY-SUBRC, se o contedo dessa varivel for 0
encontrou, caso contrrio no encontrou nenhum registro. E isso vale para tambmpara todos os comandos ABAP, quando executado com sucesso SY-SUBRC iguala zero.
Se sy-subrc = 4 : nenhum dado foi lido
INSERT: O comando INSERT insere um novo registro no banco de dados, apartir de uma rea de dados especificada em TABLES ou uma rea declarada comDATA. Para usar INSERT, devem-se colocar os dados desejados na reaintermediria e, em seguida, chamar o comando INSERT. Caso a rea no sejaespecificada em TABLES, deve ser usada a opo FROM:
UPDATE: O comando UPDATE funciona como o comando INSERT, podendoalterar dados no banco a partir de uma rea ou tabela interna. No caso da tabelainterna, no necessrio especificar a clusula WHERE: sero alterados osregistros correspondentes de acordo com as chaves.
MODIFY: O comando MODIFY opera da mesma forma que o comandoUPDATE, 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.
Workshop para desenvolvedores ABAP/4 45
-
7/27/2019 Academia ABAP.doc
46/162
5- Open SQL
LUW COMMIT e ROLLBACK: Quando trabalhamos com alterao nos dados dobanco, bom sabermos que todas as alteraes que estamos fazendo ainda noaconteceram efetivamente no banco, isso s ocorre quando encontra-se o primeirocomit, automaticamente quando acaba a execuo de um programa j executadoum commit:
Exemplo:INSERT .IF SY-SUBRC = 0.
INSERT .
IF SY-SUBRC = 0.COMMIT WORK.
ELSE.ROLLBACK WORK.
ENDIF.ENDIF.
Consideraes sobre os diferentes tipos de select (PERFORMANCE)
1 - SELECT * FROM (Quando no se impe nenhum tipo de restrio, ocorre uma varredura sequencialdos registros da tabela. Quando se utiliza grandes tabelas, isso obviamente afeta oruntime.
Performance: Select * - seleciona todas as colunas de uma tabela. melhorsempre especificar as colunas, pois em caso de tabelas com muitas colunas,prejudicar a performance).
2 - SELECT * FROM WHERE eq .(L todos os registros da tabela especificada onde o campo igual ao contedo
especificado)Performance: Select * Where - seleciona todas as colunas de uma tabela de acordocom a condio de where. melhor sempre especificar as colunas, pois em casode tabelas com muitas colunas, prejudicar a performance.
3 - SELECT * FROM WHERE BETWEEN and.Ex.: field1 = 100 e field2 = 500. Pega inclusive 100 e 500. Voc trabalha com orange.
Workshop para desenvolvedores ABAP/4 46
-
7/27/2019 Academia ABAP.doc
47/162
4 - SELECT * FROM WHERE LIKE ._R%._ = a primeira letra no importa o que vira segunda dever ser R (eu defini)% = no importa a sequncia de caracteres que vir.
5- Open SQL
5 - SELECT * FROM WHERE IN (.,.).Exemplo: select * from where campo1 in (123,1000) - podem ser valores ouliterais como perguntar se campo1 123 ou 1000.
6 - 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-tableMove: I to itab-sign, btto itab-option, 500 to itab-low, 1000 to itab-high.Append itab. Move: I to itab-sign, btto itab-option, 440 to itab-low.Append itab.
7 - 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 osdados em uma tabela interna e classific-los.
8 - SELECT * FROM BYPASSING BUFFER.(Usado para ler diretamente da tabela original, e no do buffer).
OBS.: Select single * sempre com chave completa especificada. Particularidade doAbap/4
Select * - procurar evitar. Informar as colunas que sero necessrias,apenas.
Uso de comando extract (insert header, details) para relatrios
9 - SELECT * FROM APPENDING TABLE .(L os registros e os inclui - no sobrepe - em um internal table).
10 - SELECT FROM INTO TABLE .(A estrutura da tabela interna deve corresponder estrutura da tabela que estsendo acessada. O sistema l os registros em conjunto, no individualmente, e oscoloca dentro de uma internal table. Este processo mais rpido que lerindividualmente atravs de um LOOP e ir gravando os registros, um a um).
Workshop para desenvolvedores ABAP/4 47
-
7/27/2019 Academia ABAP.doc
48/162
5- Open SQL
11 - SELECT . INTO CORRESPONDING FIELDS OF TABLE .(Neste caso a estrutura da tabela interna no precisa corresponder estrutura databela que est sendo acessada. o nome da internal table. Movimentar osregistros para as colunas definidas na internal table que possuam nome igual ao databela acessada).Obs.: corresponding ou appending corresponding no exigem o endselect.
12 - 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).
13 - SELECT SINGLE * FROM SPFLI WHERE .... EQ (Toda vez que se usa select single * a chave primria completa deve serespecificada. Se a chave especificada no qualificada, voc receber umamensagem de warning e a performance ficar prejudicada).No caso de haver a necessidade de acessar um nico registro via select, as opesso: select * .. seguido de comando exit OU select * up to 1 row.Neste caso no necessrio especificar a chave completa.
14 - SELECT INTO (, , ) FROM .WHERE .
L as colunas especificada (a1, a2). Aps INTO devero ser especificadas as reasde trabalho auxiliares (f1, f2). O nmero de colunas lidas dever ser igual aonmero de work-areas especificadas.
15 - SELECT MAX(campo)MIN(campo)
AVG(campo)COUNT(*) FROM INTO (..,,..,.)WHERE .
AVG e SUM: somente para campos numricos.No se usa endselect.Mais rpido fazer uma rotina mo que utilizar este comando.
16 - SELECT * FROM SFLIGHT WHERE PRICE IN ITAB.
Workshop para desenvolvedores ABAP/4 48
-
7/27/2019 Academia ABAP.doc
49/162
5- Open SQL
17 - SELECT * FROM () INTO .Exemplo: data: begin of WA,
line(100),end of WA.
Parameters: tabname(10) default SPFLI. *** especificando o nome da tabela emtempo dinamicamente no select statement sempre consome mais tempo de CPUque especificando estaticamente no programa ***
Select * from (tabname) into WAWrite .
Endselect.
18-SELECT * FROM FOR ALL ENTRIES IN WHEREcampo1 = andcampo2 =
Defino uma tabela interna. Alimento os campos desta tabela interna. (move eappend).No meu select campo1 e campo2 sero os campos definidos e alimentados natabela interna.
19 - SELECT carrid MIN( price ) max (price ) INTO (carrid, minimum, maximum)FROM sflight GROUP BY carrid.(Todos os campos que eu quero que apaream na minha lista eu preciso especificaraps a clusula GROUP BY)(carrid, maximum e minimum so campos auxiliares).(Se o nome do database no conhecido at runtime no se pode especificar aclusula GROUP BY).
Workshop para desenvolvedores ABAP/4 49
-
7/27/2019 Academia ABAP.doc
50/162
-
7/27/2019 Academia ABAP.doc
51/162
5- Open SQLEXEMPLO 8
REPORT ZEXP0008 MESSAGE-ID ZA.TABLES: BKPF.
PARAMETER: P_BELNR LIKE BKPF-BELNR DEFAULT '5000000041',P_ANO LIKE BKPF-GJAHR DEFAULT ' 2001'.
DATA: ARQ LIKE RLGRAP-FILENAME VALUE 'C:\TEMP\curso.txt'.DATA: BEGIN OF T_ZCURSO OCCURS 0,
ZDATA LIKE BKPF-BUDAT,SPACE1 TYPE C VALUE ' ',ZBELNR LIKE BKPF-BELNR,SPACE2 TYPE C VALUE ' ',ZGJAHR LIKE BKPF-GJAHR.
DATA: END OF T_ZCURSO.SELECT * FROM BKPF WHERE BELNR = P_BELNRAND GJAHR = P_ANO.
T_ZCURSO-ZDATA = BKPF-BUDAT.T_ZCURSO-ZBELNR = BKPF-BELNR.T_ZCURSO-ZGJAHR = BKPF-GJAHR.APPEND T_ZCURSO.
ENDSELECT.IF SY-SUBRC = 0.
CALL FUNCTION 'WS_DOWNLOAD'EXPORTING
* bin_filesize = ' '* codepage = ' '
FILENAME = ARQ* filetype = ' '* mode = ' '* wk1_n_format = ' '* WK1_N_SIZE = ' '* WK1_T_FORMAT = ' '* WK1_T_SIZE = ' '* col_select = ' '* col_selectmask = ' '* importing* filelength =
TABLESDATA_TAB = T_ZCURSO
* fieldnames =EXCEPTIONS
FILE_OPEN_ERROR = 1FILE_WRITE_ERROR = 2INVALID_FILESIZE = 3INVALID_TABLE_WIDTH = 4INVALID_TYPE = 5NO_BATCH = 6UNKNOWN_ERROR = 7OTHERS = 8.
MESSAGE E007.ELSE.
MESSAGE E008.ENDIF
Workshop para desenvolvedores ABAP/4 51
-
7/27/2019 Academia ABAP.doc
52/162
6- Modularizao
Todo programa ABAP estruturado e desenvolvido para ser processado embloco:
Blocos de processamentos que so chamados pelo sistema:o Blocos de Eventoso Mdulos de Dilogo
Blocos de processamentos que so chamados pelo programa.o Sub-rotinaso Mdulos de funoo Mtodos
INCLUDE
Programa do tipo include, pode se modularizar um programa utilizandocdigos fontes no executveis chamados includes e chama-se esses cdigos dedentro do programa principal. comumente usado para declaraes de variveisem programas muito extensos.
Workshop para desenvolvedores ABAP/4 52
-
7/27/2019 Academia ABAP.doc
53/162
6- Modularizao
Processamento de Mensagens
MESSAGE ++()
Exemlo: MESSAGE I368(00) with Erro XXXXX.
Tipos de Mensagem
Sub-rotina - FORM
Para estruturar nossos programas, utilizamos os blocos de processamentoscontrolados pelo nosso pr[oprio programa os FORMs, delimitamos as rotinas deprocessamentos em pequenos grupos, o que facilita a manuteno de nossocdigo. Podemos passar e receber valores para essas rotinas, tanto por parmetrocomo por valor.
START...PERFORM TESTE123.
END....
FORM TESTE123.
ENDFORM.
Workshop para desenvolvedores ABAP/4 53
-
7/27/2019 Academia ABAP.doc
54/162
6- Modularizao
Mdulos de Funes
So rotinas de processamento externas e independentes de programa, ficamamarradas a um grupo de funes e tem o seu cdigo desenvolvidos emincludes,podem ser chamadas por programas diferentes, tambm trabalhamcom passagem de parmetros e de tabelas, e com excees (erros noprocessamento). Praticamente pouco se cria em matria de funes, o que maisfazemos utilizar as funes prontas disponibilizadas pela SAP.
Sempre que chamamos uma funo, aconselhvel utilizar os modelos doeditor ABAP, e tambm tomar cuidado com os tipos dos parmetros que estamospassando, pois, se passamos um campo com tipo diferente pode dar um shortdump, para evitar isso entrar dentro da funo, consultar o tipo do parmetro e criarigual.
Workshop para desenvolvedores ABAP/4 54
-
7/27/2019 Academia ABAP.doc
55/162
6- Modularizao
Blocos de Eventos.
Os blocos de eventos so controlados pelo sistema e s valem paraprogramas do tipo executvel. Abaixo vemos os principais:
REPORT...
INICIALIZATION.Primeiro passo a ser executado no programa, antes da tela de seleo e antes
da lgica de processamento.
AT SELECTION-SCREEN.Executa logo aps sair da tela de seleo, utilizado para fazer tratamentos de
obrigatoriedade de campos e similares.
TOP-OF-PAGE.Executa quando encontrado o primeiro comando WRITE dentro da lgica
principal, utilizado para colocar cabealho, textos que devem sair em todas aspginas.
END-OF-PAGE.Informaes que apaream no rodap do relatrio
OBS: essas informaes s aparecero se o tamanho da pgina estiver definido nocomando REPORT e somente qdo houver quebra de pgina. Caso contrrio, noaparecer
START-OF-SELECTION.Entre o START-OF-SELECTION e o END-OF-SELECTION, se encontra a
lgica principal do programa, quando programamos de uma forma estruturadacolocamos aqui apenas chamadas de sub-rotinas, para evitar poluio de cdigo.
Ex:PERFORM seleciona_dados.PERFORM tratamento_interno.PERFORM impressao_dados.
PERFORM gera_arquivos.END-OF-SELECTION.
AT LINE-SELECTION.Somente executado se o usurio der um duplo click em uma linha mostrada
no relatrio, ou marcar a linha e pedir para ver detalhe, utilizada para listasinterativas, drill-down.
AT USER-COMMAND.Somente executado se o usurio der um click em algum objeto do menu,
utilizado para listas com botes de interao.
Workshop para desenvolvedores ABAP/4 55
-
7/27/2019 Academia ABAP.doc
56/162
6- Modularizao
Processo Geral de Programao
Nome e Descrio doPrograma
Declarao deVariveis
Montagem daTela deInput
Montagem eImpresso do
Relatrio ou outra lgica
Workshop para desenvolvedores ABAP/4 56
-
7/27/2019 Academia ABAP.doc
57/162
7- Report/Listas
Criao de Listas Bsicas
Criando uma lista simples
A sintaxe bsica do comando a seguinte:WRITE [:] [/] [|] [, |] [, ...] [opes].
A sintaxe completa do comando pode ser encontrada no Help do R/3. Existemopes para alterar a cor dos elementos da tela, criao de molduras e insero decones na lista. Observe o cdigo a seguir:
REPORT ZSELECT00 .TABLES: SPFLI, SFLIGHT.SELECT * FROM SPFLI.
WRITE: / SPFLI-CARRID, SPFLI-CONNID, SPFLI-CITYFROM,SPFLI-AIRPFROM, SPFLI-CITYTO, SPFLI-AIRPTO.
ENDSELECT.
Workshop para desenvolvedores ABAP/4 57
-
7/27/2019 Academia ABAP.doc
58/162
7- Report/Listas
Com esse trecho de cdigo apenas, o R/3 gera uma lista simples do contedode alguns campos da tabela SPFLI:
Cabealhos e rodaps
Existem alguns comandos e opes que permitem melhorar o aspecto e afuncionalidade de uma lista. No exemplo, a lista ainda no tem cabealho. Paracri-los, pode-se editar diretamente o cabealho usando a opo Saltar Elementos de Texto Ttulos de Lista. Nesse caso, deve-se saber previamente emque 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 exibioda lista, facilitando muito o posicionamento dos textos. Tambm possvel suprimira gerao do ttulo bsico, substituindo-o por um ttulo composto pelo programaABAP. Para tanto, deve-se colocar na declarao REPORT do incio do programa aopo NO STANDARD PAGE HEADING e implementar no programa o eventoTOP-OF-PAGE. Caso tambm queira um rodap para cada pgina, use o eventoEND-OF-PAGE para escrev-lo.
Workshop para desenvolvedores ABAP/4 58
-
7/27/2019 Academia ABAP.doc
59/162
7- Report/Listas
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 docomando 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 admitequalquer uma das cores padro do R/3, disponveis na transao LIBS:
Por exemplo, para modificar um campo de forma a usar a cor COL_KEYmenos 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, omesmo 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.
Workshop para desenvolvedores ABAP/4 59
-
7/27/2019 Academia ABAP.doc
60/162
7- Report/Listas
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 determinadoponto do programa, pode-se usar o comando FORMAT, com as mesmas opes deformatao vistas para o comando WRITE. Com isso, todos os campos a seguirsero exibidos com as opes especificadas pelo comando FORMAT, at que sejaencontrado um novo comando FORMAT. Pode-se continuar usando osmodificadores no WRITE, mas os mesmos iro basear-se no novo padroestabelecido 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 comandoWRITE: / SPFLI-CARRID INTENSIFIED OFF, SPFLI-CONNID.
a cor exibida para o campo SPFLI-CARRID ser COL_KEY INTENSIFIED OFF, eno a cor padro sem INTENSIFIED. O campo SPFLI-CONNID aparecer da formaestipulada no comando FORMAT.
O formato pode retornar ao formato standard usando o comando FORMATRESET.
Posicionando os campos
Pode-se alterar o posicionamento dos campos dentro de uma linha colocandoo 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 tamanhodele no dicionrio de dados). Por exemplo, para posicionarmos o mesmo campoque modificamos anteriormente na dcima coluna, estabelecendo um tamanho decinco caracteres, usamos o comando.
WRITE: /10(5) SPFLI-CARRID COLOR COL_KEY INTENSIFIED OFF HOTSPOT.
Workshop para desenvolvedores ABAP/4 60
-
7/27/2019 Academia ABAP.doc
61/162
7- Report/Listas
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 querformatar. Com isso, o campo ser formatado de acordo com a definio nas tabelasstandard 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.
Um trecho do report seria:
150420 ITL Sem CURRENCY: 683.231,44 Com CURRENCY: 68.323.144130520 ITL Sem CURRENCY: 318.202,60 Com CURRENCY: 31.820.260
Sem o uso da opo CURRENCY, o valor apresentado no formato genricodo usurio; com o CURRENCY, mesmo caso tenhamos moedas diferentes em cadaregistro, 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 programasABAP. Os smbolos de texto so criados dentro de classes de mensagem, queservem para separar logicamente os smbolos de texto relacionados. Dentro daclasse de mensagem, cada texto deve ser identificado por um nmero de trsposies. 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 comTEXT, coloca naquela posio um smbolo de texto correspondente ao nmeroaps o hfen na classe entre parnteses. Caso seja usada a opo MESSAGE-ID na declarao REPORT, no necessrio especificar a classe demensagem junto ao smbolo de texto. O uso de smbolos de texto pode simplificar amanuteno de programas complexos ao agrupar todas as mensagens de texto emum s local.
Para editar os smbolos de texto, use, na janela do editor ABAP, a opoSaltar Elementos de Texto Smbolos de Texto.
Workshop para desenvolvedores ABAP/4 61
-
7/27/2019 Academia ABAP.doc
62/162
7- Report/Listas
Criao de Listas ComplexasAt 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 umalista.
O Evento AT LINE-SELECTION
O processamento das listas de detalhe dentro do R/3 feito pelo evento ATLINE-SELECTION. O R/3 executa os comandos que houver dentro desse eventotoda vez que o usurio clica duas vezes sobre uma linha em uma lista ouclica sobreum campo marcado com HOTSPOT, ou teclando-se F2 sobre um registro, ouescolhendo um boto que tenha o cdigo standard PICK a ele associado.
HIDE
Atravs do comando HIDE, possvel armazenar informao a respeito deuma linha para uso do evento AT LINE-SELECTION. Suponha que exista uma listacom os vos para uma determinada companhia area, e deseja-se exibir asreservas para aquele vo. Para exibir a lista, necessrio armazenar em algumlocal informaes sobre a linha selecionada pelo usurio, e isso pode ser feitoatravs do comando HIDE do ABAP.
O comando HIDE guarda a informao sobre os campos desejados, alm donmero da linha que est sendo processada, em uma tabela interna, que automaticamente acessada no evento AT LINE-SELECTION. Veja o seguinteexemplo:
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 ANDCONNID = SFLIGHT-CONNID ANDFLDATE = SFLIGHT-FLDATE.
WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE,SBOOK-CUSTOMID.
ENDSELECT.
Workshop para desenvolvedores ABAP/4 62
-
7/27/2019 Academia ABAP.doc
63/162
7- Report/Listas
6- Report/Listas
Dentro desse programa, a cada linha lida no comando SELECT, est sendoarmazenada informao sobre a chave dentro da rea de HIDE. No necessrioque os campos selecionados com HIDE faam parte da lista impressa via WRITE.Quando o usurio seleciona um determinado registro, o processador de lista ABAPautomaticamente procura na rea de HIDE o registro correspondente quelenmero 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 oscomandos 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.
...
Workshop para desenvolvedores ABAP/4 63
-
7/27/2019 Academia ABAP.doc
64/162
7- Report/Listas
Listas em mais de dois nveis
Quando a lista apresentar mais de dois nveis, necessrio identificar o nvelque est sendo processado s existe um evento AT LINE-SELECTION e umTOP-OF-PAGE DURING LINE-SELECTION por programa. Para tanto, deve-seutilizar o campo de sistema SY-LSIND, que tem o nvel corrente de lista. A primeirasub-lista tem SY-LSIND igual a 1, a segunda, 2, e assim por diante, at o subnvelmximo 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.WRITE: Reservas.
WHEN 2.WRITE: Cliente.
ENDCASE.
AT LINE-SELECTION. CASE SY-LSIND.
WHEN 1.SELECT * FROM SBOOKWHERE 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 SCUSTOMWHERE ID = SBOOK-CUSTOMID.
WRITE: / SCUSTOM-ID, SCUSTOM-NAME.ENDSELECT.
ENDCASE.
Workshop para desenvolvedores ABAP/4 64
-
7/27/2019 Academia ABAP.doc
65/162
7- Report/Listas
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, teclasde funo, botes da barra), alm do comando standard PICK.
6- Report/Listas
Abrindo Telas Dentro de Relatrios
Uma lista secundria pode ser mostrada dentro de uma janela ao colocar-se adeclarao WINDOW STARTING AT [ENDING AT ]. Oscomandos WRITE subseqentes sero direcionados para a janela especificada. Porexemplo, alterando o cdigo da seguinte maneira, podemos criar janelas nas listassecundrias:
AT LINE-SELECTION.CASE SY-LSIND.
WHEN 1.WINDOW STARTING AT 5 3 ENDING AT 40 10.SELECT * FROM SBOOKWHERE CARRID = SFLIGHT-CARRID AND
CONNID = SFLIGHT-CONNID ANDFLDATE = 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 SCUSTOMWHERE ID = SBOOK-CUSTOMID.WRITE: / SCUSTOM-ID, SCUSTOM-NAME.
ENDSELECT.ENDCASE.
Chamando transaes a partir de listagens
Para chamar uma transao a partir de uma listagem, pode-se utilizar o
comando CALL TRANSACTION dentro do AT LINE-SELECTION, onde o cdigo da transao. Aps executar a transao, o controle deexecuo passar para a linha seguinte ao CALL TRANSACTION.
Workshop para desenvolvedores ABAP/4 65
-
7/27/2019 Academia ABAP.doc
66/162
7- Report/Listas
Exemplos de comandos e eventos em geral
Workshop para desenvolvedores ABAP/4 66
-
7/27/2019 Academia ABAP.doc
67/162
7- Report/Listas
Workshop para desenvolvedores ABAP/4 67
-
7/27/2019 Academia ABAP.doc
68/162
7- Report/Listas
Workshop para desenvolvedores ABAP/4 68
-
7/27/2019 Academia ABAP.doc
69/162
7- Report/Listas
Workshop para desenvolvedores ABAP/4 69
-
7/27/2019 Academia ABAP.doc
70/162
7- Report/Listas
Workshop para desenvolvedores ABAP/4 70
-
7/27/2019 Academia ABAP.doc
71/162
7- Report/Listas
Workshop para desenvolvedores ABAP/4 71
-
7/27/2019 Academia ABAP.doc
72/162
7- Report/Listas
Workshop para desenvolvedores ABAP/4 72
-
7/27/2019 Academia ABAP.doc
73/162
8- Tabela Interna
Criando Tabelas Internas (Estruturas Complexas de ArmazenagemTemporria).
Tabela interna
Dentro de um programa ABAP, muitas vezes impossvel trabalhar apenascom os comandos de seleo e alterao de dados diretamente na tabela. Paramanipular localmente os dados, o ABAP permite o uso de tabelas internas, que
so reas de memria organizadas como tabelas. Essas tabelas internas podem tero mesmo formato de uma tabela do banco de dados, o que as qualifica para seremusadas como reas de manipulao intermediria, o que traz benefcios em termosde performance geral do R/3. Uma tabela interna declarada atravs do comandoDATA, onde se especifica qual o tipo de linha da tabela, se ela tem headerline equal a forma de operao da mesma. A tabela pode ser manipulada porcomandos:
De insero:o APPEND: Inclui um novo registro na TI, no ltimo registro.o INSERT: Inseri um novo registro em uma posio especifica.o COLLECT: Compara os campos tipo texto, caso encontre chaves
iguais, soma os campos numricos, se no inclui um novo registro. De excluso:
o DELETE: Exclui um registro da tabela interna, usado dentro doloop at exclui o registro corrente, caso contrrio usar o INDEXmostrando a linha a ser excluda.
o REFRESH: Limpa todos os registros da TIo CLEAR: Limpa somente o contedo do header line da TI
De alterao de dados:o MODIFY: Altera um registro da tabela interna, usado dentro do
loop at altera o registro corrente, caso contrrio usar o INDEXmostrando a linha a ser alterada.
Workshop para desenvolvedores ABAP/4 73
-
7/27/2019 Academia ABAP.doc
74/162
8- Tabela Interna
De leitura de dados:o LOOP AT WHERE : Utilizado para ler mais de
uma linha da tabela interna, para os casos de tabela interna comHeader line automaticamente o sistema joga os dados para esteregistro, caso no deve-se indicar onde ser jogado os dados lidos.Filtro a opo WHERE.
o READ TABLE WITH KEY : Como o Loop at l osdados de uma tabela interna s que apenas uma linha por vez.
OBS: Os comandos DELETE e MODIFY quando usados de forma incorreta fora doloop at e sem a indicao do INDEX, ocasiona Short Dump.
Por exemplo, para declarar uma tabela interna, conforme no exemplo, usou-sea declarao TYPES para declarar uma estrutura que contm os campos quedesejamos ter na tabela. Em seguida, a tabela criada atravs da declaraoDATA, usando a estrutura como modelo.
Exemplos:
data: begin of t_spfli occurs 0,carrid like spfli-carrid,connid like spfli-connid,end of t_spfli.
data: begin of t_sflight occurs 0.include structure sflight.data: end of t_sflight.
data: t_aux like t_sflight occurs 0 with header line.
Tipos de tabelas internas
O ABAP oferece trs tipos de tabelas internas: STANDARD, SORTED e
HASHED. As tabelas standard permitem o acesso sequencial aos dados, alm depermitir o acesso mediante as chaves especificadas na declarao das tabelas. Astabelas do tipo sorted j esto pr-ordenadas de acordo com a chave asoperaes realizadas nesse tipo de tabela devem ter o cuidado de no alterar aordem, sob pena de ocorrer um erro de execuo. As tabelas do tipo hashed soorganizadas de acordo com a chave especificada e no permitem operaesutilizando o nmero sequencial dos registros. So adequadas a grandes volumes dedados.
Workshop para desenvolvedores ABAP/4 74
-
7/27/2019 Academia ABAP.doc
75/162
8- Tabela Interna
EXEMPLO 7
REPORT ZEXP0007.
TABLES: T005H..
DATA V_VAR1 VALUE '1'.
DATA: BEGIN OF T_T005H OCCURS 0,LAND1 LIKE T005H-LAND1,BEZEI LIKE T005H-BEZEI.
DATA: END OF T_T005H.
SELECT * FROM T005H WHERE LAND1 IN ('US', 'DE') ORDER BY LAND1.
T_T005H-LAND1 = T005H-LAND1.T_T005H-BEZEI = T005H-BEZEI.APPEND T_T005H.
ENDSELECT.
IF SY-SUBRC NE 0.WRITE TEXT-001.
ENDIF.
LOOP AT T_T005H.
ON CHANGE OF T_T005H-LAND1.
IF V_VAR1 = 0.NEW-PAGE.
ENDIF.
FORMAT COLOR OFF.WRITE 'COUNTRY CITY'.
CLEAR V_VAR1.
ENDON.
IF T_T005H-LAND1 = 'DE'.FORMAT COLOR COL_TOTAL.
ELSE.FORMAT COLOR COL_NORMAL.
ENDIF.
WRITE : / T_T005H-LAND1,21 T_T005H-BEZEI.
ENDLOOP.
Workshop para desenvolvedores ABAP/4 75
-
7/27/2019 Academia ABAP.doc
76/162
8- Tabela Interna
EXEMPLO 9
REPORT ZEXP0009 MESSAGE-ID ZA.TABLES: ZCURSO.DATA: ARQ LIKE RLGRAP-FILENAME VALUE 'C:\TEMP\CURSO.TXT',
V_CONT TYPE I.DATA: BEGIN OF T_ZCURSO OCCURS 0,
ZDATA LIKE ZCURSO-ZDATA,SPACE1 TYPE C VALUE ' ',ZBELNR LIKE ZCURSO-ZNUMERO,SPACE2 TYPE C VALUE ' ',ZGJAHR LIKE ZCURSO-ZANO.
DATA: END OF T_ZCURSO.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING* CODEPAGE = ' 'FILENAME = ARQ
* FILETYPE = ' '* HEADLEN = ' '* LINE_EXIT = ' '* TRUNCLEN = ' '* USER_FORM = ' '* USER_PROG = ' '* importing* filelength =
TABLESDATA_TAB = T_ZCURSO
EXCEPTIONSCONVERSION_ERROR = 1FILE_OPEN_ERROR = 2FILE_READ_ERROR = 3INVALID_TABLE_WIDTH = 4INVALID_TYPE = 5NO_BATCH = 6UNKNOWN_ERROR = 7OTHERS = 8.
CLEAR V_CONT.
LOOP AT T_ZCURSO.ZCURSO-ZDATA = T_ZCURSO-ZDATA.ZCURSO-ZNUMERO = T_ZCURSO-ZBELNR.ZCURSO-ZANO = T_ZCURSO-ZGJAHR.INSERT ZCURSO.
IF SY-SUBRC = 0.
V_CONT = V_CONT + 1.ENDIF.
ENDLOOP.
WRITE: 'FORAM INSERIDOS ', V_CONT, 'NA TABELA ZCURSO'.
9 - Programas de Carga (BDC)
Workshop para desenvolvedores ABAP/4 76
-
7/27/2019 Academia ABAP.doc
77/162
BDC Session
ABAP/4 tem uma tcnica de programao para a colocao de dados dentrodo SAP conhecida como Batch Data Communication Session ou BDC Session.
Existe a necessidade de entrar com dados no sistema SAP, nas seguintessituaes:
Na implantao necessrio fazer a carga dos dados do sistema legadono SAP. Nesse caso normalmente gera-se arquivos TXT e atravs deprogramas ABAP que utilizam o conceito BDC sobe esses dados para oSAP.
Em casos de interface com outro sistema tambm existe a necessidadede receber dados de outro sistema paralelo.
Em casos onde utiliza-se de dados do prprio SAP para criar novos
processos (ex: a partir da ordem de venda se cria o fornecimento e afatura).
Na maioria dos casos essa carga poderia ser feita diretamente no banco dedados, mas, quando falamos de SAP isso no funciona, pois, a maioria detratamentos na entrada de dados est na interface com usurios, e feito dessaforma afetaria a integralidade dos dados, ento os programas de carga (batch inputou call transaction ) so utilizados para emular as entradas de dados via interfacecom usurio, s que dessa forma as coisas acontecem como se fosse o usurio queestivesse entrando com os dados manualmente s que no necessita dainterveno manual do operador. Nas prximas pginas veremos como isso
funciona.
9 - Programas de Carga (BDC)
Workshop para desenvolvedores ABAP/4 77
-
7/27/2019 Academia ABAP.doc
78/162
Transao SHDB
Antes de iniciar o desenvolvimento de um programa de carga/interface, necessrio que faa um mapeamento da transao que ser utilizada para fazer aentrada dos dados, gravando as telas e os campos de cada tela.
Para obtermos qual o programa e tela e tambm o nome de um determinadocampo, utilizamos a tecla F1 e logo ap[os F9 (ou dados tcnicos nas verses maisatuais), fazendo assim imagine que vamos preencher 100 campos em 5 telasdiferentes, o trabalho para determinar toda a seqncia seria enorme, para facilitarisso o R3 disponibiliza a transao SHDB, que faz um tipo de filmagem do queestamos fazendo na transao e gera uma tela com as informaes necessriapara utilizarmos na confeco de nosso programa ( inclusive gera um programapronto se for o caso e tambm o arquivo de teste).
Utilizando SHDB
9 - Programas de Carga (BDC)
Workshop para desenvolvedores ABAP/4 78
Criar um novo registro de
gravao
-
7/27/2019 Academia ABAP.doc
79/162
Entrar com a o nome do novo registro e com a transao que ser utilizadapara entrar com os dados. Clicar em iniciar gravao, automaticamente a SHDB irpara a transao que voc digitou e a partir desse ponto tudo o que voc fizerestar sendo gravado.
Essa j a tela da transao MM01, cada campo de for preenchido e cadaboto ou tecla de ao que for executada ser gravado no registro da SHDB,CUIDADO com erros no momento de preencher, pois, tudo ser gravado.
9 - Programas de Carga (BDC)
Workshop para desenvolvedores ABAP/4 79
-
7/27/2019 Academia ABAP.doc
80/162
Aps toda a execuo da transao, normalmente aps um comando SAVEou BACK/EXIT, automaticamente fecha-se a transao e volta para a SHDB ondepodemos ver o que foi gravado.
O que estamos vendo acima exatamente a forma que devemos preencher atabela BDC em nosso programa. Nessa tela devemos salvar o registro e aceit-lo,em casos especficos podemos gerar o programa e at o arquivo de testes,normalmente isso no ocorre apenas chegamos a esse ponto, e muitas vezes issoj est pronto pois o analista funcional j fez.
9 - Programas de Carga (BDC)
Workshop para desenvolvedores ABAP/4 80
-
7/27/2019 Academia ABAP.doc
81/162
Aps os passos da SHDB, j podemos criar nosso programa, para isso temosque entender a estrutura BDC, acima est a forma para criarmos nossa tabelainterna para ser utilizada e a estrutura da tabela BDC.
Tambm importante definir o tipo de programa que ser desenvolvidoBATCH INPUT ou CALL TRANSACTION.
9 - Programas de Carga (BDC)
Workshop para desenvolvedores ABAP/4 81
-
7/27/2019 Academia ABAP.doc
82/162
BATCH INPUT
Programas de BATCH INPUT, so mais utilizados para grandes massas dedados, pois, ele no faz a execuo automtica da entrada dos dados, ele apenasarmazena os dados da BDC em uma local chamado PASTA, e esses dadoscarregados somente sero processados quando essa pasta for executada natransao SM35. Nesse caso todo o tratamento de erros de processamento sercontrolado pela SM35, os registros com erros ficam em status de erro e podem ser
processados novamente, caso tenha que ser feito qualquer alterao no arquivo oubase de dados, deve-se rodar novamente o programa ABAP que gera a pasta.Utiliza-se trs funes para armazenar a pasta, como vemos acima.
9 - Programas de Carga (BDC)
Workshop para desenvolvedores ABAP/4 82
-
7/27/2019 Academia ABAP.doc
83/162
CALL TRANSACTION
call transaction 'MM01'using t_bdc
mode p_modomessages into t_msgupdate 'S'.
Programas CALL TRANSACTION, so mais utilizados para menor quantidadede dados, ou interfaces on-line que necessitam da resposta do processamento logoaps a execuo.
Preenche-se a tabela BDC de acordo com a SHDB e ao invs de armazenarem pasta, executa-se a instruo CALL TRANSACTION, passando os parmetros
como mostra acima. CALL TRANSACTION USING MODE exibir passo a passo somente erros no exibir MESSAGES UPDATE
Nesse tipo de programa as mensagens devolvidas pelo CALL TRANSACTIONdevem ser tratadas pelo programa de acordo com definio do usurio. Para obter amensagem com os dados da tabela interna de mensagens executar a funoWRITE_MESSAGE.
9 - Programas de Carga (BDC)
Workshop para desenvolvedores ABAP/4 83
-
7/27/2019 Academia ABAP.doc
84/162
Trabalhando com arquivo texto.
On-Line arquivo na mquina presentation.
Utilizar a funo WS_UPLOAD para subir o arquivo para uma tabela interna.
CALL FUNCTION 'WS_UPLOAD'EXPORTING
* CODEPAGE = ' 'FILENAME = p_path Nome e caminho do arquivoFILETYPE = 'ASC' ASC para TXT e DAT p/ XLS
TABLESDATA_TAB = t_arq Tabela interna para receber os dados
EXCEPTIONSCONVERSION_ERROR = 1FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3INVALID_TYPE = 4NO_BATCH = 5UNKNOWN_ERROR = 6INVALID_TABLE_WIDTH = 7GUI_REFUSE_FILETRANSFER = 8CUSTOMER_ERROR = 9OTHERS = 10
Utiliza-se a funo WS_DOWNLOAD para gerar um arquivo TXT ou XLS apartir de uma tabela interna
CALL FUNCTION 'WS_DOWNLOAD'EXPORTING* BIN_FILESIZE = ' '* CODEPAGE = ' '
FILENAME = 'C:\VOOS.XLS'FILETYPE = 'DAT'
* IMPORTING* FILELENGTH =
TABLESDATA_TAB = ti_semquebra
* FIELDNAMES =EXCEPTIONSFILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2INVALID_FILESIZE = 3INVALID_TYPE = 4NO_BATCH = 5UNKNOWN_ERROR = 6INVALID_TABLE_WIDTH = 7GUI_REFUSE_FILETRANSFER = 8CUSTOMER_ERROR = 9OTHERS = 10
.
9 - Programas de Carga (BDC)
Trabalhando com arquivo texto.
Workshop para desenvolvedores ABAP/4 84
-
7/27/2019 Academia ABAP.doc
85/162
BACKGROUND arquivo no servidor . utilizado para casos onde oprograma em questo no poder rodar on-line e o ambiente seja UNIX, poisas funes WS s funcionam em ambiente Windows.
Subindo dados de um arquivo texto do servidor.
OPEN DATASET READ DATASET ...CLOSE DATASET.....
Exemplo:DATA:dsn(20) VALUE '/usr/test.dat',rec(80).
OPEN DATASET dsn FOR INPUT.IF sy-subrc = 0.DO.READ DATASET dsn INTO rec.IF sy-subrc 0.EXIT.
ELSE.WRITE / rec.ENDIF.
ENDDO.ENDIF.CLOSE DATASET dsn.
Gerando um arquivo texto no servidor a partir de uma tabela interna.
OPEN DATASET dsn FOR INPUT.IF sy-subrc = 0.LOOP AT TI.
TRANSFER TI TO dsn .ENDLOOP.
ENDIF.CLOSE DATASET dsn.
Para os casos de BACKGROUND, se for necessrio que o arquivo v para oambiente Win