91
1 TREINAMENTO ABAP BÁSICO Curso Básico ABAP/4

ABAP Training

Embed Size (px)

DESCRIPTION

Abap Training

Citation preview

TREINAMENTO ABAP BSICO

TREINAMENTO ABAP BSICO13

Curso BsicoABAP/4

Joclio Pereira

Conceito breve do SAP

SAP um software de Gesto Empresarial criado por uma empresa alem que tem o mesmo nome SAP AG (SAP associao annima). O significado da sigla uma abreviao de Systeme, Anwendungen und Produkte in der Datenverarbeitung, no idioma alemo, que quer dizer, em portugus Sistemas, Aplicativos e Produtos para Processamento de Dados.O InicioO software SAP nasceu em 1972 com a segunda verso do "R/1" ou "real-time data processing", um software de gesto contbil criado pela empresa, a verso "SAP R/2" ou "Real time System Version 2", foi o primeiro produto de sucesso criado pela empresa, pois era constitudo por vrios mdulos e foi utilizado at 1995 por quase duas mil empresas no mundo.A EvoluoConforme o software ia melhorando a empresa lanava novas atualizaes e verses dos mdulos, a verso R/3 veio destinada a trabalhar no sistema cliente/servidor e por isso trouxe uma grande diferena da verso R/2 que era destinada a mainframe.A verso R/3 ou SAP R/3 oferece diversas funcionalidades que as grandes corporaes necessitam, atravs dos seus mdulos que contem diversas aplicaes voltadas s reas de negcio. Esses mdulos atendem as necessidades nas reas de produo, finanas, vendas e distribuio e recursos humanos.No Brasil, hoje, o SAP um sistema bem difundido, utilizado por empresas representativas como a CEMIG, EMBRAER, BUNGE, USIMINAS, PETROBRAS, COPASA, RGE entre diversas outras grandes empresas.O SAP R/3 constitudo por processos de negcio baseados em prticas consagradas no mundo dos negcios. O sistema oferece o processamento de informaes em verdadeiro tempo real ao longo da empresa onde estiver implementado. Em funo da forma que o software bem configurvel ele se torna compatvel com todos os seguimentos de negcios e a disponibilidade das informaes que ele promove faz dele o software mais bem aceito em todo mundo, se tornando o top entre todos os softwares ERP.O sistema SAP R/3 malevel de forma que aceita ser executado em vrias plataformas de Hardware. Essa maleabilidade tambm permite que as telas e relatrios sejam configurados conforme a necessidade da empresa.Vrios usurios podem alterar informaes simultaneamenteOs relatrios e outras transaes so atualizados on-lineSuporta a utilizao em vrios idiomas.Permite transaes em vrias moedas.Possui funcionalidades especificas para cada pais, tais como as legislaes vigentes sobre impostos e relatrios governamentais contbeis.

Arquitetura do SAP

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 (mster 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 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. 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.

Mdulos Mais Comuns

Contabilidade Financeira (FI)O mdulo de aplicao FI aplica-se a contabilidade principal automtica e aos relatrios, a contabilidade de clientes e fornecedores e administrao de outras contas de legder com planos de contas definidos pelo usurio.

Contabilidade de custos (CO)O mdulo de aplicaes CO abrange os movimentos dos custos e das receitas da empresa.

Planejamento de Produo (PP)Aplica-se ao planejamento e ao controle das atividades de produo da empresa.

Administrao de Materiais (MM)Apia as funes de suprimentos e de manuteno de estoques necessrias para os processos empresariais dirios.

Vendas e Distribuio (SD)Apia a otimizao de todas as tarefas e atividades que ocorrem na venda, no fornecimento e no faturamento.

Recursos Humanos (HR)O mdulo HR planeja, registra e avalia todos os dados relativos aos empregados.

Outros: AA, PM, PS, WF, IS, QM.

Acessar o SAP

Para acessar o SAP digite o client (mandante), usurio e senha.(O acesso ser no idioma padro da instalao, para mudar preciso identific-lo no campo Idioma)

Atalhos e 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.

Praticar!!!

1. Acessar transaes a. SD (VA03, VL03N, VF11)b. FI (F-02, FB03, FBL3N)c. MM (MM01, ME51, ME21N).

DEFINIOABAP (Advanced Business Application Programming) uma linguagem de programao de alto nvel desenvolvida pela empresa de software SAP. a principal linguagem utilizada no produto mais conhecido desta empresa, o SAP R/3, um software ERP.

O ABAP tem uma sintaxe semelhante ao COBOL. Em 1999, com a verso R/3 4.5, a SAP lanou uma verso de ABAP que suporta programao por objetos. A verso mais recente da plataforma de desenvolvimento da SAP, o NetWeaver, suporta programao em ABAP e em Java.

No desenvolvimento de customizaes ABAP/4, as principais transaes utilizadas, so:

SE38 abre o editor ABAP/4SE16 permite a visualizao do contedo de tabelas do SAPSE11 permite a visualizao da arquitetura de uma tabela/estrutura do SAPSE43 criao de menusSE93 criao de transaes customizadasSE71 criao e manuteno de formulrios SAPscriptsSMARTFORMS criao de formulrios avanadosCMOD criao de projetos Exits (Field Exits, User Exits, ...)

O editor de programao ABAP/4 do SAP pode ser encontrado atravs do caminho:

Menu SAP Ferramentas ABAP Workbench Desenvolvimento ->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.

A aparncia do editor no difere muito de um editor de texto bem simples, onde se possvel escrever linhas de comando e lgica.

Conveno de Nomes para Editor ABAP.

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.

Comumente usa-se o padro: Z + Mdulo + Tipo de programa + Sequencial.EX: ZSDR001

Comumente usa-se Y para indicar que um programa de teste ou treinamento.

A aparncia do editor no difere muito de um editor de texto bem simples, onde se possvel escrever linhas de comando e lgica.

Um dos recursos permitidos para que se utilize outro editor como o Note Pad do Windows, o recurso de Download e Upload. Atravs do menu Utilitrios Outros Utilitrios Upload/Download, o sistema permite que cdigos escritos em outros editores possam ser carregados no editor ABAP/4 e vice-versa.

Esse recurso nos permite salvar os cdigos ainda inativos ou incompletos. extremamente til para mantermos um controle prprio das verses quando se est codificando.

ABAP Hello WorldO "Hello World" um clssico. Na grande maioria dos livros de programao o primeiro exemplo de cdigo um "Hello World". Ento vamos ver um simples "Hello World" em ABAP.Abra o Editor ABAP (SE38), informe o nome do programa (o nosso ZOLAMUNDO), clique em "Criar".

SE38 ABAP Editor Na janela de atributos, d um ttulo qualquer para o seu programa e defina o tipo como "Programa executvel".

SE38 Atributos do programa

Clique em "Salvar". Na prxima janela clique em "Objeto Local".

Digite o cdigo abaixo:REPORT ZOLAMUNDO.* Parmetro para nome, tipo caracter, tamanho 30PARAMETERS p_nome(30) TYPE c.* Se o nome no foi preenchido, imprime 'Ol mundo!'* Caso contrrio, imprime um ol personalizadoIF p_nome IS INITIAL. WRITE: / 'Ol mundo!'.ELSE. WRITE: / 'Ol', p_nome.ENDIF.Agora s salvar e executar, clicando neste cone ou simplesmente pressionando F8. Na tela de seleo, voc pode digitar seu nome e executar (F8) ou s executar para ver um Ol mundo!.

Parameters

Definio de parmetros do relatrio.

S faz sentido em programas de relatrio, isto , os programas definidos como o tipo "1" nos atributos. Voc executar programas de relatrio com a indicao SUBMIT.

Exemplo:

Report ztesteparametrosParameters: p_nome(20) type c.

Write: p_nome.

Nota: Tipos de dados:

Data Dictionary

1. Objetivos Apresentar conceitos de Bancos de Dados Relacionais SAP vs Modelo Relacional Conhecer as ferramentas bsicas do Dicionrio de Dados do R/3 Criar objetos atravs do Dicionrio de Dados

2. Conceitos de Bancos de Dados RelacionaisModelo Entidade-RelacionamentoModelo 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: Conta-Corrente 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 comuma 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 esto relacionadas com vrias ocorrncias da Entidade B.

Modelo RelacionalUm banco de Dados Relacional a implementao fsica do ModeloEntidade-Relacionamento e traduz concretamente o que o modelo conceitual procura representar. Consiste em uma coleo de tabelas cada uma das quais, associada a 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).

