Post on 30-Nov-2015
Academia – SAP/ABAP R3
© by BBKO Consulting 1
Academia ABAP
Aluno: __________________________________________________
Instrutor: Ronaldo Nogueira - rnogueira@bbko.com.br
Academia – SAP/ABAP R3
© by BBKO Consulting 2
Índice CAPÍTULO 1 – MYSAP ERP __________________________________________________ 3
CAPÍTULO 2 – CONCEITO DE BANCO DE DADOS RELACIONAL _______________ 9 CAPÍTULO 3 – DICIONÁRIO DE DADOS _____________________________________ 10
CAPÍTULO 4 – ABAP OPEN SQL ____________________________________________ 36 CAPÍTULO 5 – TELA DE SELEÇÃO __________________________________________ 47
CAPÍTULO 6 – LISTAS _____________________________________________________ 54 CAPÍTULO 7 – LISTAS SECUNDÁRIAS ______________________________________ 64
CAPÍTULO 8 – MODULARIZAÇÃO __________________________________________ 73 CAPÍTULO 9 – DATA TRANSFER____________________________________________ 80
CAPÍTULO 10 – PROGRAMAÇÃO ON-LINE __________________________________ 95 APÊNDICE A – PROGRAMAÇÃO ON-LINE __________________________________ 128
OS COMPONENTES PRINCIPAIS DE UM DIALOG PROGRAM (ON-LINE) __________________ 128 SCREEN PAINTER - ABAP/4 _________________________________________________ 128 COMUNICAÇÃO: TELA à ABAP/4 MODULE POOL ________________________________ 128 DEFININDO O LAYOUT (GRAPHICAL SCREEN PAINTER) _____________________________ 128 VISUALIZAÇÕES DE LISTAS DE CAMPO (FIELD LIST VIEWS) _________________________ 130 DEFININDO O CONTROLE DO FLUXO ____________________________________________ 130 PROCESSANDO O MODULE POOL ____________________________________________ 130 DEFININDO CAMPOS NO MODULE POOL ______________________________________ 131 DEFININDO CHAMADAS (CÓDIGOS DE TRANSAÇÃO) _______________________________ 131 CHECAGEM AUTOMÁTICA DE CAMPO DE ENTRADA ________________________________ 131 CHECANDO CAMPO DE ENTRADA NO MODULE POOL COM DIÁLOGO DE ERRO __________ 132 CHECANDO GRUPO DE CAMPOS _______________________________________________ 132 LENDO CÓDIGOS DE FUNÇÃO EM PROGRAMAS ___________________________________ 133 SEQÜÊNCIA DINÂMICA DE TELA: OVERVIEW _____________________________________ 133 AJUSTANDO A PRÓXIMA TELA DINAMICAMENTE _________________________________ 133 MENU PAINTER - OVERVIEW _________________________________________________ 133 DEFININDO A INTERFACE I ___________________________________________________ 133 DEFININDO A INTERFACE II __________________________________________________ 134 DEFINIÇÃO AUTOMÁTICA DE ÍCONES PARA TECLAS DE FUNÇÃO ______________________ 134 DEFININDO MENUS DE ÁREA _________________________________________________ 134
Academia – SAP/ABAP R3
© by BBKO Consulting 3
Capítulo 1 – mySAP ERP
2
• O que é o mySAP ERP ?• Funções do mySAP ERP .• Arquitetura três camadas.• Landscape.• Sistema de Transporte.
3
O que é o mySAP ERP ?
• O mySAP ERP é um conjunto integrado de aplicativos para tratar o processamento de dados de grandes corporações.
• Foi desenvolvido na Alemanha pela empresa SAP (Systems Applicationsand Products for data processing-Aplicativos e produtos de sistemas para processamento de dados).
Academia – SAP/ABAP R3
© by BBKO Consulting 4
4
Funções mySAP Business Suite
BASIS
Ø Oferece uma solução integrada de aplicativos empresariais. Ø Todos os módulos de aplicativos do mySAP ERP 2005 (ECC 6.0 Atual)
são escritos em ABAP (Advanced Business Application Programing), que é interpretado pelo Application Server que fica localizado na camada SAP NetWeaver, que por sua vez, são executadas no sistema Operacional.
(SAP NetWeaver – é como um sistema operacional para o mySAP ERP 2005 (ECC 6.0). Ele fica entre o código ABAP e o sistema operacional.). Módulos Localizados no MySAP ERP Ø MM (Materials Management – Gerenciamento de Materiais) Ø SD (Sales and Distribution – Vendas e Distribuição) Ø FI (Financial Accounting – Contabilidade Financeira) Ø PP (Production Planning – Planejamento da Produção) Ø HR (Human Resources – Recursos Humanos) Ø WF (Workflow – Fluxo de Trabalho) Ø PS (Project System – Sistema de Projeto) Ø e outros.
Academia – SAP/ABAP R3
© by BBKO Consulting 5
5
Papéis e Responsabilidades
Basis – Responsável pela instalação do ERP e configurações do mesmo (ex. impressoras, links, administração de usuários e etc.)
ABAP – Programador
Funcionais – Responsável pela parametrização e adequação dos processos deum determinado módulo.
Academia – SAP/ABAP R3
© by BBKO Consulting 6
5
Arquitetura 3 camadas Cliente/Servidor
Tipo de processo Tipo de solicitação de trabalho D (Dialog) Solicitações de diálogo. V (Update) Solicitações para atualizar dados no banco de dados. B (Background) Trabalhos de segundo plano. S (Spool) Imprime solicitações do spool. E (Enqueue) Solicitações de bloqueio lógico. M (Message) Roteia as msgs. entre os serv. de aplicativo dentro do sistema R/3. G (Gateway) Afunila as mensagens dentro e fora do sistema R/3.
O Sistema R/3 é baseado na arquitetura cliente/servidor com 3 camadas: Servidor de dados, servidor de aplicações e servidor de apresentação.
A arquitetura de 3 (três) camadas faz o sistema facilmente escalável. Para adicionar usuários, você precisa instalar mais servidores de apresentação. Você pode também aumentar a eficiência do todo o sistema adicionando mais servidores de aplicação associados aos seus work processes.
Servidor de aplicativos consiste em um dispatcher e múltiplos processos de trabalho (work process). Todas as solicitações provenientes de servidores de apresentação são dirigidas primeiro ao dispatcher. O dispatcher grava-as primeiro na camada do dispatcher. O dispatcher extrai as solicitações da camada utilizando o algoritmo primeiro a entrar, primeiro a sair (FIFO). Cada solicitação é então alocada para o primeiro work process disponível. Um work process trata uma solicitação por vez.
Academia – SAP/ABAP R3
© by BBKO Consulting 7
6
System Landscape
Client-indep.CustomizingRepository
Objects
Client-indep.CustomizingRepository
Objects
Client-indep.CustomizingRepository
ObjectsRequest
DEV
MAST
SBOX TRAI
MAST
QTSTPROD
ClientCopy
ClientCopy
ClientCopy
Client Copy
Client Transport
WorkbenchRequest
Workbench
ClientTransport
Sistema de Desenvolvimento Sistema de QA Sistema de Produção
Academia – SAP/ABAP R3
© by BBKO Consulting 8
7
Workbench Organizer e o Sistema de Transporte
O Workbench Organizer permite ao usuário desenvolver o software de maneira organizada.
O Sistema de transporte prove a execução do transporte. Os objetos de repositório são conectados para o sistema de transporte
pela classe de desenvolvimento e associações com change requests. Depois que as requests foram liberadas no sistema de desenvolvimento, ela é então transportada para a rota pré determinada: sistema de qualidade ou para o sistema de produção.
Academia – SAP/ABAP R3
© by BBKO Consulting 9
Capítulo 2 – Conceito de Banco de Dados Relacional
8
Conceito de Banco de Dados
Relacional
9
Conceito de Banco de Dados
• Campo• Registro• Coluna• Tabela• Unicidade de Registro – Chave Primaria (PK) e Chave
Alternativa (AK)• Relacionamento – Chave Estrangeira (FK)• Índice
Academia – SAP/ABAP R3
© by BBKO Consulting 10
Capítulo 3 – Dicionário de Dados
8
Dicionário de Dados
Academia – SAP/ABAP R3
© by BBKO Consulting 11
9
Dicionário de Dados
• Domínio• Elemento de Dados• Campos• Registros• Tabelas
– Transparentes– Interna
Ø O Dicionário Abap permite um gerenciamento central de todas as definições de dados usada no sistema R/3
Ø No Dicionário você pode criar tipos definidos pelo usuário (data elements,
estruturas e table types). Objetos de banco de dados, tais como tabelas e views de banco de dados, também podem ser definidas no Dicionário ABAP e criada com estas definições no banco de dados.
Ø O Dicionário ABAP também provê um número de serviço que apóiam o
desenvolvimento de programas. Por exemplo, lock de tabelas, search help (F4) e ajuda de campo (F1 help) usados nos campos de uma tela.
Academia – SAP/ABAP R3
© by BBKO Consulting 12
10
Dicionário de Dados - Tipos no Dicionário ABAP
11
Dicionário de Dados - Tipo de Dados mais utilizados
CHAR String de caractere (máximo de 255 caracteres)
DEC Valores decimais DATS Campo DateTIMS Campo TimeINT1, INT2, INT4 Valores inteirosNUMC Campo de caractere que pode
conter apenas numéricos
Tipo Descrição
Academia – SAP/ABAP R3
© by BBKO Consulting 13
12
Dicionário de Dados - Tipos de Dados ABAP
T1 TYPE I.
DATA D1 TYPE T1 DATA D3 TYPE T1VALUE 123, DATA D6 TYPE T2.DATA D5 TYPE T2
VALUE ‘1.23’
T2(5) TYPE P.
Grupo de Tipos
Tipos de Dados
Ø Data types: Ø Apenas descrição do ‘type’ Ø Não ocupa memória Ø Caracteriza os atributos técnicos de todos os data objects que possuem um type especificado
Ø Data Objects: Ø É uma concreta representação do type Ø Cada data object tem um type específico e ocupa espaço em memória
Academia – SAP/ABAP R3
© by BBKO Consulting 14
13
Dicionário de Dados - Objetos Básico no Dicionário
Tabela 1
.... Valor_compra ...
Tabela 2
.... Valor_venda ...
Elemento de DadosMATNR
Elemento de DadosMATNR
DomínioMATNR
Uma tabela écomposta de
campos
Para criar um Campo, você precisa de um Elemento de
Dados
Uma definição de elemento de dados exige um
domínio
CampoMaterial
CampoMaterial
DomínioMATNR
Ø Os objetos básicos do Dicionário ABAP são: tabelas, data elements e domínios
Ø Domínio descreve os atributos técnicos dos campos das tabelas (ex: tipo, tamanho do campo), enquanto os data elements contém a definição semântica (descrição curta)
Academia – SAP/ABAP R3
© by BBKO Consulting 15
14
Dicionário de Dados - Criar DomínioTransação SE11
Dica: ao criar a tabela e seus data elements, associar a mesma Change Request, para não dar problema durante o transporte de Desenvolvimento para QA
Academia – SAP/ABAP R3
© by BBKO Consulting 16
15
Dicionário de Dados - Criar DomínioTransação SE11
16
Dicionário de Dados - Criar Elemento de Dados
Transação SE11
Academia – SAP/ABAP R3
© by BBKO Consulting 17
17
Dicionário de Dados - Criar Elemento de Dados
Transação SE11
18
Dicionário de Dados - Criar Elemento de Dados
Transação SE11
Academia – SAP/ABAP R3
© by BBKO Consulting 18
19
Dicionário de Dados - Criar Elemento de Dados
Transação SE11
23
Dicionário de Dados - Tipos de Tabelas no R/3
• Estruturas- Uma estrutura (categoria estruturada) é composta por
componentes (campos). Os componentes são tipificados.- As estruturas são em particular utilizadas para definir os
dados na interface de pools de módulos e telas, assim como para atribuir o tipo aos parâmetros de módulos de função.
• Tabelas Transparentes- Uma tabela transparente tem relacionamento um-para-um com
uma tabela no banco de dados. - Nós criamos somente tabelas transparentes
Academia – SAP/ABAP R3
© by BBKO Consulting 19
24
Dicionário de Dados - Tipos de Tabelas no R/3
• Tabelas de Pool- Uma tabela de pool tem um relacionamento de muitos-para-um
com uma tabela no banco de dados. Para uma tabela no banco de dados, há muitas tabelas no Dicionário.
• Tabelas de Cluster- Uma tabela de Cluster tem um relacionamento de muitos-para-
um com uma tabela no banco de dados. Para uma tabela no banco de dados, há muitas tabelas no Dicionário. Muitas tabelas de cluster de cluster são armazenadas em uma única tabela no banco de dados chamada de cluster de tabelas. Os clusters de tabela armazenam dados de várias tabelas baseadas nos campos de chave primária que elas têm em comum.
21
Dicionário de Dados - Criar Tabela Transparente
Transação SE11
3
Academia – SAP/ABAP R3
© by BBKO Consulting 20
22
Dicionário de Dados - Criar Tabela Transparente
Pasta “Características”
27
Dicionário de Dados - Criar Tabela Transparente
Pasta “Entrega e Atualização”
Academia – SAP/ABAP R3
© by BBKO Consulting 21
24
Dicionário de Dados - Criar Tabela Transparente
Pasta “Campos”
O primeiro campo de uma tabela sempre deve ser o mandante;
Ø O campo Num_documento, utiliza o data element ‘ZNUM_DOCUMENTO’ Ø O Campo Usuario, utiliza o data element ‘UNAME’ Ø O Campo Data, utiliza o data element ‘DATUM’ Ø O Campo Material, utiliza o data element ‘MATNR’ Ø O Campo Valor, utiliza o data element ‘BWERT’ Ø O Campo Quantidade, utiliza o data element ‘BSTMG’ Ø O Campo Material possui check table, ou seja durante qualquer manutenção da tabela Z ou Y, é checado se o material gravado nesta tabela, existe na tabela Mestre de Material (MARA)
Academia – SAP/ABAP R3
© by BBKO Consulting 22
25
Dicionário de Dados - Criar Tabela Transparente
Pasta “Entrs. Possíveis/Verificações”
26
Dicionário de Dados - Criar Tabela Transparente
Pasta “Campos Moeda/Quant.”
Ø Para campos do tipo moeda (valores) e quantidade, é necessário definir tabela e campo de referência.
Academia – SAP/ABAP R3
© by BBKO Consulting 23
27
Dicionário de Dados - Criar Tabela Transparente
Check Table no Campo Material
28
Dicionário de Dados - Criar Tabela Transparente
Check Table no Campo Material
Academia – SAP/ABAP R3
© by BBKO Consulting 24
29
Dicionário de Dados - Criar Tabela Transparente
Check Table no Campo Material
- Atribuir uma mensagem de erro para este check table. - Neste caso foi criada uma classe de mensagem ZCURSO_00, com
número de mensagem 001, através da Transação SE91
Academia – SAP/ABAP R3
© by BBKO Consulting 25
34
Dicionário de Dados - Chaves -Primárias e Estrangeira
Chave Primária
Chave Secundária / Alternativa
Chave Estrangéira
31
Dicionário de Dados - Chaves – Primárias e Estrangeira
Tabela ZFUNCMand AreaSalarioNomeCod DeptoCodFunc
Check Table ZDEPTOMand CodDepto Fone Fax
Campos ChavesChave Primária
Check TableChave Estrangeira
Campos ChavesChave Primária
Academia – SAP/ABAP R3
© by BBKO Consulting 26
32
Dicionário de Dados - Criar Tabela Transparente
Configurações Técnicas
Academia – SAP/ABAP R3
© by BBKO Consulting 27
33
Dicionário de Dados - Criar Tabela Transparente
Opções Técnicas
Ø Opções Técnicas: Data Class – Define a área física do banco de dados, na qual a tabela deve
ser armazenada (no Oracle é o tablespace). Size category – Define o tamanho do armazenamento esperado para esta tabela no banco de dados. Buffering – define se e como a tabela deve ser ‘bufferizada’. Logging – Modificações na entrada da tabela são armazenadas, mas também tem que setar o parâmetro ‘rec/client’ (pode provocar ‘gargalos’ no sistema (devido a esses adicionais acessos).
Academia – SAP/ABAP R3
© by BBKO Consulting 28
34
Dicionário de Dados - Criar Tabela Transparente
Ativar Tabela
Ø Ao selecionar o ícone
ativar no ABAP Dicitionary, a tabela transparente é automaticamente criada no banco de dados. A tabela no banco de dados possui o mesmo nome da tabela no ABAP Dictionary. O campo tem também os mesmos nomes e os tipos do campo no ABAP Dicitionary são convertidos para os tipos de dados correspondentes no sistema do banco de dados.
Academia – SAP/ABAP R3
© by BBKO Consulting 29
35
Dicionário de Dados - Criar Estrutura
36
Dicionário de Dados - Criar Estrutura
Academia – SAP/ABAP R3
© by BBKO Consulting 30
37
Dicionário de Dados - Criar Estrutura
Pasta “Componentes”
38
Dicionário de Dados - Criar Estrutura
Pasta “Campos moeda/quantidade”
Na criação da estrutura não precisa definir o mandante, pois armazena os dados somente em tempo de execução.
Academia – SAP/ABAP R3
© by BBKO Consulting 31
43
Tabela Interna
44
Tabela Interna - Conceito
Áreas de memória chamadas “Tabelas Internas”, sãoutilizada para realizar alguns processamentos no ABAP.Nessas áreas de memória são alocados dados que existem(ou existirão) apenas em tempo de execução do programa,e que podem variar de uma execução para outra ou aindadurante a mesma execução.
Academia – SAP/ABAP R3
© by BBKO Consulting 32
45
Tabela Interna - Conceito
No dia-a-dia do programador as tabelas internas têm um papel fundamental, pois é através delas que se manipula amaior parte dos dados de um programa. Além disso, são defácil manuseio, sendo sua declaração (de tipos, estrutura) eatribuição de conteúdo (valores) muito simples. É possível,por exemplo, declarar uma tabela interna com a mesmaestrutura (tipos, campos, etc.) de uma tabela do banco dedados (físico – tabelas transparentes), e, através de umcomando “SELECT”, copiar todo o conteúdo da tabela dobanco de dados para a tabela interna.
46
Dicas - Tabela Interna - Conceito
As tabelas internas possuem uma área de trabalhochamada Header” (cabeçalho), que permite o acesso e usomais flexível dos registros da mesma. O comando “LOOP”,por exemplo, ao “varrer/ler” uma tabela interna registro aregistro, envia o registro corrente para o “Header”,permitindo que o programador manipule esse registro dediversas maneiras.
Exemplo: Imprimí-los na tela(comando WRITE), utilizandoseus campos para executar cálculos, comparar valores, etc.
Academia – SAP/ABAP R3
© by BBKO Consulting 33
47
Dicas - Field String x Tabela Interna
Field StringCod Cliente Nome Cidade Rua Bairro
Tabela InternaCod Cliente Nome Cidade Rua Bairro
Academia – SAP/ABAP R3
© by BBKO Consulting 34
49
Dicas - Field String e Tabela Interna
Declarando Tabelas Internas
* Declaração de TiposTYPES : begin of type_clientes,
kunnr TYPE kna1-kunnr,name1 TYPE kna1-name1, addrnr TYPE kna1-addrnr,
end of type_clientes.
* Declaração de Tabelas InternasData : tg_clientes TYPE TABLE OF type_clientes.
50
Dicas - Tabela Interna
Operações em tabelas internas:Exemplos: Utilizando a tabela interna T_CLIENTES:
1.READ TABLE TG_CLIENTES INTO ST_CLIENTES INDEX 2.READ TABLE TG_CLIENTES INTO ST_CLIENTES WITH KEY kunnr = v_codcli.
2.LOOP at tg_clientes INTO st_clientes . ... ENDLOOP.
3.ST_CLIENTES-name1 = ‘Phonecell telefonia celular’.MODIFY tg_clientes FROM st_clientes WHERE kunnr = vg_codcliente.
4.DELETE tg_clientes WHERE kunnr = vg_codcliente.
5.APPEND st_clientes TO tg_clientes.
Academia – SAP/ABAP R3
© by BBKO Consulting 35
51
Dicas - Tabela Interna
Operações em tabelas internas:Exemplos: Utilizando a tabela interna TG_CLIENTES:
6. COLLECT st_clientes INTO tg_clientes.
7. SORT tg_clientes BY kunnr name1 . (Ordena a tabela interna)
8. CLEAR st_clientes. (Limpa todo o conteúdo da estrutura)
9. REFRESH tg_clientes.(Deleta todos os registros da tabela interna, porem o espaço de memória ainda fica ocupada)
10.FREE tg_clientes. Deleta todos os registros da tabela interna, limpa a memória)
11. DESCRIBE TABLE tg_clientes LINES vg_linhas (carrega o número de registros da tabela interna na variável vg_linhas)
52
Dicas - Tabela Interna – APPEND <tab> X COLLECT <tab>
APPEND <TAB> COLLECT <TAB>
Cod Func SalárioCod Depto
9944 1000,00HR
9944 1000,00HR
9933 500,00INFO
0100 2000,00FINAN
Cod Func SalárioCod Depto
9944 1000,00HR
9944 1000,00HR
9933 500,00INFO
0100 2000,00FINAN
-Grava o conteúdo da estrutura no fim da tabela interna
Inclui a estrutura ou como uma nova entrada na tabela interna ou adiciona numa entrada já existente desde que tenhaa mesma estrutura. Soma os campos do
tipo P,I e F)
2000,00
Academia – SAP/ABAP R3
© by BBKO Consulting 36
Capítulo 4 – ABAP Open SQL
47
Open SQL
48
ABAP Open SQL - Acessando a base de dados
• SELECT• INSERT• DELETE• UPDATE• MODIFY
Academia – SAP/ABAP R3
© by BBKO Consulting 37
55
ABAP Open SQL – Select – Sintax
SELECT matnrINTO TABLE tg_maraFROM maraWHERE matnr = p_matnr.
Campos Selecionados
Destino dos dados (Tabela Interna)
Origem dos dados (Tabela Transparente)
Condição para a seleção dos dados
TYPES: BEGIN OF type_mara,matnr TYPE mara-matnr,
END OF type_mara.
TYPES: BEGIN OF type_mara,matnr TYPE mara-matnr,flag(1) TYPE c,
END OF type_mara.
DATA tg_mara TYPE TABLE OF type_mara
Ex. Declarações para tabela interna
Academia – SAP/ABAP R3
© by BBKO Consulting 38
49
ABAP Open SQL - Acesso ao Banco de Dados
DicionárioABAP Open SQL Banco de Dados
Relatório
Programa ABAP
- Para ler os dados das tabelas do banco de dados, você precisa utilizar o comando SELECT - O ABAP contém comandos similares ao do SQL padrão, na qual você pode acessar seu banco de dados. ABAP OPEN SQL tem as seguintes características:
- Sintaxe corresponde à sintaxe do SQL padrão - O ABAP SQL é um subconjunto do SQL padrão - O ABAP SQL contém SAP short forms
- As tabelas devem ser definidas no Repositório ABAP e tem chave primária.
Academia – SAP/ABAP R3
© by BBKO Consulting 39
57
ABAP Open SQL - Acesso ao Banco de Dados
Acesso de um registro – SELECT SINGLE•Seleciona dados do cliente código 10
Report ZSQL.Tables: KNA1
Data: vg_kunnr like kna1-kunnr,vg_name1 like kna1-name1,vg_addrnr like kna1-addrnr.
SELECT SINGLE KUNNR “Código do clienteNAME1 “NomeADDRNR “Rua e Nr.
INTO (vg_kunnr, vg_name1, vg_addrnr)FROM kna1 “Tabela transparente de
clientesWHERE kunnr = ‘0000000010’.
Para fazer SELECT SINGLE, você precisa passar como parâmetro na condição ‘WHERE’ a chave completa da tabela transparente.Neste exemplo acima, os campos selecionados foram armazenados em variáveis de memória, declarados no comando ‘DATA’
58
ABAP Open SQL - Acesso ao Banco de Dados
Processa em LOOP – SELECT e ENDSELECT* Seleciona os clientes de São Paulo
SELECT *
FROM kna1 “Tabela de clientesWHERE land1 = ‘BR’ AND
regio = ‘SP’.
MOVE-CORRESPONDING kna1 TO st_clientes.APPEND st_clientes TO tg_clientes.
ENDSELECT.
Acessa a tabela e a cada registro encontrado, atendendo a condição ‘WHERE’ os dados são movidos para uma tabela interna.
Academia – SAP/ABAP R3
© by BBKO Consulting 40
59
ABAP Open SQL - Acesso ao Banco de Dados
Move campos para tabela interna, não fica em LOOPING
INTO TABLE: Lê os registros da tabela e move para uma tabela interna. Sobrepõe os registros existentes.APPENDING TABLE: não sobrepõe os registros existentes, ele move para o fim da tabela interna.
* Seleciona documentos de venda dos clientes de São Paulo
SELECT KNA1~KUNNR “Código do clienteKNA1~NAME1 “NomeVBAK~VBELN “Numero do documento de venda
INTO TABLE tg_docvendasFROM kna1 “Tabela de clientesINNER JOIN vbak ON vbak~kunnr = kna1~kunnrWHERE kna1~land1 = ‘BR’ AND
kna1~regio = ‘SP’.
60
ABAP Open SQL - Join entre TabelasINNER JOIN
SELECT mara~matnr makt~maktxINTO TABLE tg_materiaisFROM mara
INNER JOIN makt ON makt~matnr = mara~matnr ANDmakt~spras = sy-langu
WHERE mara~matnr = p_matnr.
Tabela MAKTMand MAKTXMATNRSPRAS
Check Table MARAMand MATNR
Campos ChavesChave Primária
Check TableChave Estrangeira
Campos ChavesChave Primária
Academia – SAP/ABAP R3
© by BBKO Consulting 41
61
ABAP Open SQL - Join entre TabelasFOR ALL ENTRIES
SELECT matnr
INTO TABLE tg_mara
FROM mara
WHERE matnr = p_matnr.
IF sy-subrc = 0.SELECT matnr maktx
INTO TABLE tg_makt
FROM makt
FOR ALL ENTRIES IN tg_mara
WHERE matnr = tg_mara-matnr.
ENDIF.
Obs. A tabela interna utilizada no FOR ALL ENTRIES NUNCA deve
estar vazia no momento da seleção. Pois isso irá acarretar a seleção de
todos os registros da tabela utilizada na clausula FROM.
53
ABAP Open SQL - Acesso ao Banco de Dados
Acesso: InsertTABLES ZTABELA
ZTABELA-MATNR = ‘10'. ZTABELA-CAMPO2 = ‘002'. ZTABELA-CAMPO3 = ‘INSERT'.
INSERT INTO ZTABELA VALUES ZTABELA.
Academia – SAP/ABAP R3
© by BBKO Consulting 42
54
ABAP Open SQL - Acesso ao Banco de Dados
Acesso: DeleteTABLES ZTABELA.
DELETE FROM ZTABELAWHERE MATNR = ‘10'.
64
ABAP Open SQL - Acesso ao Banco de Dados
Acesso: UpdateUPDATE ZTABELA
SET CAMPO2 = '002‘CAMPO3 = ‘UPDATE'
WHERE MATNR = ‘20'.
Academia – SAP/ABAP R3
© by BBKO Consulting 43
65
ABAP Open SQL - Acesso ao Banco de Dados
Acesso: ModifyTABLES ZTABELA.
ZTABELA-MATNR = ‘30'. ZTABELA-CAMPO2 = ‘002'. ZTABELA-CAMPO3 = ‘MODIFY'.
MODIFY ZTABELA.
Comando MODIFY: ou altera um registro com a chave já existente ou se não existe, adiciona um novo.
Academia – SAP/ABAP R3
© by BBKO Consulting 44
66
Tipos de Programas
58
Dicas - Tipos de Programas
• Relatórios- O programa consiste em duas telas, a primeira tela é chamada
de tela de seleção (selection screen) , nesta tela você define os critérios do relatório e filtros. A segunda tela é a tela de saída, contém a lista.
• Programas de Diálogo (Dialog / On-Line)- O programa pode ter várias telas, em cada tela você pode ter
dados de entrada, saída, botões, table control...
• Includes
Academia – SAP/ABAP R3
© by BBKO Consulting 45
59
Dicas - Editor ABAP
Transação SE38, para Relatórios/Includes
-Os relatórios consistem em cinco componentes: - Código Fonte - As Características - Os elementos de texto - A documentação - As variantes
Academia – SAP/ABAP R3
© by BBKO Consulting 46
69
Dicas - Declarações “Básicas” nos programas ABAP
- Tables – Define tabelas ou estruturas com o mesmo nome existente no Dicionário de Dados.
- Types – Definição de Tipos de Dados.- Data - Define campos, variável ou string de campo.- Constants – Define um campo/variável com valor constante, ou seja, não
poderá ser alterado.
Exemplo:Report Zteste.Tables: Mara.
Types: type_campo2(2) type c,type_documento like bseg-ebeln.
Data: vg_campo1 type type_campo2 value ‘XX’,vg_campo2 type type_documento.
Constants c_X(1) type c value ‘X’.
Academia – SAP/ABAP R3
© by BBKO Consulting 47
Capítulo 5 – Tela de Seleção
63
Tela de Seleção
62
Tela de Seleção
• Tela de Seleção• Eventos da Tela de Seleção
Academia – SAP/ABAP R3
© by BBKO Consulting 49
64
Tela de Seleção - Exemplo de Select-options
-Internamente é gerada uma tabela interna so_func com 4 colunas: - SIGN ( I – Include / E – Exclude) - OPTION (EQ,NE,CP,NP,GE,LT,LE,GT, BT ) - LOW ( Intervalo – menor valor) - HIGH ( Intervalo – maior valor)
-Você pode inicializar os valores do select-option no evento initialization, por exemplo: INITIALIZATION. MOVE: 'I' TO SO_FUNC-SIGN, 'EQ' TO SO_FUNC-OPTION, ’1’ TO SO_FUNC-LOW. APPEND SO_FUNC.
Academia – SAP/ABAP R3
© by BBKO Consulting 50
66
Tela de Seleção - Selection-screen em blocos
SELECTION-SCREEN BEGIN OF BLOCK <block>... WITH FRAME... TITLE title
SELECTION-SCREEN END OF BLOCK <block>
SELECTION-SCREEN BEGIN OF BLOCK entre WITH FRAME TITLE text-001.parameters:* Nome do arquivo entrada
p_arqori like rlgrap-filename obligatory.parameters :
p_asc radiobutton group g1 default 'X', " Tipo ASCp_dat radiobutton group g1. " Tipo DAT
parameters :p_pc radiobutton group g3 default 'X', " Tipo PCp_unix radiobutton group g3. " Tipo UNIX
SELECTION-SCREEN END OF BLOCK entre.
67
Tela de Seleção - Eventos da Tela de seleção
Academia – SAP/ABAP R3
© by BBKO Consulting 51
68
Tela de Seleção - Eventos em Bloco
Parameters: p_data like sy-datum default sy-datum.
Initialization. “Seta valores para a tela de seleçãop_data = p_data – 10.
Start-of-Selection. “Início do processamento dos dadosWrite: p_data.
Report Z...
A seqüência dos eventos no código fonte não tem efeito na sequencia na qual eles são chamados pelo ABAP Runtime System
71
Dicas
Academia – SAP/ABAP R3
© by BBKO Consulting 52
70
Dicas - Processando Strings
ExampleDATA letters(3) TYPE C. MOVE 'abc' TO letters. TRANSLATE letters TO UPPER CASE.
letters now has the contents 'ABC'
ExampleDATA: letters(20) TYPE C VALUE 'abcabcabcXabc',
change(15) TYPE C VALUE 'aXbaYBabZacZB'. TRANSLATE letters USING change.
letters now contains 'XaZXaZXaZXXaZ'
71
Dicas - Processando Strings
ExemploDATA NAME (30).
NAME(10) = ' Dr.', NAME+10(10) = 'Michael', NAME+20(10) = 'Hofmann'.
CONDENSE NAME. WRITE NAME.
produces the output: Dr. Michael Hofmann
Exemplo:Alinha o material a direita e preenche com zeros a esquerda
SHIFT V_MATNR RIGHT DELETING TRAILING SPACE.
REPLACE ' ' WITH '0' INTO V_MATNR.
Academia – SAP/ABAP R3
© by BBKO Consulting 53
72
Dicas – LOOP´s
• DO ... ENDDO
• WHILE ... ENDWHILE
• LOOP ... ENDLOOP
• SELECT ... ENDSELECT
Academia – SAP/ABAP R3
© by BBKO Consulting 54
Capítulo 6 – Listas
84
Listas
82
Listas
• Formatação de Saída das Listas• Definir o Formato das listas• Armazenar Listas• Imprimir Listas• Controle de Nível das Listas, utilizando tabela Interna
Academia – SAP/ABAP R3
© by BBKO Consulting 55
83
Listas - Formatação das Listas
• Parâmetros de Saída:– Write ...– Format ...– New-Page ...
• Eventos– TOP-OF-PAGE.– END-OF-PAGE.
• Elementos de Texto– Text Symbols– Heading– Selection texts
• System fields (tabela Syst)
Academia – SAP/ABAP R3
© by BBKO Consulting 56
84
Listas - Exemplo dos comandos
Report Rel1.DATA: DATUM Type D,
TIME TYPE T.
DATUM = SY-DATUM.TIME = SY-UZEIT.
WRITE: 5 ‘Data’(001),20 DATUM DD/MM/YYYY.
WRITE: /5 ‘Hora’ (002),TIME using edit mask ‘_ _:_ _:_ _’under datum.
-WRITE: -Comando que gera saída de dados no relatório. -Exemplo: WRITE 'Hello, here I am!'.
-System fields (tabela SYST): -Alguns campos da tabela SYST são interessantes para uso em reports:
-SY-PAGNO: -Números da pagina.
-SY-DATUM: -Data atual.
-SY-UZEIT: -Hora atual.
-SY-UNAME: -Usuário do login.
Academia – SAP/ABAP R3
© by BBKO Consulting 57
85
Listas - Exemplo usando ‘Format’
Report Rel1.DATA: DATUM Type D,
TIME TYPE T.
DATUM = SY-DATUM.TIME = SY-UZEIT.
Format color col_normal.WRITE: 5 ‘Data’(001),
20 DATUM DD/MM/YYYY.Format color off.WRITE: /5 ‘Hora’ (002),
TIME using edit mask ‘_ _:_ _:_ _’under datum.
-FORMAT: -Através do FORMAT pode-se manipular o formato dos dados a serem apresentados com WRITE. Pode-se controlar a cor, intensidade, etc.
Academia – SAP/ABAP R3
© by BBKO Consulting 58
86
Listas - Exemplo usando ‘New Page’
Com o parâmetro New-Page, você pode forçar uma nova página. O contador de página é ajustado automaticamente e o cabeçalho específico é
exibido.
Report Rel1.DATA: DATUM Type D,
TIME TYPE T.
* Nova páginaNEW_PAGE.Write: /5 ’Usuário’(003), sy-uname,
80 text-001, sy-page. “Página
DATUM = SY-DATUM.TIME = SY-UZEIT.
Format color col_normal.WRITE: 5 ‘Data’(001),
20 DATUM DD/MM/YYYY.Format color off.WRITE: /5 ‘Hora’ (002),
TIME using edit mask ‘_ _:_ _:_ _’under datum.
-NEW-PAGE: -Salta uma pagina do relatório.
Academia – SAP/ABAP R3
© by BBKO Consulting 59
87
Listas - Top-of-page e End-of-page
Você pode usar o parâmetro NO STANDARD PAGE HEADING no parâmetro do REPORT para desabilitar a linha de cabeçalho do sistema.
Se uma nova página é iniciada o sistema chama o evento TOP-OF-PAGE.
Report Rel1 NO STANDARD PAGE HEADINGline-size 132line-count 15.
DATA: DATUM Type D,TIME TYPE T.
* Nova páginaTOP-OF-PAGE.Write: /5 ’Usuário’(003), sy-uname,
80 text-001, sy-pagno. “Página
END-OF-PAGE.ULINE.WRITE: /10, TEXT-001. “FIM DE PÁGINA
DATUM = SY-DATUM.TIME = SY-UZEIT.
Format color col_normal.WRITE: 5 ‘Data’(001),
20 DATUM DD/MM/YYYY.Skip 2. “Pula duas linhasFormat color off.WRITE: /5 ‘Hora’ (002),
TIME using edit mask ‘_ _:_ _:_ _’under datum.
O END-OF-PAGE não ocorre quando a quebra de páginafoi chamada por um evento NEW-PAGE. O tamanho daPágina deve ser determinado pelo parâmetro do line-countPara chamar o bloco do processamento do END-OF-PAGE
-Eventos: -Eventos são identificados por uma palavra-chave de evento, ou seja, o próprio nome do evento. Eles terminam onde o bloco do próximo evento começa. O próximo bloco deve ser uma outra palavra-chave de evento, ou algum outro bloco de processamento valido no contexto, como uma sub-rotina ou modulo de dialogo. Os principais eventos para processamento de relatórios são:
-INITIALIZATION: -Próprio para inicializar os campos da tela de seleção. E executado antes da exibição da tela.
-START-OF-SELECTION: -Neste evento e colocada a lógica principal da montagem do relatório. E executado logo apos a tela de seleção.
-END-OF-SELECTION: -E executado apos o START-OF-SELECTION, antes da apresentação da lista.
Academia – SAP/ABAP R3
© by BBKO Consulting 60
88
Listas - Armazenar Listas
• Você pode armazenar listas resultante de programa
Academia – SAP/ABAP R3
© by BBKO Consulting 61
89
Listas - Enviar diretamente p/ impressora
O parâmetro NEW-PAGE PRINT ON envia a lista para o SAP spool databaseO parâmetro NO DIALOG desabilita a exibição da tela de parâmetros de
impressão.
Report rel3.
NEW-PAGE PRINT ONNO DIALOGDESTINATION ‘LPT1’IMMEDIATELY ‘X’.
WRITE: / ....
91
Listas - Controle de Nível: Tabela Interna
• Ao processar tabelas internas com o comando LOOP, você pode executar processamentos com nível de controle, utilizando tais parâmetros:
- AT FIRST- AT NEW- AT END OF- AT LAST
Obs.: O campo da tabela interna utilizado nos comandos AT NEW e AT END OF tem que ser o primeiro campo da tabela interna e a mesma deve estar ordenada.
Academia – SAP/ABAP R3
© by BBKO Consulting 62
92
Listas - Controle de Nível: Tabela Interna
Report rel4.TABLES KNA1....DATA TG_ITAB TYPE TABLE OF TYPE_ITABE.
DATA ST_ITAB TYPE TYPE_ITABE....
SORT TG_ITAB BY ORT01 NAME1 ADDRNR .LOOP AT TG_ITAB INTO ST_ITAB.
AT NEW ORT01.WRITE: / ST_ITAB-ORT01.
ENDAT.AT END OF ORT01.
ULINE.WRITE: / ST_ITAB-ORT01.
ENDAT.ENDLOOP.
Obs.: O campo ORT01 neste exemplo tem que ser o primeiro campo da tabela interna
ITAB.
LOOP AT ITABAT FIRST. ... ENDAT. AT NEW < campo> ... ENDAT.AT END OF < campo> ... ENDAT.AT LAST. ... ENDAT.
ENDLOOP
93
Listas - Controle de Nível: ON CHANGE
Para o comando ON CHANGE o campo da tabela interna não precisa ser o primeiro.
TABLES T100. SELECT * FROM T100 WHERE SPRSL = SY-LANGU AND
MSGNR < '010' ORDER BY PRIMARY KEY.
ON CHANGE OF T100-ARBGB. ULINE. WRITE: / '***', T100-ARBGB, '***'.
ENDON. WRITE: / T100-MSGNR, T100-TEXT.
ENDSELECT.
Report rel4.TABLES KNA1....DATA TG_ITAB TYPE TABLE OF TYPE_ITAB.DATA ST_ITAB TYPE TYPE_ITAB....
SORT TG_ITAB BY ORT01 NAME1 ADDRNR .LOOP AT TG_ITAB INTO ST_ITAB.
ON CHANGE ST_ITAB-ORT01.WRITE: / ST_ITAB-ORT01.
ENDON.ENDLOOP.
Academia – SAP/ABAP R3
© by BBKO Consulting 63
96
Dicas
94
Dicas - Comando Message
Message Ennn with <field1> <field2> <field3> <field4> (<message-class>)
Tipo de mensagens:E – ErroA – AbendX – Exit (termina com um short Dump)W – WarningI – InformaçãoS - Sucesso
No parâmetro “REPORT” pode-se acrescentar o parâmetro “MESSAGE-ID”.Exemplo: REPORT ZSDR0010 NO STANDARD PAGE HEADING
LINE-SIZE 132LINE-COUNT 65MESSAGE-ID ZSD.
Academia – SAP/ABAP R3
© by BBKO Consulting 64
Capítulo 7 – Listas Secundárias
98
Listas Secundárias
Academia – SAP/ABAP R3
© by BBKO Consulting 65
96
Listas Secundárias
-O ABAP runtime system : - Exibe a lista básica. A variável de sistema SY-LSIND = 0 (contador de lista) - Neste exemplo, se você “clicar” duas vezes sobre uma linha da lista básica, será exibido detalhes desta linha, isso através do evento “AT-LINE-SELECTION”
Academia – SAP/ABAP R3
© by BBKO Consulting 66
97
Listas Secundárias - Como selecionar
98
Listas Secundárias - Exemplo do comando HIDE
HIDE <data object>
123
Line1
2
3
Line
Hide Area
WA_ZFUNC-NUM_ID
0000000001
0000000002
0000000003
Academia – SAP/ABAP R3
© by BBKO Consulting 67
99
Listas Secundárias - Exemplo
Duplo click na linha do relatório, ou clicar no ícone
Traz dados da Lista Secundária
SY-LSIND = 0
SY-LSIND = 1
SY-LSIND = variável de sistema de indica o índice da lista corrente
Academia – SAP/ABAP R3
© by BBKO Consulting 68
100
Listas Secundárias - Exemplo
101
Listas Secundárias - Lista Secundária com GUI STATUS
Lista Básica
Lista Secundária
Academia – SAP/ABAP R3
© by BBKO Consulting 69
102
Listas Secundárias - GUI Title e GUI Status
103
Listas Secundárias - Menu Painter –SE41
Academia – SAP/ABAP R3
© by BBKO Consulting 70
104
Listas Secundárias - Menu Painter
105
Listas Secundárias - Gui Status (exemplo: LIST)
Academia – SAP/ABAP R3
© by BBKO Consulting 71
106
Listas Secundárias - Barra de Menu
107
Listas Secundárias - Barra de Ferramentas da Aplicação
Academia – SAP/ABAP R3
© by BBKO Consulting 72
108
Listas Secundárias - Menu Standard
110
Listas Secundárias - Lista Secundária com GUI STATUS
REPORT ZTESTE_LISTA_SEC_II .TABLES: mara, makt.
TYPES: begin of type_mara,matnr like mara-matnr,ersda like mara-ersda,ernam like mara-ernam,
end of type_mara,begin of type_makt,
matnr like makt-matnr,maktx like makt-maktx,
end of type_makt.
DATA: tg_mara TYPE TABLE OF TYPE_MARA,st_mara TYPE TYPE_MARA,st_makt TUPE TYPE_MAKT.
select-options: so_matnr for mara-matnr.***************************************** Evento START-OF-SELECTION****************************************start-of-selection.set pf-status 'LIST'.set titlebar 'LIST'.
SELECT matnr ersda ernamFROM maraINTO TABLE tg_mara
WHERE matnr in so_matnr.LOOP AT tg_mara INTO st_mara.
WRITE: /'Material', t_mara-matnr, t_mara-ersda, t_mara-ernam.HIDE: tg_mara.
ENDLOOP.
AT USER-COMMAND.CASE sy-ucomm.WHEN 'TEXTO'.
SET pf-status 'LIST' excluding 'TEXTO'.SET titlebar 'LIST1'.SELECT single matnr maktx
INTO (st_makt-matnr,st_makt-maktx)FROM makt
WHERE matnr = t_mara-matnr ANDspras = 'P '.
WRITE: 'Material lista secundária', st_makt-matnr, st_makt-maktx.ENDCASE.
Academia – SAP/ABAP R3
© by BBKO Consulting 73
Capítulo 8 – Modularização
75
Modularização
74
Modularização
• Sub-rotinas• Grupo de Funções • Funções
Academia – SAP/ABAP R3
© by BBKO Consulting 74
75
Modularização - Subrotinas
Inicio do Programa
Perform carrega_tabUsing Campo 1Changing tab1
....
Form carrega_tabUsing Campo 1Changing tab1
Se no programa ABAP uma sub-rotina é chamada por um comando PERFORM, o sistema interrompe o processamento corrente para processar a sub-rotina. Quando a ultima linha da sub-rotina (ENDFORM), é executada, o sistema continua o processamento do programa, após a linha do comando ‘PERFORM’.
Academia – SAP/ABAP R3
© by BBKO Consulting 75
76
Modularização - Chamando por valor e por referência
Os parâmetros podem ser enviados por referência ou por valor: - Por referencia: o parâmetro destino faz referencia ao endereço do
parâmetro origem. - Por valor: Quando a sub-rotina é chamada, uma variável local é criada e o
conteúdo é copiado, existem dois tipos de chamadas por valor: - chamada por valor: passa apenas os conteúdos - chamada por valor e resultado: passa o conteúdo do campo e toda
alteração efetuada no campo, na sub-rotina e passada de volta.
Academia – SAP/ABAP R3
© by BBKO Consulting 76
77
Modularização - Grupo de Função e Função
Módulo de função são unidades modulares com a interface. A interface pode conter os seguintes elementos:
Parâmetros de Importação: são parâmetros passados para o módulo de função. Em geral, estes são associados aos tipos do Dicionário ABAP. Podem ser opcionais.
Parâmetros de Exportação: são passados do módulo de função para o programa chamador. Parâmetros de exportação são sempre opcionais.
Parâmetros Modificáveis: são passados para o módulo de função e podem ser alterados pela função. Podem ser opcionais.
Exceções: São usados para interceptar erros. Se um erro aciona uma exceção na função, esta função pára. Você pode associar números a exceção no programa, na qual são verificados pelos valores do sy-subrc.
Cada módulo de função pode conter dados locais e acessar dados globais, pertencentes ao grupo de função.
Academia – SAP/ABAP R3
© by BBKO Consulting 77
78
Modularização - Grupo de Função e Função
• Grupo de Funções e Funções
- Um grupo de função é um programa ABAP do tipo F, na qual o programa é criado exclusivamente para conter módulos de função. Os módulos de função podem ser chamados de qualquer programa ABAP.
Academia – SAP/ABAP R3
© by BBKO Consulting 78
79
Modularização - Grupo de Função e Função
Crie grupo de função por ‘assunto’, evite utilizar vários módulos de função num mesmo grupo, pois se alguém estiver codificando um módulo, e você quiser transportar a sua função e eles pertencerem ao mesmo grupo, você só vai conseguir transportar no momento que todos as funções deste grupo estiverem sem erro de sintaxe.
1. Criar o Grupo de função
2. Associar o módulo de função ao Grupo
80
Modularização - Exemplo de programa e função
Academia – SAP/ABAP R3
© by BBKO Consulting 79
119
ALV Grid Control
TYPE-POOLS: slis, kkblo.
DATA: tg_fieldcat TYPE TABLE OF slis_t_fieldcat_alv.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTING
i_callback_program = 'Nome_do_programa' i_grid_title = 'Teste Relatório ALV'it_fieldcat = tg_fieldcat[ ]
TABLESt_outtab = Tabela de Dados
EXCEPTIONSprogram_error = 1OTHERS = 2.
fieldcat-col_pos = '01'.fieldcat-key = 'X'.fieldcat-tabname = 'T_ALV'.fieldcat-fieldname = 'COL_01'.fieldcat-seltext_l = 'Material'.fieldcat-seltext_m = 'Material'.fieldcat-seltext_s = 'Material'.fieldcat-fix_column = 'X'.Append fieldcat.
Academia – SAP/ABAP R3
© by BBKO Consulting 80
Capítulo 9 – Data Transfer
114
Transferência de Dados
111
Transferência de Dados
• Processando Arquivo Seqüencial• Call Transaction• Batch Input
Academia – SAP/ABAP R3
© by BBKO Consulting 81
112
Transferência de Dados - Abrir e ler arquivo sequencial - Inbound
IF p_unix = 'X'.OPEN DATASET p_arqori FOR INPTU IN text MODE MESSAGE v_msg.
DO.READ DATASET P_ARQORI INTO T_DATA_LOAD. "lê um reg. do arquivo
IF SY-SUBRC NE 0. "fim de arquivo/arq. s/ registrosEXIT. "indica fim de arquivo
ENDIF.APPEND T_DATA_LOAD.
ENDDO.ENDIF.
113
Transferência de Dados - Binary Mode e Text Mode
Academia – SAP/ABAP R3
© by BBKO Consulting 82
114
Transferência de Dados - Gerando arquivo seqüencial -Outbound
IF P_UNIX EQ 'X'.
OPEN DATASET V_ARQSAIDA FOR OUTPUT IN TEXT MODE MESSAGE V_MSG.IF SY-SUBRC NE 0.MESSAGE E001(ZI) WITH V_ARQSAIDA V_MSG.
ENDIF.LOOP AT T_SAIDA.TRANSFER T_SAIDA TO V_ARQSAIDA.
ENDLOOP.
CLOSE DATASET V_ARQSAIDA.IF SY-SUBRC NE 0.MESSAGE E011(ZI) WITH V_ARQSAIDA.
ENDIF.ELSEIF P_PC EQ 'X'.
.....
115
Transferência de Dados - Acesso a arquivos externos
Entrada de dados - Inbound
Acesso a arquivo externo via PC, utilizar a função:call function ‘GUI_UPLOAD'
exportingfilename = l_filenamefiletype = v_type
tablesdata_tab = t_data_load
exceptionsconversion_error = 1file_open_error = 2file_read_error = 3invalid_type = 4no_batch = 5unknown_error = 6invalid_table_width = 7gui_refuse_filetransfer = 8customer_error = 9others = 10.
Acesso a arquivo externo via UNIX, utilizar os comandos:OPEN DATASET <arq> FOR INPUT IN TEXT MODE MESSAGE <msg>
DO.READ DATASET P_ARQORI INTO T_DATA_LOAD. "le um reg. do arquivoIF SY-SUBRC NE 0. "fim de arquivo/arq. s/ registros
EXIT. "indica fim de arquivoENDIF.APPEND T_DATA_LOAD.
ENDDO.
Academia – SAP/ABAP R3
© by BBKO Consulting 83
116
Transferência de Dados - Acesso a arquivos externos
Acesso a arquivo externo via UNIX, utilizar os comandos:
OPEN DATASET <arq> FOR INPUT IN TEXT MODE MESSAGE <msg>DO.
READ DATASET P_ARQORI INTO T_DATA_LOAD. "le um reg. do arquivo
IF SY-SUBRC NE 0. "fim de arquivo/arq. s/ registros
EXIT. "indica fim de arquivo
ENDIF.
APPEND T_DATA_LOAD.
ENDDO.
117
Transferência de Dados - Acesso a arquivos externos
Saída de dados - Outbound
Acesso a arquivo externo via PC, utilizar a função:
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = V_ARQSAIDA
TABLESDATA_TAB = T_SAIDA
EXCEPTIONS
OTHERS = 8.
Academia – SAP/ABAP R3
© by BBKO Consulting 84
118
Transferência de Dados - Acesso a arquivos externos
Acesso a arquivo externo via UNIX, utilizar os comandos:
CONCATENATE P_PATH 'arq' SY-DATUM SY-UZEIT+0(4) INTO <arq>.
OPEN DATASET <arq> FOR OUTPUT IN TEXT MODE MESSAGE <msg>
LOOP AT <tab_interna>.
TRANSFER <tab_interna> TO <arq>.ENDLOOP.
CLOSE DATASET <arq>.
119
Transferência de Dados - Transferindo Dados Externos
DadosExternos
SAPINTERFACES BANCO SAP
SAP ( Host )
Academia – SAP/ABAP R3
© by BBKO Consulting 85
120
Transferencia de Dados - Transferindo Dados Externos
ArquivoSeqüêncial
Programa de BATCH INPUT
TabelaBDC
READ DATASET
Estrutura BDCDATA
INCLUDE STRUCTURE
DicionárioABAP/4
FILA
CALL FUNCTION
121
Transferência de Dados - Seqüência p/ Batch Input
ABRIR SESSÃO DE BATCH INPUT
INSERIR DADOS DA TRANSAÇÃO
FECHAR SESSÃO DE BATCH INPUT
Academia – SAP/ABAP R3
© by BBKO Consulting 86
122
Transferência de Dados - Entrada e Saída de Dados
Atualizando dadosUpdate Z_CONTAS set fornecedor = ‘X’Where grupo = 1.
Update não deve ser utilizado para atualizar dados de tabelas Standard do SAP. Toda a atualização deve ser feita através das transações que garantam a integridade da base de dados. Esta atualização é feita através do comando CallTransaction.
Call TransactionWA_BDCDATA-PROGRAM = 'SAPMS38M'. “Informa o nome/numero da telaWA_BDCDATA-DYNPRO = '0100'. WA_BDCDATA-DYNBEGIN = 'X'. APPEND WA_BDCDATA TO BDCDATA.
CLEAR WA_BDCDATA. WA_BDCDATA-FNAM = 'RS38M-PROGRAMM'. “Preenche campos da telaWA_BDCDATA-FVAL = PROGRAM. APPEND WA_BDCDATA TO BDCDATA. ... * Chama a transação com os dados de tela e campos definidos
CALL TRANSACTION 'SE38' USING BDCDATA MODE 'N' MESSAGES INTO ITAB.
123
Transferência de Dados - Entrada e Saída de Dados
Para melhor organizar um programa que utiliza Call Transaction normalmente são criadas funções para preencher a tabela de dados da transação (BDCDATA).
***************************************************************** Rotinas para criação da t_bdc****************************************************************FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR T_BDC.T_BDC-PROGRAM = PROGRAM.T_BDC-DYNPRO = DYNPRO.T_BDC-DYNBEGIN = 'X'.APPEND T_BDC.
ENDFORM.
********************************************
FORM BDC_FIELD USING FNAM FVAL.IF FVAL <> ''.
CLEAR T_BDC.T_BDC-FNAM = FNAM.T_BDC-FVAL = FVAL.APPEND T_BDC.
ENDIF.ENDFORM.
Academia – SAP/ABAP R3
© by BBKO Consulting 87
124
Transferência de Dados - Entrada e Saída de Dados
*********************************************************************** FORM CALL_TRANSACTION**********************************************************************FORM CALL_TRANSACTION TABLES T_BDC_DATA USING W_TCODE.
CALL TRANSACTION W_TCODEUSING T_BDC_DATA MODE 'N' UPDATE 'S'MESSAGES INTO T_MESS.
IF SY-SUBRC NE 0.LOOP AT T_MESS.
PERFORM BDC_MESSAGE.WRITE: / W_MESS.
ENDLOOP.ENDIF.
CLEAR: T_MESS, T_BDC.REFRESH: T_MESS, T_BDC.
ENDFORM. " CALL_TRANSACTION
*********************************************************************** FORM BDC_MESSAGE**********************************************************************FORM BDC_MESSAGE.
CLEAR W_MESS.
125
Transferência de Dados - Entrada e Saída de Dados
SELECT SINGLE * FROM T100WHERE SPRSL = 'P'AND ARBGB = T_MESS-MSGIDAND MSGNR = T_MESS-MSGNR.
W_MESS = T100-TEXT.
STRAUX4 = T_MESS-MSGV1.REPLACE '&' WITH STRAUX4 INTO W_MESS.CONDENSE W_MESS.
STRAUX4 = T_MESS-MSGV2.REPLACE '&' WITH STRAUX4 INTO W_MESS.CONDENSE W_MESS.
STRAUX4 = T_MESS-MSGV3.REPLACE '&' WITH STRAUX4 INTO W_MESS.CONDENSE W_MESS.
STRAUX4 = T_MESS-MSGV4.REPLACE '&' WITH STRAUX4 INTO W_MESS.CONDENSE W_MESS.
ENDFORM.
Academia – SAP/ABAP R3
© by BBKO Consulting 88
126
Transferência de Dados - Entrada e Saída de Dados
Exemplo de código para chamada de Call Transaction a partir das funções criadas :
...PERFORM BDC_DYNPRO USING 'SAPMM07I' '0721'.PERFORM BDC_FIELD USING 'BDC_OKCODE' '=BU'. “SalvarPERFORM BDC_FIELD USING 'BDC_CURSOR' 'ISEG-
MATNR(01)'.
PERFORM CALL_TRANSACTION TABLES T_BDC USING 'MI01'.
O nome do campo na tela pode ser verificado clicando-se F1 sobre o campo acessando a opção Informações Técnicas. O nome do campo encontra-se em Denominação do campo para batch input.
Além dos campos de tela existem dois campos especiais :
BDC_CURSOR : Para indica a posição do cursorBDC_OKCODE : Para indicar a operação a realizar após o
preenchimento da tela.
127
Transferência de Dados - Entrada e Saída de Dados
Batch Input
O programa cria uma pasta ou arquivo contendo os dados da tabela BDC_DATA (mesma utilizada no Call Transaction).
Esta será processada posteriormente através da transação SM35.
CALL FUNCTION 'BDC_OPEN_GROUP'EXPORTING CLIENT = SY-MANDT
GROUP = NOMEPASTAUSER = USERKEEP = KEEPHOLDDATE = HOLDDATE.
CALL FUNCTION 'BDC_INSERT'EXPORTING TCODE = TCODETABLES DYNPROTAB = T_BDCDATA.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
Academia – SAP/ABAP R3
© by BBKO Consulting 89
128
Transferência de Dados - Programa Inbound
• Passos para criar programa Inbound– Executar a transação SHDB:
• Juntamente com o Funcional executar a transação desejada e preencher os campos necessários
– Após mapear os campos necessários, definir o layout do arquivo .txt de entrada
– Criar a especificação técnica– Criar o programa de Inbound
Obs: Segue exemplo: transação MM02 (alteração de material) onde vamos apenas alterar a descrição dos materiais
129
Transferência de Dados - Transação SHDB
Academia – SAP/ABAP R3
© by BBKO Consulting 90
130
Transferência de Dados - Transação SHDB
131
Transferência de Dados - Transação SHDB
Academia – SAP/ABAP R3
© by BBKO Consulting 91
132
Transferência de Dados - Transação SHDB
133
Transferência de Dados - Transação SHDB
Academia – SAP/ABAP R3
© by BBKO Consulting 92
134
Transferência de Dados - Transação SHDB
135
Transferência de Dados - Layout do arquivo de entrada
Arquivo .txt de entrada (para este exemplo do SHDB, executado):
Seq Campo Tipo1 – Código do material – char 18 posições, alinhado a esquerda
2 – Descrição do Material – char 40 posições
Academia – SAP/ABAP R3
© by BBKO Consulting 93
136
Transferência de Dados - Tela com parâmetros de Batch Input
137
Transferência de Dados - SM35-Executar pasta de Batch Input
Academia – SAP/ABAP R3
© by BBKO Consulting 94
- Tem três opções de executar a pasta: Processamento visível (Foreground visualizando as telas), Oculto (background), Exibir só erros (quando ocorrer erro mostra a tela)
-Quando executa a pasta Batch Input em foreground, significa que está
rodando a transação com todos os dados mapeados no programa, preenchidos, apenas teclar < ENTER >.
- Caso queira cancelar o processamento em foreground do registro corrente, digitar no campo de comando < /n>.
- Caso queira cancelar o processamento em foreground, digitar no campo de comando < /bend>
138
Transferência de Dados - SM35
Academia – SAP/ABAP R3
© by BBKO Consulting 95
Capítulo 10 – Programação On-Line
143
Programação On-Line
Academia – SAP/ABAP R3
© by BBKO Consulting 96
140
Programação On-line - Module-pool
• Partes de uma tela
AtributosDa Tela
Screen NumberShort DescriptionScreen typeNext Screen...
LayoutDa Tela
Screen NumberShort DescriptionScreen typeNext Screen...
Atributos dos campos
Field NameTypeLength...
Controle do Fluxo
Process Before Output.Module Clear-ok_code.
Controle do Fluxo
Process After InputModule User_Command_0100
Os principais processos de criar uma tela: - Especificar as suas propriedades (Atributos da tela) - Especificar o layout (Editor Fullscreen) - Definir os atributos dos elementos da tela (Field List) - Programar o seu fluxo lógico - O Fluxo lógico é dividido em dois eventos para cada tela:
- O PROCESS BEFORE OUTPUT evento (PBO), é executado antes da tela ser apresentada.
- O PROCESS AFTER INPUT evento (PAI), é executado após o usuário ter acionado algum botão ou disparado algum evento na tela anteriormente apresentada.
Academia – SAP/ABAP R3
© by BBKO Consulting 97
141
Programação On-line - Criação de um Dialog Program
Código do ClienteCódigo do Cliente
Nome
Endereço
Nome
Endereço
- Dialog Program que mostrará dados do Cliente. - Neste exemplo, a primeira tela, o usuário entrará com código do funcionário. (chave da tabela), e na segunda tela, será mostrado o conteúdo dos campos referentes à tabela ao funcionário.
Academia – SAP/ABAP R3
© by BBKO Consulting 98
142
Programação On-line – Chamada dinâmica da próxima tela
Tela 100Próxima tela 200
Tela 300Próxima tela 400
PAI
Module ...Set Screen 300.Leave Screen.
Endmodule.
PBO
O comando SET SCREEN <nnnn> sobrepõe temporariamente o atributo ‘próxima tela’.Para executar a chamada a outra tela em um único programa pode ser feito desta forma: “LEAVE TO SCREEN < nnnn>”
PAI
Module ...Set Screen 0.Leave Screen.
Endmodule.
O comando SET SCREEN 0 e LEAVE Screen volta para a tela que chamou, no caso tela 300.
PBO
Academia – SAP/ABAP R3
© by BBKO Consulting 99
143
Programação On-line - Programa Lógico
Você pode definir um campo OK_CODE como um campo da tela. Neste campo conterá o código de função do botão selecionado na tela. Para evitar erros de campo OK_CODE não inicializado, você deve criar um campo auxiliar que salva o conteúdo do OK_CODE e então você inicializa o campo OK_CODE e ‘trabalha’ com o campo auxiliar.
Academia – SAP/ABAP R3
© by BBKO Consulting 100
144
Programação On-line - Dialog Program– Seq Ações
ã
Sequência de Ações
PROCESS BEFORE OUTPUT. MODULE A.
PROCESS AFTER INPUT. MODULE B.
ScreenPainter
Execute module AExecute module A
Execute module BExecute module B
Action sequence
Data transport fromData transport fromABAP/4 to screenABAP/4 to screenwork areawork area
Send screenSend screen
ENTERENTER
Data transport fromData transport fromscreen to ABAP/4screen to ABAP/4work areawork area
- Quando todos os módulos do PBO terminarem a execução, os conteúdos dos campos na Work Área do ABAP são copiados para a Work Área da tela em nomes idênticos. - Antes do PAI ser processado, os conteúdos dos campos na Work Área da tela são copiados para a Work Área do ABAP em nomes idênticos.
Academia – SAP/ABAP R3
© by BBKO Consulting 101
146
Programação On-line - Atributos da tela
ã
Modificações Dinâmicas em Telas
Change <-> Display
AB
Change <-> Display
AB
output field input andoutput field
- Podem ser feitas mudanças temporárias em certos atributos de campos. Ex.: Fazer com que um campo com atributo de display somente, seja alterado para receber entrada de digitação etc. - Esta facilidade faz com que possam ser utilizadas as mesmas telas, somente com a alteração dos atributos dos seus campos, desta forma a quantidade de telas é reduzida consideravelmente.
Academia – SAP/ABAP R3
© by BBKO Consulting 102
146
Programação On-line - Atributos da tela
ã
Atributos modificábeis da tabela SCREENSCREEN-NAME Field nameSCREEN-GROUP1SCREEN-GROUP2SCREEN-GROUP3SCREEN-GROUP4
SCREEN-REQUIRED
SCREEN-INPUT
SCREEN-OUTPUT
SCREEN-INTENSIFIED
SCREEN-INVISIBLE
SCREEN-LENGTH
SCREEN-ACTIVE
SCREEN-DISPLAY_3D
SCREEN-VALUE_HELP
SCREEN-REQUEST
Modification group 1Modification group 2Modification group 3Modification group 4
Required field
Input field
Output field
Highlighted field
Invisible field
Field length
Active field
3-dimensional field
Field with value help
Input exists (PAI only)
- Os campos da tela e seus respectivos atributos são armazenados automaticamente em uma tabela interna (do sistema) chamada SCREEN. - A tabela SCREEN é inicializada com os campos definidos no Caiem Pointer e tem seus campos reinicializados a cada execução do PBO. - Para determinar o campo que você deve alterar um ou mais atributos, você precisa ler o campo SCREEN-NAME e os campos SCREEN-GROUP1 até SCREEN-GROUP4, através de um Loop na tabela SCREEN. - As funções standard são automaticamente associadas.
Academia – SAP/ABAP R3
© by BBKO Consulting 103
147
Programação On-line - Atributos do campo na tela
ã
Atributos do campo – Grupos de Modificação
ScreenPainterField list: Modification groups
Field name Gr1 Gr2 Gr3 Gr4 ...
SPFLI_ITAB-CONNID SELSELSPFLI_ITAB-CITYFROM SELSELSPFLI_ITAB-CITYTO SELSEL. . .
- Você pode associar um campo a quatro diferentes grupos. Os nomes dos grupos podem ter até 3 caracteres e podem ser definidos livremente.
Academia – SAP/ABAP R3
© by BBKO Consulting 104
148
Programação On-line - Modificação em telas
ã
ScreenPainter
Modificações Dinâmicas em Telas - Programa
PROCESS BEFORE OUTPUT. . . . MODULE MODIFY_SCREEN. . . .
ABAP/4MODULE MODIFY_SCREEN OUTPUT. ...
LOOP AT SCREEN. IF SCREEN-GROUP1 = 'SEL'. SCREEN-INPUT = 1 . ENDIF. IF SCREEN-NAME = ' SFLIGHT-CARRID '. SCREEN-ACTIVE = 0 . ENDIF.
MODIFY SCREEN. ENDLOOP.ENDMODULE.
MODULE MODIFY_SCREEN OUTPUT. ...
LOOP AT SCREEN. IF SCREEN-GROUP1 = 'SEL'. SCREEN-INPUT = 1 . ENDIF. IF SCREEN-NAME = ' SFLIGHT-CARRID '. SCREEN-ACTIVE = 0 . ENDIF.
MODIFY SCREEN. ENDLOOP.ENDMODULE.
MODULE MODIFY_SCREEN OUTPUT. ...
LOOP AT SCREEN. IF SCREEN-GROUP1 = 'SEL'. SCREEN-INPUT = 1 . ENDIF. IF SCREEN-NAME = ' SFLIGHT-CARRID '. SCREEN-ACTIVE = 0 . ENDIF.
MODIFY SCREEN. ENDLOOP.ENDMODULE.
- O código (programa) para alterar dinamicamente os atributos dos campos devem ser executados no evento PBO. - As mudanças devem ser feitas dentro de um Loop na tabela SCREEN, e somente desta forma.(Não é possível o acesso via READ TABLE...). - As mudanças feitas são realmente ativadas após o comando MODIFY SCREEN.
Academia – SAP/ABAP R3
© by BBKO Consulting 105
150
Programação On-line - Condição na chamada dos Modules
Module Verifica_Campo...message E ...
Endmodule.
PROCESS AFTER INPUT.FIELD <campo>
Module Verifica_Campo ON INPUT.
- Se quiser que o module seja chamado somente se o conteúdo do campo foi alterado do seu valor inicial.
- Dentro do bloco CHAIN, você deve usar o ON CHAIN-INPUT, o module é então chamado se o conteúdo de uma das telas foi alterado do valor inicial.
PROCESS AFTER INPUT.CHAIN.
FIELD <campo1>,<campo2>... < campo n>
Module Verifica_Campo ON CHAIN-INPUT.ENDCHAIN.
Module Verifica_Campo...message E ...
Endmodule.
150
Programação On-line - Condição na chamada dos Modules
Module Verifica_Campo...message E ...
Endmodule.
PROCESS AFTER INPUT.FIELD <campo>
Module Verifica_Campo ON INPUT.
- Se quiser que o module seja chamado somente se o conteúdo do campo foi alterado do seu valor inicial.
- Dentro do bloco CHAIN, você deve usar o ON CHAIN-INPUT, o module é então chamado se o conteúdo de uma das telas foi alterado do valor inicial.
PROCESS AFTER INPUT.CHAIN.
FIELD <campo1>,<campo2>... < campo n>
Module Verifica_Campo ON CHAIN-INPUT.ENDCHAIN.
Module Verifica_Campo...message E ...
Endmodule.
Academia – SAP/ABAP R3
© by BBKO Consulting 106
151
Programação On-line - Condição na chamada dos Modules
Module Verifica_Campo...message E ...
Endmodule.
PROCESS AFTER INPUT.FIELD <campo>
Module Verifica_Campo ON REQUEST.
- Se adicionar o parâmetro ON REQUEST no module, o module somente é chamado se o usuário digitar um novo valor neste campo
- Dentro do bloco CHAIN, você deve usar o ON CHAIN-REQUEST, o module é então chamado se o usuário alterou o conteúdo de um dos campos dentro do bloco CHAIN.
PROCESS AFTER INPUT.CHAIN.
FIELD <campo1>,<campo2>... < campo n>
Module Verifica_Campo ON CHAIN-REQUEST.ENDCHAIN.
Module Verifica_Campo...message E ...
Endmodule.
152
Programação On-line - Condição na chamada dos Modules
Module EXIT Input.Case ok_code.
when ‘CANCEL’.clear ok_code.leave to screen 0.
when ‘EXIT’.leave program.
Endcase.Endmodule.
PROCESS AFTER INPUT.Module exit AT EXIT-COMMAND.
- O parâmetro adicional AT EXIT-COMMAND, faz com que o module seja processado antes das verificações automáticas de entrada de dados.
Academia – SAP/ABAP R3
© by BBKO Consulting 107
153
Programação On-line - Criar DialogProgram – SE80
- Crie o seu programa (ABAP Module Pool) no Development Workbench (SE80) seguindo a regra de nomenclatura abaixo:
O nome deverá iniciar com as letras SAP. A quarta posição do nome do programa deverá ser sempre M (Module
Pool). A quinta posição, no caso de programas customizáveis deverá ser Z ou Y,
(como nos programas reports, iniciados obrigatoriamente com essas letras). Escolha a opção TOP Include, pois desta forma, será criado o include que
será utilizado para a declaração dos dados globais. Se você utilizar os includes, o sistema automaticamente sugerirá os nomes
para eles, seguindo uma regra particular, de acordo com o nome do programa principal (module pool) e com um determinado sufixo, o qual facilitará a sua identificação dentro do programa.
Exemplo: O nome do TOP Include para um programa Module Pool cujo nome é SAPMZSD001 será MZSD001TOP.
Academia – SAP/ABAP R3
© by BBKO Consulting 108
154
Programação On-line - Cria DialogProgram
-Nos atributos do programa, você define o Título, categoria e a aplicação. Categoria é Module Pool e Aplicação é BASE
Academia – SAP/ABAP R3
© by BBKO Consulting 109
155
Programação On-line - Criar tela em Dialog Program
- Criar tela no Dialog Program: Posicionar o cursor no nome do programa e clicar o botão direto do mouse
Academia – SAP/ABAP R3
© by BBKO Consulting 110
156
Programação On-line - Criar tela em DialogProgram
1 - Digitar o numero da tela
Academia – SAP/ABAP R3
© by BBKO Consulting 111
157
Programação On-line - Criar tela DialogProgram
- Nos atributos da tela, digitar a descrição da tela. - Escolha a opção NORMAL, e especifique o número da próxima tela (se necessário, no momento da execução, o sistema desviará para o número da tela indicado nesse campo, caso esteja preenchido).
Academia – SAP/ABAP R3
© by BBKO Consulting 112
158
Programação On-line - Criar tela DialogProgram
Clica no ícone
- Para desenhar telas, utilize o Screen Painter. - A interface do Screen Painter Gráfico contém funções easy-to-use para definição de diversos elementos da tela (ex: campos de entrada/saída, labels, boxes, botões, etc). Você escolhe cada elemento e os posiciona na tela utilizando o mouse. - Para deletar elementos da tela, é necessário selecionar cada elemento com o mouse (foco) e pressionar delete. - É possível também mover os elementos gráficos pela tela, somente clicando e arrastando o mesmo. -Na tela acima para digitar a constante ‘Código do Funcionário’ utilizamos o ícone e digitamos esta literal no campo e para digitar o campo variável utilizamos o ícone da barra de ferramentas.
Academia – SAP/ABAP R3
© by BBKO Consulting 113
159
Programação On-line - Exemplo: Criar tela 200
-Duplo click no campo variável e então aparece a janela de atributos do campo, no nome do campo, foi digitado o nome de uma tabela e campo, então digita enter e aparece uma pergunta se este campo está associado ao Dicionário. - No nosso exemplo este campo está associado ao dicionário, através desta table ZFUNC01. - Não esquecer de ativar a tela.
Academia – SAP/ABAP R3
© by BBKO Consulting 114
160
Programação On-line - Criar tela –Declarar ariáveis
- No processamento do diálogo, os dados são passados entre as telas e programas ABAP durante a execução. O sistema efetua a comunicação automaticamente, mas é necessário que seja utilizado o nome idêntico dos campos nas telas e no module pool. - Defina os dados globais no TOP include. Para que todas as telas possam “enxergá-lo”.
Academia – SAP/ABAP R3
© by BBKO Consulting 115
161
Programação On-line - Criar Tela –Criar Modules
-Observe no exemplo acima que ‘clicando’ na tela 100, aparece o fluxo lógico da tela 0100 (PBO e PAI). - Os modules estão comentados, caso utilize, tirar os comentários e os modules serão criados em includes. - Durante o processo de criação dos módulos PAI e/ou PBO, você pode associá-los aos includes desejados ou deixar que o sistema automaticamente faça isto por você. Neste caso os módulos no PBO serão criados nos includes com o sufixo I01 (xxxxxI01), e os do PAI, nos includes com sufixo O01 (xxxxxO01). - Nos Flow Logics não são permitidos palavras reservadas (IF, PERFORM, WHILE etc) da mesma forma em que são permitidos nos programas. O Flow Logic, embora se pareça muito com o programa (o editor é o mesmo), não tem o mesmo comportamento. Ele é usado basicamente para ordenar o processamento da tela, e para isso são criados os MODULES, que têm uma função análoga à do PERFORM. - Para criarmos um MODULE, escreva o seu nome no flow logic no lugar desejado e efetue um double-click. O sistema criará uma sub-rotina iniciando com MODULE <nome> e terminando com ENDMODULE no include apropriado. Isto pode ser facilmente observado efetuando uma navegação pelo include. - Se não existirem includes, o sistema poderá criar um (se você permitir) ou poderá incluir a sub-rotina no programa principal (o que aliás, não é recomendado).
Academia – SAP/ABAP R3
© by BBKO Consulting 116
162
Programação On-line - Criar Modules
163
Programação On-line - Criar Modules
-Tirar das linhas o comentário e atribuir algum código ao GUI status e ao GUI title, no exemplo acima foi atribuído o ‘0100’.
Academia – SAP/ABAP R3
© by BBKO Consulting 117
168
Programação On-line - GUI Title e GUI Status
- Usa-se o Menu Painter para definir funções na tela em um status particular e associá-los a um apropriado menu, a saber: menu bar, standard toolbar e application toolbar. - Pode-se também definir um título para a tela. - Em geral, define-se um menu bar para cada dialog program e associa-se esse menu bar a um status. Para todos os status, define-se qual função estará ativa/inativa. - Cada alteração nos status (menus) deve ser seguida de uma re-geração da tela completa. - Para associar um status e um título a uma tela, isto deve ser feito no seu PBO, usando o comando SET PF-STATUS e SET TITLEBAR, respectivamente.
Academia – SAP/ABAP R3
© by BBKO Consulting 118
165
Programação On-line - Criação de GUI Status
166
Programação On-line - Criar GUI Status –Barra de Menu
Academia – SAP/ABAP R3
© by BBKO Consulting 119
167
Programação On-line - Criar GUI Status –Barra de Botões
-Você pode criar botões associados aos ‘Códigos’ criados na Barra de Menu ou não. - Quando cria botões, você pode associar a uma tecla de função
Academia – SAP/ABAP R3
© by BBKO Consulting 120
168
Programação On-line - Criar GUI Title
-Você pode usar até nove variáveis no título. Veja abaixo o Module chamando o titlebar ‘CONS’ passando a variável código do funcionário.
Academia – SAP/ABAP R3
© by BBKO Consulting 121
169
Programação On-line - Fluxo Lógico –tela 100
Código dos Modules, acima:
Academia – SAP/ABAP R3
© by BBKO Consulting 122
169
Programação On-line - Fluxo Lógico –tela 100
Código dos Modules, acima:
Academia – SAP/ABAP R3
© by BBKO Consulting 123
170
Programação On-line - Fluxo Lógico –tela 200
-Segue
Academia – SAP/ABAP R3
© by BBKO Consulting 124
170
Programação On-line - Fluxo Lógico –tela 200
-Segue
Academia – SAP/ABAP R3
© by BBKO Consulting 125
171
Programação On-line - Organização do Programa
Sub-Rotinas
PAI
PBO
Declarações Globais
172
Criar transação para On-Line
Academia – SAP/ABAP R3
© by BBKO Consulting 126
173
Criar transação para On-Line
- Para executar programa tipo ‘M’ (Module Pool) você deve criar pelo menos uma transação.
Academia – SAP/ABAP R3
© by BBKO Consulting 127
174
Programação On-line - Transação – ZFUNC01 – tela 100
175
Programação On-line - Tela 200 -Consulta
Academia – SAP/ABAP R3
© by BBKO Consulting 128
Apêndice A – Programação On-Line Os Componentes Principais de um Dialog Program (On-line)
· Você usa o Screen Paiter e o Menu Painter para criar e desenhar telas modelas e programas de telas.
· Você define o processamento lógico no module pool do programa ABAP/4 . · Estruturas de dados são definidas no Dicionário ABAP/4. Você pode acessar esses estruturas do
programa ABAP/4 e quando define campos de tela. · O processador de diálogo controla o fluxo do seus programa diálogo.
Screen Painter - ABAP/4
· Para criar uma tela, siga os seguintes passos: o Defina as características básicas da tela (screen atributes) o Projete um layout de tela (in full screen editor) o Defina os atributos dos campos (field list) o Escreva o fluxo lógico da tela (programa)
· Os componentes do programa ABAP/4 mais importantes são encontrados nos seguintes objetos: o Global data ou Estruturas do Dicionário no programa include TOP (declarações data) o Module PBO (Process Before Output – Processos antes de Apresentar a Tela) o Module PAI (Process After Input – Processos após Entrada de Dados) o Sub-rotinas (se necessário)
Comunicação: Tela à ABAP/4 module Pool
· O fluxo lógico da tela é dividido em dois eventos para cada tela: o O evento PBO é executado antes da tela ser apresentada. o O evento PAI é executado após o usuário pressionar ENTER.
· O sistema processa os módulos de evento numa seqüência · Em cada módulo, o controle passa do processador de diálogo para o processador ABAP/4. Depois
do processamento, o controle é retornado para o processador de diálogo. · Quando todos os módulos do PBO forem processados, o conteúdo dos campos da área de
trabalho (work área) ABAP/4 são copiados para os campos de mesmo nome da área de trabalho (work área) da tela.
· Antes do módulo PAI é processado. O conteúdo dos campos na área de trabalho da tela (work área) são copiados para campos de mesmo nome na área de trabalho (work área) ABAP/4.
Definindo o Layout (Graphical Screen Painter)
· Para projetar telas, você usa o Screen Painter. · A interface do Graphical Screen Painter contém funções fáceis de usar para definir os vários
elementos da tela (ex.: campos de entrada e saída, campos textos, caixas, etc.). Você escolhe cada elemento da tela e posiciona na tela usando o mouse.
· Para deletar elementos da tela, você seleciona o elemento com o mouse e então escolhe Delete. · Para mover elementos da tela, você usa o mouse para arrastar o elemento para a posição
desejada.
Academia – SAP/ABAP R3
© by BBKO Consulting 129
Note: Na versão 3.0, a Graphical Screen Painter é suportada pelo Windows NT, Windows 9x e UNIX. Se você está usando outro sistema operacional, você usa a Alphanumeric Screen Painter.
Academia – SAP/ABAP R3
© by BBKO Consulting 130
Visualizações de Listas de Campo (Field List Views)
ü Field types ü Texts/templates ü General attributes ü Display attributes ü Modification groups ü Matchcode/reference
· Há seis visualizações de listas de campos para manutenção dos atributos dos campos da tela.
Alternativamente, você pode defini-los de uma das listas. Manutenção de atributos para um campo também é possível no fullscreen editor.
· Você pode descobrir o correspondente do tipo de dado externo para o tipo de dado interno (ex.: tipos de dados ABAP/4) pela referida documentação da palavra chave TABLES no ABAP/4. Exemplos são os seguintes:
Tipo de dados do dicionário ABAP/4 Tipo de dados no ABAP/4 CHAR C NUMC N
Definindo o controle do fluxo
PORCESS BEFORE OUTPUT. MODULE INITIALIZE. PROCESS AFTER INPUT. MODULE READ_SPFLI.
· Você especifica a definição de seus Módulos de comandos na lógica do fluxo. · Se você escolhe um módulo com duplo clique, o sistema cria os comandos adequados MODULE
... ENDMODULE no programa include apropriado. Este é conhecido como navegação adiantada. · Se não existe o programa include, o sistema criará um se você permitir. Ele também insere um
comando INCLUDE no programa principal.
Processando o MODULE POOL
MODULE INITIALIZE OUTPUT. CLEAR SPFLI. ENDMODULE.
MODULE READ_SPFLI INPUT. SELECT SINGLE * FROM SPFLI WHERE CARRID = SPFLI-CARRID AND CONNID = SPFLI-CONNID. . . . ENDMODULE.
· Os comandos do ABAP/4 do MODULE para PBO contém uma adição OUTPUT, quando os
comandos do módulo for do módulo PAI contém uma adição INPUT.
Academia – SAP/ABAP R3
© by BBKO Consulting 131
Definindo campos no MODULE POOL
Top include MTALATOP PROGRAM SAPMTALA. TABLES: SPFLI. DATA: ... .
OU GLOBAL DATA
DATA: ... .
· No processamento de diálogo, o dado é passado entre as telas e o processamento do programa ABAP/4. O sistema executa esta comunicação automaticamente, mas você deve usar nomes idênticos nas telas e no MODULE POOL.
· Defina os campos relevantes como dados globais no programa include TOP. Para fazer isso, você processa o programa include como um todo ou relacionando seções de dados globais ou estruturas do Dicionário. Mesmo que, o programa include TOP está implicitamente no controle.
Definindo chamadas (Códigos de Transação)
STMP Programs SAPMTALA Create Transactions Escolher Código de Transação TALA Tipo de Transação X Dialog transaction Continue Transaction code TALA Transaction text Test Program SAPMTALA Screen number 100
· Você pode iniciar um programa de diálogo ABAP/4 (transação) com um específico código de transação.
· Tansações customizadas devem começar com Z ou Y. · O sistema cria suas especificações na tabela TSTC (ao invés de criar uma transação na lista de
objetos, você pode dar manutenção na tabela você mesmo)
Checagem automática de campo de Entrada
· Após o usuário ter finalizado uma tela (ex. ter entrado dados e pressionado a tecla ENTER ou ter acionado alguma outra função), mas antes dos módulos do PAI serem processados, o processador de diálogo executa um número de checagens automáticas.
· O primeiro destes s ser certificado são os campos requeridos na entrada de dados.
Academia – SAP/ABAP R3
© by BBKO Consulting 132
· Uma chave estrangeira é executada somente se um campo da tela se referir a um campo do Dicionário pela qual a checagem da tabela tem de estar definida e o atributo apropriado tem de estar selecionado.
· Em algum momento, a funcionalidade F4 é ativada. Isso significa que é possível a entrada de dados para um campo. Ex.: a chave de valores da tabela de checagem – são apresentadas.
Checando campo de entrada no MODULE POOL com diálogo de erro PROCESS AFTER INPUT. FIELD <screen field> MODULE <module>.
MODULE module INPUT. . . . MESSAGE E... . ENDMODULE.
· Se você quer checar valores de entrada no MODULE POOL e iniciar um diálogo de erro de um
resultado negativo, você usa o comando FIELD com a adição MODULE. Isto significa que o relevante módulo é executado somente para o campo especificado no comando FIELD.
· Se o módulo resulta numa mensagem de erro (E) ou warning (W), a tela é reapresentada sem o processamento dos módulos PBO. O texto da mensagem é apresentado e somente o campo checado por este módulo é apresentado para entrada de dados novamente.
· Note que somente o comando FIELD é responsável por fazer a leitura do campo para entrada novamente. Se você formular uma mensagem num módulo sem chamar o módulo no comando FIELD, a mensagem é apresentada, mas o campo não é lido para entrada de dados novamente.
Checando Grupo de Campos PROCESS AFTER INPUT. CHAIN. FIELD: screen field1, screen field2, ... screen fieldn. MODULE module. ENDCHAIN. MODULE module INPUT. ... MESSAGE E ... . ENDMODULE.
· Se você quer checar muitos campos para entrada de dados novamente no evento de um erro de diálogo, você deve especificar todos no comando FIELD e concatenar estes junto com o comando MODULE para checagem no CHAIN.
· Um campo pode ser usado em diferentes CHAINs. · Note que o comando FIELD não somente faz a leitura para entrada de dados novamente.
Qualquer um dos campos modificado durante o processamento do PAI somente se torna visíveis no evento do erro se eles são também especificados no comando FIELD do referido CHAIN.
Academia – SAP/ABAP R3
© by BBKO Consulting 133
Lendo Códigos de Função em Programas
· Cada botão deve ter um código de função · Quando o usuário pressionar o botão, o módulo PAI é acionado. · Quando o usuário chama uma função (pelo significado do botão, menu de entrada ou tecla de
função), o código de função aparece no campo que você entra no na lista de campo que os atributos pré-definidos de tamanho 4 e formato OK. Isto é conhecido como campo de OK code.
· Poder reagir a um código de função no module pool do ABAP/4, você define um identificador nomeado Ok code. Este contém o código da função atual depois do campo ter sido transportado.
· Você está recomendado a usar uma versão de backup do campo de okcode para evitar enviar uma tela que já tem um código de função.
Seqüência Dinâmica de Tela: Overview
· Você pode modificar uma seqüência de tela dinamicamente por o Usando SET SCREEN para atualizar a próxima tela temporariamente o Usando CALL SCREEN para inserir um processamento de uma ou mais telas antes da tela
atual. O processamento da tela atual continua com os comandos após esta chamada.
Ajustando a Próxima Tela Dinamicamente
· O comando SET SCREEN nnnn altera temporariamente a próxima tela. · A tela nnnn deve ter uma tela no mesmo module pool. · A próxima tela é processada depois da tela atual, a menos que você termine a tela atual com o
comando LEAVE SCREEN. · Se você quer encerrar a tela atual e ir diretamente para a próxima tela num único passo, você
pode usar o comando LEAVE TO SCREEN nnn.
Menu Painter - Overview
· Você usa o Menu Painter para definir funções na tela no stautus particular e determina-as para a barra de menus própria. Para cada status, você define que as funções de menu estão ativas ou inativas.
Definindo a Interface I
· Numa request, o sistema propõe valores padrões para barra de menu e define a tecla de função, mas você pode modificar isso.
· Barras de menu podem conter até oito menus. Você pode definir até seis destes, mas os menus System e Help são adicionados automaticamente pelo sistema.
· Um único menu contém até 15 entradas, incluindo as funções e suas descrições, nomes de sub-menus e linhas separadoras.
· Você poderia especificar também todas as funções que são ativadas num status como ativa na barra de menu.
Academia – SAP/ABAP R3
© by BBKO Consulting 134
Definindo a Interface II
· Você determina as funções ativas que um usuário provavelmente mais precisa no situação atual para a barra de botões. Antes de você fazer isso, o código de função deve ser determinado para uma tecla de função.
· Você determina códigos de função para teclas de função pelas entradas destas em “Configurações Recomendadas de Teclas de Funções” ou “Seções de Teclas de Função Definidas Livremente” .
· O sistema automaticamente define as teclas de função no padrão barra de ferramentas para teclas de função especial.
Definição Automática de Ícones para Teclas de Função
Tecla de Função Significado Icon (Símbolo) Enter Enter “ticado” F11 Salvar Pasta F3 Voltar Seta p/ a esquerda
Shift+F3 Sair (programa) Seta p/ cima F12 Cancelar (tela) “X”
Ctrl+P Imprimir Impressora Ctrl+F Pesquisar Binóculo Ctrl+G Continuar Pesquisando Binóculo “+”
Ctrl+Screen up Primeira Página Página com seta dupla Screen up Página Anterior Página com seta p/ cima
Screen down Próxima Página Página com seta p/ baixo Ctrl+Screen down Última Página Página com seta dupla
F1 Help Interrogação
· O sistema define automaticamente códigos de função que você define na barra de ferramentas padrão para teclas de função especial.
· Para descobrir quais definições aplicadas para as funções no status atual, clique no termo “Barra de Ferramentas Padrão”.
Definindo Menus de Área
· Quando for dar manutenção em Menus de Área (que são desenvolvimentos de objetos de classes), você usa uma versão especial do Menu Painter. Aqui, você define os códigos de transação para programas diálogos chamados ao invés de especificar códigos de função.
· Esses códigos de transação não têm tipos especiais de função. Eles trabalham como CALL TRANSACTION.