Buscar

Guia ABAP 2007

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 141 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 141 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 141 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Colaboradores 
Daniela Cristina Guerra 
Flavio Alves Pereira 
 
 2 
DICE 
1. SYSTEM OVERVIEW.........................................................................................................................03 
1.1. Funções Básicas do SAP ERP....................................................................................................03 
1.1.1. Logon..............................................................................................................................................03 
 1.1.2. Elementos de Tela..........................................................................................................................04 
 1.1.3. ABAP Editor......................................................................................................................................06 
 1.1.3.1 Opções do ABAP editor .................................................................................................................06 
 
2. Arquitetura do Sistema SAP ERP....................................................................................................... 08 
 
3. ABAP Dictionary..........................................................................................................................10 
3.1 Categoria de tabelas do ABAP Dictionary........................................................................................10 
3.2 1 Objetos que formam uma tabela......................................................................................................12 
3.2.1.1. Atributo do elemento de dados......................................................................................................12 
3.3 Configurações técnicas da tabela....................................................................................................... 14 
3.4 Tabelas de verificação........................................................................................................................ 15 
3.4.1. Consulta.........................................................................................................................................15 
3.4.1.1. Pesquisar tabelas com chave estrangeira.................................................................................... 16 
3.5 índices.................................................................................................................................................17 
3.5.1. Rotina interna de indexação e pesquisa..........................................................................................17 
3.5.2 Consultando índices..........................................................................................................................17 
3.6. Operadores relacionais .......................................................................................................................18 
3.7.Estruturas..............................................................................................................................................18 
3.8 Views ..................................................................................................................................................19 
3.9 Criando tabela.......................................................................................................................................20 
3.9.1 atualização de opções técnicas.........................................................................................................28 
3.9.2 consultando objetos criados..............................................................................................................30 
4. Reports............................................................................................................................................... 31 
4.1. Eventos Utilizados............................................................................................................................31 
4.1.2. Controle de nível na tabela interna.................................................................................................. 32 
4.1.3. Comando Message ..........................................................................................................................33 
4.1.4. Alguns Comandos ABAP................................................................................................................. 34 
4.1.5. Formatos de saída............................................................................................................................43 
4.1.6. Hotspots............................................................................................................................................43 
4.1.7. Programa Report Simples.................................................................................................................43 
4.2 ALV...................................................................................................................................................... 49 
 
5. Dialog............................................................................................................................................... 56 
5.1. Module Pool...................................................................................................................................56 
5.2. Tabstrip..........................................................................................................................................72 
5.2.1. Criando Tabstrip com assistente.....................................................................................................72 
5.3. Table Control................................................................................................................................ 77 
5.3.1 Criando table control com o assistente...........................................................................................77 
5.3.2 Loop at screen................................................................................................................................82 
6. SHDB................................................................................................................................................ 84 
7. RFC................................................................................................................................................... 86 
8. Batch input ........................................................................................................................................87 
9. Call transaction.................................................................................................................................. 98 
10. BAPI.................................................................................................................................................108 
 10.1 Programa BAPI.............................................................................................................................108 
11. Field Exit...................................................................................................................................117 
12. Screen Exit...............................................................................................................................118 
13. Badi.......................................................................................................................................119 
14. SAPSCRIPT..........................................................................................................................122 
15. SMART FORM .....................................................................................................................127 
15.1 Criando Smartform...................................................................................................................127 
15.2 Programa para Smartform........................................................................................................1373 
 
 
1. SYSTEM OVERVIEW 
 
 
 
 
 
1.1. Funções Básicas do SAP ERP 
 
 
 1.1.1. Logon 
 
Assim que a janela SAP Logon for exibida, escolha o ambiente e dê um duplo clique na 
linha. 
 
 
 
 
 
Será exibida a tela de logon do SAP ERP. 
 
 
 
 
 
 4 
 
 
Na tela de logon, informe mandante, usuário e sua senha e pressione [Enter]. 
 
A tela inicial será apresentada. 
 
 
1.1.2 Elementos de Tela 
 
 
 
 
Application tool bar 
Menu bar 
System function bar 
Title Bar 
Dympro Area 
Status Bar 
 5 
Menu bar 
 
Contém as ferramentas para configuração do ambiente. 
 
 
System Function Bar 
 
Neste campo podemos utilizar transações Standard do SAP ERP como MM01 e VA01, 
transações customizadas para o cliente que iniciam com a letra Z ou Y, também podemos 
encerrar o processamento do SAP GUI, abrir outras instâncias do SAP GUI, entrar em 
modo de depuração ABAP etc. 
 
/n Retorna a tela anterior 
/o Abre novas instâncias 
/h Depuração 
/nex Fecha todas as instâncias do SAP 
 
 
Title bar 
 
Exibe títulos dos programas do SAP. 
 
 
Status Bar 
 
Nesta barra são apresentadas informações gerais do SAP ERP, sendo que no extremo 
esquerdo são apresentadas às mensagens do sistema e no estremo direito informações 
como: Sistema, Client, User, Program, Transaction etc. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 6 
1.1.3 ABAP Editor 
 
Plataforma para desenvolvimento de programas e relatórios do SAP ERP. 
Para acessar o ABAP Editor utilizamos a transação SE38 ou SE80. 
 
 
 
 
 
 
1.1.3.1 Opções do ABAP Editor 
 
Menu Bar �Utilitários� Opções... 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Informar nome do programa 
 7 
• TAB Editor 
 
O usuário pode configurar se o editor vai trabalhar em modo frontend, 
backend (versões mais antigas) Para ambas pode-se configurar: 
 
• Conversões de Maiúscula/Minúscula em modo de exibição 
• Exibir todos erros de sintaxe 
• Limitação de 72 colunas na edição 
 
• TAB Pretty Printer 
 
Opção padrão “Identar” para organizar adequadamente a tabulação de linhas. 
 
Efetuar conversão Maiusc/Minusc. 
 
• Minúsculas; 
• Maiúsculas; 
• Palavras chaves em maiúsculas (Comandos); 
• Palavras chaves em minúsculas (Comandos). 
 
• TAB Tela Dividida 
 
Configura a disposição de telas e opções de comparação. 
 
 
• TAB Depuração 
 
Habilita depuração externa. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 8 
P WORKBENCH 
2.1. Arquitetura do Sistema SAP ERP 
 
O SAP ERP é desenvolvido com tecnologia client/Server de três camadas. 
 
 
• Presentation Layer 
 
 Onde é apresentado o SAPGUI e onde o usuário interage com o sistema SAP ERP 
 
• Aplication Layer 
 
 Onde as solicitações do usuário são processadas (relatórios, telas etc...). 
 
• Database Layer 
 
Onde estão armazenadas as informações em forma de dados, estes dados ficam 
distribuídos em várias tabelas do sistema, sendo que na grande maioria delas ocorre 
relacionamento de informações . 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 9 
• Dispatcher 
 
 Efetua o gerenciamento de alocação de Work Process quando há uma solicitação 
 do presentation para o application. 
 
 
• Work Process 
 
São através deles que as aplicações SAP ERP são executadas. Cada Work 
Process utiliza uma área de memória que contém o contexto da aplicação em 
execução. 
 
 Tipos: 
• Dialog – Pedidos de um usuário para execução de dialog steps; 
 
• Update – Executa pedidos de atualização de bancos de dados; 
 
• Background – Executa programas em background, sem interação 
 em tempo real com o usuário; 
 
• Enqueue – Administra o bloqueio de tabela na memória compartilhada; 
 
• Spool – Gerencia impressão ou arquivamento óptico. 
• 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 10 
 
3. ABAP DICTIONARY 
 
 
O ABAP Dictionary permite um gerenciamento central de todas as definições de dados 
usada no sistema R/3. 
 
A SE11 é principal transação para manutenção do dicionário de dados do SAP ERP. 
 
Tela principal 
 
• Tabelas 
• Estruturas 
• Visões 
• Elemento de dados 
• Categoria tabela 
• Grupo de tipos 
• Domínios 
• Ajuda de pesquisa 
• Objetos de bloqueio 
• Documentação 
 
 
3.1 Categoria de Tabelas do ABAP Dictionary 
 
• Tabelas transparentes 
 As tabelas transparentes são criadas na SE11, através da opção de criação de 
 tabelas. Quando ativadas, são criadas no sistema de banco de dados com os 
 mesmos nomes e características técnicas informadas no ABAP Dictionary. 
 
 
Tabelas utilizadas pelo SAP: 
 
• Pooled table 
 São tabelas agrupadas, ou seja, é um conjunto de tabelas no dicionário de 
 dados que são representadas por apenas uma tabela no sistema de banco 
 de dados. 
 
• Cluster table 
 Também são tabelas agrupadas, porém são utilizadas para armazenar grandes 
 quantidades de informação. 
 
 
 
NOTA: Podemos utilizar ABAP JOIN nas tabelas Cluste r e Pooled table 
 
 
 11 
 
 
 
Restrições nas Pooled e Cluster tables: 
 
• Índices secundários não são suportados; 
• Algumas cláusulas do Open SQL não são suportadas; 
• SQL nativo não é suportado e não há como o DBA acessar os dados dessas 
tabelas. 
 
3.2. Estrutura de Tabelas 
 
 
Campo: Indica o nome do campo de uma tabela. O Campo MANDT indica a que 
 mandante pertencem os dados da tabela 
 
Chave primária: Indica que só será permitida uma ocorrência para uma linha ou um 
 conjunto de linhas de uma tabela. 
 
Valores iniciais: Não permite entrada de dados com valores nulos. 
 
Elemento de dados: Descreve um tipo elementar de dado ou uma referência. O elemento 
 de dados tem em seu menor nível de definição o Domínio. 
 
Categoria: Descreve o formato de dados na interface de usuário. 
 
Comprimento: Número das posições válidas de um campo sem caracteres de edição 
 (por exemplo, vírgulas ou pontos). 
 
Casa decimal: Número das posições válidas de um campo sem caracteres de edição 
 (por exemplo, vírgulas ou pontos). 
 
Descrição: A descrição breve é utilizada como texto explicativo na criação de listas e de 
 documentação (Ajuda F1). 
 
Grupo: Nome de grupo em includes denominados. 
 
 
 
 
 
 
 
 
 
 
 
 
 12 
3.2.1. Objetos que formam uma Tabela 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3.2.1.1 Atributos do Elemento de Dados 
 
 
Elemento de Dados: Nome técnico 
 
Descrição breve: Descrição para o Elemento de Dados 
 
TAB - Características 
 