Como definir todos esses elementos num BD?Utilizando linguagens especiais para cada Sistema Gerenciador de BD.

SQL:Structured Query Language Linguagem desenvolvida nos anos 70 para definio e manipulao de dados em sistemas de bancos de dados relacionais. Conjunto reduzido de comandos, sem recursos de lgica, nica e exclusivamente para criar objetos no banco de dados e permitir que os dados possam ser mantidos, de acordo com as necessidades funcionais.Nos gerenciadores de BD, ferramentas especficas de cada fabricante oferecem recursos adicionais para a contruo de lgica. Outras linguagens foram adaptadas para trabalharem em conjunto com o SQL, como COBOL, C e ABAP/4. O SQL utilizado no R/3 proprietrio e segue um mnimo da regulamentao internacional para esta, estando longe de possuir os mesmos mecanismos de funcionamento. Seus comandos podem ser divididos em:

DDL: Data Definition Language Comandos especficos paradefinio de objetos do banco de dados. Exemplo: Create Table, Create View, Create TableSpace, Drop Table, etc.

DML: Data Manipulation Language Comandos especficos paratratamento dos dados armazenados nos objetos do banco. Exemplo: Select, Insert, Delete, Update, etc.

3. R/3 Data DictionaryO dicionrio de dados do ABAP/4 (DD) uma fonte central de informaes provenientes do sistema gerenciador de dados do SAP. Sua principal funo suportar a criao e o gerenciamento das definies de dados, tambm conhecidas como metadados.Neste curso, o DD ser utilizado em exerccios prticos com o seguinte objetivo: Visualizar objetos do SAP (Tabelas, estruturas, elementos de dados, domnios, etc) Observar a estrutura e atributos dos dados armazenados nas bases de dados do SAP. Fazer consultas (query) de dados. Descobrir os relacionamentos entre diferentes objetos (tabelas e estruturas de dados). Criar objetos (Tabelas, estruturas e elementos de dados) a partir do dicionrio.

Funes desempenhadas pelo Data Dictionary: Gerenciamento das Definies de Dados Criao e manuteno das definies de dados num repositrio central Proviso de informaes para avaliaes Permite obter informaes sobre o modo como os objetos esto relacionados Suporte ao desenvolvimento Diferentemente de outros dicionrios de dados, est integrado ao ambiente de desenvolvimento de modo que alteraes ou criao de novos objetos promovem automaticamente a gerao dos outros objetos dependentes, sejam eles parte do dicionrio ou programas aplicativos. Suporte documentao Permite obter documentao atualizada Garantia de que as definies de dados sejam flexveis e atualizadas Gerao de objetos de runtime garantindo performance.

Transao SE11

Tabelas: Definir a estrutura das tabelas transparentes onde os dados sero armazenados fisicamente.

Estruturas: Definir estruturas que viro a ser utilizadas em programas para definir a estrutura de uma tabela interna, ou como include em uma estrutura de uma tabela transparente.

Vises: Definir relacionamentos entre tabelas transparentes para facilitar o acesso ao banco de dados, geralmente so criadas para substituir select joins que durante a execuo do programa degradam a performance do mesmo.

Elementos de dados: Associar os atributos tcnicos e significado para um campo em uma tabela.

Domnio: Definir atributos tcnicos que sero atribudos a um elemento de dados

Objetos de bloqueio: Definir os bloqueio de acesso aos dados no banco de dados

Ajuda p/ pesquisa: Definio dos objetos de matchcode que sero utilizados nas telas do SAP

Grupos de tipos: Os tipos de dados que definem a estrutura de uma tabela, o tipo do campo em um domnio podem ser armazenados em um pool de tipos, para posteriormente acion-los em uma funo ou programa.

Tipo de Dados e Domnios

O ideal que construamos domnios e a partir dos domnios construamos elementos de dados e a partir dos elementos de dados construamos os tipos complexos, embora possamos construir os Data Elements , as Structures e Table Types a partir dos tipos elementares.Os domnios armazenam informaes tcnicas sobre a informao, como por exemplo, tipo elementar e tamanho.Os Elemento de Dados podem ser criados a partir dos domnios ou a partir dos tipos elementares, mas o indicado que sejam criados a partir de domnios. Essa indicao apenas uma normalizao (uma boa prtica), ou seja, no implicar no desempenho do sistema. Uma das funes dos elementos de dados justamente armazenar a semntica da informao, por isso deixou-se as informaes tcnicas no Domnio. Por exemplo, se um aplicativo necessita da informao da cidade origem e cidade destino, podemos criar um Domnio Cidade, que receber texto de tamanho 30 e 2 Elemento de Dados, sendo um CidadeOrigem e outro CidadeDestino que tero a sua tipagem configurada pelo Domnio Cidade. Note que demos aos Elemento de Dados CidadeOrigem e CidadeDestino significados distintos apesar de armazenarem informaes iguais (nome de cidades).OBS: Domnios no podem ser utilizados em programas para declarao de variveis, ou utilizado na definio de estruturas e tabelas. Podem apenas serem utilizados na definio dos Elemento de Dados.Criando um Domnio

Para criar um domnio siga os passos:1. Abra o ABAP Dictionary (transao SE11);1. Selecione a opo Domnio;1. Digite o nome do novo domnio;1. Pressione o boto Criar;1. A transao "Dictionary: Manuteno de Domnio" abrir-se-;1. Digite uma descrio (obrigatrio);1. Selecione o Tipo de dados (trata-se o tipo elementar);1. Informe o tamanho (campo No . Caracteres);1. Se aplicvel informe as casas decimais. O nmero colocado neste campo indicar que do tamanho total (item 8) ser disponibilizado n casas para representao decimal;1. Selecione a opo Sinal caso um numeral possa ser negativo ou ento a opo Letras Maisculas caso um texto possa ser minsculo;1. Por fim, ative o domnio ().Criando um Elemento de Dados1. Para criar um Elemento de Dados siga os passos:1. Abra o ABAP Dictionary (transao SE11);1. Selecione a opo Tipo de Dados;1. Digite o nome do novo Elemento de Dados1. Pressione o boto Criar;1. Selecione a opo "Elemento de Dados";1. A transao "Dictionary: Manter Elemento de Dados" abrir-se-;1. Digite uma descrio (obrigatrio);1. Selecione o Domnio (mas poderia ser tambm o tipo elementar);1. Na guia Titulo informe um texto que ser utilizado como rtulo pelo SAP quando este Elemento de Dados for chamado;1. Por fim, ative ()o Elemento de Dados.

Note, na figura a seguir, que existe uma guia chamada Denominador de campo. Nesta guia podemos colocar rtulos que podero ser utilizados em telas ou telas de seleo para explicar o contedo do campo.

Estrutura TabelaExplorando Funcionalidades (botes)

Modificar / Exibir a estrutura do objeto Verificar objeto Ativar objeto Lista de utilizaes de objeto (Elemento de Dados, Domnio) Visualizar estrutura de outro objeto Chaves estrangeiras Expande todas as estruturas includas na tabela Expande uma estrutura includa na tabela Comprime uma estrutura expandida da tabela Comprime todas as estrutura expandidas da tabela DER Grfico Permite anexar campos estrutura da tabela Configurao do tipo de dado armazenado, tamanho, buffer Criao de ndices na tabela

Opes tcnicas

Criao de ndices

Vises

Elemento de dados

