Sei sulla pagina 1di 162

Sumrio Workshop para desenvolvedores ABAP/4 1

Conceito breve do SAP................................................................................................3 Criao de Listas Bsicas...............................................................................57 Criao de Listas Complexas.........................................................................62 Criando 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........................................................95 DEFININDO 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

1- Overview ABAP/4 Conceito breve do SAP O SAP um sistema que trabalha com um nmero muito grande de tabelas interligadas, que armazenam e manipulam os valores de controle dos processos. Essas tabelas so responsveis pelo armazenamento dos valores do sistema e so divididas em grupos que se interligam em um todo. Assim, existem tabelas responsveis pelas informaes de FI, outras pelas informaes de SD, outras ainda por MM, mas todas elas apresentam campos chaves que permitem, pelos mais diferentes e complicados caminhos, a interligao e consistncia de todo o sistema. Embora a ferramenta ABAP/4 dentro do SAP seja muito poderosa e praticamente capaz de permitir qualquer customizao do sistema, muito importante manter os conceitos originais sempre em mente, e nunca tentar forar alguma coisa que deveria ter um comportamento natural. Por exemplo, nunca tente alterar um valor de uma tabela do SAP (embora perfeitamente possvel, com o comando UPDATE), sem um minucioso estudo de suas implicaes anteriormente. Isso pode comprometer a integridade dos dados do sistema, se no forem atualizados todos os valores de todas as tabelas relacionadas a essa alterao. ABAP a linguagem de programao que a SAP criou para desenvolver as aplicaes do R/3, focada em tarefas comerciais especficas e totalmente voltada para atender as necessidades dos usurios deste software, como: processamento de dados em massa, moeda especifica, mltiplos idiomas, etc.

Workshop para desenvolvedores ABAP/4

O ambiente de desenvolvimento muito eficiente no trabalho em equipe, os desenvolvedores no precisam se preocupar com quaisquer problemas de comunicao 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 o Open SQL, que uma definio especial de comando para acesso ao banco de dados. A rea de trabalho dos desenvolvedores chamada de ABAP Workbench e todos os objetos de desenvolvimento criados com as ferramentas do ABAP Workbench so classificadas como objetos do repository. O Repository uma parte do banco de dados central do R/3 e est organizado por aplicaes e dentro das aplicaes ainda encontramos uma outra subdiviso denominada Classes de Desenvolvimento. 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 iniciar um processo dentro do sistema SAP. Todo e qualquer processo ou parte dele deve ser executado dentro do sistema atravs de uma transao. Na customizao de ABAP/4, sempre que um GAP do sistema coberto, isso gera pelo menos uma transao, de modo que o usurio possa executar esse produto customizado de dentro do sistema. Toda operao realizada atravs do menu do sistema, tambm corresponde a uma transao. Um mtodo para conhecermos o cdigo de uma transao cujo caminho pelo menu sabido, entrarmos na mesma, e na tela inicial desta transao, utilizarmos o menu Sistema Status, que informa o programa tela e transao executados. No desenvolvimento de customizaes ABAP/4, as principais transaes utilizadas, so: ABAP Editor (SE38) para escrita e edio de programas, mais utilizado para desenvolvimentos de programas do tipo executvel (Relatrios e Cargas). ABAP Dictionary (SE11) para edio de objetos relacionados com o banco de dados e objetos especficos da aplicao. Menu Painter (SE41) para desenho de interfaces de usurio (barra de menu, ferramentas standard e ferramentas de aplicao).

Workshop para desenvolvedores ABAP/4

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 (subrotinas, com interface fixa que esto disponveis em todo o sistema). Repository Browser (SE80) integra todas as ferramentas do ABAP Workbench, muito utilizado para criao de programas do tipo on-line ou module pool, pois, facilita e muito a visualizao de todos os objetos em uma mesma tela. Todo objeto do ABAP Workbench pode ser editado nessa transao e de uma forma bem mais organizada.

O ambiente de trabalho do ABAP normalmente funciona da seguinte maneira: Ambiente de Desenvolvimento ( Client desenvolvimento ABAP e Client 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 objetos ser no Ambiente de Desenvolvimento no client especfico para isso, os objetos criados ali so amarrados a uma Classe de desenvolvimento e tambm a uma Change Request/Task (normalmente o gerente de projeto cria uma request onde sero amarradas as Tasks do projeto). No final do projeto cada desenvolvedor libera sua Task para ser transportada e o Gerente aps todas as Tasks liberadas pode liberar a Request, nesse ponto entra em ao o pessoal de BASIS que executam o transporte dessa Request para o outro ambiente QA e aps os testes feitos e aprovados transporta-se para a PRD. Instncia X Client Tambm muito importante o conceito do funcionamento do ambiente do sistema durante a evoluo de um projeto. Inicialmente devemos entender os conceitos de client e instncia: Client definido como sendo uma unidade independente do R/3, em termos comerciais, organizacionais e tcnicos. Isso significa que possuem sua prpria configurao, dados de aplicao e dados cadastrais (master data). Instncia definida como um ambiente do R/3 que agrupa um ou mais clients, onde se executa um determinado trabalho. Uma instncia de trabalho, geralmente possui mais de um client, onde so trabalhados simultaneamente diferentes frentes de trabalho do projeto. A inteno Workshop para desenvolvedores ABAP/4 5

dessa diviso que se possa trabalhar somando valores, sem que haja conflitos de interesse. Por exemplo, durante um projeto, o client para desenvolvimento das customizaes de ABAP deve ser diferente dos outros, pois trabalha muito com testes e alteraes constantes, o que inviabiliza outros tipos de servios. Se essa diviso muitas vezes ajuda, algumas vezes atrapalha. Geralmente as massas de dados so diferentes nos clients, e o comportamento principalmente nos testes dos produtos customizados pode ser diferente. O recomendado pela prpria SAP que exista um client s para testes, com massa de dados completa que permita recarga sempre que necessrio, o que permitiria que as condies de teste pudessem ser repetidas. No dia a dia de um projeto isso muito difcil, pois a manuteno desses clients pelo time de basis geralmente no muito bem vista. As instncias variam tambm ao longo de um projeto. A medida que o sistema vai sendo refinado, geralmente se inicia uma nova instncia livre dos vcios e restos de testes da anterior. Pelo menos 3 instncias sempre existem durante o perodo 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 est comprovadamente funcionando na instncia anterior, de modo a diminuir os erros a cada migrao.

1- Overview ABAP/4 Client dependent/independent Esse conceito de objeto client dependent e client independent necessrio estar bem claro, como a base de desenvolvimento normalmente dividida em client ou mandante alguns objetos quando desenvolvidos em um determinado client somente so enxergados ali (para esses casos necessrio fazer transporte entre clients) e outros so enxergados em todos os clients do ambiente, abaixo est uma relao 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 estar no namespace de cliente, ou seja, seus nomes devem comear com as letras Z ou Y (com exceo dos campos em append structures, que devem comear por ZZ ou YY). Os clientes s devem alterar objetos com nomes fora dessa especificao

Workshop para desenvolvedores ABAP/4

quando expressamente orientados pela SAP a faz-lo (por exemplo, para aplicar notas de correo). A SAP garante que os programas desenvolvidos pelos clientes que observarem as especificaes de namespace no sero afetados quando houver uma atualizao do sistema, como uma aplicao de Support Package. No entanto, caso seja alterado um programa standard da SAP, no h garantias de que o programa alterado permanecer como tal aps qualquer modificao no sistema. Para agregar funcionalidades a programas da SAP, existe o recurso das User Exits.

2 Request Ordens (Change Requests): Recurso atravs do qual um conjunto de objetos C.D. ou C.I. que podem ser transferidos de um client para outro ou de uma 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 de verses 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 objetos especficos exige que o mesmo seja associado a uma ordem. Gerao de Arquivo de Controle (Interno SAP) Nmero do transporte

AF1K900109
Objeto SAP (Interno SAP)

Instncia

Workshop para desenvolvedores ABAP/4

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 associados OU 1 alterao de programa + objetos associados Descrio da ordem: nome_da_tarefa ou nome_do_produto - Gerao Inicial nome_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 ele associados ficam reservados para tal usurio e somente sero liberados no momento que a ordem for encerrada. Quando uma ordem ainda permanece associado a um usurio, dizemos que ele est com o status de Modifiable. Quando uma ordem encerrada, deixa de estar associado a um usurio e passa a ter o status de Released (liberada), ou seja, os objetos a ela associados so liberados para alterao por outros usurios. Enquanto uma ordem possui o status Modifiable, pode-se manipular seus objetos livrevente, mudar o usurio responsvel transferindo a responsabilidade, ou simplesmente eliminar a ordem, liberando assim seus objetos, ao passo que uma ordem liberada algo imutvel. Transao SE01 Permite verificar o contedo das ordens (objetos) e sua Log de transporte (sucessos, erros ou warnings) para os outros clientes e instncias.

Workshop para desenvolvedores ABAP/4

Transao SE09 Permite verificar as ordens de objetos Client Independent (Workbench Organizer) criados por um determinado usurio, bem como efetuar o Release 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 controle das ordens criadas e transportadas dentro de um projeto, permitindo assim, conhecermos o histrico da criao e transporte dos objetos entre as vrias instncias.

2 Request Workbench Organizer Esta transao permite controlar as ordens (requests) geradas atravs das alteraes feitas nos objetos ABAP. As alteraes so sempre registradas em ordens do tipo local e transportvel. Ordem tranportvel: Alteraes transportveis para objetos do ABAP/4 Development Workbench so gravados em ordens transportveis. Isto permite que as 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, permitindo assim comparar, verificar e consolidar as alteraes entre os ambientes de desenvolvimento e produo. Ordem Local: Alteraes no transportveis para objetos do ABAP/4 Development Workbench so gravados em ordens locais. Isto garante que as ordens esto sujeitas ao mesmo tipo de controle aplicado aos objetos transportveis. Da mesma forma, quando uma ordem local liberada so criadas verses para o objeto.

Workshop para desenvolvedores ABAP/4

Nesta opo podemos acompanhar o transporte de todas as requests que foram liberadas

2 Request Clicando no boto de transportes podemos acompanhar todas as requests do tipo Desenvolvimento/Correo.

Workshop para desenvolvedores ABAP/4

10

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

Clicando no boto de seleo de valores na seo Tipo de Ordem podemos selecionar 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

Modelo Entidade-Relacionamento Modelo desenvolvido para facilitar o projeto de banco de dados, permitindo a especificao de um esquema que represente a estrutura lgica global de um banco de 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 modelo o que uma entidade pretende ser. Exemplos: Nome, RG, CPF, Endereo, Nro Conta, Nro Agncia, Nro Banco Domnio: Conjunto de valores permissveis para um atributo. Exemplo: Estado Civil, Sexo, Cor, Meses do Ano. Relacionamento: a associao entre duas entidades, ou seja, representa a maneira como duas entidades esto relacionadas ou ligadas. Exemplos: ContaCorrente de um Cliente, Agncias de um Banco, Contas-Corrente de uma Agncia. Restries de Mapeamento: Representam o modo como as diferentes entidades de um modelo se relacionam. Determinadas pela cardinalidade dos relacionamentos entre as entidades. Um-para-Um: Uma ocorrncia da Entidade A est relacionada com uma e apenas uma ocorrncia da Entidade B. Um-para-N: Uma ocorrncia da Entidade A est relacionada com uma ou vrias ocorrncias da Entidade B. N-para-Um: Vrias ocorrncias da Entidade A esto relacionadas com apenas uma ocorrncia da Entidade B. N-para-N: Vrias ocorrncias da Entidade A est relacionada com vrias ocorrncias da Entidade B.Modelo Relacional

3 - Dicionrio de Dados - Introduo Um banco de Dados Relacional a implementao fsica do Modelo EntidadeRelacionamento 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

um nome nico e que possuem relacionamentos entre si. Tabelas representam fisicamente 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 por colunas. Colunas representam fisicamente os Atributos. A cada linha da tabela chamamos de Ocorrncia e o conjunto de ocorrncias pode 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 ocorrncia da 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 em outra(s) tabela(s).

3 - Dicionrio de Dados - Introduo O dicionrio ABAP (transao SE11) permite a administrao central de todas as definies de dados do R/3, permitindo a criao de tipos de dados definidos Workshop para desenvolvedores ABAP/4 14

pelo usurio para uso posterior, alm de vrios itens auxiliares ao desenvolvimento de programas (p.ex. search helps). Podem ser definidas tabelas e vises dentro do dicionrio. O R/3 se encarrega, durante a ativao desses elementos, de cri-los no banco de dados. O dicionrio permite, ainda, a criao de ndices, que agilizam as buscas. A definio de ndices apropriados de suma importncia para o bom desempenho do sistema. Cabe lembrar que uma busca sem ndice realizada em uma tabela extensa pode ter pesado custo em termos de performance. As definies de tipos de dados dentro do R/3 incluem os elementos de dados, que definem um tipo elementar descrevendo o tipo bsico de dados, o comprimento e, eventualmente, as casas decimais; as estruturas, que podem receber elementos de vrios tipos (semelhante representao de um registro numa tabela); e os table types, que seriam campos em formato de tabela. Por exemplo, uma estrutura do registro de uma estrutura de usurio que tivesse um campo para nmeros de telefone poderia usar um table type e permitir colocar vrios nmeros num mesmo campo. Alm dessas definies, o dicionrio ABAP permite criar os search helps, que so tabelas de busca auxiliares aos campos de tela so as buscas e tabelas que aparecem quando se tecla F4 dentro de um campo em qualquer tela do R/3. Criando documentao para o elemento de dados dentro do dicionrio, automaticamente est disponvel a ajuda do campo, que pode ser invocada usando-se a tecla F1 dentro dos campos de tela. Pode-se, ainda, definir verificaes de entrada automaticamente, bastando definir uma relao de foreign key. No dicionrio tambm so criados os objetos de lock, que permitem definir o travamento de dados dentro do R/3. Por exemplo, podem-se definir objetos de lock para impedir que dois usurios editem a mesma informao ao mesmo tempo no sistema. O dicionrio integrado s ferramentas de desenvolvimento e execuo do R/3, permitindo o acesso das ferramentas s definies nele contidas. Por exemplo, possvel navegar de um programa que esteja sendo criado no editor ABAP para definies de campos, elementos e tabelas usadas no programa.

3 - Dicionrio de Dados - Tipos de Dados 1. Dados elementares pr-definidos

Workshop para desenvolvedores ABAP/4

15

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, permitese 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

Entre as formas de tipos de dados mostrados acima, as mais usadas no desenvolvimento 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 que diz respeito a linhas. (matriz) Os outros tipos acima, so variaes dos dois j explicados e muito pouco utilizados nos programas.

Exemplos: TYPES: number TYPE i, length TYPE p DECIMAL 2, code(3) TYPE c. TYPES: BEGIN OF <estrutura>, <campos>.. END OF <estrutura>.

3 - Dicionrio de Dados - Tipos de Dados 3. Tipo de dados do Dicionrio de Dados ABAP.

Workshop para desenvolvedores ABAP/4

17

Transao SE11 Elemento de Dados: a definio semntica para um campo individual, nele colocamos os textos do campo e amarramos a um domnio. Domnio: e a definio tcnica do campo, onde colocamos o tipo de dados, o tamanho do campo e tabela de valores possveis. Estrutura: So conjuntos de campos elementares ou do prprio tipo estrutura e so utilizadas para referncias em tela ou no programa. Tabela Transparente (database table): So as tabelas que possuem uma estrutura criada no dicionrio de dados e que so refletidas no banco de dados, so elas que contm os dados necessrios para o sistema, atravs de instrues do ABAP OPEN SQL conseguimos obter essas informaes. Vises: So agrupamentos de <n> tabelas transparentes que possuem ligaes entre si, funciona como se fosse um INNER JOIN s que j est prcriado no dicionrio de dados, pode ser utilizada no SELECT como se fosse uma tabela normal.

3 - Dicionrio de Dados Definies Definio de tabelas transparentes

Workshop para desenvolvedores ABAP/4

18

Uma tabela consiste de colunas (campos) e linhas (registros). Cada tabela possui um nome e atributos, como por exemplo, a classe de desenvolvimento e a autorizao para manuteno. Cada campo deve ter um nome nico dentro da tabela, e pode fazer parte de uma chave. Cada tabela deve ter uma chave primria, que composta por campos cujos valores identificam unicamente os registros de uma tabela. As tabelas definidas no dicionrio de dados do R/3 so criadas no banco de dados assim que ativadas. Durante a ativao, a descrio da tabela dentro do dicionrio traduzida para a definio de tabela correspondente na linguagem do banco de dados que estiver sendo usado. A ordem dos campos no banco de dados no precisa seguir a ordem estabelecida no dicionrio de dados (com exceo dos campos de chave primria), o que permite a extenso das tabelas standard do R/3 atravs e append structures, que so definies de campos adicionais definveis pelo usurio sem haver a necessidade de alterao da definio normal da tabela Standard. Os includes so estruturas definidas separadamente que podem ser inseridas em outras tabelas.

3 - Dicionrio de Dados Definies Entendendo melhor: Elemento de Dados e Domnio

Workshop para desenvolvedores ABAP/4

19

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

3 - Dicionrio de Dados Definies

Workshop para desenvolvedores ABAP/4

20

As caractersticas tcnicas das tabelas do R/3 Quando uma tabela definida no dicionrio de dados do R/3, devem ser definidas as caractersticas tcnicas (technical settings) para a tabela. Essas caractersticas so usadas para otimizar o acesso e a armazenagem da tabela individualmente. As caractersticas tcnicas podem ser usadas para definir como a tabela deve ser manipulada quando for criada no banco de dados, se ela deve ser includa em buffer e de que forma, e se as mudanas nela realizadas devem ser registradas em log. Para definir a armazenagem da tabela, deve-se indicar uma classe de dados. Essa classe de dados determina de que forma o banco de dados deve armazen-la. As classes principais so master data, transaction data, organizational data e system data. Os dados mestres devem ser classificados como master data, os dados transacionais como transaction data, a configurao funcional como organizational data e os dados de sistema como system data. Geralmente, dentro de um projeto, so criadas tabelas dos tipos master e transaction somente. De posse dessa informao, o R/3 separa as tabelas em diferentes arquivos do banco de dados de forma a otimizar a performance. A categoria de tamanho das tabelas permite ao R/3 alocar espao no banco de dados de acordo com o tamanho projetado para a tabela, de modo a evitar fragmentao dos dados. Pode-se definir que uma determinada tabela ser armazenada em buffer de memria. Com isso, o acesso tabela otimizado, mas deve-se usar de bom senso para colocar tabelas em buffer. Por exemplo, tabelas candidatas a entrar no buffer so dados mestres com muita utilizao e raramente atualizadas. Tabelas de dados transacionais no devem ser colocadas em buffer, pois cada registro dentro delas menos freqentemente acessado que nas tabelas de dados mestres, e esto sujeitos a atualizaes. A atualizao de uma tabela que esteja no buffer provoca seu re-carregamento com conseqente impacto no desempenho dos programas. O buffer pode ser definido nos modos full, no qual a tabela inteira colocada no buffer, single-record, onde apenas os registros eventualmente acessados so colocados no buffer, e generic, no qual so colocados no buffer registros que tenham determinados valores na chave. Os dados no so automaticamente colocados no buffer assim que o sistema entra no ar; isso s acontecer no primeiro acesso a um registro que esteja em um intervalo de buffer. Caso seja necessrio, pode-se definir o registro em log das alteraes feitas numa tabela. Porm, deve-se ter em mente que isso pode criar um impacto na performance do sistema.

3 - Dicionrio de Dados Visibilidade e Referncia Visibilidade dos Tipos de Dados

Workshop para desenvolvedores ABAP/4

21

Conceito LIKE Eu utilizo o comando LIKE na criao de um tipo de dados dentro do programa ABAP para referenciar diretamente o objeto a um tipo de dados do Dicionrio de Dados ABAP, isto muito utilizado, pois, se eu estou trabalhando com um campo que reflexo de um campo que j existe em uma tabela transparente eu no preciso descobrir o tipo e tamanho do campo para defini-lo no programa basta eu referenci-lo utilizando LIKE. Exemplos: Type: <t> LIKE <obj>.

3 - Dicionrio de Dados Definies

Workshop para desenvolvedores ABAP/4

22

Exemplo Criao de Tabela, Manuteno e criao de transao Criando uma tabela transparente customizada (tcode SE11). ZCONTROLE. Por exemplo

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

Atribuir as opes tcnicas.

Definir as opes tcnicas e <Salvar>.

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

Agora vamos definir a manuteno da tabela transparente. Para acessar o Gerador de 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).