• Última modificação: Usuário e Data 
• Pacote 
• Idioma 
 
TAB - Categoria de dados 
 
• Domínio: Campo onde é atribuído o Domain 
 
• Tipo instalado: Opção onde as características são informadas diretamente através 
 da “Categoria de Dados” 
 
• Tipo de referência: Opção onde as características são informadas por referência 
 
TAB – Características adicionais 
 
• Ajuda de pesquisa ( Search Help ): Permite que sejam associadas ajudas de 
pesquisa diretamente no Elemento de Dados. 
 
• ID parâmetro: Campo que permite informa um ID para o SAP Memory (comandos 
Set/Get) 
 
 13 
• Nome componente default : É possível atribuir um nome default inglês ao 
elemento de dados neste campo. 
 
TAB – Denominação do campo 
 
Permite que sejam informados quatro comprimentos de descrição para o campo 
 
 
 
 
3.2.1.2 Atributos do Domínio 
 
 
 
Domínio: Nome técnico. 
 
Descrição breve: Descrição para o Domínio. 
 
TAB - Características 
 
• Última modificação: Usuário e Data 
• Pacote 
• Idioma 
 
TAB – Definição 
 
 
 
Formato - Quadro onde são informados: 
 
• Categoria de dados: (Char, Dats, Cuky, Int1, Lang, Quan, Numc etc...). 
 
• Número de posições: Número das posições válidas de um campo sem caracteres 
de edição (por exemplo, vírgulas ou pontos). 
 
• Decimais: Número das casasdecimais admitidas de um valor. 
 
 
 
 14 
 
• Características de saída - Quadro onde são informados: 
 
• Comprim. Saída: Comprimento de campo máximo, inclusive caracteres de edição 
 (por exemplo, vírgulas ou pontos), para entrar e sair valores. 
 
• Rotina conversão: Rotina utilizada para conversão de campos 
 
• Sinal +/-: Permite sinais negativos se estiver marcado 
 
• Letr. minúsculas: Distingue maiúsculas e minúsculas (Case Sensitive ) se o campo 
 estiver marcado. 
 
 
TAB – Interv. Vals. 
 
Local onde podem ser inseridos valores individuais, intervalo de valores ou uma tabela 
de valores. 
 
 
3.3 Configurações técnicas da tabela 
 
 
Parâmetros de memória lógicos (SE11) 
 
 
Tipo de dados: Determinar a nível lógico, em que área física d o DB a tabela será 
arquivada: 
 
• APPL0 - Dados mestres (Alta ocorrência de leitura e baixa ocorrência de 
gravação); 
 
• APPL1 - Dados de movimento (Atualização freqüente, consulta freqüente); 
 
• APPL2 - Dados organizacionais e de customizing (Raramente modificados); 
 
• Também existem dois tipos para usuário USR e USR1; 
 
 
• Categor.Tamanho : Determinação da necessidade de espaço prevista em uma 
 tabela do banco de dados 
 
 15 
 
 
 
 
 
 
3.4 Tabelas de Verificação 
 
As tabelas de verificação servem para validação de dados no sistema, onde só é permitida 
a entrada de uma informação em um campo que referencie uma tabela de verificação. 
 
 
3.4.1 Consulta 
 
Para consultar a tabela de verificação entrar na SE16 colocar o nome da tabela e exibir. 
Na tela clicar em ‘Tabela de verificação’, 
 
 
 
 
 
 
Outra forma de consultar a tabela de verificação é através do gráfico de relacionamento de 
tabelas 
 
 16 
 
 
 
3.4.1.1 Pesquisar Tabelas com chave estrangeira 
 
Na exibição dos gráficos de relacionamento, podemos consultar as tabelas com chave 
estrangeira através do botão “Tabela de chave externa”. 
 
 
 
 
 
 
3.5 Índices 
Duplo clique 
Chama SE16 
para a tabela 
da Entidade. 
 17 
 
 
São utilizados para acelerar a pesquisa de dados em uma tabela, porém a gravação é 
lenta. 
 
 
• Um arquivo de índice é formado pelos campos de pesquisa da tabela, campos 
 indicados na criação do índice. 
 
• Os campos podem ser uma chave primária ou campos onde haverá grandes 
 quantidades de pesquisa, por parte do sistema. 
 
• Quando os campos da tabela são selecionados, o índice é criado e ao arquivo é 
 adicionado um campo de ponteiro. Este campo indica qual o a seqüência da linha 
 da tabela. 
 
• O índice de uma chave primária é chamado de índice primário os demais índice 
da tabela serão chamados de índices secundários. 
 
3.5.1 Rotina interna de indexação e pesquisa 
 
• Quando um índice é criado as rotinas internas do banco de dados encarregam 
 de utilizar a melhor lógica de indexação do arquivo. 
 
• Quando é efetuada uma pesquisa na tabela, o sistema de banco de dados se 
 encarrega de escolher o melhor índice para a pesquisa. 
 
 
3.5.2 Consultando Índices 
 
 
Para consultar se uma tabela contém índices utilizar a transação SE11. 
 
 
Na tela clicar no botão “índices”. 
 
 
 
 
Será apresentada a tabela de índices para a tabela, ou uma mensagem indicando que não 
foram criados índices para a tabela. 
 
 
 18 
 
 
Na tela de listagem de índices, dê um duplo clique em um dos índices para exibir os 
atributos. 
 
 
3.6 Operadores Relacionais 
 
 
 
Inner join 
 
Recupera todos pares correspondentes de registros em duas tabelas, descartando os 
registros sem correspondência. 
Relação entre chave estrangeira e a chave primária. 
 
 
 
Outer join 
 
Recupera todos os registros correspondentes e não correspondentes entre a chave 
primária e chave estrangeira. 
 
 
 
 
 
 19 
 
 
 
 
 
3.7. Estruturas 
 
Declarada no ABAP Dictionary, é o agrupamento de campos sem a propriedade de 
armazenamento dos dados, como nas tabelas. 
 
Uma estrutura, quando chamada em um programa, cria uma área de memória no ABAP 
para armazenamento de uma linha de informação. 
 
Essa linha de informação fica na memória virtual e não é gravada no banco de dados, 
portando, ao término da execução do programa os dados da estrutura são apagados da 
área de memória. 
 
 
 
3.8 Views (Visões) 
 
Utilizamos visões quando precisamos unir campos de varias tabelas em uma única 
visualização. 
 
 
 TAB – Tabelas /condições join 
 
• Nesta TAB temos duas colunas, tabelas e condições join. 
 20 
• Na coluna tabelas são declaradas as tabelas que serão utilizadas na View 
• Na coluna de condições de união (Join) são declarados os campos e uniões. 
 
TAB - Cpos. Visão 
 
Local onde são declarados os campos que formar a estrutura da visão. 
 
TAB – Condições de seleção 
 
Local onde informada as condições de seleção da View 
 
TAB - Status at. 
 
• Acesso – Só Ler ou Ler e modificar. 
• A opção modificar só é valida para Views de uma tabela. 
• Permissões de exibição e atualização. 
 
 
3.9 Criando Uma tabela 
 
 
1. Criar um Domínio 
 
Entrar na transação SE11. 
 
 
 21 
 
Campo Domínio, informe o nome técnico. 
 
Clique em “Criar”; 
 
 
No campo Descrição Breve, informar descrição. 
 
 
 
TAB Definição Quadro “Formato”, informar: 
 
• Campo Categoria dados; 
• Núm. Posições; 
• Decimais; 
 
Informe o pacote e a ordem, salve e ative o objeto de domínio; 
 
 22 
 
 
2. Criar elemento de Dados 
 
 
Entrar na transação SE11. 
 
 
 
Na TAB “categoria de dados” 
 
• campo domínio informar nome técnico. 
 
• Clique em “Criar”. 
 
 23 
 
 
Selecione “Elemento de Dados” no Radio Button. 
 
 
 
 
 
 
Informar: Descrição breve. 
 
 
TAB Definições. 
 
 
Campo domínio Informe o nome do Domínio criado. 
 24 
 
 
TAB Denomin. 
 
Campo breve : informar nome abreviado. 
Campo Médio: informar nome. 
Campos Longa e Título: informar nome completo. 
 
Tecle [ Enter] e os comprimentos aparecerão. 
 
 25 
 
 
 
Salve o objeto no pacote e informe a ordem utilizada. 
 
 
 
 
 
 
 
 
 
 
 
 26 
3. Criar tabela 
 
Entrar na Transação SE11. 
 
 
 
Informar nome da tabela e clicar em “Criar”. 
 
 27 
 
 
 
 
Campos: informar nome do campo 
Chave primaria: Flegar se for a chave primaria 
Tipo de Campo: Informar elemento de dados 
 
 
 
TAB Campos Moeda/Quantidade 
 
Para os campos do tipo moeda ou quantidade, tem que informar uma tabela de 
 Referência. 
 
 
 28 
 
 Campos : informar Tabelas de referência. 
 
 Clicar em salvar. 
 
 Verifique que o status da tabela, informado ao lado do nome técnico da tabela, 
ainda está como “novo. 
 
 
3.9.1. Atualização de opções técnicas 
 
 
 29 
 
 
 
 
Na tela de atualização da tabela, clique em “Configurações técnicas”; 
 
 
 
 
 
Parâmetros de memória lógicos; 
 
Tipo de dados = APPL0; 
 
Categor. Tamanho = 0; 
 
Salvar; 
Menu � Configurações � Verificar; 
Veja o log de ativação, se existir, e proceda com as correções. 
 
Ative a tabela. 
 
 
 30 
3.9.1 Consultando objetos criados 
 
 
 
Para consultar os objetos criados entrar na SE80. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 31 
 
4. REPORTS 
 
 
 
Reports são programas executáveis no SAP. 
Há três tipos de listas: Simple Lists, Interactive Lists e SAP Grid Control (ALV, ALV Tree). 
 
4.1 Simple List 
 
O comando WRITE irá indicar a geração de uma lista para o buffer. Quando a saída da 
lista já foi construída no buffer, o sistema gera a imagem de tela do buffer da lista 
 
 
 
 
4.1.1 Eventos Utilizados 
 
Os principais eventos para processamento de relatórios são: 
 
INITIALIZATION Evento para inicializar as variáveis. Deve ser o primeiro evento a ser colocado no programa. Não é um evento obrigatório. 
 
TABLES .... 
DATA ..... 
..... 
INITIALIZATION. 
 
 
 32 
START-OF-SELECTION Evento usado para marcar o iniciode um conjunto de seleções de dados. 
 
