Academia – SAP/ABAP R3
Academia ABAP
____________________________________ ________________________ ______________ __ Aluno: ________________________ r
[email protected] .br Instrutor: Ronaldo Nogueira -
[email protected]
© by BBKO Consulting
1
Academia – SAP/ABAP R3
Índice CAPÍTULO 1 – MYSAP ERP 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 SELEÇÃO ________________________________ __________________________________________ __________ 47 CAPÍTULO 6 – LISTAS _____________________________________________________ 54 CAPÍTULO 7 – LISTAS LISTAS SECUNDÁRIAS ________________________________ ______________________________________ ______ 64 CAPÍTULO 8 – MODULARIZAÇÃO MODULARIZAÇÃO ________________________________ __________________________________________ __________ 73 CAPÍTULO 9 – DATA TRANSFER________________________________ TRANSFER____________________________________________ ____________ 80 CAPÍTULO 10 – PROGRAMAÇÃO ON-LINE ON-LINE __________________________________ 95 APÊNDICE A – PROGRAMAÇÃO ON-LINE________________________________ __________________________________ __ 128 OS COMPONENTES PRINCIPAIS DE UM DIALOG PROGRAM (O N-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 E NTRADA ________________________________ 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 I NTERFACE I ________________________________ ___________________________________________________ ___________________ 133 DEFININDO A I NTERFACE II __________________________________________________ 134 DEFINIÇÃO AUTOMÁTICA DE ÍCONES PARA TECLAS DE FUNÇÃO ______________________ 134 DEFININDO MENUS DE ÁREA _________________________________________________ 134
© by BBKO Consulting
2
Academia – SAP/ABAP R3
Índice CAPÍTULO 1 – MYSAP ERP 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 SELEÇÃO ________________________________ __________________________________________ __________ 47 CAPÍTULO 6 – LISTAS _____________________________________________________ 54 CAPÍTULO 7 – LISTAS LISTAS SECUNDÁRIAS ________________________________ ______________________________________ ______ 64 CAPÍTULO 8 – MODULARIZAÇÃO MODULARIZAÇÃO ________________________________ __________________________________________ __________ 73 CAPÍTULO 9 – DATA TRANSFER________________________________ TRANSFER____________________________________________ ____________ 80 CAPÍTULO 10 – PROGRAMAÇÃO ON-LINE ON-LINE __________________________________ 95 APÊNDICE A – PROGRAMAÇÃO ON-LINE________________________________ __________________________________ __ 128 OS COMPONENTES PRINCIPAIS DE UM DIALOG PROGRAM (O N-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 E NTRADA ________________________________ 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 I NTERFACE I ________________________________ ___________________________________________________ ___________________ 133 DEFININDO A I NTERFACE II __________________________________________________ 134 DEFINIÇÃO AUTOMÁTICA DE ÍCONES PARA TECLAS DE FUNÇÃO ______________________ 134 DEFININDO MENUS DE ÁREA _________________________________________________ 134
© by BBKO Consulting
2
Academia – SAP/ABAP R3
Capítulo 1 – mySAP ERP
• • • • •
O que é o mySAP ERP ? Funções do mySAP ERP . Arqu Ar quititet etu ura trê rêss ca cama mada das. s. Lan and dscape pe.. Sisste Si tema ma de Tr Tran ansspo port rte. e.
2
O que é o mySAP ERP ?
• O my conjunto nto integ integrad rado o mySA SAP P ER ERP P é um conju de aplicativos para tratar o processamento de dados de grandes gran des corporações. • Foi desenvolvido na Alemanha pela empresa SAP (Sy (Syst stems ems Appli pplicat cation ionss and Pro Produc ducts ts for dat dataa pro proces cessin singgAplicativos e produtos de sistemas para processamento de dados). 3
© by BBKO Consulting
3
Academia – SAP/ABAP R3
Funções mySAP Business Suite
BASIS 4
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.
© by BBKO Consulting
4
Academia – SAP/ABAP R3
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 de um determinado módulo.
5
© by BBKO Consulting
5
Academia – SAP/ABAP R3
Arquitetura 3 camadas Cliente/Servidor
5
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. Tipo de processo D (Dialog) V (Update) B (Background) S (Spool) E (Enqueue) M (Message) G (Gateway)
© by BBKO Consulting
Tipo de solicitação de trabalho Solicitações de diálogo. Solicitações para atualizar dados no banco de dados. Trabalhos de segundo plano. Imprime solicitações do spool. Solicitações de bloqueio lógico. Roteia as msgs. entre os serv. de aplicativo dentro do sistema R/3. Afunila as mensagens dentro e fora do sistema R/3.
6
Academia – SAP/ABAP R3
System Landscape Sistema de Desenvolvimento
Sistema de QA
PROD
QTST
DEV
Client Copy
Client Copy
MAST
Sistema de Produção
Client Transport
Client Transport
MAST
Client Copy
Client Copy
SBOX
Client-indep. Customizing Repository Objects
TRAI
Workbench Request
Client-indep. Customizing Repository Objects
Workbench Request
Client-indep. Customizing Repository Objects 6
© by BBKO Consulting
7
Academia – SAP/ABAP R3
Workbench Organizer e o Sistema de Transporte
7
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.
© by BBKO Consulting
8
Academia – SAP/ABAP R3
Capítulo 2 – Conceito de Banco de Dados Relacional
Conceito de Banco de Dados Relacional
8
Conceito de Banco de Dados • • • • •
Campo Registro Coluna Tabela Unicidade de Registro – Chave Primaria (PK) e Chave Alternativa (AK) • Relacionamento – Chave Estrangeira (FK) • Índice
9
© by BBKO Consulting
9
Academia – SAP/ABAP R3
Capítulo 3 – Dicionário de Dados
Dicionário de Dados
8
© by BBKO Consulting
10
Academia – SAP/ABAP R3
Dicionário de Dados • • • • •
Domínio Elemento de Dados Campos Registros Tabelas – Transparentes – Interna
9
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.
© by BBKO Consulting
11
Academia – SAP/ABAP R3
Dicionário de Dados - Tipos no Dicionário ABAP
10
Dicionário de Dados - Tipo de Dados mais utilizados Tipo
Descrição
CHAR
String de caractere (máximo de 255 caracteres) DEC Valores decimais DATS Campo Date TIMS Campo Time INT1 , INT2, INT4 Valores inteiros NUMC Campo de caractere que pode conter apenas numéricos
11
© by BBKO Consulting
12
Academia – SAP/ABAP R3
Dicionário de Dados Tipos de Dados ABAP -
Tipos de Dados
T1 TYPE I.
DATA D1 TYPE T1
DATA D3 TYPE T1 VALUE 123,
T2(5) TYPE P.
DATA D5 TYPE T2 VALUE ‘1.23’
DATA D6 TYPE T2.
Grupo de Tipos 12
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
© by BBKO Consulting
13
Academia – SAP/ABAP R3
Dicionário de Dados - Objetos Básico no Dicionário Tabela 2
Tabela 1 Campo
.... Valor_compra ... Material
Uma tabela é composta de campos
Elemento de Dados
MATNR
Domínio MATNR
....
Campo Valor_venda ... Material
Elemento de Dados Para criar um Campo, você precisa de um Elemento de Dados Uma definição de elemento de dados exige um domínio
MATNR
Domínio MATNR
13
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)
© by BBKO Consulting
14
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Domínio Transação SE11
14
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
© by BBKO Consulting
15
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Domínio Transação SE11
15
Dicionário de Dados - Criar Elemento de Dados Transação SE11
16
© by BBKO Consulting
16
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Elemento de Dados Transação SE11
17
Dicionário de Dados - Criar Elemento de Dados Transação SE11
18
© by BBKO Consulting
17
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Elemento de Dados Transação SE11
19
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
23
© by BBKO Consulting
18
Academia – SAP/ABAP R3
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-paraum 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. 24
Dicionário de Dados - Criar Tabela Transparente Transação SE11
21
© by BBKO Consulting
3
19
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Tabela Transparente Pasta “Características”
22
Dicionário de Dados - Criar Tabela Transparente Pasta “Entrega e Atualização”
27
© by BBKO Consulting
20
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Tabela Transparente Pasta “Campos”
24
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)
© by BBKO Consulting
21
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Tabela Transparente Pasta “Entrs. Possíveis/Verificações”
25
Dicionário de Dados - Criar Tabela Transparente Pasta “Campos Moeda/Quant.”
26
Para campos do tipo moeda (valores) e quantidade, é necessário definir tabela e campo de referência.
© by BBKO Consulting
22
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Tabela Transparente Check Table no Campo Material
27
Dicionário de Dados - Criar Tabela Transparente Check Table no Campo Material
28
© by BBKO Consulting
23
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Tabela Transparente Check Table no Campo Material
29
-
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
© by BBKO Consulting
24
Academia – SAP/ABAP R3
Dicionário de Dados - Chaves Primárias e Estrangeira Chave Primária
Chave Secundária / Alternativa
Chave Estrangéira
34
Dicionário de Dados - Chaves – Primárias e Estrangeira Tabela ZFUNC Mand
CodFunc Cod Depto Nome
Salario
Area
Campos Chaves Check Table Chave Primária Chave Estrangeira
Check Table ZDEPTO Mand
CodDepto
Fone
Fax
Campos Chaves Chave Primária
31
© by BBKO Consulting
25
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Tabela Transparente Configurações Técnicas
32
© by BBKO Consulting
26
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Tabela Transparente Opções Técnicas
33
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).
© by BBKO Consulting
27
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Tabela Transparente Ativar Tabela
34
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.
© by BBKO Consulting
28
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Estrutura
35
Dicionário de Dados - Criar Estrutura
36
© by BBKO Consulting
29
Academia – SAP/ABAP R3
Dicionário de Dados - Criar Estrutura Pasta “Componentes”
37
Na criação da estrutura não precisa definir o mandante, pois armazena os dados somente em tempo de execução.
Dicionário de Dados - Criar Estrutura Pasta “Campos moeda/quantidade”
38
© by BBKO Consulting
30
Academia – SAP/ABAP R3
Tabela Interna
43
Tabela Interna - Conceito
Áreas de memória chamadas “Tabelas Internas”, são utilizada 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 ainda durante a mesma execução.
44
© by BBKO Consulting
31
Academia – SAP/ABAP R3
Tabela Interna - Conceito No dia-a-dia do programador as tabelas internas têm um papel fundamental, pois é através delas que se manipula a maior parte dos dados de um programa. Além disso, são de fácil manuseio, sendo sua declaração (de tipos, estrutura) e atribuição de conteúdo (valores) muito simples. É possível, por exemplo, declarar uma tabela interna com a mesma estrutura (tipos, campos, etc.) de uma tabela do banco de dados (físico – tabelas transparentes), e, através de um comando “SELECT”, copiar todo o conteúdo da tabela do banco de dados para a tabela interna.
45
Dicas - Tabela Interna - Conceito As tabelas internas possuem uma área de trabalho chamada Header” (cabeçalho), que permite o acesso e uso mais flexível dos registros da mesma. O comando “LOOP”, por exemplo, ao “varrer/ler” uma tabela interna registro a registro, envia o registro corrente para o “Header”, permitindo que o programador manipule esse registro de diversas maneiras. Exemplo: Imprimí-los na tela(comando WRITE), utilizando seus campos para executar cálculos, comparar valores, etc. 46
© by BBKO Consulting
32
Academia – SAP/ABAP R3
Dicas - Field String x Tabela Interna
Field String Cod Cliente Nome
Cidade
Rua
Bairro
Cidade
Rua
Bairro
Tabela Interna Cod Cliente Nome
47
© by BBKO Consulting
33
Academia – SAP/ABAP R3
Dicas - Field String e Tabela Interna Declarando Tabelas Internas * Declaração de Tipos TY PES : be gin of type_clientes, kunnr TYPE kna1-kunnr, name1 TYPE kna1-name1 , addrnr TYPE kna1-addrnr, end of type_clientes.
* Declaração de Tabelas I nternas Data : tg_clientes TYPE TABLE OF type_clientes.
49
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 t
© by BBKO Consulting
clientes.
50
34
Academia – SAP/ABAP R3
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áve l vg_linhas)
51
Dicas - Tabela Interna – APPEND
X COLLECT Inclui a estrutura ou como uma nova entrada na tabela interna ou adiciona numa entrada já existente desde que tenha a mesma estrutura. Soma os campos do tipo P,I e F)
-Grava o conteúdo da estrutura no fim da tabela interna
APPEND
COLLECT
Cod Func
Cod Depto
Salário
Cod Func
Cod Depto
Salário
9944
HR
1000,00
9944
HR
1000,00
9944
HR
1000,00
9944
HR
1000,00
9933
INFO
500,00
9933
INFO
500,00
0100
FINAN
2000,00
0100
FINAN
2000,00
2000,00 52
© by BBKO Consulting
35
Academia – SAP/ABAP R3
Capítulo 4 – ABAP Open SQL
Open SQL
47
ABAP Open SQL - Acessando a
base de dados • • • • •
SELECT INSERT DELETE UPDATE MODIFY
48
© by BBKO Consulting
36
Academia – SAP/ABAP R3
ABAP Open SQL – Select – Sintax
SELECT matnr INTO TABLE tg_mara FROM mara WHERE 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.
Ex. Declarações para tabela interna
DATA tg_mara TYPE TABLE OF type_mara 55
© by BBKO Consulting
37
Academia – SAP/ABAP R3
ABAP Open SQL - Acesso ao Banco de Dados
Programa ABAP Dicionário ABAP
Open SQL
Banco de Dados
Relatório
49
- 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.
© by BBKO Consulting
38
Academia – SAP/ABAP R3
ABAP Open SQL - Acesso ao Banco de Dados Acesso de um registro – SELECT SINGLE •Seleciona dados do cliente código 1 0 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 cliente NAME1 “Nome ADDRNR “Rua e Nr. INTO (vg_kunnr, vg_name1, vg_addrnr) FROM kna1 “Tabela transparente de clientes WHERE kunnr = ‘0000000010’.
Para fazer SELECT SINGLE, você precisa passar como parâmetro na condição ‘ WHERE’ a chave completa da tabela tra nsparente. Neste exemplo acima, os campos selecionados foram armazenados em variáveis de memória, declarados no comando ‘ DATA’
57
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 clientes WHERE 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.
58
© by BBKO Consulting
39
Academia – SAP/ABAP R3
ABAP Open SQL - Acesso ao Banco de Dados Move campos para tabela interna, não fica em LOOPING * Seleciona documentos de venda dos clientes de São Paulo SELECT KNA1~KUNNR “Código do cliente KNA1~NAME1 “Nome VBAK~VBELN “Numero do documento de venda INTO TABLE tg_docvendas FROM kna1 “Tabela de clientes INNER JOIN vbak ON vbak~kunnr = kna1~kunnr WHERE kna1~land1 = ‘BR’ AND kna1~regio = ‘SP’.
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.
59
ABAP Open SQL - Join entre Tabelas INNER JOIN Tabela Mand
SPRAS
MAKT MATNR
MAKTX
Check Table Campos Chaves Chave Estrangeira Chave Primária
SELECT INTO FROM INNER
mara~matnr makt~maktx TABLE tg_materiais mara JOIN makt ON makt~matnr = mara~matnr AND makt~spras = sy-langu WHERE mara~matnr = p_matnr.
Check Table Mand
MARA
MATNR
Campos Chaves Chave Primária
60
© by BBKO Consulting
40
Academia – SAP/ABAP R3
ABAP Open SQL - Join entre Tabelas FOR 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.
61
ABAP Open SQL - Acesso ao Banco de Dados
Acesso: Insert TABLES ZTABELA ZTABELA-MATNR ZTABELA-CAMPO2 ZTABELA-CAMPO3
= ‘10' . = ‘002'. = ‘INSERT'.
INSERT INTO ZTABELA VALUES ZTABELA.
53
© by BBKO Consulting
41
Academia – SAP/ABAP R3
ABAP Open SQL - Acesso ao Banco de Dados
Acesso: Delete TABLES ZTABELA. DELETE FROM ZTABELA WHERE MATNR = ‘10'.
54
ABAP Open Open SQL - Acesso ao Banco de Dados
Acesso: Update UPDATE ZTABELA SET CAMPO2 AMPO2 = '002 '002‘ ‘ CAMPO3 = ‘UPDATE' WHERE MA TNR = ‘2 ‘20' .
64
© by BBKO Consulting
42
Academia – SAP/ABAP R3
ABAP Open Open SQL - Acesso ao Banco de Dados
Acesso: Modify TABLES ZTABELA. ZT AB ELA -M AT NR ZT AB ELA -CAMP O2 ZT AB ELA -CAMP O3
= ‘30'. = ‘002' . = ‘MODIF Y'.
MODIFY ZTABELA.
Comando MODIFY: ou altera um registro com a chave já existente ou se não existe, adiciona um novo.
65
© by BBKO Consulting
43
Academia – SAP/ABAP R3
Tipos de Programas
66
Dicas - Tipos de Programas
• Relatórios - O programa consiste em duas telas, telas, a primeira tela é chamada de tela de seleção seleção (selection screen) , nesta tela tela você define define os critérios critérios do relatório e filtros. filtros. A segunda tela é a tela de saída, contém a lista.
• Programas de Diálogo Diá logo (Di (Dialog alog / On-Li On-Line) ne) - O programa pode ter várias telas, em cada tela você pode ter dados de entrada, saída, botões, botões, table table control...
• Includes
58
© by BBKO Consulting
44
Academia – SAP/ABAP R3
Dicas - Editor ABAP Transação SE38, para Relatórios/Includes
59
-Os relatórios consistem em cinco componentes: - Código Fonte - As Características - Os elementos de texto - A documentação - As variantes
© by BBKO Consulting
45
Academia – SAP/ABAP R3
Dicas - Declarações “Básicas” nos programas ABAP -
Tables – Define tabelas ou estru turas com o mesmo nome existent e no Dicionário d e Dados.
-
Types – Definiç ão de Tipos de Dad os.
-
Data - Define campos, variável ou string de campo.
-
Constants – Define um campo/v ariável com valor consta nte, ou sej a, 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’.
© by BBKO Consulting
69
46
Academia – SAP/ABAP R3
Capítulo 5 – Tela de Seleção
Tela de Seleção
63
Tela de Seleção
• Tela de Seleção • Eventos da Tela de Seleção
62
© by BBKO Consulting
47
Academia – SAP/ABAP R3
Tela de Seleção - Exemplo de Parameters
63
© by BBKO Consulting
48
Academia – SAP/ABAP R3
Tela de Seleção - Exemplo de Select-options
64
-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.
© by BBKO Consulting
49
Academia – SAP/ABAP R3
Tela de Seleção - Selection-screen em blocos SELECTION-SCREEN BEGIN OF BLOCK ... WITH FRAME ... TITLE title SELECTION-SCREEN END OF 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', p_dat ra dio bu tt on gr ou p g1 .
" Tipo ASC " T ipo DAT
parameters : p_pc p_unix
" T ip o PC " Tipo UNIX
ra dio bu tt on gr ou p g3 de faul t 'X' , radiobutton group g3.
SELECTION-SCREEN END OF BLOCK entre.
66
Tela de Seleção - Eventos da Tela de seleção
67
© by BBKO Consulting
50
Academia – SAP/ABAP R3
Tela de Seleção - Eventos em Bloco Report Z... Parameters:
p_data like sy-datum default sy-datum.
Initialization. p_d at a = p _dat a – 10.
“Seta valores para a tela de seleção
Start-of-Selection. Write: p_data.
“Início do processamento dos dados
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
68
Dicas
71
© by BBKO Consulting
51
Academia – SAP/ABAP R3
Dicas - Processando Strings
Example DATA letters(3) TYPE C. MOVE 'abc' TO letters. TRANSLATE letters TO UPPER
CASE.
letters now has the contents 'ABC'
Example DATA: letters(20) TYPE C VALUE 'abcabcabcXabc', change(15) TYPE C VALUE 'aXbaYBabZacZB'. TRANSLATE letters USING change. letters now contains 'XaZXaZXaZXXaZ'
70
Dicas - Processando Strings Exemplo DATA NAME (30). NAME(10) = ' Dr.', NAME+10(10) = 'Michael', NAME+20(10) = 'Hofmann'. CONDENSE NAME. WRITE NAME. produces the output: D r. 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.
71
© by BBKO Consulting
52
Academia – SAP/ABAP R3
Dicas – LOOP´s
• DO
... ENDDO
• WHILE
... ENDWHILE
• LOOP
... ENDLOOP
• SELECT ... ENDSELECT
72
© by BBKO Consulting
53
Academia – SAP/ABAP R3
Capítulo 6 – Listas
Listas
84
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
82
© by BBKO Consulting
54
Academia – SAP/ABAP R3
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) 83
© by BBKO Consulting
55
Academia – SAP/ABAP R3
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.
84
-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.
© by BBKO Consulting
56
Academia – SAP/ABAP R3
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.
85
-FORMAT: -Através do FORMAT pode-se manipular o formato dos dados a serem apresentados com WRITE. Pode-se controlar a cor, intensidade, etc.
© by BBKO Consulting
57
Academia – SAP/ABAP R3
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ágina NEW_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. 86
-NEW-PAGE: -Salta uma pagina do relatório.
© by BBKO Consulting
58
Academia – SAP/ABAP R3
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 HEADING line-size 132 line-count 15. DATA: DATUM Type D, TIME TYPE T. * Nova página TOP-OF-PAGE. Write: /5 ’Usuário’(003), sy-uname, O END-OF-PAGE não ocorre quando a quebra de página 80 text-001, sy-pagno. “Páginafoi chamada por um evento NEW -PAGE. O tamanho da END-OF-PAGE. ULINE. WRITE: /10, TEXT-001. “FIM DE PÁGINA
Página deve ser determinado pelo parâmetro do line-count Para chamar o bloco do processamento do END-OF-PAGE
DATUM = SY-DATUM. TIME = SY-UZEIT. Format color col_normal. WRITE: 5 ‘Data’(001), 20 DATUM DD/MM/YYYY. Skip 2. “Pula duas linhas Format color off. WRITE: /5 ‘Hora’ (002), TIME using edit mask ‘_ _:_ _:_ _’ under datum.
87
-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.
© by BBKO Consulting
59
Academia – SAP/ABAP R3
Listas - Armazenar Listas • Você pode armazenar listas resultante de programa
88
© by BBKO Consulting
60
Academia – SAP/ABAP R3
Listas - Enviar diretamente p/ impressora O parâmetro NEW-PAGE PRINT ON envia a lista para o SAP spool database O parâmetro NO DIALOG desabilita a exibição da tela de parâmetros de impressão. Report rel3. NEW-PAGE PRINT ON NO DIALOG DESTINATION ‘LPT1’ IMMEDIATELY ‘X’.
WRITE: / ....
89
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.
91
© by BBKO Consulting
61
Academia – SAP/ABAP R3
Listas - Controle de Nível: Tabela Interna Report rel4. TABLES KNA1. ... DATA TG_ITAB TYPE TABLE OF T YPE_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.
LOOP AT ITAB FIRST. . AT AT NEW < campo> AT END OF < campo> AT LAST. ENDLOOP
... ... ... ...
ENDAT. ENDAT. ENDAT. ENDAT.
Obs.: O campo ORT01 neste exemplo tem que ser o primeiro campo da tabela interna ITAB. 92
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. 93
© by BBKO Consulting
62
Academia – SAP/ABAP R3
Dicas
96
Dicas - Comando Message Message Ennn with () Tipo de mensagens: E – Erro A – Abend X – Exit (termina com um short Dump) W – Warning I – Informação S - Sucesso No parâmetro “REPORT” pode-se acrescentar o parâmetro “MESSAGE-ID”. Exemplo: REPORT ZSDR0010 NO STANDARD PAGE HEADING LINE-SIZE 132 LINE-COUNT 65 MESSAGE-ID ZSD.
94
© by BBKO Consulting
63
Academia – SAP/ABAP R3
Capítulo 7 – Listas Secundárias
Listas Secundárias
98
© by BBKO Consulting
64
Academia – SAP/ABAP R3
Listas Secundárias
96
-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”
© by BBKO Consulting
65
Academia – SAP/ABAP R3
Listas Secundárias - Como selecionar
97
Listas Secundárias - Exemplo do comando HIDE HIDE Line
Hide Area
Line 1
1 2 3
WA_ZFUNC-NUM_ID 0000000001
2
0000000002
3
0000000003
98
© by BBKO Consulting
66
Academia – SAP/ABAP R3
Listas Secundárias - Exemplo SY-LSIND = 0
Duplo click na linha do relatório, ou clicar no ícone
SY-LSIND = 1 Traz dados da Lista Secundária
SY-LSIND = variável de sistema de indica o índice da lista corrente
99
© by BBKO Consulting
67
Academia – SAP/ABAP R3
Listas Secundárias - Exemplo
100
Listas Secundárias - Lista Secundária com GUI STATUS
Lista Básica
Lista Secundária
101
© by BBKO Consulting
68
Academia – SAP/ABAP R3
Listas Secundárias - GUI Title e GUI Status
102
Listas Secundárias - Menu Painter – SE41
103
© by BBKO Consulting
69
Academia – SAP/ABAP R3
Listas Secundárias - Menu Painter
104
Listas Secundárias - Gui Status (exemplo: LIST)
105
© by BBKO Consulting
70
Academia – SAP/ABAP R3
Listas Secundárias - Barra de Menu
106
Listas Secundárias - Barra de Ferramentas da Aplicação
107
© by BBKO Consulting
71
Academia – SAP/ABAP R3
Listas Secundárias - Menu Standard
108
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.
SELECT matnr ersda ernam FROM mara INTO TABLE tg_mara WHERE matnr in so_matnr. LOOP AT tg_mara INTO st_mara. WRITE: /'Material', t_mara-matnr, t_maraersda, t_mara-ernam. HIDE: tg_mara. ENDLOOP.
AT USER-COMMAND. CASE sy-ucomm. WHEN 'TEXTO'. SET pf-status 'LIST' excluding 'TEXTO'. DATA: tg_mara TYPE TABLE OF TYPE_MARA, SET titlebar 'LIST1'. st_mara TYPE TYPE_MARA, st_makt TUPE TYPE_MAKT. SELECT single matnr maktx INTO ( st_makt-matnr,st_makt-maktx) select-options: so_matnr for mara-matnr. FROM makt **************************************** WHERE matnr = t_mara-matnr AND * Evento START-OF-SELECTION spras = 'P '. **************************************** start-of-selection. WRITE: 'Material lista secundária', set pf-status 'LIST'. st_makt-matnr, st_makt-maktx. set titlebar 'LIST'. ENDCASE. 110
© by BBKO Consulting
72
Academia – SAP/ABAP R3
Capítulo 8 – Modularização
Modularização
75
Modularização • Sub-rotinas • Grupo de Funções • Funções
74
© by BBKO Consulting
73
Academia – SAP/ABAP R3
Modularização - Subrotinas
Inicio do Programa
Perform carrega_tab Using Campo 1 Changing tab1
Form carrega_tab Using Campo 1 Changing tab1
....
75
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’.
© by BBKO Consulting
74
Academia – SAP/ABAP R3
Modularização - Chamando por valor e por referência
76
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.
© by BBKO Consulting
75
Academia – SAP/ABAP R3
Modularização - Grupo de Função e Função
77
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.
© by BBKO Consulting
76
Academia – SAP/ABAP R3
Modularização - Grupo de Função e Função • Grupo de Funções e Funções
78
- 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.
© by BBKO Consulting
77
Academia – SAP/ABAP R3
Modularização - Grupo de Função e Função
1. Criar o Grupo de função
2. Associar o módulo de função ao Grupo
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.
79
Modularização - Exemplo de programa e função
80
© by BBKO Consulting
78
Academia – SAP/ABAP R3
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[ ]
TABLES t_outtab
= Tabela de Dados
EXCEPTIONS program_error
=1
OTHERS
= 2.
fieldcat-col_pos = '01'. f ie ld ca t-k ey = ' 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 fieldc at. 119
© by BBKO Consulting
79
Academia – SAP/ABAP R3
Capítulo 9 – Data Transfer
Transferência de Dados
114
Transferência de Dados • Processando Arquivo Seqüencial • Call Transaction • Batch Input
111
© by BBKO Consulting
80
Academia – SAP/ABAP R3
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. EXIT. ENDIF. APPEND T_DATA_LOAD. ENDDO. ENDIF.
"fim de arquivo/arq. s/ registros "indica fim de arquivo
112
Transferência de Dados - Binary Mode e Text Mode
113
© by BBKO Consulting
81
Academia – SAP/ABAP R3
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'. ..... 114
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' exporting filename filetype
= l_filename = v_type
tables data_tab
= t_data_load
exceptions conversion_error file_open_error file_read_error invalid_type no_batch unknown_error i nva li d_t ab le_ wi dth gui_refuse_filetransfer customer_error others
= = = = = = = = = =
1 2 3 4 5 6 7 8 9 10.
Acesso a arquivo externo via UNIX, utilizar os comandos: OPEN DATASET FOR INPUT IN TEXT MODE MESSAGE 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.
115
© by BBKO Consulting
82
Academia – SAP/ABAP R3
Transferência de Dados - Acesso a arquivos externos Acesso a arquivo externo via UNIX, utilizar os comandos: OPEN DATASET FOR INPUT IN TEXT MODE MESSAGE 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.
116
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
TABLES DATA_TAB = T_SAIDA
EXCEPTIONS OTHERS
= 8.
117
© by BBKO Consulting
83
Academia – SAP/ABAP R3
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 . OPEN DATASET FOR OUTPUT IN TEXT MODE MESSAGE LOOP AT . TRANSFER TO . ENDLOOP. CLOSE DATASET .
118
Transferência de Dados - Transferindo Dados Externos SAP ( Host )
Dados Externos
SAP INTERFACES
BANCO SAP
119
© by BBKO Consulting
84
Academia – SAP/ABAP R3
Transferencia de Dados - Transferindo Dados Externos Arquivo Seqüêncial Dicionário ABAP/4
READ DATASET Programa de BATCH INPUT
Estrutura BDCDATA
Tabela BDC INCLUDE STRUCTURE
CALL FUNCTION
FILA 120
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
121
© by BBKO Consulting
85
Academia – SAP/ABAP R3
Transferência de Dados - Entrada e Saída de Dados Atualizando dados Update 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 Call Transaction.
Call Transaction WA_BDCDATA-PROGRAM = 'SAPMS38M'. “Informa o nome/numero da tela WA_BDCDATA-D YNPRO = '0100'. WA_BDCDATA-DYNBEGIN = 'X'. APPEND WA_BDCDATA TO BDCDATA. CLEAR WA_BDCDATA. WA_BDCDATA-FNAM = 'RS38M-PROGRAMM'. “Preenche campos da tela WA_BDCDATA-F VAL = 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.
122
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.
© by BBKO Consulting
123
86
Academia – SAP/ABAP R3
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_TCODE USING 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_TRANSACTIO N
********************************************************************** * FORM BDC_MESSAGE ********************************************************************** FORM BDC_MESSAGE. CLEAR W_MESS.
124
Transferência de Dados - Entrada e Saída de Dados SELECT SINGLE WHERE AND AND
* FROM T100 SPRSL = 'P' ARBGB = T_MESS-MSGID 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. 125
© by BBKO Consulting
87
Academia – SAP/ABAP R3
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'. “Salvar PERFORM BDC_FIELD USING 'BDC_CURSOR' 'ISEGMATNR(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 cursor BDC_OKCODE : Para indicar a operação a realizar após o preenchimento da tela. 126
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 = NOMEPASTA USER = USER KEEP = KEEP HOLDDATE = HOLDDATE. CALL FUNCTION 'BDC_INSERT' EXPORTING TCODE = TCODE TABLES DYNPROTAB = T_BDCDATA.
CALL FUNCTION 'BDC_CLOSE_GROUP'. 127
© by BBKO Consulting
88
Academia – SAP/ABAP R3
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
128
Transferência de Dados - Transação SHDB
129
© by BBKO Consulting
89
Academia – SAP/ABAP R3
Transferência de Dados - Transação SHDB
130
Transferência de Dados - Transação SHDB
131
© by BBKO Consulting
90
Academia – SAP/ABAP R3
Transferência de Dados - Transação SHDB
132
Transferência de Dados - Transação SHDB
133
© by BBKO Consulting
91
Academia – SAP/ABAP R3
Transferência de Dados - Transação SHDB
134
Transferência de Dados - Layout do arquivo de entrada Arquivo .txt de entrada (para este exemplo do SHDB, executado): Seq Campo
Tipo
1–
Código do material
– char 18 posições, alinhado a esquerda
2–
Descrição do Material
– char 40 posições
135
© by BBKO Consulting
92
Academia – SAP/ABAP R3
Transferência de Dados - Tela com parâmetros de Batch Input
136
Transferência de Dados - SM35Executar pasta de Batch Input
137
© by BBKO Consulting
93
Academia – SAP/ABAP R3
Transferência de Dados - SM35
138
- 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>
© by BBKO Consulting
94
Academia – SAP/ABAP R3
Capítulo 10 – Programação On-Line
Programação On-Line
143
© by BBKO Consulting
95
Academia – SAP/ABAP R3
Programação On-line - Module-pool • Partes de uma tela
Atributos Da Tela
Screen Number Short Description Screen type Next Screen ...
Layout Da Tela
Screen Number Short Description Screen type Next Screen ...
Atributos dos campos
Field Name Type Length ...
Controle do Fluxo Process Before Output. Module Clear-ok_code.
Controle do Fluxo Process After Input Module User_Command_0100
140
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.
© by BBKO Consulting
96
Academia – SAP/ABAP R3
Programação On-line - Criação de um Dialog Program
Código Código do do Cliente Cliente
Nome Nome Endereço Endereço
141
- 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.
© by BBKO Consulting
97
Academia – SAP/ABAP R3
Programação On-line – Chamada dinâmica da próxima tela Tela 100 Próxima tela 200
PBO
PAI
Module ... Set Screen 300. Leave Screen. Endmodule.
Tela 300 Próxima tela 400
PBO
PAI
Module ... Set Screen 0. Leave Screen. Endmodule.
O comando SET SCREEN 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>”
O comando SET SCREEN 0 e LEAVE Screen volta para a tela que chamou, no caso tela 300. 142
© by BBKO Consulting
98
Academia – SAP/ABAP R3
Programação On-line - Programa Lógico
143
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.
© by BBKO Consulting
99
Academia – SAP/ABAP R3
Programação On-line - Dialog Program – Seq Ações Sequência de Ações PROCESS BEFORE OUTPUT. MODULE A . PROCESS AFTER INPUT. MODULE B.
Screen Painter
Action sequence Execute module A Data transport from ABAP/4 to screen work area Send Send screen ENTER Data transport from screen to ABAP/4 ABAP/4 work area Execute module B
ã
144
- 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.
© by BBKO Consulting
100
Academia – SAP/ABAP R3
Programação On-line - Atributos da tela Modificações Dinâmicas em Telas
Change <-> Display
A B
Change <-> Display
A B
output field
input and output field
ã
146
- 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.
© by BBKO Consulting
101
Academia – SAP/ABAP R3
Programação On-line - Atributos da tela Atributos modificábeis da tabela SCREEN SCREEN-NAME SCREEN-GROUP1 SCREEN-GROUP2 SCREEN-GROUP3 SCREEN-GROUP4
Field name Modification group 1 Modification group 2 Modification group 3 Modification group 4
SCREEN-REQUIRED
Required field
SCREEN-INPUT
Input field
SCREEN-OUTPUT
Output field
SCREEN-INTENSIFIED
Highlighted field
SCREEN-INVISIBLE
Invisible field
SCREEN-LENGTH
Field length
SCREEN-ACTIVE
Active field
SCREEN-DISPLAY_3D
3-dimensional field
SCREEN-VALUE_HELP
Field with value help
SCREEN-REQUEST
Input exists (PAI only)
ã
146
- 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.
© by BBKO Consulting
102
Academia – SAP/ABAP R3
Programação On-line - Atributos do campo na tela Atributos do campo – Grupos de Modificação
Screen Painter
Field list: Modification groups Fie ld name
Gr 1 Gr2 Gr3 Gr4
SPFLI_ITAB-CONNID SPFLI_ITAB-CITYFROM SPFLI_ITAB-CITYTO ...
SEL SEL SEL
...
ã
147
- Você pode associar um campo a quatro diferentes grupos. Os nomes dos grupos podem ter até 3 caracteres e podem ser definidos livremente.
© by BBKO Consulting
103
Academia – SAP/ABAP R3
Programação On-line - Modificação em telas Modificações Dinâmicas em Telas - Programa Screen Painter
PROCESS BEFORE OUTPUT. . . . MODULE MODIFY_SCREEN. . . . MODULE MODIFY_SCREEN MODIFY_SCREEN OUTPUT.
ABAP/4
...
LOOP LOOP AT SCREEN. SCREEN. IF SCREEN-GROUP1 SCREEN-INPUT SCREEN-INPUT = ENDIF. ENDIF. IF SCREEN-NAME SCREEN-ACTIVE ENDIF. ENDIF. MODIFY SCREEN. SCREEN.
= 'SEL'. 1. = ' SFLIGHT-CARRID = 0.
'.
ENDLOOP. ENDMODULE.
ã
148
- 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.
© by BBKO Consulting
104
Academia – SAP/ABAP R3
Programação On-line - Condição na chamada dos Modules - Se quiser que o module seja chamado somente se o conteúdo do campo foi alterado do seu valor inicial. PROCESS AFTER INPUT. FIELD Module Verifica_Campo ca_Campo ON INPUT. INPUT.
Module Verifica_Campo ... message message E ... ... Endmodule.
- Dentro do bloco 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 , ... < campo n> Module Verifica_Campo Verifica_Campo ON CHAIN-INPUT. CHAIN-INPUT. ENDCHAIN.
Module Verifica_Campo ... message message E ... ... Endmodule.
150
Programação On-line - Condição na chamada dos Modules - Se quiser que o module seja chamado somente se o conteúdo do campo foi alterado do seu valor inicial. PROCESS AFTER INPUT. FIELD Module Verifica_Campo ca_Campo ON INPUT. INPUT.
Module Verifica_Campo ... message message E ... ... Endmodule.
- Dentro do bloco 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 , ... < campo n> Module Verifica_Campo Verifica_Campo ON CHAIN-INPUT. CHAIN-INPUT. ENDCHAIN.
Module Verifica_Campo ... message message E ... ... Endmodule.
150
© by BBKO Consulting
105
Academia – SAP/ABAP R3
Programação On-line - Condição na chamada dos Modules - Se adicionar o parâmetro ON REQUEST no module, o module somente é chamado se o usuário digitar um novo valor neste campo PROCESS AFTER INPUT. FIELD Module Verifica_Campo ON REQUEST.
Module Verifica_Campo ... message E ... Endmodule.
- 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 c ampos dentro do bloco CHAIN. PROCESS AFTER INPUT. CHAIN. FIELD , ... < campo n> Module Verifica_Campo ON CHAIN-REQUEST. ENDCHAIN.
Module Verifica_Campo ... message E ... Endmodule.
151
Programação On-line - Condição na chamada dos Modules - O parâmetro adicional AT EXIT-COMMAND, faz com que o module seja processado antes das verificações automáticas de entrada de dados.
PROCESS AFTER INPUT. Module exit AT EXIT-COMMAND.
Module EXIT Input. Case ok_code. when ‘CANCEL’. clear ok_code. leave to screen 0. when ‘EXIT’. leave program. Endcase. Endmodule.
152
© by BBKO Consulting
106
Academia – SAP/ABAP R3
Programação On-line - Criar Dialog Program – SE80
153
- 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.
© by BBKO Consulting
107
Academia – SAP/ABAP R3
Programação On-line - Cria Dialog Program
154
-Nos atributos do programa, você define o Título, categoria e a aplicação. Categoria é Module Pool e Aplicação é BASE
© by BBKO Consulting
108
Academia – SAP/ABAP R3
Programação On-line - Criar tela em Dialog Program
155
- Criar tela no Dialog Program: Posicionar o cursor no nome do programa e clicar o botão direto do mouse
© by BBKO Consulting
109
Academia – SAP/ABAP R3
Programação On-line - Criar tela em Dialog Program 1 - Digitar o numero da tela
156
© by BBKO Consulting
110
Academia – SAP/ABAP R3
Programação On-line - Criar tela Dialog Program
157
- 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).
© by BBKO Consulting
111
Academia – SAP/ABAP R3
Programação On-line - Criar tela Dialog Program Clica no ícone
158
- 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
para digitar o campo variável utilizamos o ícone ferramentas.
© by BBKO Consulting
e da barra de
112
Academia – SAP/ABAP R3
Programação On-line - Exemplo: Criar tela 200
159
-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.
© by BBKO Consulting
113
Academia – SAP/ABAP R3
Programação On-line - Criar tela – Declarar ariáveis
160
- 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”.
© by BBKO Consulting
114
Academia – SAP/ABAP R3
Programação On-line - Criar Tela – Criar Modules
161
-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 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).
© by BBKO Consulting
115
Academia – SAP/ABAP R3 -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’.
Programação On-line - Criar Modules
162
Programação On-line - Criar Modules
163
© by BBKO Consulting
116
Academia – SAP/ABAP R3
Programação On-line - GUI Title e GUI Status
168
- 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.
© by BBKO Consulting
117
Academia – SAP/ABAP R3
Programação On-line - Criação de GUI Status
165
Programação On-line - Criar GUI Status – Barra de Menu
166
© by BBKO Consulting
118
Academia – SAP/ABAP R3
Programação On-line - Criar GUI Status – Barra de Botões
167
-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
© by BBKO Consulting
119
Academia – SAP/ABAP R3
Programação On-line - Criar GUI Title
168
-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.
© by BBKO Consulting
120
Academia – SAP/ABAP R3
Programação On-line - Fluxo Lógico – tela 100
169
Código dos Modules, acima:
© by BBKO Consulting
121
Academia – SAP/ABAP R3
Programação On-line - Fluxo Lógico – tela 100
169
Código dos Modules, acima:
© by BBKO Consulting
122
Academia – SAP/ABAP R3
Programação On-line - Fluxo Lógico – tela 200
170
-Segue
© by BBKO Consulting
123
Academia – SAP/ABAP R3
Programação On-line - Fluxo Lógico – tela 200
170
-Segue
© by BBKO Consulting
124
Academia – SAP/ABAP R3
Programação On-line - Organização do Programa
Sub-Rotinas PAI PBO Declarações Globais
171
Criar transação para On-Line
172
© by BBKO Consulting
125
Academia – SAP/ABAP R3
Criar transação para On-Line
173
- Para executar programa tipo ‘M’ (Module Pool) você deve criar pelo menos uma transação.
© by BBKO Consulting
126
Academia – SAP/ABAP R3
Programação On-line - Transação – ZFUNC01 – tela 100
174
Programação On-line - Tela 200 Consulta
175
© by BBKO Consulting
127
Academia – SAP/ABAP R3
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.
© by BBKO Consulting
128
Academia – SAP/ABAP R3 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.
© by BBKO Consulting
129
Academia – SAP/ABAP R3
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 CHAR NUMC
Tipo de dados no ABAP/4 C 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.
© by BBKO Consulting
130
Academia – SAP/ABAP R3
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 Create Escolher
Programs
SAPMTALA
Transactions Código de Transação Tipo de Transação Continue Transaction code Transaction text Program Screen number
TALA X Dialog transaction TALA Test SAPMTALA 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.
© by BBKO Consulting
131
Academia – SAP/ABAP R3 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 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.
© by BBKO Consulting
132
Academia – SAP/ABAP R3
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 submenus e linhas separadoras. Você poderia especificar também todas as funções que são ativadas num status como ativa na barra de menu.
© by BBKO Consulting
133