Domnio4. EXEMPLOS4.1 Visualizao da Estrutura de uma Tabelaa)Visualizao da Estrutura de uma Tabela Acessar o Dicionrio de Dados (FERRAMENTASS ABAP Workbench Development ->ABAP Dictionary) Entrar com o nome da tabela de Segmento do documento contabilidade financeira (BSEG) Clique na coluna Campo Clique no boto Procurar ou CTRL + F e procurar o campo WRBTRb)1. Acessar o Dicionrio de Dados:Ferramentas ABAP/4 Workbench ABAP/4 Dictionary (SE11)2. Informar o nome da Tabela BSEG 3. Clique duplo na coluna Elemento de Dados BUKRS4. 5. Clicar no matchcode da coluna Ctg6. 7. o campo PSWSL8. 9. Clique no boto 10. 11. Clique duplo em sua Checar Tabela (TCURC)12. 13. Clicar no boto 14. Informe BKPF 15. Opo IR PARA ndices16. Clique duplo #117. 18. 19. Opo Utilitrios Administrao de Verso20. 4.2 Visualizao do Contedo das Tabelasa) Acessar UTILITRIOS -> Contedo de Tabela -> Mostrar (Transao SE16) Escolher uma tabela -> Clicar em executar (F8) Acessar Configuraes -> Formato de Lista -> Selecionar Colunas Desmarcar todos os campos (terceiro boto) Marcar os campos: BUKRS , BELNR , WRBTR , HKONT, LIFNR Clicar Aceitar Acessar Configuraes -> Parmetros de usurio-> Mostrar Escolher um campo para usar como filtro Clique em Aceitarb)1. Procurar o campo WAERS2. Digitar Tabela (TCURC) na SE163. Opo Contedo de tabela (SE16)4. 5. Clique duplo na coluna WAERS com valor ADP6. Clique no campo WAERS e 7. Veja o help e depois 8. / < Cancelar > / < Cancelar > (Contedo de tabela)9. Voltar tela de estrutura de tabela ( 3x)10. Opo Contedo de Tabela11. 12. Opo Opes Formato de Lista Seleo Coluna13. Desmarcar todos os campos (terceiro boto)14. Selecionar os campos BUKRS, BELNR, GJAHR e XBLNR15. 16. Selecionar XBLNR = 000022-117. 18. 19. Opo Opes Critrios de Seleo20. Selecionar tambm WWERT e TCODE 21. Encerrar o DD e retornar ao menu principal do R/3

4.3 Criao de uma tabela customizada

a) Tabela de Contas do Razo1- FERRAMENTAS ABAP/4 WORKBENCH ABAP/4 DICTIONARY2- Nome do Objeto: ZFLABII# (# = nmero do grupo)3- 4- DESCRIO BREVE: Lab DD Grupo # - Tabela de Contas do Razo5- CLASSE DE ENTREGA: A6- Atualizao viso tabs. :7- NOME DO CAMPO: MANDT: (Obs: o campo MANDT sempre participa da chave primria e obrigatrio para tabelas Client Dependent)8- Campo: HKONT key: (copiar data-element de BSEG-HONT)9- Repetir o processo para os seguintes campos:10- Incluir um campo com as seguintes caractersticas:- Field Name: OBS- Data elem : TOBS_ACC (Double Click para criar)- Short Text: Texto de Observao do Movimento- Domnios Name: TEXT50- Data Type : CHAR- Field length: 20- Texts: 10 : Obs15: Observao20: Observao sobre o movimento11- Salvar o Data Element12- Ativar o Data Element13- 14- Salvar a Tabela15- Verificar a Tabela16- Ativar a Tabela

2.4. Criao de um Dilogo de manuteno para tabela customizadaAps criar uma tabela customizada, s vezes preciso que seja criado um Maintenance Dialog Box, para que seja possvel incluir, alterar ou excluir dados de uma nova tabela atravs da transao SM30.

Criar um Function Group: Transao SE80 Duplo clique na opo Function Group, utilizar o nome ZFG# e pressionar CRIAR Apresentar um nome condizente ao grupo de funes e pressionar SAVE Ativar a Function Group Informar a Development Class utilizada at o momento e pressionar SAVE Utilizar o mesmo transporte criado para a criao da tabela no item anterior Gerar Maintenance Dialog Box Tools ABAP Workbench Development Other Tools General Table Maint. Dialog (ou executar diretamente a transao SE54) Escrever o nome da tabela ZTST# Selecionar a opo Generated Objects e pressionar CREATE/CHANGE Pressionar YES no dialog de confirmao Informar o Authorization Group &NC&, que no exige autorizao Informar o Function Group ZFG# criado no item anterior Selecionar a opo One Step para maintenance type e Pressionar CREATE Informar a Development Class utilizada at o momento e pressionar SAVE

Alterar a tabela criada Executar a transao SM30 Informar o nome da tabela ZTST# e pressionar MAINTAIN Pressionar NEW ENTRIES , incluir dados e salvar Informar o mesmo nmero de transporte criado para o Function Group Selecionar uma das linhas da tabela e pressionar o boto DELETE Confirmar a excluso

2.5. Criao de uma Transao para o Dilogo de manuteno Executar a transao SE93 Pesquisar no matchcode o nome da transao desejado (de acordo com os padres de nomenclatura) e verificar qual o prximo nmero vlido de transao Informar o nome da nova transao Escolher a opo " Transao com parmetros Informar texto de descrio da transao (Texto da transao) No quadro Valor proposto para, informar cdigo da transao SM30 Escolher a opo omitir 1 tela Na primeria linha do quadro "Valores Propostos" : "Nome do campo da Tela" atribuir "VIEWNAME" "Valor" atribuir < Nome da Tabela > Na segunda linha do quadro "Default Values" : "Nome do campo da Tela" atribuir "SHOW" "Valor" atribuir X Informar classe de desenvolvimento Indicar o request equivalente da atividade Sair da transao < Voltar >

Testando a Transao: Sair da transao SE93 Digitar o cdigo da transao criada

EXERCCIOSDATA DICTIONARY