START-OF-SELECTION. 
 
SELECT marc~matnr marc~werks t001w~name1 makt~maktx 
INTO TABLE t_marc 
FROM marc 
INNER JOIN t001w ON marc~werks = t001w~werks 
INNER JOIN makt ON marc~matnr = makt~matnr 
and makt~spras = sy-langu 
WHERE t001w~werks IN S_CENTRO 
AND marc~matnr IN S_MATERI. 
 
END-OF-SELECTION. 
 
 
END-OF-SELECTION 
 
Evento usado para marcar o fim das seleções de dados. 
 
START-OF-SELECTION. 
SELECT marc~matnr marc~werks t001w~name1 makt~maktx 
INTO TABLE t_marc 
FROM marc 
INNER JOIN t001w ON marc~werks = t001w~werks 
INNER JOIN makt ON marc~matnr = makt~matnr 
and makt~spras = sy-langu 
WHERE t001w~werks IN S_CENTRO 
AND marc~matnr IN S_MATERI. 
END-OF-SELECTION. 
 
 
4.1.2 Controle de nivel na tabela interna 
 
Ao processar tabelas internas com o comando LOOP, você pode executar 
processamentos. 
com nível de controle, utilizando tais parâmetros: 
 
AT FIRST Comando dentro do Loop, identifica o primeiro 
registro de uma tabela percorrida. (quebra) 
 
SORT BY campo. 
LOOP AT t_tabela. 
AT FIRST. …. 
ENDAT. 
... 
ENDDLOOP. 
 
 
 
 
 
 
 33 
AT NEW campo Comando dentro do LOOP, identifica o primeiro 
registro de uma seqüência (quebra) 
 
SORT BY campo. 
LOOP AT t_tabela. 
AT NEW campo. 
…. 
ENDAT. 
... 
ENDDLOOP. 
 
 
AT LAST Comando dentro do Loop, identifica o ultimo registro 
de uma tabela percorrida. (quebra) 
 
SORT BY campo. 
LOOP AT t_tabela. 
.... 
AT LAST. …. 
ENDAT. 
ENDDLOOP. 
 
 
AT END OF 
 
Comando dentro do Loop, identifica o ultimo registro 
de uma seqüência. (quebra) 
 
SORT BY campo. 
LOOP AT t_tabela. 
…. 
AT END of campo 
ENDAT. 
ENDDLOOP. 
 
 
 
4.1.3 Comando Message 
 
MESSAGE-ID 
MESSAGE 
Comando usado para definir classe de mensagens. 
Comando usado para chamar mensagens. 
 
* MESSAGE-ID nnn deve ser usado junto com o comando REPORT, no inicio do 
programa. 
 
Tipo de mensagens: 
E - Erro 
A - Aborta 
W - Aviso 
I - Informação 
S - Sucesso 
 
REPORT LINE-COUNT 80 LINE-SIZE 60 MESSAGE-ID Z01. 
MESSAGE W001. “Mensagem com avisos (warnings) 
MESSAGE E002. “Mensagem com erros. 
 34 
MESSAGE S003. “Mensagem de sucesso. 
 
* Também podemos passar parâmetros para as mensagens. 
* Na criação da mensagem na classe de mensagens devemos colocar o símbolo & para 
indicar a passagem de um parâmetro. 
MESSAGE S003 WITH text-001. 
 
 
4.1.4 Alguns comandos ABAP 
 
AT LINE-SELECTION Ao selecionar a linha no relatório 
 
AT LINE-SELECTION. 
 SELECT SINGLE maktx 
 FROM makt 
 INTO s_maktx 
 WHERE spras = sy-langu 
 AND matnr = s_matnr-low. 
 CHECK sy-subrc NE 0. 
 CLEAR s_maktx. 
 MESSAGE e208(00) WITH text-004. 
 
 
AT SELECTION-SCREEN Verifica o resultado de uma variável de seleção 
 
SELECTION-SCREEN BEGIN OF BLOCK b_janela WITH FRAME TITLE text-001. 
SELECT-OPTIONS s_material FOR T_MARC-MATNR. 
SELECTION-SCREEN END OF BLOCK b_janela. 
AT SELECTION-SCREEN ON s_material. 
 
AT USER-COMMAND Ao comando do usuário 
 
SET PF-STATUS ‘BOTAO’. 
IITIALIZATION. 
AT USER-COMMAND. 
IF SY-UCOMM = ‘DOWNLOAD’. 
PERFORM ZF_DOW_NOVO. 
ENDIF. 
 
 
APPEND Gravar em tabela interna 
 
APPEND t_tabela. 
 
 
 
 
 
 
 
CASE WHEN ENDCASE Tratamento de casos 
 35 
 
CASE okcode. 
WHEN 'SIM'. 
... 
WHEN 'NAO'. 
... 
WHEN OTHERS. 
... 
ENDCASE. 
 
 
CHECK Se a condição forverdadeira continua logo após a verificação, se não aborta a execução. 
 
CHECK SY-SUBRC = 0. 
 
 
CLEAR Limpa o conteúdo de uma variável ou tabela 
 
CLEAR var. 
CLEAR t_tabela. 
 
COLLECT 
Organiza a tabela interna com todas as descrições a 
esquerda totalizando os campos numéricos com a 
mesma chave. 
 
COLLECT t_tabela. 
 
COMMIT WORK Efetiva as alterações no Banco de dados 
 
COMMIT WORK. 
 
CONSTANTS Criar constantes que podem ser usadas em todo o 
programa 
 
CONSTANTS c_tipo TYPE C VALUE ‘;’. 
 
CONCATENATE Agrupa varias variáveis em uma única variável 
 
CONCATENATE ‘abc’ ‘XXX’ INTO var3. “ var3 = abcXXX 
 
 
END-OF-PAGE Marca o final de um cabeçalho de relatório 
 36 
 
TOP-OF-PAGE. 
WRITE ‘NOVO CABECALHO DEFINIDO PELO PROGRAMA’. 
END-OF-PAGE. 
 
FORMAT COLOR Usado para formatar a saída do comando WRITE 
 
FORMAT COLOR COL_TOTAL. 
WRITE 'QUALQUER COISA'. 
FORMAT COLOR COL_KEY. 
WRITE / 'QUALQUER COISA'. 
FORMAT COLOR COL_BACKGROUND. " VOLTA AO PADRÃO 
 
 
FREE Libera espaço utilizado por uma tabela interna na 
memória 
 
FREE t_tabela. 
 
HIDE Usado para definir campos para uma segunda janela 
em relatórios. 
 
SORT T_MARC BY matnr werks lgort. 
LOOP AT T_MARC. 
WRITE /5 T_MARC-MATNR. 
WRITE 18 T_MARC-MAKTX. 
WRITE 60 T_MARC-WERKS. 
WRITE 80 T_MARC-NAME1. 
HIDE :T_MARC-MATNR,T_MARC-MAKTX,T_MARC-WERKS, T_MARC-NAME1. 
ENDLOOP. 
 
 
IF .. ELSE .. ENDIF. Comando de decisão 
 
IF var = ‘A’. 
.... 
ELSE. 
.... 
ENDIF. 
 
 
 
 
 
 
 
 
IF NOT .. IS INITIAL Verifica se uma variável ou tabela interna esta vazia. 
 37 
 
IF NOT var IS INITIAL. 
.... 
ENDIF. 
 
INSERT Insere o conteúdo de uma variável em uma tabela 
transparente 
 
INSERT tabela. 
 
LEAVE PROGRAM Comando usado para sair de um programa on-line. 
 
LEAVE PROGRAM. 
 
LEAVE TO SCREEN Comando usado para mudar de tela dentro de 
programas on-line. 
 
LEAVE TO SCREEN 9000. “ 9000 , numero da tela 
 
LINE-SIZE 
LINE-COUNT 
Numero de colunas por pagina. 
Numero de linhas por pagina. 
 
* Estes comandos são usados dentro do comando REPOR T no inicio do programa. 
REPORT LINE-COUNT 60 LINE-SIZE 130. 
 
LOOP AT Comando usado para ler uma tabela interna. 
 
LOOP AT t_tabela. 
. 
. 
ENDDLOOP. 
 
 
MODIFY Comando usado para modificar uma tabela interna. 
 
MODIFY t_tabela. “ modifica toda a linha da tabela 
 
 
 
 
 
 
 
MOVE Move todo o conteúdo de uma tabela para outra. 
 38 
Os campos devem ser os mesmos. 
 
 
MOVE tabela TO tabela. 
MOVE wa TO wa. 
 
 
 
 
 
MOVE-CORRESPONDING Move apenas os campos correspondente entre 2 
tabelas. 
 
LOOP AT t_tabela. 
MOVE-CORRESPONDING t_tabela TO tabela. 
INSERT tabela. 
ENDLOOP. 
COMMIT WORK. 
 
 
NO STANDARD PAGE HEADING Ignora o cabeçalho STD do R/3 
 
* Deve ser usado em conjunto com o comando REPORT 
REPORT LINE-COUNT 80 LINE-SIZE 60 MESSAGE-ID Z01 NO STANDARD PAGE HEADING. 
 
PARAMETERS Cria parâmetros de seleção para janelas. 
 
PARAMETERS P_WERKS TYPE T_001W-WERKS. “ com os mesm os atributos do campo 
PARAMETERS CODIGO(3) TYPE C. 
* para criar radio-button 
PARAMETERS p_bot1 RADIOBUTTON GROUP g1. 
PARAMETERS p_bot2 RADIOBUTTON GROUP g1. 
* faz com que o parâmetro seja obrigatório. 
PARAMETERS p_matnr TYPE T_MARA-MATNR OBLIGATORY. 
* RLGRAP- FILENAME valor padrão para receber nomes de arquivo s a importar e 
exportar arquivos 
PARAMETERS P_ARQ TYPE RLGRAP-FILENAME. " OBLIGATORY. 
* PARA CRIAR VARIANTS DE EXIBIÇÃO PARA RELATÓRIOS A LV 
 
 
READ TABLE Usado para ler um registro especifico. 
 
SORT t_tabela1 BY campo. 
LOOP AT t_tabela1. 
* com o comando BINARY SEARCH a pesquisa fica mais rápida. 
READ TABLE t_tabela2 WITH KEY campo = t_tabela1-cam po BINARY SEARCH. 
* após o READ TABLE devemos verificar o resultado 
IF SY-SUBRC EQ 0. 
.... “ verdadeiro ( encontrou o dado ) 
ELSE. 
ENDIF. 
 39 
ENDLOOP. 
 
