98
ANOTAÇÕES DA ACADEMIA ABAP 2004

Apostila Academia Abap

Embed Size (px)

Citation preview

Page 1: Apostila Academia Abap

ANOTAÇÕES DA

ACADEMIA ABAP

2004

Page 2: Apostila Academia Abap

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

Page 3: Apostila Academia Abap

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

Page 4: Apostila Academia Abap

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

Page 5: Apostila Academia Abap

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

Page 6: Apostila Academia Abap

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

Page 7: Apostila Academia Abap

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

Page 8: Apostila Academia Abap

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

Page 9: Apostila Academia Abap

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

Page 10: Apostila Academia Abap

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

Page 11: Apostila Academia Abap

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

Page 12: Apostila Academia Abap

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:

Page 13: Apostila Academia Abap

Academia ABAP - 2004

13

Page 14: Apostila Academia Abap

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

Page 15: Apostila Academia Abap

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

Page 16: Apostila Academia Abap

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.

Page 17: Apostila Academia Abap

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.

Page 18: Apostila Academia Abap

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.

Page 19: Apostila Academia Abap

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.

Page 20: Apostila Academia Abap

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.

Page 21: Apostila Academia Abap

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”.

Page 22: Apostila Academia Abap

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 .

Page 23: Apostila Academia Abap

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:

Page 24: Apostila Academia Abap

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

Page 25: Apostila Academia Abap

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.

Page 26: Apostila Academia Abap

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.

Page 27: Apostila Academia Abap

Academia ABAP - 2004

27

MENSAGEM

� Classe de mensagem:

Ir a SE91 e ....

Page 28: Apostila Academia Abap

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;

Page 29: Apostila Academia Abap

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.

Page 30: Apostila Academia Abap

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’.

Page 31: Apostila Academia Abap

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.

Page 32: Apostila Academia Abap

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.

Page 33: Apostila Academia Abap

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

Page 34: Apostila Academia Abap

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.

Page 35: Apostila Academia Abap

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

Page 36: Apostila Academia Abap

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.

Page 37: Apostila Academia Abap

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:

Page 38: Apostila Academia Abap

Academia ABAP - 2004

38

Page 39: Apostila Academia Abap

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

Page 40: Apostila Academia Abap

Academia ABAP - 2004

40

Page 41: Apostila Academia Abap

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

Page 42: Apostila Academia Abap

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;

Page 43: Apostila Academia Abap

Academia ABAP - 2004

43

Page 44: Apostila Academia Abap

Academia ABAP - 2004

44

Salvar e ativar.

Page 45: Apostila Academia Abap

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.

Page 46: Apostila Academia Abap

Academia ABAP - 2004

46

Page 47: Apostila Academia Abap

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

Page 48: Apostila Academia Abap

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’.

Page 49: Apostila Academia Abap

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).

Page 50: Apostila Academia Abap

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.

Page 51: Apostila Academia Abap

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 = ' '

Page 52: Apostila Academia Abap

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)

Page 53: Apostila Academia Abap

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

Page 54: Apostila Academia Abap

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.

Page 55: Apostila Academia Abap

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

Page 56: Apostila Academia Abap

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...)

Page 57: Apostila Academia Abap

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.

Page 58: Apostila Academia Abap

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

Page 59: Apostila Academia Abap

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.

Page 60: Apostila Academia Abap

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.

Page 61: Apostila Academia Abap

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.

Page 62: Apostila Academia Abap

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.

Page 63: Apostila Academia Abap

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-’.

Page 64: Apostila Academia Abap

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.

Page 65: Apostila Academia Abap

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.

Page 66: Apostila Academia Abap

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.

Page 67: Apostila Academia Abap

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

Page 68: Apostila Academia Abap

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

Page 69: Apostila Academia Abap

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

Page 70: Apostila Academia Abap

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.

Page 71: Apostila Academia Abap

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.

Page 72: Apostila Academia Abap

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

Page 73: Apostila Academia Abap

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.

Page 74: Apostila Academia Abap

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”

Page 75: Apostila Academia Abap

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

Page 76: Apostila Academia Abap

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

Page 77: Apostila Academia Abap

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.

Page 78: Apostila Academia Abap

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.

Page 79: Apostila Academia Abap

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

Page 80: Apostila Academia Abap

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

Page 81: Apostila Academia Abap

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

Page 82: Apostila Academia Abap

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

Page 83: Apostila Academia Abap

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;

Page 84: Apostila Academia Abap

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

Page 85: Apostila Academia Abap

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.

Page 86: Apostila Academia Abap

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

Page 87: Apostila Academia Abap

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

Page 88: Apostila Academia Abap

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

Page 89: Apostila Academia Abap

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

Page 90: Apostila Academia Abap

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.

Page 91: Apostila Academia Abap

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:

Page 92: Apostila Academia Abap

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

Page 93: Apostila Academia Abap

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.

Page 94: Apostila Academia Abap

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”

Page 95: Apostila Academia Abap

Academia ABAP - 2004

95

Ajuda de pesquisa...

Visão condição de seleção...

Page 96: Apostila Academia Abap

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.

Page 97: Apostila Academia Abap

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/

Page 98: Apostila Academia Abap

Academia ABAP - 2004

98