View
331
Download
10
Category
Preview:
Citation preview
ANOTAÇÕES DA
ACADEMIA ABAP
2004
Academia ABAP - 2004
2
INDICE
TRANSAÇÕES R/3............................................................................................................................................... 8
PRINCIPAIS TABELAS TRANSPARENTES ................................................................................................ 11
VARIÁVEIS DO SISTEMA (TABELA SY)..................................................................................................... 12
TABELAS ............................................................................................................................................................ 12
� Para criar um tabela transparente:....................................................................................................... 12
� Criar índice de tabela: .......................................................................................................................... 12
� Declarando tabela interna..................................................................................................................... 15
TABELA CUSTOMIZADA ............................................................................................................................... 16
� Etapas para gerar automaticamente via R/3 tratamento para manipular Tabela Customizada........... 16
♦ COMO CRIAR A MANUTENÇÃO DA TABELA CUSTOMIZADA........................................................... 19
� PARA ACESSAR A MANUTENÇÃO DA TABELA VIA TRANSAÇÃO CUSTOMIZADA. .................... 21
COMANDOS PARA TABELAS: ...................................................................................................................... 22
� APPEND: .............................................................................................................................................. 22
� DELETE: ............................................................................................................................................... 22
� REFRESH / CLEAR: ............................................................................................................................. 23
� FREE:.................................................................................................................................................... 23
� COLLECT: ............................................................................................................................................ 23
� MODIFY:............................................................................................................................................... 23
� SORT: .................................................................................................................................................... 23
� READ: ................................................................................................................................................... 24
� UPDATE: .............................................................................................................................................. 24
� INSERT :................................................................................................................................................ 24
� DESCRIBE TABLE: .............................................................................................................................. 25
ESTRUTURAS APPEND EM TABELAS TRANSPARENTES .................................................................... 25
TABELAS DE VERIFICAÇÃO ........................................................................................................................ 26
MENSAGEM ....................................................................................................................................................... 27
� Classe de mensagem:............................................................................................................................. 27
� Mensagem p/ usuário............................................................................................................................. 28
REPORT .............................................................................................................................................................. 28
� Sequência para criação do Report: ....................................................................................................... 28
Academia ABAP - 2004
3
SET LEFT SCROLL BOUNDARY COLUMMNS X...................................................................................... 29
COMANDOS E/OU TECLAS DE ATALHO................................................................................................... 29
OPERADORES LÓGICOS................................................................................................................................ 30
VARIÁVEIS: ....................................................................................................................................................... 30
CONSTANTES.................................................................................................................................................... 30
ESTRUTURA CONDICIONAL:....................................................................................................................... 31
� IF ........................................................................................................................................................... 31
� CASE ..................................................................................................................................................... 31
� Loops de repetição ................................................................................................................................ 31
� WHILE................................................................................................................................................... 33
� DO ......................................................................................................................................................... 33
� CHECK.................................................................................................................................................. 33
PERFORM - SINTAXES DE PARÂMETRO .................................................................................................. 33
PARAMETERS ................................................................................................................................................... 33
SELECT-OPTIONS:........................................................................................................................................... 34
COMANDO DE DESVIO DE EXECUÇÃO .................................................................................................... 34
� CONTINUE ........................................................................................................................................... 34
� EXIT....................................................................................................................................................... 34
PASSAGEM PARÂMETROS PARA PROGRAMA STANDARD................................................................ 35
COMANDO HOTSPOT ON .............................................................................................................................. 36
COMANDO HIDE .............................................................................................................................................. 36
COMANDO AT LINE-SELECTION................................................................................................................ 36
COMANDO GET CURSOR FIELD ................................................................................................................. 37
CRIAR TRANSAÇÃO........................................................................................................................................ 37
CRIAR AJUDA DE PESQUISA ( SEARCH HELP OU MATH CODE) ...................................................... 39
� PASSO PARA CRIAÇÃO DE AJUDA DE PESQUISA: ........................................................................ 39
CRIAR VISÕES ( VIEW ).................................................................................................................................. 41
� PASSO PARA CRIAÇÃO DE UMA VIEW: ........................................................................................... 42
Academia ABAP - 2004
4
CRIANDO INCLUDES ...................................................................................................................................... 45
� PASSO PARA CRIAÇÃO DE UMA VIEW: ........................................................................................... 45
SUBSTRING........................................................................................................................................................ 47
PARAMENTROS DE SELEÇÃO ..................................................................................................................... 47
� RADIOBUTTON.................................................................................................................................... 47
� CHECKBOX .......................................................................................................................................... 47
RANGE ................................................................................................................................................................ 47
TRANSLATE....................................................................................................................................................... 48
CONCATENATE................................................................................................................................................ 48
SPLIT ................................................................................................................................................................... 48
SHIFT................................................................................................................................................................... 48
SUB ROTINAS.................................................................................................................................................... 49
MACHCODE OBJECT...................................................................................................................................... 49
SET PF-STATUS................................................................................................................................................. 49
� Habilitar/Desabilitar botões e funções de um PF-STATUS dinamicamente ......................................... 50
GERANDO E CARREGANDO ARQUIVOS................................................................................................... 51
� WS_DOWNLOAD.................................................................................................................................. 51
� WS_UPLOAD ........................................................................................................................................ 51
SELECTION-SCREEN ...................................................................................................................................... 52
AT USER-COMMAND ...................................................................................................................................... 53
UTILIZAÇÃO DE ÍCONES .............................................................................................................................. 54
HELP-REQUEST................................................................................................................................................ 54
VALUE-REQUEST............................................................................................................................................. 54
CRIAÇÃO DE FUNÇÕES ................................................................................................................................. 54
COMUNICAÇÃO TELA -> PROGRAMA ABAP .......................................................................................... 55
BARRA DE STATUS PARA TELAS................................................................................................................ 56
Academia ABAP - 2004
5
SCREEN PAINTER – TRANSAÇÃO SE51..................................................................................................... 57
EDITOR DE LAYOUT DA TELA .................................................................................................................... 58
MODIFICAÇÃO DINÂMICA DE ATRIBUTOS DE ELEMENTOS DA TELA......................................... 58
VERIFICAÇÃO AUTOMÁTICA DE CAMPOS............................................................................................. 59
� Verificação automática para um campo: .............................................................................................. 59
� Verificação automática para vários campos:........................................................................................ 59
� Execução condicional de módulos baseados no FIELD - > algum valor que não seja o inicial. ........ 59
� Execução condicional de módulos baseados no FIELD - > alguma alteração..................................... 60
Mudança dinâmica de telas em dialog programming. ..................................................................................... 60
DIALOG PROGRAMMING – TABLE CONTROL ....................................................................................... 61
� Modificação do atributos de uma table control (exemplos) .................................................................. 62
� Controlando os botões de scroll em uma table control ......................................................................... 63
� Tornar uma coluna de um grid visível/invisivel .................................................................................... 64
� Habilitar/desabilitar algumas células do grid....................................................................................... 65
� VERIFICAR QUAL BOTÃO FOI PRESSIONADO DENTRO DE UMA LINHA DE UM TABLE CONTROL......................................................................................................................................................... 65
SET CURSOR...................................................................................................................................................... 66
LEAVE TO LIST PROCESSING...................................................................................................................... 66
SAP MEMORY E ABAP MEMORY................................................................................................................ 67
TAB STRIP.......................................................................................................................................................... 68
� Criação de tabs trips ............................................................................................................................. 68
� Para fazer scroll em uma tabstrip (navegar entre as páginas clicando nas abinhas) sem ativar o PAI. 69
� Para fazer scroll em uma tabstrip ativando o PAI ................................................................................ 69
FIELD SYMBOLS .............................................................................................................................................. 70
CRIAÇÃO DE INTERVALOS DE NUMERAÇÃO........................................................................................ 70
� Criação de intervalos de numeração (para geração de número sequencial)........................................ 70
� Utilizar intervalo de numeração............................................................................................................ 71
SAP TRANSACTION......................................................................................................................................... 71
ATUALIZAÇÃO SÍNCRONA........................................................................................................................... 72
ATUALIZAÇÃO ASSÍNCRONA...................................................................................................................... 72
Academia ABAP - 2004
6
� LUW (Logical Unit of Work – Unidade lógica de trabalho) ................................................................. 72
OBJETS DE BLOQUEIO (FUNÇÕES DE ENQUEUE / DEQUEUE) .......................................................... 73
� Criando objetos de bloqueio.................................................................................................................. 74
FUNÇÕES STANDARD..................................................................................................................................... 76
� Para trabalhar com Notas Fiscais: ....................................................................................................... 76
� Para se obter a BOM de um material.................................................................................................... 77
� Para testar o status de uma ordem ........................................................................................................ 77
� Para criar jobs dentro de um programa abap....................................................................................... 77
� Função que calcula diferença entre datas/horas................................................................................... 77
� Executar comandos do UNIX ................................................................................................................ 77
� READ_TEXT.......................................................................................................................................... 78
� POPUP SCREEN .................................................................................................................................. 78
� TEXTOS................................................................................................................................................. 80
� GERAL................................................................................................................................................... 80
� Funções para conversão de unidades/medidas ..................................................................................... 83
COMO UTILIZAR AUTHORITY-CHECKS.................................................................................................. 83
� Código Fonte Modelo. ........................................................................................................................... 84
PERFORMANCE E ERROS ............................................................................................................................. 85
CONVERSÕES DE DADOS E INTERFACES................................................................................................ 86
� BATCH INPUT...................................................................................................................................... 86
� CALL TRANSACTION........................................................................................................................... 86
� DIRECT INPUT..................................................................................................................................... 86
� Delivered BDC ...................................................................................................................................... 87
� APPLICATION LINK ENABLE............................................................................................................. 87
� ELETRONIC DATA INTERCHANGE................................................................................................... 87
� REMOTE FUNCTION CALL ................................................................................................................ 87
� BUSINESS APPLICATION PROGRAMMING INTERFACE (BAPI) ................................................... 87
RELATÓRIOS E FORMULÁRIOS ................................................................................................................. 88
� ABAP QUERY ....................................................................................................................................... 88
� REPORT WRITER e REPORT PAINTER.............................................................................................. 88
� INFORMATION SYSTEM ..................................................................................................................... 88
� SAPScript............................................................................................................................................... 88
ENHANCEMENTS............................................................................................................................................. 89
COMANDOS UTÉIS .......................................................................................................................................... 89
Academia ABAP - 2004
7
� MOVE-CORRESPONDING .................................................................................................................. 89
� SUM, AVG, MIN e MAX........................................................................................................................ 89
� UPDATE TASK ..................................................................................................................................... 90
� Para mandar um relatório direto para a impressora............................................................................ 90
� Para concatenar variáveis em um único parâmetro utilizar o &:......................................................... 90
COMENTÁRIOS ................................................................................................................................................ 90
� ÍNDICE.................................................................................................................................................. 90
� CÓDIGO MORTO................................................................................................................................. 90
DICAS E TRUQUES........................................................................................................................................... 90
� Conversões ............................................................................................................................................ 90
� Tabelas internas e dicionário ................................................................................................................ 91
� Como buscar resolução do vídeo .......................................................................................................... 92
� Gravar objetos locais para request ....................................................................................................... 92
� Função que cria match-code tipo estrutura de árvore para dados de catálogo.................................... 93
ALTERAÇÃO DE BARRA DE STATUS EM LIST VIEW ........................................................................... 93
LISTA INTERATIVA – LER UM CHECKBOX MARCADO EM UMA LISTA REPORT ...................... 94
CARACTERÍSTICAS HERDADAS ................................................................................................................. 94
BANCO DE DADOS LÓGICO.......................................................................................................................... 94
EXEMPLOS ........................................................................................................................................................ 97
� Exemplo de matchcode dinâmico dependendo de outro match code.................................................... 97
� Exemplo criação de JOB ....................................................................................................................... 97
� Exemplo envio SAPOFFICE ................................................................................................................. 97
� Exemplo do uso de field-symbol ............................................................................................................ 97
� Relatório chamando job ........................................................................................................................ 97
� Enviar e-mail através do R/3................................................................................................................. 97
� Documentações na Internet:.................................................................................................................. 97
Academia ABAP - 2004
8
TRANSAÇÕES R/3
AL11 Lista diretórios do SAP
AL21 Dados estatísticos sobre o código do programa
BIBS Exemplos de programas (on line) e utilização de controles
CA03 Exibir roteiro
CL03 Exibir classes (características)
CL30N Procurar objetos em classe
CMOD Ampliações - Exit's de campo
CR03 Centro de trabalho
IH01 Árvore hierárquica de local de instalação
LIBS
Demostrativo de cores
ME23 Transação de pedido de compras - Criar user-exits
PRFB Field exit – através da CMOD
QS23 Modificar características de controle
QS41 Processar catálogo
S000 Menu principal do sistema (Tela inicial)
S001 Tela do Workbench ABAP/4
SA38 Execução de programa report
SD11 Modelo de Dados
SDBE Explorar SQL
SE01 Correção e manutenção do sistema de transportes
SE03 Utilitários do sistema de transporte - Modificar entrada de catálogos
SE05 Informações sobre transportes
SE07 Tela de status do sistema de transporte
SE09 Organizador do Workbench - Manutenção das change requests (workbench)
SE10 Manutenção das change requests (workbench e customizing)
SE11 Edição e manutenção de tabelas - Criar objetos do dicionário (tabelas, elementos de dados, domínios...)
SE12 Apenas edição tabelas
Academia ABAP - 2004
9
SE14 utilitários de Dtabase
SE15 Informações do sistema do Dicionário de dados - Sistema info repository
SE16 Visualização e manutenção de tabelas -
SE17 Visualização de tabelas
SE30 ABAP/4 Trace - serve para verificar a performance de uma parte do programa - Análise de tempo de execução do programa
SE32 Manutenção de elementos de textos
SE35 Módulos de diálogos
SE36 Base de dados lógicas
SE37 Biblioteca de funções ABAP/4 – Editor/criador de função
SE38 Editor de programa ABAP
SE41 Menu Painter - Criar status e menu para programa on-line
SE51 Screen Painter - Criar tela para programa on-line - Copiar tela de um programa para outro
SE54 Geração visão de tabela
SE63 Tradução de rótulos de campos para outros idiomas
SE71 Cria SapScript - layout de tela
SE73 Manutenção de fontyes
SE78 Importar bitmap para R/3
SE80 Desenvolvimento de Objetos – Classe e outros objetos - Criar objetos (report, on-line, transação...)
SE84 Informações do repositório
SE91 Manutenção de mensagens - Criação de classes
SE93 Manutenção e criação de Códigos de transação
SHDB Grava todos os processos executados no on-line para criação do batch-input
SHDG Valores Globais
SLIN Verificar a qualidade do código do programa
SM01 Travar transações
SM02 Enviar mensagens de sistema
SM04 Usuários - visualização
SM12 Exibição de transações travadas
Academia ABAP - 2004
10
SM13 Atualizações de requests
SM21 Visualização do log do sistema
SM30 Gerenciador de visualização de tabelas - Utilizada para rodar os programas gerados com o "Gerador de atualização de tabela"
SM31 Gerenciador de tabelas
SM35 Monitoramento de JOBs em background - Processar pastas gravadas com o programa de batch input
SM36 Definição de JOBs
SM37 Status de JOBs
SM50 Visualização de processos em andamento
SM51 Servidores do SAP
SM59 Visualização e Manutenção de RFC
SN04 Monitora logins
SN50 Monitora logins
SO99 Informações sobre as versões do R/3
SP01 Manutenção do SPOOL
SPAD Administração do SPOOL
SQ01 ABAP/4 Query - Desenvolvimento e execução
SQ02 ABAP/4 Query - Áreas funcionais
SQ03 ABAP/4 Query - Grupos de usuários
ST01 Trace do sistema (System Trace)
ST05 SQL Trace - Executa o SQL Trace
ST22 Análise de erros (dumps) em ABAP
STMS Gerenciamento de transporte de change request
SU01 Manutenção de Usuários (master)
SU02 Manutenção de "Profiles" de Usuários
SU20 Manutenção de autorizações em campos
SU21 Manutenção de autorizações em objetos
SU3 Definir configurações do usuário
SU50 Manutenção de definições de usuários
SU51 Manutenção de endereços de usuários
Academia ABAP - 2004
11
SU52 Manutenção dos parâmetros do usuário
SU53 Checagem das mais recentes autorizações do usuário
SU54 Menu de usuários
SU56 Exibição das autorizações do usuário
VA01 Ordem de venda
VA31 Programa de remessa
VA35 Lista programas de remessa
PRINCIPAIS TABELAS TRANSPARENTES
AUFK Dados mestres da ordem AFKO Dados de cabeçalho da ordem de ordens PCP Número lote controle - prueflos Nro roteiro de operações da ordem – aufpl AFFH Atribuição de MAP a ordem de trabalho Nro roteiro de operações da ordem – aufpl AFIH Cabeçalho de ordem manutenção Nro equipamento – equnr AFVC Operações da ordem Nro roteiro da operação da ordem – aufpl QALS Registro do lote de controle QMEL Nota QM QMIH Aviso de qualidade - Seção dos dados de manutenção EQUI Equipamento dados mestres EQKT Textos breves de equipamentos KLAH Dados do cabeçalho de classe KSSK Tabela de atribuição: objeto para classe T024I Relac centro x grupo de planejamento TFACS Calendário de fábrica (exibição) J1BJ Transação p/ ver programa/formulário impressão de nota fiscal
Academia ABAP - 2004
12
J1B3 Exibir nota fiscal
VARIÁVEIS DO SISTEMA (TABELA SY)
sy-SUBRC Variável de retorno para comandos READ, LOOP, SELECT, CALL,
INSERT, DELETE, UPDATE...
sy-PAGNO Número da página do report (automático)
sy-TABIX Número da linha corrente dentro de um loop
sy-LINCT Número de linhas impressas no report (depois de impresso)
sy-LINSZ Número de colunas do report
sy-CUCOL Número da coluna onde o cursor está posicionado (no report)
sy-CUROW Número da linha onde o cursor está posicionado (no report)
sy-LOOPC Número de linhas da tabela interna (só funciona dentro do loop)
sy-LANGU Idioma utilizado no logon
sy-DYNNR Número da tela que está sendo executada (no programa on-line)
sy-MANDT Código do mandante (client) utilizado no logon
sy-TCODE Código da transação que está sendo executada
sy-UCOMM Código da tecla pressionada pelo usuário (report)
sy-DATUM Data do sistema
sy-UZEIT Hora do sistema
sy-REPID Nome do programa que está sendo executado (on-line ou report)
sy-UNAME Nome do usuário que efetuou o logon
sy-TITLE Nome do programa (definido na tela de atributos do programa)
sy-LISEL Contém a linha onde o usuário deu um clique duplo (no report)
sy-ULINE Quando utilizado com "WRITE" imprime um caracter "_" (underscore)
sy-VLINE Quando utilizado com "WRITE" imprime um caracter "|" (pipe)
TABELAS
� Para criar uma tabela transparente:
Ir na SE11 digitar o nome da tabela clicar em criar... [E importante observar que o mandante sempre deve fazer parte da chave primaria. � Criar índice de tabela:
Academia ABAP - 2004
13
Academia ABAP - 2004
14
Salvar e Ativar. ♦ que é data element (zed_nome_xx)? O importante para o texto é a especificação para se visualizar o label, ou seja, o texto que descreve o campo ♦ Domínio (zdo_nome_xx) ? criação de tipo, campo auxiliar que define tamanho e tipo do campo ♦ OBSERVAÇOES: Todo campo de valor ou quantidade tem que preencher o campo referência.
Referência de Moeda � T001-waers.
Referência de Qtde � T001-menge.
Qtd de caracter para o nome dos campos na tabela � 5
Academia ABAP - 2004
15
� Declarando tabela interna
Data: (nome_ti> like <tabela transp> occurs with hearder line.
(para usar tabela igual à transparente)
Ou
Data: begin of <nome-ti> occurs 0,
<nome-campo> like <tabela-trans> - campo,
.
.
. end of <nome-ti>.
Academia ABAP - 2004
16
TABELA CUSTOMIZADA
� Etapas para gerar automaticamente via R/3 tratamento para manipular Tabela Customizada
Definir o Grupo de Função a ser utilizado pelo Repository Object (tcode SE80).
Definir as características do objeto Grupo de Função.
Selecionar a “Classe de Desenvolvimento” a ser utilizado e <Salvar>. Criar uma nova Request e Avançar <Enter>.
Selecionar o objeto.
Criar novo objeto.
Academia ABAP - 2004
17
O grupo de função definido será criado na classe de desenvolvimento.
Criando uma tabela transparente customizada (tcode SE11). Por exemplo
ZCONTROLE.
O novo Grupo de Função foi
definido.
Academia ABAP - 2004
18
Definir as características da tabela transparente.
Definir a estrutura da tabela (campos, data elements e domínios) e salvá-la.
Academia ABAP - 2004
19
Atribuir as opções técnicas.
Definir as opções técnicas e <Salvar>.
Ao
final
ativar a nova tabela criada. ♦ COMO CRIAR A MANUTENÇÃO DA TABELA CUSTOMIZADA
Agora vamos definir a manutenção da tabela transparente. Para acessar o “Gerador de atualização de tabela”, selecionar no menu Utilitários conforme descrito abaixo.
Definir os parâmetros de manipulação da tabela transparente.
Academia ABAP - 2004
20
Para que o usuário tenha acesso a manutenção da tabela customizada, utilizar o caminho apresentado abaixo.
Pode ser utilizado telas de
atualização de duas categorias:
- apenas um nível (apresenta a
síntese da tabela e a alteração
da entrada de dados é efetuada
nesta tela mesmo);
- 2 níveis: um nível de tela de
síntese e uma tela seguinte
somente para alterar a entrada
de dados.
Este botão permite o sistema
sugerir as telas de atualização
a serem utilizadas.
Academia ABAP - 2004
21
Nesta tela de visão de tabelas é possível efetuar a atualização de dados.
Esta tela de atualização é a “tela de síntese” (o 1º nível de acesso definido na geração de manutenção).
Esta tela de atualização é a “tela individual” (o 2º nível de acesso definido na geração de manutenção).
A seguir é apresentado a entrada efetuada na tabela pela tela de atualização individual.
� PARA ACESSAR A MANUTENÇÃO DA TABELA VIA TRANSAÇÃO CUSTOMIZADA.
Criar uma nova transação pelo Repository Object (tcode SE80).
Selecionar a opção de “transação c/parâmetros”.
Academia ABAP - 2004
22
Definir as características da transação.
Definir também a tabela a ser acessada.
Selecionar a “Classe de Desenvolvimento” a ser utilizado e <Salvar>. Criar uma nova Request e Avançar <Enter>.
COMANDOS PARA TABELAS:
� APPEND:
Incluir registro em uma tabela
APPEND <tab_int>.
� DELETE: Deleta registros da tabela.
DELETE <tab-int>. ou
DELETE <tab_int> INDEX <nro_registro>. ou
DELETE <tab_int> WHERE <cond> = <valor>.
Delete from <tab tranparente> where cod = xxx.
Utilizar a transação para
“Atualização de tabela
ampliada”.
Definir os parâmetros da
tabela a ser atualizada .
Academia ABAP - 2004
23
� REFRESH / CLEAR: Deleta todos os registros da tabela.
REFRESH <tab_int>.
CLEAR <tab_int>[].
CLEAR <tab_int> ( Limpa Header Line ou seja cabeçalho)
� FREE: Libera tabela da memória.
FREE <tab_int>.
� COLLECT: Agrupa valores de uma tabela.
Ex. it_pedido (cód_forn, cód_pedido, cód_mat, valor)
It_totais (cód_forn, valor)
LOOP AT IT_PEDIDO.
It_totais-forn = it_pedido-cod_forn.
It_totais-valor = it_pedido-valor
COLLECT it_totais.
ENDLOOP.
� MODIFY: Modifica registros na tabela interna.
Ex.: LOOP AT it_aluno WHERE it_aluno-bolsa < 10.
CLEAR it_aluno-bolsa.
MODIFY it_aluno.
ENDLOOP.
� SORT: Ordena registros da tabela.
Sempre identifique se um SORT é ASCENDING ou DESCENDING e
especifique a cláusula BY <fields>. Caso contrário, todos os campos serão
classificados.
Evite construções do tipo:
Academia ABAP - 2004
24
SORT tabela1, SORT tabela2, SORT tabela3.
LOOP tabela1, LOOP tabela2, LOOP tabela3
Para cada SORT faça o LOOP correspondente. Aí então iniciar novo SORT e
LOOP, e assim por diante.
SORT <tabela_interna> BY <campo1> <campo2> ....
Ex. : SORT it_aluno BY it_aluno-nome.
SORT it_aluno BY it_aluno-nome DESCENDING.
� READ: Sempre deve-se utilizar BINARY SEARCH nos comandos READ TABLE itab WITH KEY.
Ler registros na tabela.
READ TABLE <tabela_interna> WHITH KEY <campo> = <condição>.
ou
READ TABLE <tabela_interna> WHITH KEY <campo1> = <condição1>
<campo2> = <condicao2> .
ou
READ TABLE <tabela_interna> INDEX <nro_registros>.
� UPDATE: Atualiza (modifica) dados na tabela transparente
UPDATE (TABELA TRANSPARENTE) SET CAMPO1 = ‘VALOR1’ CAMPO2 = ‘VALOR2’ CAMPO3 = ‘VALOR3’. WHERE CODIGO = (VARIÁVEL).
Se a atualização for bem sucedida, o SY-SUBRC retornará 0. CUIDADO PARA NÃO TENTAR ATUALIZAR TAMBÉM ALGUM CAMPO CHAVE. SY-SUBRC RETORNARÁ VALOR DIFERENTE DE 0.
� INSERT : Inserção de dados na tabela transparente
Academia ABAP - 2004
25
INSERT INTO ZXXXXX VALUES IT_XXXXX. ( Onde ZXXXXXX = tabela transparente e IT_XXXXX é uma estrutura (ou tabela interna) contendo os valores a serem inseridos.
Ex.: It_aluno-cod = ‘1001’. It_aluno-nome = ‘Maria’. INSERT INTO ZTBALUNOS VALUES IT_ALUNO. CUIDADO PARA NÃO TENTAR INSERIR ALGUM REGISTRO COM CHAVE DUPLICADA. SY-SUBRC RETORNARÁ VALOR DIFERENTE DE 0.
� DESCRIBE TABLE: Número de registros da tabela. O comando DESCRIBE é a maneira mais eficiente de determinar o número de registros de uma tabela interna.
DESCRIBE TABLE <tab_interna> LINES <nro_registros>.
Ex.: DESCRIBE TABLE t_ekko LINES v_reg_ekko.
v_reg_ekko tem que ser declarado com TYPE i.
ESTRUTURAS APPEND EM TABELAS
TRANSPARENTES
Conjunto de campos de tabelas (com elementos de dados e domínios) que podem ser usados por mais de uma tabela através do campo .INCLUDE na lista dos nomes de campos de uma tabela. Um exemplo de uso: imagine-se em uma situação em que deve-se associar vários campos em algumas dezenas de tabelas transparentes. Cria-se uma estrutura com os campos desejados, e associa-se a estrutura ás tabelas.
Criado através da SE11, outros objetos, estruturas.
Academia ABAP - 2004
26
TABELAS DE VERIFICAÇÃO
Usadas para consistir a entrada de dados em uma tabela transparente, baseado nos dados já existentes em outra tabela transparente. É o modo de criar no R/3, chaves estrangeiras. Deve-se procurar atribuir sempre a campos com o mesmo domínio.
Dois cliques ali Abri aquilo dali
Isto é uma tabela de verifcação
Dois cliques na chavinha, Abre alí
Informe o nome da tabela de verificação no campo apropriado. O botão ‘Gerar Proposta’, Verifica se existem campos em comum (mesmo domínio) entre as tabelas e faz o relacionamento
Resultado: a existência do campo KNUMA_PI da tabela KONP será verificada automaticamente na tabela KONA. Se não existir, a mensagem de erro definida será invocada.
Academia ABAP - 2004
27
MENSAGEM
� Classe de mensagem:
Ir a SE91 e ....
Academia ABAP - 2004
28
� Mensagem p/ usuário
Sintaxe: MESSAGE Sxxx(nome-classe-mensagem). I � Informação E � Erro W � Aviso Ou.. põe o nome da classe no inicio do prg (cabeçalho) ex.: REPORT zac2003_bh_gr01_t1 NO STANDARD PAGE HEADING LINE-SIZE 60 message-id z_cm_bh_06.
REPORT
� Sequência para criação do Report: 1. Tables: Declaração de tabelas transparentes; 2. Declaração de tabelas internas; 3. Declaração de constantes; 4. Declaração de variáveis;
Academia ABAP - 2004
29
5. Inicialização; 6. Tela de seleção; 7. Validação da tela de seleção; 8. Inicio do programa (START-OF-SELECTION); 9. Fim do programa (END-OF-SELECTION); 10. Subrotinas.
SET LEFT SCROLL BOUNDARY COLUMMNS X
Determina o número de colunas fixas ( X ) na saída de um relatório. Essas colunas não rolarão horizontalmente quando a barra de scroll for acionada.
COMANDOS E/OU TECLAS DE ATALHO
Ctrl + F3 ativa e gerar
F8 compila, executa
* para comentário no inicio da linha
“ para comentário no meio da linha
/n fecha todas as linhas sem salvar e sem perguntar
/ pula uma linha.
/h debug
pretty printer (icone) Para identar
F5 Passo a passo, entrando nas Subrotinas. (ñ usar em select -
endselect)
F6 Passo a passo, mas não entra nas Subrotinas.
F7 Abandona SubRotina, voltando para a Rotina chamadora.
Academia ABAP - 2004
30
OPERADORES LÓGICOS
AND
OR
NE ou <>
>
<
>=
<=
=
VARIÁVEIS:
CHAR Type c
INTEIRO Type i
Valor c/ decimal Type p decimals <n.º de casas decimais>
CHAR (0 a 9) Type N
Valores Hexa Type X
Data Type D
Ex: v_data type D. v_data like sy-datum.
Data: <nome variável> type i.
Data: v-nome(35) Type C.
Data: v-nome like ztbaluno06-nome.
(assume o mesmo campo – atributo – nome)
CONSTANTES
Sintaxe: CONSTANTS: <nome_const> TYPE C VALUE <valor>. ou CONSTANTS: <nome_const> LIKE <nome-campo-tabela> VALUE <valor>. Ex. CONTANTS c_cód_aluno(3) TYPE c VALUE ‘001’. ou CONTANTS c_cod_aluno LIKE ztbaluno09_código VALUE ‘001’.
Academia ABAP - 2004
31
ESTRUTURA CONDICIONAL
� IF
if <condição>.
Comandos…. Else. Endif. If <condição>.
Commandos Else if <condição>. Comandos Else if <condição>. Comandos Else. Commandos Endif. � CASE
O comando CASE geralmente é mais claro, legível e um pouco mais rápido do que o comando IF. Quando testamos se um campo é igual a um outro campo, tanto faz usarmos CASE ou IF. Porém, o comando CASE é o melhor, pois, além de facilitar a leitura do código, é mais eficiente depois de 5 IF’s. A cláusula WHEN OTHERS sempre deve ser codificada também. Case <variaável>.
When <valor>: Commandos When <valor2> : Commandos
Others: Comandos
Endcase.
� Loops de repetição O comando LOOP… WHERE é mais eficiente do que o comando LOOP/CHECK, pois avalia a condição internamente.
Academia ABAP - 2004
32
Exemplo 1 : Esta maneira é mais eficiente do que a última. LOOP AT T_ABC WHERE K = KVAL. … ENDLOOP. LOOP AT ITAB. CHECK T_ABC = KVAL. … ENDLOOP. Exemplo 2 : Loop at <TI>. comandos Endloop. Loop at <TI> Where cond=….
comandos Endloop.
AT LAST
Verifica ultimo registro permitindo somatórios e totalizações.
AT NEW
Verificar antes de acessar o registro se é diferente do último lido permitindo quebras.
Ex. AT NEW <nome_campo>. PERFORM Imprime_cabecalho. ENDAT.
AT END
Verificar depois de acessar o registro se o próximo é diferente do registro atual.
Ex. AT END <nome_campo>. PERFORM Imprime_subtotal. ENDAT.
Academia ABAP - 2004
33
� WHILE
O comando WHILE é mais eficiente do que DO + EXIT. WHILE é mais fácil de entender e mais rápido durante a execução. While <condi>.
comandos Endwhile.
� DO
Do <nº de vezes> times.
comandos Enddo.
� CHECK
Define condição para continuidade do programa / procedimento. CHECK <condição>.
Ex. PERFORM seleção_dados. SELECT ..... CHECK sy-sybrc = 0. ( Caso condição falsal � ENDFORM ) PERFORM imprime_aluno.
PERFORM - SINTAXES DE PARÂMETRO
1- Perform <nome form> .
2- Perform <nome from> USING <parametro>.
3- Perform <nome form> changing <retorno>.
4- Perform <nome form> USING <parametro> changing <retorno>.
PARAMETERS
Um parâmetro serve para a criação de uma variável com a intervenção do usuário, ou seja, a variável recebe um valor que o usuário vai digitar. Sintaxe:
PARAMETERS: <nome> LIKE <tb>-<campo> .
Academia ABAP - 2004
34
Type c. PARAMETERS: <nome> LIKE <tb>-<campo> OBLIGATORY.
SELECT-OPTIONS:
Com esse comando o usuário não precisa digitar as opções, pois vazio, ele entende que é para buscar todos os dados do banco. Estrutura da tabela interna que é gerada pelo comando select-options:
- sigh: I - option: BT (Between) – nesse caso o low e o high estarão preenchidos com
os valores De e Até. Ou EQ (iqual), onde o low estará com o valor e o high estará vazio.
Sintaxe: Select-options <variável> for <tabela_transparente-campo>.
COMANDO DE DESVIO DE EXECUÇÃO
� CONTINUE
Passa para o próximo registro. Comandos CONTINUE posicionados antes de eventos AT NEW dentro de um loop fazem os eventos perderem a seqüência correta
� EXIT Sai do loop.
Ex. LOOP AT <tabela interna>. IF tbl_aluno-bolsa < 10. CONTINUE. ENDIF. IMPRIMA_ALUNO ENDLOOP.
• BREAK-POINT � Para execução do programa independente do usuário.
• BREAK <usuário> � Para execução conforme usuário logado.
Academia ABAP - 2004
35
PASSAGEM PARÂMETROS PARA PROGRAMA
STANDARD
Ex: SET PARAMETER ID 'BES' FIELD t_pedidos-ebeln. CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN. - Teclar F1 no campo de seleção da transação Stantard. - Clicar no botão de Informações Técnicas
Academia ABAP - 2004
36
Identificador de Parâmetro: BES
COMANDO HOTSPOT ON
Usado no commando WRITE para identificar que o campo permitir duplo click (mãozinha de seleção) Ex.: WRITE: <campo1> HOTSPOT ON, <campo2>.
COMANDO HIDE
Guardar o conteúdo do campo na linha selecionada (HOTSPOT). Ex.: HIDE: <nome_campo>.
COMANDO AT LINE-SELECTION
Evento que controla campos selecionáveis no Report. Ex.: AT LINE-SELECTION.
Academia ABAP - 2004
37
DATA: l_cursor(20). GET CURSOR FIELD l_cursor. IF l_cursor = <nome_campo1>. .... ELSEIF l_cursor = <nome_campo2>. .... ENDIF.
COMANDO GET CURSOR FIELD Armazena nome do campo selecionado pelo usuário.
CRIAR TRANSAÇÃO Transação é uma combinação de caracteres que codifica uma tarefa, atividade, funcionalidade, etc. Exemplo: a transação que “chama” o editor de programas é a SE38. Equivale ao seguinte caminho através do menu: Ferramentas->ABAP Workbench->Desenvolvimento->Editor ABAP. • Para criar uma transação, utiliza-se a transação SE93.
Ir na SE93:
Academia ABAP - 2004
38
Academia ABAP - 2004
39
CRIAR AJUDA DE PESQUISA ( SEARCH HELP OU MATH CODE)
Conjunto de valores de uma tabela exibidos em um campo de entrada quando F4 é teclado.
As ajudas para pesquisas elementares realizam um caminho de pesquisa para a determinação das entradas possíveis. Ajudas para pesquisa coletiva são constituídas por várias ajudas para pesquisa elementares.
Depois de definida, a ajuda de pesquisa deve ser associada ao elemento de dados. Todas as tabelas que utilizam o elemento de dados “herdarão” o matchcode.
� PASSO PARA CRIAÇÃO DE AJUDA DE PESQUISA:
Entrar SE11
Tabela origem dos dados
• Exibição imediata • Com restrição – para
listas grandes. Mostra campo p/ limitar quantidade
• Depend conjto valores –Se lista > 100 registros, mostra campo limitador de quatidade. Se < 100, mostra imediatamente
Campos que apareceram na lista
Campo será exportado para o parâmetro
Posição do campo na lista
Lista será filtrada por este valor
Posição do campo limitador na lista
Academia ABAP - 2004
40
Academia ABAP - 2004
41
CRIAR VISÕES ( VIEW ) Seleção de dados de várias tabelas através de JOIN com possibilidade de restringir valores.
Pode ser usada no programa como se fosse uma tabela transparente. Criadas através da transação SE11, selecionando-se “Visões”.
Usa-se a visão criada no seu programa, como se fosse uma tabela transparente comum. Pode-se dar um select em seus campos, pode-se joga-la para uma tabela interna, etc. Só não pode atualizar (inserir, modificar ou eliminar) dados da visão. A vantagem de usar a visão, que ela já é um “join” de várias tabelas. Quando for feita a seleção (select * from visão, p.e.), os dados já virão filtrados de acordo com os parâmetros do join. Pode-se também declarar tabelas internas like a visão: DATA IT_TABELA LIKE ZVISAO OCCURS 0... Imagine uma situação onde deve-se fazer um join de cinco tabelas, para doze programas diferentes. Uma situação interessante é criar uma visão das cinco tabelas (o join será programado na visão) e nos doze programas, fazer o select da visão, ao invés das tabelas.
Tabelas da visão Condições de
ligação entre as tabelas (JOIN)
Campos da visão
Condições de seleção
Academia ABAP - 2004
42
� PASSO PARA CRIAÇÃO DE UMA VIEW: Selecionar tabelas; Selecionar campos ( todos os campos chaves presentes ) Ligação entre tabelas; Condições de seleção;
Academia ABAP - 2004
43
Academia ABAP - 2004
44
Salvar e ativar.
Academia ABAP - 2004
45
CRIANDO INCLUDES
Programa categoria I que pode ser chamado por vários programas. Pode ter funções, definição de dados, trechos de processamento. A existência do comando INCLUDE ZACIXXX em um programa, desvia o processamento para o include referenciado ZACIXXX e volta para o programa que chamou.
� PASSO PARA CRIAÇÃO DE UMA VIEW:
1 – Entrar na Se38 2 – Escrever na fonte: Include <nome include> -> clicar duas vezes.
Academia ABAP - 2004
46
Academia ABAP - 2004
47
SUBSTRING
Para variáveis tipo CHAR ou DATA. VAR = ‘ACADEMIA’. VAR(2) = AC VAR+2 = ADEMIA VAR+2(3)ADE
PARAMENTROS DE SELEÇÃO
� RADIOBUTTON
Parameters: rb_bot1 radiobutton group gr1, Rb_bot1 radiobutton group gr1. Parameters: rb_bot3 radiobutton group gr2, Rb_bot4 radiobutton group gr2.
� CHECKBOX Parameters: p_bot5 as checkbox AT SELECTION-SCREEN � Consistência da tela de entrada de dados. Ex. AT SELECTION-SCREEN. IF <condicao>. MESSAGE <texto>.
RANGE
Montar intervalos de seleção (semelhante ao SELECT OPTIONS) RANGE <nome_range> FOR <nome_campo>. Ex: RANGES RG_DATA FOR EKKO-AEDAT Cria a seguinte estrutura SIGN OPTIONS LOW HIGH
SY-DATUM = 20031110 SY-DATUM(4) = 2003 SY-DATUM+4(2) = 11 SY-DATUM+6(2) = 10
Cria dois botões (do tipo rádio) de seleção mutuamente exclusiva.
Cria dois botões (do tipo rádio) de seleção mutuamente exclusiva.
A estrutura criada é na verdade uma tabela interna e pode ser tratada como tal: Ex.: rg_data-sign = ‘I’. rg_data-options = ‘EQ’. rg_data-low = ‘20031010’. rg_data-high = ‘20031231’. append rg_data.
SIGN OPTIONS LOW HIGH I EQ 20021010 20021231
Academia ABAP - 2004
48
TRANSLATE
Substituição de caracteres / Tradução Ex.: VAR = ’10,5’. TRANSLATE VAR USING ‘,.’. � Resultado: ’10.5’. VAR = ‘YYXX’. TRANSLATE VAR USING ‘YAXB’ � Resultado: ‘AABB’ VAR = ‘aaa’ TRANSLATE var USING UPPER CASE.
CONCATENATE Agrupar valores. CONCATENATE <var1> <var2> <var3> INTO <var4> SEPARETED BY SPACE. CONCATENATE <var1> <var2> <var3> INTO <var4> SEPARETED BY <separador>. Ex.:var1 = ‘HEITOR’. Var2 = ‘CARLOS’. CONCATENATE var1 var2 INTO var3 SEPARETED BY SPACE. Resultado � VAR3 = ‘HEITOR CARLOS’
SPLIT
Desagrupar valores. SPLIT <var1> AT <delimitador> INTO <var1> <var2>. Ex.: var1 = ‘HEITOR CARLOS’ SPLIT var1 AT ‘ ‘ INTO var2 var3. Resultado � var2 = ‘HEITOR’ var3 = ‘CARLOS’
SHIFT
Extrair valores de variáveis SHIFT <var> BY <n> PLACES. Ex.: var1 = ‘ABAP01’.
Academia ABAP - 2004
49
SHIFT var1. � var = ‘BAP01’ SHIFT var1 BY 4 PLACES. � var = ‘01’. SHIFT var1 RIGHT BY 2 PLACES � var = ‘ ABAP01’
SUB ROTINAS
PERFORM (<nome_prog>) <nome_rotina>. � Chama uma subrotina de um outro programa
PERFORM <nome_rotina> USING <var1>. � CHANGING <var2>. Passando e retornando valores para SubRotinas
Ex.: DATA: vn_var1(5) type n, vn_var2(5) type n. vn_var1 = 50. vn_var2 = 100. PERFORM calcula USING vn_var1 vn_var2 CHANGING vn_var1. …. …. FORM calcula USING vn_valor1 vn_valor2 CHANGING vn_valor1. Vn_valor1 = vn_valor2 / vn_valor1. ENDFORM.
MACHCODE OBJECT
Cria mathcode para parâmetros. PARAMETERS <nome_parâmetro> for <nome_campo> MATCHCODE OBJECT
<nome_match_code>.
SET PF-STATUS
Esse é o comando que chama a função do botão. Deve-se clicar duas vezes no campo ‘sxxx’(que é um número que nós definimos previamente) e criar o objeto. Neste momento a tela te joga para a criação do ícone. (é localizado na lógica principal logo após o star-of-selection, antes das chamadas de função)
SET PF-STATUS <nome_botao>.
Cria uma interface de usuário (com menus, botões, teclas de função, barra de ferramenta) para uma “aplicação”. (No nosso caso, um report).
Academia ABAP - 2004
50
Definição de interface de usuário com botões: Programa Na situação acima, será criado o botão quando o relatório for
executado. Clicando-se no botão, o evento ‘at user-command’ será acionado (se existir) e a
variável SY-UCOMM conterá o valor do ‘código do objeto’; no caso acima exemplificado,
‘FORN’. Em teclas de função, seleciona-se a tecla que se deseja ativar o botão ou item
de menu
� Habilitar/Desabilitar botões e funções de um PF-STATUS dinamicamente SET PF-STATUS XXXX EXCLUDING ‘FFFF’ ( onde FFFF é o código da função
que se quer desabilitar. Para habilitar novamente, usar SET PF-STATUS XXXX. Para desabilitar vários botões ao mesmo tempo: Criar tabela interna com campo do tipo RSMPE-FUNC; Atribuir os códigos das funções para a tabela; Utilizar: SET PF-STATUS XXXX EXCLUDING IT_XXXX
Duplo clique em ‘S000’:
Duplo clique em FORN
Texto que aparecerá ao lado do ícone, no botão
� Lembrar de incluir o código de função standart para os botões de voltar, cancelar e sair!
DATA: BEGIN OF IT_STATUS OCCURS 0, VC_FUNCAO LIKE RSMPE-FUNC, END OF IT_STATUS IT_STATUS-VC_FUNCAO = ‘EXIB’. APPEND IT_STATUS. IT_STATUS-VC_FUNCAO = ‘MODI’. APPEND IT-STATUS.
Academia ABAP - 2004
51
GERANDO E CARREGANDO ARQUIVOS
� WS_DOWNLOAD Gera arquivo, joga dados para o servidor de aplicação No file name, deve se informar nome e caminho CALL FUNCTION 'WS_DOWNLOAD' EXPORTING * BIN_FILESIZE = ' ' * CODEPAGE = ' ' FILENAME = vc_nomearq FILETYPE = 'ASC' * MODE = ' ' * WK1_N_FORMAT = ' ' * WK1_N_SIZE = ' ' * WK1_T_FORMAT = ' ' * WK1_T_SIZE = ' ' * COL_SELECT = ' ' * COL_SELECTMASK = ' ' * NO_AUTH_CHECK = ' ' * IMPORTING * FILELENGTH = TABLES DATA_TAB = it_arquivo * FIELDNAMES = EXCEPTIONS FILE_OPEN_ERROR = 1 FILE_WRITE_ERROR = 2 INVALID_FILESIZE = 3 INVALID_TYPE = 4 NO_BATCH = 5 UNKNOWN_ERROR = 6 INVALID_TABLE_WIDTH = 7 GUI_REFUSE_FILETRANSFER = 8 CUSTOMER_ERROR = 9 OTHERS = 10.
� WS_UPLOAD Carrega arquivo. CALL FUNCTION 'WS_UPLOAD' * EXPORTING * CODEPAGE = ' ' * FILENAME = ' ' * FILETYPE = 'ASC' * HEADLEN = ' ' * LINE_EXIT = ' '
Academia ABAP - 2004
52
* TRUNCLEN = ' ' * USER_FORM = ' ' * USER_PROG = ' ' * DAT_D_FORMAT = ' ' * IMPORTING * FILELENGTH = TABLES DATA_TAB = * EXCEPTIONS * CONVERSION_ERROR = 1 * FILE_OPEN_ERROR = 2 * FILE_READ_ERROR = 3 * INVALID_TYPE = 4 * NO_BATCH = 5 * UNKNOWN_ERROR = 6 * INVALID_TABLE_WIDTH = 7 * GUI_REFUSE_FILETRANSFER = 8 * CUSTOMER_ERROR = 9 * OTHERS = 10
• OBSERVAÇÕES:
São funções para gravar dados de uma tabela interna na estação de trabalho (HD ou unidade de rede) e carregar para uma tabela interna dados presentes na estação de trabalho. Muito utilizada para gerar arquivos texto (ASCII) para interfaces com outros sistemas. Alguns parâmetros: (comuns à função WS_DOWNLOAD e WS_UPLOAD): Nome do arquivo gerado/lido. Se for uma variável, deve ser Do tipo RLGRAP-FILETYPE Tipo do arquivo lido. Pode Ser ASC (ASCII para gerar arquivos Textos) DAT (campos separados por Tabulação, WK1, entre outros. Importante: O ARQUIVO SERÁ GERADO COM A MESMA ESTRUTURA
(MESMO LAYOUT) DA TABELA INTERNA. Usando-se uma tabela interna com todos os campos tipo CHAR, garante-se que não haverá problemas de conversão ou geração de arquivos tipo texto (filetype ASC).
SELECTION-SCREEN
• Selection-screen begin of line. Selection-screen end of line.
Define uma linha no Selection-screen. Tudo que estiver dentro deste bloco, sairá na mesma linha
CALL FUNCTION 'WS_DOWNLOAD' EXPORTING FILENAME = P_FILE FILETYPE = 'ASC' TABLES data_tab = it_tab
Nome da tabela interna Onde estão os dados com os quais o arquivo será gerado (no caso de download) ou para onde os dados serão carregados (upload)
Academia ABAP - 2004
53
• Selection-screen begin of line. selection-screen comment 1(5) text-002 for field p_mes. parameters: p_mes(02) type n. selection-screen comment 10(5) text-003 for field p_ano. parameters: p_ano(04) type n. Selection-screen end of line
• selection-screen begin of line. (faz sair tudo na mesma linha) parameteres: p_a(5), p_b(5). Selection-secreen end of line.
• selection-screen begin of line. Selection-screen pos 15. (faz sair na posição 15) parameteres: p_bot1 grupo gr1. Selection-screen comment p_bot1. (dar2 cliks no nome do botão e colocar o texto) Selection-screen end of line.
• At selection-screen. Ao dar <enter> após digitar o parâmetro o programa procura o At selection- screen
Evento acionado imediatamente após o “selection-screen” tiver sido executado, (Após o ENTER, F8, F4, etc.) antes mesmo de entrar no evento START-OF- SELECTION.
Neste evento, efetua-se a consistência dos parâmetros informados. At selection-screen on block b1 é chamado somente para as consistências dos parâmetros do block b1.
AT USER-COMMAND
• No report: É um evento que intercepta toda entrada do usuário que é feita na interface do usuário. (é localizado dentro da lógica principal, logo após as chamadas de função) • No On line: Intercepta toda ação feita pelo usuário através da Status Gui (interface de usuário). É o evento que é executado quando, por exemplo, clica-se no botão SALVAR de uma “barra de status”. A variável SY-UCOMM recebe o valor passado pela barra de status.
Cria dois parâmetros de entrada (MÊS e ANO) na mesma linha, com os
Academia ABAP - 2004
54
UTILIZAÇÃO DE ÍCONES
Incluir “biblioteca” de ícones no programa: INCLUDE <ICON> Exemplo de utilização: Write: ‘Aluno abaixo da média’, ICON_RED_LIGHT as icon. Saída: Aluno abaixo da média
HELP-REQUEST
Evento invocado quando tecla-se F1 em algum campo de seleção (da tela de seleção). At selection-options on help-request for <VARIÁVEL> Ex.: Selection-screen begin of ... Parameter p_cod (2). Selection-screen end of… At selection-options on help-request for p_cod. Write: ‘Usuário clicou F1’.
VALUE-REQUEST
Evento invocado quando tecla-se F4 (ou clica-se em ao lado de campo de seleção (da tela de seleção). Exemplo:
At selection-options on value-request for <VARIÁVEL> Selection-screen begin of ... Parameter p_cod (2). Selection-screen end of… At selection-options on value-request for p_cod. Write: ‘Usuário clicou F4’.
CRIAÇÃO DE FUNÇÕES
Encapsulamento de um trecho de programação que pode ser chamado por vários programas, receber, alterar e devolver dados. É chamado através do comando CALL FUNCTION. Construído através do “function builder” – transação SE37.
Academia ABAP - 2004
55
Ex.:
COMUNICAÇÃO TELA -> PROGRAMA ABAP
O Fluxo lógico de uma tela é dividido em dois eventos, a saber: PBO – PROCESS BEFORE OUTPUT ( Processos a serem executados antes da exibição da tela) PAI – PROCESS AFTER INPUT (Processos a serem executados após alguma intervenção do usuário: teclar ENTER, teclas de funções, escolha de botões, etc. ). O TAB não ativa o PAI.
O processamento no PBO e PAI é feito através de módulos, que chamam o código no programa principal.
Parâmetros de saída. O que a função vai devolver para o programa que chamou.
Se o parâmetro vai sofrer modificações e ser devolvido para o programa, indique aqui
Desenvolva aqui, o código da função
Academia ABAP - 2004
56
Tela 0001 � A tela é chamada pelo programa através do comando CALL SCREEN ‘9999’.
BARRA DE STATUS PARA TELAS
A construção de uma barra de status para as telas é assaz semelhante à construção de um “status” para um relatório. A diferença está na forma de tratar as funções selecionadas pelo usuário. No caso de reports, o tratamento é feito através do evento “at user-command”. Para telas, o tratamento deve ser feito através de algum módulo no PAI. O processamento dos botões ‘voltar’, ‘cancelar’ e ‘sair’ deve ser codificado.
PBO
PAI
Quando uma tela é chamada, os comandos do PBO são executados. Quando o usuário interfere (ENTER , por exemplo), os comandos que estiverem no PAI são executados, e a tela fica paradinha no PBO novamente, esperando para executar o PAI (para depois executar o PBO, depois PAI, novamente o PBO, PAI, PBO,PAI...)
Academia ABAP - 2004
57
SCREEN PAINTER – TRANSAÇÃO SE51
Características da tela: nome, tipo da tela, tamanho, etc.
Aqui mostra os objetos da tela
Nesta área codifica-se o processamento do PBO e PAI. Ex.: module status_0001’ executará o processamento definido em ‘module status_0001 output’ do programa ao qual a tela está associada. Note que é incluída a palavra OUTPUT ou INPUT após nome do módulo, no programa principal, definindo se é um módulo de PBO ou PAI
Trecho do programa principal A variável sy-ucomm recebe o código da função escolhido. Sugere-se que seja definido um campo no programa (like sy-ucomm), que o valor de sy-ucomm seja movido para ele e que a comparação seja feita através dele.
Academia ABAP - 2004
58
EDITOR DE LAYOUT DA TELA
Clicando-se no botão layout, ativa-se o editor de layout, onde, através de recursos típicos da “manipulação de elementos gráficos” (não sei se o termo é esse) desenha-se e ajusta os elementos da tela. (campos, textos, botões, frames, etc...)
MODIFICAÇÃO DINÂMICA DE ATRIBUTOS DE
ELEMENTOS DA TELA.
No PBO Loop at screen If screen-name = ‘XXX’. Screen-input = 0. Endif. Modify screen. Endloop.
Clicando aqui, é possível selecionar campos do programa ou de alguma tabela do DDIC
Neste exemplo, se o campo da tela for o XXX, será desabilitada a entrada de dados no mesmo.
Alguns outros atributos dos
elementos da tela
Screen-name Nome do campo
Screen-group1 (até 4)
Nome do grupo
Screen-required Obrigatório Screen-input Campo de
entrada Screen-output Campo de
saída Screen-invisible Visível/invisível Screen-length Tamanho do
campo Screen-active Campo ativo
Academia ABAP - 2004
59
VERIFICAÇÃO AUTOMÁTICA DE CAMPOS
Para se fazer uma verificação no conteúdo de algum campo em uma tela, enviar uma mensagem de erro, e garantir que o campo esteja ativo novamente para edição, usa-se: � Verificação automática para um campo:
FIELD <CAMPO> MODULE <NOME DO MÓDULO) Ex.: No PAI FIELD VC_CAMPO MODULE VERIFICA_CAMPO. No programa MODULE VERIFICA_CAMPO INPUT. IF VC_CAMPO <> ‘ABCD’. MESSAGE E000 WITH ‘CAMPO INVÁLIDO’. ENDIF. ENDMODULE.
� Verificação automática para vários campos: CHAIN: FIELD: VC_CAMPO1, VC_CAMPO2, VC_CAMPO3. MODULO VERIFICA_CAMPO. ENDCHAIN.
� Execução condicional de módulos baseados no FIELD - > algum valor que não seja o inicial.
FIELD (CAMPO) MODULE (NOME DO MÓDULO) ON INPUT
O módulo referido será executado se o campo em questão tiver algum valor que não seja o inicial.
Para mais de um campo: CHAIN: FIELD: VC_CAMPO1, VC_CAMPO2, VC_CAMPO3. MODULO VERIFICA_CAMPO ON CHAIN-INPUT ENDCHAIN.
Se no módulo VERIFICA_CAMPO tiver uma mensagem de erro (tipo E, W, etc), a mesma será exibida e TODOS OS CAMPOS QUE ESTIVEREM ENTRE O CHAIN E ENDCHAIN serão abertos novamente para edição
Neste exemplo, se o campo for diferente de ABCD, será enviada uma mensagem de erro e o campo ficará disponível novamente para entrada de dados.
Academia ABAP - 2004
60
� Execução condicional de módulos baseados no FIELD - > alguma alteração
FIELD (CAMPO) MODULE (NOME DO MÓDULO) ON REQUEST
O módulo referido será executado se o campo em questão tiver sofrido alguma alteração (usuário digitou algum valor diferente do que já existia).
Para mais de um campo: CHAIN: FIELD: VC_CAMPO1, VC_CAMPO2, VC_CAMPO3. MODULO VERIFICA_CAMPO ON CHAIN-REQUEST ENDCHAIN.
Mudança dinâmica de telas em dialog programming.
Quando cria-se uma tela (dialog) é solicitado informar no campo “tela seguinte”, o código da próxima tela que será executada após a tela que está sendo criada. Pode-se interferir nesta seqüência dinamicamente através de alguns comandos a saber:
• SET SCREEN XXXX -> Altera temporariamente a seqüência de ativação
das telas. A tela XXXX será considerada como próxima tela. • LEAVE SCREEN –> “Encerra” a tela corrente
• LEAVE TO SCREEN XXXX -> Equivale aos dois comandos acima, em
seqüência. Chama imediatamente a tela XXXX
• CALL SCREEN XXX – >Interrompe a tela corrente e processa a tela XXXX
• SET SCREEN 0 , LEAVE SCREEN ou LEAVE TO SCREEN 0 –> Chama
a tela anterior. Se não houver tela anterior, encerra o programa.
Academia ABAP - 2004
61
DIALOG PROGRAMMING – TABLE CONTROL
Table control é um objeto de dialog programming utilizado para exibir/entrar dados em uma estrutura semelhante à uma tabela, com funcionalidades úteis: Tamanho de linhas/colunas ajustáveis para exibição/edição de dados; Seleção de linhas e colunas; Cabeçalho de colunas; Geração automática de barra de rolagem vertical/horizontal; Atributos de células modificáveis em tempo de execução. Definição de table control No top include do programa principal: CONTROLS TC_0001 TYPE TABLEVIEW USING SCREEN XXXX Define um objeto do tipo TABLEVIEW, com o nome TC_0001 usando os parâmetros iniciais definidos na table control XXXX. Um objeto tipo TABLEVIEW é uma estrutura na qual se define os atributos da table control (número de linhas, linha do topo, etc. ) Estes atributos podem ser modificados em tempo de execução. Desenhar na tela um objeto tipo Table control (Lembrar de definir um control xxx tipo tableview) Inserir os campos de uma tabela interna. Deve haver um loop/endloop da tabela interna tanto no PBP quanto no PAI, enviando e recebendo dados do programa para a tela e da tela para o programa respectivamente. PROCESS BEFORE INPUT LOOP AT IT_ALUNOS WITH CONTROL TC_XXX MODULE DEFINE_LINHAS. ENDLOOP. PROCESS AFTER INPUT LOOP AT IT_ALUNOS. MODULE ATUALIZA_TABELA. ENDLOOP.
Faz um loop na tabela interna transportando os dados para a table control tc_xxxx Tentar-se-á preencher todas as linhas visíveis na tela. Se a tabela interna tiver menos linhas do que a table control, linhas vazias serão acrescentadas. Utiliza-se um módulo (no exemplo, o DEFINE_LINHAS) para controlar tal situação: Module define_linhas input. If it_alunos is initial. Exit from step-loop. “Sai do loop do PBO Endif. Endmodule.
Aqui são atualizados os dados feitos pelo usuário na table control, para a tabela interna. O módulo (no exemplo ATUALIZA_TABELA) contém: Modify it_alunos index tc_xxx current-line.
Academia ABAP - 2004
62
� Modificação do atributos de uma table control (exemplos) Quando se declara um “CONTROL” para um table control, (a instrução CONTROLS TC_0001 TYPE TABLEVIEW USING SCREEN XXXX no top include), é criado um elemento do tipo TABLEVIEW com a seguinte estrutura:
Fixed_Cols Lines Top_Line Current_Line Left_Col Line_Sel_Mode Col_Sel_Mode Line_Selector V_Scroll H_Grid V_Grid Cols (aqui dentro esta a definição dos atributos para cada campo da tabela interna associada ao table control) Invisible
Pode-se alterar dinamicamente os atributos de uma table control, alterando os valores dos atributos.
Ex.: TC_0001-INVISIBLE = ‘1’, torna o table control TC_0001 invisible. TC_0001-TOP_LINE = 5, define que a linha de topo da table control será a d
e nro 5.
Habilitar/desabilitar algumas células do grid * module carrega_ti_ysap01d. LOOP AT ti_YSAP01d WITH CONTROL tc101
CURSOR tc101-current_line. MODULE carrega_table_control_101. MODULE Controle_tela. ENDLOOP. MODULE Controle_tela OUTPUT. IF YSAP01D-A1 = 'X' . LOOP AT SCREEN. CASE screen-name. * Só exibição para o campo 'Unidade de Medida': WHEN 'YSAP01D-ESCALA'. MOVE '0' TO screen-input. WHEN 'YSAP01D-CODE'. MOVE '0' TO screen-input. WHEN 'YSAP01D-DT_INICIAL'. MOVE '0' TO screen-input. WHEN 'YSAP01D-HR_INICIAL'. MOVE '0' TO screen-input. WHEN 'YSAP01D-DT_FINAL'. MOVE '0' TO screen-input. WHEN 'YSAP01D-HR_FINAL'. MOVE '0' TO screen-input. ENDCASE. MODIFY SCREEN. ENDLOOP. ENDIF.
Tornar uma coluna de um grid visível/invisivel ...type-pools cxtab. ...data: WA TYPE CXTAB_COLUMN. loop at tc110-cols into wa. if wa-SCREEN-NAME = 'TI_YSUNITU-NUMEMB'. wa-INVISIBLE = 1. modify tc110-cols from wa. endif. endloop.
Academia ABAP - 2004
63
� Controlando os botões de scroll em uma table control
Deve-se programar as funções de paginação quando se trabalha com table control. As funções dos botões de avançar/recuar linha/página devem ser programadas utilizando os valores do número de linhas visíveis da table control e o número da linha do topo da table control. O atributo TC_XXXX-TOP_LINE define qual a linha do topo.
No PBO, a variável de sistema SY-LOOPC contém o número de linhas da table control. SY-LOOPC somente conterá valores quando o processamento está dentro do LOOP/ENDLOOP, porque ele conta o número de passagens do loop.
Programar, na barra de status, os botões para scroll Obs.: utilizar os códigos de função padrão: P-, P--, P+, P++ Exemplo Outro exemplo
*&---------------------------------------------------------------------
*
*& Module pula_pagina INPUT
*&---------------------------------------------------------------------
*
* text
*----------------------------------------------------------------------
*
module pula_pagina input.
if ok_code = 'P--'.
tc_001-top_line = 1.
elseif ok_code = 'P-'.
tc_001-top_line = tc_001-current_line - 1.
elseif ok_code = 'P+'.
tc_001-top_line = tc_001-current_line + 1.
elseif ok_code = 'P++'.
tc_001-top_line = tc_001-lines - sy-loopc.
endif.
endmodule. " pula_pagina INPUT
Na tela
PROCESS BEFORE OUTPUT. LOOP AT TC_0100…
MODULE GET_LOOPLINES.
ENDLOOP
PROCESS AFTER INPUT.
LOOP.
…
ENDLOOP.
No programa
DATA LOOPLINES LIKE SY-LOOPC. MODULE GET_LOOPLINES OUTPUT. LOOPLINES = SY-LOOPC.
ENDLOOP
MODULE USER_COMMAND_0200 INPUT.
CASE OK_CODE.
WHEN ‘P--’.
TC_0100-TOP_LINE = 1.
WHEN ‘P-’.
Academia ABAP - 2004
64
Outro exemplo de paginação No módulo PAI da tela: No módulo de função
� Tornar uma coluna de um grid visível/invisivel
...type-pools cxtab.
...data: WA TYPE CXTAB_COLUMN.
loop at tc110-cols into wa.
if wa-SCREEN-NAME = 'TI_YSUNITU-NUMEMB'.
wa-INVISIBLE = 1.
modify tc110-cols from wa.
* Trata paginação da table control
WHEN 'P--' OR 'P-' OR 'P+' OR 'P++'.
PERFORM paginacao_100 USING vc_okcode
vi_linhas_tc_100
vi_linhas_100
CHANGING tc_0100-top_line.
FORM paginacao_100
USING value(p_okcode) TYPE c
value(p_linhas_tc) TYPE i
value(p_linhas_it) TYPE i
CHANGING p_top_line TYPE i.
CASE p_okcode.
* Posiciona na primeira página
WHEN 'P--'.
p_top_line = 1.
* Subtrai o número de linhas visíveis na table control para
* voltar uma página.
WHEN 'P-'.
SUBTRACT p_linhas_tc FROM p_top_line.
IF p_top_line LT 1.
p_top_line = 1.
ENDIF.
* Soma o número de linhas visíveis na table control para
* avançar uma página.
WHEN 'P+'. ADD p_linhas_tc TO p_top_line.
IF p_top_line > p_linhas_it.
SUBTRACT p_linhas_tc FROM p_top_line.
ENDIF.
* Posiciona na última página. Para isto deve-se atualizar o * campo top-line da table control com a seguinte operação:
* Número de linhas preenchidas da tabela interna menos
* o número de linhas visíveis na table control mais 1.
WHEN 'P++'.
IF p_linhas_it > p_linhas_tc.
p_top_line = p_linhas_it - p_linhas_tc + 1.
ENDIF.
ENDCASE.
ENDFORM.
Academia ABAP - 2004
65
endif.
endloop.
� Habilitar/desabilitar algumas células do grid * module carrega_ti_ysap01d. LOOP AT ti_YSAP01d WITH CONTROL tc101 CURSOR tc101-current_line.
MODULE carrega_table_control_101.
MODULE Controle_tela.
ENDLOOP.
MODULE Controle_tela OUTPUT.
IF YSAP01D-A1 = 'X' .
LOOP AT SCREEN.
CASE screen-name.
* Só exibição para o campo 'Unidade de Medida':
WHEN 'YSAP01D-ESCALA'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-CODE'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-DT_INICIAL'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-HR_INICIAL'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-DT_FINAL'.
MOVE '0' TO screen-input.
WHEN 'YSAP01D-HR_FINAL'.
MOVE '0' TO screen-input.
ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
� VERIFICAR QUAL BOTÃO FOI PRESSIONADO DENTRO DE UMA LINHA
DE UM TABLE CONTROL (Quando rola-se a página, a linha clicada no table control não corresponde à linha da tabela interna).
… process after input.
… module user_command_0100.
Academia ABAP - 2004
66
get cursor field wc_field.
get cursor line wi_line.
if wc_field = 'TI_OPER-FORMULA'.
clear wc_field.
wi_line = tc1002-current_line - 1.
endif.
O botão corresponde a um campo da tabela interna (TI_OPER-FORMULA)
wi_line será o número da linha da tabela interna correspondente ao botão clicado.
Entradas negativas em colunas de table control Ex.: data: begin of ti_oper occurs 0,
poleo type p decimals 4,
end of ti_oper.
Na coluna do module pool, para o elemento ti_oper-poleo, definir texto como "_.___.___.___,____V" para saída = 1,0000- definir texto como "_.___.___.___V" para saída 91
SET CURSOR
Permite definir, em uma tela, o campo e a posição no campo que o cursor será posicionado: set cursor vc_campo offset 3 – Posiciona o cursor no campo vc_campo, na terceira posição
LEAVE TO LIST PROCESSING
A partir de um programa dialog, é possível exibir listas (lembram dos reports?). Ex.: MODULE IMPRIME LISTA. SUPRESS DIALOG. LEAVE TO LIST-PROCESSING AND RETURN (TO SCREEN XXX) SET PF-STATUS SPACE. LOOP AT IT_ALUNOS. WRITE: IT_ALUNOS-COD, IT_ALUNOS-NOME … ENDLOOP. ENDMODULE.
Academia ABAP - 2004
67
O processamento retornará ao dialog quando o usuário sair com F3 ou quando for encontrado no report, o comando LEAVE LIST-PROCESSING. Eis uma possibilidade assaz interessante: o programa on-line (dialog, module-
pool) chamar uma lista dentro de uma tela modal. Fica muito bonitinho. MODULE XXX INPUT. CALL SCREEN 200 “Tela 200 é modal STARTING AT 20 10 ENDING AT 50 15. ENDMODULE
SAP MEMORY E ABAP MEMORY
SET PARAMETER e GET PARAMETER enviam e recebem valores para a SAP memory respectivamente. Esses valores são específicos para o usuário/sessão, porem disponíveis para todas as sessões internas. EXPORT/IMPORT (CAMPO) TO/FROM MEMORY ID utilizam a ABAP memory para enviar e receber respectivamente, campos, estruturas e tabelas internas entre programas. (PESQUISAR ATÉ QUE MOMENTO OS DADOS SÃO MANTIDOS COM GET/SET E EXPORT/IMPORT).
O exemplo, lista os dados da tabela it_alunos. SET PF-STATUS SPACE ativa a barra de status standard. SUPRESS DIALOG faz com que a tela corrente não seja exibida. Após exibir a lista, retorna-se-á para a tela indicada em set screen
MODULE LISTA OUTPUT. SUPRESS DIALOG. LEAVE TO LIST-PROCESSING... SET PF-STATUS SPACE. LOOP AT IT_ALUNOS. WRITE: IT_ALUNOS-COD … ENDLOOP. ENDMODULE.
Na tela 200
Academia ABAP - 2004
68
TAB STRIP
Tabstrip permitem exibir diferentes componentes de uma aplicação em uma única tela. Seu design intuitivo permite usuários navegar facilmente entre os componentes. Partes de um Tabstrip Pode-se associar uma área de subtela para cada página do tabstrip ou uma área comum a várias páginas. Nas áreas de subscreen são mostrados os dados através de telas tipo Subtela.
� Criação de tabs trips No top include incluir a instrução CONTROLS TS_001 TYPE TABSTRIP Criar na tela, um objeto do tipo tabstrip e posicionar no local desejado. (Se desejar mais páginas, escolha o objeto “botão” e posicione na parte superior esquerda do tabstrip.) Dar um nome para cada página do tabstrip. Click click na abinha de cada página, e colocar o código de função para todas as páginas (o código que será recebido pelo OK_CODE, através do SY-UCOMM. Criar dentro de cada página um objeto tipo sub-área (um para cada página ou um para todos.)
Página do tabstrip Área de
subscreen
Função que será passada para o sy-ucomm quando a “aba” for pressionada
Nome da área de subtela (subscreen)
Nome da aba do tabstrip
Academia ABAP - 2004
69
Para utilizar uma sub-área para todas as páginas, crie o objeto na primeira página, e nas seguintes, nos atributos do página (duplo clique nela), colocar o nome da subárea criada para a primeira página no campo Objeto de referência
� Para fazer scroll em uma tabstrip (navegar entre as páginas clicando nas abinhas) sem ativar o PAI.
Criar as páginas com o atributo ‘tipo de função” = P A codificação será a seguinte: � Neste exemplo, quando clicar nas abinhas da tabstrip, o PAI não será invocado.
� Para fazer scroll em uma tabstrip ativando o PAI Criar as páginas com o atributo ‘tipo de função” = ‘ ‘ TODAS AS PÁGINAS DEVEM COMPARTILHAR DA MESMA SUB-ÁREA Exemplo da codificação No top include controls ts_001 type tabstrip. Define o tabstrip data: vc_tela like sy-dynnr value ‘0002’, Define 0002 como a tela inicial ok_code like sy-ucomm, Para receber o sy-ucomm. Associa-lo à primeira tela vc_tab like sy-ucomm value ‘TAB1’. Página da tabstrip que será chamada primeiro. O TAB1 é o código de função definido para uma das páginas do tabstrip Na lógica de processamento da tela principal: PROCESS BEFORE OUTPUT. MODULE DEFINE_PAGINA. CALL SUBSCREEN SUB1 INCLUDING SY-CPROG VC_TELA
PROCESSA BEFORE OUTPUT
CALL SUBSCREEN SUB1 INCLUDING SY-CPROG ‘0001’.
CALL SUBSCREEN SUB2 INCLUDING SY-CPROG ‘0002’.
PROCESS AFTER INPUT.
CALL SUBSCREEN SUB1.
CALL SUBSCREEN SUB2.
Para este exemplo foram
criadas três telas. A
primeira, tipo normal, onde
foi desenhado o tabstrip. As
outras duas, do tipo subtela,
que serão apresentadas nas
subáreas da página de tabstrip
correspondentes.
OBRIGATÓRIO fazer o call subscreen no PBO e PAI. Senão
não funciona. Não me pergunte
porque. Fica para vocês
pesquisarem.
Module define_pagina output.
case vc_tab.
when ‘TAB1’.
vc_tela = ‘0001’.
when ‘TAB1’.
vc_tela = ‘0002’.
endcase.
endmodule
Academia ABAP - 2004
70
PROCESS AFTER INPUT. CALL SUBSCREEN SUB1. MODULE USER_COMMAND_001
FIELD SYMBOLS
Referem-se a “ponteiros de memória” são estruturas de dados que armazenam endereços de memória. O valor de um ponteiro é uma posição de memória, enquanto que, por exemplo, a de um inteiro é um número. Declaração: FIELD-SYMBOLS <ponteiro> Durante a execução, um campo é atribuído ao field symbol através do comando ASSIGN. Todas as operações efetuadas no field symbol serão executadas também ao campo a ele associado. Ex.: DATA: variavel(10) type c value ‘básico’. FIELD-SYMBOLS <field>. ASSIGN variavel to <field>. WRITE: variavel, field. * A saída será: básico básico MOVE ‘exemplo’ to <field>. WRITE: variavel, field.
A saída será: exemplo exemplo
CRIAÇÃO DE INTERVALOS DE NUMERAÇÃO
� Criação de intervalos de numeração (para geração de número sequencial) Transação SNRO Exemplo: Criar intervalo Criar na transação SNRO o objeto ZCODINV Domínio: ZD_CODIN Porcentagem para aviso: 90,0 Quantidade nºs no buffer: 0 Criar o intervalo: Nº: 01 Do: 0000000001 Até: 9999999999 Pos.interv.numeração: 1
Module user_command_001 input.
ts_001-active = vc_tab. �
case ok_code
when ‘TAB1’.
vc_tab = ‘TAB1’.
when ‘TAB2’.
vc_tab = ‘TAB2’.
endcase.
endmodule
� Pode-se mudar dinamicamente vários atributos da tabstrip. Entre eles está o “TS_XXX-ACTIVETAB”
qque indica qual abinha estará ativa, isto é, qual será
mostrada na frente.
Academia ABAP - 2004
71
� Utilizar intervalo de numeração Chamar a função “NUMBER_GET_NEXT” com os parâmetros
nr_range_nr = ‘1’,
object = ‘ZCODINV’
quantity = ‘1’
subobject = ‘ ‘
toyear = ‘0000’
ignore_buffer = ‘ ‘
O número gerado em number será o próximo seqüencial.
Ex.: Numeração automática de documentos, notas fiscais, etc. Cria-se o intervalo, e o R/3 cuida do gerenciamento da numeração automática, quando é feita a solicitação da geração do número. Criam-se intervalos de numeração através da transação SNRO. Campos básico para criação: Elemento de dados do sub-objeto – pode-se organizar a faixa de numeração de acordo com sub-objetos (código da companhia, departamento, etc.). Informe aqui o elemento de dados do sub-objeto; Ano fiscal – Pode-se organizar a faixa por ano; Domínio do número – o tamanho e tipo do número (só é possível alfanumérico – char e num) é definido pelo domínio informado neste campo. % de aviso – Será enviada mensagem de erro quando o número gerado corresponder à porcentagem informada neste campo, em relação a quantidade de números do intervalo.
• A função NUMBER_GET_NEXT gerará o próximo número do intervalo de numeração.
• A função NUMBER_CHECK verifica se um número está dentro de um
intervalo de numeração especificado.
• A função NUMBER_GET_INFO retorna informações sobre o intervalo de numeração especificado (limites, situação atual, etc).
SAP TRANSACTION
Uma SAP Transaction, ou transação SAP consiste de passos de diálogo (dialog step). Um passo de diálogo começa quando o usuário interfere de algum modo em uma tela, de modo que ela ative o PAI (um ENTER, uma tecla de função, clica duas vezes ou escolhe um item de menu). O passo de diálogo termina quando a próxima tela é mostrada.
Academia ABAP - 2004
72
E.x: PBO PAI PBO PAI PBO PAI Dialog Step Dialog Step Cada passo de diálogo, pode conter comando para atualização de tabelas transparentes
ATUALIZAÇÃO SÍNCRONA
No final de cada dialog step, o R/3 atualiza automaticamente todas as requisições de atualizações na base de dados. Imagine que na tela 100 você programou a inserção de dados e eliminação de dados da sua tabela ZTBALUNOXX. Quando você der um enter e o programa passar para a tela 200, será inserido na sua tabela o registro do modo como você programou e será eliminada da sua tabela, o registro que você especificou.
ATUALIZAÇÃO ASSÍNCRONA
Algumas vezes é imperativo que os dados não sejam atualizados no banco de dados, quando “mudar de tela”. Imagine a seguinte situação: “Você tem que fazer várias atualizações dentro do seu programa (inserir um registro, modificar outro, eliminar outros dois e inserir mais um). Essas atualizações são feitas por várias telas diferentes. E mais, se uma dessas atualizações não for bem sucedida (você tentou inserir um registro com chave duplicada, por exemplo.), nenhuma das outras atualizações pode ser feita.” Pelo default do R/3, que é atualização síncrona, se der erro em uma atualização qualquer, JÁ ERA! A saída para isso é utilizar atualização assíncrona. As solicitações de atualização não são executadas pelo R/3 até que você o instrua para isso. As solicitações são “colocadas” em uma tabela de log e só são atualizadas quando você der o comando específico. Se em alguma das etapas deu erro, simplesmente dê um comando para que o R/3 descarte essas atualizações.
� LUW (Logical Unit of Work – Unidade lógica de trabalho) Para trabalhar com atualização assíncrona deve-se estabelecer o ponto onde os dados serão atualizados (aquele comando para o R/3 atualizar). Isso é feito combinando-se vários dialog steps. Linha pontilhada = dialog steps combinados -> PBO PAI PBO PAI PBO PAI
PBO Dialog Step Dialog Step
Dialog step Vários dialog steps formam uma LUW.
Tela 100 Tela 200 Tela 300
Tela 100 Tela 200 Tela 300 Tela 300
Academia ABAP - 2004
73
Na minha seqüência de telas (meu programa) posso ter quantos LUW que quiser. Programo-os de acordo como (e quando) quero atualizar minha base de dados. Se todas minhas atualizações forem ok, executo o comando COMMIT WORK. Se der erro em alguma atualização, executo o comando ROLLBACK WORK.
• COMMIT WORK – Pega os dados da tabela de log e efetiva a atualização deles no banco.
O comando COMMIT WORK sempre deve ser utilizado quando uma ou mais LUW estão sendo processadas.
• ROLLBACK WORK – Descarta os dados da tabela de log e não
atualiza nada no banco.
• Comandos para trabalhar com atualização assíncrona: CALL FUNCTION ‘NOME DA FUNÇÃO’ IN UPDATE TASK PERFORM ‘NOME DO FORM’ ON COMMIT.
As solicitações de atualização (INSERT, DELETE ou UPDATE) que se encontrarem dentro dos comandos acima, só serão efetivadas no banco de dados, quando for encontrado um comando COMMIT WORK. Serão descartadas quando for encontrado o comando ROLLBACK WORK.
NA TRANSAÇÃO ASSÍNCRONA (DEFAULT) O R/3 PROVÊ UM COMMIT WORK AUTOMATICAMENTE NO FINAL DE CADA DIALOG STEP!
OBJETS DE BLOQUEIO (FUNÇÕES DE ENQUEUE /
DEQUEUE)
Quando um programa atualiza um determinado registro, é feito um ‘lock’ para este registro. Significa que nenhum outro programa pode fazer nenhuma atulização com o mesmo, até que o programa que o “pegou” primeiro, o libere. Ex.: Meu programa lê o registro do aluno de código 001 da tabela ZTBALUNOXX e faz um UPDATE do nome e endereço. Select codigo nome endereço from ZTBALUNOXX into it_tabela Where código = ‘001’. ZTBALUNOXX-NOME = ‘ABCD’. UPDATE ZTBALUNOXXX ... Se na mesma hora, um outro camarada rodar o programa para fazer atualizações no código 001 (ou algum outro programa que tente modificar este registro) será enviado para ele uma mensagem informando que o registro em questão já está sendo processado (ou está em lock) pelo programa que acessou o registro primeiro. Após a atualização, é feito um UNLOCK, ou seja, o registro é liberado novamente. O R/3 já cuida do lock/unlock automaticamente.
Academia ABAP - 2004
74
Muitas vezes, a duração do lock provido pelo R/3 não é suficiente para minha aplicação. Imagine que eu tenha que ler um código de aluno, fazer uma porção de consultas e só depois atualiza-lo. Enquanto eu tiver fazer as consultas, ninguém mais deveria acessa-lo para modifica-lo ou elimina-lo. Para isso, devo definir um lock no início do processo e um unlock no final da atualização. Faço isso através de objetos de bloqueio, ou, funções de ENQUEUE e DEQUEUE.
� Criando objetos de bloqueio. Na transação SE11, escolha OBJETOS DE BLOQUEIO e dê um nome à ele. O nome do objeto de bloqueio deve começar com EZ_
Nome da tabela onde
está o registro que se
quer “bloquear”
Academia ABAP - 2004
75
Feito isso, serão criadas duas funções: ENQUEUE_EZ_ABC e DEQUEUE_EZ_ABC para bloqueio e desbloqueio do registro. • Para usar
O campo it_alunos-aluno conterá o código do aluno que será bloqueado • Para bloquear
call function 'ENQUEUE_EZ_ABC' exporting mode_abc = 'E' mandt = sy-mandt serie_despacho = it_alunos-aluno • Para desbloquear call function 'DEQUEUE_EZ_ABC'
exporting mode_abc = 'E' mandt = sy-mandt serie_despacho = it_alunos-aluno
O R/3 já sugere
que o lock seja
feito pela chave
primária
Aqui define-se como será feito o bloqueio:
E – Bloqueio de escrita
S – Bloqueio de leitura
X – De escrita mas outro usuário não pode
dar um ‘lock’ enquanto estiver bloqueado
Academia ABAP - 2004
76
WS_EXECUTE - Executa uma aplicação do Windows. Parametros principais: - Program: caminho do programa (ex. C:\WINDOWS\NOTEPAD.EXE). - Command: linha de comando (ex. o nome do arquivo). STATUS_TEXT_EDIT - Lê o status de uma ordem de serviço (FATP, ENTE,
ENCE, BLOQ, etc...). Parametros principais de exportação: - Client: mandante (ex.: sy-mandt). - flg_user_stat: 'X' lê os status criados pelo usuário, ' ' não lê o status criado pelo usuário. - objnr: número do objeto (você pode selecioná-lo na tabela AUFK). - only_active: 'X' mostra apenas os status ativos. - spras: idioma (ex.: 'P') Parametros principais de importação: - line: status de sistema, campo do tipo caufvd-sttxt - user_line: status criados pelo usuário, campo do tipo bsvx-sttxt SUSR_USER_ADDRESS_READ - Lê dados de um determinado usuário do
sistema Parametro principal de exportação: user_name - username (ex. sy-uname) Parametro principal de importação: user_address - dados do usuário, usar uma estrutura do tipo addr3_val.
FUNÇÕES STANDARD
� Para trabalhar com Notas Fiscais: J_1B_NF_NUMBER_SEPARATE - Nota Fiscal System - Number Separate (NF number + Series) J_1B_NF_NUMBER_CONDENSE - Nota Fiscal System - Number Condense (NF number + Series) J_1B_NF_NUMBER_GET_NEXT - Nota Fiscal System - Get next Nota Fiscal number J_1B_NF_DOCUMENT_READ - Carrega o header da nota fiscal em uma estrutura J_1B_NF_VALUE_DETERMINATION - Carrega os itens, seus impostos e o total líquido do item da nota fiscal
Academia ABAP - 2004
77
Por questões de performance, os itens podem ser passados para a função J_1B_NF_VALUE_DETERMINATION para que ela efetue somente os cálculos
� Para se obter a BOM de um material
Usar a função CS_BOM_EXPL_MAT_V2
� Para testar o status de uma ordem
Usar a função STATUS_CHECK_BY_SELSCHEM e verificar o retorno FULLFILL se inicial é porque a ordem não se encontra no esquema de status indicado
� Para criar jobs dentro de um programa abap
Utilizar as funções: JOB_OPEN, JOB_SUBMIT e JOB_CLOSE
As tabelas que armazenam as informações de JOBS são: TBTCO Job status overview table TBTCP Batch job step overview
� Função que calcula diferença entre datas/horas
CALL FUNCTION 'Z_DT_HORAS_DIF'
EXPORTING
i_dt_inicio = p_dt_1
i_hr_inicio = p_hr_1
i_dt_fim = p_dt_2
i_hr_fim = p_hr_2
IMPORTING
e_diff_total = v_difer
er_message = v_erro
EXCEPTIONS
OTHERS = 1.
v_min = FRAC( v_difer ) * 60.
v_hora = v_difer - FRAC( v_difer ).
CONCATENATE v_hora ':' v_min INTO v_tempo. � Executar comandos do UNIX
DATA: t_arq_usudel LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.
PARAMETERS: p_com LIKE rlgrap-filename DEFAULT
'ls -d /interfaces/log/perfis/usuario/*'.
CALL 'SYSTEM'
ID 'COMMAND' FIELD p_com
ID 'TAB' FIELD t_arq_usudel-*sys*.
IF T_ARQ_USUDEL[] IS INITIAL.
ENDIF.
Academia ABAP - 2004
78
� READ_TEXT O nome do texto é simplesmente a chave completa da tabela em questão, existe uma dificuldade de descobrir o ID e o Objeto a serem passados. Para acessá-los facilmente, bastar clicar (2x) sobre o texto na transação em que ele aparece, (o modo editor será acionado) em seguida ir no menu: Saltar -> Cabeçalho e pronto, os campos necessários estão nesta tela.
� POPUP SCREEN
POPUP_TO_CONFIRM_STEP
Cria um box de mensagem com confirmação
POPUP_TO_CONFIRM_WITH_MESSAGE
Cria um box de mensagem com confirmação E 5 LINHAS
POPUP_TO_CONFIRM_WITH_VALUE
Cria Box de Dialogo com passagem de valores como parametro.
POPUP_TO_DECIDE
Cria box de dialogo com opções especificadas.
Academia ABAP - 2004
79
POPUP_TO_DECIDE_WITH_MESSAGE
Cria Box de dialogo com opções especificas
POPUP_TO_DISPLAY_TEXT
Cria Box de Selecão com 2 linhas e Botão
POPUP_TO_SELECT_MONTH
Cria um Box de Seleção para Mês e Ano
POPUP_WITH_TABLE_DISPLAY
Cria um Box de seleção, a partir de uma tabela passada como parâmetro e retorna qual a opção selecionada pelo usuário.
POPUP_TO_CONFIRM
Exibe uma caixa de textos para confirmação
Academia ABAP - 2004
80
POPUP_TO_DISPLAY_TEXT
Exibe texto em caixa de textos modal
POPUP_TO_INFORM
Cria caixa de informação
POPUP_TO_CONFIRM_LOSS_OF_DATA
Box de Dialogo
� TEXTOS
SAVE_TEXT
Salva Textos Longos
READ_TEXT
Realiza Leitura de Textos Longos no R/3
COMMIT_TEXT
Grava Textos Longos
INIT_TEXT
To load long text into SAP
LIST_TO_ASCII
Converte Relatórios Abap para o formato ASCII
� GERAL RSTXPDFT4
Converter ordem de spool para PDF
RSTXLDMC
Importar figura (TIF) como texto
RSTXSCRP
Download de sapscript
YS_DESBLOQ_INTERFA
Desbloquear interface
RSTXR3TR
Transporte de sapscript
Academia ABAP - 2004
81
Ex. Par - Sistema file = servidor
- formato = binário
- file = /usr/sap/trans/tmp/PARK9000.scp
RP_CALC_DATE_IN_INTERVAL
Adiciona/subtrai anos/mêses/dias de uma data
RP_LAST_DAY_OF_MONTHS
Determina ultimo dia do mês
RS_REFRESH_FROM_SELECTOPTIONS
Seleciona Valores de um Select-Options
RS_VARIANT_CONTENTS
Retorna valores de uma variável em uma tabela interna
RZL_SLEEP
Para o Processamento do programa de 1 a 5 Segungos
SAPGUI_PROGRESS_INDICATOR
Exibe uma barra de Status, utilizando o SAP GUI
SD_DATETIME_DIFFERENCE
Retorna a diferença entre duas datas e Hora
SO_WIND_SPOOL_LIST
Exibe um Bowse com as impressões do usuário que estão no Spool.
TERMINAL_ID_GET
Retorna o Número IP e o nome do Terminal que o usuário esta logado.
TH_ENVIRONMENT
Retorna Informações sobre o sistema operacional do Servidor SAP.
TH_POPUP
Exibe uma mensagem para o usuário Especificado, em qualquer client.
TH_USER_INFO
Retorna informações sobre o usuário que esta logado.
TH_USER_LIST
Retorna informações de usuários conectados a determinado Servidor
UPLOAD
Abri arquivos na estação Local
WS_DOWNLOAD
Salva Tabela interna na estação de trabalho local
WS_EXECUTE
Executa programas na estação de trabalho
Academia ABAP - 2004
82
WS_FILE_DELETE
Deleta arquivos na estação de trabalho
WS_FILENAME_GET
Mostra um Browser para Selecionar Arquivos
WS_MSG
Cria um box de dialogo com uma mensagem no padrão Visual Basic
WS_UPLOAD
Carrega dados de arquivos na estação de trabalho para uma tabela interna.
WS_VOLUME_GET
Retorna o Nome do Volume da unidade de disco da estação de trabalho
WWW_LIST_TO_HTML
Salva o conteúdo de um relatório em uma tabela interna no Formato HTML
EPS_GET_DIRECTORY_LISTING
Retorna uma tabela interna com os arquivos de determinado diretório do servidor.
F4_DATE
Exibe um calendário pop-up para escolha
HOLIDAY_GET
Retorna os feriados existentes entre um intervalo de data, baseado no calendário da fábrica
MONTH_NAMES_GET
Retorna uma tabela interna com os nomes dos meses.
HOLIDAY_GET
Testar se é dia útil.
DAY_ATTRIBUTES_GET
Testar se é dia útil (atributos do dia)
QPK1_GP_CODE_SELECTION
Match-code em estrut. de árvore para dados de catálogo.
SPELL_AMOUNT
Retorna valor por extenso
NUMERIC_CHECK
Verifica se variável é numérica
LOAN_TABLECONTROL_SCROLLING
Controlar scroll de uma table control.
DYNP_VALUES_READ
Lê os valores informados na tela
Academia ABAP - 2004
83
GET_DYNPRO_LIST
Lê os valores informados na tela. Na tela standard gerada pelo gerador de atualização de tabelas, só consegui usar este
HELP_VALUES_GET_NO_DD_NAME
Montagem de matchcode dinâmico
RS_VARIANT_CONTENT
Função para leitura de variantes (Ver tabelas VARI e VARID)
� Funções para conversão de unidades/medidas
UNIT_CONVERSION_SIMPLE
UNIT_CONVERSION_SIMPLE_OLD
FLTP_CHAR_CONVERSION
COMO UTILIZAR AUTHORITY-CHECKS
A amarração se dá com um Objeto de autorização para uma ou mais autorizações
Perfil é composto por um ou mais objetos de autorizações....
Usuário pode estar presente em N perfis...
Os objetos de autorização, podem ser compostos de vários campos. Conforme o interesse do objeto. Exemplo, pode-se testar a atividade do usuário de acordo com o valor preenchido de um determinado campo...como: Autorização de usuário por empresa campos: BUKRS - Empresa ACTVT – Atividade (01-Criação, 02-Alteração e 03-Exibição) As autorizações podem conter preenchimentos diversos para os objetos de autorização exemplo anterior: Autorização = S_EXIBIR, campos/valores: BUKRS � EMP1 ACTVT � 03; OBSERVAÇÂO:
Estes valores podem ser RANGES ou PARÂMETROS; FIXOS ou VARIÁVEIS. Em qualquer campo de autorização, o (*) eqüivale a todas as entradas possíveis;
Pesquisando os Objetos de Autorização: • Caminho: R/3�Ferramentas� ABAP Workbench �Desenvolvimento�Outras
Ferramentas�Objetos de Autorização�Objetos; • Transação SU21; • Selecionar a classe de Objetos do seu interesse;
Academia ABAP - 2004
84
• Consultar o Objeto em questão; • Poderá ser criado novos objetos de autorização.... Criando Autorizações; • Caminho: R/3�Ferramentas�Administração�Atualização Usuário�Autorização • Transação SU03; • Seleciona, novamente, a Classe de Objetos desejado; • Consultar os Objetos existentes, conforme passo anterior; • Optar pelo objeto de interesse; • Consultar as Autorizações já existentes para este objeto; • Poderá ser criado novas autorizações... Atualizar Perfil: • Caminho: R/3� Ferramentas�Administração�Atualização Usuário�Perfil; • Transação SU02; • Criação; • Digite o nome do perfil a ser criado; • Clicar em ENTER ou GERAR ÁREA TRAB.; • Exibirá uma lista vazia; • Clicar em Criar, colocar descrição; • Perfil individual1 ou coletivo2; • Na coluna “Objeto”, inserir o nome do Objeto de Autorização; • Na coluna ”Autorização”, inserir o nome da(s) autorizações desejadas; • Gravar; • Observar STATUS, deve estar ATIVO e GRAVADO Exibição/Modificação;
• Digitar o nome do Perfil; • Clicar ENTER ou GERAR ÁREA TRAB.; • Exibirá a lista contendo a autorização selecionada; • Clicar em MODIF, EXCLUIR,...
Atualizar Perfil do USUÁRIO: • Caminho: R/3� Ferramentas�Administração�Atualização Usuário�Usuário; • Transação SU01; • Digitar o usuário e nterar como modificação; • Navegar até a pasta “Perfis”; • Adicionar o novo perfil à lista do usuário; • Gravar � Código Fonte Modelo.
Report com duas possibilidades de resposta (AUTORIZADO ou Não Autorizado). Contém uma tela de seleção com um parâmetro para CIA ÁREA.
1 Perfil composto por objetos de autorizações. 2 Perfil composto por outros perfis
Academia ABAP - 2004
85
Quando executado, acionará o evento da tela de seleção e efetuará a verificação de autorização do usuário, conforme digitação em tela... REPORT ZZZTESTE. DATA: V_RESULT(20) TYPE C VALUE 'AUTORIZADO'. PARAMETERS P_CARR LIKE SPFLI-CARRID. AT SELECTION-SCREEN ON P_CARR. AUTHORITY-CHECK OBJECT 'S_CARRID' ID 'CARRID' FIELD P_CARR ID 'ACTVT' FIELD '02'. IF SY-SUBRC NE 0. MOVE 'Não Autorizado' TO V_RESULT. ENDIF. START-OF-SELECTION. WRITE V_RESULT.
PERFORMANCE E ERROS
Para identificar alguns erros e problemas de performance, algumas ferramentas disponíveis no SAP devem ser utilizadas. São elas: Runtime Analysis (SE30) Tips and Tricks - Clicando neste botão poderá ser feita comparação entre comandos Select (diferentes tipos). Dando double-click sobre um dos exemplos você passará para outra tela, onde você visualizará a medida do tempo em microsegundos de ambos, servindo de base de comparação. Runtime Analysis - esta parte é utilizad para analisar a performance do programa. Ao final da execução você poderá acessar informações sobre o seu programa (gráficos, acesso a tabelas, etc.). Para tanto clique o pushbutton ANALYSE, que somente aparecerá depois que for informado o nome do programa e/ou transação e clicado execute. OBS: A ferramenta de Runtime Analysis emite um Warning para máquinas com mais de um processador, neste warning adverte para o fato de não ser precisa para máquinas com mais de um processador, porém mesmo assim aconselhamos o uso pois em termos “proporcionais” para se encontrar os “gargalos” do programa a precisão perdida é dispensável. SQL Trace - pode ser utilizada para trilhar a lógica de aplicação e verificar possíveis pontos de correção. Você poderá visualizar os comandos de acesso a banco de dados, obter informações sobre um comando específico, visualizar os índices que estão sendo utilizados.
Academia ABAP - 2004
86
Extended Program Check - é outra facilidade que deve ser empregada visando manter o seu código o mais correto possível. Nesta opção você poderá selecionar os itens que você deseja que sejam checados e o sistema apontará o seu parecer. Para tanto basta clicar os itens e o pushbutton PERFORM CHECK Selecionando uma linha você poderá ver os detalhes, bem como posicionando o cursor em uma linha e clicando o pushbutton DISPLAY ALL CHANGES.
CONVERSÕES DE DADOS E INTERFACES
� BATCH INPUT
O mecanismo de batch input (BDC) é o método tradicionalmente utilizado pelos programas para a transferência de dados. O principal benefício apresentado por este método é a existência de um utilitário que permite o gerenciamento das transferências, usualmente chamadas de sessões de batch input. Essencialmente, uma sessão de batch input é um conjunto de chamadas a transações e dados que são processados por estas transações. Uma sessão simula uma entrada de dados manual através de chamadas a transações que importam dados presentes em um arquivo seqüencial. Cabe destacar que, todas as checagens de consistência realizadas em modo iterativo, isto é em modo usuário, são também implementadas durante uma sessão de batch input.
� CALL TRANSACTION O mecanismo de call transaction (CAT) é um método utilizado pelos programas de transferência de dados, que processa dados a partir de um arquivo seqüencial, chamando transações do SAP através de comandos ABAP. Este método apresenta uma performance superior ao mecanismo de batch input e ainda possui as mesmas facilidades para checagem e validação dos dados durante a importação. O CAT deverá ser utilizado pelos programas de interface para a transferência de dados através de arquivos. Como o método de call transaction não apresenta facilidades para tratamento de erros, neste caso, o mecanismo de batch input deverá ser utilizado.
� DIRECT INPUT
O mecanismo de direct input apresenta a melhor performance dentre os dois anteriores. Essencialmente, este método utiliza um arquivo seqüencial e funções especiais que processam os dados existentes neste arquivo e que atualizam as tabelas do sistema R/3 diretamente. A experiência vivenciada em outros projetos tem mostrado que as funções de direct input apresentam inúmeros bugs que provocam incosistencias nas tabelas do sistema. Este método não deverá ser utilizado para a construção das interfaces. Caso o mecanismo de call transaction não apresente a performance adequada em alguma interface específica, uma solução baseada em direct input poderá ser
Academia ABAP - 2004
87
estudada, demandado, entretanto, testes exaustivos face aos problemas de consistência mencionados.
� Delivered BDC
O mecanismo de delivered BCD representa um conjunto de programas, fornecidos juntamento com o sistema R/3, que objetivam reduzir o esforço envolvido no desenvolvimento de novos programas para a transferência de dados. A experiência tem mostrado que alguns destes programas apresentam ótima performance (usam direct input), porém sofrem dos problemas de consistênciam mencionados. Além disso, os delivered BDC utilizam arquivos de transferência com formato fixo, estabelecido pela SAP. Este mecanismo não deverá ser utilizado para a construção de interfaces, em virtude dos problemas discutidos.
� APPLICATION LINK ENABLE O mecanismo de application link enable (ALE) foi disponibilizado a partir da versão 3.0 do sistema R/3 com o propósito de suportar a construção e operação de aplicações distribuídas. Este mecanismo utiliza métodos de comunicação síncronos e assíncronos para a troca de informações entre processos de dois ou mais sistemas R/3 distintos, fracamente acoplados. Também pode ser usado para extração ou carregamento de dados através de arquivos que utilizam um formato compatível com o tipo de mensagem associada a conexão ALE. Este método será utilizado para as conversões e interfaces com os sistemas SAP R/3 ou mesmo para integração com ferramentas de terceiros que possuam suporte a interface ALE. Este mecanismo será utiliza para construção de interfaces e conversões, apresentando excelente performance.
� ELETRONIC DATA INTERCHANGE
O mecanismo de eletronic date interchange ou EDI permite a troca de informações entre duas aplicações, através da transmissão eletrônica de mensagens que utilizam uma estrutura e formato (IDoc type), estabelecidos pela SAP. Este mecanismo será utilizado para interfacear o sistema R/3 com ferramentas de terceiros que possuam suporte a interface EDI.
� REMOTE FUNCTION CALL
O mecanismo de remote function call ou RFC permite que uma aplicação execute uma chamada a uma função pertencente a uma aplicação que está executando em um sistema diferente do sistema chamador da função. No contexto do SAP, as RFCs permitem a construção de interfaces entre dois sistemas SAP (R/3 ou R/2) ou entre um sistema SAP e um não-SAP. Este mecanismo deverá ser considerado para a construção de interfaces on-line.
� BUSINESS APPLICATION PROGRAMMING INTERFACE (BAPI)
As BAPIs representam uma interface padronizada de programação que possibilita as aplicações manipularem processos de negócio e dados do
Academia ABAP - 2004
88
sistema R/3. As BAPIs são definidas no repositório de objetos do R/3 como métodos (visão orientada objeto) que realizam transações de negócio específicas. Exemplificando, o sistema R/3 possui uma BAPI associada a criação de pedidos de venda. Este mecanismo deverá ser considerado paras as interfaces e conversões.
RELATÓRIOS E FORMULÁRIOS
� ABAP QUERY
É uma ferramenta que permite realizar extração de dados do SAP para emissão de listas, formulários sem precisar linha de código. Auxilia o usuário final a criar listas e levantamentos estatísticos, coletando informações presentes em diferentes tabelas do sistema R/3. Dispensa quaisquer conhecimentos de programação ABAP/4.
� REPORT WRITER e REPORT PAINTER Ferramentas que auxiliam o usuário final na construção de relatórios complexos. Também dispensa conhecimentos de programação ABAP/4 mas demanda treinamento específico nestas ferramentas.
� INFORMATION SYSTEM
Ferramenta para geração de relatórios que permite ao usuário final criar listas com layouts específicos e fórmulas (Análise Flexível), apresentar resultados através de gráficos (Análise Standard), entre outras facilidades. Outras informações podem ser encontradas na documentação do sistema R/3 no tópico LIS - Logistics Information System.
� SAPScript
Mecanismo para construção de formulários de impressão com layouts específicos. Também demanda conhecimentos em programação ABAP/4 e treinamento em SAPscript.
Os mecanismos de ABAP Query, Report Writer e Report Painter, que possibilitam ao usuário final gerar relatórios on-line e on-demand devem ser considerados criteriosamente, pois a utilização destas facilidades pode provocar impactos na performance do sistema produtivo. Este tópico também deve ser considerado do ponto de vista dos perfis de segurança, uma vez que a utilização dos mecanismos citados deve se restringir a poucos usuários, selecionados pela equipe Funcional.
A Equipe de Tecnologia será responsável pela construção de relatórios e formulários utilizando programação ABAP/4 e SAPscript. Os demais
Academia ABAP - 2004
89
mecanismos discutidos serão utilizados pelas Equipes Funcionais, sem o suporte da Equipe de Tecnologia.
ENHANCEMENTS 1) Para que um field-exit funcione é necessário que o profile parameter
abap/fieldexit esteja com o valor ‘YES’. Para modificar os valores de um profile parameter utiliza-se a transação RZ11.
2) Enhancements para pedido de vendas – userexit
SPRO - Vendas e distribuição Adaptação do sistema User exits Diversos
1) Quando o frontend sair do ar, para recuperar o que estava fazendo, entrar no
logon do SAP, digitar o user e a senha, não teclar enter, opção de menu Usuário / Aceitar sessão. Caso o mesmo usuário estiver mais de uma vez na mesma instância isto não funciona.
2) Ativar o screen painter gráfico:
Para que o screen painter gráfico funcione na estação são necessários os arquivos: GNEUX.exe / GNETX.exe / EUMFCDLL.dll
3) Transporte de textos standard (texto sapscript)
Para transportar textos standard devemos criar uma request manual e no editor inserir as entradas: R3TR TEXT <objeto>,<nome do texto>,ST (ID),S (Idioma) Exemplo: PgmID Obj Obj.name R3TR TEXT TEXT,WHIRPOOL-2,ST,E R3TR TEXT TEXT,LOGO_57_MM ,ST,E R3TR TEXT TEXT,LOGO_57_MM ,ST,P
COMANDOS UTÉIS
� MOVE-CORRESPONDING
Quando registros têm a mesma estrutura, é mais eficiente utilizar o comando MOVE do que o comando MOVE-CORRESPONDING. Exemplo: MOVE BSEG TO *BSEG
� SUM, AVG, MIN e MAX
Academia ABAP - 2004
90
Procure usar as funções de cálculo do SELECT ao invés de usar lógicas para obter os resultados acima.
� UPDATE TASK
Sempre que possível utilize a atualização via UPDATE TASK para programas “dialog”
Comandos
� Para mandar um relatório direto para a impressora
new-page print on no dialog keep in spool ‘X’ immediately ‘X’ destination ‘ZP05’
copies quantidade de cópias � Para concatenar variáveis em um único parâmetro utilizar o &:
Perform f_teste using ‘LIXO1’ & ‘ LIXO3’. Form f_teste using char.
char possui ‘LIXO1 LIXO3’. Endform.
COMENTÁRIOS
� ÍNDICE
Cada índice criado diminui a performance dos inserts e dos updates nas tabelas. No geral, tabelas onde são feitos muitos inserts e updates, deverão ter poucos índices. Da mesma forma, tabelas onde há muitos selects, poderão ter mais índices. Uma média de 3 índices por tabela é aceitável.
� CÓDIGO MORTO
Evite a existência de código morto ao longo dos programas. Remova definições de campos que nunca serão usados e códigos que nunca serão executados.
DICAS E TRUQUES
� Conversões
1) A correspondência entre CATEGORIA DE DADOS e TIPO DE DADOS se encontra no help da cláusula INTO do comando SELECT.
2) Para converter uma data no formato interno (AAAAMMDD) para o formato
que o usuário está trabalhando utilizar: WRITE SY-DATUM TO V_DATA.
Academia ABAP - 2004
91
Onde o SY-DATUM pode ser qualquer variável tipo data e a V_DATA deve ser uma variável caractere de 10 posições. Ou utilizar a função:
Call Function 'PERIOD_AND_DATE_CONVERT_OUTPUT' Exporting Internal_Date = variável like sy-datum Internal_Period = ‘1’ Importing External_Date = variável char(10) .
3) Para converter um campo numérico para um alfa retirando pontos e vírgulas,
alinhando à direita, arredondando, desconsiderando o sinal e preenchendo com zeros à esquerda usar:
WRITE: <campo_num> TO <campo_char> DECIMALS 3 USING EDIT MASK ‘RR______’ (a quantidade de traços deve ser igual a quantidade de casas do campo_char) TRANSLATE <campo_char> USING ‘0’
Para considerar o sinal é necessário acrescer um V na última casa excluindo um dos traços 'RR_____V'. Porém quando o sinal for positivo a posição ficará
em branco.
4) Para converter uma quantidade em outra unidade de medida utilizar a função UNIT_CONVERSION_SIMPLE
5) Para converter o mês por extenso utilizar a tabela transparente T247
� Tabelas internas e dicionário
1) Para eliminar entradas repetidas de uma tabela interna usar:
SORT <ITAB> BY F1 F2 F3... DELETE ADJACENT DUPLICATES FROM <ITAB> COMPARING F1 F2 F3...
2) Alguns campos de tabela possuem formatos diferentes de exibição
(OUTPUT) e gravação (INPUT). Para converter esses valores, ou para saber se o campo possui essa característica, verificar se o domínio do campo possui um valor no campo Conversion exit. Por exemplo, o campo LIKP-VBELN possui em seu domínio o Conversion exit ALPHA.
Isso indica que existem duas funções standard para converter o valor desse campo:
Academia ABAP - 2004
92
CONVERSION_EXIT_ALPHA_INPUT – converte o campo para o formato de gravação, neste caso, alinhado à direita e preenchido com zeros à esquerda.
CONVERSION_EXIT_ALPHA_OUTPUT – converte o campo para o formato de exibição, neste caso, alinhado à esquerda sem zeros à direita.
3) Para transportar somente o conteúdo de uma tabela transparente, criar
uma change request, e no EDITOR inserir a entrada: PgmID = R3TR , Obj = TABU e no campo Obj.name colocar o nome da tabela transparente. Depois de inserido a linha dar um duplo clique para preenchimento da chave. Para transportar todos os registros inserir apenas um asterisco no primeiro campo genérico.
4) Para encontrar os textos descritivos de uma informação geralmente há
uma tabela de nome semelhante terminada em T. Como por exemplo, a tabela TVKGR - Grupo de Vendedores possui o nome dos vendedores na tabela TVGRT. Ao fazer um trace SQL na transação SE16 na tabela TVKGR por exemplo, é possivel achar o relacionamento.
5) O limite de uma tabela interna são 4.394.608 registros.
6) Cardinalidade das chaves externas do dicionário
Lado Esquerdo: 1 = Para cada registro da ChvExt, existe exatamente um registro na “Check Table”
C = Não precisa existir o registro, Pode ser Branco Lado Direito: 1 = Existe somente um registro para cada valor da “Check Table” C = No máximo um registro dependente para cada registro da “Check Table” N = Tem pelo menos um registro dependente para cada registro da “Check Table”. CN = Qualquer número de registros para cada registro da “Check Table”
� Como buscar resolução do vídeo
case sy-srows
when 19. 640x480
when 27. 800x600
when 37. 1024x768
endcase.
� Gravar objetos locais para request Transação SE03, modificar entradas catálogo objetos
Academia ABAP - 2004
93
� Função que cria match-code tipo estrutura de árvore para dados de catálogo
CALL FUNCTION 'QPK1_GP_CODE_SELECTION'
EXPORTING
* i_katalogart = tq80-mfkat
i_katalogart = 'V'
I_CODEGRUPPE = 'SSE-BPOR'
* I_CODE = ysap01d-code
I_CODE = '*'
i_sprache = sy-langu
i_winx1 = 10
i_winx2 = 60
i_winy1 = 5
i_winy2 = 25
i_display_mode = ' '
i_return_if_one = ' '
i_pickup_mode = 'X'
TABLES
t_qpk1cdtab = iqpk1cd
t_codegrptab = g_codegrptab
EXCEPTIONS
no_match_in_range = 1
no_user_selection = 2
no_authorization = 3
no_selection_specified = 4
object_locked = 5
lock_error = 6
object_missing = 7
OTHERS = 8.
ALTERAÇÃO DE BARRA DE STATUS EM LIST VIEW
Copiar a barra de status “Standart” do grupo de funções SALV e altera-la a seu bel-prazer.
Na função do list-view, colocar parâmetro “i_callback_pf_status_set” e criar a form
'F_SET_STATUS' call function 'REUSE_ALV_LIST_DISPLAY'
exporting
i_callback_program = g_repid
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP_OF_PAGE'
i_callback_pf_status_set = 'F_SET_STATUS'
it_fieldcat = gt_fieldcat
types: slis_t_extab type slis_extab occurs 1. form f_set_status using extab type slis_t_extab. set pf-status 'S100'. endform.
Academia ABAP - 2004
94
LISTA INTERATIVA – LER UM CHECKBOX MARCADO
EM UMA LISTA REPORT
Durante a impressão: LOOP AT IT_ZFIT0014.
WRITE: /1 SY-VLINE,
2(9) '*' COLOR COL_KEY,
6 IT_ZFIT0014-LIB_COMP AS CHECKBOX,
(…)
ENDLOOP.
No AT USER-COMMAND.(por exemplo) * Testa de o checkbox foi marcado DO.
ADD 1 TO VI_CONT.
READ LINE VI_CONT.
IF sy-lisel+5(1) = 'X' AND sy-lisel+16(1) = 'X'.
(…)
CARACTERÍSTICAS HERDADAS
Algumas características associadas a um objeto podem ser herdadas de uma classe superior. Sempre que utilizar a função de classificação de características, assinalar com X o parâmetro inherited_char. É a garantia de que as características herdadas serão selecionadas.
call function 'CLAF_CLASSIFICATION_OF_OBJECTS' exporting class = t_claf-class classtype = t_claf-klart clint = t_claf-clint features = 'X' language = sy-langu object = t_claf-objek inherited_char = 'X'
BANCO DE DADOS LÓGICO Transação - SE36 Programas que utilizam. Ex.: J_1BLB01 utiliza o banco de dados lógico J5F Para FCA, copiei o banco de dados J5F para ZJ6F e o programa J_1BLB01 para ZJ_1BLB01 Na SE38, alterei o atributo do programa “Banco de dados lógico”
Academia ABAP - 2004
95
Ajuda de pesquisa...
Visão condição de seleção...
Academia ABAP - 2004
96
Normalmente quando temos que mapear uma table control em um BI ou call
transaction, temos problema com a quantidade de linhas visíveis para saber quando fazer um
page down ou chamar um comando para inserir mais registros. Para resolver esse problema, existe uma conta que pode ser feita com a variável
sy-srows. Primeiro é necessário descobrir quantas linhas da tela não pertencem a table
control. Para isso, entre na transação e conte o número de linhas que estão visíveis. De
posse desse número, execute o debug e veja o valor do sy-srows. Subtraia o valor do sy-srows do número de linhas visíveis que voce contou. Esse resultado, por exemplo, pode ter sido 8. De posso desse número, é só incluir uma formula no programa: v_limite = sy-srows - 8. O v_limite vai ter sempre a quantidade de linhas visíveis da table control
independente da resolução do monitor.
Academia ABAP - 2004
97
EXEMPLOS
� Exemplo de matchcode dinâmico dependendo de outro match code Ver programa YSRCS_REDEFINICAO_MODAL
� Exemplo criação de JOB
SAPMZPP119
� Exemplo envio SAPOFFICE ZPPI0136
� Exemplo do uso de field-symbol Ver programa EXEMPLO_FIELD_SYMBOL � Relatório chamando job
Ver programa YSRSD_RELATORIO_DAS_DESCARGAS
� Enviar e-mail através do R/3 Ver programa YSRMM_MATERIAIS_ROMPIMENTO_EST.TXT
� Documentações na Internet: http://ifr.sap.com/
Academia ABAP - 2004
98
Recommended