REFRESH Limpa o conteúdo de uma tabela. 
 
REFRESH t_tabela. 
 
 
 
 
REPORT Comando para iniciar um programa. 
 
REPORT. 
 
SELECT 
 
Select Single vbeln , erdat 
From vbak 
Into wa_vbak 
Where vbeln = p_vbeln 
 
*Utilizar somente com a chave primaria 
 
Select vbeln erdat ernan 
From vbap 
Up to 1 row 
Into wa_vbap *into table t_vbap 
Where ernan = p_ernan 
Endselect. “ somente no Up to Row 
 
*Trás o primeiro registro da tabela 
* Utilizar somente quando não tiver a chave primari a 
 
 
Select vbeln 
From vbak 
Into table t_vbak 
Where vbeln in s_vbeln 
 
* Sempre que for utilizar For all Entries utilizar If SY-SUBRC ou CHECK 
Select campo 
From vbap 
Into table t_vbap 
For all entries in t_vbak 
Where vbeln = t_vbak-vebln 
 
 
Select A~vbeln A~erdat B~posnr 
Into table t_rel 
 40 
From vbak as A inner join vbap as B 
On A~vbeln = B~vbeln 
Where A~vbeln ins_vbeln. 
 
 
 
 
SELECTION-OPTIONS Comando usado para colocar opções de seleção. 
 
SELECTION-SCREEN BEGIN OF BLOCK b_janela WITH FRAME TITLE text-001. 
SELECT-OPTIONS S_MATERI FOR T_MARC-MATNR. 
SELECT-OPTIONS S_CENTRO FOR T_MARC-WERKS. 
SELECTION-SCREEN END OF BLOCK b_janela. 
 
SELECTION-SCREEN Cria um BOX na janela 
 
* PARA CRIAR UM BOX NA JANELA 
* SELECTION-SCREEN BEGIN OF BLOCK nome_do_bloco WIT H FRAME TITLE 
* nome_do_elemento_de_texto 
* -> DEPOIS COLOCAR OS SELECT-OPTIONS ( variáveis ) 
* FECHAR COM : SELECTION-SCREEN END OF BLOCK nome_d o_bloco 
* clicar duas vezes sobre o nome_do_bloco para colo car o nome 
* que ira aparecer na tela 
SELECTION-SCREEN BEGIN OF BLOCK b_janela WITH FRAME TITLE text-001. 
SELECT-OPTIONS S_MATERI FOR T_MARC-MATNR. 
SELECT-OPTIONS S_CENTRO FOR T_MARC-WERKS. 
PARAMETERS P_BOT1 RADIOBUTTON GROUP b1. 
PARAMETERS P_BOT2 RADIOBUTTON GROUP b1. 
SELECTION-SCREEN END OF BLOCK b_janela. 
 
SET PF-STATUS Comando usado para criar botões para serem 
exibidos em relatórios. 
 
* depois dar dublo click sobre o nome do botão para criar o objeto. 
SET PF-STATUS ‘nome_do_botão’. 
 
SET TITLEBAR Comando usado para criar TITULOS de janelas. 
 
* depois dar dublo click sobre o nome do titulo para criar o objeto. 
SET TITLEBAR ‘NNN’’. 
 
SET PARAMETERS Usado para passar parâmetros para chamada de 
funções. 
 
* SET PARAMETER ID ‘NN’ FILED valor do campo para chamar transações passando 
* parâmetros 
SET PARAMETERS ID ‘VF' FIELD t_alv-vbeln. 
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN. 
 
 41 
SKIP Comando usado para pular linhas em relatório. 
 
WRITE ‘IMPRIME UMA LINHA’. 
SKIP 2. “ Pular duas linhas. 
 
 
SORT Comando usado ordenar tabelas internas 
 
SORT t_tabela BY campo. 
 
 
SPLIT .. AT .. INTO Usado para ler um arquivo externo e gravar na tabela. 
 
LOOP AT t_tabela. 
CLEAR t_tempo. 
* SPLIT tabela_inter na AT delimitador_do_arquivo INTO campos que irão r eceber os 
dados na 
* sequência do arquivo 
* c_tipo é o delimitardor do arquivo texto 
SPLIT t_tabela-texto01 AT c_tipo INTO T_TEMPO-BUKRS 
T_TEMPO-EKORG 
T_TEMPO-KTOKK 
T_TEMPO-NAME1 
T_TEMPO-SORTL 
T_TEMPO-ORT01 
T_TEMPO-PSTLZ 
T_TEMPO-LAND1 
T_TEMPO-REGIO. 
APPEND t_tempo. 
ENDLOOP. 
 
 
TABLES Usado para abertura de tabelas Standard 
 
 
TABLES : tabela1, tabela2, tabela3. 
 
 
TOP-OF-PAGE Marca o inicio de um cabeçalho de relatório 
 
TOP-OF-PAGE. 
WRITE ‘NOVO CABECALHO DEFINIDO PELO PROGRAMA’. 
END-OF-PAGE. 
 
 
TYPES Define os tipos de variáveis e pode ser usado para 
definir dados de tabela interna. 
 
DATA var1 TYPE I. “ define uma variável do tipo int eiro 
* define um tipo com os campos da tabela 
TYPES: 
BEGIN OF tipo_tabela 
vbeln TYPE vbrk-vbeln, 
 42 
kdgrp TYPE vbrk-kdgrp, 
netwr TYPE vbrk-netwr, 
END OF tipo_tabela. 
* cria a tabela definindo com o tipo criado acima u sando o header line. 
DATA t_tabela TYPE tipo_vbrk OCCURS 0 WITH HEADER L INE. 
 
 
ULINE Server para colocar uma linha continua em relatórios 
para fazer separações. 
 
ULINE “ imprime uma linha continua 
 
UPDATE Atualiza um tabela transparente 
 
UPDATE tabela. 
 
WRITE Comando usado para saída de impressora ou tela 
 
WRITE ‘ESTA LINHA SERA IMPRESSSA’. 
WRITE ‘ESTA LINHA SERA COLOCADA NA MESMA LINHA QUE A PRIMEIRA’. 
WRITE / ‘COM A / FAZ UMA QUEBRA E O TEXTO SERA IMPR ESSA NA LINHA DE BAIXO’. 
WRITE 5 ‘IMPRIME NA POSIÇÃO 5’. 
 
 
 
SY-DATUM 
SY-LANGU 
SY-MANDT 
SY-PAGNO 
SY-SUBRC 
SY-TABIX 
SY-UCOMM 
SY-UNAME 
SY-VLINE 
SY-TCODE 
 
 
Retorna a data do sistema 
Retorna o idioma de logon do usuário 
Retorna o mandante do sistema 
Retorna a pagina atual de um relatório 
Retorna o valor de uma pesquisa ou condição 
Retorna o índice de uma tabela em loop 
Retorna o nome de um botão precionado 
Retorna o nome do usuário 
Efetua a fechamento de bordas em um relatório 
Código da transação 
 
 
 
 
 
 
 
 
 
Formato de Saída – Cores 
Podemos exibir cores na saída de um relatório 
Através do comando WRITE, podemos definir a cor da linha ou coluna do relatório. 
 43 
 
 
 
 
 
 
Hotspots 
 
Hotspots são áreas especiais para relatórios. Se o usuário clicar no campo que esteja 
preparado com o hotspots, o evento é acionado (Evento AT LINE-SELECTION). 
 
Abaixo Uma lista com um campo Hotspot ficaria assim: 
 
 
 
Programa Report Simples 
 
*&------------------------------------------------- --------------------* 
*& Report Z_SD_ORDENSVENDA_37 
*& 
*&------------------------------------------------- --------------------* 
*& 
*& 
*&------------------------------------------------- --------------------* 
 
REPORT z_sd_ordensvenda_37 NO STANDARD PAGE HEADIN G. 
 
 
 
*Tabelas 
 
TABLES: vbak,vbap,vbuk,makt. 
 
 
 44 
*Tipos 
 
TYPES: BEGIN OF y_vbap, 
 matnr TYPE vbap-matnr, 
 vbeln TYPE vbap-vbeln, " Documento de vend as 
 posnr TYPE vbap-posnr, " Item do documento de vendas 
 waerk TYPE vbap-waerk, " Moeda do document o SD 
 netwr TYPE vbap-netwr, " Valor líquido da ordem na moeda do documento 
 kwmeng TYPE vbap-kwmeng, " Quantidade da ord em acumulada em unidade de 
venda 
 END OF y_vbap, 
 
 BEGIN OF y_vbak, 
 vbeln TYPE vbak-vbeln, " Documento de vend as 
 erdat TYPE vbak-erdat, " Data de criação d o registro 
 netwr TYPE vbak-netwr, " Valor líquido da ordem na moeda do documento 
 waerk TYPE vbak-waerk, " Moeda do document o SD 
 bstnk TYPE vbak-bstnk, " Nº pedido do clie nte 
 END OF y_vbak, 
 
 BEGIN OF y_vbuk, 
 vbeln TYPE vbuk-vbeln, " Documento de vend as 
 gbstk TYPE vbuk-gbstk, " Status Global Pro cessamento de Vendas 
 END OF y_vbuk, 
 
 
 BEGIN OF y_makt, 
 matnr TYPE makt-matnr, " Nº do material 
 maktx TYPE makt-maktx, " Texto breve de ma terial 
 END OF y_makt, 
 
 BEGIN OF y_vtotal, 
 netwr TYPE vbak-netwr, " Valor líquido da ordem na moeda do documento 
 END OF y_vtotal. 
 
 
 
* Tabelas Transparentes 
 
DATA: t_vbap TYPE TABLE OF y_vbap, 
 t_vbak TYPE TABLE OF y_vbak, 
 t_vbuk TYPE TABLE OF y_vbuk, 
 t_makt TYPE TABLE OF y_makt, 
* t_relat TYPE TABLE OF y_relat, 
* t_relat1 TYPE TABLE OF y_relat1. 
 t_vtotal TYPE TABLE OF y_vtotal. 
 
* Work Areas 
 
DATA: wa_vbap TYPE y_vbap, 
 wa_vbak TYPE y_vbak, 
 wa_vbuk TYPE y_vbuk, 
 wa_makt TYPE y_makt, 
 wa_vtotal TYPE y_vtotal. 
 
*Variaveis 
 
DATA: vtotal TYPE i VALUE 0. 
 45 
DATA: v_bot(1) TYPE c . 
DATA: cor TYPE c. 
 
*Constantes 
 
 
 
* Eventos 
 
 
 
 
 
 
* Tela de Seleção 
 
