Academia ABAP.doc

download Academia ABAP.doc

of 162

Transcript of Academia ABAP.doc

  • 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