Baixe o app para aproveitar ainda mais
Prévia do material em texto
CURSO ABAP PARA FUNCIONAL 2015 1. Conceito breve do SAP O SAP é um sistema que trabalha com um número muito grande de tabelas interligadas, que armazenam e manipulam os valores de controle dos processos. Essas tabelas são responsáveis pelo armazenamento dos valores do sistema e são divididas em grup7os que se interligam em um todo. Assim, existem tabelas responsáveis pelas informações de FI, outras pelas informações de SD, outras ainda por MM, mas todas elas apresentam campos chaves que permitem, pelos mais diferentes e complicados caminhos, a interligação e consistência de todo o sistema. Embora a ferramenta ABAP/ 4 dentro do SAP seja muito poderosa e praticamente capaz de permitir qualquer customização do sistema, e muito importante manter os conceitos originais sempre em mente, e nunca tentar forçar alguma coisa que deveria ter um comportamento natural. Por exemplo, nunca tente alterar um valor de uma tabela do SAP ( embora perfeitamente possível, com o comando UPDATE), sem um minucioso estudo de suas implicações anteriormente. Isso pode comprometer a integridade dos dados do sistema, se não forem atualizados todos os valores de todas as tabelas relacionada a essa alteração. 1.1 Instância X Client Também é muito importante o conceito do funcionamento do ambiente do sistema durante a evolução de um projeto. Inicialmente devemos entender os conceitos de client e instância: Client - é definido como sendo uma unidade independente do R/3, em termos comerciais, organizacionais e técnicos. Isso significa que possuem sua própria configuração, dados de aplicação e dados cadastrais (master data). Instância – é definida como um ambiente do R/3 que agrupa um ou mais clients, onde se executa um determinado trabalho. Uma instância de trabalho, geralmente possui mais de um client, onde são trabalhados simultaneamente diferentes frentes de trabalho do projeto. A intenção dessa divisão é que se possa trabalhar somando valores, sem que haja conflitos de interesse. Por exemplo, durante um projeto, o client para desenvolvimento das customizações de ABAP deve ser diferente dos outros, pois trabalha muito com testes e alterações constantes, o que inviabiliza outros tipos de serviços. Se essa divisão muitas vezes ajuda, algumas vezes atrapalha. Geralmente as massas de dados são diferentes nos clients, e o comportamento principalmente nos testes dos produtos customizados pode ser diferente. O recomendado pela própria SAP é que exista um client só para testes , com massa de dados completa que permita “recarga” sempre que necessário, o que permitiria que as condições de teste pudessem ser repetidas. No dia a dia de um projeto isso é muito difícil, pois a manutenção desses clients pelo time de basis geralmente não é muito bem vista. As instâncias variam também ao longo de um projeto. A medida que o sistema vai sendo refinado, geralmente se inicia uma nova instância livre dos vícios e restos de testes da anterior. Pelo menos 3 instâncias sempre existem durante o período de um projeto. A instância de desenvolvimento, a de pré-produção e finalmente a de produção. Cada vez que o sistema é migrado de uma instância para a outra, somente deve ser aproveitado o que está comprovadamente funcionando na instância anterior, de modo a diminuir os erros a cada migração. 1.2 Objetos “ Client Dependent” e “ Client Independente” Todos os objetos criados em um sistema SAP, podem ser divididos em dois grupos, tratados diferentemente ao longo de um projeto. Os objetos chamados “ Client Independents” são aqueles que uma vez criados podem ser utilizados por todos os clients de uma mesma instância, sem que necessite de nenhuma articulação adicional. O simples fato de se encontrar ativo no repositório do sistema habilitado para a instância, o permite ser utilizado por todos os clients dessa instância, de maneira simultânea. O maior exemplo de objetos independentes do client são os programas de ABAP/4 normais customizados. Por exemplo, um report criado em um client de desenvolvimento, pode ser executado de um outro client de teste, existente na mesma instância, uma vez que tenha sido gerado e ativado. Os objetos dependentes do client, ao contrário, uma vez criado por exemplo, no client de desenvolvimento não pode ser executado de nenhum outro, a menos que seja transportado ou copiado para o seu destino. Esse é um exemplo típico dos formulários em SAPscript. Dentro da classe dos objetos dependentes do client, existe um subgrupo que exige uma atenção maior ainda. E o caso dos logotipos utilizados dentro de um SAPscript. Esses objetos, além de não serem compartilhados pelos clients, também não geram request ao serem criados, o que impossibilita serem transportados diretamente, precisando associarmos, primeiro, esses elementos a uma Change Request através de um programa. Neste caso, os logotipos devem ser gerados em cada um dos clients em que se deseje utilizá-lo, através da execução de um programa do SAP. Esse tipo de problema, ao longo de um projeto, exige uma atenção especial, para evitar problemas futuros. Por exemplo, o desenhista técnico deve tomar cuidado de anexar o arquivo .TIF do logotipo na especificação do MDM, para futura repetição do processo de geração do logotipo dentro do sistema. Caso esse cuidado não seja tomado, futuramente pode-se obter um logotipo de tamanho diferente, gerando re-work e perda de tempo. 2. Transações Transação é um código alfanumérico 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 através de uma transação. Na customização de ABAP/4, sempre que um GAP do sistema é coberto, isso gera pelo menos uma transação, de modo que o usuário possa executar esse produto customizado de dentro do sistema. Toda operação realizada através do menu do sistema, também corresponde a uma transação. Um método para conhecermos o código de uma transação cujo caminho pelo menos é sabido, é entrarmos na mesma, e na tela inicial desta transação, utilizarmos o menu Sistema→ Status, que informa o programa tela e transação executados. No desenvolvimento de customizações ABAP/4, as principais transações utilizadas, são: SE38 – Editor ABAP (programas, includes, relatórios) SA38 – Execução de programas SE37 – Editor de módulo de funções e RFC SE80 – Navegador de objetos (acessa programas, grupos de função, pacotes, objetos locais, etc) SE93 – Criação de transações SE91 – Classe de mensagens SE11 – Dicionário de dados SE16 – Conteúdo de tabelas transparentes SM30 – Atualização de visões de tabelas SE54 - Geração visão de tabela SE14 – Dicionário de tabelas – utilitário BD SE01 – Organizador de transportes (requests) – Visão ampliada SE09, SE10 - Organizador de transportes SE18 - Construtor de BADI – atualização de definição SE19 – Construtor de BADI - implementação SE36 – Banco de dados lógicos SHDB – Mapeamento de batch input SM35 – Síntese de pastas de batch input SM36 – Definição de jobs SM37 – Verificação de jobs SE24 – Construtores de classes e métodos OO SE21 - Package Builder SE43 - Atualização do menu de área SE51 - Screen Painter SE71 – Formulários SAPscript SE72 - Estilos SAPscript SMARTFORMS – Formulários Smartforms SMARTSTYLES – Estilos e formatação de caracteres para Smartforms SE78 – Administrção de gráficos de formulários SO10 – Texto standard: requisição SP01 – Controle de saída: SPOOL de impressão ST22 – Erros de tempo de execução ABAP (dumpt) ST05 – Análise de performance e trace SE30 – Análise de tempo de execução SCII – Code inspector SU01 – Perfis de usuário (basis) SU21 – Objetos de autorização SU53 – Exibir dados de autorização do usuário ABAPDOCU – Documentação/Exemplos ABAP CMOD – Ampliações SMOD – Administração de Ampliações SAP Outros comandos no campo de tela para transação: /n – Voltar para menu inicial (se /nSE38, navega diretamente para a transaçãoSE38) /o – Nova tela SAP (se /oSE38, navega em nova tela para a transação SE38) /h – Ativa debug /nex – Sair imediatamente do SAP (todas as telas) Atalhos importantes: F1 – Ajuda, posicionar sobre campo de tela, botão ou comando SAP e pressionar F1. F3 – Voltar SHIFT + F3 – Sair ESC ou F12 – Cancelar F7 – Exibir F6 – Editar F5 – Criar F8 – Executar No editor ABAP: CTRL + S - Salvar SHIFT + F1 – Pretty Printer CTRL + F2 – Verificar Sintaxe CTRL + F3 – Ativar CTRL + < - Comentar linha(s) CTRL + > - Descomentar linha(s) No Debug: CTRL + SHIFT + F8 – visualizando conteúdo de tabela interna vai para a última coluna CTRL + SHIFT + F7 – visualizando conteúdo de tabela interna vai para a próxima coluna CTRL + SHIFT + F6 – visualizando conteúdo de tabela interna vai para a coluna anterior CTRL + SHIFT + F5 – visualizando conteúdo de tabela interna vai para a primeira coluna F8 – Avançar(até o cursor) F7 – Retorno F6 – Executar F5 – Etapa individual SHIFT + F8 – Criar Watchpoint 3. Objetivos do Data Dictonary Apresentar conceitos de Bancos de Dados Relacionais; SAP vs Modelo Relacional; Conhecer as ferramentas básicas do Dicionário de Dados do R/3; Criar objetivos através do Dicionário de Dados; 4. Conceitos de Bancos de Dados Relacionais 4.1 Modelo Entidade-Relacionamento Modelo desenvolvido para facilitar o projeto de banco de dados, permitindo a especificação de um esquema que represente a estrutura lógica global de um banco de dados. Entidade: É um objeto que existe e é distinguível de outros objetos, ou seja, identifica o agrupamento de objetos do mesmo tipo. Ex.: Clientes, Bancos, Agências, Contas-corrente; Atributos: São os qualificadores de uma entidade, isto é, representam no modelo o que uma entidade pretende ser. Ex.: Nome, RG, CPF, Endereço, Nro Conta, Nro Agência, Nro Banco; Domínio: Conjunto de valores permissíveis para um atributo. Ex.: Estado Civil, Seco, Cor, Meses do Ano. Relacionamento: É a associação entre duas entidades, ou seja, representa a maneira como duas entidades são relacionadas ou ligadas. Ex.: Conta-corrente de um Cliente, Agência de um Banco, Contas-corrente de uma Agência. 4.2 Restrições 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 ocorrência da Entidade A está relacionada com uma e apenas uma ocorrência da Entidade B; Um-para-N: Uma ocorrência da Entidade A está relacionada com uma ou várias ocorrências da Entidade B; N-para-Um: Várias ocorrências da Entidade A estão relacionadas com apenas uma ocorrência da Entidade B. N-para-N: Várias ocorrências da Entidade A está relacionada com várias ocorrências da Entidade B. 4.3 Modelo Relacional Um banco de dados relacional é a implementação física do Modelo Entidade- Relacionamento e traduz concretamente o que o modelo conceitual procura representar. Consiste em uma coleção de tabelas cada uma das quais associadas 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 são formadas de linhas que por sua vez são formadas por colunas. Colunas representam fisicamente os Atributos. A cada linha da tabela chamamos de Ocorrência e o conjunto de ocorrências pode ou não estar relacionado com ocorrências de outras tabelas. 4.4 Como distinguir as ocorrências umas das outras? Utilizando o conceito de Chave Primária. Chave Primária: Conjunto de atributos que garante a unicidade de cada ocorrência da tabela. Exemplos: RG, CPF, Nro Chassis; Normalização: processo de reconhecimento da chave primária; 4.5 Como representar os relacionamentos entre tabelas? Transferindo a chave primária de uma tabela para outra. Chave Estrangeira: Quando a chave primária de uma tabela é um atributo em outra(s) tabela(s). 4.6 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 definição e manipulação de dados em sistemas de bancos de dados relacionais. Conjunto reduzido de comandos, sem recursos de lógica, ú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 específicas de cada fabricante oferecem recursos adicionais para a construção de lógica. Outras linguagens foram adaptadas para trabalharem em conjunto com o SQL, como o COBOL, C e ABAP/4. O SQL utilizado no R/3 é proprietário e segue um mínimo da regulamentação internacional para esta, estando longe de possuir os mesmos mecanismos de funcionamento. Seus comandos podem ser divididos em: DDL: Data Definition language – Comandos específicos para definição de objetos do banco de dados. Ex.: Create Table, Create View, Create TableSpace, Drop Table, etc. DML: Data Manipulation Language – Comandos específicos para tratamento dos dados armazenados nos objetos do banco. Ex.: Select, Insert, Delete, Update, etc. 5. Data Dictionary 5.1 Introdução O dicionário de dados do ABAP/4 (DD) é uma fonte central de informações provenientes do sistema gerenciador de dados do SAP. Sua principal função é suportar a criação e o gerenciamento das definições de dados, também conhecidas como “metadados”. Neste curso, o DD será utilizado em exercícios práticos com o seguinte objetivo: Visualizar objetos do SAP (tabelas, estruturas, elementos de dados, domínios); Observar a estrutura e atributos dos dados armazenados na base de dados; Elaborar consultas (queries simples) de dados; Descobrir os relacionamentos entre diferentes objetos; Criar objetos; O Data Dictionary é parte integrante do ABAP/4 Workbench e está numa camada intermediária entre o sistema aplicativo e o gerenciador de banco de dados. 5.2 Funções desempenhadas pelo Data Dictionary Gerenciamento das Definições de Dados Criação e manutenção das definições de dados num repositório central; Provisão de informações para avaliações Permite obter informações sobre o modo como os objetos estão relacionados; Suporte ao desenvolvimento Diferentemente de outros dicionários de dados, está integrado ao ambiente de desenvolvimento de modo que alterações ou criação de novos objetos promovem automaticamente a geração dos outros objetos dependentes, sejam eles parte do dicionário ou programas aplicativos; Suporte à documentação Permite obter documentação atualizada Garantia de que as definições de dados sejam flexíveis e atualizadas Geração de objetos de runtime garantindo performance 5.3 Elementos de Dados 5.3.1 Requisitos do SAP R/3 Os nomes dos Elementos de Dados devem iniciar com Z ou Y, podem ter um máximo de 10 caracteres de comprimento e devem ser únicos na instância da base de dados. 5.3.2 Padrão (standard) Os Elementos de Dados precisam ser ativados pelo Administrador do Dicionário de Dados para melhor controle. Quando possível, use o mesmo nome como domínio associado a esse Elemento de Dados. Se houver um conflito, o nome do Elemento de Dados é o principal motivo. A SAP não cria Elemento de Dados que começam com um Z, como hábito, Elementos de Dados poderiam começar com ZZ. Os nomes de Elementos de Dados podem ter um máximo de 8 caracteres. A SAP gerou programas ou funções que podem utilizar essas definições de objetos para SELECT- OPTIONS e PARAMETERS, o qual podem ter no máximo 8 caracteres de comprimento. Exemplo: ZZSEXO ZZ Sempre ZZ SEXO Um nome significativo que descreva o elemento de dados. 5.4 Domínios 5.4.1 Requisitos do SAP R/3 Os nomes dos Domínios devem iniciar com Z ou Y, podem ter um máximo de 10 caracteres de comprimento e devem ser únicos na instância da base de dados. 5.4.2 Padrão (standard) Os Domínios precisam ser ativadospelo Administrador do Dicionário de Dados para melhor controle. Quando possível, use um Domínio existente. Se não for possível, nomeie o Domínio com um nome significativo. A SAP não cria Domínios que começam com um Z, como hábito, Domínios poderiam começar com ZZ. Os nomes de Domínios podem ter um máximo de 8 caracteres. A SAP gerou programas ou funções que podem utilizar essas definições de objetos para SELECT-OPTIONS e PARAMETERS e o tamanho permitido para as variáveis é de 8 caracteres de comprimento. Exemplo: ZZSEXO ZZ Sempre ZZ SEXO Um nome significativo que descreva o elemento de dados. 6. Tabelas Transparentes e Cluster 6.1 Requisitos do SAP R/3 Precisam iniciar com Z, Y ou T9 e podem ter um máximo de 10 caracteres de comprimento. Exemplo: ZF100 Tabela customizada que pode ser visualizada on-line. 6.2 Campos de Tabelas 6.2.1 Requisitos do SAP R/3 Campos de usuários podem ter até 10 caracteres de comprimento e devem ser únicos na definição da tabela. 6.2.2 Formato Padrão (standard) Quando possível, use o mesmo nome do elemento de dados associado com este campo. Se diversos campos na tabela usam o mesmo elemento de dados, nomeie estes campos de maneira significativa. Quando possível, use um elemento de dados existente do SAP. Não use espaços e caracteres especiais no nome do campo da tabela. Exemplo: X(10) LOANNUM Este poderia marcar um campo de número de empréstimo. 6.3 Tabela de Índice 6.3.1 Formato Padrão (standard) Começa com um Z e tem um máximo de 3 caracteres de comprimento. Exemplo: Z01 6.4 Estrutura 6.4.1.Requisitos do SAP R/3 Um nome de estrutura pode ter até 10 caracteres e deve iniciar com Z ou Y. 6.5 Views 6.5.1 Requisitos do SAP R/3 Uma view deve começar com Z ou Y e pode ter no máximo 10 caracteres. Views customizadas poderia começar com Z seguido pelo tipo da view e um separador. O restante do campo poderia ser usado para identificar o tabela primária da view. 6.6 Como criar uma tabela e diálogo de atualização Essa sessão mostra como criar uma tabela com campos que utilizam elementos de dados customizados e dominios. Também é apresentado como gerar a atualização da tabela, ou seja, para que possa ser feita sua manutenção via SM30. Por fim, é mostrado como criar uma transação para realizar a atulização desta tabela. Deve-se acessar a transação SE11, de dicionário de dados. É necessário colocar um nome para a tabela que inicie com Z ou Y, reservadaS pela SAP para a customização de seu sistema. Pressionar o botão Criar. Preencher os campos obrigatórios “Descrição breve” com uma descrição livre e o campo classe de entrega, onde se encontram algumas opções, as mais comuns são A e C. A: Tabela de aplicação (dados mestre e de movimento) C: Tabela de cliente, os dados são atualizados exclusivamente pelo cliente. No nosso exemplo utilizamos a classe A por se tratar de uma tabela mestre de dados de passageiros. Também deve ser escolhida a opção para “Data Browser/atualiz.visão tabs.”, onde define como a atualização é permitida por meio ferramentas standard. Escolhemos a opção “permitida” para que tanto via SE16 quanto via SM30 possa ser atualizada a tabela. Na aba “Campos” começamos a definir a estrutura dessa tabela. Deve-se lembrar que os nomes dos campos são livres, não necessitando iniciar com Z ou Y e não podendo apenas se repetir dentro da própria tabela. O primeiro campo que deve sempre ser colocado é o mandante(client), que deve ser chave e possuir um elemento de dados condizente com sua funcionalidade, por exemplo o MANDT. A seguir, criamos o campo RG. Este usará um elemento de dados Z, que será criado clicando duas vezes sobre seu nome. Como a tabela foi modificada é necessário salva-la e escolher o pacote ou classe de desenvolvimento (ou objeto local). Nesta parte colocamos a descrição do novo elemento de dados e escolhemos o tipo incorporado, onde abrimos mão de um domínio, pois a entrada de um numero ou código de RG é totalmente livre, portanto colocamos o tipo CHAR e comprimento 12. Na aba de “Denomin. Campo” colocar as denominações para cada tamanho solicitado. Pressionar o botão ativar na tela. O objeto a ser ativado já está escolhido, portanto é necessário apenas confirmar. Voltando para a tabela está sendo apresentado o novo campo com seu elemento de dados e características. Um terceiro campo é criado, é o campo Nome e este utilizará um elemento de dados que também deve ser criado. Dessa vez, é utilizado o Domínio, mas não com o efeito de limitar valores de entrada, mas sim para que o tamanho e categoria sejam definidos automaticamente. A SAP disponibiliza os tipo básicos em todos os tamanhos. No caso, utilizamos o CHAR40. Agora, será utilizado um domínio, também Z, que deve ser criado através de duplo clique. Confirme a criação do domínio. Preencha a descrição breve, tipo de dados e nº de posições. Nesse caso utilizamos apenas um caractere pois queremos identificar o sexo do passageiro apenas por M ou F. Para criar esse domínio que só permite M e F no preenchimento entrar na aba “Interv. Vals.” E preencha o valor fixo e sua descrição breve. Ativar o domínio e voltar . Na tela do elemento de dados, ativá-lo e voltar para a tabela. Criaremos um último campo, que também terá um elemento de dados Z a ser criado Com o duplo clique sobre o nome do novo elemento de dados, deve-se criá-lo após a confirmação. Porém, dessa vez utilizaremos um domínio já existente para o campo de código de companhia aérea. Este domínio possui além das características de tipo e tamanho, a tabela relacionada que define que entradas já existem para este campo. Criar as denominações do elemento de dados. Ativar e voltar para a tabela. Todos os campos da tabela já estão inseridos e com seus elementos de dados definidos. Para utilizar a ajuda de busca que é permitida para o campo CIA, devemos ligar este campo ao da tabela standard contida no domínio. Para isso, basta que selecione o campo e pressione o botão de chave externa Uma proposta é gerada automaticamente se pressionar o botão Sim. Geralmente a proposta é aceita. Nesse caso ela é simples e se torna claro sua funcionalidade. O sistema vai ligar as tabelas através do MANDT (campo sempre obrigatório das tabelas) e pelo campo do código da companhia aérea SCARR-CARRID e ZITT-CIA. Pressionar o botão “Transferir”. Com esse passo realizado, o próximo passo para a construção da tabela é definir suas configurações técnicas pressionando o botão Escolher a categoria de dados que pode ser: APPL0 dados mestre APPL1 dados de movimento APPL2 dados organizacionais e de customizing E a categoria de tamanho que é a determinação da necessidade de espaço prevista de uma tabela no banco de dados. Gravar as configurações e voltar . Voltando a tela inicial, entrar em suplementos->categoria de ampliação. Escolher a opção “não ampliável” e pressionar o botão aceitar. Ativar a tabela. Agora deve ser gerado o atualizador de tabela, que permitirá que a tabela seja atualizada via SM30. Ir a Utilitários->Gerador de atualização de tabela. Preencher o grupo de autorização, grupo de funções (que será criado automaticamente) e o tipo de atualização. Após preencher, pressionar o botão Procurar nº(s) tela. Escolher Propor nº(s) tela. Com o(s) numero(s) da(s) tela(s) definidos automaticamente, deve-se criar através do botão . Uma série de confirmações de pacotes para gravação será mostrada, podendo então escolher entre objeto local e gravação em pacote, que exige uma request a seguir. Pressionar voltar para retornar para a tela inicial da tabela. A tabela está criada e ativa, inclusive com as configurações de atualização. Sair totalmente da transação até a tela inicial do SAP. Agora, para inserir dados na tabela criada temos duas opções. A primeira é entrar na transação SM30. Colocar o nome da tabela e pressionar o botão Procurar diálogo de atualização.Colocar o nome da tabela que o sistema passará as opções disponíveis de visão ou preencherá na tela a única existente. Para acessar a tabela em modo de atualização, pressionar o botão Atual. Então é só criar ou modificar os dados como desejar. A outra forma de atualizar uma tabela é criando uma transação para isso. Logo, devemos acessar a transação SE93. Colocar o nome desejado para a transação que servirá para atualizar/criar/exibir os dados da tela. Pressionar o botão criar. Para essa funcionalidade que desejamos da transação é necessário escolher o tipo Transação com parâmetros e preencher o texto breve. Colocar transação SM30 e marcar a opção ignorar 1ª tela. Marcar Herdar características GUI e colocar os parâmetros abaixo. Para o VIEWNAME o valor tem que ser o nome da visão que deseja acessar e o campo UPDATE recebe X. Poderia ser usado o SHOW recebendo X o que significaria que ao entra na visão, inicialmente estaria em modo de exibição. Salvar a transação e sair até a tela inicial do SAP. Então, para acessar a atualização da tabela, digitar a transação recém criada no menu. Atualizar/criar/eliminar/exibir os dados operando normalmente essa transação já conhecida. 7.Transportes 7.1 Introdução Ordens (Change Requests): Recurso através do qual um conjunto de objetos C.D. ou C.I. que podem ser transferidos de um client para outro ou de uma instância para outra. Utilizam-se ordens para segurança na alteração de objetos já existentes, sejam eles standards do SAP ou customizados, e para efetuar controle de versões destes objetos. A nomenclatura das ordens é controlada pelo próprio SAP, que promove a criação do código do transporte, no momento em que a manutenção de objetos específicos exige que o mesmo seja associado a uma ordem. 7.2 Tipos de Objetos: Locais ou Transportáveis 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 a qual deverão ser criados no Cliente de destino. 7.2.1 Controlando e Administrando Transportes Uma ordem criada por um determinado usuário garante que os objetos a ele associados ficam “reservados” para tal usuário e somente serão liberados no momento que a ordem for encerrada. Quando uma ordem ainda permanece associado a um usuário, dizemos que ele está com o status de Modifiable. Quando uma ordem é encerrada, deixa de estar associado a um usuário e passa a ter o status de Released (liberada), ou seja, os objetos a ela associados são liberados para alteração por outros usuários. Enquanto uma ordem possui o status Modificable, pode-se manipular seus objetos livremente, mudar o usuário responsável transferindo a responsabilidade, ou simplesmente eliminar a ordem, liberando assim seus objetos, ao passo que uma ordem liberada é algo imutável. Transação SE01 - Permite verificar o conteúdo das ordens (objetos) e sua Log de transporte (sucessos, erros ou warnings) para os outros clientes e instâncias. Transação SE09 - Permite verificar as ordens de objetos Client Independent (Workbench Organizer) criados por um determinado usuário, bem como efetuar o Release de tasks e da ordem em si. Transação SE10 -> Permite verificar os transportes de objetos Client Dependent e Client Independent (Customazing Organizer) criados por um determinado usuário, bem como efetuar o Release de tasks e do transporte em si. Tais transações fornecem informações para que criemos a planilha de controle das ordens criadas e transportadas dentro de um projeto, permitindo assim, conhecermos o histórico da criação e transporte dos objetos entre as várias instâncias. 7.2.2 Workbench Organizer Esta transação permite controlar as ordens (requests) geradas através das alterações feitas nos objetos ABAP. As alterações são sempre registradas em ordens do tipo local e transportável. Ordem transportável: Alterações transportáveios para objetos do ABAP/4 Development Workbench são gravados em ordens transportáveis. Isto permite que as ordens possam ser enviadas aos demais ambientes do SAP, cada ordem gerada para um objeto ABAP/4 consiste em uma nova versão para este objeto, permitindo assim comparar, verificar e consolidar as alterações entre os ambientes de desenvolvimento e produção. Ordem Local: Alterações não transportáveis para objetos do ABAP/4 Development Workbench são gravados em ordens locais. Isto garante que as ordens estão sujeitas ao mesmo tipo de controle aplicado aos objetos transportáveis. Da mesma forma, quando uma ordem local é liberada são criadas versões para o objeto. Nesta opção podemos acompanhar o transporte de todas as requests que foram liberadas Clicando no botão de transportes podemos acompanhar todas as requests do tipo Desenvolvimento/Correção. 8. Report 8.1 Introdução Antes de iniciarmos o estudo dos Reports, devemos entender primeiro o conceito de Report dentro do SAP. Apesar do nome indicar que são relatórios, Report tem uma abrangência maior do que isso. Devemos entendê-los como programas, que são capazes de fazer muito mais coisas do que exibir relatórios. O ambiente de trabalho para criar os objetos ABAP, chama-se ABAP Workbench (pelo menu do SAP Ferramentas -> ABAP Workbench ou transação S001), nele podemos verificar todos os objetos relacionados a um programa (Repository Browser), acessar os objetos do dicionário de dados do SAP (Dictionary), criar/editar fontes do ABAP (Editor ABAP), criar funções (Function Builder), desenhar telas para os programas ABAP (Screen Painter) e por fim criar menus para inserir nas telas dos programas (Menu Painter). Códigos das transações associadas às opções do ABAP Workbench: Opção Transação Repository Browser SE80 Dictionary SE11 Editor ABAP SE38 Function Builder SE37 Screen Painter SE51 Menu Painter SE41 8.2 Editor ABAP (SE38) No editor ABAP, além de digitar o código fonte do programa, é possível também efetuar outras tarefas e adicionar outros inerentes à sua execução. Na janela de “Objetos parciais” há 5 opções básicas de objetos associados a um programa ABAP: Texto fonte: Através desta opção acionamos o editor de programas ABAP; Variantes: Definem-se os valores pré-definidos para os parâmetros de execução ; de um programa ABAP. Os parâmetros de um programa são definidos pelos comandos Parameters e Select-options do ABAP; Atributos: Definem-se os atributos de programa, como classe de desenvolvimento, título, categoria, status, aplicação, etc; Documentação: Textos com uma descrição breve do que o programa executa e as suas condições necessárias para execução; Elementos de texto: Definem-se os textos que serão relacionados às mensagens, rótulos de parâmetros do programa e títulos e nome de colunas para o relatório gerado pelo programa; Barra de botões da transação: Verificar sintaxe do programa ABAP Ativar o programa ABAP Executar o programa ABAP Lista de utilizações deste programa ABAP Análise do ambiente, ou seja, objetos utilizados no programa ABAP Ajuda online Eliminar o programa ABAP Copiar o programa ABAP Renomear o programa ABAP Início da execução em modo de depuração Executar com variante de dados de tela de seleção Administração das variantes de dados de tela de seleção Barra de botões do editor ABAP: Modificar/Exibir o código fonte Visualização das últimas versões ativa/inativa Entrar em outro objeto de desenvolvimento Apresentar os pontos de melhoria (Enhancement point) Verificar sintaxe do programa Ativar o programa Testar (executar) o programa Lista de utilizações Lista de objetos (visualização de SE80) Exibir janela de navegação Fechar a lista de objetos Ajuda online Definir/eliminar ponto de parada por sessão Definir/eliminar ponto de parada externo Modelo de código Identação, conversão de maiúsculas e etc. 8.3 Programa abap Existe um padrão de nomenclatura que deve ser seguido, não só para nome de programas, mas para todos osdesenvolvimentos no SAP R/3. Esses padrões podem variar de projeto a projeto e principalmente com a versão do SAP com o qual se está trabalhando. Em todos os casos os nomes dos desenvolvimentos começam sempre com Z ou Y . A aparência do editor não difere muito de um editor de texto bem simples, onde se é possível escrever linhas de comando e lógica. Um dos recursos permitidos para que se utilize um outro editor como o NotePad do Windows, e o recurso de Download e Upload. Através do menu Utilitários Upload/ Download, o sistema permite que códigos escritos em outros editores possam ser carregados no editor ABAP/4 e vice-versa. Esse recurso nos permite salvar os códigos ainda inativos ou incompletos. E extremamente útil mantermos um controle próprio das versões quando se está codificando. 8.4 Exemplos – Curso Básico 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 variáveis chamadas de variáveis do sistema. Elas possuem informações e dados do processamento, como o idioma de acesso (SY-LANGU) entre outros. Essas informações estão 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. Algumas das variáveis de sistema mais utilizadas são: SY-LANGU – Idioma do SAP no momento de execução SY-DATUM – Data no momento de execução SY-UZEIT – Hora no momento de execução SY-PAGNO – Página atual SY-TABIX – Índice da tabela(após loop, read table, etc..) SY-SUBRC – Retorno de comandos ABAP SY-DBCNT – Linhas de tabelas de BD encontradas na seleção SY-BATCH – ‘X’ se estiver executando em background SY-MANDT – Mandante no sistema SY-TCODE – Transação no momento de execução SY-VLINE – Linha horizontal ‘|’ SY-UNAME – Usuário executando o programa 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. EXEMPLO 3 REPORT ZEXP003. 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 TYPE SY-DATUM, HORA(8) VALUE '14:05:45'. NOME = 'Solution Center'. RG = 42159818. DATA = '20100217'. SKIP 2. WRITE: 'Nome:', NOME, / 'RG:', RG UNDER NOME, / 'Data:', DATA, / 'Hora:', HORA. 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 / 'BOTÃO 1 ACIONADO'. ELSE. WRITE / 'BOTÃO 2 ACIONADO'. ENDIF. Para dar nomes aos campos da tela de seleção entre em Ir para -> Elementos de texto -> Textos de seleção Ativar os elementos criados. EXEMPLO 6 REPORT ZEXP0006 MESSAGE-ID SV. TABLES SCARR. SELECT-OPTIONS: S_CARRID FOR SCARR-CARRID. DATA T_SCARR TYPE TABLE OF SCARR WITH HEADER LINE. SELECT * FROM SCARR INTO TABLE T_SCARR WHERE CARRID IN S_CARRID. IF SY-SUBRC EQ 0. LOOP AT T_SCARR. WRITE: / T_SCARR-CARRID, T_SCARR-CARRNAME. ULINE. ENDLOOP. ELSE. MESSAGE I000 WITH 'NAO EXISTEM REGISTROS!!!'. ENDIF. EXEMPLO 7 REPORT ZEXP0007. TABLES T005H. SELECT-OPTIONS: S_LAND1 FOR T005H-LAND1 NO INTERVALS. DATA: BEGIN OF T_T005H OCCURS 0, LAND1 TYPE T005H-LAND1, BEZEI TYPE T005H-BEZEI. DATA: END OF T_T005H. SELECT LAND1 BEZEI FROM T005H INTO TABLE T_T005H WHERE LAND1 IN S_LAND1. IF SY-SUBRC EQ 0. SORT T_T005H BY LAND1 ASCENDING. ELSE. MESSAGE I000(SV) WITH 'NAO EXISTEM REGISTROS!!!'. ENDIF. LOOP AT T_T005H. IF T_T005H-LAND1 = 'DE'. FORMAT COLOR COL_TOTAL. ELSE. FORMAT COLOR COL_NORMAL. ENDIF. WRITE: / T_T005H-LAND1, 21 T_T005H-BEZEI. ENDLOOP. TOP-OF-PAGE. FORMAT COLOR COL_HEADING. WRITE: ‘PAÍS’, 21 ‘CIDADE’. ULINE. FORMAT COLOR OFF. EXEMPLO 8 REPORT ZEXP0008 MESSAGE-ID SV. TABLES SPFLI. SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-T01. SELECT-OPTIONS: S_CARRID FOR SPFLI-CARRID DEFAULT 'AA', S_CONNID FOR SPFLI-CONNID DEFAULT '0017'. SELECTION-SCREEN END OF BLOCK B1. DATA: ARQ TYPE STRING VALUE 'C:\TEMP\CURSO.TXT'. DATA: BEGIN OF T_ZCURSO OCCURS 0, CARRID TYPE SPFLI-CARRID, CONNID TYPE SPFLI-CONNID, COUNTRYFR TYPE SPFLI-COUNTRYFR, CITYFROM TYPE SPFLI-CITYFROM, AIRPFROM TYPE SPFLI-AIRPFROM, END OF T_ZCURSO. SELECT CARRID CONNID COUNTRYFR CITYFROM AIRPFROM FROM SPFLI INTO TABLE T_ZCURSO WHERE CARRID IN S_CARRID AND CONNID IN S_CONNID. IF SY-SUBRC = 0. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING FILENAME = ARQ TABLES DATA_TAB = T_ZCURSO 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 NO_AUTHORITY = 10 OTHERS = 11. IF SY-SUBRC EQ 0. MESSAGE I000 WITH 'DOWNLOAD EFETUADO COM SUCESSO'. ELSE. MESSAGE I000 WITH 'ERRO NA EXECUÇÃO DO DOWNLOAD'. ENDIF. ELSE. MESSAGE I000 WITH 'NÃO FORAM SELECIONADOS REGISTROS'. ENDIF. 9 Processo Geral de Programação 9.1 Template Detalhado ABAP 9.2 Declaração de Dados Include ZZIHEADR Tabelas TABLES: <tab>. Ex: TABLES: SCARR, SPFLI. 9.2.1 Constantes e Variáveis DATA: <variavel> TYPE <tab>-<campo>. Ex: DATA: V_CIA TYPE SCARR-CARRID. DATA: <variavel> TYPE <tipo instalado>. (C, N, P, D, STRING) Ex: DATA: V_CIA(3) TYPE C. CONSTANTS: <constante1> TYPE <tab>-<campo> VALUE ‘<valor>’. Ex: DATA: C_MOEDA TYPE SCARR-CURRCODE VALUE ‘BRL’. <constante2> TYPE <tipo instalado> VALUE ‘<valor>’. Ex: DATA: C_MOEDA(3) TYPE C VALUE ‘BRL’. 9.2.3 Tabelas Internas COM TIPO DE TABELA TRANSPARENTE(STANDARD OU Z): DATA <tabela interna> TYPE TABLE OF <tabela transparente>. Ex: DATA: T_SCARR TYPE TABLE OF SCARR. COM HEADER: DATA <tabela interna> TYPE TABLE OF <tabela transparente> WITH HEADER LINE. Ex: DATA: T_SCARR TYPE TABLE OF SCARR WITH HEADER LINE. COM TIPO CUSTOMIZADO: DATA: BEGIN OF <tabela interna> OCCURS 0, <campo1> TYPE <tab>-<campo>, <campo2> TYPE <tipo instalado>, END OF <tabela interna>. Ex: DATA: BEGIN OF T_CIA OCCURS 0, CIA TYPE SCARR-CARRID, URL(50) TYPE C, END OF T_CIA. 9.2.4 Estruturas COM TIPO DE ESTRUTURA/TABELA TRANSPARENTE(STANDARD OU Z): DATA <estrutura> TYPE <estrutura transparente>. Ex: DATA E_VOOS TYPE SPFLI. COM TIPO CUSTOMIZADO: DATA: BEGIN OF <estrutura>, <campo1> TYPE <tab>-<campo>, <campo2> TYPE <tipo instalado>, END OF <estrutura>. Ex: DATA: BEGIN OF E_VOOS, CARRID TYPE SPFLI-CARRID, CONNID(4) TYPE N, END OF E_VOOS. 9.2.5 Tipos TYPES: BEGIN OF <tipo>, <campo1> TYPE <tab>-<campo>, <campo2> TYPE <tipo instalado>, END OF <tipo>. Ex: TYPES: BEGIN OF TY_URL, EMPRESA TYPE SCARR-CARRID, URL(50) TYPE C, END OF TY_URL. Ranges RANGES: <range> FOR <tab>-<campo>. (Declarar no início do programa TABLES: <tab>.) Ex: RANGES: R_CARRID FOR SCARR-CARRID. 9.2.6 Parâmetros de Entrada Select-Option SELECT-OPTIONS: <range_sel> FOR <tab>-<campo>. (Declarar no início do programa TABLES: <tab>.) Parameters PARAMETERS: <parametro> TYPE <tab>-<campo>. PARAMETERS: <checkbox> AS CHECKBOX. PARAMETERS: <radiobutton> RADIOBUTTON GROUP <grupo>. (Deve-se declarar ao menos dois radiobuttons do mesmo grupo) Quadro SELECTION-SCREEN BEGIN OF BLOCK <bloco> WITH FRAME TITLE <texto>. SELECTION-SCREEN END OF BLOCK <bloco>. 9.3 Lógica da Tela de Seleção Initialization; At Selection-Screen; Ao Comando do Usuário: At User-Command 9.3.1 Seleção e Impressão de Dados: Start-of-Selection; End-of-Selection; 9.3.2 Cabeçalho e RodapéTop-of-page; End-of-page; 9.3.3 Seção das Sub-rotinas Forms Section; 9.4 Comando “Select” O comando select é usado para acessar e selecionar dados de tabelas internas do SAP. Por existirem diversas variações do mesmo comando, é fundamental que o programador saiba o mecanismo de funcionamento de cada uma delas pois só assim poderá dar ao programa uma performance satisfatória. 9.4.1 Validações O select abaixo é usado para buscar se ao menos 1 registro existe na tabela para o valor requisitado, sem atribuir o resultado a nenhuma tabela, estrutura ou variável. É usado para validação de campos de tela, por exemplo, utilizando o SY-SUBRC como resposta se existe registros (SY-SUBRC = 0) ou não. SELECT * FROM <tab> UP TO 1 ROWS WHERE <campo> <operador> <valor>. ENDSELECT. Exemplo: SELECT * FROM scarr UP TO 1 ROWS WHERE carrid IN s_carrid. ENDSELECT. IF sy-subrc NE 0. MESSAGE e001(SV). ENDIF. 9.4.2 Seleção de um único valor para variável com chave completa O select abaixo é usado quando com a chave completa irá selececionar uma tabela. Se a cláusula WHERE é de valores únicos, o resultado será sempre, no máximo, um único registro. SELECT SINGLE <campo> FROM <tb> INTO <variavel> WHERE <campo> <operador> <valor>. Exemplo: SELECT SINGLE carrid FROM scarr INTO v_carrid WHERE carrid EQ p_carrid. IF sy-subrc EQ 0. WRITE v_carrid. ENDIF. Obs.: Pode-se receber mais de um campo utilizando uma estrutura na cláusula INTO. 9.4.3 Seleção de mais valores em uma tabela interna O select abaixo é usado quando o resultado pode ser mais de um registro. SELECT <campos> FROM <tab> INTO TABLE <tabela interna> WHERE <campo> <operador> <valor>. Exemplo: SELECT * FROM scarr INTO TABLE t_scarr WHERE carrid IN s_carrid. IF sy-subrc EQ 0. LOOP AT t_scarr. WRITE / t_scarr-carrid. ENDLOOP. ENDIF. 9.4.4 Seleção para todas as entradas selecionadas anteriormente O select abaixo é usado quando deseja-se selecionar uma tabela de acordo com o resultado obtido em uma seleção anterior. SELECT <campos> FROM <tab> INTO TABLE <tabela interna> FOR ALL ENTRIES IN <tabela interna anterior> WHERE <campo> <operador> <valor>. Exemplo: SELECT * FROM scarr INTO TABLE t_scarr WHERE carrid IN s_carrid. IF sy-subrc EQ 0. SELECT * FROM spfli INTO TABLE t_spli FOR ALL ENTRIES WHERE carrid EQ t_scarr-carrid. ENDIF. Obs.: Lembre-se de verificar se a tabela usada no FOR ALL ENTRIES não está vazia. Também deve-se usar na cláusula SELECT todos os campos chaves. Eliminar registros repetidos dos campos usados na cláusula WHERE da tabela do FOR ALL ENTRIES. 9.5 Processamento 9.5.1 Acessar todos os registros de uma tabela LOOP AT <tabela interna>. ENDLOOP. 9.5.2 Ler uma tabela de acordo com a chave escolhida READ TABLE <tabela interna> WITH KEY <campo> = <valor> BINARY SEARCH. Obs.: Para utilizar o BINARY SEARCH deve-se ordenar de forma crescente a tabela antes com o comando SORT. 9.5.3 Ordenar tabela interna SORT <tabela interna> BY <campo1> <campo2> ASCENDING. (crescente) SORT <tabela interna> BY <campo1> <campo2> DESCENDING. (decrescente) 9.5.4 Obter número de linhas de uma tabela interna DESCRIBE TABLE <tabela interna> LINES <variavel tipo I>. 9.5.5 Inserir a informação do cabeçalho na tabela interna APPEND <tabela interna>. 9.5.6 Limpar o cabeçalho de uma tabela interna CLEAR <tabela interna>. 9.5.7 Apagar todos registros da tabela interna REFRESH <tabela interna>. 9.5.8 Eliminar registros de uma tabela transparente DELETE FROM <tab> WHERE <campo> = <valor>. 9.5.9 Eliminar registros de uma tabela interna por range DELETE <tabela interna> WHERE <campo> IN <range>. ou DELETE <tabela interna> WHERE NOT <campo> IN <range>. 9.5.10 Eliminar registros repetidos por uma determinada comparação em uma tabela interna Realizar antes o SORT com os mesmos campos da comparação DELETE ADJACENT DUPLICATES FROM <tabela interna> COMPARING <campo>. 9.5.11 Substituir um mesmo campo em toda tabela interna sem a necessidade de LOOP <tabela interna>-<campo> = <valor>. MODIFY <tabela interna> TRANSPORTING <valor> WHERE <campo> IS INITIAL.(condição do campo a ser substituído) ABAP Foundation 77 9.5.12 Outros comandos(buscar detalhes e variações com a ajuda F1): TRANSLATE REPLACE MOVE WRITE 9.5.13 Criar rotinas internas PERFORM <nome do perform>. 10. ALV GRID 10.1 Introdução O ALV Grid é uma ferramenta flexível para exibição de relatórios ou árvore. São disponibilizados botões que permitem ao usuário manipular os dados (classificar, filtrar, somar). Além dos botões standards do sistema, é possível criar novos botões conforme a necessidade do usuário. Isto pode eliminar certas etapas no processo de gerenciamento de eventos para controles ATENÇÃO : O ALV GRID não permite processamento em Background. Caso seja executado dessa forma o relatório será formado como List e com a formatação estática. 10.2 Utilização O Abap List Viewer padroniza e simplifica o uso de listas e relatórios no sistema R/3. Pode- se especificar os campos a serem exibidos no relatório e modificar a seqüência em que esses campos são exibidos. Além disso, pode-se ajustar a largura das colunas individuais para atender a requisitos específicos. O ALV permite : Usar variantes de exibição standard predefinidas pela SAP Modificar layout Selecionar Layout Gravar layout Ordenar os dados : Ordenar as linhas de acordo com os valores das colunas, em seqüência crescente e decrescente Ordenar Crescente Ordenar Decrescente Definir um filtro : Exibir somente os campos desejados Definir Seleção de dados Formar totais e subtotais : Em uma lista, é possível calcular totais e subtotais de uma ou mais colunas selecionadas. Total Sub-Total Exibição de informações detalhadas : Pode-se acessar informações detalhada de linhas individuais da lista Detalhe Pesquisa : É possível pesquisar informações específicas Pesquisar Impressão de Lista e pré-visualização : Pode-se imprimir as listas e chamar uma pré- exibição antes de imprimir Impressão Pré-Visualização Exportação de dados : Pode-se copiar as listas, por exemplo, para uma planilha ou grava-las como arquivo local Arquivo Local Excel Processamento de Texto Destinatário de Correio Eletrônico – Enviar relatório via correio SAP Deslocar colunas: Mudar coluna de lugar O ALV Grid é formado basicamente por : Uma barra de ferramenta; Um título; Uma lista de saída; Barra de Ferramenta Relatório ou Lista 10.3 Conceito de Variante de Exibição A variante de exibição é utilizada para exibir o relatório em vários formatos diferentes. Cada usuário pode criar a sua própria variante e utilizá-la para visualizar o relatório. Por exemplo : Um relatório que tenha 20 campos exibidos na tela. Você pode eliminar os campos que não irá utilizar, acrescentar totalizadores, ordenação, mudar os campos de posição, etc. *Tela Normal do relatório *Eliminando campos de exibição ABAP Foundation 83 *Ordenar tabela de saída *Somatória de assentos livres *Utilizar variantes do relatório EVENTO – INITIALIZATION Neste evento você verificará se existe uma variante definida como default para o relatório através da função: REUSE_ALV_VARIANT_DEFAULT_GET. Variável : def_variante TYPE disvariant. Parâmetro da tela de seleção : PARAMETERS : p_vari TYPE disvariant-variant. Função : 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. EVENTO – AT SELECTION-SCREEN ON VALUE-REQUEST Neste evento você deverá criar uma rotina para exibir as variantes já existentes para o relatório em questão. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari. PERFORM f_f4_variant. Variáveis : variant_exit(01) TYPE c, variante LIKE disvariant, Função : CALL FUNCTION 'REUSE_ALV_VARIANT_F4' EXPORTINGis_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. EVENTO – AT SELECTION-SCREEN Neste evento você irá tratar a variante informada, ou seja, verificar a sua existência, pois o usuário pode ter digitado um nome qualquer ao invés de utilizar o F4. AT SELECTION-SCREEN. PERFORM f_variante. Verificar se existe valor no parâmetro 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 função 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 não existir valor no parâmetro inicializar a estrutura Variante CLEAR variante. variante-report = v_repid. ENDIF. 10.4 FORMATAÇÃO DO RELATÓRIO EM ALV Neste tópico iremos mostrar as rotinas necessárias para formatação de um relatório em ALV. Formatação geral, de campos, botões e etc. 10.4.1 Definições de dados para o layout ALV Definição de Tipos Grupos de tipo TYPE-POOLS: slis. TYPE-POOLS: kkblo. Workareas DATA: w_layout TYPE slis_layout_alv, w_print TYPE slis_print_alv, w_event TYPE slis_alv_event, w_line TYPE slis_listheader. DATA: colinfo TYPE kkblo_specialcol. Tabela Interna DATA: l_sort TYPE slis_t_sortinfo_alv, l_event TYPE slis_t_event, l_top_of_page TYPE slis_t_listheader, t_campos TYPE slis_t_fieldcat_alv WITH HEADER LINE. Tabela Interna para Impressão do Relatório DATA : BEGIN OF t_relat OCCURS 0, Campo1 Campo2 Campo3 ......... ......... ......... box(1) TYPE c, " Campo Selecao Linha colinfo TYPE kkblo_t_specialcol, “ Formatação de Colunas END OF t_relat. 10.5 Rotinas para Formatação do Layout PERFORM f_evento_lista. " Eventos da Lista O evento mais comum a ser definido é o TOP_OF_PAGE para impressão do cabeçalho na lista Executar a função para selecionar todos os eventos possíveis 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 então cadastrar o nome do form do seu programa (que trata o cabeçalho) 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_cabeçalho e inserir o código abaixo. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = l_top_of_page. Outros eventos que retornarão da função 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 estão gravados dentro do Tipo SLIS PERFORM f_cabec_lista. " Cabecalho da Lista Neste FORM iremos criar os textos que deverão sair no cabeçalho do relatório * 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 irão colocar os textos em formatos diferentes (letra, negrito ou itálico). Estas informações serão gravadas na tabela interna T_TOP_OF_PAGE PERFORM f_layout. " Layout Geral da Lista Neste FORM iremos formatar o relatório nos parâmetros gerais, ou seja, a aparëncia do relatório. Veja abaixo os campos que podem ser formatados: Campo Descrição Parâmetros Gerais no_colhead Sem Títulos (Cabeçalho) no_hotspot Títulos sem Hotspot no_vline Colunas separadas por espaços Zebra Listrado (Uma linha clara outra escura) cell_merge Não suprimir a replicação de campo Edit Edição somente para o grid todo edit_mode Edição somente para o grid todo numc_sum Total para campos numéricos no_input Somente exibição de campos f2code Reprep no_keyfix Não fixar coluna chave expand_all Expandir todas as posições no_author Nenhuma verificação padrão da autoridade PF-status def_status Status Default item_text Opções de Display colwidth_optimize no_min_linesize Tamanho da linha = tamanho da lista 91 min_linesize Default 80 max_linesize Default 250 Window_titlebar no_uline_hs Exceções lights_fieldname Nome do campo para exceção lights_tabname Nome da tabela para exceção lights_rollname lights_condense Somatórios no_sumchoice Sem escolha para Somar para cima no_totalline Sem Total Linha no_subchoice no_subtotals Sem Sub-Total no_unit_splitting totals_before_items Mostrar total antes dos itens totals_only Mostrar somente os totais totals_text Texto para a 1a. coluna na linha de total subtotals_text Texto para a 1a. coluna na linha de Sub-total Interações box_fieldname Nome do Campo para Checkbox box_tabname box_rollname expand_fieldname hotspot_fieldname Nome do Campo para Hotspot confirmation_prompt Confirmar Saída da lista key_hotspot keys as hotspot " K_KEYHOT flexible_key Mover as colunas chaves group_buttons Grupo de Botões get_selinfos Ler tela de seleção group_change_edit Settings by user for new group no_scrolling Sem movimentar tela Detalhes Tela detail_popup Mostrar detalhes em nova janela detail_initial_lines Mostrar somente as linhas iniciais detail_titlebar Título para tela de detalhes Mostar Variantes header_text Texto para o botão default_item Cores info_fieldname Coltab_fieldname Nome do campo que conterá as cores das colunas Outros list_append Sem chamada de tela xifunckey Extended interaction(SAPQuery) xidirect Extended INTeraction(SAPQuery) dtc_layout Configuração de layout para Tabstrip *Tela de Detalhe Popup do detalhe Titulo Detalhe PERFORM f_sort. " Ordenação/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. Segue abaixo os campos que podem ser formatados para cada campo de ordenação Campo Descrição Spos Seqüência de Ordenação Fieldname Nome do campo Tabname Nome da tabela a qual pertence o campo Up Ordenação Menor para Maior Down Ordenação Maior para Menor Group Subtot Gerar Sub Total Comp Expa Obligatory PERFORM f_info_campos. Neste FORM você irá definir o layout de cada coluna do relatório. Veja abaixo os campos que podem ser formatados : Campo Descrição row_pos Saída na linha (1,2,3,...) col_pos Posição da coluna Fieldname Nome do campo Tabname Nome da tabela interna Currency Moeda Cfieldname Campo com Unidade de Moeda Ctabname Tabela referência para Unidade Moeda ifieldname initial column Quantity Unidade de Medida qfieldname Campo com Unidade Medida Qtabname Tabela com Unidade Medida Round Arredondar Campo Exponent Expoente para floats Key Campo como Chave Icon Campo como Ícone Symbol Campo como Símbolo Checkbox Campo como Checkbox Just Alinhamento – R (Direita) L (Esquerda) C (Centralizado) Lzero leading zero no_sign Sem sinal no_zero Não imprimir campos zerados no_convext edit_mask Máscara de Edição emphasize Campo em destaque fix_column Fixar Coluna do_sum Totalizar Coluna no_out Não exibir o campo Tech outputlen Tamanho do campo para saída dos dados Offset seltext_l Descrição Longa do Campo seltext_m DescriçãoMédia do Campo seltext_s Descrição Curta do Campo Ddictxt Indicação de Qual descrição utilizar - (S)hort (M)iddle (L)ong rollname Datatype Tipo do Campo Inttype Tipo do Campo Intlen Tamanho do Campo Lowercase Letra Minúscula ref_fieldname Campo referência ref_tabname Tabela referência Roundfieldname Nome campo para Arredondamento Roundtabname Nome tabela decimalsfieldname Nome campo para Decimais decimalstabname Nome tabela decimals_out Número de decimais para escrever um número text_fieldname reptext_ddic Texto para a coluna ddic_outputlen Tamanho do Campo key_sel field not obligatory no_sum Não totalizar o campo sp_group Grupo Reprep Input Campo como input de dados Edit Uso interno Hotspot Campo como hotspot PERFORM f_print. Neste FORM você irá definir dados de impressão. Campo Descrição prnt_info Informações de Impressão Print prnt_title no_coverpage no_new_page reserve_lines Linhas reservadas para o final da página no_print_listinfos Não imprimir página com número de registros selecionados no_change_print_params Não alterar tamanho de linha 10.6 Exibir Relatório Neste FORM você irá exibir o relatório. 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 = 'X' I_SAVE = v_save IS_VARIANT = variante IT_EVENTS = t_event[] TABLES t_outtab = t_relat EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. STOP. ENDIF. 10.7 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 função de exibição do relatório) 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 relatório a cor de cada coluna. Isso deve ser feito no momento em que você estiver gerando a tabela final para a impressão. 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 são : FIELDNAME = Nome do campo na tabela interna COLOR-COR = Número da cor COLOR-INT = Intensidade da cor 1 : Intenso Branco : cor normal 10.8 Como mudar a cor de uma linha Para mudar a cor da linha toda e não somente de uma coluna você deve seguir o mesmo procedimento da coluna porém fazer para todas as colunas do relatório. Por exemplo sua tabela tem 5 campos então : 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 deverão ter a mesma cor e intensidade colinfo-color-col = '3'. " Amarelo colinfo-color-int = '1'. " 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 colinfo-fieldname = 'CAMPO5. APPEND colinfo TO t_relat-colinfo. 10.9 Como utilizar outros botões na tela Para inserir novos botões na tela, você deve copiar o Status Gui Standard STANDARD_FULLSCREEN para outro a ser utilizado no seu relatório. Após a cópia você deve retirar botões que não serão utilizados e inserir os seus novos botões : O tratamento destes novos botões deverá ser no FORM F_USER_COMMAND especificado na chamada da função de exibição do relatório : CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' form f_user_command USING p_ucomm LIKE sy-ucomm p_selfield TYPE slis_selfield. CASE p_ucomm. * 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 vôo BALVST03_GRID - Programa teste visor de listas ABAP: lista simples modelo vôo BALVHT01 - Programa de teste ALV: lista seqüencial hierárquica modelo de vôo Na versão 4.6 todos os programas BCALV 11 OnLine Online são tipos de programas que, como o próprio nome indica, funcionam online, ou seja, instantaneamente. Por isso eles são dotados de uma maior capacidade de customização das telas e maior flexibilidade para criarem uma interface mais amigável com o usuário. Eles são especialmente úteis na criação de aplicações que necessitem de subtelas ou quando é necessário fornecer informações aos usuários de outra maneira que não um relatório. Na maioria dos casos, os programas standard funcionam assim. 11.1 Estrutura do Programa OnLine. Tela - Desenho da Tela (Definição dos Campos) - Lista de campos para tratamento de erros - Definição dos módulos PBO e PAI relacionados com a tela GUI Status e GUI Title Definição dos comandos de botão e menus disponíveis: - Definição do título de tela - Habilitação dos comandos standards existentes - Criação de novos comandos necessários Evento PBO Evento executado antes da exibição da tela para o usuário: - Definição do GUI Status e GUI Title para a tela correspondente - Seleção inicial de dados e atribuição de valores a serem exibidos na tela Evento PAI - Verificação do código de comando executado (definido no GUI Status) - Código ABAP para execução da lógica do comando 11.2 Criando um Programa OnLine. Na SE38, crie um programa. O tipo do programa deve ser Pool de módulos. Grave como local e a tela do editor será aberta. Pressione o botão de exibir a lista de objetos ou CTRL + SHIFT + F5. Criar uma tela através do menu. Preencha o número da tela. Preencha a descrição da tela. Clique no botão Layout para montar os campos da tela. Uma tela para montar o layout será exibida. Através dos botões à esquerda, monte a tela. Primeiro para montar o quadro, aperta o botão BOX e colocar um nome e sua descrição. Depois para colocar o texto do parâmetro de tela pressionar o botão TEXT FIELD e dar um nome e sua descrição. Para colocar o campo de entrada/saída para este parâmetro, pressionar o botão Input/Output Field. Caso o nome do campo faça referência a um campo existente no dicionário de dados, será questionado se deseja seguir suas características standard(tamanho, ajuda de pesquisa, etc). Pressionando a confirmação o campo assume as características do standard. Salve, ative e volte para a tela inicial. A lógica de processamento paraessa primeira tela está na aba, como mostra a figura abaixo. Descomente o MODULE STATUS_9000, esse módulo que irá definir. Dê um duplo clique em cima do deste módulo. Será pedido para criar o objeto, aceite. Pode ser criado dentro do programa principal, então aceite. Será inserida a lógica deste módulo no programa, descomente e insira um nome para a linha do PF-STATUS. O duplo clique sobre o nome do PF-STATUS irá criar esse objeto. Após as confirmações, a tela com a descrição é aberta para preenchimento. A seguinte tela será aberta. Preencher as teclas de função de Salvar, Voltar, Sair e Cancelar Inserir um botão para chamar uma próxima tela que pode ser criada. Preencher os dados e aceitar. Escolher uma tecla de atalho para esse novo botão. Assim os botões da tela são criados. Volte para a tela do programa principal clicando duas vezes sobre o nome do programa e ative o programa. ` A tela criada pode ser testada pressionando o botão de testar tela ou F8. Porém, na visualização da tela não estão os botões criados no PF-Status, por isso deve-se criar uma transação para o programa, como segue: Na SE93 coloque o nome da transação e pressione o botão para Criar ou F5. Colocar a descrição e escolher a opção de Programa e Tela(Program and screen(dialog transaction)). Colocar o nome do programa criado anteriormente e a tela inicial do mesmo. Marcar as opções de Suporte GUI e salvar. Ao salvar, escolher o pacote desejado ou pressionar o botão OBJETO LOCAL. Sair da transação. Através da transação criada pode-se visualizar a tela completa, inclusive com os botões. Mas os botões que estão em tela ainda não têm nenhuma função, ou seja, apertando os botões nada ocorre. Deve-se voltar ao programa criado e no módulo PAI, deve-se descontentar e criar o MODULE USER_COMMAND_9000, este será o responsável por controlar a função dos botões. Para identificar o botão pressionado, deve-se utilizar a variável de sistema SY-UCOMM, como o exemplo abaixo. Assim, deve-se continuar a montar as telas e os controles de PBO e PAI, para que realize todas as funcionalidades do programa sugerido. 12 BDC SESSION ABAP/4 tem uma técnica de programação para a colocação de dados dentro do SAP conhecida como Batch Data Communication Session ou BDC Session. 12.1 Passos para criação de uma BDC Session - Identificar as telas que a transação processará - Escrever o programa em ABAP para gerar a tabela de BDC que submeterá os dados na transação - Submeter a tabela de BDC para o sistema em modo batch ou através do comando CALL TRANSACTION. 12.2 Identificando telas em uma transação Quando um usuário entra com dados no SAP utiliza transações. Cada transação tem várias telas identificadas por um nome de programa e um número de tela. As informações sobre a tela atual é obtida através do menu System -> Status. Além de identificar o nome do programa e número da tela, deve-se também identificar o(s) campo(s) que se deseja entrar com os dados. Para conseguir saber o nome da tabela/estrutura e o nome do campo deve-se clicar sobre o campo que entraria com o dado e teclar <F1> seguido do botão “Informações Técnicas”. Nesta tela consegue-se quase todos os dados para a sessão de BDC. O nome do programa, o número da tela e o número da tela e o nome do campo para sessão de Batch Input. Além destes dados deve-se saber quais as teclas/funções de movimentação entre as telas. Por exemplo, se para passar para a próxima tela da transação deve-se teclar <ENTER>, o código para a BDC é ‘/00’. De modo geral, deve-se pensar na transação sem a utilização do mouse. Se um botão deve ser clicado pelo mouse deve-se descobrir qual o nome da função deste botão e passar este código para a tabela BDC 12.3 Tabela BDC A tabela BDC é uma tabela interna com uma estrutura específica no qual é preenchida para ser enviada para a sessão batch input. Esta estrutura se chama BDCDATA e tem os seguintes campos: Campo Tipo Descrição Program Char(40) Nome do programa da transação Dynpro Numc(4) Número da tela da transação dynbegin Char(1) Indicador de uma nova tela Fnam Char(132) Nome do campo da tela Fval Char(132) Valor a ser colocado no campo De acordo com o mapeamento da tela, essa tabela interna deve ser preenchida 12.4 Transação SHDB Para facilitar o trabalho de mapeamento dos campos, o SAP dispões de uma ferramenta que faz isso para o programador. É a transação SHDB. Essa transação monitora todos os passos que o usuário faz quando utiliza uma transação e a resposta do SHDB é uma lista com os campos e telas que foram utilizados, permitindo que o programador crie as tabelas BDC. Há ainda um recurso que gera automaticamente o código do programa para a criação da tabela BDC, facilitando ainda mais o trabalho, mas a lista já é suficiente e às vezes preferível, para mantermos os mesmos padrões nos códigos. Essa transação funciona da seguinte forma: Na primeira tela, estão os mapeamentos já realizados. Pressionando “Nova gravação” e então informa-se um nome para o mapeamento que se deseja efetuar e a transação que será gravada: Ao pressionar o botão de “Executar registro”, inicia-se o procedimento normal da transação e ao final a tabela será criada, e deve-se gravar. 12.5 Inserindo mapeamento no código ABAP Com o mapeamento deve-se criar a tabela interna no programa ABAP. Uma maneira de facilitar é utilizar o PERFORM abaixo(exemplo baseado na primeira tela do mapeamento acima): Primeiro deve-se declarar a tabela interna no início do programa: DATA: T_BDC TYPE TABLE OF BDCDATA WITH HEADER LINE. Um perform com parâmetros deve ser chamado a seguir: PERFORM f_criar_bdc USING: ‘X’ ‘ZCOMPANHIA’ ‘9000’, ‘ ‘ ‘BDC_OKCODE’ ‘=PROX’, ‘ ‘ ‘V_COD’ ‘GO’. O conteúdo do form é o seguinte: *&--------------------------------------------------------- *& Form f_criar_bdc *&--------------------------------------------------------- * CRIAR A TABELA DO MAPEAMENTO DO BATCH INPUT *---------------------------------------------------------- FORM f_criar_bdc USING VALOR_1 TYPE C VALOR_2 TYPE C VALOR_3. IF VALOR_1 = 'X'. T_BDC-PROGRAM = VALOR_2. T_BDC-DYNPRO = VALOR_3. T_BDC-DYNBEGIN = VALOR_1. APPEND T_BDC. ELSE. T_BDC-FNAM = VALOR_2. T_BDC-FVAL = VALOR_3. APPEND T_BDC. ENDIF. CLEAR T_BDC. ENDFORM. " f_criar_bdc 12.6 Enviando os dados da tabela BDC para o sistema através de CALL TRANSACTION O comando CALL TRANSACTION possibilita o processamento de uma tabela BDC imediamente pelo sistema. Os dados da tabela BDC são utilizados para executar a transação e o return code deste comando nos mostra se a transação foi executada com sucesso ou não. A sintaxe deste comando é: CALL TRANSACTION <transação> USING <bdctab> MODE <modo>. Os modos para executar este comando são: A – Mostra todas as telas E – Mostra apenas telas com erros N – Não mostra as telas Em adição ao return code, podemos utilizar as variáveis de sistema para reparar a mensagem que o SAP enviou ao término do processamento. As variáveis mais utilizadas são: SY-MSGID, SY-MSGV1, SY-MSGV2, SY-MSGV3 e SY-MSGV4. 12.7 Enviando os dados via pasta de batch input A pasta de batch input contém o mesmo mapeamento que seria executado via Call Transaction, porém ela é armazenada na transação SM35 para ser executada depois, por exemplo, após uma conferência. Para criar uma pasta de batch input deve-se utilizar a função, como no exemplo: CALL FUNCTION 'BDC_OPEN_GROUP' EXPORTING CLIENT = SY-MANDT GROUP = PASTA_NOME KEEP = 'X' USER = sy-uname EXCEPTIONS CLIENT_INVALID = 1 GROUP_INVALID = 2 GROUP_IS_LOCKED = 3 INTERNAL_ERROR = 4 QUEUE_ERROR = 5 RUNNING = 6 SYSTEM_LOCK_ERROR = 7 USER_INVALID = 8 OTHERS = 9. Para inserir o mapeamento na pasta utilizar a função, como abaixo, passando a tabela bdc montada. CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = 'MM01' TABLES DYNPROTAB = T_BDC EXCEPTIONS INTERNAL_ERROR = 1 NOT_OPEN= 2 QUEUE_ERROR = 3 TCODE_INVALID = 4 PRINTING_INVALID = 5 POSTING_INVALID = 6 OTHERS = 7. Após inserir todos os dados do mapeamento necessários para a execução, deve-se fechar a pasta de batch input, utilizando a função, como segue: CALL FUNCTION 'BDC_CLOSE_GROUP' EXCEPTIONS NOT_OPEN = 1 QUEUE_ERROR = 2 OTHERS = 3. A execução da pasta pode ser feita através da transação SM35. Deve-se escolher a pasta desejada e pressionar o botão de processar
Compartilhar