SELECTION-SCREEN BEGIN OF BLOCK d_janela WITH FRAME TITLE text-001. 
 
SELECT-OPTIONS s_vbeln FOR vbap-vbeln. " Pesquisa n º Documento 
SELECT-OPTIONS s_erdat FOR vbak-erdat. " Pesquisa D ata de Criação 
 
SELECTION-SCREEN BEGIN OF LINE. 
SELECTION-SCREEN COMMENT 1(28) text-003. 
SELECT-OPTIONS s_matnr FOR vbap-matnr NO-EXTENSION 
 NO INTERVALS. 
PARAMETER s_maktx TYPE makt-maktx. 
* SELECT-OPTIONS s_maktx FOR makt-maktx NO-EXTENSI ON 
* NO INTERVA LS. 
SELECTION-SCREEN END OF LINE. 
 
SELECTION-SCREEN BEGIN OF BLOCK b_janela1 WITH FRAM E TITLE text-002. 
PARAMETERS p_bot1 RADIOBUTTON GROUP b1. 
PARAMETERS p_bot2 RADIOBUTTON GROUP b1. 
PARAMETERS p_bot3 RADIOBUTTON GROUP b1. 
SELECTION-SCREEN END OF BLOCK b_janela1. 
 
SELECTION-SCREEN END OF BLOCK d_janela. 
 
INITIALIZATION. 
 
AT SELECTION-SCREEN OUTPUT. 
 
 LOOP AT SCREEN. 
 CHECK screen-name = 'S_MAKTX'. 
 screen-input = 0. 
 screen-output = 1. 
 screen-display_3d = ' '. 
 MODIFY SCREEN. 
 ENDLOOP. 
 
 
 
AT LINE-SELECTION. 
 SELECT SINGLE maktx 
 FROM makt 
 INTO s_maktx 
 WHERE spras = sy-langu 
 AND matnr = s_matnr-low. 
 46 
 CHECK sy-subrc NE 0. 
 CLEAR s_maktx. 
 MESSAGE e208(00) WITH text-004. 
 
 
 
 
 
 
 
START-OF-SELECTION. 
 
 
 
 
 
 PERFORM zf_seleciona_dados. 
 PERFORM zf_imprime_dados. 
 PERFORMzf_imprime_dados1. 
 
 
 
 
 
 
 
*&------------------------------------------------- --------------------* 
*& Form zf_seleciona_dados 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
FORM zf_seleciona_dados . 
 
 IF p_bot1 = 'X'. 
 v_bot = 'A'. 
 ELSEIF 
 p_bot2 = 'X'. 
 v_bot = 'B'. 
 ELSE. 
 p_bot3 = 'X'. 
 v_bot = 'C'. 
 ENDIF. 
 
 
 SELECT vbeln erdat netwr waerk bstnk 
 FROM vbak 
 INTO TABLE t_vbak 
 WHERE vbeln IN s_vbeln AND erdat IN s_erd at. 
 
 
 
 SELECT vbeln gbstk 
 FROM vbuk 
 INTO TABLE t_vbuk 
 FOR ALL ENTRIES IN t_vbak 
 47 
 WHERE vbeln = t_vbak-vbeln AND gbstk = v_b ot. 
 
 
 
 
 
 
 
 
 
 
 
ENDFORM. " zf_seleciona_dados 
*&------------------------------------------------- --------------------* 
*& Form zf_imprime_dados 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
FORM zf_imprime_dados . 
 
 ULINE. 
 WRITE:/ sy-vline, 
 (10) text-008, sy-vline, 
 (10) text-009, sy-vline, 
 (28) text-010, sy-vline, 
 (05) text-011, sy-vline, 
 (10) text-012, sy-vline. 
 ULINE. 
 LOOP AT t_vbak INTO wa_vbak. 
 IF cor IS INITIAL. 
 FORMAT COLOR COL_NORMAL INTENSIFIED OFF. 
 cor = 'x'. 
 ELSE. 
 FORMAT COLOR COL_KEY INTENSIFIED OFF. 
 CLEAR cor. 
 ENDIF. 
 
 
 
 LOOP AT t_vbak INTO wa_vbak. 
 READ TABLE t_vbuk INTO wa_vbuk WITH KEY vbeln = wa_vbak-vbeln. 
 IF sy-subrc = 0. 
 WRITE: / sy-vline, 
 (10) wa_vbak-vbeln HOTSPOT USING EDIT MASK'__________', sy-vline, 
 (10) wa_vbak-erdat DD/MM/YYYY, sy-vli ne, 
 (30) wa_vbak-bstnk, sy-vline, 
 (03) wa_vbak-waerk, sy-vline, 
 (10) wa_vbak-netwr, sy-vline. 
 HIDE wa_vbak-vbeln. 
 ENDIF. 
 ENDLOOP. 
 ULINE. 
 
 ENDLOOP. 
 
 48 
 
 
ENDFORM. " zf_imprime_dados 
*&------------------------------------------------- --------------------* 
*& Form zf_imprime_dados1 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
FORM zf_imprime_dados1 . 
 
 
 
 LOOP AT t_vbap INTO wa_vbap. 
 AT NEW vbeln. 
 REFRESH t_vtotal. 
 WRITE: / text-007, 
 wa_vbap-vbeln. 
 ULINE. 
 ENDAT. 
 
 READ TABLE t_makt INTO wa_makt WITH KEY matnr = wa_vbap-matnr. 
 WRITE: / sy-vline, 
 
 (05) wa_vbap-posnr, sy-vline, 
 (22) wa_makt-maktx, sy-vline, 
 (16) wa_vbap-matnr, sy-vline, 
 (10) wa_vbap-waerk, sy-vline, 
 (10) wa_vbap-netwr, sy-vline. 
 
 wa_vtotal-netwr = wa_vbap-netwr. 
 COLLECT wa_vtotal INTO t_vtotal. 
 
 AT END OF vbeln. 
 ULINE. 
 LOOP AT t_vtotal INTO wa_vtotal. 
 
 WRITE: / text-006 COLOR COL_NORMAL, 
 wa_vtotal-netwr. 
 ENDLOOP. 
 ENDAT. 
 
 ENDLOOP. 
 
 
 
 
ENDFORM. " zf_imprime_dados1 
 
 
 
 
 
4.2 ALV 
 
 49 
O Abap List Viewer (ALV) é uma ferramenta que padroniza e simplifica o uso de listas e 
relatórios no sistema R/3 tanto para o desenvolvedor tanto para o usuário que interage 
com o relatório. 
O ALV através de suas funções e estruturas torna o desenvolvimento mais simples na 
medida que economiza significativas linhas de código como por exemplo no tratamento de 
quebras, totais, subtotais, cores e outras vantagens que veremos a seguir. 
 
 
*&------------------------------------------------- --------------------* 
*& Report ZSD_ALV1_37 
*& 
*&------------------------------------------------- --------------------* 
*& 
*& 
*&------------------------------------------------- --------------------* 
REPORT ZSD_ALV1_37. 
*Declaração do grupo de tipos SLIS que contém as de finições necessárias 
*para interagir com as funções ALV 
TYPE-POOLS: slis. 
 
*Declaração da tabela para uso na tela de seleção 
TABLES: MAKT. 
 
 
 
 
TYPES:BEGIN OF y_cabecalho, 
 matnr TYPE mara-matnr, " Nº do material 
 ersda TYPE mara-ersda, " Data de criação 
 mtart TYPE mara-mtart, " Tipo de material 
 matkl TYPE mara-matkl, " Grupo de mercadori as 
 ntgew TYPE mara-ntgew, " Peso líquido 
 maktx TYPE makt-maktx, 
 box(1) TYPE c, 
 
 END OF y_cabecalho. 
 
 
*Declaração da tabela interna de saída 
DATA: t_cabecalho TYPE TABLE OF y_cabecalho, 
 
*Tabela interna com a definição da estrutura 
 t_fieldcat TYPE slis_t_fieldcat_alv, 
 t_sort TYPE slis_t_sortinfo_alv. 
 
*Tabela interna com o Cabeçalho 
 DATA: t_listheader TYPE slis_t_listheader. 
 
*Declaração de estrutura de Layout 
DATA: w_layout TYPE slis_layout_alv. 
 
 
 
*Tela de seleção com a ordem de venda 
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 
SELECT-OPTIONS: s_mara FOR makt-matnr. 
SELECTION-SCREEN END OF BLOCK b1. 
 50 
 
 
 
*-------------------------------------------------- -------------------- 
* INITIALIZATION * 
*-------------------------------------------------- --------------------* 
INITIALIZATION. 
*Declaração da variável que armazenará o nome do pr ograma e será 
*enviada para a função de chamada do ALV 
DATA: v_repid TYPE sy-repid. "Nome do Programa 
 
*Passagem do nome do programa para a variável criad a 
 v_repid = sy-repid. 
 
*-------------------------------------------------- --------------------* 
* START-OF-SELECTION * 
*-------------------------------------------------- --------------------* 
START-OF-SELECTION. 
*Chamada da rotina para carregar a tabela interna 
 PERFORM zf_buscar_dados. 
 
 PERFORM zf_top_of_page. 
 PERFORM zf_cabecalho. 
*Indicação de campos para exibição na lista 
 PERFORM zf_fieldcat_init. 
*Definição dos parâmetros de layout que serão utili zados 
 
 PERFORM zf_ordenar_lista. 
 
 
 
 PERFORM zf_layout_build. 
 
 PERFORM zf_list_display. 
 
 
 
 
*-------------------------------------------------- --------------------* 
* END-OF-SELECTION * 
*-------------------------------------------------- --------------------* 
END-OF-SELECTION. 
*Chamada da rotina para construção da lista ALV Gri d 
 
 
 FORM zf_layout_build. 
 
*Não mostrar descrição das colunas 
* w_layout-no_colhead = 'X'. 
 
*Imprimir linha clara e escura alternadamente 
 w_layout-zebra = 'X'. 
 
*Não imprimir divisões entre colunas 
* w_layout-no_vline = 'X'. 
 
*Permite edição em todos os campos 
* w_layout-edit = 'X'. 
 51 
 
*Abre a lista com as colunas do tamanho necessário para mostragem 
 w_layout-colwidth_optimize = 'X'. 
 
*Escreve na barra de título 
 w_layout-window_titlebar = text-002. 
 
*Não permite mostragem da linha de total 
* w_layout-no_totalline = 'X'. 
 
*Não permite mostragem de subtotais 
* w_layout-no_subtotals = 'X'. 
 
