Escolar Documentos
Profissional Documentos
Cultura Documentos
ABAP / SAP R3
Cronograma
• Introdução SAP R/3
• Dicionário de Dados*
• Programação
• Relatórios
• ALV*
• On Line*
• Batch-Input/Call Transaction*
• SapScript*
• Exits
* exercícios
Click to edit Master title style
www.softtek.com.br 3
3
Objetivos
Soluções integradas
SD
Vendas e
FI
Contabilidade
Funcionalidades
Distribuição Financeira sofisticadas
MM CO
Gerenc.de Controladoria
Materiais
PP AM
R/3
Plan. da Ativos. Fixos
Arquitetura Produção
Desenhado
Cliente/Servidor para todo
tipo de negócios
QM
Controle de
Cliente / Servidor PS
ABAP/4
Gerenc. de
Sistemas Qualidade
Projetos
abertos OC
PM
Manutenção Comunicação
Multinacional
da Planta
HR IS
Recursos Solucões
Humanos Setoriais
Modelo de dados
empresariais
Sistema R/3
Sales & Distribution : A solução completa para o
gerenciamento integrado de todas tarefas para vendas,
faturamento e expedição.
Materials Management : O processo completo de compras,
com suporte integrado de resultados e planejamento de
produção.
Production Planning : O sistema de PCP ajustável para
todos os tipos de produção com suporte integrado de
resultados e do gerenciamento de compras.
Quality Management : O sistema para o controle da
qualidade assegurada em todas as áreas da cadeia
logística.
Plant Maintenance : A solução independente de indústria
para a administração da manutenção de sistemas
produtivos.
Sistema R/3
Organização de
compras 1000 2000 3000
WM
Armazém 0001 0002 0088
Módulo FI e suas funções
FI-GL
Contabilidade Geral
FI-AP
Contas a Pagar
FI-AR
Contas a Receber
FI-FC
Controlling Financeiro
FI-FM
Gestão Orçamentária
FI-LC
Consolidação
FI-FI
Ativos Financeiros
Contabilidade Empresarial
CCA
Contab.
JOB
Centros Ordens
MM FI de
Fornecedores Custos
Custos
Consolidação PA
MM Materiais Ledgers Análise de
Rentabilidade
Recebto. Antecipações
Promissórias
Pagtos.
Fatura Auditoría
parciais Recebto.
Compensação
Gestão e prevenção de
tesouraria Relatórios Pagtos
Correspondência
Previsão de Cheque
Cálculo de cobrança e pagto.
interesses Registro de moeda
Transferência
Rankings
Cartas a forn.
Compensação
Confirmação
de saldos Letras
Pagar
Gestão de Materiais - Processo de Abastecimento
Planejamento
Pedidos Fatura de necesidades
Planejamento
Verificação de faturas
Fornecedor
Contrato marco
Gestão de
Materiais Associação de fonte aquisição
Entrada de mercadoria
e gestão de estoques
Gestão de Pedidos
Logística - R/3
PP
PP PM
PM
Plano
Plano de
de Vendas
Vendas
Planej.
Planej. Paradas
Paradas
Cliente Planej, Produção
Manutenção
Manutenção
SD
SD
MRP
Vendas
Vendas QM
QM
Distribuição
Distribuição
Faturamento
Faturamento Planej. Capacidade
Planej.
Planej. Inspeção
Inspeção
Gestão
Gestão de inspeção
de inspeção
Controle
Provedor MM
MM de produção
CAD CAM CAP CAQ PP-
PP-
Compras SFC
SFC
Compras
Gestão
Gestão de
de Estoques
Estoques
Verif. Facturas
Verif. Facturas Controle
Controle em
em planta
planta
Custo de Produtos PDC
PDC
FI Contabil.
FI CO AM Ativos
CO Contabilid. AM HR Recursos
HR
Financeira de Custos Fixos Humanos
Recursos Humanos
FI / CO
Contabilidade Financeira / Analítica
Organizacão de
Rec. Humanos
Planejamento de
Datos Mestres
HR
Rec. Humanos
de Pessoal
Control de custos
de Rec. Humanos
Relatórios Gestão
estatísticas de Tempos
PP PM
Controle e planejamento Manutenção
de produção
ABAP ?
ABAP
A dvanced
B usiness
A pplication
P rogramming
/
4
Click to edit Master title style
Arquitetura
www.softtek.com.br 21
21
Arquitetura em 3 camadas
Presentation Server
Application Server
Banco de Dados
R/3
Logon Balancing
Banco de Dados
R/3
Servidores
Mandante
003
Servidor
DVL
Mandante
120
Request’s
Ambiente de desenvolvimento: client 200
Request
Task
Transporte
Projetos
www.softtek.com.br 28
28
Fases
• Levantamento - BC
• Modelagem dos processos atuais
• Como deverão ser os processos - BC
• Customização
• Desenvolvimentos - BC
• Validação - BC
• Testes individuais/integrados - BC
• Produção - BC
• Melhorias - BC
Click to edit Master title style
Navegação
www.softtek.com.br 30
30
Click to edit Master title style
DICIONÁRIO DE DADOS
www.softtek.com.br 31
31
Objetivos
• O que é dicionário de dados
• Elementos do dicionário de dados
• Como utilizar o dicionário de dados
• Levantamento de informações no R/3
Dicionário de Dados
• Integração
• Gerenciamento de Dados
– Atribuição
– Descrição e Significado
• Ativação dos Dados
Banco de Dados
R/3
Tabela
Tabela
DICIONÁRIO ABAP/4
DEFINIÇÃO LÓGICA DA TABELA
Tabela
Campo 1 Campo 2 Campo 3 Campo 4
BANCO DE DADOS
DEFINIÇÃO FÍSICA DA TABELA
Dicionário ABAP/4
Tabela 1
Campo 1 Campo 2 Campo 3 Campo 4 Campo 5
“DB UTILITY”
relacional
Banco de Dados
R/3
Controle de
Interpretador Interfaces Módulos
Diálogo
AMBIENTE DE EXECUÇÃO DA APLICAÇÃO
Click to edit Master title style
Tabelas
www.softtek.com.br 38
38
Elemento de Dados e Domínios
Banco de
Dados R/3 Tabela
Campo
Utiliza
Utiliza
Domínio
Foreign Key
Table T1
Field 1 Field 2 Field 3 Field 4
Foreign Key Field
Primary Key
Primary Key
Estruturas
Visões
www.softtek.com.br 43
43
Visões
View
Banco de
Dados R/3
Trabalhando com a SE11
Click to edit Master title style
Levantamento de Informações
www.softtek.com.br 46
46
Funções
• F1 - Ajuda (Help)
• F9 - Informação técnica
Exercício
1. Criar uma tabela Z no dicionário de dados, com o nome ZTESTE_001.
Layout :
- DOCUMENTO chave numérico 10
- ITEM chave numérico 05
- TEXTO alfa 40
- MATERIAL numérico 06
- QUANTIDADE numérico 04
- PRECO_UNITARIO numérico 15(02)
- PRECO_TOTAL numérico 15(02)
Tabelas internas
Header Line
Obs.: se não for atribuído tipo a variável, esta será definida como
caracter, automáticamente.
Tela de seleção
Tela de seleção
-IF… ENDIF.
Este comando permite que se desvie o fluxo do programa, dependendo da condição. Para
encerrar usa-se: ENDIF, pode-se ainda ELSEIF e ELSE. O programa só irá executar a condição
correta.
IF <condição> .
…
ENDIF.
IF <condição> .
…
ELSE.
…
ENDIF.
IF <condição1> .
…
ELSEIF <condição2> .
...
ELSEIF <condição3> .
...
ENDIF.
-LOOP …ENDLOOP.
LOOP AT <itab>.
…
…
…
ENDLOOP.
-CASE …ENDCASE.
É um controle baseado em índice de objeto de dados. Este controle deve ser concluído
com ENDCASE.
CASE <f>.
WHEN <f 01> [OR <f 02> OR ...].
...
WHEN <f 03>.[OR <f 04> OR ...]
...
WHEN <f 05> [OR <f 06> OR ...].
...
WHEN ...
...
WHEN OTHERS.
...
ENDCASE.
-DO …ENDDO.
Repete o processamento que está dentro de DO e ENDDO.
Terminando com os comandos EXIT, STOP e REJECT.
Pode usar CONTINUE, para terminar o passo do DO e continuar o passo seguinte.
Exemplo1:
DO 10 TIMES.
IF VBAK-VBELN eq VBAK-VBELN.
W_VBELN = VBAK-VBELN.
ENDIF.
ENDDO.
Exemplo2:
DO.
IF VBAK-VBELN is INITIAL.
EXIT.
ELSEIF VBAK-VBELN in P_VBELN.
CONTINUE.
ENDIF.
ENDDO.
Comandos básicos – WHILE / CHECK
WHILE
-WHILE …ENDWHILE.
Repete o processamento que está dentro de WHILE e ENDWHILE, se a expressão é verdadeira.
A cada passagem a expressão é verificada.
Pode usar CONTINUE , para terminar o passo do WHILE e continuar o passo seguinte.
WHILE expressão.
…
…
ENDWHILE.
Exemplo:
WHILE W_WRITE <= 10.
WRITE: / TEXT-001.
W_WRITE = W_WRITE + 1.
ENDWHILE.
CHECK
- CHECK
Para encerrar uma sub-rotina usa-se, frequentemente, ENDFORM.
Podemos terminar antes, usando os comandos EXIT e CHECK.
Se a expressão lógica estabelecida no CHECK for falsa, a sub-rotina será encerrada.
Se a expressão CHECK for aplicada a um LOOP, encerra-se o LOOP.
CHECK SY-SUBRC = 0.
Comandos básicos – MOVE
MOVE
-MOVE
<itab2> = <itab1>
-MOVE-CORRESPONDING
-WRITE
É comum os campos saírem justificados a esquerda. Os campos numéricos são alinhados a
direita.
Exemplos:
WRITE <f>.
WRITE: /TEXT-001, TEXT-002, TEXT-003+2(8).
WRITE: /002 TEXT-004.
Opções:
... NO-ZERO.
... NO-SIGN.
... DD/MM/YY.
... MM/DD/YY.
... DD/MM/YYYY.
... MM/DD/YYYY.
... DDMMYY.
... CURRENCY w.
... DECIMALS d.
... ROUND R.
... UNIT u.
... USING EDIT MASK mask.
... UNDER g.
... NO-GAP.
... LEFT-JUSTIFIED.
... CENTERED.
... RIGHT-JUSTIFIED.
Comandos básicos – CLEAR/SKIP/ULINE
CLEAR
-CLEAR
Reseta o valor da variável. Também aplica-se a estruturas e tabelas, limpando o header line,
mas não interferindo nos dados – no caso de tabelas.
Se a variável for alfanumérica, volta a ser branco. Se for numérica, retorna a zero.
Exemplos:
CLEAR <var1>.
CLEAR <t_tab1>. “limpa o header line da tabela
SKIP
-SKIP n
Realiza o salto de linhas. A variável n identifica a quantidade de linhas a ser pulada.
Exemplos:
SKIP. “Irá pular 1 linha – mesmo efeito que SKIP 1
SKIP 10. “Irá pular 10 linhas
ULINE
-ULINE
Imprime uma linha corrente.
Exemplos:
ULINE. “Imprime linha corrente da largura da página
ULINE /35(50). “Linha começará na posição 35 e terá comprimento
de 50 bytes
Comandos básicos – Comentários
COMENTÄRIOS
“ -> a aspas dupla, na mesma linha do código, serve para comentar dali para frente.
Exemplos:
* IF t001-text IS INITIAL.
* ADD 1 TO w_number.
* ENDIF.
IF t001-text IS INITIAL.
continue. “Comando para sair do Loop atual
ENDIF.
Comandos básicos – FORM/PERFORM
FORM
-FORM … ENDFORM.
Define uma subrotina dentro do programa ABAP. Pode ser executada a qualquer momento, dentro
do programa.
Exemplos:
FORM f_leitura_bseg.
Instruções.
EDFORM.
Opções:
FORM <nome_form> USING p_variavel_referencia
CHANGING p_variavel_valor
TABLES p_tabela.
Instruções
ENDFORM.
PERFORM
-PERFORM
Executa chamadas de subrotinas do programa ABAP.
Exemplos:
PERFORM f_leitura_bseg.
Opções:
PERFORM <nome_form> USING v_variavel_referencia CHANGING v_variavel_valor
TABLES t_tabela.
Tabela interna – Limpeza e Inicialização
CLEAR
-CLEAR
Limpa/Inicializa a header line da tabela interna.
Exemplo:
CLEAR t_tabela01.
REFRESH
-REFRESH
Este comando limpa os dados da tabela interna. Não libera a memória carregada.
Exemplo:
REFRESH t_tabela01.
FREE
-FREE
Este comando apaga os dados da tabela interna, liberando a memória onde ela estava
carregada.
Exemplo:
FREE t_tabela01.
Tabela interna – READ / Leitura
READ
-READ…
Realiza a leitura de dados de uma tabela interna.
Exemplos:
READ TABLE table01 WITH KEY nome = w_nome. “Busca por campo específico
SY-SUBRC
-SY-SUBRC
É um campo de sistema, que retorna o resultado do último comando processado.
Se estiver abaixo de um READ, retorna a condição de processamento do mesmo. Se SY-SUBRC = 0,
Significa que foi processado corretamente. Diferente disso, ERRO.
Exemplos:
READ TABLE table WITH KEY nome = w_nome.
IF sy-subrc <> 0.
WRITE: /001 ‘Erro na leitura do arquivo…’.
ENDIF.
Tabela interna – APPEND / Gravando
APPEND
-APPEND
Para incluir novos registros na tabela interna.
APPEND <table01>.
Exemplos:
CLEAR table01. “Limpa a header line da tabela
table01-nome = ‘Jose’.
table01-cracha = v_cracha.
table01-situacao = ‘Ativo’.
APPEND table01. “Insere o registro na tabela table01
APPEND I_BKPF
-MODIFY
Comando para alterar registro de uma tabela interna.
MODIFY <itab>.
Exemplos:
MODIFY t_tabela01.
Opções:
MODIFY t_tabela02 INDEX sy-index.
DELETE
-DELETE
Comando para deleção de registro de uma tabela interna.
DELETE <itab>.
Exemplos:
DELETE t_tabela01.
Opções:
DELETE t_tabela02 INDEX sy-index.
DELETE t_tabela03 WHERE cracha = 3005.
DELETE t_tabela04 FROM 3 to 5.
Tabela interna – COLLECT
COLLECT
-COLLECT <itab01>.
Este comando também insere registros na tabela interna. A particularidade é que, ele analisa
os campos alfanuméricos. Estes sendo iguais, ele realiza a soma dos campos numéricos.
NAME PRICE
LH 100000
AR 50000
FL 10000000
LH 50000 150000
-SORT
Comando utilizado para se sortear a tabela interna.
SORT <itab>.
Exemplos:
SORT t_tabela01.
Opções:
SORT t_tabela02 BY campo2 campo3.
SORT t_tabela03 BY campo4 ASCENDING campo5 DESCENDING.
DESCRIBE
-DESCRIBE
Comando para gerar informações sobre determinada tabela interna.
Exemplos:
DESCRIBE TABLE t_tabela01 LINES LINHAS “Nº linhas preenchidas
OCCURS OCORRENCIA. “Nº ocorrências na def. da tabela
-SELECT
Comando SQL utilizado para leitura das informações de uma tabela do banco de dados SAP.
Possui diversas variações.
Obs.: O comando SELECT em si, pede um ENDSELECT para fechá-lo. Em algumas variações isto não
se faz necessário.
Esta variação não é um modo eficiente para acesso ao banco. Não indicado, mesmo com
inclusão da clausula WHERE.
-Select inserindo dados em uma tabela, usando como base os dados de outra já preenchida.
Obs.1: Se ao buscar os registros com FOR ALL ENTRIES, e dois registros forem iguais, o
sistema só irá trazer um. Portanto CUIDADO com este tipode select. Sempre buscar um
campo que garanta a unicidade dos dados.
Obs.2: Sempre verificar se a tabela interna, de referência< tabela interna1>, contêm dados
e os mesmo estejam ordenados.
Tabela DB SAP - SELECT
-Select para buscar apenas um registro específico.
Obs.: Para o uso do SELECT SINGLE, deve-se utilizar a chave completa da tabela. Se não
possuir as chaves todas, utilizar a opção UP TO 1 ROWS.
-INSERT
1.Insere registros na tabela do dicionário.
Exemplos:
TABLES: SPFLI. Grava os valores da estrutura WA
na tabela SPFLI.
DATA: WA LIKE SPFLI.
WA-CARRID = 'LH'.
WA-CITYFROM = 'WASHINGTON'.
…
INSERT INTO SPFLI VALUES WA.
Exemplos:
TABLES: SPFLI.
ITAB-CARRID = 'UA'.
ITAB-CONNID = '0011'.
APPEND ITAB.
ITAB-CARRID = 'LH'.
ITAB-CONNID = '1245'.
APPEND ITAB.
ITAB-CARRID = 'AA'.
ITAB-CONNID = '4574'.
APPEND ITAB.
-UPDATE
1.Modifica registros na tabela do dicionário. Um registro por vez.
Exemplos:
TABLES: SPFLI.
Exemplos:
TABLES: SFLIGHT.
UPDATE SFLIGHT SET PLANETYPE = 'A310'
FLPRICE = FLPRICE - '10000'
WHERE CARRID = 'LH'.
Exemplos:
TABLES: SPFLI.
-MODIFY
Este comando também altera registros na tabela do dicionário, mas contém uma diferença
importante. Com este comando, se o registro a ser alterado não for encontrado, ele é
inserido na tabela do dicionário.
Segue o mesmo esquema do comando UPDATE.
Exemplos:
TABLES: SPFLI. TABLES: SPFLI.
DATA: WA LIKE SPFLI. DATA ITAB LIKE SPFLI OCCURS 10 WITH HEADER LINE.
-DELETE
1.Deleta registros da tabela do dicionário.
Exemplos:
TABLES: SPFLI.
Exemplos:
TABLES: SFLIGHT.
Exemplos:
TABLES SPFLI.
ITAB-CARRID = 'UA'.
ITAB-CONNID = '0011'.
APPEND ITAB.
ITAB-CARRID = 'LH'.
ITAB-CONNID = '1245'.
APPEND ITAB. Os registros são deletados baseando-se
nos campos chave.
ITAB-CARRID = 'AA'.
ITAB-CONNID = '4574'.
APPEND ITAB.
ROLLBACK WORK
CONDENSE
Utilizado para eliminar os espaços em branco de uma string.
TRANSLATE
Utilizado para transformar os caracteres em maiúsculos ou minúsculos. E também para
converter uma string a partir de outra.
WRITE / STRING1.
Exemplos:
DATA: T(10) VALUE 'abcdefghij',
STRING LIKE T,
STR1(4) VALUE 'cdef',
STR2(4) VALUE 'klmn',
STR3(2) VALUE 'kl',
STR4(6) VALUE 'klmnop'.
STRING = T.
REPLACE STR1 WITH STR2 INTO STRING.
WRITE / STRING.
STRING = T.
REPLACE STR1 WITH STR3 INTO STRING.
WRITE / STRING.
STRING = T.
Obs.: No caso de busca em tabela interna, a variável SY-TABIX retorna a linha em que a
string procurada foi encontrada.
STRLEN
Devolve o tamanha da string referenciada.
Eventos :
TOP-OF-PAGE
END-OF-PAGE
Elementos de texto :
TEXT-SYMBOLS
HEADINGS
SELECTION TEXTS
System fields
Comando WRITE
WRITE
Exemplos:
WRITE: ‘****************’.
WRITE: 5 `****************’.
SKIP 2.
ULINE.
ULINE /5(40).
V_DATUM = SY-DATUM.
V_UZEIT = SY-UZEIT.
END-OF-PAGE
LINE-SIZE col
Cria o report com <col> colunas por linha.
LINE-COUNT n(m)
Cria o report com <n> linhas por página, das quais (m) linhas serão reservadas para o
processamento do comando END-OF-PAGE.
• Definir um filtro.
Exibir somente os campos desejados.
• Pesquisa.
É possível pesquisar informações específicas.
• Deslocar colunas.
Retirar os valores fixos para seleção dos dados e incluir uma tela de seleção,
com os seguintes campos : Empresa, Documento, Exercício, Tipo documento
e Data documento.
GUI-01
GUI-02
• Evento PBO
Evento executado antes da exibição da tela para o usuário:
Definição do GUI Status e GUI Title para a tela correspondente
Seleção inicial de dados e atribuição de valores a serem exibidos na tela
• Evento PAI
Evento executado após um comando do usuário (enter, click de um botão, etc...)
Verificação do código de comando executado (definido no GUI Status)
Código ABAP para execução da lógica do comando
Desenvolvendo um Module Pool
SE80
A transação SE80 é a mais adequada para se desenvolver um module pool, pois
possibilita acesso dinâmico a qualquer elemento do programa, bem como as estru-
turas GUI, includes, modules e telas.
Os programas desenvolvidos pelos clientes – não SAP, devem iniciar com SAPMZ.
Por exemplo, SAPMZABAP05.
A tela é desenhada no Screen Painter Gráfico, que possui ferramentas de fácil
utilização.
A programação das telas é feita em uma área da própria tela, destinada a lógica de
programação da mesma.
As sub-rotinas chamadas a partir da lógica de programação das telas, recebem o
nome de módulo – MODULE...
Os módulos do PBO ficam armazenados em um include do próprio PBO. O mesmo
acontecendo com os módulos do PAI.
SE80
Lista de objetos
do Module Pool
Área de
programação
Module Pool – Exemplo
PBO
PAI
Module Pool – Mais conceitos
STATUS GUI
Onde pode ser customizada as barras de menu, de botões e teclas de função.
TITLE GUI
Onde é modificado os nomes/’título das telas.
Screen Painter Gráfico
Elementos disponíveis
para a tela
Propriedades de
cada objeto
Comandos úteis:
CHAIN – Verifica quando um campo é alterado ou utilizado.
Table Control
Atributos da Table Control
Alguns Atributos da Table Control podem ser alteradas conforme a necessidade
do programa, sendo:
Atributo Tipo Tamanho Conteúdo
COLS (*1)
‘X’ – significa que o campo está
INVISIBLE CHAR 1 invisível
‘ ‘ – significa que o campo não está
invisível
Table Control
Atributos da Table Control
(*1) – O parâmetro COLS é uma outra estrutura que contém a definição
de alguns dados por campo da Table Control.
Para alteração destes parâmetros, basta alterar o conteúdo dos campos,
movimentando a informações para a Table Control-Campo (Ex.: TC1-
TOP_LINE = 5).
LOOP AT SCREEN.
SCREEN-INVISIBLE = ‘X’
ENDLOOP.
Onde ‘X’ pode ser ‘0’ para exibir e ‘1’ para inibir.
Dados SAP
Externos INTERFACES BANCO SAP
X
Dados
CONSISTÊNCIAS BANCO SAP
Externos
Nunca gravar na base direto
Sistema Externo X
(Legado)
Sessão de
BATCH INPUT
Programa
Banco de Dados
SAP
Arquivo Sequêncial
Arquivo Fonte
SAP R/3
Transação 1 Transação 2
Log
SAP R/3
Tabela
BDC
INCLUDE STRUCTURE
CALL FUNCTION
FILA
Seqüência para codificação
BINARY MODE
In
TEXT MODE
ABAP /4
A B C ABAP /4
A B C
A B A B
A B C D A B C D
TRANSFER TRANSFER
A B C A B A B C D A B C A B A B C D
ABAP /4
A B C ABAP /4
A B C
A B A A B
B C D A B C
TRANSFER <campo> TO <nome do arquivo>
ABRIR ARQUIVO
Gravar Ler
Mais Fim do
dados ? Arquivo?
Sim Não
Não Sim
FECHAR ARQUIVO
Funções Para Batch-Input
CALL FUNCTION ‘BDC_OPEN_GROUP’
EXPORTING
Client * = <Client> (Sy-Mandt)
Group * = <Nome da Sessão>
Holddate = <Data>
Keep * = Flag de Deleção
User * = <Usuário BDC> (Sy-Uname)
EXCEPTIONS
* - Parâmetros Obrigatórios
* - Default = ‘ ’ (apagar a sessão)
Programa Tela Início Nome do CampoValor do Campo
<Programa> <Número 1> X
Mostra as pastas
Análise Mostra os dados da pasta
Log / Estatísticas
Processa em “FOREGROUND”
Processar Mostra apenas os erros
Processa em “BACKGROUND”
Visível Mostra Passo a Passo a transação
START-OF-SELECTION.
Nome_arq = arquivo.
IF TP_UNIX = 'X'.
PERFORM ABRE_ARQUIVO_UNIX.
ELSE.
PERFORM ABRE_ARQUIVO_WINDOWS.
ENDIF.
PERFORM OPEN_GROUP.
PERFORM PREPARA_BDC.
PERFORM FECHA_GROUP.
END-OF-SELECTION.
Programa Modelo Batch-Input - Continuação
FORM ABRE_ARQUIVO_UNIX.
DO.
READ DATASET NOME_ARQ INTO REGISTRO.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
APPEND REGISTRO.
ENDDO.
ENDFORM.
Programa Modelo Batch-Input - Continuação
FORM ABRE_ARQUIVO_WINDOWS.
IF SY-SUBRC NE 0.
WRITE: / 'Erro Abrindo arquivo do Windows ', NOME_ARQ.
EXIT.
ENDIF.
ENDFORM. “ABRE_ARQUIVO_WINDOWS
Programa Modelo Batch-Input - Continuação
FORM OPEN_GROUP.
IF SY-SUBRC NE 0.
WRITE: 'Erro no Open Group'.
EXIT.
ENDIF.
ENDFORM. “OPEN_GROUP
Programa Modelo Batch-Input - Continuação
FORM PREPARA_BDC.
REFRESH BDC_TAB.
LOOP AT REGISTRO.
PERFORM INSERT.
REFRESH BDC_TAB.
ENDLOOP.
ENDFORM.
Programa Modelo Batch-Input - Continuação
FORM PREENCHE_BDC USING DYNBEGIN NAME VALUE.
IF DYNBEGIN = 'X'.
MOVE: NAME TO BDC_TAB-PROGRAM,
VALUE TO BDC_TAB-DYNPRO,
'X' TO BDC_TAB-DYNBEGIN.
APPEND BDC_TAB.
ELSE.
MOVE: NAME TO BDC_TAB-FNAM,
VALUE TO BDC_TAB-FVAL.
APPEND BDC_TAB.
ENDIF.
CLEAR BDC_TAB.
ENDFORM.
Programa Modelo Batch-Input - Continuação
FORM INSERT.
IF SY-SUBRC NE 0.
WRITE: 'Erro no Insert'.
EXIT.
ENDIF.
ENDFORM.
Programa Modelo Batch-Input - Continuação
FORM FECHA_GROUP.
IF SY-SUBRC NE 0.
WRITE: 'Erro no Open Group'.
EXIT.
ELSE.
WRITE: 'Sessão Criada'.
ENDIF.
ENDFORM.
Formas de Inserir dados no SAP R/3
Dados
Externos
Programa
ABAP/4
SAP
Etapas para Inserir dados no SAP R/3
Definir Estruturas Antigas
Verificar os dados
Converter os dados
Analisar resultados
Avaliar os Erros
Batch-Input X Call Transaction
Call Transaction <Código da Transação>
Modo de Visualização
A - Visualiza Tudo <default>
E - Visualiza apenas se der erro
N - Não Visualiza nada
Modo de Atualização
S - Modo Síncrono (Espera terminar)
A - Modo Assíncrono <default>
SY-SUBRC
0 - Sucesso
<1000 - Erro no Programa do SAP
>1000 - Erro no Processamento
(Ver campos de Sistema)
Campos de Sistema
SY-MSGID - Classe da Mensagem
SY-MSGTY - Tipo da Mensagem (E, I, W, S, A)
SY-MSGNO - Número da Mensagem
SY-MSGV1 - Variável de Mensagem 1
SY-MSGV2 - Variável de Mensagem 2
SY-MSGV3 - Variável de Mensagem 3
SY-MSGV4 - Variável de Mensagem 4
Batch Input Call Transaction
Pág. 01
Programa Modelo Call Transaction – Continuação
START-OF-SELECTION.
NOME_ARQ = ARQUIVO.
IF ALL = 'X'.
MODO = 'A'.
ELSEIF ERRO = 'X'.
MODO = 'E'.
ELSE.
MODO = 'N'.
ENDIF.
Pág. 03
Programa Modelo Call Transaction – Continuação
IF TP_UNIX = 'X'.
PERFORM ABRE_ARQUIVO_UNIX.
ELSE.
PERFORM ABRE_ARQUIVO_WINDOWS.
ENDIF.
PERFORM PREPARA_BDC.
IF CONT > 0.
PERFORM FECHA_BDC.
ENDIF.
Pág. 04
Programa Modelo Call Transaction – Continuação
FORM PREPARA_BDC.
REFRESH BDC_TAB.
LOOP AT REGISTRO.
PERFORM PREENCHE_BDC USING:
'X' 'SAPMTFBA' '0100',
' ' 'SCUSTOM-ID' REGISTRO-ID,
' ' 'BDC_OKCODE' '/00',
Pág. 05
Programa Modelo Call Transaction – Continuação
IF DYNBEGIN = 'X'.
MOVE: NAME TO BDC_TAB-PROGRAM,
VALUE TO BDC_TAB-DYNPRO,
'X' TO BDC_TAB-DYNBEGIN.
APPEND BDC_TAB.
ELSE.
MOVE: NAME TO BDC_TAB-FNAM,
VALUE TO BDC_TAB-FVAL.
APPEND BDC_TAB.
ENDIF.
CLEAR BDC_TAB.
ENDFORM.
Pág. 06
Programa Modelo Call Transaction – Continuação
FORM INSERT.
CALL TRANSACTION 'TFBA'
USING BDC_TAB
MODE MODO
UPDATE 'S'
MESSAGES INTO MSG_TAB.
IF SY-SUBRC NE 0.
CONT = CONT + 1.
PERFORM PREPARA_PASTA_ERRO.
ENDIF.
PERFORM MENSAGENS.
ENDFORM.
Pág. 07
Programa Modelo Call Transaction – Continuação
FORM ABRE_ARQUIVO_UNIX.
DO.
READ DATASET NOME_ARQ INTO REGISTRO.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
APPEND REGISTRO.
ENDDO.
ENDFORM.
Pág. 08
Programa Modelo Call Transaction – Continuação
FORM ABRE_ARQUIVO_WINDOWS.
Pág. 09
Programa Modelo Call Transaction – Continuação
IF SY-SUBRC NE 0.
WRITE: / 'Erro Abrindo arquivo do Windows ', NOME_ARQ.
EXIT.
ENDIF.
ENDFORM.
Pág.10
Programa Modelo Call Transaction – Continuação
FORM MENSAGENS.
LOOP AT MSG_TAB.
IF MSG_TAB-MSGV1 NE SPACE.
REPLACE '&1' WITH MSG_TAB-MSGV1 INTO C_TEXTO.
IF SY-SUBRC NE 0.
REPLACE '&' WITH MSG_TAB-MSGV1 INTO C_TEXTO.
ENDIF.
CONDENSE C_TEXTO.
ENDIF.
Pág.11
Programa Modelo Call Transaction – Continuação
IF MSG_TAB-MSGV2 NE SPACE.
REPLACE '&2' WITH MSG_TAB-MSGV2 INTO C_TEXTO.
IF SY-SUBRC NE 0.
REPLACE '&' WITH MSG_TAB-MSGV2 INTO C_TEXTO.
ENDIF.
CONDENSE C_TEXTO.
ENDIF.
IF MSG_TAB-MSGV3 NE SPACE.
REPLACE '&3' WITH MSG_TAB-MSGV3 INTO C_TEXTO.
IF SY-SUBRC NE 0.
REPLACE '&' WITH MSG_TAB-MSGV3 INTO C_TEXTO.
ENDIF.
CONDENSE C_TEXTO.
ENDIF.
Pág.12
Programa Modelo Call Transaction – Continuação
IF MSG_TAB-MSGV4 NE SPACE.
REPLACE '&4' WITH MSG_TAB-MSGV4 INTO C_TEXTO.
IF SY-SUBRC NE 0.
REPLACE '&' WITH MSG_TAB-MSGV4 INTO C_TEXTO.
ENDIF.
CONDENSE C_TEXTO.
ENDIF.
CONCATENATE MSG_TAB-MSGTYP ' - ' C_TEXTO INTO C_TEXTO.
WRITE: C_TEXTO.
ENDLOOP.
REFRESH MSG_TAB.
ENDFORM.
Pág.13
Programa Modelo Call Transaction – Continuação
FORM PREPARA_PASTA_ERRO.
IF CONT = 1.
PERFORM ABRE_BDC.
PERFORM INSERT_BDC.
ELSE.
PERFORM INSERT_BDC.
ENDIF.
ENDFORM.
Pág.14
Programa Modelo Call Transaction – Continuação
FORM ABRE_BDC.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'ERROS'
KEEP = 'X'
USER = SY-UNAME
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11.
Pág.15
Programa Modelo Call Transaction – Continuação
FORM ABRE_BDC.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'ERROS'
KEEP = 'X'
USER = SY-UNAME
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11.
Pág.15
Programa Modelo Call Transaction – Continuação
IF SY-SUBRC NE 0.
WRITE: 'Erro no Open Group'.
EXIT.
ENDIF.
ENDFORM.
Pág.16
Programa Modelo Call Transaction – Continuação
FORM INSERT_BDC.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'TFBA'
TABLES
DYNPROTAB = BDC_TAB
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7.
IF SY-SUBRC NE 0.
WRITE: 'Erro no Insert'.
EXIT.
ENDIF.
ENDFORM.
Pág.17
Programa Modelo Call Transaction – Continuação
FORM FECHA_BDC.
IF SY-SUBRC NE 0.
WRITE: 'Erro no Open Group'.
EXIT.
ENDIF.
ENDFORM.
Pág.18
Exercício
1) Batch-Input
2) Call Transaction
-Debug
-Client Dependent
PÁGINAS
Partes de um Formulário
JANELAS E ELEMENTOS DE
TEXTO
<H> </>
CARACTERES DE
COMANDO
P
PARÁGRAFOS
Sapscript
Sapscript
Sapscript
ESTRUTURA FORMULÁRIO
Cabeçalho
Informações gerais do formulário, título, a classe de desenvolvimento e os
idiomas.
Parágrafos
São elementos que podem ser criados e apresentam informações dos textos
de uma determinada janela.
Caracter de Seleção
São informações semelhantes às do parágrafo, no que diz respeito a
formatação de textos, no entanto podem ser aplicados a trechos de textos e
não necessariamente a linhas inteiras do formulário.
Páginas
São os elementos responsáveis pelo agrupamento das janelas durante
certos momentos do relatório.
Sapscript
ESTRUTURA FORMULÁRIO
Elementos de Texto
Corresponde à lógica de processamento e comportamento de uma janela
durante a execução do formulário.
* Parágrafo Padrão
= Linha longa
( Linha Bruta
/ Avanço de Linha
/ = Avanço de Linha e Linha Longa
/( Avanço de Linha e Linha Bruta
/: Linha de Comando
/* Linha de Comentário
/E Elemento de Texto
Sapscript
ESTRUTURA FORMULÁRIO
Janelas
Podem ser criadas sem limites e tem por finalidade dividir por espaço as
regiões de um formulário para operações independentes.
MAIN
Somente é permitido um tipo de janela MAIN por formulário, e é a única
janela obrigatória em uma página.
VAR
Esse tipo de janela deve ser utilizado quando se pretende trabalhar com
textos que variam.
CONST
Nesse tipo de janela são incluído objetos e textos que permanecem os
mesmos durante todo o relatório, independente do número de páginas.
Sapscript
CONDIÇÕES CONDIÇÕES
NÃO EXISTENTES EXISTENTES
NO SAPSCRIPT NO SAPSCRIPT
DATE: Data
DAY: Dia
NAME_OF_DAY: Nome do Dia
MONTH: Mês
NAME_OF_MOUNTH: Nome do Mês
YEAR: Ano
TIME: Hora Total
HOURS: Hora Atual
MINUTES: Minuto Atual
SECONDS: Segundo Atual
PAGE: Número da Pagina
NEXTPAGE: Número da nova página
SPACE: Espaço
ULINE: Linha Horizontal
VLINE: Linha Vertical
Sapscript
COMANDOS
ADDRESS PRINT-CONTROL
BOTTOM PROTECT
BOX RESET
CASE SET COUNTRY
DEFINE SET DATE MASK
HEX SET SIGN
IF SET TIME MASK
INCLUDE SIZE
NEW-PAGE STYLE
NEW-WINDOW SUMMING
PERFORM TOP
POSITION
Sapscript
Estrutura de Chamada e Controle do SAPSCRIPT
FUNÇÃO:
Call function ‘OPEN_FORM’
PARÂMETROS ESSÊNCIAIS:
DEVICE
FORM
LANGUAGE
Sapscript – OPEN_FORM
- TDCOPIES (Número de Cópias)
- TDDEST (Dispositivo de Saída)
- TDPREVIEW (Print Preview)
- TDIMMED (Saída Imediata)
FUNÇÃO:
Call function ‘START_FORM’
PARÂMETROS ESSÊNCIAIS:
FORM
LANGUAGE
Sapscript – START_FORM
Este comando não é obrigatório e pode não ser utilizado caso não haja necessidade da quebra e criação de vários
formulários para uma só seleção de dados.
A função é muito similar à função OPEN_FORM, e novamente os parâmetros mais importantes são o nome
(FORM) e o idioma (LANGUAGE) do formulário.
Para que se possa utilizar um comando START_FORM é obrigatório que um comando de OPEN_FORM tenha sido
executado. Caso isso não seja feito um erro de sintaxe irá aparecer.
FUNÇÃO:
Call function ‘WRITE_FORM’
PARÂMETROS ESSÊNCIAIS:
ELEMENT
WINDOW
Sapscript – WRITE_FORM
Um ponto importante que deve ser observado é que não é possível utilizar tabelas internas e variáveis do programa
para a impressão dos dados no SAPSRIPT. Portanto, se algum dado que deva ser impresso estiver numa tabela
interna ou variável, este deve ser copiado para uma estrutura para que possa ser enviado ao SAPSCRIPT.
A impressão dos dados nas janelas na maioria das vezes é feita simultaneamente com a seleção dos dados, ou seja, a
medida que os dados são selecionados, são enviados imediatamente para o formulário.
Neste ponto fica evidente a diferenciação entre os tipos de janela MAIN e demais janelas.
Para as janelas do tipo MAIN, cada comando de escrita (write_form) significa uma nova linha no formulário e o
valor a ser impresso é o valor que o campo armazena no momento do comando de impressão.
Por exemplo, digamos que o campo MARA-MATNR tenha o valor ‘1234’ e que um comando de impressão seja
dado para a janela MAIN que irá imprimir este campo. Logo em seguida uma nova seleção da tabela MARA é feita e o
campo MATNR agora vale ‘5678’. Se uma nova impressão na janela MAIN for executada o resultado será o seguinte:
1234
5678
Já as janelas que não forem do tipo MAIN imprimem os dados uma única vez, no final da impressão do
formulário ou na quebra de página, com os valores armazenados nos campos no momento do encerramento ou no
momento da quebra, e não no momento da escrita (write_form), ou seja, se no exemplo anterior fosse utilizada uma
janela não-main, o resultado final seria somente 5678.
Na realidade, a utilização de um comando WRITE_FORM numa janela não-main é utilizada para a escolha de
qual elemento de texto será utilizado para a impressão dos dados.
Exemplo: Uma janela HEADER não-main contém dois elementos de texto chamados FRASE1 e FRASE2 da
seguinte forma:
/E FRASE1
&MARA-MATNR& Teste de Frase 1
/E FRASE2
&MARA-MATNR& Teste de Frase 2
Sapscript – WRITE_FORM
Se um comando WRITE_FORM for executado para a janela HEADER utilizando o elemento de texto FRASE1,
estará sendo indicado ao programa que, ao se encerrar o formulário, deve ser impresso o elemento de texto
FRASE1 para a janela HEADER (somente um elemento de texto é utilizado para cada janela não-main).
No caso do exemplo, se o campo MATNR for igual a ‘1234’ no encerramento do formulário, seria impressa a
seguinte frase:
Teste de Frase 1
O elemento de texto a ser impresso será sempre o último a ser selecionado antes do final ou da quebra de
página.
Se nenhum for selecionado, ao encerrar o formulário ou mudar de página serão impressos os dados que não
pertençam a nenhum elemento de texto. Portanto no caso de um campo que deva ser impresso sempre em
todas
as páginas, como numero de página por exemplo, basta colocá-lo fora de qualquer elemento de texto e não
selecionar nenhum elemento de texto para a janela que, automaticamente, este dado será impresso em todas as
páginas.
Sapscript
FINALIZAÇÃO FORMULÁRIO
FUNÇÃO:
Call function ‘END_FORM’
FECHAMENTO FORMULÁRIO
FUNÇÃO:
Call function ‘CLOSE_FORM’
Sapscript – END_FORM/CLOSE_FORM
END FORM - Serve para finalizar um formulário.
DICAS
* Nunca esquecer de ativar o formulário no idioma original, caso contrário
ficará bloqueado as modificações nos outros idiomas.
* Visualização x Impressão mesma máquina (impressora / basis SPAD)
* Visualização distinta em computadores distintos (versão Sapgui)
* Não deletar janelas e elementos de textos
Exercício
1) SAPScript
Nome do formulário : Z_FORM## Nome do programa : Z_STK##_SCRIPT
Crie um formulário com o layout :
Exist são pontos em locais pré-definidos pela SAP, onde o cliente pode
incluir códigos próprios, por alguma necessidade específica.
Tipos de exit :
User-Exit
Field-Exit
Menu-Exit
call customer-function…
Projeto :
Características Gerais
Ampliações do projeto.
Exits – CMOD / User-Exit
Ampliações e suas
exit relacionadas.
Field-Exits existentes
e seus status.
Quando se opta pela criação
de novo field-exit, ele solicita
qual o campo que se deseja
customizar.
Exits – Field-Exit
Field-exit – Criar/Modificar
Requisitos:
a) nome do programa Standard onde se encontra o campo onde se quer colocar codificação
b) número da tela
c) nome do elemento de dados do campo
Transação CMOD
Obs.: Se um campo com field-exit codificado por alguma razão aparecer inibido, este field-exit não será
executado.
Uso de SET/GET: se o campo da tela contiver um field-exit com SET, este SET será limpo da memória se
em
telas posteriores existir o mesmo elemento de dados com o campo aberto.
Field-Exit não funcionam em campos check-box ou radio-buttom.
Algumas Transações Úteis
SE09 – Organização de transporte (Utilizado para controlar as request’s).
SE11 – Dicionário ABAP (Utilizado para criar, alterar e apagar domínios, elemento de dados, campos, tabelas,
estrutura).
SE16 – Data browser
SE37 – Módulos de função ABAP. (Utilizado para criar, alterar e apagar funções (Módulos de funções).
SE38 – Editor de programas ABAP. (Utilizada para criar, alterar e apagar programas ABAP).
SE39 – Editor de tela dividida
SE71 – Formulário SAPscript. (Utilizado para criar, alterar e apadar formulários de SapScript).
SE80 – Repository Browser. (Utilizado para criar, alterar e apagar, Programas (On-Line ou Module Pool),
grupos de função, etc.).
SE91 – Atualização de mensagem
SE92 – Mensagens do Log do sistema
SE93 – Códigos de transação (Utilizado para criar, alterar e apagar transações).
SM04 – Visualiza e derruba sessões
SM12 – Exibir e eliminar bloqueios (Utilizado para desbloquear programas, transações, etc.).
SM35 – Moritorar pasta de Batch-Input.
SM37 – Monitora os jobs colocados para processamento
ST05 – Possui várias funções, a mais utilizada e para realizar o trace SQL.(Mostra todos acessos realizados no BD).
ST22 – ABAP análise dump.
SHDB – Registrador transação - batch input. (Utilizado para criar o “mapeamento” para posteriormente criar os
programas para gerar a pasta de batch input.).
CMOD – Gerenciamento de projetos (Exits)
SMOD – Definição de ampliações (Exits)
SMARTFORMS – Formulário SmartForm
Click to edit Master title style
F I M
www.softtek.com.br 239
239