Selecionar o objeto.

3 - Dicionrio de Dados Definies

Workshop para desenvolvedores ABAP/4

25

Definir as caractersticas do objeto Grupo de Funo.

Selecionar a Classe de Desenvolvimento a ser utilizado e <Salvar>. Criar uma nova Request e Avanar <Enter>. O grupo de funo definido ser criado na classe de desenvolvimento.

Criar novo objeto.

O novo Grupo de Funo foi definido.

3 - Dicionrio de Dados Definies Este boto permite o sistema sugerir as telas de atualizao a serem utilizadas.

Workshop para desenvolvedores ABAP/4

26

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.

Para que o usurio tenha acesso a manuteno da tabela customizada, utilizar o caminho apresentado abaixo.

3 - Dicionrio de Dados Definies

Workshop para desenvolvedores ABAP/4

27

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 na gerao de manuteno).

Permite o cadastramento de dados novos na tabela.

3 - Dicionrio de Dados Definies

Workshop para desenvolvedores ABAP/4

28

Esta tela de atualizao a tela individual (o 2 nvel de acesso definido na gerao de manuteno).

A seguir apresentado a entrada efetuada na tabela pela tela de atualizao individual.

3 - Dicionrio de Dados Definies

Workshop para desenvolvedores ABAP/4

29

PARA ACESSAR CUSTOMIZADA.

MANUTENO

DA

TABELA

VIA

TRANSAO

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

Definir as caractersticas da transao.

Utilizar a transao para Atualizao de tabela ampliada.

Definir tambm a tabela a ser acessada.

Definir os parmetros da tabela a ser atualizada .

Selecionar a Classe de Desenvolvimento a ser utilizado e <Salvar>. Criar uma nova Request e Avanar <Enter>. 4- Editor ABAP

Workshop para desenvolvedores ABAP/4

31

Editor ABAP/4 O editor de programao ABAP/4 do SAP pode ser encontrado atravs do caminho : Menu SAP Ferramentas ABAP Workbench Desenvolvimento Editor Abap

Workshop para desenvolvedores ABAP/4

32

4- Editor ABAP ou pela transao SE38. Uma tela para a entrada do nome do programa aberta, como exemplificada abaixo. 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 nome de programas, mas para todos os desenvolvimentos no SAP R/3. Esses padres podem variar de projeto a projeto e principalmente com a verso do SAP com a qual se est trabalhando. Em todos os casos os nomes dos desenvolvimentos comeam sempre com Z ou Y. 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 como programas, que so capazes de fazer muito mais coisas do que exibir relatrios.

Workshop para desenvolvedores ABAP/4

33

4- Editor ABAP No editor ABAP, alm de digitar o cdigo fonte do programa, possvel tambm efetuar outras tarefas e adicionar outros objetos inerentes sua execuo. Na janela de Objetos parciais h 5 opes bsicas de objetos associados a um 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 de um programa ABAP. Os parmetros de um programa so definidos pelos comandos Parameters 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 as suas 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 relatrio gerado pelo programa. Criando um programa passo-a-passo. Entrar no editor ABAP na transao SE38, preencher o nome do programa comeando com Z, clicar em create.

Entra do cdigo fonte Para editar variantes de execuo do programa Editar os atributos do Programa

Alterar os Textos dos Parmetros de Seleo

Workshop para desenvolvedores ABAP/4

34

4- Editor ABAP

Aplicao: Voc entra com o mdulo ou a aplicao que o programa faz parte

Clicar em SAVE

Logo aps entrar com os atributos do programa, entrar com a Classe de Desenvolvimento/Package (perguntar para o gerente qual classe de desenvolvimento se no estiver na especificao)

Entrar com a Classe de Desenvolvimento

SAVE para amarrar a uma Request/Task

Objeto Local quando no vou transportar somente teste

Quando a escolha for SAVE/SALVAR, deve-se entrar com a REQUEST/TASK.

Workshop para desenvolvedores ABAP/4

35

4- Editor ABAP

Clicar aqui ou tecla F4, para escolher uma Request j criada OK aps escolher Req. Clicar em Criar quando for amarrar em uma nova request

Para evitar maiores problemas crie um habito de salvar verificar ativar.


1 - Salvar

2 - Verificar, faz a verificao de sintaxe.

3 - Ativar, ativa a verso atual

Testar para execuo do programa direto do cdigo fonte

Prestar ateno no Status, sempre deixar active, se for feita uma alterao e salva, mas no ativa, o depurador considera a ltima ativa.

Verificao de sintaxe muito importante ir verificando a sintaxe sempre, pois, isso facilita para encontrar os erros, caso d algum erro na verificao de sintaxe aparecer da seguinte forma.

Para ir direto na linha que est acusando erro clicar aqui

Caso ocorra algum erro na verificao de sintaxe, aparecer assim. O(s) erro(s) logo abaixo do cdigo fonte.

Workshop para desenvolvedores ABAP/4

36

4- Editor ABAP Criando telas de Seleo: SELECTION-SCREEN: comando utilizado para definir a tela de seleo, com ele pode 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 as suas 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 criar esses objetos digite text-003, d dois clicks e se no existir o editor vai perguntar se voc deseja criar. Voc entra com o texto na linguagem e depois faz a traduo para 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 da tabela MARA que esto no Dicionrio ABAP. Utilizao no SELECT: para utilizao no comando select, usa-se o comparativo = ou EQ caso o campo esteja em branco ele busca todos os registros que tenham contedo igual a branco. Where MATNR = P_MATNR. 4- Editor ABAP Workshop para desenvolvedores ABAP/4 37

SELECT-OPTIONS: utilizado para criao de um campo de/at de seleo com vrias opes de comparaes, obter as suas variaes de sintaxe atravs do help (F1).

Clicando aqui, voc pode definir vrias comparaes a serem feitas na seleo

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 de dados, para ser utilizada dentro do programa, obrigatria essa disponibilizao quando a tabela vai ser utilizada no FOR. TABELA DO SELECT-OPTIONS: SIGN I I OPTION EQ BT LOW MATERIAL 100 200 HIGH

Utilizao no SELECT: para utilizao no comando select, usa-se o comparativo 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:


Entrar com os textos Aqui

Workshop para desenvolvedores ABAP/4

38

Na SE38 Escolher opes Elemento de textos e <Modificar>