EXERCCIO 1Criar uma ESTRUTURA com as seguintes caractersticas:(Transao SE11 -> clicar em Data Type _> Create -> Selecionar EstruturaName: ZSCRIPT# (# = nmero do grupo)Short Text: Estrutura de preenchimento do layout set M_TSTSCRIPT

EXERCCIO 2Tabela BSEG1 - Dado uma GL account HKONT = 50014001. Encontrar todos os documentos associados, selecionar apenas os campos BUKRS, BELNR, GJAHR, DMBTR, WRBTR, HKONT, DMBE2 e imprim-los.

2 - Dado o documento de nmero 1200000005. Verificar quais contas incluem este documento (imprimir).

3 - Encontrar a GL account que inclui o documento do ex 2 e possui o campo de line item (BUZEI) igual a 2.

Tabela BKPF4 - Encontrar documentos que possuam:Empresa = RP01Data Documento = 28.12.2000Data Remessa = 28.12.2000

EXERCCIO 3Criar uma Tabela com as seguintes caractersticas:Name: ZTBL# (# = nmero do grupo)Short Text: Tabela para manuteno via transao SM30

Criar um dilogo de manunteno com as seguintes caractersticas:Function Group: ZGF#Utilizar a transao SM30 para manuteno desta tabela.

Criando um objeto MATCHCODE

Os matchcodes permitem acessar registros de dados que contm informaes incompletas. O usurio pode entrar as informaes em uma janela de matchcode, e o sistema procura no banco de dados os registros que contm os dados especificados. Se o banco de dados contiver mais de um registro correspondente aos critrios de pesquisa, todos esses registros so exibidos em uma lista, em que possvel selecionar o registro necessrio.

Criando uma Ajuda de Pesquisa.

Este ajuda ser impressa quando o usurio for preencher um componente do tipo PARAMETER ou qualquer componente que tenha que se fazer insero de dados.

Para criar uma Ajuda de Pesquisa entre na transao SE11.Ser criado uma Ajuda de Pesquisa com base na tabela J_1BNFDOC, o usurio ter que fazer a insero de dados em uma PARAMETER informando o DOCNUM (Numero do documento) da nota fiscal, mais antes de entrar com o numero ser mostrado um objeto MATCHCODE contendo os seguintes dados referentes a cada nota fiscal:

DOCNUM: numero do documento fiscal CRENAT: nome do usurio criado da nota SERIES: serie da nota

Na transao SE11, entre com o nome da ajuda de pesquisaZHELPM e clique em criar, conforme a figura 1.

Figura 1

Na tela de escolha, escolha a opo AJUDA P/ PESQUISA ELEMENTAR, conforme a figura 2.

Preencha a tela seguinte conforme a figura 3.

Descrio Breve: Descrio da Ajuda de pesquisa Mtodo de Seleo: Nome da Tabela que ser feito a referencia (para este exemplo a J_1BNFDOC). Tipo de Dialogo: Deixe a opo que vem por default. Parmetro de ajuda / Pesquisa: Nome dos campos da tabela que sero apresentados na tela. IMP e EXP: Habilitar os valores para importao de dados e exportao de dados, para que os dados sejam transferidos. Elementos de dados: Referentes aos Nomes de campos da tabela.

Aps o preenchimento SALVAR, CHECAR e ATIVAR:

Para utilizar a Ajuda de Pesquisa usaremos o seguinte trecho de cdigo:REPORT Y_MATHCODE.TABLES J_1BNFDOC.DATA: DOC(10) TYPE C.SELECTION-SCREEN BEGIN OF BLOCK bloco WITH FRAME .PARAMETERS: P_DOC LIKE DOC MATCHCODE OBJECT ZHELPM.SELECTION-SCREEN END OF BLOCK bloco.

Este trecho de cdigo gera a seguinte tela:

Quando for acionado o matchcode ser mostrado a seguinte tela:

Nesta tela contm os dados que foram inseridos na Ajuda de Pesquisa.Para gerar esta associao de Ajuda de Pesquisa utilizado o comando:MATCHCODE OBJECT nome_ajuda_de_pesquisaEX.:PARAMETERS: P_DOC LIKE DOC MATCHCODE OBJECT ZHELPM.Objeto de Bloqueio

No SAP, as transaes standard utilizam um conceito de bloqueio de tabela, possibilitando um controle de acesso a informaes por vrios usurios ao mesmo tempo. Para programas Z, devem ser implementados Objeto de Bloqueio de forma a impedir que uma tabela seja atualizada ao mesmo tempo por dois usurios diferentes com dados diferentes.O que so Objetos de Bloqueio?Um objeto de bloqueio uma unio virtual de vrias tabelas SAP que sincroniza o acesso simultneo de dois usurios ao mesmo conjunto de dados ( Conceito de bloqueio SAP).A solicitao e/ou a liberao dos bloqueios se realiza na programao das transaes de dilogo atravs da chamada de determinados mdulos de funo que so gerados automaticamente a partir da definio dos objetos de bloqueio. Estes objetos devem ser criados explicitamente no ABAP Dictionary.Para fixar bloqueios, devem ser executados os passos seguintes:1. Deve-se definir um objeto de bloqueio no ABAP Dictionary. O nome do objeto de bloqueio deveria comear com E.

2. Automaticamente so criadas funes que podero ser implementadas em programas que utilizam aquelas tabelas as quais foram criados Objetos de bloqueio.

3. Deve-se incluir os mdulos de funo para a solicitao e/ou liberao de bloqueios na programao das transaes de dilogo correspondentes. Os mdulos so criados automaticamente ao ativar o objeto de bloqueio.

Definio de um bloqueio SAPA descrio de um bloqueio SAP em uma tabela, efetuada por meio da Condio de bloqueio e do Modo de bloqueio.A condio de bloqueio uma condio lgica em relao s linhas da tabela a bloquear. Ela descreve a rea da tabela que deve ser protegida pelo bloqueio contra acesso simultneo. De modo a facilitar a administrao de bloqueios, no possvel formular a condio de bloqueio com a mesma liberdade que as Clusulas WHERE: A condio s pode conter campos de chave primria completamente qualificados, ligados por AND.Por meio do modo de bloqueio, indicar quais as operaes na tabela que devem ser protegidas pelo bloqueio. Os modos de bloqueio disponveis so: Bloqueio de leitura (bloqueio compartilhado)Protege o acesso de leitura a um objeto. O bloqueio de leitura permite a outras transaes o acesso de leitura mas no um acesso de escrita rea bloqueada da tabela. Bloqueio de escrita (bloqueio exclusivo)Protege o acesso de escrita a um objeto. O bloqueio de escrita no permite a outras transaoes nem o acesso de leitura nem o acesso de escrita rea bloqueada da tabela. Bloqueio de escrita ampliado (bloqueio exclusivo sem acumulao)Funciona como um bloqueio de escrita, s que o bloqueio de escrita ampliado tambm protege contra outros acessos da mesma transao.De modo a ser possvel definir os bloqueios SAP para uma tabela, necessrio primeiramente, mediante Desenvolvimento-> ABAP Dictionary, criar um Objeto de bloqueio para esta tabela.Se os dados de um objeto de aplicao estiverem distribudos por vrias tabelas de banco de dados, surge com freqncia a necessidade de poder bloquear estas tabelas em simultneo. Por isso, possvel incluir vrias tabelas em um objeto de bloqueio, as quais tm, no entanto, de estar ligadas por Relaes de chave externa apropriadas. As tabelas implicadas em um objeto de bloqueio tambm so referidas como as suas Tabelas de base.Atalhos no Editor ABAP

Assim como em outras IDEs, em outras linguagens de programao, o editor ABAP disponibiliza uma srie de atalhos e facilidades para otimizar o trabalho na implementao de cdigo fonte ABAP dentre eles esto o menu de contexo e os atalhos de teclado.

Menu de ContextoPara acionar o Menu de contexto no editor ABAP basta selecionar um bloco de cdigo desejado e clicar com o boto direito sobre a seleo, logo ser mostrado um menu com diversas opes. Alguns so bastante usados, dentre eles:Formato

possvel selecionar uma linha de cdigo onde se queira adicionar uma condicional IF... ELSE, clicar em Rodear com modelo sobre este item e ser escrito no cdigo a estrutura do IF tendo como contedo interno a esta estrutura o que fora selecionado. Assim pode ser feito com: LOOP, region, DO, define ...

Comentar linhasPodemos selecionar um bloco de cdigo que no dever ser compilado pelo ABAP e coment-lo (no ficar ativo aquele pedao de cdigo). Usa-se a opo comentar / descontentar linhas ou os atalhos CTRL+.EndentarPara ficar com uma melhor visibilidade relativo as sintaxes dos comandos sempre utilizamos endentao, um bloco IF...ELSE ficaria como mostrado abaixo, internamente as linhas ficam mais afastadas.

Pode-se utilizar o boto PRETTY PRINT na barra de botes para uma rpida endentao de acordo com as configuraes do editor ABAP no menu UTILITRIOS CONFIGURAES.NavegaoExistem vrias outras opes que podero ser bem teis no dia a dia, uma outra a para navegao dentro do cdigo. Podemos ir para determinada linha atravs do menu de contexto Navegao ou teclando CTRL+O.Outra opo interessante atravs de atalho poder adicionar bookmark, ou marcadores. Isso bem utilizado quando estamos navegando por cdigos extensos. Para adicionar um bookmark tecle CTRL+ALT+0... CTRL+ALT+1... para ir para aquele marcador utilize CTRL+0... CTRL+1 respectivamente, bloco a bloco.

Tabelas Internas (com e sem linha de cabealho)

Se voc est familiarizado com programao, voc sabe que array uma ferramenta poderosa que est presente em vrias linguagens de programao. ABAP oferece Tabelas Internas funo dos arrays.A diferena bsica no conceito de array em outras linguagens de programao e tabelas internas encontra-se no modo para acess-la. Acesso direto as tabelas no fornecida, no lugar disso usamos work area que compreende a uma linha simples em uma tabela interna.Existem dois tipos de declarao para Tabela Interna que diferem no modo como process-la.Tabela Interna com linha de cabealho (With Header Line)Tabela Interna sem linha de cabealho (Without Header Line)

Veja a seguir o exemplo e diferenas de ambos os tipos.1TYPES : BEGIN OF x_personnel,

2id(10) TYPE C,

3name(25) TYPE C,

4END OF x_personnel.

5

6DATA: t_itab1 TYPE STANDARD TABLE OF x_personnel WITH HEADER LINE,

7t_itab2 TYPE STANDARD TABLE OF x_personnel,

8d_personnel TYPE x_personnel.

Para acessar todo o contedo de uma tabela interna ns usamos o seguinte cdigo.1LOOP AT t_itab1.

2WRITE: / t_itab1-name.

3ENDLOOP.

4LOOP AT t_itab2 INTO d_personnel.

5WRITE: / d_personnel-name.

6ENDLOOP.

Ambos os cdigos retornaro o mesmo resultado sendo que em classes e mtodos no SAP no permitido tabelas internas com cabealho. Usando header line, ns poderemos usar o nome da varivel de tabela para acessar o contedo, de outra forma without header line, contedos so acessados via um work area.Para acessar um contedo simples com a chave correta, usamos a instruo abaixo1READ TABLE t_itab1 WITH KEY id = '1234'.

2WRITE : t_itab1-name.

3READ TABLE t_itab1 INTO d_personnel WITH KEY id = '1234'.

4WRITE : d_personnel-name.

t_itab1 e d_personnel contem o primeiro registro encontrado que satisfaz o critrio.Usando header line pode causar ambigidade em cdigo, por exemplo, CLEAR t_itab2 significa que voc limpou o contedo inteiro da tabela t_itab2, Porm a instruo CLEAR t_itab1 somente limpar o contedo do cabealho da t_itab1. Para limpar o contedo inteiro em tabelas with header line, use parenteses ao final da instruo, ex: CLEAR t_itab1[].

Comandos ABAP (Ordem alfabtica)

ADD var1 TO var2 Comando usado adicionar um valor a outro campo numrico.DATA wa TYPE I VALUE 3.DATA wb TYPE I VALUE 4.ADD wa TO wb.WRITE wa. retorna 3WRITE wb. retorna 7

APPEND t_tabela Comando usado para gravar em tabela internaAPPEND t_tabela.AT END OF campo Em conjunto com o comando LOOP, identifica o ultimoAT FIRST Em conjunto com o comando LOOP IDENTIFICA o primeiro registro de uma tabela percorrida.SORT BY campo.LOOP AT t_tabela.AT FIRST. entra nesta rotina ao iniciar o LOOP, somente no primeiro registro..ENDAT....ENDDLOOP.AT LAST Em conjunto com o comando LOOP, identifica o ultimo registro de uma tabela percorrida.SORT BY campo.LOOP AT t_tabela.....AT LAST. entra nesta rotina ao finalizar o LOOP, somente no ultimo registro..ENDAT.ENDDLOOP.AT NEW campo Em conjunto com o comando LOOP IDENTIFICA o primeiro registro de uma seqncia (quebra)SORT BY campo.LOOP AT t_tabela.AT NEW campo. entra nesta rotina ao mudar de campo..ENDAT....ENDDLOOP.CASE .. WHEN .. ENDCASE. Comando usado para controle de variveisCASE vl_okcode.WHEN 'SIM'....WHEN 'NAO'....WHEN OTHERS....ENDCASE.CHECK var Semelhante ao comando IF. Se a condio for verdadeira continua logo aps a verificao, se no aborta a execuo.

FORM dados.LOOP AT t_tabela.t_tabela-campo = KUNNR.CHECK t_tabela-campo = 0001. se o contedo do campo for igual a 0001, continuat_tabela-campo = 0002. executando a instruo abaixo, se for diferente abanAPPEND t_tabela. dona o loop e sai do form.ENDDLOOP.ENDFORM.CLEAR var Limpa o contedo de uma varivel ou tabelaCLEAR var.CLEAR t_tabela. limpa o header lineCOLLECT t_tabela Organiza a tabela interna com todas as descries a esquerda totalizando os campos numricosCOLLECT t_tabela.Exemplo :Tabela-nome = JOAO. , Tabela-uf = SP. , Tabela-valor = 100.COLLECT tabela.Tabela-nome = JOAO. ,Tabela-uf = RJ. , Tabela-valor = 300.COLLECT tabela.Tabela-nome = JOAO. , Tabela-uf = SP., Tabela-valor = 500.COLLECT tabela.Resultado : JOAO SP 600, JOAO RJ 300.COMMIT WORK Efetiva as alteraes no Banco de dadosCOMMIT WORK.CONCATENATE var1 var2 INTOvar3Agrupa varias variveis em uma nica varivelCONCATENATE abc XXX INTO var3. var3 = abcXXXCONDENSE var Remove os espaos em branco em um textoVar = Dr..CONDENSE var.DATA var TYPE tp.DATA var LIKE tp.Define tabelas internas e variveis.DELETE t_tabela Deleta um registro de uma tabela interna ou TRANSPARENTEDELETE t_tabela.

DO condio .. ENDDO. Cria um lao e verifica a condio no inicio do laoDO condio. a condio verifica no inicio do lao e se for verdadeira continua dentro.... do loopENDDO.FORM Indica o inicio de uma sub-rotinaFORM dados....ENDFORM.IF .. ELSE .. ENDIF. Comando de deCISo.IF var = A.....ELSE.....ENDIF.IF NOT .. IS INITIAL. Verifica se uma varivel ou tabela interna esta vazia.IF NOT var IS INITIAL.....ENDIF.INITIALIZATION. Evento para inicializar as variveis. Deve ser o primeiro evento a ser colocado no programa. No um evento obrigatrio.TABLES ....DATA ..........INITIALIZATION.INSERT t_tabela_transparente. Insere o contedo de uma varivel em uma tabela transparenteINSERT tabela.LOOP AT t_tabela. Comando usado para ler uma tabela interna.LOOP AT t_tabela...ENDDLOOP.MODIFY t_tabela.MODIFY t_tabela TRANSPORTING camposComando usado para modificar uma tabela interna.MODIFY t_tabela. modifica toda a linha da tabelaMODIFY t_tabela TRANSPORTING campos modifica os campos selecionadosMOVE Move todo o contedo de uma tabela para outra.Os campos devem ser os mesmos.LOOP AT t_tabela.MOVE tabela.INSERT tabela.ENDLOOP.COMMIT WORK.MOVE-CORRESPONDING t_tabela TO tabelaMove apenas os campos correspondente entre 2 tabelas.LOOP AT t_tabela.MOVE-CORRESPONDING t_tabela TO tabela.INSERT tabela.ENDLOOP.COMMIT WORK.PERFORM nome_formulario Chama um formulrio (subprograma)PERFORM nome_do_sub_programa.READ TABLE t_tabela WITH KEY campo = valorUsado para ler um registro especifico.SORT t_tabela1 BY campo.LOOP AT t_tabela1.* com o comando BINARY SEARCH a pesquisa fica mais rpida.READ TABLE t_tabela2 WITH KEY campo = t_tabela1-campo BINARY SEARCH.* aps o READ TABLE devemos verificar o resultadoIF SY-SUBRC EQ 0..... verdadeiro ( encontrou o dado )ELSE.....ENDIF.ENDLOOP.REPLACE var WITH var2 INTO var3 Replica um texto dentro de outro texto.DATA campo(4) TYPE C.Campo = ABCD.REPLACE B WITH texto INTO campo. novo valor de campo = AtextoCDSEARCH Pesquisa um texto dentro de outroSEARCH CIDADE DE DEUS FOR DEUS.IF SY-SUBRC = 0 .... valor encontradoELSE....ENDIF.SKIP n Comando usado para pular linhas em relatrio.WRITE IMPRIME UMA LINHA.SKIP 2.WRITE PULOS DUAS LINHAS.SORT t_tabela BY campon Comando usado ordenar tabelas internasSORT t_tabela BY campo.START-OF-SELECTION Evento usado para marcar o inicio de um conjunto de selees de dados.START-OF-SELECTION.SELECT marc~matnr marc~werks t001w~name1 makt~maktxINTO TABLE t_marcFROM marcINNER JOIN t001w ON marc~werks = t001w~werksINNER JOIN makt ON marc~matnr = makt~matnrand makt~spras = sy-languWHERE t001w~werks IN S_CENTROAND marc~matnr IN S_MATERI.END-OF-SELECTION.TABLES tabela Usado para abertura de tabelas STD.TABLES tabela.TABLES : tabela1, tabela2, tabela3.TOP-OF-PAGE Marca o inicio de um cabealho de relatrioTOP-OF-PAGE.WRITE NOVO CABECALHO DEFINIDO PELO PROGRAMA.END-OF-PAGE.ULINE: Server para colocar uma linha continua em relatrios para fazer separaes.ULINE imprime uma linha continuaWHILE: condio. ENDWHILE. Cria um lao e verifica a condio no final do laoWHILE condio. a condio verifica no final do lao e se for verdadeira continua dentro.... do loopENDWHILE.WRITE xxxxxxx Comando usado para sada de impressora ou telaWRITE ESTA LINHA SERA IMPRESSSA.WRITE ESTA LINHA SERA COLOCADA NA MESMA LINHA QUE A PRIMEIRA.WRITE / COM A / FAZ UMA QUEBRA E O TEXTO SERA IMPRESSA NA LINHA DE BAIXO.WRITE 5 IMPRIME NA POSIO 5.

Relatrios ALV

Desenvolver relatrios em ABAP (Advanced Business Application Programing) com um bom visual e recursos avanados no nada trivial. Imagine desenvolver um relatrio com cores, cabealho, linha de totais, label de colunas e separadores de colunas. Para piorar um pouco, que permita classificar por qualquer campo, aumentar ou diminuir o tamanho de colunas, gostaria tambm de poder trocar a posio das colunas, omitir ou exibir campos, totalizar, agrupar, exportar para Excel, etc. Totalmente possvel e igualmente invivel sem o uso de funes ALV. O ALV padroniza e simplifica a exibio e operao de listas e relatrios no sistema R/3. Fornece interfaces e formatos padronizados para todas as listas e relatrios. Na apostila vamos ver como criar programas utilizando uma funo ALV. Parece pouco, mas todas trabalham de maneira similar.Relatrios tradicionais

Um relatrio tradicional em ABAP no tem nenhum recurso ou formatao padro. Tudo deve ser programado via cdigo. Um programa para listar um relatrio como no exemplo acima, j exige muita codificao. Veja que no tem nada de complexo.

Depois de pronto, uma simples alterao no posicionamento dos campos ou no tamanho do papel, j demanda um novo processo de modificao. O usurio no tem os recursos necessrios para resolver o problema. Qualquer ao no relatrio apresentado, diferente das opes do menu standard do R/3 para esse tipo de listagem, dever ser programado. Uma tarefa nada simples, visto que o programador dever fazer o processo de da e volta, ou seja, o relatrio deve ficar dinmico ao ponto do usurio voltar na situao inicial, aps alguma modificao.Relatrios ALV Listagens ALV so dinmicas por definio. O programador vai escolher qual ou quais recursos ir disponibilizar em seu relatrio.

Muito similar a uma planilha do Microsoft Excel, cada coluna perfeitamente ajustvel, podem ser trocadas entre si, as linhas da grade e cores so automticas. Recursos simples que j eliminam um grande esforo de programao, principalmente em alteraes.

Barra de ferramentas

Todos os demais recursos esto concentrados em uma barra de ferramentas que a funo disponibiliza junto a barra standard do R/3 (Na parte superior do relatrio). Alguns cones so bem comuns e com funes simples, mas est tudo pronto para o uso, sem digitao de uma linha de cdigo a mais no programa.

Primeiramente, vamos apenas ver uma breve descrio de suas funes:

O boto de Detalhes Primeiro selecione a linha desejada atravs do seletor de campos, e depois clique no cone. Veja

Veja na figura abaixo que a linha foi destacada em coluna. Isso muito utilizado quando permitida a edio dos campos no relatrio.Os botes de Total e Subtotal Selecione a coluna com valor numrico, e escolha Total. Para subtotal, escolha uma coluna qualquer. Sempre primeiro necessrio totalizar uma coluna com o boto de somatria e s ento definir os subtotais.

No exemplo, o relatrio possui os totais dos campos Valor Lquido e Montante do Imposto. Foi escolhido o campo Grupo de cliente para que o relatrio apresentasse os subtotais. Por default, o relatrio fica na ordem crescente do campo que foi escolhido como subtotal. possvel totalizar e subtotallizar vrios campos. Clicando nos cones em destaque, voc pode apresentar apenas as linhas de totais, as linhas de subtotais, apenas o total geral ou ainda mostrar as linhas de detalhe de algum Grupo de cliente e de outro no.

O boto Pr-visualz.impresso O Relatrio ALV no impresso como se v na tela do computador. Clique nesse boto para visualizar a impresso no modo que ir ser a sada realmente.

No exemplo acima no temos os totais ou subtotais. Mas essas linhas so mantidas. O que perdemos apenas o formato de grid (Microsoft Excel). Passamos a ver um relatrio tradicional.

O boto Microsoft Excel Ao exportarmos para o Excel, algumas particularidades no sero enviadas:

Assim, se a intenso e gerar o relatrio para envia-lo ao Excel, no perca tempo com formataes. Apenas o bsico transferido. Temos trs opes para exportar a listagem para o Microsoft Excel, vamos ver a sada de cada uma delas.

O boto Microsoft Excel Opo Excel Macros SAP Com essa opo, o R/3 envia o relatrio para o Excel e j apresenta vrias barras de ferramentas prprias para que voc tenha as mesmas facilidades. Repare na figura, que as opes de ferramentas do prprio Excel no aparecem. Para voltar utilize a opo do menu Report e depois Exit.

O boto Microsoft Excel Opo Tabela a forma mais simples de exportao. Veja que o R/3 mantem as barras de ferramentas do Excel e apenas inclui o relatrio na planilha.

O boto Microsoft Excel Opo Tabela Pivot Nessa opo o R/3 abre o Excel e monta o relatrio que permanece com algumas funes. Mesmo que o seu Excel no esteja exibindo a barra de ferramentas Tabela Dinmica, a comunicao R/3 Excel vai passar a exibi-la, para o acesso aos recursos do relatrio.

O boto Modificar layout Essa opo engloba as funes do Filtro, Totalizar, Subtotalizar, Ordenar, Selecionar colunas, Ocultar colunas, etc. Vejamos cada guia de opo. Na figura abaixo, na parte da esquerda, temos as colunas que esto visveis no relatrio. Na parte direita, temos todas as disponveis. Veja que j temos aqui, a possibilidade de informar quais campos pretendemos totalizar.

O boto Gravar Layout O formato que seu relatrio estiver no momento (Que foi configurado) pode ser salvo. Vrios layouts diferentes para um mesmo relatrio. O flag Config.prelim vai indicar qual o layout default, ou seja, ao executar o programa novamente, de que forma o relatrio ser apresentado de incio.

O boto Selecionar Layout Da mesma forma possvel mudar o formato de seu relatrio a qualquer momento. Basta selecionar outro layout salvo. Na figura abaixo, temos apenas um.

No cdigo em anexo, voc ver que possvel, na tela de seleo do programa permitir ao usurio selecionar um layout, antes do relatrio ser apresentado com o layout default (Caso exista algum). Sem nenhum layout, o relatrio apresentado conforme foi codificado no programa.Inserindo uma figura no cabealho Que tal o cabealho do seu relatrio no formato da figura abiaixo (por exemplo), e logo depois as linhas de detalhe:

Isso melhora bem a aparncia dos relatrios. Veja que temos at a possibilidade de inserir figura em background, como na Web. O texto tambm configurvel, voc pode inserir vrias linhas e alterar o tamanho da fonte.No exemplo acima foi utilizado como background a imagem ALV_BACKGROUND e o nome do logotipo ENJOYSAP_LOGO. Faa o upload da figura na transao: OAER.

O R/3 permite que voc importe figuras, assim no ficamos limitados apenas, as que so standard. Por exemplo importar o logotipo da empresa e inserir no cabealho do relatrio ALV. Vejamos como se faz.

Aps criar a imagem (.GIF, .BMP, .JPG, etc) em algum aplicativo (MS Paint, Photoshop, Paint Shop Pro, etc) o que precisamos, utilizar a transao 0FPM002 (Import Logo for Reporting) e importar a imagem para o R/3. Nem todas as verses do R/3 possuem essa transao.

Preencha as informaes necessrias e digite F8 para executar.

Importando uma imagem para o R/3 Na prxima tela voc ir informar onde est a figura, clicando em TELA. Veja a imagem abaixo:

Com duplo clique no item TELA, a transao apresenta a tela padro para abrir um arquivo. Localize a figura e pronto.

Exemplo de programa 1 *----------------------------------------------------------------------- * ProcWork Informtica - ASPEN - Unidade de Negcios SAP * Descrio : Programa de exemplo para criao de relatrio ALV * Dezembro, 2002 *----------------------------------------------------------------------- report zexemplo_alv. *----------------------------------------------------------------------- * Tabelas transparentes *----------------------------------------------------------------------- tables: vbrk. "Documentos de faturamento *----------------------------------------------------------------------- * Tipos standard * * O conjunto de tipos VRM e SLIS so utilizados por funes ALV. Defina * sempre no incio. O mais importante mesmo o SLIS. *----------------------------------------------------------------------- type-pools: vrm, "Necessrio para uso de ALV slis. "Tipos globais para ALV *----------------------------------------------------------------------- * Tipos do usurio *----------------------------------------------------------------------- types: begin of y_vbrk, vbeln like vbrk-vbeln, "Nmero documento kdgrp like vbrk-kdgrp, "Grupo de clientes netwr like vbrk-netwr, "Valor lquido mwsbk like vbrk-mwsbk, "Montante do imposto fkart like vbrk-fkart, "Tipo documento faturamento vtweg like vbrk-vtweg, "Canal de distribuio kunag like vbrk-kunrg, "Emissor da ordem xblnr like vbrk-xblnr, "Nota fiscal mark type c, "Marcar alteraes end of y_vbrk. *----------------------------------------------------------------------- * Tabelas internas ALV * * As estruturas aqui utilizadas (SLIS) esto explicadas com as opes * mais importantes no final da apostila *----------------------------------------------------------------------- data: t_linecolor type slis_specialcol_alv occurs 0 with header line, t_listheader type slis_t_listheader, t_fieldcat type slis_t_fieldcat_alv with header line, t_sort type slis_sortinfo_alv occurs 0 with header line. data: v_listheader type slis_listheader, "Cabealho v_layout type slis_layout_alv, "layout para sada v_print type slis_print_alv, "Ctrl de impresso v_variante like disvariant. "Variante de exibio *----------------------------------------------------------------------- * Tabelas internas *----------------------------------------------------------------------- data: t_vbrk type y_vbrk occurs 0 with header line. * A prxima tabela necessrio porque no possvel um select em * tabelas que possuem campos como outras tabelas. * No caso foi necessrio incluir a SLIS_T_SPECIALCOL_ALV data: begin of t_alv occurs 0. include structure t_vbrk. data: color type slis_t_specialcol_alv. "Definir a cor data: end of t_alv. *----------------------------------------------------------------------- * Variveis de uso geral *----------------------------------------------------------------------- data: v_tabix like sy-tabix, v_repid like sy-repid, v_flag. *----------------------------------------------------------------------- * Tela de seleo *----------------------------------------------------------------------- selection-screen begin of block one. select-options: s_vbeln for vbrk-vbeln. "Documento de faturamento selection-screen skip. parameters: p_varia like disvariant-variant. "Variante de exibio *----------------------------------------------------------------------- * O usurio ter a opo de iniciar a apresentao do relatrio com * algum layout salvo anteriormente. * Essa escolha ser armazenada em P_VARIA. Utilizamos uma funo que * retorna todos os layout possveis. *----------------------------------------------------------------------- selection-screen end of block one. *----------------------------------------------------------------------- * Eventos *----------------------------------------------------------------------- initialization. perform zf_init_alv. at selection-screen on value-request for p_varia. perform zf_recupera_layouts_salvos.

*----------------------------------------------------------------------- * Principal *----------------------------------------------------------------------- start-of-selection. perform: zf_selecao_dados, "Seleciona a VBRK zf_altera_cores, "Alterando as cores dos campos zf_monta_tabela_alv, "Preenche o catlogo zf_sort_subtotal, "Ordenao dos campos e subtotais zf_executa_funcao_alv. "Gera o relatrio end-of-selection. *----------------------------------------------------------------------- * Rotinas *----------------------------------------------------------------------- *----------------------------------------------------------------------- * Form zf_init_alv *----------------------------------------------------------------------- * Busca layout de exibio default para o relatrio. Se houver * algum formato padro para o relatrio, essa funo busca e j * apresenta o relatrio nesse formato. * Um layout fica como default quando marcamos "Config.Prelim." Um * flag que pode ser marcado na opo "Gravar layout" na barra de * ferramentas do ALV *----------------------------------------------------------------------- form zf_init_alv. v_repid = sy-repid. clear v_variante. v_variante-report = v_repid. call function 'REUSE_ALV_VARIANT_DEFAULT_GET' EXPORTING i_save = 'A' CHANGING cs_variant = v_variante EXCEPTIONS not_found = 2. if sy-subrc = 0. p_varia = v_variante-variant. endif. endform. *----------------------------------------------------------------------- * Form zf_recupera_layouts_salvos *----------------------------------------------------------------------- * Abre um search help com os layouts j gravados. Se o usurio * escolher algum aqui, o programa vai iniciar a apresentao do * relatrio com esse layout, e no o que default, retornado na * funo REUSE_ALV_VARIANT_DEFAULT_GET em ZF_INIT_ALV (Acima) *----------------------------------------------------------------------- form zf_recupera_layouts_salvos. v_variante-report = v_repid. call function 'REUSE_ALV_VARIANT_F4' EXPORTING is_variant = v_variante i_save = 'A' IMPORTING es_variant = v_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. p_varia = v_variante-variant. endif. endform.

*----------------------------------------------------------------------- * Form zf_selecao_dados *----------------------------------------------------------------------- * Seleo dos dados *----------------------------------------------------------------------- form zf_selecao_dados. select vbeln kdgrp netwr mwsbk fkart vtweg kunag xblnr from vbrk into table t_vbrk where vbeln in s_vbeln. loop at t_vbrk. move-corresponding t_vbrk to t_alv. append t_alv. endloop. endform. *----------------------------------------------------------------------* * Form zf_altera_cores *----------------------------------------------------------------------* * Permite informar a cor que vc deseja para a coluna, inclusive * pelo valor da varivel *----------------------------------------------------------------------* FORM zf_altera_cores. * Veja algumas cores * Azul = 1 * Verde = 5 * Normal = 2 * Vermelha = 6 * Mas vai depender de como esto as cores do seu SAP-Gui loop at t_alv. refresh t_linecolor. refresh t_alv-color. t_linecolor-fieldname = 'VBELN'. t_linecolor-color-col = '6'. t_linecolor-color-inv = '1'. "Inverso, 1 liga e 0 desliga append t_linecolor. * Temos a opo INV, que invertido, mesmo esquema do INT * 1 liga e 0 desliga if t_vbrk-netwr > 10000. t_linecolor-fieldname = 'NETWR'. t_linecolor-color-col = '1'. t_linecolor-color-int = '1'. "Negrito (1-ligado, 0-Desligado) else. t_linecolor-fieldname = 'NETWR'. t_linecolor-color-col = '6'. t_linecolor-color-int = '1'. "Negrigo (1-ligado, 0-Desligado) endif. append t_linecolor. t_alv-color[] = t_linecolor[]. modify t_alv. endloop. ENDFORM. *----------------------------------------------------------------------- * Form zf_monta_tabela_alv *----------------------------------------------------------------------- * Monta tabela para apresentao do relatrio. Aqui montamos um * catlogo com as informaes dos campos. * Veja que no estamos preenchendo todas as opes do catlogo, * no necessrio. No anexo voc poder encontrar os principais *----------------------------------------------------------------------- form zf_monta_tabela_alv. clear t_fieldcat. t_fieldcat-fieldname = 'MARK'. t_fieldcat-tabname = 'T_ALV'. t_fieldcat-reptext_ddic = 'S'. t_fieldcat-inttype = 'C'. t_fieldcat-outputlen = 1. t_fieldcat-checkbox = 'X'. append t_fieldcat. clear t_fieldcat. t_fieldcat-fieldname = 'VBELN'. t_fieldcat-tabname = 'T_ALV'. t_fieldcat-reptext_ddic = 'Doc. Fatura'. t_fieldcat-inttype = 'C'. t_fieldcat-outputlen = 10. append t_fieldcat. clear t_fieldcat. t_fieldcat-fieldname = 'KDGRP'. t_fieldcat-tabname = 'T_ALV'. t_fieldcat-reptext_ddic = 'Grupo de Clientes'. t_fieldcat-inttype = 'C'. t_fieldcat-outputlen = 2. append t_fieldcat. * Para o campo NETWR, o relatrio j vai mostrar linha de total clear t_fieldcat. t_fieldcat-fieldname = 'NETWR'. t_fieldcat-tabname = 'T_ALV'. t_fieldcat-reptext_ddic = 'Valor lquido'. t_fieldcat-inttype = 'P'. t_fieldcat-outputlen = 15. t_fieldcat-do_sum = 'X'. append t_fieldcat. clear t_fieldcat. t_fieldcat-fieldname = 'MWSBK'. t_fieldcat-tabname = 'T_ALV'. t_fieldcat-reptext_ddic = 'Montante do Imposto'. t_fieldcat-inttype = 'P'. t_fieldcat-outputlen = 15. append t_fieldcat. * Os campos abaixo no iro aparecer no relatrio, apenas quando * o usurio modificar o layout e inserir esses campos nas colunas * a serem apresentadas clear t_fieldcat. t_fieldcat-fieldname = 'FKART'. t_fieldcat-tabname = 'T_ALV'. t_fieldcat-reptext_ddic = 'Tipo do documento'. t_fieldcat-inttype = 'C'. t_fieldcat-outputlen = 4. t_fieldcat-no_out = 'X'. append t_fieldcat. clear t_fieldcat. t_fieldcat-fieldname = 'VTWEG'. t_fieldcat-tabname = 'T_ALV'. t_fieldcat-reptext_ddic = 'Canal de Distribuio'. t_fieldcat-inttype = 'C'. t_fieldcat-outputlen = 2. t_fieldcat-no_out = 'X'. append t_fieldcat. clear t_fieldcat. t_fieldcat-fieldname = 'KUNAG'. t_fieldcat-tabname = 'T_ALV'. t_fieldcat-reptext_ddic = 'Emissor da Ordem'. t_fieldcat-inttype = 'C'. t_fieldcat-outputlen = 10. t_fieldcat-no_out = 'X'. append t_fieldcat. * Para o campo XBLNR, no vamos preencher nada. Nem disponvel * na modificao do layout ele vai estar. * No necessrio atribuir todos os campos, no ocorre * nenhum erro. endform. *----------------------------------------------------------------------- * Form zf_sort_subtotal *----------------------------------------------------------------------- * Classificao e item de subtotalizao *----------------------------------------------------------------------- form zf_sort_subtotal. clear t_sort[]. t_sort-spos = 1. t_sort-fieldname = 'KDGRP'. t_sort-tabname = 'T_ALV'. t_sort-up = 'X'. t_sort-subtot = 'X'. append t_sort. * Com isso o relatrio vai sair classificado em ordem crescente de Grupo * de cliente e ainda ir aparecer um subtotal por esse campo. endform. *----------------------------------------------------------------------- * Form zf_executa_funcao_alv *----------------------------------------------------------------------- * Apresenta relatrio *----------------------------------------------------------------------- form zf_executa_funcao_alv. * Preenchendo algumas opes de impresso (No obrigatrio) v_layout-expand_all = 'X'. "Abrir subitens v_layout-colwidth_optimize = 'X'. "Largura melhor possvel da coluna v_layout-edit = 'X'. "Permitir a edio * Indicando para funo qual o layout que deve ser apresentado * primeiro v_variante-variant = p_varia. v_print-no_print_listinfos = 'X'. call function 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = v_repid i_background_id = 'ALV_BACKGROUND' i_callback_top_of_page = 'ZF_TOP_OF_PAGE' * i_callback_pf_status_set = 'ZF_STATUS' i_callback_user_command = 'ZF_USER_COMMAND' it_fieldcat = t_fieldcat[] is_layout = v_layout it_sort = t_sort[] i_default = 'X' i_save = 'A' is_variant = v_variante is_print = v_print TABLES t_outtab = t_alv EXCEPTIONS program_error = 1 others = 2. * As funes que geram relatrios ALV possuem vrios parmetros de * I_CALLBACK. Os que mais so utilizados, so os que esto * na chamada acima. Para ver os demais use a transao SE37. Esses * parmetros so preenchidos com nomes de FORMS do programa * i_callback_program = Qual programa que executou a funo * i_callback_top_of_page = Rotina de cabealho * i_callback_pf_status_set = Qual barra de tarefas a funo vai usar * i_callback_user_command = Tratamento dos botes alterados ou criados endform. *----------------------------------------------------------------------- * Form zf_user_command *----------------------------------------------------------------------- * Tratamento das opes do usurio. Por exemplo um Drill-down ou * algum boto que voc inseriu ou alterou. O importante conhecer * os parmetros que o form recebe *----------------------------------------------------------------------- form zf_user_command using ucomm like sy-ucomm selfield type slis_selfield. * UCOMM: o sy-ucomm (Ok-code) * SELFIELD: uma estrutura com dados que ns permite identifcar * o que foi selecionado. Essa estrutura tambm est * explicada no anexo ao final da apostila * Salva a posio do relatrio (Linha escolhida) selfield-row_stable = 'X'. * Uma das questes foi como alterar o contedo de uma tabela * transparente com as alteraes feitas no relatrio ALV * Segue um exemplo de como pode ser feito: * Em nossa barra de ferramentas criamos o boto com cdigo * ZATU if ucomm = 'ZATU'. * Vamos ler a tabela T_VBRK onde mark = X. A idia que * o usurio mark com X os registros alterados loop at t_vbrk where mark = 'X'. v_tabix = sy-tabix. * Atualiza a tabela transparente " update ztabela .... * Ento voltamos a T_VBRK sem marcao alguma clear t_vbrk-mark. modify t_vbrk index v_tabix. * Veja que esse tipo de esquema pode ser feito para * excluir registros tambm endloop. endif. * Para testar o cdigo do boto if ucomm = 'ZLOG'. " perform ... " call transaction... endif. * Para um drill down a partir de um registro if not selfield-tabindex = 0. read table t_vbrk index selfield-tabindex. "perform ... "call transaction ... else. * Clicou em linha invlida, linha de total, cabealho, etc endif. endform. *----------------------------------------------------------------------- * Form zf_top_of_page *----------------------------------------------------------------------- * Cabealho do relatrio *----------------------------------------------------------------------- form zf_top_of_page. * Uma dica, em relatrios ALV com utilizao de drill down, na volta ao * relatrio principal ele vai executar novamente o cabealho. Isso faz * com que ele fique duplicado. Utilize um flag que aps apresentar o * cabealho uma vez, fique marcado com um 'X', por exemplo. * V_FLAG na primeira vez branco. check v_flag is initial. * Monta as linhas de cabealho clear t_listheader[]. clear v_listheader. v_listheader-typ = 'H'. * TYP = H, faz com que a fonte fique maior v_listheader-info = 'Apenas um Exemplo em ALV'. append v_listheader to t_listheader. * Definio do Projeto clear v_listheader. v_listheader-typ = 'A'. * TYP = S, outro tipo de fonte v_listheader-info = 'Segunda linha do cabealho'. append v_listheader to t_listheader. * O campo INFO, pode ter no mximo 60 caracteres * Apresenta o cabealho. * Veja que j uma outra funo, essa apresenta a figura, j * a funo REUSE_ALV_GRID_DISPLAY (Principal) tem o parmetro * que voc indica a imagem que ser apresentada em background, * como na WEB. call function 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING i_logo = 'ENJOYSAP_LOGO' it_list_commentary = t_listheader. * Para no apresentar mais o cabealho no refresh v_flag = 'X'. endform.

*---------------------------------------------------------------------- * Form zf_status *---------------------------------------------------------------------- * Status com boto de log (Item a mais na barra ALV) *---------------------------------------------------------------------- form zf_status using rt_extab type slis_t_extab. * Aqui estamos informando a funo que ela dever utilizar a barra de * ferramentas ZALV_BOTOES. "set pf-status 'ZALV_BOTOES'. * Tambm possvel excluir funes "if sy-uname = ... "EXCLUDING ... "endif. endform.

Estruturas SLIS