*Mostra os totais na parte de cima da lista 
* w_layout-totals_before_items = 'X'. 
 
*Permitir mudança de níves de quebra para subtotais 
* w_layout-group_change_edit = 'X'. 
 
*Declaração de campo check box 
 w_layout-box_fieldname = 'BOX'. 
 w_layout-box_tabname = 'T_CABECALHO'. 
 
 
ENDFORM." zf_layout_build 
 
*&------------------------------------------------- --------------------* 
*& Form ZF_LIST_DISPLAY 
*&------------------------------------------------- --------------------* 
* Chamada da função de abertura do ALV com to das as informações 
*-------------------------------------------------- --------------------* 
FORM zf_list_display. 
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 
 EXPORTING 
* I_INTERFACE_CHECK = ' ' 
* I_BYPASSING_BUFFER = ' ' 
* I_BUFFER_ACTIVE = ' ' 
 i_callback_program = v_repid 
* I_CALLBACK_PF_STATUS_SET = ' ' 
* I_CALLBACK_USER_COMMAND = 'USER COMMA ND' 
 i_callback_top_of_page ='ZF_TOP_OF_P AGE' 
* I_CALLBACK_HTML_TOP_OF_PAGE = 
* I_CALLBACK_HTML_END_OF_LIST = ' ' 
* I_STRUCTURE_NAME = 
* I_BACKGROUND_ID = ' ' 
* I_GRID_TITLE = 
* I_GRID_SETTINGS = 
 is_layout = w_layout "V ariação de Layout 
 it_fieldcat = t_fieldcat "Estrutura utilizada 
* IT_EXCLUDING = 
* IT_SPECIAL_GROUPS = 
 IT_SORT = t_sort 
* IT_FILTER = 
* IS_SEL_HIDE = 
* I_DEFAULT = 'X' 
 i_save = 'A' "Permite salvar layouts 
* IS_VARIANT = 
* IT_EVENTS = 
 52 
* IT_EVENT_EXIT = 
* IS_PRINT = 
* IS_REPREP_ID = 
* I_SCREEN_START_COLUMN = 0 
* I_SCREEN_START_LINE = 0 
* I_SCREEN_END_COLUMN = 0 
* I_SCREEN_END_LINE = 0 
* I_HTML_HEIGHT_TOP = 0 
* I_HTML_HEIGHT_END = 0 
* IT_ALV_GRAPHICS = 
* IT_HYPERLINK = 
* IT_ADD_FIELDCAT = 
* IT_EXCEPT_QINFO = 
* IR_SALV_FULLSCREEN_ADAPTER = 
* IMPORTING 
* E_EXIT_CAUSED_BY_CALLER = 
* ES_EXIT_CAUSED_BY_USER = 
 TABLES 
 t_outtab = t_cabecalho "Tabela Intern a 
 EXCEPTIONS 
 program_error = 1 
 OTHERS = 2. 
 
*Verifica retorno da função 
 IF sy-subrc NE 0. 
 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msg no 
 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv 4. 
 ENDIF. 
 
 
ENDFORM. 
*&------------------------------------------------- --------------------* 
*& Form zf_ordenar_lista 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
form zf_ordenar_lista . 
 
*Estrutura de ordenação inicial para lista 
 DATA: w_sort TYPE slis_sortinfo_alv. 
 
*Montar estrutura 
 CLEAR w_sort. 
 w_sort-spos = 1. " Seqüência d e ordenação 
 w_sort-fieldname = 'MATNR'. " Nome do cam po 
 w_sort-tabname = 'T_CABECALHO'. " Nome da tab ela de lista 
 w_sort-up = 'X'. " Ordenação c rescente 
 w_sort-expa = 'X'. " Expandir li sta 
 APPEND w_sort TO t_sort. 
 
 CLEAR w_sort. 
 w_sort-spos = 2. " Seqüência d e ordenação 
 w_sort-fieldname = 'NTGEW'. " Nome do cam po 
 w_sort-tabname = 'T_CABECALHO'. " Nome da tab ela de lista 
 w_sort-up = 'X'. " Ordenação c rescente 
 53 
* w_sort-expa = 'X'. " Expandir l ista 
 w_sort-subtot = 'X'. " Subtotal 
* 
 APPEND w_sort TO t_sort. 
 
endform. " zf_ordenar_lista 
*&------------------------------------------------- --------------------* 
*& Form zf_buscar_dados 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
form zf_buscar_dados . 
 
 SELECT a~matnr a~ersda a~mtart a~matkl a~ntgew t ~maktx 
 
 INTO TABLE t_cabecalho 
 FROM mara as a inner join makt as t on a~m atnr = t~matnr 
 WHERE a~matnr in s_mara and spras = sy-lan gu. 
 
endform. " zf_buscar_dados 
*&------------------------------------------------- --------------------* 
*& Form zf_fieldcat_init 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
form zf_fieldcat_init . 
*Estrutura 
 DATA: w_fieldcat TYPE slis_fieldcat_alv. 
 
*Limpar tabela 
 CLEAR t_fieldcat. 
 
*Cód. doc. venda 
 CLEAR w_fieldcat. 
 w_fieldcat-fieldname = 'MATNR'. 
 w_fieldcat-ref_tabname = 'MARA'. 
 APPEND w_fieldcat TO t_fieldcat. 
 
 
*Data de Criação 
 CLEAR w_fieldcat. 
 w_fieldcat-fieldname = 'ERSDA'. 
 w_fieldcat-ref_tabname = 'MARA'. 
 APPEND w_fieldcat TO t_fieldcat. 
 
*Criado por 
 CLEAR w_fieldcat. 
 w_fieldcat-fieldname = 'MTART'. 
 w_fieldcat-ref_tabname = 'MARA'. 
 APPEND w_fieldcat TO t_fieldcat. 
 
*Tipo de Ordem 
 54 
 CLEAR w_fieldcat. 
 w_fieldcat-fieldname = 'MATKL'. 
 w_fieldcat-ref_tabname = 'MARA'. 
 APPEND w_fieldcat TO t_fieldcat. 
 
*Valor líq. da ordem 
 CLEAR w_fieldcat. 
 w_fieldcat-fieldname = 'NTGEW'. 
 w_fieldcat-do_sum = 'X'. 
 w_fieldcat-ref_tabname = 'MARA'. 
 
 APPEND w_fieldcat TO t_fieldcat. 
 
 
*Canal de distribuição 
 CLEAR w_fieldcat. 
 w_fieldcat-fieldname = 'MAKTX'. 
 w_fieldcat-ref_tabname = 'MAKT'. 
 APPEND w_fieldcat TO t_fieldcat. 
endform. " zf_fieldcat_init 
*&------------------------------------------------- --------------------* 
*& Form zf_cabecalho 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
form zf_cabecalho . 
 
 DATA: w_listheader TYPE slis_listheader. 
 
 CLEAR t_listheader[]. 
 
 CLEAR w_listheader. 
 w_listheader-typ = 'H'. 
 w_listheader-info = text-013. 
 APPEND w_listheader TO t_listheader. 
 
 CLEAR w_listheader. 
 w_listheader-typ = 'S'. 
 w_listheader-info = text-012. 
 APPEND w_listheader TO t_listheader. 
 
 CLEAR w_listheader. 
 w_listheader-typ = 'A'. 
 w_listheader-info = text-014. 
 APPEND w_listheader TO t_listheader. 
 
 
endform. " zf_cabecalho 
*&------------------------------------------------- --------------------* 
*& Form zf_top_of_page 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
 55 
*-------------------------------------------------- --------------------* 
FORM zf_top_of_page . 
 
 
 CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' 
 EXPORTING 
 it_list_commentary = t_listheader 
 i_logo = 'ENJOYSAP_LOGO'. 
* I_END_OF_LIST_GRID = 
* I_ALV_FORM = 
 
ENDFORM. " zf_top_of_page 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 56 
5. DIALOG 
 
 
 
5.1 Module PoolCada tela tem um evento que ocorre antes da apresentação da tela e um evento que 
ocorre depois do usuário fazer alguma ação na tela gerada. 
 
Esses eventos são 
 
• PBO (Process Before Output) 
• PAI (Process After Input) 
 
 
 
 
 
 
Para ciar programas Module Pool utilizar a transação SE80. 
 
 
 
• Padrão de nome de um Module Pool: 
– SAPMZ........ Sempre iniciado por essas cinco letras. 
 
 
 
 
 
Module Pool (Transação SE80) 
 57 
Informar o nome do programa a ser criado no campo em destaque abaixo: 
 
 
 
Clicar em sim! (Desejo criar o objeto). 
 
 
Confirmar utilizando o botão “ENTER” do teclado. 
 
 
 
Ele pergunta se iremos querer o include TOP, que é o include onde iremos declarar todas 
as nossas variáveis globais. Devemos marcar que iremos utilizar o include TOP. 
 
 
Selecionar: 
 
E Informar o nome da 
aplicação e clicar no botão 
“ENTER”. 
 58 
 
Informar O Título do programa e clicar no botão gravar. 
 
 
Informar a request a ser gravada ou objeto local. 
 
 
Criar uma tela para o programa: 
Clicar com o botão direito sobre o nome do programa e selecionar “Tela”. 
 59 
 
 
Informar descrições das telas: 
 
 
 
E clicar em . 
 60 
 
 
Clicar em Layout será Exibido o modo de edição de tela. 
Informar o Nome “OK_CODE”, que 
será responsável por armazenar o 
código do comando efetuado pelo 
usuário, seguindo a Idáia do SY-
UCOOM. 
 61 
 
 
Utilizar o F6 para localizar os campos das tabelas: 
 
 
Selecionar os campos que deseja que seja exibido em sua tela: 
Informar o nome da tabela com 
campo ou somente o nome da 
tabela a ser localizado. Apertar o 
ENTER e será exibido o’s campo’s. 
 62 
 
E apertar Enter. Só posicionar os campos na tela e pronto. 
Obs: Para mais opções com o design da tela, utilizar Barra de ferramentas ao lado 
esquerdo. 
 
 
 63 
 
Para checar os detalhes de cada campo, apertar o f2 em cima do mesmo, será exibida a 
tela: 
 
 
Criar transação para o programa. 
Clicar com o botão direito sobre o nome do programa e selecionar transação. 
 
 
Informar o “código da transação” (campo a escolha), uma descrição. Apertar ‘ENTER’. 
 64 
 
 
Informar o nome do programa, nome da tela e todos as Capacidades de Gui. 
 
 
Para testar se a tela está Ok. Executar a o nome da transação na barra com o /o para abrir 
uma nova janela . 
Tipo do programa 
a ser utilizado. 
 65 
 
