Dicionário de Dados(DDIC) O R/3 Data Dictionary (ou DDIC para abreviar) é um utilitário para definir objetos de dados. Para utilizar o DDIC, você pode criar e armazenar objetos como tabelas, estruturas e visualizações. Para chamar o Data Dictionary, execute os seguintes passos: Digite na caixa de texto Command, na barra de ferramenta Standard na parte superior da janela do minisap: /NSE11. O DDIC está dentro do sistema R/3, Você pode pensar nele como estando acima de um banco de dados como Oracle ou Informix e agindo como um controle remoto, que gera e envia instruções de SQL para ele. Por exemplo, você pode criar uma definição de tabela no DDIC. Quando você ativa a definição de tabela, as instruções de SQL são geradas e enviadas para o RDBMS, fazendo com que ele crie a tabela real no banco de dados. Quando quiser modificar a tabela, você deve modificar a definição de tabela no DDIC. Quando ativar a tabela novamente, mais SQL é gerado, fazendo com que o RDBMS modifique a tabela. Utilize o DDIC para criar e modificar todos os objetos de banco de dados. Não modifique uma tabela ou qualquer coisa no nível de RDBMS. A definição Data Dictionary não pode atualizar a si própria e ela estará fora de sincronia com o banco de dados. Isso pode causar erros de aplicativo e até levar a uma perda de integridade dos dados. No R/3 uma tabela é uma coleção de linhas. Cada linha contém campos, também chamados de colunas. Normalmente, dentro de uma tabela, cada linha tem o mesmo número de colunas, como as outras linhas da tabela. Uma tabela armazena dados persistentes. Em outras palavras, se você coloca dados em uma tabela, eles permanecem aí depois que seu programa finalizar. Eles permanecerão até serem alterados ou excluídos por seu programa ou outro. O nome de uma tabela é único dentro do sistema R/3 inteiro. Quando você olha uma tabela no DDIC, está visualizando a descrição de uma tabela no banco de dados subjacente. Você não está olhando diretamente a própria tabela de banco de dados. ´ Curso de ABAP – Capitulo 3 1/29 Há no dicionário de dados do R/3 três tipos de tabelas: Transparentes, Pool e Cluster. O primeiro tipo é o mais comum e provavelmente sempre será o tipo a ser utilizado ao se criar uma nova tabela em customizações do sistema. Pool e cluster são tipos de armazenamentos proprietários da SAP. Segue abaixo uma comparação entre os três tipos de tabela: Transparente: Uma tabela transparente no dicionário tem relacionamento umpara-um com uma tabela no banco de dados. Sua estrutura no dicionário de dados do R/3 corresponde a uma única tabela de banco de dados. Para cada definição de tabela transparente no dicionário, há uma tabela associada no banco de dados. A tabela de banco de dados tem o mesmo nome, o mesmo número de campos e os campos têm os mesmos nomes que a definição de tabela do R/3. Quando examinar a definição de uma tabela transparente do R/3, você pode achar que está olhando para a própria tabela de banco de dados. Pool: Uma tabela de pool no R/3 tem um relacionamento muitos-para-um com uma tabela no banco de dados. Para uma tabela no banco de dados, há muitas tabelas no dicionário de dados do R/3. A tabela no banco de dados tem um nome diferente do das tabelas no dicionário de dados, tem um número de campos diferente e os campos também têm nomes diferentes. O R/3 utiliza pools de tabela para armazenar um grande número (dezenas a milhares) de tabelas muito pequenas (aproximadamente de 10 a 100 linhas cada uma). Os pools de tabela reduzem a quantidade de recursos de banco de dados necessários quando muitas tabelas pequenas têm de ser abertas ao mesmo tempo. A SAP os utiliza para dados de sistema. Cluster: São utilizadas para armazenar dados de algumas (aproximadamente de 2 a 10) tabelas muito grandes. As tabelas de cluster seriam utilizadas quando essas tabelas tivessem uma parte de suas chaves primárias em comum e se os dados nessas tabelas fossem todos acessados simultaneamente. Os clusters de tabela contêm menos tabelas que os pools de tabela e, diferente dos pools de tabela, a chave primária de cada tabela dentro do cluster de tabelas começa com o mesmo campo ou campos. As linhas das tabelas de cluster são combinadas em uma única linha no cluster de tabelas. As linhas são combinadas com base na parte da chave primária que elas têm em comum. Assim, quando uma linha é lida de qualquer uma das tabelas no cluster, todas as linhas relacionadas em todas as tabelas de cluster também são recuperadas, mas apenas uma única operação de I/O é necessária. Um cluster é vantajoso no caso em que os dados são acessados a partir de múltiplas tabelas simultaneamente e essas tabelas têm pelo menos um de seus campos de chave primária em comum. As tabelas de cluster reduzem o número de leituras do banco de dados e assim melhoram o desempenho. As tabelas de pool e de cluster são normalmente utilizadas somente pela SAP e não pelos desenvolvimentos dos clientes, provavelmente por causa do formato proprietário dessas tabelas dentro do banco de dados e por causa das restrições técnicas colocadas sobre sua utilização dentro dos programas ABAP/4, como a seguir: Não se pode criar índices secundários; Não se pode utilizar select distinct ou group by; Não se pode utilizar SQL nativo; Não se pode especificar nomes de campos depois da cláusula order by. A única variação permitida é order by primary key. Curso de ABAP – Capitulo 3 2/29 No caso específico das tabelas de cluster, não é possível realizar leitura através de joins, nem a criação de views. Explorando os componentes de tabela Uma tabela é composta de campos. Para criar um campo você precisa de um elemento de dados. O elemento de dados contém rótulos de campo e a documentação on-line(também chamada ajuda F1) para o campo. Ele é puramente descritivo; contém as características semânticas para o campo, também conhecidas como “contexto do negócio”. Os rótulos que você oferece dentro de um elemento de dados serão exibidos na tela ao lado de um campo de entrada. O elemento de dados também contém documentação que é exibida quando o usuário pede ajuda nesse campo pressionando a tecla F1. Uma definição de elemento de dados exige um domínio. O domínio contém a característica técnica de um campo, como o comprimento do campo e o tipo de dado. Os domínios e os elementos de dados são reutilizáveis. Um domínio pode ser utilizado em mais de um elemento de dados, e um elemento de dados pode ser utilizado em mais de um campo e em mais de uma tabela. Por exemplo, imagine que você precise projetar uma tabela de informações de cliente chamada ZCLIENTE que deve conter os números de telefone comercial, fax e residencial. Para criar um campo, você normalmente inicia criando um domínio para ele. Neste caso, você pode criar um domínio genérico de número de telefone, chamado zfone e dar a ele um tipo de dado de CHAR e um comprimento de 12. Isso seria um domínio genérico de número de telefone; a maioria dos tipos de números de telefone poderia ser armazenada utilizando-se esse domínio. Como esse, ele pode ser utilizado para definir tipos específicos de números de telefone, como fax ou números de telefone residencial. Depois de criar o domínio para armazenar a descrição puramente técnica de um campo, você então cria um elemento de dados para armazenar os atributos descritivos do campo. No elemento de dados para armazenar os atributos descritivos do campo. No elemento de dados, você deve digitar o nome de um domínio para dar-lhe a característica técnica. Então, você insere os rótulos e a documentação(ajuda F1) para descrever os dados que você armazenará. Nesse exemplo, você provavelmente criaria três elementos de dados, um para cada número de telefone residencial, comercial e fax. Em cada elemento de dados, você digitaria rótulos de campo descrevendo o tipo de número de telefone que você armazenará com ele e a ajuda F1 para o usuário final. Tendo Criado os elementos de dados, você agora pode criar a tabela. Você poderia criar três campos de número de telefone na tabela(residencial, comercial e fax) e atribuir o elemento de dados correspondente a cada campo. Um elemento de dados é atribuído a cada campo. Isso oferece informações descritivas do campo do elemento de dados e informações técnicas do domínio a que ele faz referência. Quando o campo é utilizado em uma tela, ele obtém um rótulo e a documentação de ajuda F1 do elemento de dados e seu comprimento e tipo de dado formam o domínio dentro do elemento de dados. Se você precisa alterar o comprimento do campo depois que criou uma tabela, você apenas precisa alterá-lo no domínio. Se o domínio é utilizado em mais de uma tabela, a alteração é automaticamente propagada para todos os campos que utilizam esse domínio. Curso de ABAP – Capitulo 3 3/29 Criar ou reutilizar domínios e elementos de dados existentes? Cada sistema R/3 vem com mais de 12.000 domínios preexistentes criados pela SAP. Quando você cria um novo campo, você deve decidir se cria um novo domínio ou reutiliza um existente. Para tomar essa decisão, determine se o tipo ou comprimento de dados de seu campo deve ser dependente de um campo existente da SAP. Se seu campo precisa ser independente, crie um novo domínio. Se seu campo deve ser dependente, reutilize um domínio de SAP existente. De forma similar, você deve reutilizar elementos de dados se seus rótulos de campo e documentação alterarem quando a SAP alterar os dela. Convenções para atribuição de nome para tabelas e seus componentes Tipo de Objeto Tabela Elemento de dados Domínio Campo Comprimento máx. de nome 16 30 30 16 Primeiro caractere permitido Y, Z Y, Z Y, Z Qualquer caractere Os nomes de todas as tabelas, domínios e elementos de dados ou demais objetos criados no minisap, devem iniciar com Y ou Z. Você não pode utilizar qualquer outro caractere no começo; todos os outros são reservados pela SAP. O sistema R/3 impõe essa convenção; você obterá uma mensagem de erro se tentar criar um objeto que tem um nome que não se adapte a essas convenções. Os nomes de campos podem começar cm qualquer caractere. Entretanto, certas palavras são reservadas e não podem ser utilizadas como nomes de campo. A tabela TRESE contêm a lista completa das palavras reservadas. Para acessá-la, digite a transação SE11. Abordagens para criar tabelas Há duas abordagens que você pode utilizar quando criar tabelas: Botton-up Top-down Botton-up Top-down Primeiro você cria os domínios, depois os elementos de dados e por fim a tabela. Primeiro você cria a tabela, depois os elementos de dados e os domínios à medida que você avança. Depois de criar um objeto Data Dictionary, você o ativará. Ativar um objeto é simples – você simplesmente deve pressionar o botão Active. Isso altera o status do objeto para ativo. Um objeto deve estar ativo antes de poder ser utilizado. Por exemplo, se tentar utilizar um elemento de dados inativo ao criar um campo, você obterá uma mensagem dizendo que o elemento de dados não existe nem está ativo. Sua resposta seria ativar o elemento de dados. Curso de ABAP – Capitulo 3 4/29 Se alterar um objeto, deve ativá-lo novamente para as alterações tornarem-se efetivas. Se você salvar as alterações, mas não ativar o objeto, os objetos que se referem a ele não ”saberão” das alterações. Criando Domínios Para exercitarmos a criação de domínios, estaremos usando a tabela de domínios, existentes no apêndice A da apostila. Execute a transação SE11; Na tela do Abap Dictionary, selecione a opção Domain, e digite o nome do domínio a ser criado; Clique o botão Create; Curso de ABAP – Capitulo 3 5/29 Na tela Dictionary: Maintain Domain, você especifica o texto curto, o tipo de dado(você poderá digitar o tipo desejado ou pressionar a tecla de função F4), um comprimento de campo e opcionalmente um comprimento de saída. Estes itens são explicados nas seções seguintes. Após digitar essa informações pressione o botão salvar; Aparecerá um janela de diálogo solicitando a classe de desenvolvimento, em nosso treinamento estaremos utilizando a classe temporária $TMP, para isso basta clicar no botão, LOCAL OBJECT. Em seguida clique no botão Activate, na barra de ferramenta Standard, na parte superior da janela, ou pressione CTRL + F3. O campo Data Type O campo Data Type especifica a representação utilizada internamente pelo banco de dados para armazenar o valor desse campo. Para alguns tipos de dados, ele também determina a validação de formato de entrada e formato de saída do campo. Por exemplo, Curso de ABAP – Capitulo 3 6/29 campos do tipo de dados DATS(data) e TIMS(hora) são automaticamente formatados com separadores em uma lista de saída ou quando são exibidos na tela. Na entrada, eles também devem estar no formato de data ou hora ou uma mensagem de erro é emitida para o usuário. Os tipos de dados mais comumente utilizados são listados na tabela abaixo: Tipo CHAR DEC DATS TIMS INT1, INT2, INT4 NUMC Descrição Strings de caractere(máximo de 255 caracteres) Valores decimais(comprimento máximo de 31) Campo Date Campo Time Valores inteiros Campo de caractere que pode conter apenas numéricos Uma dica, você sempre deve pressionar a tecla Enter depois de preencher o campo tipo de dados. Pressionar Enter causa a alteração da tela baseada no tipo de dado que você especificou. Se o tipo de dado é um tipo numérico com sinal, uma caixa de seleção Sign aparecerá. Para campos que permitem decimais, um campo Decimal Places aparecerá. Para campos de caractere, uma caixa de seleção LowerCase. Os campos Output Length, Decimal Places e Lowercase. O campo Output length indica o número de bytes necessários para dar saída ao campo para um alista ou para um tela, incluindo vírgulas, ponto decimal, sinal e quaisquer outros caracteres de formatação. Por exemplo, na saída, os campos de data e hora são automaticamente formatados com separadores. Internamente, uma data é armazenada com oito caracteres(sempre YYYYMMDD), mas o comprimento de saída no domínio deve ser especificado como 10 para permitir que dois separadores sejam inseridos. Se o campo Output Length estiver em branco, seu valor automaticamente será calculado pelo sistema quando você pressionar Enter. Para campos decimais, você pode especificar o número de decimais colocado no campo Decimal Places. Os campos decimais, você pode especificar o número de decimais colocados no campo Decimal Places. Os campos de caractere são normalmente convertidos em letras maiúsculas antes de serem armazenados no banco de dados. Você pode desativar essa conversão desmarcando a caixa de seleção lowercase. A posição do ponto decimal nos campos decimais é frequentemente um campo de confusões, por isso descreveremos esse assunto. Para campos de tipo DEC, o ponto decimal não é armazenado no banco de dados. Somente a parte numérica é armazenada, não o decimal. Na saída, a posição do decimal é determinada pelo valor que você coloca no campo Decimal Places do domínio. A fim de que o campo seja adequadamente exibido, você deve especificar um comprimento de saída que inclua um byte para o ponto decimal e outro para cada separador de milhar que possa ser exibido. Entretanto, o sistema calculará o comprimento de saída se você simplesmente deixar em branco o campo Output length e pressionar Enter. Curso de ABAP – Capitulo 3 7/29 Criando Elementos de Dados Para criar um elemento de dados, digite a transação SE11; Selecione a opção Data Type e digite o nome do elemento de dados e pressione create. Na caixa de diálogo que aparecerá em seguida, selecione a opção Data Element, e pressione ENTER. Na tela do Dictionary: Maintain Data Element, você especificará um texto curto, nome de domínio para o elemento de dados, rótulos na aba Field Label e um cabeçalho, que são explicados abaixo. A documentação também pode ser criada depois que o elemento de dados foi salvo. Curso de ABAP – Capitulo 3 8/29 O Campo Short Text O campo Short Text descreve um contexto de negócio para um domínio. Por exemplo, um “código de bairro” é um contexto de negócio específico para um domínio Z01_DO_NUM4, então ele seria uma descrição apropriada para um elemento de dados. O usuário final verá essa descrição se solicitar ajuda F1 para um campo que foi criado utilizando esse elemento de dados. Os campos Field Label e Header A aba Field label contém quatro campos de texto. Os primeiros três são rótulos de campo. Quando qualquer campo aparece em uma tela(como um campo de entrada em uma tela de entrada), um dos campos curtos, médios ou longos aparecerão à esquerda dele como um rótulo de campo. O programador escolhe um desses rótulos de campo quando ele cria uma tela. O conteúdo do campo Header aparecerá como um cabeçalho de coluna no topo das listas. A documentação de elemento de dados Depois que você salva os elementos de dados, um botão Documentation aparece na barra de ferramentas Application, de modo que você possa armazenar texto na forma livre. O usuário vê esse texto quando solicita ajuda F1. Em outras palavras, quando um campo de tabela que utiliza esse elemento de dados é exibido em uma tela, o usuário pode colocar o cursor nesse campo e pressionar F1 para exibir a documentação que você digitou aqui. Quando você vê a tela de Documentation, a primeira linha conterá os caracteres &DEFINITION&. Isso é um título; não altere essa linha. Digite sua documentação começando na linha dois. Criando Tabelas Para criar uma tabela transparente, digite a transação SE11; Selecione a opção Tables e digite o nome da tabela, em seguida pressione create(F5). Curso de ABAP – Capitulo 3 9/29 Nesta tela especifica o texto curto, a classe de remessa, os nomes dos campo, um nome de elemento de dados para cada campo e seleciona os campos de chave primária. Curso de ABAP – Capitulo 3 10/29 O Campo Short Text O campo short Text é utilizado para os mesmos propósitos que os campos Short Text de domínio. O usuário final não verá essa descrição em qualquer lugar, mas o desenvolvedor verá quando trouxer à tona uma lista de tabelas. O campo Delivery Class O valor no campo Delivery Class identifica o “proprietário” dos dados nesta tabela. O proprietário é responsável pela manutenção do conteúdo da tabela. Nas tabelas de cliente, você deve sempre inserir um A aqui, que indica que a tabela contém dados de aplicativo possuídos apenas pelo cliente. Outros valores inseridos no campo são úteis somente para a SAP e indicam que ele possui os dados. O Campo Tab. Maint. Allowed Marcar a caixa de seleção Tab. Maint. Allowed faz com que o caminho de menu Utilities>Create Entries seja ativado. Depois de ativar a tabela e escolher esse caminho de menu, a tela Table Insert é exibida, permitindo que você digite dados em sua tabela. É útil para teste e entrada manual de quantidades pequenas de dados. Se a caixa de seleção Tab.Maint.Allowed estiver em branco, o caminho de menu Utilities->Create Entries estará acinzentado. A coluna Field Name Na metade inferior da tela você pode inserir nomes de campo na coluna Field Name. Os campos de chave primária devem aparecer primeiro nesta lista e devem ser indicados por uma marca de verificação na coluna Key. Um nome de elemento de dados deve ser inserido à direita de cada nome de campo. Ao criar uma tabela, você deverá inserir como primeiro registro o campo MANDT, na coluna Field e MANDT na coluna field Type. Para definir um campo como chave primária, basta marcar o checkbox em frente ao campo desejado, na coluna Key. Se o campo deve ser preenchido , marque o checkbox na coluna Init. Para ativar a tabela criada, clique no botão salvar. Para checar se existem erros na tabela, clique no botão Check. Para ativar a tabela , clique no botão Activate. Após adicionar os campos de sua tabela, você deverá salvar a tabela, clicando no botão SAVE(CTRL+S) e configurar o TECHNICAL SETTINGS. Clique no botão Tecchnical Settings, na barra de ferramentas na parte superior da tela. Curso de ABAP – Capitulo 3 11/29 Após preencher os campos Data Class e Size category, clique em salvar e pressione a tecla de função F3, ou clique no botão BACK. Ative a tabela clicando no ícone Activate. Classe de dados A classe de dados determina o tablespace a que a tabela é atribuída.(O termo “tablespace” se aplica a banco de dados Oracle. Para informix, substitua pelo termo “DBS space”.) Um tablespace é um arquivo físico no disco que é utilizado para armazenar tabelas. Cada tabela é atribuída a um tablespace. As tabelas com características semelhantes normalmente são agrupadas em um tablespace, assim tablespaces são as unidades administrativas utilizadas pelo DBA para gerenciar o banco de dados. Por exemplo, as tabelas que crescem rapidamente estarão agrupadas em um tablespace em um disco com muito espaço livre. Cada classe de dados tem um tablespace associado. Quando você ativa uma tabela, ela é criada no tablespace associado a essa classe de dados. Se você altera a classe de dados quando a tabela está ativa, nada acontece; ela não se move para outro tablespace. As classes de dados importantes são: - APPL0 ou dados mestres. Escolhendo APPL0(dado-mestres), significa que a tabela não é atualizada com freqüência e cresce lentamente. Ela será colocada em um tablespace com tabelas semelhantes. O mestre do fabricante e as tabelas-mestres do cliente são bons exemplos de dados-mestres. - APPL1 ou dados de transação. Escolher APPL1(dados de transação), significa que a tabela se destina a ser atualizada com freqüência e crescer rapidamente. Pedidos feitos a fabricantes e pedidos recebidos de clientes são bons exemplos de dados de transações. As tabelas que contêm essas ordens terão uma classe de dados de APPL1. Curso de ABAP – Capitulo 3 12/29 APPL2 ou dado de personalização. Escolher APPL2(dados de personalização), significa que os conteúdos da tabela são determinados antes da implementação e não alteram com freqüência depois disso. Categoria de tamanho O campo size Category permite que você especifique o número máximo de registros que espera que essa tabela armazene. Você irá configurar o tamanho da extensão inicial e das próximas, assim como o número máximo de extensões permitidas por essa tabela. Uma extensão é a quantidade de espaço alocado para uma tabela quando é criada. Se uma tabela consome esse espaço, outra extensão será alocada, fazendo com que o espaço da tabela seja estendido. As categorias de tamanho são sempre de 0 a 4, mas o número de registros esperados em cada categoria de tamanho mudará de acordo com cada tabela baseada no comprimento de uma linha. Escolha uma categoria apropriada baseada no número máximo de registros que você espera que a tabela armazene. Quando escolher uma categoria de tamanho, seja generoso. No R/3 é muito melhor superestimar, que subestimar esse parâmetro. Se a categoria de tamanho é muito pequena e a tabela cresce mais que a alocação inicial, o RDBMS aloca outra extensão. Extensões secundárias reduzem o desempenho e exigem uma reorganização do tablespace para serem removidas. As reorganizações podem ser muito difíceis de executar em um banco de dados grande, especialmente em um que exija alta disponibilidade. É muito mais fácil reduzir uma categoria de tamanho excessivamente generoso do que aumentar uma subestimada. Para exibir o número de extensões alocadas para uma tabela utilize a transação DB02. Digite na caixa de comand /nDB02; Pressione o botão Detailed analysis; Digite o nome da tabela desejada; Selecione a opção Extents Modificando Tabelas. Depois que você criou uma tabela, você pode: Copiá-la Excluí-la Adicionar mais campos nela Excluir os campos dela Alterar os campos dentro dela Essa seção descreve como executar estas funções. Copiando uma tabela Se uma tabela estiver ativa no DDIC, você pode copiá-la. Você pode querer fazer isso se a tabela que você quer criar for muito semelhante a uma que já existe no banco de dados. Ou, você pode querer experimentar alguma funcionalidade de dicionário que é pouco conhecida para você, sem querer modificar uma tabela existente. Curso de ABAP – Capitulo 3 13/29 Para copiar uma tabela, siga os seguintes passos. Vá para a tela do Dicionário de dados (SE11) Selecione o menu Dictionary Objects, comando Copy... ou clique no ícone Copy(CTRL+F5), na barra de ferramentas na parte superior da tela. Uma tabela não pode ser renomeada. Para alterar o nome de uma delas, você deve copiála para uma tabela diferente com o nome desejado e então excluir a tabela original. Se você precisar fazer isso, certifique-se de copiar tanto a estrutura como os dados da tabela. Excluindo uma tabela Você pode excluir tabelas existentes de DDIC. Você pode querer fazer isso quando uma tabela existente não for mais necessária ou se você tiver criado uma tabela para os propósitos de experimentar funcionalidade de dicionário que é pouco conhecida para você. Para excluir uma tabela, siga os seguintes passos. Vá para a tela do Dicionário de dados (SE11) Selecione o menu Dictionary Objects, comando Delete ou clique no ícone Delete(Shifit+F12), na barra de ferramentas na parte superior da tela. Adicionando campos Inserir um campo permite que você posicione um campo antes de outro existente. Acrescentar um campo permite que você adicione novos campos no fim da tabela, depois de todos os campos existentes. Excluindo campos Você pode excluir campos existentes de uma tabela. Você pode desejar fazer isso se o campo não for mais necessário na tabela ou ser você tiver criado um campo para os propósitos de experimentar funcionalidade de dicionário que é pouco conhecido por você. Trabalhando com dados Se você já não fez isso, crie sua tabela agora e ative-a antes de prosseguir. Você pode utilizar os utilitários de navegador de dados para exibir ou modificar dados dentro de tabelas das seguintes maneiras: Procurando e exibindo as linhas que encontram critérios especificado Adicionando novas linhas Modificando linhas existentes Excluindo linhas Curso de ABAP – Capitulo 3 14/29 Utilitários gerais de navegadores de dados No sistema R/3, há quatro utilitários gerais de navegação de dados: SE16, SM30 e SM31. Eles são similares sob alguns aspectos e ainda oferecem vários tipos de funcionalidade Utilizando o SE16 O SE16 é o mais utilizado programa de utilitário de navegador de dados com propósito geral. Com ele, você pode pesquisar tabelas para linhas específicas e exibi-las, excluí-las, copiá-las, adicionar novas linhas e fazer outras tarefas. Ele pode ser acessado de qualquer uma destas duas maneiras: Da Tela Dictionary: Tables/Structure: Change, escolha o caminho de menu Utilities-> Table Contents ou display or creates entrada(botão). Digite /nSE16 no campo Command. A Se16 possui vários parâmetros de configuração para exibição de campos. Utilizando SM31 e SM30 SM31 e SM30 também podem ser utilizados para exibir e atualizar dados de tabela. SM31 é uma versão mais antiga de SM30 que tem menos funcionalidade. O campo de entrada na primeira tela de SM30 é suficientemente longo para acomodar qualquer nome de tabela; no SM31 ele tem apenas cinco caracteres de comprimento. Antes que você possa utilizar qualquer um, um programa especial chamado diálogo de manutenção padrão deve ser gerado para a tabela que você quer exibir. Um diálogo de manutenção padrão é um programa ABAP/4 que você gera. Quando você chama SM31 ou SM30, o navegador de dados automaticamente localiza e carrega esse programa gerado. Ele oferece uma interface mais complexa e mais funcionalidade do que o SE16. Em tópicos posteriores veremos como criá-los. A maneira mais simples de dizer se você deve utilizar SE16 ou SM31 é simplesmente experimentantá-los. Se um deles não funcionar, então o outro provavelmente resolverá. Se nenhum funcionar, recorra ao SM30. Curso de ABAP – Capitulo 3 15/29 Gerando programa para manutenção de tabelas Vá para o Dictionary: Initial Screen(SE11); Digite o nome de sua tabela no campo Database Table; Pressione o botão Display Escolha o menu utilities -> Table Maintenance Generator. Siga os seguintes passos: Preencha o campo Autorization Groups com &NC&, isso quer dizer que não utilizaremos grupo de autorização; Preencha o campo Function Group com o nome de função que você possa trabalhar, por exemplo ZF01. Em seguida clique no botão FIND SCR. NUMBER(S) na parte superior da tela. Uma caixa de diálogo aparecerá. Selecione a opção Propose screen number(s), para que o próprio programa de manutenção em tabelas, lhe sugira os número de telas possíveis. Para confirmar a seleção, pressione ENTER. Clique no botão Create na barra de ferramentas na parte superior da tela ou pressione a tecla de função F6, para iniciar a criação das telas para manutenção na tabela desejada. Depois de concluída a geração do programa de manutenção , digite a transação SM30 para execução do mesmo. Curso de ABAP – Capitulo 3 16/29 Clique no botão Maintain. Chaves Estrangeiras Uma chave estrangeira é um campo em uma tabela que é chave primária na outra tabela que está relacionado. O propósito do relacionamento de chave estrangeira é validar os dados sendo inseridos em uma tabela de verificação contra um conjunto válido de valores em outra tabela. A tabela que contém a chave estrangeira é chamada tabela de chave estrangeira. A tabela que contém o conjunto válido de valores é chamado tabela de verificação. A verificação de chave estrangeira é executada pelo usuário da interface do R/3. Quando você digita um valor em um campo e pressiona a tecla Enter, nos bastidores a interface com o usuário formula uma instrução select para validar o campo de chave estrangeira e envia-la ao banco de dados. Se uma linha coincidente, não foi localizada na tabela de verificação, o usuário vê uma mensagem padrão indicando que o valor que ele digitou é Curso de ABAP – Capitulo 3 17/29 inválido. Se uma linha coincidente existe na tabela de verificação os valores inseridos na tela têm permissão para passar para o programa em ABAP/4 subjacente. Assim, as chaves estrangeiras já são verificadas antes de o programa receber os valores. Além da tecla Enter, as chaves estrangeiras também são verificadas quando uma tecla de função, um botão ou um item de menu é selecionado. As chaves estrangeiras são verificadas apenas pela interface com o usuário. Elas não existem no banco de dados e não são verificadas se você simplesmente emitir uma instrução update de banco de dados. Nenhuma referência à limitação de integridade são mantidas no banco de dados. Portanto, um programa em ABAP/4 incorretamente escrito pode violar a integridade referencial; ele pode inserir valores inválidos nas tabelas de banco de dados. Por essa razão, programas em ABAP/4 que precisam atualizar o banco de dados com dados provenientes de uma outra fonte que não a interface com o usuário normalmente passam esses dados por uma interface com o usuário a fim de validá-los. Para criar uma chave estrangeira: A verificação deve ocorrer em relação a um campo dentro da chave primária da tabela de verificação; Os nomes de domínio do campo de chave estrangeira e o campo de tabela de verificação devem ser os mesmos. Criando chaves estrangeiras Comece na Dictionary: Initial Screen (SE11); Digite o nome da tabela no campo Database Name; Escolha o botão Change; Posicione no campo que será a chave estrangeira na sua tabela; Clique no ícone Foreign Key; Curso de ABAP – Capitulo 3 18/29 No campo Check Table, digite o nome da tabela que fará o relacionamento, ou seja, o nome da tabela quer será de verificação; Pressione o botão Generate proposal; Em seguida clique no botão Copy. Ative a tabela, clicando no ícone Activate ou pressionando as teclas CTRL + F3. Entendendo a cardinalidade A cardinalidade do relacionamento de chave estrangeira descreve, para cada valor na tabela de verificação, quantas linhas de dados são permitidas na tabela de chave estrangeira. Ela é inserida na tela Create Foreign Key. A cardinalidade é descrita como X:Y, onde X se refere à tabela de verificação e Y se refere à tabela de chave estrangeira. X pode apenas ter os valores 1 ou C e Y pode ser 1, C, N ou CN. Os valores de X significam: 1: Se o programa aplicativo exclui uma linha da tabela de verificação, também excluirá as linhas correspondentes da tabela de chave estrangeira. Por exemplo, se o programa de aplicação remover o valor 1 da tabela de verificação, ele excluirá todas as linhas da tabela de chave estrangeira onde COD_BAIRRO = 1. Em outras palavras, se houver um valor na tabela de chave estrangeira, haverá sempre apenas uma linha tendo esse valor na tabela de verificação. C: É possível excluir da tabela de verificação sem excluir as linhas correspondentes na tabela de chave estrangeira. Em outras palavras, pode haver valores na tabela de chave estrangeira sem valores correspondentes na tabela de verificação. Os valores de Y significam: 1: Há sempre uma e, somente uma, linha na tabela de chave estrangeira para cada linha na tabela de verificação. C: Há, no máximo, uma linha na tabela de chave estrangeira para cada linha na tabela de verificação. N: Há sempre pelo menos uma linha na tabela de chave estrangeira para cada linha na tabela de verificação. CN: Pode ou não haver linhas na tabela de chave estrangeira para cada linha na tabela de verificação. A cardinalidade não é imposta pelo sistema R/3. Especificar a cardinalidade é opcional e o sistema não verificará a cardinalidade para determinar se essa tem permissão para acontecer quando um programa em ABAP/4 atualiza uma tabela. A única vez que a cardinalidade é utilizada é quando você cria um objeto agregado no DDIC. Um objeto agregado é um objeto DDIC composto de mais de uma tabela. Um exemplo de um objeto agregado é uma VIEW. Principais Tabelas de CO e FI BKPF BSAD BSAK Cabeçalho de Documentos Gerais de FI Itens de Partidas Compensadas de Clientes Itens de Partidas Compensadas de Fornecedores Curso de ABAP – Capitulo 3 19/29 BSAS BSEG BSID BSIK BSIS COBK COEP COSP CSKS CSKT GLT0 GLT1 J_1AT059Z J_1AWITH J_1AWTOFF SKA1 T001S T011 T030A T894 TBSL TBSLT TGSB TGSBT TKA01 TKA09 TKA50 TKO08 TKO09 Itens de Partidas Compensadas de Contas do Razão Itens de Documentos Gerais de FI Itens de Partidas em Aberto de Clientes Itens de Partidas em Aberto de Fornecedores Itens de Partidas em Aberto de Contas do Razão Cabeçalho do Documento Nº. CO Referente ao Período Partidas no CO Referente ao Período Valores das Ordens de Investimento e Outras Ordens Mestre de Centro de Custo Texto de Centro de Custo Mestre da Conta do Razão (Movimentação no Período) Totais para General Ledger Local Códigos de IRF (Nova Funcionalidade) Dados de Operações de IRF Código Oficial de Imposto de Renda na Fonte Mestre das Contas do Razão Encarregado da Contabilidade Estrutura de Balanço L/P Operações (Ex. "WIT" Operações de IRF) Versões de Ledger Mestre da Chave de Lançamento Denominação das Chaves de Lançamento Divisões Denominação das Divisões Área de Contabilidade de Custos Opções Básicas Versões de Ordens Perfis de Planejador - Tabela de Entidades Área de Apropriação de Custo para Ordem Texto para Área de Apropriação de Custo para Ordem Principais Tabelas de MM EKBE EKKN EKKO EKPO MAKT MARA MARC MARM MBEW MKPF MSEG T134T Histórico de Documento de Compras Classificação Contábil de Documento de Compras Cabeçalho de Documento de Compras Item de Documento de Compras Textos breves de Materiais Mestre de Materiais Segmento C do Mestre de Materiais Unidades de Medida Avaliação do Material Cabeçalho de Documento de Materiais (Movimentações) Item de Documento de Materiais (Movimentações) Denominação dos Tipos de Material AFKO AFPO AUFK MAST PLAF STKO STPO T003P Cabeçalho da Ordem PCP Item da Ordem PCP Mestre de Ordens Ligação entre Materiais (Lista Técnica) Ordem Planejada Cabeçalho da Lista Técnica Item da Lista Técnica Textos de Tipos de Ordens Principais Tabelas de PP Curso de ABAP – Capitulo 3 20/29 Relacionamento de Algumas Tabelas SAP KONV-Knumv = VBAK-Knumv KONV-Kposn = VBAP-posnr Knumv Kposn Kschl Kbetr VBAK ( Header Pedido ) Auart Vbtyp Vbeln KONV ( Condição do Item do Pedido) : tipo da ordem : tipo documento : número da ordem : número da condição : item do pedido : tipo de condição : montante ou perc. da condição VBRK ( Header Doc. Faturamento/Billing ) Vbeln Zukri+7(10) VBAK-Vbeln = VBAP-Vbeln : número doc.faturamento : número fornecimento VBAP ( Item Pedido ) Vbeln : número da ordem Posnr : número do item Matnr : material Arktx : descrição Pstyv : tipo do item VBAP-Vbeln = LIPS-Vgbel VBAP-Vposnr = LIPS-Vgpos VBRK-Vbeln = VBRP-Vbeln VBAP-Vbeln = VBRP-Aubel VBAP-Posnr = VBRP-Aupos VBAP-Vbeln = VBRP-Vgbel VBAP-Posnr = VBRP-Vgpos No caso de faturamento antecipado LIPS ( Item Remessa/Delivery/Fornecimento ) Vbeln : número da remessa Posnr : número do item Vgbel : número do documento origem Vgpos : número do item origem VBRP ( Item Doc. Faturamento/Billing ) Vbeln Vgbel Vgpos Aubel Aupos Vgtyp Matnr Fkimg LIPS-Vbeln = VBRP-Vgbel LIPS-Posnr = VBRP-Vgpos : número doc.faturamento : número da remessa (doc.origem) : número do item da remessa : número do pedido : número do item do pedido : tipo do documento de origem : material : qtd. faturada VBRP-Vbeln = J_1BNFLIN-Refkey VBRP-Posnr = J_1BNFLIN-Refitm VBRP-Vbeln = M_J1BAB-Refkey MSEG-Mblnr = J_1BNFLIN-refkey(10) MSEG-Mjahr = J_1BNFLIN-refkey+10(04) J_1BNFLIN ( Item Nota Fiscal ) RefKey Refitm MSEG ( Item do Documento de Material ) Mblnr Mjahr : documento de origem : item do documento de origem Verificar chave do índice OU PARA MELHOR PERFORMANCE : número do doc. material : ano do documento do material M_J1BAB ( Índice por Nº referencia ) RefKey : documento de origem BKPF-Awkey = J_1BNFLIN-RefKey BKPF ( Documento Contábil ) VBFA ( Relacionamento entre os documentos de venda ) Vbelv Posnv Vbeln Posnn Awkey : documento referência : Documento precedente : Item doc.precedente : Documento Subsequente : Item doc.subsequente Curso de ABAP – Capitulo 3 21/29 Maurício Mião 01/09/98 VBRK ( Header Doc. Faturamento/Billing ) Vbeln Zukri+7(10) Relacionamentos entre as tabelas SAP : número doc.faturamento : número fornecimento EKKO ( Header Pedido de Compra ) VBRK-Vbeln = VBRP-Vbeln Ebeln :número do pedido de compra Knumv :número da condição VBRP ( Item Doc. Faturamento/Billing ) Vbeln Vgbel Vgpos Aubel Aupos Vgtyp Matnr Fkimg EKPO-Ebeln = VBRP-Aubel EKPO-Ebelp = VBRP-Aupos : número doc.faturamento : número da remessa (doc.origem) : número do item da remessa : número do pedido : número do item do pedido : tipo do documento de origem : material : qtd. faturada EKPO-Ebeln = EKKO-Ebeln KONV ( Condição do Item do Pedido) Knumv Kposn Kschl Kbetr EKPO ( Item do Pedido de Compra ) Ebeln Ebelp : número da condição : item do pedido : tipo de condição : montante ou perc. da condição :número do pedido de compra :número do item do ped.de compra KONV-Knumv = EKKO-Knumv KONV-Kposn = EKPO-Ebeln VBRP-Vbeln = J_1BNFLIN-Refkey VBRP-Posnr = J_1BNFLIN-Refitm KONH-VAKEY = EKPO-EBELN + EKPO-EBELP VBRP-Vbeln = M_J1BAB-Refkey J_1BNFLIN ( Item Nota Fiscal ) RefKey Refitm : documento de origem : item do documento de origem Verificar chave do índice KONH ( Condição do Programa de Remessa ) Knumh : número da condição KONP ( Condição do Programa de Remessa Item ) KNUMH OU PARA MELHOR PERFORMANCE Knumh Kschl Kbetr : número da condição : tipo de condição : montante ou perc. da condição M_J1BAB ( Índice por Nº referencia ) RefKey : documento de origem BKPF-Awkey = J_1BNFLIN-RefKey BKPF ( Documento Contábil ) Awkey MR1M / MR3M Rev.fatura logística RBKP ( Header Doc.revisão fatura logistica ) Belnr Xblnr : número documento contabil : número nota fiscal fatura : documento referência EKBE ( Historico do pedido de compras ) Ebeln Ebelp Vgabe Belnr Buzei :número do pedido de compra : item pedido : 2 - entrada de fatura (valores fixos) : número documento contabil : item doc RSEG (Item Doc.revisão fatura logistica) Belnr : número documento contabil Buzei : item doc.fatura Menge : quantidade faturada Curso de ABAP – Capitulo 3 22/29 MM01 - Visão de Classificação CABN ( Característica do produto ) Atinn Atnam CAW N ( Valores possíveis da característica ) : código interno : descrição Atinn Atwrt Atzhl : código interno : valor ( código externo ) : numerador ( número do item ) AUSP-Atinn = CABN-Atinn AUSP-Objek = MARA-matnr por exemplo CAWNT-Atinn = CAWN-Atinn CAWNT-Spras = Sy-langu CAWNT-Atzhl = CAWN-Atzhl AUSP ( Valores das Características ) Objek Atinn Atwrt Atflv Klart : objeto ( Ex. Cód. Material ) : código interno caract. : valor da característica : valor interno em pto.flutuante : tipo de classe AUSP-Atinn = CAWN-Atinn AUSP-Atwrt = CAWN-Atwrt CAW NT ( Descrição da Característica ) Atinn Atzhl Spras Atwtb : código interno característica : númerador da característica : idioma : descrição da característica KSSK ( Tipos de classe por material ) Objek Klart Clint : Código do material : Tipo de classe : Código interno do tipo de classe UMA ENTRADA PARA CADA CLASSE DE CADA TIPO KLAH ( Classes do material ) KLAH-Clint = KSSK-Clint Clint Class Klart : Código interno do tipo de classe : código da classe : Tipo de classe TVBUR ( Agência de Vendas ) Vkbur Adrnr : código agência : código do endereço SADR-Adrnr = TVBUR-Adrnr SADR ( Endereço da Agência de Vendas ) TVKBT-Vkbur = TVBUR-Vkbur Adrnr Name1..4 Natio : código do endereço : descrição do endereço : versão do endereço TVKBT ( Descrição da Agência de Vendas ) Vkbur Spras Bzei : código da agência : idioma : descrição Curso de ABAP – Capitulo 3 23/29 M_ORDNA ( Ordem Pai - Filho ) Lead_aufnr Aufnr Maufnr : ordem pai : ordem filho : ordem superior com relação a filho CAUFV ( Ordem de Produçao Header ) M_ORDNA-Aufnr = CAUFV-Aufnr Aufnr Objnr Plnbez Stlbez : número da ordem : objeto da ordem : material da ordem : material da ordem pai COSP-Objnr = CAUFV-Objnr COSP ( Custos Externos da Ordem Pr ) Objnr : objeto custo W rttp : categoria do valor ( Plan/Real) Kstar : classe do custo ( GGP/MOD) W og999 : valor em moeda Hrkft : chave custo COSP-Objnr = AUFK-Objnr AUFK ( Ordem de Produçao Header Dados mestre ) Aufnr Objnr Auart : número da ordem : objeto da ordem : tipo da ordem AUFK-Aufnr = AFPO-Aufnr AFPO ( Ordem de Produçao Item ) COSS ( Custos Internos da Ordem Pr ) Objnr W rttp Kstar W og999 : objeto custo : categoria do valor ( Plan/Real) : classe do custo : valor em moeda COSP-Objnr = AUFK-Objnr Aufnr Posnr : número da ordem : item da ordem COKEY-Hrkft = COSP-Hrkft JEST ( Status individual por objeto ) Objnr : número do objeto Curso de ABAP – Capitulo 3 COKEY ( Header Custos ) AUFK-Aufnr = JEST-Objnr Hrkft Matnr W erks : chave custo : código do material : centro 24/29 ME11 / ME12 / ME13 Info Record Compras EINA ( Info Record Compras Dados Gerais ) A017 ( Info record Material Condições ) Infnr Matnr Lifnr Lifnr : fornecedor Matnr : material Ekorg : organização compras W erks : centro Datbi : fim validade Datab : inicio validade Knumh : código da condição : n. registro : material : fornecedor EINA-Infnr = EINE-Infnr EINE ( Info Record - Dados Organização Compras ) Infnr : n. registro Ekorg : organização compras W erks : centro KONH-Knumh = A017-Knumh A017-Lifnr = EINA-Lifnr A017-Matnr = EINA-Matnr A017-Ekorg = EINE-Ekorg A017-Werks = EINE-Werks KONH ( Condições Header ) Knumh : código da condição Datbi : fim validade Datab : inicio validade KONP-Knumh = KONH-Knumh KONP ( Condições Item ) Knumh : código da condição Kbetr : valor Kschl : tipo condição Curso de ABAP – Capitulo 3 25/29 PLKO ( Planos ou Roteiros Header ) PLNTY PLNNR PLNAL LOEKZ STATU : tipo do plano : número do plano : numerador : código de eliminação 'x' - del : status do plano PLPO-PLNTY = PLKO-PLNTY PLPO-PLNNR = PLKO-PLNNR PLPO-PLNAL = PLKO-PLNAL MAPL-PLNTY = PLKO-PLNTY MAPL-PLNNR = PLKO-PLNNR MAPL-PLNAL = PLKO-PLNAL MAPL ( Roteiros por material ) PLNTY PLNNR PLNAL LOEKZ MATNR W ERKS : tipo do plano : número do plano : numerador : código de eliminação 'x' - del : material : centro PLPO ( Planos ou Roteiros para Material Item ) PLNTY PLNNR PLNAL LOEKZ ZAEHL VPLTY VPLNR VPLAL : tipo do plano : número do plano : numerador : código de eliminação 'x' - del : numerador : tipo plano de referencia : número do plano referencia : numerador plano referencia TVBVK ( Grupo de Vendedores/Ag.Vendas ) Vkbur Vkgrp : Agência de vendas : Grupo de Vendedores TVKGR-Vkgrp = TVBVK-Vkgrp TVKGR ( Grupo de Vendedores ) Vkgrp : grupo de vendedores TVGRT-Vkgrp = TVKGR-Vkgrp TVGRT-Spras = Sy-langu TVGRT ( Descrição do Grupo de Vendedores ) Vkgrp Spras Bezei Curso de ABAP – Capitulo 3 : grupode vendedores : idioma : descrição do grupo de vend. 26/29 VTTK ( Transporte Header ) Tknum Tdlnr Dtmeng Dtmev VTTK-Tknum = LTAK-Tanum : transporte : transportadora : unidade peso : unidade volume Lgnum Tanum Kquit Refnr Vbeln VTTK-Tknum = VTTP-Tknum LTAK-Vbeln = VTTP-Vbeln : depósito : N.ordem transferencia : confirmado : Referência : Fornecimento LTAK-Lgnum = LTAP-Lgnum LTAK-Tanum = LTAP-Tanum VTTP ( Transporte Item ) Tknum Tpnum Vbeln LTAK ( Ordem de Transferencia Header ) LTAP (Ordem de transferência Item) : transporte : item : fornecimento VTTP-Tknum = LTAP-Tanum VTTP-Tpnum = LTAP-Orpos Lgnum Tanum Tapos Orpos : depósito : N. ordem transferencia : item : item OT que originou este item VTTP-Vbeln = LIKP-Vbeln LIKP ( Fornecimento Header ) Vbeln : fornecimento VBAK ( Header Pedido ) Auart Vbtyp Vbeln : tipo da ordem : tipo documento : número da ordem VBKD-Vbeln = VBAK-Vbeln VBKD-posnr = 00000000 VBKD ( Dados comerciais ) Vbeln : número da ordem Posnr : número do item VBAP ( Item Pedido ) Vbeln : número da ordem Posnr : número do item Matnr : material Arktx : descrição Pstyv : tipo do item VBKD-Vbeln = VBAK-vbeln VBKD-posnr = VBAP-posnr Dados comerciais do pedido de vendas - VA03 Curso de ABAP – Capitulo 3 27/29 VK13 - Condições do material - Preço de venda A004 ( Condições para determinação preços do material ) Matnr : material Vkorg : organização de vendas Vtweg : canal de distribuição Datbi : fim validade Datab : inicio validade Knumh : código da condição Kschl : tipo de condição KONH-Knumh = A004-Knumh KONH ( Condições Header ) Knumh : código da condição Datbi : fim validade Datab : inicio validade KONP-Knumh = KONH-Knumh KONP ( Condições Item ) Knumh : código da condição Kbetr : valor Curso de ABAP – Capitulo 3 28/29 Resumo O Data Dictionary é uma ferramenta utilizada por programas em ABAP/4 para criar e manter tabelas. Há três tipos de tabelas: transparente, de pool e de cluster. As tabelas transparentes são as mais comuns e são utilizadas para armazenar dados de aplicativo. As tabelas de pool e de cluster são principalmente utilizadas pela SAP para armazenar dados do sistema. Para criar uma tabela, você primeiro precisa de domínio e de elementos de dados. Os domínios oferecem as características técnicas de um campo; os elementos de dados oferecem os rótulos de campo e a ajuda F1. Os dois são reutilizáveis. Os objetos de dicionário devem estar ativos antes de poderem ser utilizados. Se fizer uma alteração para um objeto de dicionário, você deve reativar o objeto para que as alterações tornem-se efetivas. Os navegadores de dados permitem que você exiba e modifique os dados dentro de tabelas. O SE16 é o navegador mais geral de dados. O SM30 e o SM31 são os outros navegadores que oferecem capacidades variadas. Você pode criar ajuda F1 dentro de um elemento de dados pressionando o botão documentation. Dentro dessa ajuda F1, você pode criar vínculos de hipertexto para outros documentos de ajuda F1. As chaves estrangeiras asseguram a integridade de dados executando validações na tela e oferecem ajuda F4 para o usuário com lista de valores permissíveis. A tabela de valor oferece uma proposta para a tabela de verificação e oferece ajuda F4. As tabelas de texto oferecem suporte de diversos idiomas para descrições no R/3 e especialmente para ajuda F4. Dentro de uma tabela, cada campo monetário deve ser vinculado com um campo-chave monetário e cada campo de quantidade deve ser vinculado com um campo que contém as unidades de medida. Curso de ABAP – Capitulo 3 29/29