4- Editor ABAP Alguns Comandos: DATA: utilizado para definir uma varivel de qualquer tipo (simples, estrutura ou 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 = '+'. Ou v_num = p_num1 + p_num2. ELSEIF p_sin = '-'. v_num = p_num1 + p_num2. ELSE. ENDIF.
CASE p_sin. WHEN '+'. v_num = p_num1 + p_num2. WHEN '-'. v_num = p_num1 + p_num2. WHEN OTHERS. ENDCASE.

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. ou v_num = 2. v_matnr = MATERIAL.

WRITE e WRITE ... TO ... : Utilizado para imprimir em tela, pode se tambm mover o resultado dessa impresso para dentro de outra varivel. Quando se executa o comando write o ABAP faz todas as tradues necessrias de acordo com 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

4- Editor ABAP Executando Programa:

Na SE38 s clicar aqui ou tecla F8 aqui ou dentro do cdigo fonte

Alguns Exemplos EXEMPLO 1


REPORT 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. Elas possuem informaes e dados do processamento, como o idioma de acesso (sylangu), a data (sy-datum), a hora (sy-uzeit), etc.. Essas informaes esto contidas na estrutura SYST (Campos de sistema ABAP, que pode ser abreviada para SY) e podem ser acessadas conforme o exemplo acima, o nome da estrutura mais o campo que se deseja. EXEMPLO 2
REPORT 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

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

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

5- Open SQL O ABAP oferece um conjunto de comandos que permite realizar operaes com os dados armazenados no banco, o Open SQL. A idia central do Open SQL prover uma linguagem de acesso ao banco independente de plataforma. Os comandos Open SQL tm de passar pelo interpretador ABAP, que os traduz para os comandos SQL do banco de dados que esteja sendo utilizado. Comandos Dentro do Open SQL, podem-se utilizar os seguintes comandos: SELECT: INSERT: UPDATE: permite a leitura de dados do banco de dados. insere dados no banco. atualiza dados.

MODIFY: atualiza dados existentes ou os acrescenta caso no existam no banco. DELETE: apaga registros do banco de dados.

OPEN CURSOR, FETCH, CLOSE CURSOR: respectivamente cria, l e fecha um cursor dentro do banco de dados.

Campos de sistema Os dois principais campos de sistema envolvidos em operaes do Open SQL so o SY-SUBRC, que retorna zero caso a operao tenha sido bem-sucedida, e o SY-DBCNT, que retorna o nmero de registros afetados pelo comando. Trabalhando com os Mandantes Num comando Open-SQL no necessrio especificar o mandante nas clusulas discriminadoras dos comandos. Automaticamente, o interpretador ABAP definir o mandante como o mandante atual, a no ser que seja especificada a opo CLIENT SPECIFIED.

Workshop para desenvolvedores ABAP/4

43

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

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

INTO [<lista de campos>| TABLE <tabela interna>]: Permite armazenar o retorno numa tabela interna ou em campos definidos com o comando DATA. O uso de SELECT sem especificar SINGLE ou INTO TABLE exige o uso de ENDSELECT. FROM <tabela> [[INNER|LEFT OUTER] JOIN <tabela>, ..]: Especifica a origem dos dados. FOR ALL ENTRIES Usado quando selecionamos dados de uma tabela e precisamos de dados de outra tabela para compr as condies 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-BUKRS AND BELNR = T_BKPF-BELNR AND BELNR = T_BKPF-BELNR.

Onde T_BKPF uma tabela interna que recebeu a tebela BKPF.

Workshop para desenvolvedores ABAP/4

44

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 essa verificao a seguinte: IF NOT itab[] IS INITIAL. se itab no est vazia SELECT * FROM dtab FOR ALL ENTRIES in itab where campo = itab-campo ENDIF. fim do: se itab no est vazia WHERE <condies>: A clusula WHERE especifica as condies de busca. Por exemplo, WHERE CARRID = AA faz com que apenas os registros em que o campo CARRID tenha contedo igual a AA sejam retornados. Maiores detalhes sobre o comando SELECT podem ser encontrados no Help On-Line do R/3.

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 tambm para todos os comandos ABAP, quando executado com sucesso SY-SUBRC igual a zero. Se sy-subrc = 4 : nenhum dado foi lido INSERT: O comando INSERT insere um novo registro no banco de dados, a partir de uma rea de dados especificada em TABLES ou uma rea declarada com DATA. Para usar INSERT, devem-se colocar os dados desejados na rea intermediria e, em seguida, chamar o comando INSERT. Caso a rea no seja especificada em TABLES, deve ser usada a opo FROM: UPDATE: O comando UPDATE funciona como o comando INSERT, podendo alterar dados no banco a partir de uma rea ou tabela interna. No caso da tabela interna, no necessrio especificar a clusula WHERE: sero alterados os registros correspondentes de acordo com as chaves. MODIFY: O comando MODIFY opera da mesma forma que o comando UPDATE, mas insere um novo registro caso o registro especificado no exista. DELETE: O comando DELETE elimina registros do banco. Ele opera da mesma forma que o comando INSERT.

Workshop para desenvolvedores ABAP/4

45

5- Open SQL LUW COMMIT e ROLLBACK: Quando trabalhamos com alterao nos dados do banco, bom sabermos que todas as alteraes que estamos fazendo ainda no aconteceram efetivamente no banco, isso s ocorre quando encontra-se o primeiro comit, automaticamente quando acaba a execuo de um programa j executado um commit: Exemplo: INSERT <tabela1>. IF SY-SUBRC = 0. INSERT <tabela2>. IF SY-SUBRC = 0. COMMIT WORK. ELSE. ROLLBACK WORK. ENDIF. ENDIF. Consideraes sobre os diferentes tipos de select (PERFORMANCE) 1 - SELECT * FROM <tabela> (Quando no se impe nenhum tipo de restrio, ocorre uma varredura sequencial dos registros da tabela. Quando se utiliza grandes tabelas, isso obviamente afeta o runtime. Performance: Select * - seleciona todas as colunas de uma tabela. melhor sempre especificar as colunas, pois em caso de tabelas com muitas colunas, prejudicar a performance). 2 - SELECT * FROM <tabela> WHERE <campo> eq <contedo>. (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 acordo com a condio de where. melhor sempre especificar as colunas, pois em caso de tabelas com muitas colunas, prejudicar a performance. 3 - SELECT * FROM <table> WHERE <table field> BETWEEN <field1> and <field2>. Ex.: field1 = 100 e field2 = 500. Pega inclusive 100 e 500. Voc trabalha com o range.

Workshop para desenvolvedores ABAP/4

46

4 - SELECT * FROM <table> WHERE <table field> LIKE ._R%. _ = a primeira letra no importa o que vir a segunda dever ser R (eu defini) % = no importa a sequncia de caracteres que vir. 5- Open SQL 5 - SELECT * FROM <table> WHERE <table field> IN (.,.). Exemplo: select * from <table> where campo1 in (123,1000) - podem ser valores ou literais como perguntar se campo1 123 ou 1000. 6 - SELECT * FROM <table> WHERE <table field> IN <internal table>. Exemplo: DATA : begin of ITAB occurs 10, sign(1), option(2), low like sflight-price, high like sflight-price, end of ITAB. * RANGES: ITAB for sflight-table Move: I to itab-sign, 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 <table> ORDER BY <field1> <field2> PRIMARY KEY. Obs.: Classifica a tabela interna numa rea auxiliar, sem afetar a tabela original. Evitar o uso de sorts dentro de um select. Consome mais tempo que descarregar os dados em uma tabela interna e classific-los. 8 - SELECT * FROM <table> BYPASSING BUFFER. (Usado para ler diretamente da tabela original, e no do buffer). OBS.: Select single * sempre com chave completa especificada. Particularidade do Abap/4 Select * - procurar evitar. Informar as colunas que sero necessrias, apenas. Uso de comando extract (insert header, details) para relatrios 9 - SELECT * FROM <table> APPENDING TABLE <internal table>. (L os registros e os inclui - no sobrepe - em um internal table). 10 - SELECT FROM <table> INTO TABLE <INTERNAL TABLE> . (A estrutura da tabela interna deve corresponder estrutura da tabela que est sendo acessada. O sistema l os registros em conjunto, no individualmente, e os coloca dentro de uma internal table. Este processo mais rpido que ler individualmente atravs de um LOOP e ir gravando os registros, um a um).

Workshop para desenvolvedores ABAP/4

47

5- Open SQL 11 - SELECT . INTO CORRESPONDING FIELDS OF TABLE <itab>. (Neste caso a estrutura da tabela interna no precisa corresponder estrutura da tabela que est sendo acessada. <itab> o nome da internal table. Movimentar os registros para as colunas definidas na internal table que possuam nome igual ao da tabela acessada). Obs.: corresponding ou appending corresponding no exigem o endselect. 12 - SELECT .. APPENDING CORRESPONDING FIELDS OF TABLE <itab>. ( 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 ..<campo>.. EQ <contedo> (Toda vez que se usa select single * a chave primria completa deve ser especificada. Se a chave especificada no qualificada, voc receber uma mensagem de warning e a performance ficar prejudicada). No caso de haver a necessidade de acessar um nico registro via select, as opes so: select * .. seguido de comando exit OU select * up to 1 row. Neste caso no necessrio especificar a chave completa. 14 - SELECT <a1> <a2> INTO (<f1>, <f2>, ) FROM .<tabela> WHERE . L as colunas especificada (a1, a2). Aps INTO devero ser especificadas as reas de trabalho auxiliares (f1, f2). O nmero de colunas lidas dever ser igual ao nmero de work-areas especificadas. 15 - SELECT MAX(campo) MIN(campo) AVG(campo) COUNT(*) FROM <table> 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

5- Open SQL 17 - SELECT * FROM (<table>) INTO <work area>. Exemplo: data: begin of WA, line(100), end of WA. Parameters: tabname(10) default SPFLI. *** especificando o nome da tabela em tempo dinamicamente no select statement sempre consome mais tempo de CPU que especificando estaticamente no programa *** Select * from (tabname) into WA Write . Endselect. 18-SELECT * FROM <table> FOR ALL ENTRIES IN <internal table> WHERE campo1 = <contedo> and campo2 = <contedo> Defino uma tabela interna. Alimento os campos desta tabela interna. (move e append). No meu select campo1 e campo2 sero os campos definidos e alimentados na tabela 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 especificar aps a clusula GROUP BY) (carrid, maximum e minimum so campos auxiliares). (Se o nome do database no conhecido at runtime no se pode especificar a clusula GROUP BY).

Workshop para desenvolvedores ABAP/4

49

5- Open SQL EXEMPLO 6


REPORT ZEXP0006 message-id za. PARAMETER: P_PAIS LIKE T005S-LAND1. TABLES T005H. SELECT * FROM T005H WHERE LAND1 = P_PAIS ORDER BY CITYC. WRITE: / T005H-Bezei, T005H-LAND1. ENDSELECT. IF SY-SUBRC NE 0. MESSAGE I000. ENDIF.

Workshop para desenvolvedores ABAP/4

50

5- Open SQL EXEMPLO 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_BELNR AND 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 = TABLES DATA_TAB = T_ZCURSO * fieldnames = EXCEPTIONS FILE_OPEN_ERROR =1 FILE_WRITE_ERROR =2 INVALID_FILESIZE =3 INVALID_TABLE_WIDTH =4 INVALID_TYPE =5 NO_BATCH =6 UNKNOWN_ERROR =7 OTHERS = 8. MESSAGE E007. ELSE. MESSAGE E008. ENDIF

Workshop para desenvolvedores ABAP/4

51

6- Modularizao Todo programa ABAP estruturado e desenvolvido para ser processado em bloco: Blocos de processamentos que so chamados pelo sistema: o Blocos de Eventos o Mdulos de Dilogo Blocos de processamentos que so chamados pelo programa. o Sub-rotinas o Mdulos de funo o Mtodos

INCLUDE Programa do tipo include, pode se modularizar um programa utilizando cdigos fontes no executveis chamados includes e chama-se esses cdigos de dentro do programa principal. comumente usado para declaraes de variveis em programas muito extensos.

Workshop para desenvolvedores ABAP/4

52

6- Modularizao Processamento de Mensagens MESSAGE <tipo>+<numero>+(<classe mensagens>)

Exemlo: MESSAGE I368(00) with Erro XXXXX. Tipos de Mensagem

Sub-rotina - FORM Para estruturar nossos programas, utilizamos os blocos de processamentos controlados pelo nosso pr[oprio programa os FORMs, delimitamos as rotinas de processamentos em pequenos grupos, o que facilita a manuteno de nosso cdigo. Podemos passar e receber valores para essas rotinas, tanto por parmetro como por valor. START... PERFORM TESTE123. END.... FORM TESTE123. <cdigo fonte com a rotina desejada> ENDFORM.

Workshop para desenvolvedores ABAP/4

53

6- Modularizao Mdulos de Funes So rotinas de processamento externas e independentes de programa, ficam amarradas a um grupo de funes e tem o seu cdigo desenvolvidos em includes,podem ser chamadas por <n> programas diferentes, tambm trabalham com passagem de parmetros e de tabelas, e com excees (erros no processamento). Praticamente pouco se cria em matria de funes, o que mais fazemos utilizar as funes prontas disponibilizadas pela SAP.

Sempre que chamamos uma funo, aconselhvel utilizar os modelos do editor ABAP, e tambm tomar cuidado com os tipos dos parmetros que estamos passando, pois, se passamos um campo com tipo diferente pode dar um short dump, para evitar isso entrar dentro da funo, consultar o tipo do parmetro e criar igual.

Workshop para desenvolvedores ABAP/4

54

6- Modularizao Blocos de Eventos. Os blocos de eventos so controlados pelo sistema e s valem para programas 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 as pginas. END-OF-PAGE. Informaes que apaream no rodap do relatrio OBS: essas informaes s aparecero se o tamanho da pgina estiver definido no comando REPORT e somente qdo houver quebra de pgina. Caso contrrio, no aparecer 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 estruturada colocamos 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 listas interativas, 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

6- Modularizao Processo Geral de Programao

Nome e Descrio do Programa

Declarao de Variveis

Montagem da Tela de Input

Montagem e Impresso do Relatrio ou outra lgica

Workshop para desenvolvedores ABAP/4

56

7- Report/Listas Criao de Listas Bsicas

Criando uma lista simples A sintaxe bsica do comando a seguinte: WRITE [:] [/] [<campo>|<literal>] [, <campo>|<literal>] [, ...] [opes]. A sintaxe completa do comando pode ser encontrada no Help do R/3. Existem opes para alterar a cor dos elementos da tela, criao de molduras e insero de cones na lista. Observe o cdigo a seguir:
REPORT 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- Report/Listas Com esse trecho de cdigo apenas, o R/3 gera uma lista simples do contedo de alguns campos da tabela SPFLI:

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

Workshop para desenvolvedores ABAP/4

58

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 do comando WRITE; podemos mudar a intensidade da cor com a opo INTENSIFIED {ON|OFF}, transformar o campo num HOTSPOT para uso em listas com drill-down, e mudar o posicionamento dos campos com WRITE AT. A opo COLOR admite qualquer uma das cores padro do R/3, disponveis na transao LIBS:

Por exemplo, para modificar um campo de forma a usar a cor COL_KEY menos intensa, como hotspot, centralizado, escreveramos o cdigo como segue:
WRITE: / SPFLI-CARRID COLOR COL_KEY INTENSIFIED OFF HOTSPOT CENTERED.

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

Workshop para desenvolvedores ABAP/4

59

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 determinado ponto do programa, pode-se usar o comando FORMAT, com as mesmas opes de formatao vistas para o comando WRITE. Com isso, todos os campos a seguir sero exibidos com as opes especificadas pelo comando FORMAT, at que seja encontrado um novo comando FORMAT. Pode-se continuar usando os modificadores no WRITE, mas os mesmos iro basear-se no novo padro estabelecido no comando WRITE. Por exemplo, caso seja colocado o comando.
FORMAT COLOR COL_KEY INTENSIFIED ON CENTERED

todos os campos a seguir passaro a ser exibidos na cor COL_KEY INTENSIFIED, e sero apresentados centralizados. Caso tenhamos em seguida o comando
WRITE: / SPFLI-CARRID INTENSIFIED OFF, SPFLI-CONNID.

a cor exibida para o campo SPFLI-CARRID ser COL_KEY INTENSIFIED OFF, e no a cor padro sem INTENSIFIED. O campo SPFLI-CONNID aparecer da forma estipulada no comando FORMAT. O formato pode retornar ao formato standard usando o comando FORMAT RESET. Posicionando os campos Pode-se alterar o posicionamento dos campos dentro de uma linha colocando o nmero da coluna na qual queremos que o campo comece na frente do campo. Pode-se tambm especificar a largura do campo colocando a mesma em seguida, entre parnteses (sem essa opo, o tamanho do campo utilizado ser o tamanho dele no dicionrio de dados). Por exemplo, para posicionarmos o mesmo campo que modificamos anteriormente na dcima coluna, estabelecendo um tamanho de cinco caracteres, usamos o comando.
WRITE: /10(5) SPFLI-CARRID COLOR COL_KEY INTENSIFIED OFF HOTSPOT.

Workshop para desenvolvedores ABAP/4

60

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 quer formatar. Com isso, o campo ser formatado de acordo com a definio nas tabelas standard de unidades e de moedas do R/3. Veja o exemplo a seguir:
WRITE: /20(6) SFLIGHT-FLDATE, SFLIGHT-CURRENCY, 'Sem CURRENCY:', (12) SFLIGHT-PAYMENTSUM, 'Com CURRENCY:', (12) SFLIGHT-PAYMENTSUM CURRENCY SFLIGHTCURRENCY.

Um trecho do report seria:


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

Sem o uso da opo CURRENCY, o valor apresentado no formato genrico do usurio; com o CURRENCY, mesmo caso tenhamos moedas diferentes em cada registro, cada uma ser exibida no formato correto. Smbolos de Texto O ABAP permite a criao de smbolos de texto, que so elementos do repositrio que permitem a criao de tabelas de texto para uso nos programas ABAP. Os smbolos de texto so criados dentro de classes de mensagem, que servem para separar logicamente os smbolos de texto relacionados. Dentro da classe de mensagem, cada texto deve ser identificado por um nmero de trs posies. Cada smbolo de texto pode ser criado em vrias linguagens. Suponha que exista o seguinte trecho de cdigo:
WRITE: /10 'Assentos ocupados:', SFLIGHT-SEATSOCC.

Utilizando smbolos de texto, o comando ficaria


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

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

Workshop para desenvolvedores ABAP/4

61

7- Report/Listas Criao de Listas Complexas At agora, as listas criadas apresentam um nvel de dados apenas, mas o ABAP tem recursos que permitem a exibio de listas de detalhe a partir de uma lista. O Evento AT LINE-SELECTION O processamento das listas de detalhe dentro do R/3 feito pelo evento AT LINE-SELECTION. O R/3 executa os comandos que houver dentro desse evento toda vez que o usurio clica duas vezes sobre uma linha em uma lista ouclica sobre um campo marcado com HOTSPOT, ou teclando-se F2 sobre um registro, ou escolhendo um boto que tenha o cdigo standard PICK a ele associado. HIDE Atravs do comando HIDE, possvel armazenar informao a respeito de uma linha para uso do evento AT LINE-SELECTION. Suponha que exista uma lista com os vos para uma determinada companhia area, e deseja-se exibir as reservas para aquele vo. Para exibir a lista, necessrio armazenar em algum local informaes sobre a linha selecionada pelo usurio, e isso pode ser feito atravs do comando HIDE do ABAP. O comando HIDE guarda a informao sobre os campos desejados, alm do nmero da linha que est sendo processada, em uma tabela interna, que automaticamente acessada no evento AT LINE-SELECTION. Veja o seguinte exemplo:
REPORT ZTESTE. TABLES: SFLIGHT, SBOOK. START-OF-SELECTION. SELECT * FROM SFLIGHT. WRITE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE, SFLIGHT-SEATSOCC. HIDE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE. ENDSELECT. AT LINE-SELECTION. SELECT * FROM SBOOK WHERE CARRID = SFLIGHT-CARRID AND CONNID = SFLIGHT-CONNID AND FLDATE = SFLIGHT-FLDATE. WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID.
ENDSELECT.

Workshop para desenvolvedores ABAP/4

62

7- Report/Listas 6- Report/Listas Dentro desse programa, a cada linha lida no comando SELECT, est sendo armazenada informao sobre a chave dentro da rea de HIDE. No necessrio que os campos selecionados com HIDE faam parte da lista impressa via WRITE. Quando o usurio seleciona um determinado registro, o processador de lista ABAP automaticamente procura na rea de HIDE o registro correspondente quele nmero de linha, e os disponibiliza para uso com o mesmo nome. Cabealhos de listas secundrias Para definir um cabealho prprio para listas secundrias, existe o evento TOP-OF-PAGE DURING LINE-SELECTION, que permite redefinir o cabealho e os comandos disponveis dentro da lista secundria. Por exemplo.
REPORT ZTESTE NO STANDARD PAGE HEADING. TABLES: SFLIGHT, SBOOK. START-OF-SELECTION. ... TOP-OF-PAGE. SET PF-STATUS LISTA1. WRITE: Lista Primria. TOP-OF-PAGE DURING LINE-SELECTION. SET PF-STATUS LISTA2. WRITE: Lista Secundria. AT LINE-SELECTION.
...

Workshop para desenvolvedores ABAP/4

63

7- Report/Listas Listas em mais de dois nveis Quando a lista apresentar mais de dois nveis, necessrio identificar o nvel que est sendo processado s existe um evento AT LINE-SELECTION e um TOP-OF-PAGE DURING LINE-SELECTION por programa. Para tanto, deve-se utilizar o campo de sistema SY-LSIND, que tem o nvel corrente de lista. A primeira sub-lista tem SY-LSIND igual a 1, a segunda, 2, e assim por diante, at o subnvel mximo 19. Por exemplo:
REPORT ZTESTE2N NO STANDARD PAGE HEADING. TABLES: SFLIGHT, SBOOK. START-OF-SELECTION. SELECT * FROM SFLIGHT. WRITE: SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE, SFLIGHTSEATSOCC. 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 SBOOK WHERE CARRID = SFLIGHT-CARRID AND CONNID = SFLIGHT-CONNID AND FLDATE = SFLIGHT-FLDATE. WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOKCUSTOMID. HIDE: SBOOK-CUSTOMID. ENDSELECT. WHEN 2. SELECT * FROM SCUSTOM WHERE ID = SBOOK-CUSTOMID. WRITE: / SCUSTOM-ID, SCUSTOM-NAME. ENDSELECT. ENDCASE.

Workshop para desenvolvedores ABAP/4

64

7- Report/Listas AT USER-COMMAND O processamento de lista tambm pode ser feito atravs do evento AT USERCOMMAND. Nesse caso, ser feito o processamento dos comandos (menu, teclas de 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 a declarao WINDOW STARTING AT <col> <lin> [ENDING AT <col> <lin>]. Os comandos WRITE subseqentes sero direcionados para a janela especificada. Por exemplo, alterando o cdigo da seguinte maneira, podemos criar janelas nas listas secundrias:
AT LINE-SELECTION. CASE SY-LSIND. WHEN 1. WINDOW STARTING AT 5 3 ENDING AT 40 10. SELECT * FROM SBOOK WHERE CARRID = SFLIGHT-CARRID AND CONNID = SFLIGHT-CONNID AND FLDATE = SFLIGHT-FLDATE. WRITE: / SBOOK-CARRID, SBOOK-CONNID, SBOOK-FLDATE, SBOOK-CUSTOMID. HIDE: SBOOK-CUSTOMID. ENDSELECT. WHEN 2. WINDOW STARTING AT 45 10 ENDING AT 60 12. SELECT * FROM SCUSTOM WHERE ID = SBOOK-CUSTOMID. WRITE: / SCUSTOM-ID, SCUSTOM-NAME. ENDSELECT. ENDCASE.

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

Workshop para desenvolvedores ABAP/4

65

7- Report/Listas Exemplos de comandos e eventos em geral

Workshop para desenvolvedores ABAP/4

66

7- Report/Listas

Workshop para desenvolvedores ABAP/4

67

7- Report/Listas

Workshop para desenvolvedores ABAP/4

68

7- Report/Listas

Workshop para desenvolvedores ABAP/4

69

7- Report/Listas

Workshop para desenvolvedores ABAP/4

70

7- Report/Listas

Workshop para desenvolvedores ABAP/4

71

7- Report/Listas

Workshop para desenvolvedores ABAP/4

72

8- Tabela Interna Criando Tabelas Internas (Estruturas Complexas de Armazenagem Temporria).

Tabela interna Dentro de um programa ABAP, muitas vezes impossvel trabalhar apenas com os comandos de seleo e alterao de dados diretamente na tabela. Para manipular localmente os dados, o ABAP permite o uso de tabelas internas, que so reas de memria organizadas como tabelas. Essas tabelas internas podem ter o mesmo formato de uma tabela do banco de dados, o que as qualifica para serem usadas como reas de manipulao intermediria, o que traz benefcios em termos de performance geral do R/3. Uma tabela interna declarada atravs do comando DATA, onde se especifica qual o tipo de linha da tabela, se ela tem headerline e qual a forma de operao da mesma. A tabela pode ser manipulada por comandos: De insero: 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 do loop at exclui o registro corrente, caso contrrio usar o INDEX mostrando a linha a ser excluda. o REFRESH: Limpa todos os registros da TI o 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 INDEX mostrando a linha a ser alterada. 73

Workshop para desenvolvedores ABAP/4

8- Tabela Interna De leitura de dados: o LOOP AT <TI> WHERE <condio>: Utilizado para ler mais de uma linha da tabela interna, para os casos de tabela interna com Header line automaticamente o sistema joga os dados para este registro, caso no deve-se indicar onde ser jogado os dados lidos. Filtro a opo WHERE. o READ TABLE <TI> WITH KEY <condio>: Como o Loop at l os dados de uma tabela interna s que apenas uma linha por vez.

OBS: Os comandos DELETE e MODIFY quando usados de forma incorreta fora do loop at e sem a indicao do INDEX, ocasiona Short Dump. Por exemplo, para declarar uma tabela interna, conforme no exemplo, usou-se a declarao TYPES para declarar uma estrutura que contm os campos que desejamos ter na tabela. Em seguida, a tabela criada atravs da declarao DATA, usando a estrutura como modelo. 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 de permitir o acesso mediante as chaves especificadas na declarao das tabelas. As tabelas do tipo sorted j esto pr-ordenadas de acordo com a chave as operaes realizadas nesse tipo de tabela devem ter o cuidado de no alterar a ordem, sob pena de ocorrer um erro de execuo. As tabelas do tipo hashed so organizadas de acordo com a chave especificada e no permitem operaes utilizando o nmero sequencial dos registros. So adequadas a grandes volumes de dados.

Workshop para desenvolvedores ABAP/4

74

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 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. CITY'.

Workshop para desenvolvedores ABAP/4

75

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 * FILETYPE * HEADLEN * LINE_EXIT * TRUNCLEN * USER_FORM * USER_PROG * importing * filelength TABLES DATA_TAB EXCEPTIONS CONVERSION_ERROR FILE_OPEN_ERROR FILE_READ_ERROR INVALID_TABLE_WIDTH INVALID_TYPE NO_BATCH UNKNOWN_ERROR OTHERS 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'.

='' = ARQ ='' ='' ='' ='' ='' ='' = = T_ZCURSO =1 =2 =3 =4 =5 =6 =7 = 8.

9 - Programas de Carga (BDC)

Workshop para desenvolvedores ABAP/4

76

BDC Session ABAP/4 tem uma tcnica de programao para a colocao de dados dentro do SAP conhecida como Batch Data Communication Session ou BDC Session. Existe a necessidade de entrar com dados no sistema SAP, nas seguintes situaes: Na implantao necessrio fazer a carga dos dados do sistema legado no SAP. Nesse caso normalmente gera-se arquivos TXT e atravs de programas ABAP que utilizam o conceito BDC sobe esses dados para o SAP. Em casos de interface com outro sistema tambm existe a necessidade de 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 a fatura). Na maioria dos casos essa carga poderia ser feita diretamente no banco de dados, mas, quando falamos de SAP isso no funciona, pois, a maioria de tratamentos na entrada de dados est na interface com usurios, e feito dessa forma afetaria a integralidade dos dados, ento os programas de carga (batch input ou call transaction ) so utilizados para emular as entradas de dados via interface com usurio, s que dessa forma as coisas acontecem como se fosse o usurio que estivesse entrando com os dados manualmente s que no necessita da interveno manual do operador. Nas prximas pginas veremos como isso funciona.

9 - Programas de Carga (BDC)

Workshop para desenvolvedores ABAP/4

77

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 a entrada dos dados, gravando as telas e os campos de cada tela. Para obtermos qual o programa e tela e tambm o nome de um determinado campo, utilizamos a tecla F1 e logo ap[os F9 (ou dados tcnicos nas verses mais atuais), fazendo assim imagine que vamos preencher 100 campos em 5 telas diferentes, o trabalho para determinar toda a seqncia seria enorme, para facilitar isso o R3 disponibiliza a transao SHDB, que faz um tipo de filmagem do que estamos fazendo na transao e gera uma tela com as informaes necessria para utilizarmos na confeco de nosso programa ( inclusive gera um programa pronto se for o caso e tambm o arquivo de teste). Utilizando SHDB
Criar um novo registro de gravao

9 - Programas de Carga (BDC)

Workshop para desenvolvedores ABAP/4

78

Entrar com a o nome do novo registro e com a transao que ser utilizada para entrar com os dados. Clicar em iniciar gravao, automaticamente a SHDB ir para a transao que voc digitou e a partir desse ponto tudo o que voc fizer estar sendo gravado.

Essa j a tela da transao MM01, cada campo de for preenchido e cada boto 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

Aps toda a execuo da transao, normalmente aps um comando SAVE ou BACK/EXIT, automaticamente fecha-se a transao e volta para a SHDB onde podemos ver o que foi gravado.

O que estamos vendo acima exatamente a forma que devemos preencher a tabela 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 isso j est pronto pois o analista funcional j fez.

9 - Programas de Carga (BDC)

Workshop para desenvolvedores ABAP/4

80

Aps os passos da SHDB, j podemos criar nosso programa, para isso temos que entender a estrutura BDC, acima est a forma para criarmos nossa tabela interna para ser utilizada e a estrutura da tabela BDC. Tambm importante definir o tipo de programa que ser desenvolvido BATCH INPUT ou CALL TRANSACTION.

9 - Programas de Carga (BDC)

Workshop para desenvolvedores ABAP/4

81

BATCH INPUT

Programas de BATCH INPUT, so mais utilizados para grandes massas de dados, pois, ele no faz a execuo automtica da entrada dos dados, ele apenas armazena os dados da BDC em uma local chamado PASTA, e esses dados carregados somente sero processados quando essa pasta for executada na transao SM35. Nesse caso todo o tratamento de erros de processamento ser controlado 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 ou base 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

CALL TRANSACTION

call transaction 'MM01' using t_bdc mode p_modo messages into t_msg update 'S'.

Programas CALL TRANSACTION, so mais utilizados para menor quantidade de dados, ou interfaces on-line que necessitam da resposta do processamento logo aps a execuo. Preenche-se a tabela BDC de acordo com a SHDB e ao invs de armazenar em pasta, executa-se a instruo CALL TRANSACTION, passando os parmetros como mostra acima. CALL TRANSACTION <transao> USING <tabela interna BDC> MODE <A> exibir passo a passo <E> somente erros <N> no exibir MESSAGES <tabela interna para armazenar as mensagens> UPDATE <modo de gravao (S) Sncrono>

Nesse tipo de programa as mensagens devolvidas pelo CALL TRANSACTION devem ser tratadas pelo programa de acordo com definio do usurio. Para obter a mensagem com os dados da tabela interna de mensagens executar a funo WRITE_MESSAGE.

9 - Programas de Carga (BDC)

Workshop para desenvolvedores ABAP/4

83

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 arquivo FILETYPE = 'ASC' ASC para TXT e DAT p/ XLS TABLES DATA_TAB = t_arq Tabela interna para receber os dados EXCEPTIONS CONVERSION_ERROR =1 FILE_OPEN_ERROR =2 FILE_READ_ERROR =3 INVALID_TYPE =4 NO_BATCH =5 UNKNOWN_ERROR =6 INVALID_TABLE_WIDTH =7 GUI_REFUSE_FILETRANSFER =8 CUSTOMER_ERROR =9 OTHERS = 10

Utiliza-se a funo WS_DOWNLOAD para gerar um arquivo TXT ou XLS a partir de uma tabela interna
CALL FUNCTION 'WS_DOWNLOAD' EXPORTING BIN_FILESIZE ='' CODEPAGE ='' FILENAME = 'C:\VOOS.XLS' FILETYPE = 'DAT' IMPORTING FILELENGTH = TABLES DATA_TAB = ti_semquebra FIELDNAMES = EXCEPTIONS FILE_OPEN_ERROR =1 FILE_WRITE_ERROR =2 INVALID_FILESIZE =3 INVALID_TYPE =4 NO_BATCH =5 UNKNOWN_ERROR =6 INVALID_TABLE_WIDTH =7 GUI_REFUSE_FILETRANSFER =8 CUSTOMER_ERROR =9 OTHERS = 10
.

* * * * *

9 - Programas de Carga (BDC) Trabalhando com arquivo texto. Workshop para desenvolvedores ABAP/4 84

BACKGROUND arquivo no servidor <Unix>. utilizado para casos onde o programa em questo no poder rodar on-line e o ambiente seja UNIX, pois as funes WS s funcionam em ambiente Windows. Subindo dados de um arquivo texto do servidor. OPEN DATASET <nome do arquivo> 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 o ambiente Windows necessrio criar uma rotina FTP.

9 - Programas de Carga (BDC) Estruturando programa de Carga.

Workshop para desenvolvedores ABAP/4

85

O processo de preencher a tabela interna com estrutura BDC sempre o mesmo para todos os programas, ento podemos utilizar tcnicas que permite nos desenvolver com maior rapidez e tambm com um cdigo mais limpo. Exemplo:
REFRESH T_BDC.

perform insert_line USING: 'X' 'SAPLMGMM' '0060', ' ' 'BDC_CURSOR' 'RMMG1-MTART', ' ' 'RMMG1-MBRSH' 'A', ' ' 'RMMG1-MTART' 'FERT', ' ' 'BDC_OKCODE' '/00'. REFRESH T_MSG. call transaction 'MM01' using t_bdc mode p_modo messages into t_msg update 'S'. *&---------------------------------------------------------------------* *& Form insert_line *&---------------------------------------------------------------------* FORM insert_line USING U_START TYPE C U_NAME TYPE C U_VALUE. CLEAR T_BDC. MOVE U_START TO T_BDC-DYNBEGIN. IF U_START = 'X'. MOVE: U_NAME TO T_BDC-PROGRAM, U_VALUE TO T_BDC-DYNPRO. ELSE. MOVE: U_NAME TO T_BDC-FNAM, U_VALUE TO T_BDC-FVAL. ENDIF. APPEND T_BDC. ENDFORM. " insert_line

9 - Programas de Carga (BDC)

Workshop para desenvolvedores ABAP/4

86

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

87

Dialog Programming On Line

Introduo: Online so tipos de programas que, como o prprio nome indica, funcionam online, ou seja, instantaneamente. Por isso, eles so dotados de uma maior capacidade de customizao das telas e maior flexibilidade para criarem uma interface mais amigvel com o usurio. Eles so especialmente teis na criao de aplicaes que necessitem de subtelas ou quando necessrio fornecer informaes aos usurios de outra maneira que no um relatrio. Na maioria dos casos, os programas standard funcionam assim. Os principais componentes de um programa On-Line so: Development environment o ABAP/4 Dictionary o Screen Painter o ABAP/4 o Menu Painter Runtime environment o Dialog processor o ABAP/4 processor 10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

88

necessria a utilizao do Screen Painter e do Menu Painter para a criao dos modelos e dos programas controladores das telas. O fluxo lgico do processamento da tela definido no programa ABAPA ( Module Pool ) Os campos definidos nas telas devem ser obtidos atravs de estruturas e/ou tabelas definidas no dicionrio de dados. Screen Painter ABAP/4

Para criao de uma tela, devem ser seguidos os seguintes passos: Defina os componentes bsicos da tela ( screen attributes ). Desenhe o Layout da tela utilizando o fullscreen editor Defina os atributos dos campos ( field list ) Escreva o fluxo lgico da tela. ( flow logic )

Os mais importantes componentes do programa ABAP so encontrados nos seguintes objetos: Global data ou Estruturas do dicionrio no TOP include (declarao de dados ) Module PBO ( Process Before Output ) Module PAI ( Process After Input ) Sub-rotinas ( se necessrio )

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

89

FIGURA 3

O Fluxo lgico dividido em dois eventos para cada tela? O PROCESS BEFORE OUTPUT evento ( PBO ) executado antes da tela ser apresentada. O PROCESS AFTER INPUT evento ( PAI ) executado aps u usurio ter acionado algum boto ou disparado algum evento na tela anteriormente apresentada. O sistema processa mdulos em um evento seqencialmente. Em cada mdulo, o controle passado do processador de dilogos ( tela ) para o processador do programa ABAP, e aps o processamento, o controle retornado ao processador de dilogo ( tela ). Quando todos os mdulos do PBO terminarem a execuo, os contedos dos campos na Work Area do ABAP so copiados para a Work Area da tela em nomes idnticos. Antes do PAI se processado, os contedos dos campos na Work Area da tela so copiados para a Work Area do ABAP em nomes idnticos. 10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

90

CRIANDO PROGRAMAS Crie o seu programa (ABAP Module Pool ) no Development Workbench seguindo a regra de nomenclatura abaixo: O nome dever iniciar com as letras SAP A quarta posio do nome do programa dever ser sempre M ( Module Pool ) A quinta posio, no caso de programas customizveis dever ser Z ou Y.

Escolha a opo TOP include, pois desta forma, ser criado o include que ser utilizado para a declarao dos dados globais. Se voc utilizar os includes, o sistema automaticamente sugerir os nomes para eles, seguindo uma regra particular, de acordo com o nome do programa principal ( module pool) e com um determinado sufixo, o qual facilitar a sua identificao dentro do programa. ATRIBUTOS DO PROGRAMA Nos atributos do programa, voc define o Ttulo, o tipo do programa e a aplicao. Para programas Module Pool, escolha o tipo de programa M. DEFININDO TELAS Crie as telas necessrias para o seu programa Module Poll a partir da lista de objetos. Aps voc ter digitado o Nmero da tela, o sistema abre uma nova tela com dados daquela tela. Digite uma pequena descrio para a tela. Escolha a opo normal e especifique o numero da prxima tela ( se necessrio, n momento da execuo, o sistema desviar para o nmero da tela indicado nesse campo, caso esteja preenchido ).

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

91

UTILIZANDO CAMPOS DO DICIONARIO ABAP

Geralmente, voc define campos utilizando os campos previamente definidos no dicionrio ABAP. Podem ser utilizados tambm campos j definidos no module pool, bastando para isso que exista uma gerao prvia deste module pool. Podem ser feitas cpias dos campos de sada e dos templates ( tela ) individualmente ou juntas.

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

92

LAYOUT DA TELA ( GRAPHICAL SCREEN PAINTER )

Para desenhar telas, utilize o Screen Painter. A inteface do Screen Painter Grfico contm funes easy-to-use para definio de diversos elementos da tela ( campo de entrada/sada, labels, boxes, botes, etc.). Voc escolhe cada elemento e os posiciona na tela utilizando o mouse. Para excluir os elementos da tela, necessrio selecionar cada elemento com o mouse ( foco ) e pressionar delete. possvel tambm mover os elementos grficos pela tela, somente clicando e arrastando.

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

93

DEFININDO O FLOW CONTROL

Nos Flow Logics no so permitidos palavras reservadas ( IF, PERFORM, WHILE, ETC ) da mesma forma em que so permitidos nos programas. O Flow Logic, embora se parea muito com o programa , no tem o mesmo comportamento. Ele usado basicamente para ordenar o processamento da tela, e para isso so criados os MODULES, que tem uma funo anloga a do perform. Para criarmos um module, escreva o seu nome no flow logic no lugar desejado e efetue um double-click. O sistema criar uma sub-rotina iniciando com MODULE <NOME> e terminando com ENDMODUILE no include apropriado. Isto pode ser facilmente observado efetuando uma navegao pelo include. Se no existirem includes, o sistema poder criar uma ou poder incluir a subrotina no programa principal. 10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

94

CRIANDO UMA SEQUENCIA DE TELAS

Para telas com estrutura similar, voc pode copiar uma tela existente e, se necessrio, modific-la. Para fazer isso, voc utiliza o DEVELOPMENT WORKBENCH posicionando o cursor na tela que voc deseja copiar e escolha a opo COPY. Quando terminar o processo com sucesso, o sistema mostrar a tela como um novo sub-objeto do module pool e voc poder edit-lo. IMPORTANTE: Sempre que voc copiar uma tela o flow logic tambm ser copiado, e o module aparece declarado nos flow logics e somente a chamada desse module, esteja ciente que as sub-rotinas ( modules ) podem ser compartilhadas por varias telas, e que a modificao de uma sub-rotina com esse nvel de amarrao deve ser feita com muita ateno.

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

95

DEFININDO CAMPOS NO MODULE POOL No processamento do dialogo, os dados so passados entre as telas e programas ABAP durante a execuo. O sistema efetua a comunicao automaticamente, mas necessrio que seja utilizado o nome idntico dos campos nas telas e no module pool. Defina os dados globais no TOP INCLUDE, para que todas as telas possam enxerg-lo. CRIANDO MODULES ABAP Durante o processo de criao dos modules PAI/PBO, voc pode associ-los aos includes desejados ou deixar que o sistema automaticamente faca isto por voc. O PROCESSAMENTO DO MODULE POOL As sub-rotinas provenientes dos modules do PBO tem a adio OUTPUT e as provenientes do PAI tem a adio INPUT.

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

96

DEFININDO CHAMADAS VIA TRANSAO

Para executar um programa ABAP module pool, necessria a criao de uma transao. Transaes customizadas devem iniciar com Z ou Y. O sistema armazena suas especificaes de transaes na tabela TSTC. INPUT CHECHING NO MODULE POOL Se for necessria a checagem dos campos de entrada no module pool e incluir um tratamento de mensagem de erro, dever ser utilizado o comando FIELD, associado ao campo que desejamos checar, se for necessrio o tratamento mais apurado , pode ser associado um module especifico a esse comando. COMANDO FIELD E TRANSPORTE DE DADOS No module PAI, campos da tela so transportados com nomes idnticos para Work Areas do programa ABAP. Campos no associados a comandos FIELD so transportados primeiro, Todos os outros campos so copiados somente quando todos os FIELD estiverem sido executados.

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

97

ANTERANDO A SEQUENCIA DE TELAS DINAMICAMENTE

Se as funes do seu dialog program requererem um controle de processamento diferenciado, pode ser feito o controle da seqncia das telas dinamicamente, usando o comando SET SCREEN. O comando SET SCREEN NNN temporariamente sobrepe o controle feito nos atributos da tela no campo next screen. A tela NNN deve ser uma tela do mesmo module pool. Quando a tela corrente termina seu processamento, o sistema desvia o controle para a tela definida no campo next screen. Se voc quiser cancelar a tela corrente, pode ser usado o comando LEAVE SCREEN. Pode ser usado o comando CALL SCREEN para controle da seqncia da tela dinamicamente. Aqui voc pode inserir a seqncia de telas aps retornar para a tela original que originou a chamada.

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

98

INTERPRETANDO FUNCTION CODES NO PROGRAMA

Quando definido um PUSHBUTTON para possibilitar ao usurio escolher funes especificas, quando o boto pressionado, o evento PAI disparado. Pode-se criar um FUNCTION CODE para cada PUSHBUTTON. Existe um formato ( Dicionrio ) pr definido para function codes, o OK, com tamanho de 4 bytes. Para permitir a execuo correta de uma funo associada a um pushbutton, necessria a criao de um campo chamado exatamente de OKCODE. Este campo contem o valor do function code aps os dados serem transportados da tela para o programa.

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

99

MENU PAINTER: OVERVIEW

Usa-se o Menu Painter para definir funes na tela em um status particular e associ-los a um apropriado menu, a saber ? menu bar, standard toolbar e application toolbar. Pode-se tambm definir um titulo para a tela. Em geral, define-se um menubar para cada dialog program e associa-se esse menubar a um status. Para cada status, define-se qual funo estar ativa/inativa. Cada alterao nos status ( menus ) deve ser seguida de uma re-gerao da tela completa. Para associar um status e um ttulo a uma tela, isto deve ser feito no seu PBO, usando o comando SET PF-STATUS e SET TITLEBAR. Quando necessrio, o sistema prope valores default para o menu bar e tambm teclas de funo, porem podem ser modificadas.

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

100

Criando ajuda de pesquisa (Matchcode) Para se criar uma ajuda de pesquisa no SAP, utiliza-se a transao SE11. Nela, deve ser preenchido o nome da ajuda de pesquisa e apertar a tecla <CRIAR>

Em seguida, deve-se entrar os seguintes campos: Descrio da ajuda de pesquisa Mtodo de Seleo (tabela ou viso que contm os dados) O tipo da ajuda de pesquisa (se ser uma lista tipo dropdown ou uma outra tela) Os parmetros que devero constar da ajuda de pesquisa, com os seus respectivos elementos de dados (OBS: para uma ajuda de pesquisa, necessrio que um elemento de dados para o parmetro em questo exista). Preenchimento dos campos PosL e ISel. Estes campos indicam a posio na lista de acertos da ajuda de pesquisa que os parmetros aparecero e o se eles devem aparecer na listagem ou no. Em muitos casos, um parmetro serve apenas para ajudar na seleo de outro e portanto no deve ser exibido. Devemos informar ainda qual campo sera importado/exportado quando a ajuda de pesquisa for ativada. Essa informao indicada atravs de 2 boxes junto aos parmetros de ajuda de pesquisa.

10 - Programas de Tela On Line

Workshop para desenvolvedores ABAP/4

101

Exemplo:

No exemplo acima, uma ajuda de pesquisa criada para o parmetro CODAL (cd. do aluno), que ser importado e exportado (lido e devolvido para tela de seleo aps a escolha do usurio). Para auxiliar o usurio, o nome do aluno dever aparecer tambm (parmetro NOMEA), porm, ele no ser lido e nem devolvido para a tela.Com isso, obtemos uma ajuda de pesquisa da seguinte forma:

11 - SAPSCRIPT

Workshop para desenvolvedores ABAP/4

102

Definio: SAPSCRIPT uma ferramenta que auxilia o desenvolvedor Abap a criar relatrios com formatao grfica, independentemente do programa que o utilizar. claro que ele no funciona sozinho, pois para que ele seja executado, depende diretamente de um programa ABAP. Portanto, cria-se um programa Z qualquer para chamar o seu SAPSCRIPT. Podemos definir alguns parametros importantes: - Formatao de fontes (tamanho,tipo) - Box - Figuras ( logomarcas ) Limitaes e problemas da ferramenta O SAPSCRIPT apresenta uma srie de limitaes, principalmente no que diz respeito a verificao de erros e anlise de debug. Um comando escrito na grafia errada dentro de um formulrio, jamais ser detectado pelo mesmo. Somente a no funcionalidade esperada do comando poder levar ao programador descobrir seu prprio erro. O modo debug do ambiente de SAPscript pode ser ativado na transao SE71 (SAP Standard Menu -> Tools -> Sapscript -> Form), atravs do menu Utilitrios -> Ativar debug. O mtodo correto consiste em se preencher o nome do formulrio e idioma nos campos da tela, antes de percorrer o caminho do menu. Algumas vezes, no entanto, principalmente para um processamento em background, o formulrio no permite ser debugado, embora percorrendo o caminho acima citado, nenhuma mensagem de impossibilidade seja exibida. Simplesmente, nenhuma tentativa de debug funciona. Nesses casos, o programador deve utilizar de artifcios como imprimir o contedo dos campos a serem checados em pontos estratgicos do formulrio, para observar seu comportamento. O comportamento de um formulrio SAPscript pode tambm ser muitas vezes irritante, principalmente quando se desconhece alguns de seus detalhes. Um dos problemas mais comuns do formulrio SAPscript quanto a utilizao de logotipos nos relatrios gerados. Sua filosofia pode parecer bastante simples e , mas essa operao bastante sensvel, e devem ser salientados alguns pontos: O objeto com o logotipo deve ser gerado a partir de um programa de ABAP, atravs da transao SE38, chamado RSTXLDMC. O modo como o arquivo com o logotipo tratado, deve ser cuidadosamente verificado, pois implicar no sucesso ou fracasso da exibio do logotipo esperado. Inicialmente, deve ser ressaltado que o arquivo deve estar no formato TIFF (extenso .TIF), no comprimido. Essa figura gerada nestes padres tem ainda algumas restries para a sua aplicao. Em primeiro lugar, o nmero de pxeis da figura ( a resoluo da mesma, em DPI dots per inch ) devem ser exatamente o nmero de pxeis informado na tela de seleo do programa para se garantir que o logotipo seja exibido no tamanho em que foi gerado. Alguns programas de editorao grfica, como o Paint Shop Pro,

11 SAPSCRIPT

Workshop para desenvolvedores ABAP/4

103

possuem recursos para se determinar o tamanho da figura em centmetros e at mud-lo (resize), mantendo-se a resoluo (nmero de pxels). Em alguns casos, se o nmero de pxeis no coincidir com o informado, a figura pode nem ser gerada no SAP, dificultando o trabalho do programador. Em segundo lugar, o nmero de cores ou tonalidades de cinza tambm precisam coincidir (esse parmentro varia de acordo com a verso do SAP, devendo-se estar atento aos dados na tela de seleo do programa). Por fim, um ltimo parmetro que pode alterar o tamanho e o formato do logotipo a configurao da impressora no SAP. O SAP utiliza a configurao da impressora para gerar o formulrio e imprim-lo. Se a configurao no estiver correta, pode influenciar no logotipo e na criao de linhas e caixas (BOXES). Nessa hora entra a segunda dificuldade de se trabalhar com logotipos em SAPscript. Ao se executar o formulrio, em uma visualizao na tela, o usurio nunca ir conseguir enxergar o logotipo. Esse somente ir aparecer na impresso em papel (ainda que impresso do layout do formulrio, e no seu contedo final Utilitrios -> Imprimir layout). As novas verses do SAP j corrigiram esse problema. Essas duas caractersticas podem tomar algumas horas do programador, ainda que bem experiente no trabalho com SAPscript. importante se observar tambm que os formulrios so client dependent, o que significa dizer que devem ser transportados a todos os clientes em que se deseja execut-lo, independentemente de estar na mesma instncia que j o tenha. Isso no pareceria ser muito complicado se no fosse um trabalho a mais controlar a verso de todos no momento que uma alterao for feita. Por isso, recomenda-se que todos os nmeros das Change Requests sejam inseridos como comentrio no corpo do formulrio, pois no h administrao de verses para Sapscript, como h nos reports. Um outro problema so os objetos gerados, como os logotipos e textos, que alm de dependentes do cliente, no esto vinculados a nenhuma request, no podendo nem ser transportados diretamente de um cliente para o outro. Tanto os logotipos quanto os textos so armazenados da mesma maneira no sistema. Para transport-los, deve-se executar o programa RSTXTRAN, que associa esses textos a uma change request para em seguida, poderem ser transportados Por falar em transporte, sempre bom reforar que no momento do transporte de um formulrio SAPscript, necessrio assegurar que todas as estruturas utilizadas por ele, tenham sido transportadas anteriormente. O objetivo assegurar que tudo que ser utilizado pelo formulrio j esteja no cliente, no momento em que este for introduzido, para que no haja erros. A ordem mais aconselhada para esses transportes seria: 1 . Estrutura 2 . Layout 3 . Programa de povoamento

11 SAPSCRIPT

Workshop para desenvolvedores ABAP/4

104

Programa de Povoamento do SAPSCRIPT O programa de povoamento o programa responsvel pelo controle da impresso do formulrio. atravs dele que o formulrio aberto, que os dados so enviados para as janelas corretas, que feito o controle de quebra de pginas, que feito o fechamento do formulrio, etc. no programa de povoamento que feita a seleo dos dados que devero aparecer no relatrio. Toda a lgica de seleo, busca dos dados, associao de tabelas, etc., feita nele. O formulrio apenas um dispositivo para output dos dados. A construo de um programa de povoamento deve seguir a seguinte estrutura: Abertura de um formulrio Inicializao de um formulrio Seleo dos dados do formulrio Impresso dos dados nas janelas do formulrio Encerramento do formulrio Fechamento do formulrio

Workshop para desenvolvedores ABAP/4

105

11 SAPSCRIPT Abertura de formulrios. O primeiro passo para a impresso de um Sapscript atravs de um programa a abertura de um formulrio para que se possa fazer o povoamento. Para que se possa inicializar um formulrio necessrio que este seja aberto. Portanto, obrigatria a presena de um comando de abertura num programa de povoamento. A abertura de um formulrio gera automaticamente a inicializao de um formulrio. O comando para a abertura de um formulrio a seguinte funo:
call function 'OPEN_FORM' exporting * APPLICATION * ARCHIVE_INDEX * ARCHIVE_PARAMS DEVICE * DIALOG FORM LANGUAGE * OPTIONS * importing * language * new_archive_params * result exceptions canceled device form options unclosed others

= = = = = = = = = = = = = = = = =

'TX' ' ' ' ' 'PRINTER' 'X' (Nome do Formulrio) (Idioma do Formulrio) ITCPO

1 2 3 4 5 6.

Os parmetros mais importantes a serem passados para a funo so: Device Dispositivo onde ser gerado o formulrio (geralmente PRINTER) Form Nome do formulrio a ser aberto Language Idioma a ser utilizado Dois outros parmetros tambm muitas vezes utilizados so o dialog e o options. No primeiro, indica-se se a caixa de dilogo para configurao da impresso deve ou no ser apresentado. Caso este deva ser omitido, os dados para impresso sero tomados de uma estrutura a ser colocada no segundo parmetro. Nessa estrutura so passados os dados tais como nmero de cpias e nome da impressora. A opo de no exibio da caixa de dilogo esta diretamente ligada a utilizao do segundo parmetro. Se a exibio estiver desabilitada (DIALOG = ) mas a estrutura ITCPO no estiver preenchida, a caixa de dilogo ser exibida. Alguns dos campos mais importantes e que normalmente so utilizados na estrutura ITCPO so:

Workshop para desenvolvedores ABAP/4

106

11 SAPSCRIPT TDCOPIES (Nmero de Cpias) TDDEST (Dispositivo de Sada) TDPREVIEW (Print Preview) TDIMMED (Sada Imediata)

Exemplo de abertura do formulrio ZSCR_CURSO. ITCPO-TDIMMED = X. ITCPO-TDCOPIES = 2. ITCPO-TDDEST = IMP1.


call function 'OPEN_FORM' exporting * APPLICATION * ARCHIVE_INDEX * ARCHIVE_PARAMS DEVICE DIALOG FORM LANGUAGE OPTIONS * importing * language * new_archive_params * result exceptions canceled device form options unclosed others

= = = = = = = = = = = = = = = = =

'TX' ' ' ' ' 'PRINTER' ' ' 'ZSCR_CURSO' 'P' ITCPO

1 2 3 4 5 6.

Neste exemplo, o formulrio ZSCR_CURSO no idioma portugus ser aberto, sem a exibio da caixa de dilogo de impresso, utilizando a impressora IMP1 e executando a impresso imediata de 2 cpias.

Workshop para desenvolvedores ABAP/4

107

11 SAPSCRIPT Inicializao de um formulrio. A abertura de um formulrio automaticamente gera a inicializao do mesmo. Mas, imagine por exemplo que estejamos gerando relatrios para uma empresa de computadores onde, para cada novo computador vendido, deve ser gerado um novo relatrio, e esse relatrio deve conter todos os componentes presentes no computador em questo. A abertura de um formulrio inicia o primeiro, mas para cada novo computador vendido um novo formulrio deve ser gerado. Para isso utilizamos o comando de inicializao. Este comando permite que, numa mesma impresso, sejam gerados vrios formulrios diferentes, como se estivssemos abrindo um novo para cada computador vendido. Este comando no obrigatrio e pode no ser utilizado caso no haja necessidade da quebra e criao de vrios formulrios para uma s seleo de dados. O comando para inicializao de um formulrio a seguinte funo: call function 'START_FORM' exporting * ARCHIVE_INDEX = ' ' FORM = ' ' LANGUAGE = ' ' * STARTPAGE = ' ' * PROGRAM = ' ' * importing * language = exceptions form = 1 format = 2 unended = 3 unopened = 4 unused = 5 others = 6. A funo muito similar funo OPEN_FORM, e novamente os parmetros mais importantes so o nome (FORM) e o idioma (LANGUAGE) do formulrio. Para que se possa utilizar um comando START_FORM obrigatrio que um comando de OPEN_FORM tenha sido executado.

Workshop para desenvolvedores ABAP/4

108

11 SAPSCRIPT Finalizando um formulrio. Em contrapartida com o item acima (comando START_FORM), toda vez que um formulrio inicializado, o mesmo deve ser finalizado ao final do seu processamento. Isso obtido atravs do comando: CALL FUNCTION 'END_FORM'. * IMPORTING * RESULT * EXCEPTIONS * UNOPENED * BAD_PAGEFORMAT_FOR_PRINT * OTHERS

= = 1 = 2 = 3

Para o seu funcionamento, apenas a sua chamada suficiente, sem as clusulas adicionais, comentadas acima. Fechando um formulrio. Finalmente, em contrapartida ao comando OPEN_FORM, toda vez que um formulrio aberto, o mesmo deve ser fechado. Isso obtido atravs do comando : CALL * * * * * * * * * * FUNCTION 'CLOSE_FORM'. IMPORTING RESULT RDI_RESULT TABLES OTFDATA EXCEPTIONS UNOPENED BAD_PAGEFORMAT_FOR_PRINT SEND_ERROR OTHERS

= = = = = = = 1 2 3 4

Como no comando END_FORM, para o seu funcionamento, apenas a sua chamada suficiente, sem as clusulas adicionais, comentadas acima.

Workshop para desenvolvedores ABAP/4

109

11 SAPSCRIPT Seleo dos dados A seleo dos dados feita normalmente com comandos SELECT e demais comandos ABAP, como j foi visto em tpicos anteriores. Um ponto importante que deve ser observado que no possvel utilizar tabelas internas e variveis do programa para a impresso dos dados no SAPSCRIPT. Portanto, se algum dado que deva ser impresso estiver numa tabela interna ou varivel, este deve ser copiado para uma estrutura para que possa ser enviado ao SAPSCRIPT. Impresso dos dados nas janelas A impresso dos dados nas janelas na maioria das vezes feita simultaneamente com a seleo dos dados, ou seja, a medida que os dados so selecionados, so enviados imediatamente para o formulrio. O comando para impresso dos dados a seguinte funo: call function 'WRITE_FORM' exporting ELEMENT = ' ' * FUNCTION = 'SET' * TYPE = 'BODY' WINDOW = 'MAIN' * importing * pending_lines = exceptions element = 1 function = 2 type = 3 unopened = 4 unstarted = 5 window = 6 others = 7. Dois parmetros so os mais importantes: Element Determina qual Data Element ser utilizado dentro do Sapscript Window Janela na qual os dados devem ser impressos.

Workshop para desenvolvedores ABAP/4

110

11 SAPSCRIPT Neste ponto fica evidente a diferenciao entre os tipos de janela MAIN e demais janelas. Para as janelas do tipo MAIN, cada comando de escrita (write_form) significa uma nova linha no formulrio e o valor a ser impresso o valor que o campo armazena no momento do comando de impresso. Por exemplo, digamos que o campo MARA-MATNR tenha o valor 1234 e que um comando de impresso seja dado para a janela MAIN que ir imprimir este campo. Logo em seguida uma nova seleo da tabela MARA feita e o campo MATNR agora vale 5678. Se uma nova impresso na janela MAIN for executada o resultado ser o seguinte: 1234 5678 J as janelas que no forem do tipo MAIN imprimem os dados uma nica vez, no final da impresso do formulrio ou na quebra de pgina, com os valores armazenados nos campos no momento do encerramento ou no momento da quebra, e no no momento da escrita (write_form), ou seja, se no exemplo anterior fosse utilizada uma janela no-main, o resultado final seria somente 5678. Na realidade, a utilizao de um comando WRITE_FORM numa janela nomain utilizada para a escolha de qual elemento de texto ser utilizado para a impresso dos dados. Exemplo: Uma janela HEADER no-main contm dois elementos de texto chamados FRASE1 e FRASE2 da seguinte forma:
/E /E FRASE1 &MARA-MATNR& FRASE2 &MARA-MATNR& Teste de Frase 1 Teste de Frase 2

Se um comando WRITE_FORM for executado para a janela HEADER utilizando o elemento de texto FRASE1, call function 'WRITE_FORM' exporting ELEMENT = 'FRASE1' * FUNCTION = 'SET' * TYPE = 'BODY'
WINDOW = 'HEADER'

estar sendo indicado ao programa que, ao se encerrar o formulrio, deve ser impresso o elemento de texto FRASE1 para a janela HEADER (somente um elemento de texto utilizado para cada janela no-main). No caso do exemplo, se o campo MATNR for igual a 1234 no encerramento do formulrio, seria impressa a seguinte frase: Teste de Frase 1.

Workshop para desenvolvedores ABAP/4

111

11 SAPSCRIPT O elemento de texto a ser impresso ser sempre o ltimo a ser selecionado antes do final ou da quebra de pgina. Se nenhum for selecionado, ao encerrar o formulrio ou mudar de pgina sero impressos os dados que no pertenam a nenhum elemento de texto. Portanto no caso de um campo que deva ser impresso sempre em todas as pginas, como numero de pgina por exemplo, basta coloc-lo fora de qualquer elemento de texto e no selecionar nenhum elemento de texto para a janela que, automaticamente, este dado ser impresso em todas as pginas.

Fluxo do SAPSCRIPT:
Tendo visto os comandos acima, um fluxo simplificado de um programa para a impresso de um SAPSCRIPT seria: FORM f_imprime_sapscript.
* Abre o formulrio CALL FUNCTION 'OPEN_FORM' EXPORTING DEVICE FORM LANGUAGE

= 'PRINTER' = 'Z_SAPSCRIT' = SY-LANGU.

* inicializa o formulrio

CALL FUNCTION 'START_FORM' EXPORTING FORM = 'Z_SAPSCRIT' LANGUAGE = SY-LANGU. loop at i_tab.

* imprime o elemento de dados ITEM da janela MAIN do Sapscript * com os dados da tabela interna i_tab
CALL FUNCTION 'WRITE_FORM' EXPORTING ELEMENT WINDOW endloop. * finaliza o formulrio call function 'END_FORM'. * fecha o formulrio call function 'CLOSE_FORM'. ENDFORM. = 'ITEM' = 'MAIN'.

Workshop para desenvolvedores ABAP/4

112

11 - SAPSCRIPT Tambm vale a pena chamar a ateno para que esses 3 classes de objetos estejam em requests separadas no desenvolvimento de um projeto, o que pode evitar problemas quando algum deles no estiver funcionando propriamente e necessitar ser reparado... Utilizando SAPSCRIPT Para a utilizao dessa ferramenta, utilizaremos a transao SE71 e como de costume, temos que informar um novo nome de Formulrio e clicar no boto CREATE conforme exemplo da figura 1.

Workshop para desenvolvedores ABAP/4

113

11 - SAPSCRIPT Header No Header (Cabealho) faz-se necessrio informarmos a Descrio do formulrio e a Classe de Desenvolvimento, para ento comearmos efetivamente a montar nosso primeiro SAPSCRIPT.

Workshop para desenvolvedores ABAP/4

114

11 - SAPSCRIPT Basic Setting No Basic Setting, informaremos alguns parmetros referentes a configurao da pgina de impresso, os principais e necessrios so: Page format ( Tipo de pgina ) Default paragr. ( Pargrafo padro ) First page ( Primeira pgina a ser mostrada na execuo )

Esta etapa s poder ser feita depois de criarmos PAGINAS e PARAGRAFOS.

11 - SAPSCRIPT Workshop para desenvolvedores ABAP/4 115

Page A Page servir para armazenar as informaes do relatrio. Para criar uma page, basta preencher os campos indicados abaixo: Page ( nome da pgina ) Next page ( prxima pgina ) Description ( descrio da pgina )

11 - SAPSCRIPT

Workshop para desenvolvedores ABAP/4

116

Windows Nesta etapa, criaremos as Windows, ou seja, as janelas da Page. Essas Janelas, podem ser criadas de acordo com a necessidade de cada desenvolvedor. Campos a serem preenchidos: Window ( nome da janela ) Description ( descrio da janela )

11 - SAPSCRIPT

Workshop para desenvolvedores ABAP/4

117

Page Windows Agora iremos amarrar as Windows com as Pages, informando cada posio de cada Window na Page. Para isso basta informarmos os seguintes campos:

Workshop para desenvolvedores ABAP/4

118

Workshop para desenvolvedores ABAP/4

119

Workshop para desenvolvedores ABAP/4

120

Workshop para desenvolvedores ABAP/4

121

Left margin ( margem a esquerda ) Upper margin ( margem superior ) Window width ( largura da janela ) Window height ( altura da janela ) Figura 6.

11 - SAPSCRIPT Pargrafo Criaremos os pargrafos que sero utilizados no relatrio de acordo com a necessidade do programa. Aqui voc j pode definir uma formatao para seu pargrafo ( Tamanho da fonte, tipo de letra, negrito, itlico ou sublinhado ). Workshop para desenvolvedores ABAP/4 122

11 - SAPSCRIPT Tabs Com os Tabs podemos indicar em qual coluna cada texto vai estar no pargrafo. E para cri-los, temos que indicar os seguintes campos:

Workshop para desenvolvedores ABAP/4

123

Tab position ( posio do tab ) Alignment ( alinhamento )

11 - SAPSCRIPT Text Elements Esta a principal etapa, porque utilizaremos tudo que criamos nas etapas anteriores. Voltemos para Page Windows e clicaremos no boto Elements. No esquea de selecionar a Page Window que deseja. Workshop para desenvolvedores ABAP/4 Text

124

Vemos na figura 9 um formulrio dividido em 2 partes. A primeira, informaremos o tipo do pargrafo ( aqueles que criamos e outros default ) e a segunda, o que vai conter no pargrafo, ou seja, o que vai aparecer no relatrio e como vai aparecer. Informaes importantes:

,, ( definem os tabs que sero utilizados)


&campo& (indica que ser utilizado uma varivel do programa)

11 - SAPSCRIPT Criao de Bordas

Workshop para desenvolvedores ABAP/4

125

Ativando SAPSCRIPT Como tudo em Abap temos que Ativar, no esqueam de ativar o SapScript, porque seno, no vai funcionar.

Testando SAPSCRIPT Podemos testar se o relatrio est funcionando, mas lembre-se, somente a mascara do relatrio, ou seja, um relatrio sem dados.

11 - SAPSCRIPT O Relatrio

Workshop para desenvolvedores ABAP/4

126

11 SAPSCRIPT Chamando o SAPSCRIPT a partir do programa.

Workshop para desenvolvedores ABAP/4

127

Abrindo Formulrio
MOVE: 'LOCL' TO ITCPO-TDDEST, "Impressora '' TO ITCPO-TDIMMED, "Imediato '' TO ITCPO-TDDELETE, "Deleo apos impressao P_EXIBI TO ITCPO-TDPREVIEW,"Exibir antes da impresso '' TO ITCPO-TDGETOTF. CALL FUNCTION 'OPEN_FORM' EXPORTING DEVICE = 'PRINTER' DIALOG = 'X' FORM = 'ZSAPCURSOXX' LANGUAGE = 'P' OPTIONS = ITCPO EXCEPTIONS CANCELED =1 DEVICE =2 FORM =3 OPTIONS =4 UNCLOSED =5 MAIL_OPTIONS =6 ARCHIVE_ERROR =7 MORE_PARAMS_NEEDED_IN_BATCH = 8 OTHERS = 9. IF SY-SUBRC <> 0. MESSAGE E368(00) WITH TEXT-007. ENDIF.

Chamando um TEXT_ELEMENT
CALL FUNCTION 'WRITE_FORM' EXPORTING ELEMENT = 'ITEM' FUNCTION = 'SET' TYPE = 'BODY' WINDOW = 'MAIN' IMPORTING PENDING_LINES = EXCEPTIONS ELEMENT =1 FUNCTION =2 TYPE =3 UNOPENED =4 UNSTARTED =5 WINDOW =6 BAD_PAGEFORMAT_FOR_PRINT = 7 OTHERS = 8.

* * * *

Fechando o Formulrio
* * * * CALL FUNCTION 'CLOSE_FORM' IMPORTING RESULT = I_RESULT TABLES OTFDATA = I_OTF EXCEPTIONS UNOPENED =1 BAD_PAGEFORMAT_FOR_PRINT = 2 SEND_ERROR =3 OTHERS = 4.

11 - SAPSCRIPT Incluso de Logos nos formulrios

Workshop para desenvolvedores ABAP/4

128

Utilizar logotipos em formulrios SAPscripts, no das tarefas mais simples que se possa ter. Teoricamente falando, o processo bastante simples e consiste em gerar no sistema um objeto no formato hexadecimal, que possa ser interpretado pelo SAPscript, originando a incluso de uma imagem. No entanto, devido s limitaes expostas no comeo deste documento, isso pode levar um certo tempo at reproduzir o resultado desejado. Para gerarmos o objeto no client desejado (lembre que esse objeto no pode ser transportado), devemos executar o programa standard RSTXLDMC, com um arquivo no formato *.TIF.

Workshop para desenvolvedores ABAP/4

129

11 SAPSCRIPT Preencher o primeiro campo (file name), com o path completo do arquivo da imagem do logotipo. Esse caminho pode ser no servidor ou local. O segundo campo (type) determina se o logotipo deve ser gerado monocromtico (default) ou colorido. O ltimo parmetro que exige ser preenchido o Text Name, onde feita a atribuio do nome do objeto que ser referenciado de dentro do formulrio (padro: ZHEX-MACRO-). A gerao desse logo est intimamente ligado ao formato do arquivo TIF. Isso quer dizer que o seu tamanho obtido no formulrio est relacionado ao tamanho da imagem geradora do objeto. Tomar cuidado com o nmero de cores e tonalidades da imagem e lembrar na hora de fazer os testes, que o logotipo no aparece na tela, somente em impresses no papel (problema corrigido nas verses atuais). Nesta hora, vale lembrar todas as ressalvas feitas anteriormente: O arquivo deve estar no formato TIFF (extenso .TIF), no comprimido. Essa figura gerada nestes padres tem ainda algumas restries para a sua aplicao. Em primeiro lugar, o nmero de pxeis da figura ( a resoluo da mesma, em DPI dots per inch ) devem ser exatamente o nmero de pxeis informado na tela de seleo do programa para se garantir que o logotipo seja exibido no tamanho em que foi gerado. Alguns programas de editorao grfica, como o Paint Shop Pro, possuem recursos para se determinar o tamanho da figura em centmetros e at mud-lo (resize), mantendo-se a resoluo (nmero de pxels). Em alguns casos, se o nmero de pxeis no coincidir com o informado, a figura pode nem ser gerada no SAP, dificultando o trabalho do programador. O nmero de cores ou tonalidades de cinza tambm precisam coincidir (esse parmentro varia de acordo com a verso do SAP, devendo-se estar atento aos dados na tela de seleo do programa). A configurao da impressora no SAP pode alterar o tamanho e o formato do logotipo a configurao da impressora no SAP. O SAP utiliza a configurao da impressora para gerar o formulrio e imprim-lo. Se a configurao no estiver correta, pode influenciar no logotipo e na criao de linhas e caixas (BOXES). Para se transportar um logotipo ou texto, deve-se primeiro, associ-lo a uma Change Request, atravs do programa standard RSTXTRAN

Workshop para desenvolvedores ABAP/4

130

12 Introduo ALV Introduo O ALV Grid uma ferramenta flexvel para exibio de relatrios ou rvore. So disponibilizados botes que permitem ao usurio manipular os dados (classificar, filtrar, somar). Alm dos botes standards do sistema, possvel criar novos botes conforme a necessidade do usurio. Isto pode eliminar certas etapas no processo de gerenciamento de eventos para controles. ATENO : O ALV Grid no permite processamento em Background apenas o ALV List. Utilizao O Abap List Viewer padroniza e simplifica o uso de listas e relatrios no sistema R/3. Pode-se especificar os campos a serem exibidos no relatrio e modificar a seqncia em que esses campos so exibidos. Alm disso, pode-se ajustar a largura das colunas individuais para atender a requisitos especficos. O ALV permite : Usar variantes de exibio standard predefinidas pela SAP

Workshop para desenvolvedores ABAP/4

131

12 Introduo ALV Definir um filtro : Exibir somente os campos desejados

Formar totais e subtotais : Em uma lista, possvel calcular totais e subtotais de uma ou mais colunas selecionadas.

Exibio de informaes detalhadas : Pode-se acessar informaes detalhada de linhas individuais da lista

Impresso de Lista e pr-visualizao : Pode-se imprimir as listas e chamar uma pr-exibio antes de imprimir

Exportao de dados : Pode-se copiar as listas, por exemplo, para uma planilha ou grava-las como arquivo local

Workshop para desenvolvedores ABAP/4

132

12 Introduo ALV O ALV Grid formado basicamente por : Uma barra de ferramenta Um ttulo Uma lista de sada

Conceito de Variante de Exibio A variante de exibio utilizada para exibir o relatrio em vrios formatos diferente. Cada usurio pode criar a sua prpria variante e utiliza-la para visualizar o relatrio. Por exemplo : Um relatrio que tenha 20 campos exibidos na tela. Voc pode eliminar os campos que no ir utilizar, acrescentar totalizadores, ordenao, mudar os campos de posio, etc.

Workshop para desenvolvedores ABAP/4

133

12 Introduo ALV

Tela Normal do relatrio

Eliminando Totalizadores.

Campos,

Ordenando

pela

Data

Documento

Criando

Workshop para desenvolvedores ABAP/4

134

12 Introduo ALV Tela de Seleo Relatrio

EVENTO INITIALIZATION Neste evento voc verificar se existe uma variante definida como default para o relatrio atravs da funo REUSE_ALV_VARIANT_DEFAULT_GET
Varivel : def_variante LIKE disvariant.

Parmetro da tela de seleo : PARAMETERS : p_vari LIKE disvariant-variant. Funo : CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET' EXPORTING i_save = A CHANGING cs_variant = def_variante EXCEPTIONS not_found = 2. IF sy-subrc = 0. p_vari = def_variante-variant. ENDIF.

Workshop para desenvolvedores ABAP/4

135

12 Introduo ALV EVENTO AT SELECTION-SCREEN ON VALUE-REQUEST ..... Neste evento voc dever criar uma rotina para exibir as variantes j existentes para o relatrio em questo.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM f_f4_variant.

Variveis : variant_exit(01) TYPE c, variante LIKE disvariant, Funo : CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = variante i_save = A IMPORTING e_exit = variant_exit es_variant = def_variante EXCEPTIONS not_found = 2. IF sy-subrc = 2. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ELSE. IF variant_exit = space. p_vari = def_variante-variant. ENDIF. ENDIF.

Workshop para desenvolvedores ABAP/4

136

12 Introduo ALV EVENTO AT SELECTION-SCREEN Neste evento voc ir tratar a variante informada, ou seja, verificar a sua existncia, pois o usurio pode ter digitado um nome qualquer ao invs de utilizar o F4.
AT SELECTION-SCREEN. PERFORM f_variante.

Verificar se existe valor no parmetro da tela IF NOT p_vari IS INITIAL. Mover valor em branco para a estrutura def_variante e o nome da variante para o campo def_variante-variant MOVE variante TO def_variante. MOVE p_vari TO def_variante-variant. Executar a funo CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE' EXPORTING i_save = A CHANGING cs_variant = def_variante. Mover estrutura def_variante para variante variante = def_variante. ELSE. Se no existir valor no parmetro inicializar a estrutura Variante CLEAR variante. variante-report = v_repid. ENDIF.

Workshop para desenvolvedores ABAP/4

137

12 Introduo ALV FORMATAO DO RELATRIO EM ALV Neste tpico iremos mostrar as rotinas necessrias para formatao de um relatrio em ALV. Formatao geral, de campos, botes e etc. 1.
1.1.

Definies de dados para o layout ALV


Definicao de Tipos

*Grupos de tipo TYPE-POOLS: slis. TYPE-POOLS: kkblo.


1.2. Workareas

DATA: w_layout w_print w_event w_line DATA: colinfo


1.3. Tabela Interna

TYPE slis_layout_alv, TYPE slis_print_alv TYPE slis_alv_event, TYPE slis_listheader. TYPE kkblo_specialcol.

DATA: l_sort l_event l_top_of_page t_campos


1.4.

TYPE slis_t_sortinfo_alv, TYPE slis_t_event, TYPE slis_t_listheader, TYPE slis_t_fieldcat_alv WITH HEADER LINE.

Tabela Interna para Impresso do Relatrio

DATA : BEGIN OF t_relat OCCURS 0, Campo1 Campo2 Campo3 ................. ................. box(1) TYPE c, colinfo TYPE kkblo_t_specialcol, END OF t_relat.

" Campo Selecao Linha Formatao de Colunas

Workshop para desenvolvedores ABAP/4

138

12 Introduo ALV 2.
2.1.

Rotinas para Formatao do Layout


PERFORM f_evento_lista. " Eventos da Lista

O evento mais comum a ser definido o TOP_OF_PAGE para impresso do cabealho na lista Executar a funo para selecionar todos os eventos possveis de serem tratados CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING I_LIST_TYPE = 0 IMPORTING ET_EVENTS = t_event. * Ler a tabela para o evento TOP_OF_PAGE READ TABLE t_event WITH KEY NAME = SLIS_EV_TOP_OF_PAGE INTO w_event. Se o evento foi encontrado ento cadastrar o nome do form do seu programa (que trata o cabealho) no campo FORM IF SY-SUBRC = 0. MOVE 'F_CABECALHO' TO w_event-form. APPEND w_event TO t_event. ENDIF. Criar o FORM F_CABECALHO Criar o FORM f_cabealho e inserir o cdigo abaixo. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = l_top_of_page.
Outros eventos que retornaro da funo e podem ser tratados : CALLER_EXIT USER_COMMAND TOP_OF_PAGE TOP_OF_COVERPAGE END_OF_COVERPAGE FOREIGN_TOP_OF_PAGE FOREIGN_END_OF_PAGE PF_STATUS_SET LIST_MODIFY TOP_OF_LIST END_OF_PAGE END_OF_LIST AFTER_LINE_OUTPUT BEFORE_LINE_OUTPUT REPREP_SEL_MODIFY SUBTOTAL_TEXT Estes eventos esto gravados dentro do Tipo SLIS

Workshop para desenvolvedores ABAP/4

139

12 Introduo ALV
2.2. PERFORM f_cabec_lista. " Cabecalho da Lista

Neste FORM iremos criar os textos que devero sair no cabealho do relatrio. * Texto Principal - Header CLEAR w_line. w_line-typ = 'H'. w_line-info = text-h01. APPEND w_line TO t_top_of_page. No campo TYP dever ser informado: H Header S Selection A Action Estes tipos iro colocar os textos em formatos diferentes (letra, negrito ou itlico). Estas informaes sero gravadas na tabela interna T_TOP_OF_PAGE

Workshop para desenvolvedores ABAP/4

140

12 Introduo ALV
2.3. PERFORM f_layout. " Layout Geral da Lista

Neste FORM iremos formatar o relatrio nos parmetros gerais, ou seja, a aparncia do relatrio. Veja abaixo os campos que podem ser formatados :
Campo Parmetros Gerais no_colhead no_hotspot no_vline Zebra cell_merge Edit edit_mode numc_sum no_input f2code Reprep no_keyfix expand_all no_author PF-status def_status item_text Opes de Display colwidth_optimize no_min_linesize min_linesize max_linesize Window_titlebar no_uline_hs Excees lights_fieldname lights_tabname lights_rollname lights_condense Somatrios no_sumchoice no_totalline no_subchoice no_subtotals no_unit_splitting totals_before_items totals_only totals_text subtotals_text Interaes box_fieldname Descrio Sem Ttulos (Cabealho) Ttulos sem Hotspot Colunas separadas por espaos Listrado (Uma linha clara outra escura) No suprimir a replicao de campo Edio somente para o grid todo Edio somente para o grid todo Total para campos numricos Somente exibio de campos

No fixar coluna chave Expandir todas as posies Nenhuma verificao padro da autoridade Status Default

Tamanho da linha = tamanho da lista Default 80 Default 250

Nome do campo para exceo Nome da tabela para exceo

Sem escolha para Somar para cima Sem Total Linha Sem Sub-Total Mostrar total antes dos itens Mostrar somente os totais Texto para a 1a. coluna na linha de total Texto para a 1a. coluna na linha de Sub-total Nome do Campo para Checkbox

Workshop para desenvolvedores ABAP/4

141

box_tabname box_rollname expand_fieldname hotspot_fieldname confirmation_prompt key_hotspot flexible_key group_buttons get_selinfos group_change_edit no_scrolling

Nome do Campo para Hotspot Confirmar Sada da lista keys as hotspot " K_KEYHOT Mover as colunas chaves Grupo de Botes Ler tela de seleo Settings by user for new group Sem movimentar tela

Detalhes Tela
Mostrar detalhes em nova janela Mostrar somente as linhas iniciais Ttulo para tela de detalhes Texto para o boto

detail_popup detail_initial_lines detail_titlebar Mostar Variantes header_text default_item Cores info_fieldname Coltab_fieldname Outros list_append xifunckey xidirect dtc_layout

Nome do campo que conter as cores das colunas Sem chamada de tela Extended interaction(SAPQuery) Extended INTeraction(SAPQuery) Configurao de layout para Tabstrip

Box_fieldn ame

Coluna Chave

Workshop para desenvolvedores ABAP/4

142

12 Introduo ALV Tela de Detalhe

Titulo Detalhe

Popup do detalhe

2.4.

PERFORM f_sort.

" Ordenao/SubTotal

Neste FORM voc deve informar os campos pelos quais a lista deve ser ordenada inicialmente, bem como se deve-se gerar sub-total ou total para esta quebra. Campo Centro t_sort-spos = '1'. t_sort-fieldname = 'WERKS'. t_sort-tabname = 'T_RELAT'. t_sort-up = 'X'. t_sort-subtot = 'X'. APPEND t_sort. CLEAR t_sort.

Workshop para desenvolvedores ABAP/4

143

12 Introduo ALV Segue abaixo os campos que podem ser formatados para cada campo de ordenao.
Campo Spos fieldname Tabname Up Down Group Subtot Comp Expa Obligatory 2.5. PERFORM f_info_campos. Descrio Seqncia de Ordenao Nome do campo Nome da tabela a qual pertence o campo Ordenao Menor para Maior Ordenao Maior para Menor Gerar Sub Total

Neste FORM voc ir definir o layout de cada coluna do relatrio. Veja abaixo os campos que podem ser formatados :
Campo row_pos col_pos fieldname tabname currency cfieldname ctabname ifieldname quantity qfieldname qtabname round exponent key icon symbol checkbox just lzero no_sign no_zero no_convext edit_mask emphasize fix_column do_sum no_out tech Descrio Sada na linha (1,2,3,...) Posio da coluna Nome do campo Nome da tabela interna Moeda Campo com Unidade de Moeda Tabela referncia para Unidade Moeda initial column Unidade de Medida Campo com Unidade Medida Tabela com Unidade Medida Arredondar Campo Expoente para floats Campo como Chave Campo como cone Campo como Smbolo Campo como Checkbox Alinhamento R (Direita) L (Esquerda) C (Centralizado) leading zero Sem sinal No imprimir campos zerados Mscara de Edio Campo em destaque Fixar Coluna Totalizar Coluna No exibir o campo

Workshop para desenvolvedores ABAP/4

144

outputlen Offset seltext_l seltext_m seltext_s Ddictxt rollname datatype inttype intlen lowercase ref_fieldname ref_tabname roundfieldname roundtabname decimalsfieldname decimalstabname decimals_out text_fieldname reptext_ddic ddic_outputlen key_sel no_sum sp_group Reprep Input Edit Hotspot 2.6. PERFORM f_print.

Tamanho do campo para sada dos dados Descrio Longa do Campo Descrio Mdia do Campo Descrio Curta do Campo Indicao de Qual descrio utilizar - (S)hort (M)iddle (L)ong Tipo do Campo Tipo do Campo Tamanho do Campo Letra Minscula Campo referncia Tabela referncia Nome campo para Arredondamento Nome tabela Nome campo para Decimais Nome tabela Nmero de decimais para escrever um nmero Texto para a coluna Tamanho do Campo field not obligatory No totalizar o campo Grupo Campo como input de dados Uso interno Campo como hotspot

Neste FORM voc ir definir dados de impresso.


Campo prnt_info print prnt_title no_coverpage no_new_page reserve_lines no_print_listinfos no_change_print_params Descrio Informaes de Impresso

Linhas reservadas para o final da pgina No imprimir pgina com nmero de registros selecionados No alterar tamanho de linha

Workshop para desenvolvedores ABAP/4

145

12 Introduo ALV 3. Exibir Relatrio

Neste FORM voc ir exibir o relatrio. v_repid = sy-repid. CALL FUNCTION 'K_KKB_SAVE_MODE_GET' IMPORTING e_save = v_save. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING
I_CALLBACK_PROGRAM = v_repid I_CALLBACK_PF_STATUS_SET = 'F_SET_STATUS' I_CALLBACK_USER_COMMAND = 'F_USER_COMMAND' IS_LAYOUT = w_layout IS_LAYOUT = w_print IT_FIELDCAT = t_campos[] IT_SORT = t_sort[] I_DEFAULT I_SAVE IS_VARIANT IT_EVENTS TABLES t_outtab EXCEPTIONS PROGRAM_ERROR OTHERS = t_relat =1 = 2. = 'X' = v_save = variante = t_event[]

IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. STOP. ENDIF.

Workshop para desenvolvedores ABAP/4

146

12 Introduo ALV Como mudar cor de uma coluna Para mudar a cor de uma coluna, voc deve definir na sua tabela interna final (que ser utilizada na funo de exibio do relatrio) o campo COLINFO (ou o nome que voc desejar) que seja do tipo kkblo_t_specialcol. Este campo ser uma tabela interna onde voc definir para cada linha do relatrio a cor de cada coluna. Isso deve ser feito no momento em que voc estiver gerando a tabela final para a impresso. Definir o campo na tabela interna final DATA : BEGIN OF t_relat OCCURS 0, Campo1 Campo2 Campo3 ...... ...... COLINFO TYPE kkblo_t_specialcol END OF t_relat. Definir uma workarea auxiliar : DATA: colinfo TYPE kkblo_specialcol. CLEAR colinfo. Nome da coluna a ser colorida colinfo-fieldname = 'ATREXP'. De acordo com o valor do campo a cor ser diferente IF t_relat-atrexp < 0. colinfo-color-col = '3'. " Amarelo ELSEIF t_relat-atrexp = 0. colinfo-color-col = '5'. " Verde ELSE. colinfo-color-col = '6'. " Vermelho ENDIF. colinfo-color-int = '1'. " Intenso APPEND colinfo TO t_relat-colinfo. Os campos que devem ser formatados so : FIELDNAME = Nome do campo na tabela interna COLOR-COR = Nmero da cor COLOR-INT = Intensidade da cor

Workshop para desenvolvedores ABAP/4

147

1 : Intenso Branco : cor normal 12 Introduo ALV Como mudar a cor de uma linha Para mudar a cor da linha toda e no somente de uma coluna voc deve seguir o mesmo procedimento da coluna porm fazer para todas as colunas do relatrio. Por exemplo sua tabela tem 5 campos ento : Definir a tabela interna final DATA : BEGIN OF t_relat OCCURS 0, Campo1 Campo2 Campo3 Campo4 Campo5 COLINFO TYPE kkblo_t_specialcol END OF t_relat. Definir uma workarea auxiliar : DATA: colinfo TYPE kkblo_specialcol. CLEAR colinfo. Todas as colunas devero ter a mesma cor e intensidade colinfo-color-col = '3'. colinfo-color-int = '1'. " Amarelo " Intenso

1a. Coluna colinfo-fieldname = 'CAMPO1'. APPEND colinfo TO t_relat-colinfo. 2a. Coluna colinfo-fieldname = 'CAMPO2'. APPEND colinfo TO t_relat-colinfo. 3a. Coluna colinfo-fieldname = 'CAMPO3. APPEND colinfo TO t_relat-colinfo. 4a. Coluna colinfo-fieldname = 'CAMPO4. APPEND colinfo TO t_relat-colinfo. 5a. Coluna

Workshop para desenvolvedores ABAP/4

148

colinfo-fieldname = 'CAMPO5. APPEND colinfo TO t_relat-colinfo. 12 Introduo ALV Como utilizar outros botes na tela Para inserir novos botes na tela, voc deve copiar o Status Gui Standard STANDARD_FULLSCREEN para outro a ser utilizado no seu relatrio. Aps a cpia voc deve retirar botes que no sero utilizados e inserir os seus novos botes :

Botes Inseridos

O tratamento destes novos botes dever ser no FORM F_USER_COMMAND especificado na chamada da funo de exibio do relatrio : CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' form f_user_command USING p_ucomm LIKE sy-ucomm p_selfield TYPE slis_selfield. CASE p_ucomm.

Workshop para desenvolvedores ABAP/4

149

12 Introduo ALV * Modificar Documento WHEN 'ZVA02'. CHECK p_selfield-fieldname = 'VBELN'. SET PARAMETER ID 'AUN' FIELD p_selfield-value. CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN. * Exibir Documento WHEN 'ZVA03'. CHECK p_selfield-fieldname = 'VBELN'. SET PARAMETER ID 'AUN' FIELD p_selfield-value. CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN. * Exibir Remessa WHEN 'ZVL01'. CHECK p_selfield-fieldname = 'VBELN'. READ TABLE t_relat INDEX p_selfield-tabindex. IF sy-subrc EQ 0. SET PARAMETER ID 'AUF' FIELD t_relat-vbeln. SET PARAMETER ID 'VST' FIELD t_relat-vstel. SET PARAMETER ID 'LEDAT' FIELD t_relat-mbdat. CALL TRANSACTION 'VL01N' AND SKIP FIRST SCREEN. ENDIF. WHEN OTHERS. ENDCASE. endform. " f_user_command

Programas Standard - Modelo BALVST02_GRID Programa teste visor de listas ABAP: lista simples modelo vo BALVST03_GRID - Programa teste visor de listas ABAP: lista simples modelo vo BALVHT01 - Programa de teste ALV: lista seqencial hierrquica modelo de vo Na verso 4.6 todos os programas BCALV*

Workshop para desenvolvedores ABAP/4

150

13 USER-EXITS USER-EXIT TRANSAO CMOD 1. Ir para : Utilitarios > Ampliaes SAP

2. Executar (F8)

Workshop para desenvolvedores ABAP/4

151

13 USER-EXITS 3. Selecionar a User Exit e clicar em para exibir ou modificar

ATIVAR UMA USER EXIT 1. Procure o nome da funo chamada por esta customer function, 2. V, na SMOD, clique sobre o search help (ou F4) na ampliao

Workshop para desenvolvedores ABAP/4

152

13 USER-EXITS 3. Ao aparecer a proxima tela, clique no boto de Sistema de Informao

4. Na tela seguinte tem um boto que ativa todas as opes de pesquisa ( um que tem uma seta para baixo ) clique que ira aparecer todas as formas de pesquisa possiveis

Workshop para desenvolvedores ABAP/4

153

13 USER-EXITS 5. Em nome do componente, digite o nome da funo que voc pegou na primeira opo e mandar procurar; 6. Ira aparecer um nome de uma ampliao. Guarde esse nome.

7. V na transao CMOD e crie um projeto

Workshop para desenvolvedores ABAP/4

154

13 USER-EXIT 8. Tem um boto para associar ampliao ao projeto. Digite o nome da ampliao que voc pegou no item 6.

9. O Proximo passo criar o codigo desejado para o funcionamento da userexit. Neste caso, entra na sua funo ( ou via SE37 ou dentro da propria CMOD ) e faa o codigo ( clique sobre o include que aparece dentro da funo para criar um programa separado )

Workshop para desenvolvedores ABAP/4

155

Para ativar, na tela inicial da CMOD tem um boto especifico. 14 FIELD-EXITS FIELD-EXIT ->( Esta realciona a lgica do campo, ao passar o cursor ) TRANSAO CMOD Para localizar uma FIELD-EXIT

MENU : IR PARA -> AMPLIAES GLOBAIS -> ELEMENTO DE DADOS -> NOVO DOC.CLIENT.ED FIELD AMARRAR EM UM PROJETO

Workshop para desenvolvedores ABAP/4

156

14 FIELD-EXITS FIELD-EXIT Na tela CMOD digitar = PRFB e dar Enter

Marcar o elemento de dados e clicar em

Workshop para desenvolvedores ABAP/4

157

14 FIELD-EXITS CRIO DE FIELD-EXIT 1. Como primeiro passo, devemos executar a transao aonde iremos colocar o FIELD-EXIT, e coletar os dados. Nome do Campo Elemento de dados Nome do Programa Numero da Tela

2. Em seguida executar a transao CMOD: Dentro da transao digitar na caixa de dialogo PRFB e dar Enter.

Workshop para desenvolvedores ABAP/4

158

3. No menu Superior escolher : Exit Campo -> Criar

14 FIELD-EXITS 4. Informar o nome do elemento de dados

5. Criar a funo para a FIELD-EXIT

Workshop para desenvolvedores ABAP/4

159

6. Informar o Grupo de Funes e o texto breve

14 FIELD-EXITS 7. Digitar o Cdigo fonte da funo e Salvar

Workshop para desenvolvedores ABAP/4

160

8. Marcar o item criado e clicar em e preencher a tela que ser mostrada com o nome de programa e tela. Desta forma a FIELD-EXIT ser validada para este programa. Para ativar para todos os programas, no preencher a tela apenas salvar.

14 FIELD-EXITS INFORMAES A FIELD-EXIT, permite que seja feita alguma seleo ou checagem de um determinado campo no programa e tela desejados. Para isso, se faz necessrio, buscar o elemento de dados do campo que se deseja fazer a FIELD-EXIT. Ir ate a transao CMOD, clicar AMPLIAES TEXTO(menu), depois escolher Exits Campo, aparecero todas as FIELD-EXITS existentes. Para se criar uma nova. Exit Campo (menu) Criar Digitar o elemento de dados Avanar Digitar o cdigo como uma funo Depois clicar no boto atribuir prog/tela, colocando o nome do progroma e o numero da tela, para pegar essas informaes, clicar em F1 e F9 no campo desejado. Visualiza ou modifica o contedo da Field, no boto Processar MF, deve-se selecionar o elemento de dados desejado. Ativar a FIELD-EXIT.

Workshop para desenvolvedores ABAP/4

161

IMPORTANTE: Na Field-Exit, voc precisa pegar o valor desejado, para isso existe a importao e a exportao, ou seja, as variveis INPUT ou OUTPUT, voc precisa sempre colocar OUTPUT = INPUT, para que o valor possa voltar para tela de origem. OBSERVAO: A FIELD-EXIT apenas funcionara, se a mesma estiver ativa.

Workshop para desenvolvedores ABAP/4

162

Potrebbero piacerti anche