A tela deverá seguir o modelo abaixo: 
 
 
Deverá ser retirado o comentário dos INCLUDE e dar um clique duplo sobre eles, será 
solicitado pra criar o include no programa! 
 
 
PROCESS BEFORE OUTPUT – É aonde ocorre todos os processamentos antes da tela 
ser exibida. 
PROCESS AFTER INPUT – É aonde ocorre o processamento após a interação com o 
usuário. 
 
 66 
Dica: Sempre que ocorre a interação do usuário com o programa, o sistema executa as 
instruções do PAI (PROCESS AFTER INPUT) e depois carrega o PBO (PROCESS 
BEFORE OUTPUT). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 67 
Retirar o comentário do MODULE STATUS_1000. Dar um duplo clique e criar o objeto. 
 
 
O Objeto deverá ser associado ao include com final O01. Include PBO. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 68 
 
Tirar o comentário de linha dos dois itens e substituir ‘xxxxx’ por um nome. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
E dar um duplo clique para criar os objetos. Deverá associar ao PBO. 
 69 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 70 
Atribuir nomes aos botões da barra Application tool bar. 
Ao salvar a tela será exibida a tela 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 71 
Tirar o comentário do USER_COMMAND_1000. E dar um duplo clique para criar o objeto. 
 
 
Associar ao modulo PAI. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5.2. TABSTRIP 
 
 
 72 
É um componente disponível para criar uma divisão por abas, cada aba tendo o seu 
próprio conteúdo. 
 
 
 
5.2.1 Criando Tabstrip com Assistente. 
 
 
 
Marcar a ferramenta do Tabstrip com o 
Assistente e delimitar a área da tela 
que será usada. 
 73 
 
 
 
 
 
 
 
 
Definir o nome 
do Tabstrip 
 74 
 
 
 
 
 
 
 
 
 
 
 
Será criada automaticamente uma subtela para cada aba 
indicada. Os nomes são sugeridos pelo sistema, mas podem ser 
alterados. 
Indicar quantas abas 
E quais os nomes a 
Serem utilizados 
 75 
 
 
 
 
 
 
 
 
 
 
 
Os códigos gerados, serão incluídos nos 
includes indicados. É recomendado não 
alterar essas opções. 
 76 
 
 
 
• Criado o Tabstrip pelo wizard, uma série de códigos são inseridos nos includes para 
fazer todo o tratamento das abas e chamadas das subtelas. 
 
• Para inserir dados dentro das subtela, basta abrir a subtela no editor gráfico e 
inserir o que deseja. 
 
• Cada subtela possui seu próprio PBO e PAI que é chamado a cada seleção de aba. 
Podemos codificar apenas para a aba utilizando essas chamadas locais. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 77 
5.3. TABLE CONTROL 
 
É um componente de tela utilizado para apresentar uma série de dados em linhas e 
colunas, semelhante a uma planilha. 
Além de visualizar dados, é bastante utilizado na inserção da dados em maior quantidade, 
pois facilita para o usuário. 
 
 
 
 
 
 
 
5.3.1 Criando Table Control com o Assistente 
 
 
 
 78 
 
 
 
 
 
 
 
Definir o nome 
do Table Control 
 79 
 
 
 
 
 
 
 
 
 
 
 
 
Definir se utilizará os campos de uma 
<TT> ou de uma <TI>. Caso seja de 
uma <TI>, esta já deverá estar declarada 
no programa. 
Marcar quais campos da <TI> 
deverão aparecer no Table 
Control. 
 80 
 
 
 
 
 
 
 
 
 
 
Definir se o TC permitirá a entrada de 
dados ou se será somente de 
visualização. 
Paginar gera os botões e o código para 
mudança de páginas. 
Cria os botões para inserir e eliminar linhas 
quando for habilitada a marcação de linhas. 
Cria os botões para marcar e desmarcar 
todas linhas quando for habilitada a 
marcação de linhas. 
Para habilitar a marcação de linhas, deve 
ser criado um campo do tipo char(1) na <TI> 
e selecioná-lo nessa opção. 
 81 
 
 
 
 
 
 
 
 
 
 
 
 
 
Os códigos gerados, serão incluídos nos includes indicados. É 
recomendado não alterar essas opções. 
 82 
 
 
 
• Criado o Table Control pelo wizard, uma série de códigos são inseridos nos includes 
para fazer todo o tratamento das linhas e colunas, e relação com a tabela interna. 
 
• Para que os dados apareçam no Table Control, basta inseri-los na tabela interna 
correspondente. Porém depois de criado o Table Control, se adicionarmos um 
campo na tabela interna, deveremos adicioná-lo manualmente no Table Control. 
 
• Quando utilizado o campo para marcação, para verificar se a linha está marcada 
basta checar se o conteúdo do campo de marcação recebeu o valor ‘X’. 
 
 
5.3.2 Loop at Screen 
 
• SCREEN é uma tabela do sistema que contém todos os objetos da tela atual. Com 
isso podemos percorrer essa tabela e alterar algumas das propriedades dos 
campos existentes. 
 
• Algumas opções que podemos alterar são: visibilidade do campo, habilitação para 
inserção de dados, enfatizar, etc... 
 
• O loop at screen deve ser feito sempre no PBO da tela que pretendemos alterar. 
 
 
 
 
 
O resultado do Table Control com os 
botões de paginação. 
Os títulos das colunas devem ser 
alteradas. 
 83 
 
Sintaxe: 
 
loop at screen. 
 if screen-name eq ‘nome_campo’. 
 screen-input = 0. “desabilita para escrita 
 screen-invisible = 1. “torna o campo invisível 
 modify screen. 
 endif. 
endloop. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 84 
 
 
6. SHDB 
 
 
 
Mapeamento das telas 
 
O mapeamento das telas é feito através da transação SHDB. Normalmente o funcional irá 
entregar o mapeamento já pronto, mas pode ser necessário mapear uma transação por 
conta própria. 
 
Na SHDB, a transação será executada em um modo especial, que grava todos os 
comandos e informações digitadas em uma transação. 
 
 
 
 
Para efetuar o mapeamento selecionar Nova gravação, informar transação85 
Para visualizar resultado do mapeamento, duplo clique no registro. 
 
Na tela será exibido todas as telas,campos e ações do usuário na transação. 
 
 
 86 
 
7. RFC 
 
 
• Função RFC nada mais é do que um módulo de função que está habilitado a ser 
executado de fora do SAP. 
• Por exemplo, utilizando um conector.net para o SAP podemos chamar uma função 
RFC do SAP de dentro de um programa em VB. O mesmo ocorre para outras 
linguagens como o PHP. 
 
 
• Como habilitar uma função para RFC? 
 
• No módulo de função, em Características, marcar a opção ‘Módulo de Acesso 
Remoto’. 
 
• Obs.: Todos os campos de importação, exportação e modificação deverão ter o flag 
‘Transfer. Valor’ marcado. 
 
 
 
 
 
 
 
 
 
 87 
 
 
8. BATCH INPUT 
 
 
 
O que é Batch Input 
 
Batch Input ou BDC (Batch Data Communication) é um procedimento automático 
para transferência de dados para o sistema SAP sem a interferência do usuário (tela do 
usuário). Uma tela de usuário é simulada para este procedimento de modo que as 
mesmas checagens e atualizações possam ser executadas. 
Um componente central deste processamento é uma fila de arquivo. Este arquivo recebe 
os dados via programas do Batch Input e agrupa os dados juntos em uma “pasta”. 
Para carregar os dados para as bases de dados do SAP, você processa as pastas com a 
função de Batch Input utilizar a Transação SM35 
 
 
 
Criação do Programa 
 
 
 
 
Estrutura da Tabela BDC 
 
o Antes de você escrever um programa Batch Input, você tem que executar a 
transação e anotar o número da tela, seqüência de telas e os nomes dos 
campos da tela para serem endereçados mais tarde no programa. Você entra 
com estes dados na tabela BDC. 
o O nome do campo para o OK-code é o mesmo para todas as telas: 
BDC_OKCODE. O valor para o OK-code consiste de uma barra ´/´ e o 
número da tecla de função (ex: ´/11´). 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 88 
1. Declarar Tabelas, Types, Work áreas e tabelas internas para utilização. 
*&------------------------------------------------- --------------------* 
*& Report ZMM_FORNBI_23 
*& 
*&------------------------------------------------- --------------------* 
*& Descrição : Programa para Batch Input 
*& Autor : Daniela Cristina Guerra 
*&------------------------------------------------- --------------------* 
 
REPORT zmm_fornbi_23. 
 
 
 
*&Tabelas------------------------------------------ --------------------* 
 
TABLES: bdcdata. 
 
*&Types-------------------------------------------- --------------------* 
 
TYPES: BEGIN OF y_upload, 
 lifnr TYPE rf02k-lifnr, 
 bukrs TYPE rf02k-bukrs, 
 ekorg TYPE rf02k-ekorg, 
 kotkk TYPE rf02k-ktokk, 
 name1 TYPE lfa1-name1, 
 sortl TYPE lfa1-sortl, 
 land1 TYPE lfa1-land1, 
 spras TYPE lfa1-spras, 
 waers TYPE lfm1-waers, 
 END OF y_upload. 
 
*&Tabelas Internas--------------------------------- --------------------* 
 
DATA: t_upload TYPE TABLE OF y_upload, 
 t_bdc_data TYPE TABLE OF bdcdata. 
 
 
*&Work areas--------------------------------------- --------------------* 
 
DATA: wa_upload TYPE y_upload, 
 wa_bdc_data TYPE bdcdata. 
 
 
2. Criar tela de seleção. 
 
*&Tela de Seleção---------------------------------- --------------------* 
 
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 
 PARAMETER p_arq TYPE string. 
SELECTION-SCREEN END OF BLOCK b1. 
 
 
*&Inicialização------------------------------------ --------------------* 
 
INITIALIZATION. 
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_arq. 
 
 89 
 PERFORM zf_abrir_busca_arquivo. 
 
 
*&Inicio do Processamento ------------------------- ---------------------* 
 
START-OF-SELECTION. 
 
 
 
 PERFORM zf_upload_arquivo. 
 
 PERFORM zf_loop. 
 
 
2. Buscar o arquivo texto usando a função WS_FILENAME_GET e ler o arquivo com 
GUI_UPLOAD, passando os dados carregados para uma tabela Interna, com a 
mesma estrutura e campos do arquivo de layout. 
 
*&------------------------------------------------- --------------------* 
*& Form zf_abrir_busca_arquivo 
*&------------------------------------------------- --------------------* 
* Descrição: Inicia a tela para buscar arquivo 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
FORM zf_abrir_busca_arquivo. 
 
 CALL FUNCTION 'WS_FILENAME_GET' 
 EXPORTING 
* def_filename = ' ' 
* DEF_PATH = ' ' 
* MASK = ' ' 
 MODE = 'O' 
 TITLE = Text-011 
 IMPORTING 
 filename = p_arq “ nome da tabe la para carregar dados 
* RC = 
 EXCEPTIONS 
 inv_winsys = 1 
 no_batch = 2 
 selection_cancel = 3 
 selection_error = 4 
 OTHERS = 5 
 . 
 IF sy-subrc <> 0. 
 
 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msg no 
 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv 4. 
 
 ENDIF. 
 
 
ENDFORM. " zf_abrir_busca_arquiv o 
*&------------------------------------------------- --------------------* 
*& Form zf_upload_arquivo 
*&------------------------------------------------- --------------------* 
 90 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
FORM zf_upload_arquivo . 
 
 CALL FUNCTION 'GUI_UPLOAD' 
 EXPORTING 
 filename = p_arq 
* FILETYPE = 'ASC' 
* HAS_FIELD_SEPARATOR = ' ' 
* HEADER_LENGTH = 0 
* READ_BY_LINE = 'X' 
* DAT_MODE = ' ' 
* CODEPAGE = ' ' 
* IGNORE_CERR = ABAP_TRUE 
* REPLACEMENT = '#' 
* CHECK_BOM = ' ' 
* VIRUS_SCAN_PROFILE = 
* NO_AUTH_CHECK = ' ' 
* IMPORTING 
* FILELENGTH = 
* HEADER = 
 TABLES 
 data_tab = t_upload 
* EXCEPTIONS 
* FILE_OPEN_ERROR = 1 
* FILE_READ_ERROR = 2 
* NO_BATCH = 3 
* GUI_REFUSE_FILETRANSFER = 4 
* INVALID_TYPE = 5 
* NO_AUTHORITY = 6 
* UNKNOWN_ERROR = 7 
* BAD_DATA_FORMAT = 8 
* HEADER_NOT_ALLOWED = 9 
* SEPARATOR_NOT_ALLOWED = 10 
* HEADER_TOO_LONG = 11 
* UNKNOWN_DP_ERROR = 12 
* ACCESS_DENIED = 13 
* DP_OUT_OF_MEMORY = 14 
* DISK_FULL = 15 
* DP_TIMEOUT = 16 
* OTHERS = 17 
 . 
 IF sy-subrc = 0. 
 
 ENDIF. 
 
 
ENDFORM. " zf_upload_arquivo 
 
 
 
 
 
 
 91 
*&------------------------------------------------- --------------------* 
*& Form zf_loop 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
form zf_loop . 
 
 LOOP AT t_upload INTO wa_upload. 
 
 AT FIRST. 
 
 PERFORM zf_open. 
 ENDAT. 
 
 PERFORM zf_parametros_doc. 
 
 PERFORM zf_insert. 
 
 CLEAR t_bdc_data. 
 
 AT LAST. 
 PERFORM zf_close. 
 ENDAT. 
 
 
 ENDLOOP. 
 
 IF sy-subrc = 0. 
 message i208(00) with text-008. 
 ENDIF. 
 
ENDFORM. " zf_loop 
 
 
 
1. Preencher uma itab com a mesmaestrutura da BDCDATA, passando o 
mapeamento gerado na transação SHDB. 
 
*&------------------------------------------------- --------------------* 
*& Form zf_monta_t_upload 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
FORM zf_monta_t_upload USING begin TYPE any 
 prog TYPE any 
 value TYPE any. 
 
 
 CLEAR wa_bdc_data. 
 
 IF begin = 'X'. 
 92 
 
 wa_bdc_data-dynbegin = begin. 
 wa_bdc_data-program = prog. 
 wa_bdc_data-dynpro = value. 
 append wa_bdc_data to t_bdc_data. 
 
 ELSE. 
 
 wa_bdc_data-fnam = prog. 
 wa_bdc_data-fval = value. 
append wa_bdc_data to t_bdc_data. 
 ENDIF. 
 
 
 
 
 
 
ENDFORM. " zf_monta_t_upload 
 
*&------------------------------------------------- --------------------* 
*& Form zf_parametros_doc 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
FORM zf_parametros_doc. 
 
 
 PERFORM zf_monta_t_upload USING: 
 
 
 'X' 'SAPMF02K' '0100', 
 
 
 ' ' 'BDC_OKCODE' '/00', 
 ' ' 'RF02K-LIFNR' wa_upload-
lifnr, 
 ' ' 'RF02K-BUKRS' wa_upload-
bukrs, 
 ' ' 'RF02K-EKORG' wa_upload-
ekorg, 
 ' ' 'RF02K-KTOKK' wa_upload-
kotkk, 
 'X' 'SAPMF02K' '0110', 
 
 
 ' ' 'BDC_OKCODE' '/00', 
 ' ' 'LFA1-NAME1' wa_upload-
name1, 
 ' ' 'LFA1-SORTL' wa_upload-
sortl, 
 ' ' 'LFA1-LAND1' wa_upload-
land1, 
 ' ' 'LFA1-SPRAS' wa_upload-
spras, 
 93 
 'X' 'SAPMF02K' '0120', 
 
 
 ' ' 'BDC_OKCODE' '=VW', 
 
 'X' 'SAPMF02K' '0130', 
 
 
 ' ' 'BDC_OKCODE' '=VW', 
 
 'X' 'SAPMF02K' '0380', 
 
 
 ' ' 'BDC_OKCODE' '=VW', 
 
 'X' 'SAPMF02K' '0210', 
 
 
 ' ' 'BDC_OKCODE' '=VW', 
 
 
 'X' 'SAPMF02K' '0215', 
 
 
 ' ' 'BDC_OKCODE' '=VW', 
 
 'X' 'SAPMF02K' '0220', 
 
 ' ' 'BDC_OKCODE' '=VW', 
 
 
 'X' 'SAPMF02K' '0215', 
 
 ' ' 'BDC_OKCODE' '=VW', 
 
 
 'X' 'SAPMF02K' '0220', 
 
 ' ' 'BDC_OKCODE' '=VW', 
 
 'X' 'SAPMF02K' '0610', 
 
 
 ' ' 'BDC_OKCODE' '=VW', 
 
 'X' 'SAPMF02K' '0310', 
 
 ' ' 'BDC_OKCODE' '=VW', 
 ' ' 'LFM1-WAERS' wa_upload-
waers, 
 
 'X' 'SAPMF02K' '0320', 
 
 ' ' 'BDC_CURSOR' 'RF02K-LIFNR', 
 ' ' 'BDC_OKCODE' '=VW'. 
 
 
 
 94 
 
 
ENDFORM. " zf_parametros_doc 
 
 
Módulo de Função BDC_OPEN_GROUP 
 
• Com o módulo de função BDC_OPEN_GROUP abre uma sessão. 
 
• Você recebe vários valores de retorno via EXCEPTIONS. Você pode ler 
esses valores com SY-SUBRC. 
 
• USER sempre deve ser especificado. O tipo do usuário seria BDC. 
 
• Num processamento on-line, o usuário que estiver processando o on-line 
(e não o nome do usuário especificado) é usado para as checagens de 
autorização. 
 
 
 
 
 
 
 
*&------------------------------------------------- --------------------* 
*& Form zf_open 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
FORM zf_open . 
 
 CALL FUNCTION 'BDC_OPEN_GROUP' 
 EXPORTING 
 client = sy-mandt 
* dest = filler8 
 GROUP = 'pasta23' 
* HOLDDATE = FILLER8 
 keep = 'X' 
 USER = sy-uname 
* RECORD = FILLER1 
* PROG = SY-CPROG 
* DCPFM = '%' 
* DATFM = '%' 
 EXCEPTIONS 
 client_invalid = 1 
 destination_invalid = 2 
 group_invalid = 3 
 group_is_locked = 4 
 holddate_invalid = 5 
 internal_error = 6 
 queue_error = 7 
 95 
 running = 8 
 system_lock_error = 9 
 user_invalid = 10 
 OTHERS = 11 
 . 
 IF sy-subrc <> 0. 
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
 ENDIF. 
 
 
 
ENDFORM. " zf_open 
 
Módulo de Função BDC_INSERT 
 
• Você usa o módulo de função BDC_INSERT para inserir dados de uma 
transação numa pasta. 
• Para transferir os dados, você precisa de uma tabela interna (tabela 
BDC). 
 
 
 
 
*&------------------------------------------------- --------------------* 
*& Form zf_insert 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
form zf_insert . 
 
 
CALL FUNCTION 'BDC_INSERT' 
 EXPORTING 
 TCODE = 'XK01' 
* POST_LOCAL = NOVBLOCAL 
* PRINTING = NOPRINT 
* SIMUBATCH = ' ' 
* CTUPARAMS = ' ' 
 TABLES 
 dynprotab = t_bdc_data 
 EXCEPTIONS 
 INTERNAL_ERROR = 1 
 NOT_OPEN = 2 
 QUEUE_ERROR = 3 
 TCODE_INVALID = 4 
 PRINTING_INVALID = 5 
 POSTING_INVALID = 6 
 OTHERS = 7 
 . 
 96 
IF sy-subrc = 0. 
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF. 
 
 
 
 
endform. " zf_insert 
 
 
 
 
Módulo de Função BDC_CLOSE_GROUP 
 
• Você fecha uma pasta Batch Input com o módulo de função 
BDC_CLOSE_GROUP. 
• Você recebe diversos valores de retorno via EXCEPTIONS. Você pode ler 
estes com SY-SUBRC. 
 
 
 
 
 
 
 
*&------------------------------------------------- --------------------* 
*& Form zf_close 
*&------------------------------------------------- --------------------* 
* text 
*-------------------------------------------------- --------------------* 
* --> p1 text 
* <-- p2 text 
*-------------------------------------------------- --------------------* 
form zf_close . 
 
CALL FUNCTION 'BDC_CLOSE_GROUP' 
 EXCEPTIONS 
 NOT_OPEN = 1 
 QUEUE_ERROR = 2 
 OTHERS = 3 
 . 
IF sy-subrc <> 0. 
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO 
 WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. 
ENDIF. 
 
 
 
 
endform. " zf_close 
 
 
 
 97 
Funcionalidades

Continue navegando