Apostila - ABAP2

53
 REPORT AV ANÇADO: LÓGICA DE P ROCESSAMENTO Eventos comuns Os eventos são utilizados para estruturar o programa. Os eventos comuns apenas separam os códigos e inicializam variáveis. Não são obrigatórios. INITIALIZATION: Dentro do bloco initialization, é possível definir valores para as variáveis declaradas. Es te bl oc o é defi nido antes de come ça r a programa çã o bá si ca (ST AR T -OF- SELECTION), pois nela serão utilizado os valores previamente definidos. START-OF-SELECTION: Bloco da execução principal do programa. Nele estarão toda a seleção e tratamento dos dados. END-OF-SELECTION: Último evento utilizado, nele normalmente é colocado a lógica de saída do report.  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________  ____________ __________ Página 1 de 53

Transcript of Apostila - ABAP2

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 1/53

REPORT AVANÇADO: LÓGICA DE PROCESSAMENTO

Eventos comuns

Os eventos são utilizados para estruturar o programa. Os eventos comuns apenasseparam os códigos e inicializam variáveis.Não são obrigatórios.

INITIALIZATION:Dentro do bloco initialization, é possível definir valores para as variáveis declaradas.Este bloco é definido antes de começar a programação básica (START-OF-SELECTION), pois nela serão utilizado os valores previamente definidos.

START-OF-SELECTION:Bloco da execução principal do programa. Nele estarão toda a seleção e tratamentodos dados.

END-OF-SELECTION:Último evento utilizado, nele normalmente é colocado a lógica de saída do report.

 ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________ 

 ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________  ____________________________________________________________________ 

Página 1 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 2/53

EVENTOS COMUNS

Exemplo:

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 2 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 3/53

EVENTOS AVANÇADOS

Os eventos avançados são utilizados para efetuar validações e criar reports

interativos.São utilizados de acordo com as necessidades.

At Selection-Screen:Dentro do bloco at.-selection-screen, são definidas as validações dos parâmetrosinseridos pelo usuário. O bloco deverá estar entre os blocos INITIALIZATION e oSTART-OF-SELECTION.Antes do programa ser executado ou a cada enter pressionado o bloco definidodentro do evento at.-selection-screen será executado.

At Line-Selection

Utilizados para criação de lista de detalhes. Após a impressão na tela do report, épossível tornar interativo, clicando na linha, é possível executar outra rotina.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 3 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 4/53

Exemplo:

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Página 4 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 5/53

 ____________________________________________________________________

COMANDOS PERFORM E FORM

Utilizamos a instrução PERFORM para a chamada de FORM´s (sub-rotinas). Servepara melhorarmos a codificação.Podemos criar algumas sob-rotinas que são blocos de código iniciados pelocomando FORM e finalizados pelo comando ENDFORM. Podem ser chamadasdiversas vezes dentro da programação principal, assim não precisamos repetir omesmo código dentro da codificação. Não há limites para a criação de FORM’s.

A sub-rotina poderá receber e retornar parâmetros.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 5 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 6/53

 ____________________________________________________________________Exemplo:

Página 6 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 7/53

COMANDOS AT..

Os comandos listados a seguir nos permitem fazer um processamento nivelado deuma tabela interna dentro de um LOOP.É possível tratar as seguintes mudanças na tabela interna.

COMANDO LEVEL DESCRIÇÃO

AT FIRST Inicio Primeira linha da tabela internaAT LAST Fim Ultima linha da tabela internaAT NEW <F> Novo Campo Começo de um grupo das linhas com os

mesmos indices no campo <F> e nos

campos à esquerda de <F>AT END OF <F> Termino Campo Extremidade de um grupo das linhas com

os mesmos índices no campo <F> e noscampos à esquerda de <F>

 Dentro da instrução AT, é definido um bloco de instrução que é finalizado com aestrutura ENDAT.

SINTAXE:AT < level >.

< statement block >

ENDAT.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 7 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 8/53

 ____________________________________________________________________ ____________________________________________________________________Exemplo:

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Página 8 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 9/53

 ____________________________________________________________________ ____________________________________________________________________Exemplo:

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 9 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 10/53

 ____________________________________________________________________

TABELAS INTERNAS

Composição: Tipo de linha: o tipo de linha de uma tabela interna pode ser qualquer tipo de dadosdo ABAP.

Seqüência da chave: Os campos chaves e suas seqüências o critério pelo qual osistema identifica as linhas da tabela.

Atributos não únicos: Podem-se definir os campos de uma tabela interna comoúnica ou não única. Se a chave é única, não poderá haver duplicatas.

Tipo da tabela: O tipo da tabela define como o ABAP acessa uma linha individual natabela. Pode ser feito pelo índice direto ou pela chave primária.

Tipos: há três tipos de tabelas internas e seus tipos de acesso aos dados:

Standard TABLE: em tabelas Standard, para acessar os dados pode-se usar oíndice da tabela ou então a chave. Se o acesso é feito pela chave primária, o tempode resposta é linearmente relativo ao número de entradas de uma tabela.

SINTAXE:DATA: BEGIN OF TI_TAB OCCURS <N>,

<LAYOUT>,END OF TI_TAB.

READ TABLE TI_TAB WITH TABLE KEY <FIELD> = VALUEBINARY SEARCH.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 10 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 11/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________Sorted TABLE: Sorted tables são sempre armazenadas em ordem de acordo com a

chave. O acesso pode ser feito pela chave ou pelo índice direto na tabela. Se for utilizada a chave, o tempo de resposta é logaritmamente relacionado ao número deentradas na tabela desde que o sistema utiliza busca binária. A chave pode ser única ou não única.

SINTAXE:DATA: TI_TAB TYPE SORTED TABLE OF <LAYOUT>

<WITH UNIQUE KEY [KEY]>WITH HEADER LINEINITIALSIZE <TAM>.

READ TABLE TI_TAB WITH TABLE KEY <FIELD> = VALUE.

Neste comando não é necessário utilizar todos os campos da chave. O tempo deacesso aos dados também é eficiente e permite uma utilização do meio dearmazenamento dos dados, o qual deixa todos os dados ordenados.

Apesar de ter um bom desempenho no acesso da tabela, na inserção e deleção otempo de processo é mais elevado pelo fato de ter o ordenamento implícito noscomandos.

 ____________________________________________________________________

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 11 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 12/53

 ____________________________________________________________________ ____________________________________________________________________

Hashed TABLE: podem apenas serem acessadas pela chave primária. O tempo de

recuperação dos dados é constante, independente do número de entradas da tabela,desde que o acesso seja feito usando um algorismo de mistura (hash). Estealgoritmo é determinado internamente, sendo que a chave deve ser sempre única.

SINTAXE:DATA: TI_TAB TYPE HASHED TABLE OF <LAYOUT>

WITH UNIQUE KEY <KEY>WITH HEADER LINEINITIALSIZE <TAM>.

READ TABLE TI_TAB WITH TABLE KEY <FIELD> = VALUE.

A utilização de uma tabela HASH deve ser feita quando for acessar registrossimples, com chave única.Neste caso o comando é eficiente pois deve-se usar todos os campos da chave databela.

Selecionando o tipo de Tabela

Custo de acessoNúmero de entradas na tabela

5 10 20 40 80 160 320 640 1280Standard 52 121 335 1081 3884 14999 59700 23821

4951704

Sorted 44 87 177 391 862 1895 4048 8587 18136Hashed 41 78 151 305 613 1249 2497 5080 10537Tempo em microssegundos

Para processos onde o volume de dados é muito maior, a utilização do processohash é muito mais eficiente.Para a definição das tabelas internas, e necessário que seja preenchida a cláusulaoccurs. Como defini - lá? Para isto, deve-se conhecer o volume de dados e a forma

de inserção dos dados na tabela interna. Isto porque o número especificado para asocorrências (occurs) indica de quanto em quanto a tabela terá sua alocação dememória. Isto é, para uma tabela definida com occurs 10, na primeira inserção dedados (append, collect, insert) serão alocados 10 registros; na inserção do 11°

registro, serão alocados mais 10 posições e assim por diante.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 12 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 13/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ___________________________________________________________ _________ 

Cargas eficientes em tabelas internas

Quando houver necessidade de se copiar tabelas internas com a mesma estrutura,utilize o comando APPEND LINES ou o uso de TAB1[] = TAB2[], para executar acópia. Você também pode utilizar o comando APPEND LINES para copiar certaquantidade de linhas.

Exemplo:

Em vez de utilizar o comando:

LOOP AT TI_TAB1 INTO WA.APPEND WA TO TI_TAB2.

ENDLOOP.

Utilize o comando:

APPEND LINES OF TI_TAB1 TO TI_TAB2.

APPEND LINES OF TI_TAB1 FROM 2 TO 20 TO TI_TAB2.

Ou

TI_TAB2[ ] = TI_TAB1[ ].

Outros comandos eficientes de carga de dados em tabelas internas:

SELECT ... FROM ... INTO TABLE <TI_TAB>.

SELECT ... FROM ... APPENDING TABLE <TI_TAB>.

INSERT LINE OF <TI_TAB1> TO <TI_TAB2>.

COLLECT [ <WA> INTO ] <TI_TAB>

DELETE ADJACENT DUPLICATES FROM <TI_TAB>.[ COMPARING F1 F2 … ]

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 13 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 14/53

 ____________________________________________________________________ ____________________________________________________________________ ___________________________________________________________ _________ 

Quando executamos uma leitura usando o comando READ em uma tabela internaque possua mais de 20 registros, é aconselhável o uso do complemento BINARYSEARCH ou definirmos a tabela como SORTED TABLE. Quando usamos ocomplemento BINARY SEARCH, o tempo de pesquisa na tabela interna seráincrivelmente reduzido devido à pesquisa binária que será executada.

Exemplo:

READ TABLE TI_TAB WITH KEY K = Y BINARY SEARCH.

O transporte para a memória de apenas campos que se fazem necessário dá um

ganho de performance significativo, principalmente se a tabela for muito grande.A utilização do TRASPORTING NO FIELDS permite que seja verificada a existênciade um dado na tabela sem que seja feita nenhuma transferência da tabela para amemória. Esta não transferência deixa o ambiente mais limpo e com a memória maislivre para o trabalho.

MODIFY <TI_TAB> TRANSPORTING <F1> ... <FN>.

READ <TI_TAB> TRANSPORTING <F1> … <FN> [ NO FIELDS ].

LOOP <TI_TAB> TRANSPORTING NO FIELDS.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 14 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 15/53

 ____________________________________________________________________

COMANDOS SELECT

Visando garantir a performance e evitar problemas futuros, cuidado com oscomandos empregados.Existem alguns tipos de selects mais eficientes que outros. Normalmente, o maior tempo de processamento está localizado no acesso ao DB Server. Assim, toda vezque foi reduzida a comunicação entre o Application Server e o DB Server, será obtidoum ganho em termos de performance.

1 – SELECT ... FROM <TABLE>

INTO TABLE <INTERNAL TABLE>.A estrutura da tabela interna deve corresponder à estrutura da tabela que está sendoacessada. O sistema lê os registros em conjunto, não individualmente, e os colocadentro de um LOOP e ir gravando os registros, um a um.

2 – SELECT ... FROM <TABLE>APPENDING TABLE <INTERNAL TABLE>.

Lê os registros e os inclui - não sobrepõe - em uma tabela interna.

3 – SELECT ... FROM <TABLE>INTO CORRESPONDING TABLE <INTERNAL TABLE>.

Neste caso a estrutura da tabela interna não precisa corresponder à estrutura databela que está sendo acessada. Movimentará os registros para as colunas definidasna tabela que possua, nome igual ao da tabela acessada.

4 – SELECT ... FROM <TABLE>APPENDING CORRESPONDING FIELDS OF TABLE <INTERNAL TABLE>.

Lê e inclui (não sobrepõe) os dados em uma tabela interna que possua nomesidênticos aos nomes da tabela que está sendo lida.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Página 15 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 16/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

5 – SELECT SINGLE ... FROM <TABLE>WHERE <CAMPO> = <CONTEUDO>.Toda vez que se usa select single a chave primária completa deve ser especificada.Se a chave especificada não é qualificada, você receberá uma mensagem dewarning durante o check e a performance ficará prejudicada.Deve-se sempre com SINGLE utilizar a chave primária completa na chave. No casode haver a necessidade de acessar um único registro via select, as opções são.

SELECT ... FROM <TABLE>WHERE <CAMPO> = <CONTEUDO>.

EXIT.ENDSELECT.

OU

SELECT ... FROM <TABLE> UP TO 1 ROWSWHERE <CAMPO> = <CONTEUDO>.

ENDSELECT.

6 – SELECT ... FROM <TABLE>.Quando não se impões nenhum tipo de restrição, ocorre uma varredura seqüencialdos registros da tabela. Quando se utiliza grandes tabelas, isso pode afetar o tempode execução.

7 – SELECT * FROM <TABLE>.Select* seleciona todas as colunas de uma tabela. É melhor especificar as colunas,pois em caso de tabelas eco muitas com muitas colunas, prejudicará performance.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 16 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 17/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

8 – SELECT ... FROM <TABLE>WHERE <CAMPO> = <CONTEUDO>.ENDSELECT.Lê todos os registros da tabela especificada onde o campo é igual ao conteúdoespecificado.

9 – SELECT <A1> <A2> ... INTO ( <F1> <F2> … )FROM … <TABLE>WHERE … .

Lê as colunas especificadas (a1, a2). Após INTO deverão ser especificadas as áreas

de trabalho auxiliares (f1,f2). O número de colunas lidas deverá ser igual ao númerode áreas de trabalho especificadas.

10 – SELECT ... FROM <TABLE>WHERE <TABLE FIELD>BETWEEN <FIELD1> AND <FIELD2>.

Trabalha com o range especificado nos campos <field1> e <field2>. Inclusive eles.

11 – SELECT ... FROM <TABLE>WHERE <TABLE FIELD> LIKE ... ’ _R%’.

 _=a primeira letra não importa qual a segunda foi definida como R%=não importa a seqüência de caracteres que virá.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 17 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 18/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

12 – SELECT MAX ( FIELD )MIN ( FIELD )AVG ( FIELD )COUNT (*) FROM <TABLE>INTO ( …, ..., ..., ..., ... )WHERE ... .

AVG e SUM: somente para campos numéricos.Não se usa ENDSELECT.

13 – SELECT ... FROM <TABLE>

WHERE < TABLE FIELD > IN ( ..., ..., ... )Exemplo: Os campos definidos na listagem, podem ser literais. É igual perguntar seo campo 1 é 123 ou 1000.

14 – SELECT ... FROM <TABLE>WHERE <TABLE FIELD> IN <INTERNAL TABLE>.

Exemplo:

DATA: BEGIN OF TI_TAB OCCURS 10,SIGN(1),OPTION(2),LOW LIKE SFLIGHT-PRICE,HIGH LIKE SFLIGHT-PRICE,

END OF TI_TAB.

Ou

RANGES: TI_TAB FOR SFLIGHT-TABLE.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 18 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 19/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

(A estrutura de tabela interna gerada e é a mesma do select-options)MOVE: ‘I’ TO TI_TAB-SIGN,‘BT’ TO TI_TAB-OPTION,‘500’ TO TI_TAB-LOW,‘1000’ TO TI_TAB-HIGH.

APPEND TI_TAB.

MOVE: ‘I’ TO TI_TAB-SIGN,‘BT’ TO TI_TAB-OPTION,‘440’ TO TI_TAB-LOW,‘450’ TO TI_TAB-HIGH.

APPEND TI_TAB.

15 – SELECT ... FROM <TABLE> INTO <WORK AREA>.Move os valores do registro lido para a área de trabalho.

16 – SELECT ... FROM (TABNAME) ... .… … …

ENDSELECT.obs.: especificando o nome da tabela pode ser especificado dinamicamente noselect statement, porém sempre consome mais tempo de CPU que especificandoestaticamente no programa.

17 – SELECT ... FROM <TABLE>FOR ALL ENTRIES IN <INTERNAL TABLE>WHERE CAMPO1 = <INTERNAL TABLE>-CAMPO1

AND CAMPO2 = <INTERNAL TABLE>-CAMPO2.Defino uma tabela interna. Alimento os campos desta tabela interna. (move eappend). No select campo1 e campo2 serão os campos definidos e alimentados databela interna. O comando select...for al entries é extremamente interessante, pois

faz a função de um join. Somente na versão 4.0 existe e pode-se utilizar o comandoJOIN para o ABAP.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 19 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 20/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

18 – SELECT ... FROM <TABLE>WHERE ...ORDER BY <FIELD1>, <FIELD2>.

SELECT … FROM <TABLE>WHERE …ORDER BY PRIMARY KEY.

Obs.: Classifica a tabela interna numa área auxiliar, sem afetar a tabela original.Evitar o uso de sorts dentro de um select. Consome mais tempo que descarregar osdados em uma tabela interna e classificá-los. A não ser que se esteja acessando viaprimary key, ou seja, índice primário ou os campos definidos no order by tenham um

índice apropriado.

19 – SELECT CARRID MIN ( PRICE ) MAX ( PRICE )INTO (CARRID, MINIMUM, MAXIMUM)FROM SFLIGHTWHERE …GROUP BY CARRID.

Todos os campos que eu quero que apareçam na minha lista eu preciso especificar após a cláusula GROUP BY.carrid, maximum e minimum são campos auxiliares. Seo nome do database não é conhecido até runtime não se pode especificar a cláusulaGROUP BY.

20 – SELECT ... FROM <TABLE>WHERE ...BYPASSING BUFFER.

Usado para ler diretamente da tabela original, e não do buffer. 

TESTE – SELECT: Para saber se o select encontrou algum registro ou não,

utilizamos uma variável de sistema SY-SUBRC, se o conteúdo dessa variável for 0encontrou caso contrário não encontrou nenhum registro.

 ________________________________________________________________

 ________________________________________________________________

 ________________________________________________________________

 ________________________________________________________________

 ________________________________________________________________

 ________________________________________________________________

 ________________________________________________________________

 ________________________________________________________________

Página 20 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 21/53

 ________________________________________________________________

 ________________________________________________________________

COMANDO INSERT

O comando INSERT insere um novo registro no banco de dados, a partir de umaárea de dados especificada em TABLES ou uma área declarada com DATA. Parausar INSERT, devem-se colocar os dados desejados na área intermediária e, emseguida, chamar o comando INSERT. Caso a área não seja especificada emTABLES, deve ser usada a opção FROM.

SINTAXE:TABLE-CAMPO1 = VG_CAMPO1.

TABLE-CAMPO2 = VG_CAMPO2.TABLE-CAMPO3 = VG_CAMPO3.INSERT <TABLE>.

COMANDO UPDATE

O comando UPDATE funciona como o comando INSERT, podendo alterar dados nobanco a partir de uma área ou tabela interna. No caso da tabela interna, não énecessário especificar a cláusula WHERE: serão alterados os registros

correspondentes de acordo com as chaves.

SINTAXE:UPDATE <TABLE>

SET CAMPO1 = VG_CAMPO1CAMPO2 = VG_CAMPO2

WHERE CAMPO3 = VG_CAMPO3AND CAMPO4 = VG_CAMPO4.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 21 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 22/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

COMANDO MODIFY

O comando MODIFY opera da mesma forma que o comando UPDATE, mas insereum novo registro caso o registro especificado não exista.

SINTAXE:TABLE-CAMPO1 = VG_CAMPO1.TABLE-CAMPO2 = VG_CAMPO2.TABLE-CAMPO3 = VG_CAMPO3.

MODIFY <TABLE>.

COMANDO DELETE

O comando DELETE elimina registros do banco. Ele opera da mesma forma que ocomando INSERT

SINTAXE:DELETE FROM <TABLE>WHERE CAMPO1 = VG_CAMPO1.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Página 22 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 23/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Report Avançado: Lógicas de Impressão

COMANDO WRITEO comando básico no ABAP para imprimir informações na tela é o WRITE.

SINTAXE:WRITE <F>.

O Campo <F> pode ser: Objeto de dados

Parâmetro Etc.

Exemplo:REPORT ZEXEMPLO_WRITE_01.DATA NUMBER TYPE P VALUE ‘-1234567.89’ DECIMALS 2.WRITE: ‘Number’, NUMBER, ‘is packed’.

Podemos posicionar o local de saída da informaçãoSINTAXE:WRITE AT [ / ] [ <POS> ] [ (<LEN>) ] <F>.

Onde: A ‘/’ indica uma nova linha <pos> é um número ou variável que indica a posição que será impressa <len> é o número ou variável que indica o tamanho de saída

Exemplos:REPORT ZEXEMPLO_WRITE_02.

WRITE ‘Primeira Linha.’.

WRITE ‘Continua na Primeira Linha.’WRITE / ‘Segunda Linha.’WRITE /13 ‘Terceira Linha.’.

REPORT ZEXEMPLO_WRITE_03.

DATA: LEN TYPE I VALUE 10,POS TYPE I VALEU 11,TEXT(10) TYPE C VALUE ‘1234567890’.

WRITE ‘The text ---------------------- appears in the text.’.

Página 23 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 24/53

WRITE AT POS(LEN) TEXT.

Podem ser utilizadas várias opções de formatação com o comando WRITE:SINTAXE:WRITE ... <F> <OPTION>.

Opção de formatação para todos os tipos de dados:Opção FunçãoLEFT-JUSTIFIED Saída a esquerda

CENTERED Saída centralizada

RIGHT-JUSTIFIED Saída a direitaUNDER <g> Saída começa imediatamente abaixo o campo <g>

NO-GAP Os brancos após o campo <f> são omitidos

USING EDITMASK <m>

Especifica templates

USING NO EDITMASK

Desativa templates definidos no Dicionário de dados

NO-ZERO Os Zeros são substituídos por brancos

Opção de formatação para campos numéricos:Opção FunçãoNO-SIGN Oculta o SinalDECIMALS <d> <d> define o número de dígitos após o ponto décima.

Opção de formatação para campos de Data:Opção FunçãoDD/MM/YY Separados são definidos no mestre de usuários (SU3)

MM/DD/YY Separados são definidos no mestre de usuários (SU3)DD/MM/YYYY Separados são definidos no mestre de usuários (SU3)MM/DD/YYYY Separados são definidos no mestre de usuários (SU3)DDMMYY Sem separadores

MMDDYY Sem separadores

YYMMDD Sem separadores

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 24 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 25/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Exemplos WRITE:CODIGOS ABAP SAÍDA TELA

DATA: G(5) TYPE C VALUE ‘Hello’,F(5) TYPE C VALUE ‘Dolly’.

WRITE: G, F.

WRITE: /10 G,/ F UNDER G.

WRITE: / G NO-GAP, F.

Hello DollyHelloDolly

HelloDolly

DATA TIME TYPE T VALUE ‘154633’.

WRITE: TIME,/ (8) TIME USING EDIT MASK ‘__:__:__’.

15463315:46:33

WRITE: ‘000123’,/ ‘000123’ NO-ZERO.

 

000123123

DATA FLOAT TYPE F VALUE ‘123456789.0’.

WRITE FLOAT EXPONENT 3.123456,789E+03

DATA PACK TYPE P VALUE ‘123.456’ DECIMALS 3.

WRITE PACK DECIMALS 2.

WRITE: / PACK ROUND -2,/ PACK ROUND -1,/ PACK ROUND 1,/ PACK ROUND 2.

123,46

12.345,6001.234,56912,3461,235

WRITE: SY-DATUM,/ SY-DATUM YYMMDD.

27.06.2008080627

 ____________________________________________________________________

 ____________________________________________________________________

Página 25 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 26/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Pode-se imprimir utilizada várias opções de formatação com o comando WRITE:SINTAXE:WRITE <SYMBOL-NAME> AS SYMBOL.WRITE <ICON-NAME> AS ICON.

Exemplo:REPORT EXEMPLO_WRITE_03.

INCLUDE <SYMBOL>.INCLUDE <ICON>.

WRITE: / ‘Simbolo de Telefone:’, SYM_PHONE AS SYMBOL.SKIP.WRITE: / ‘Icone de Alarme:’, ICON_ALARM AS ICON,

Podem-se imprimir Linhas horizontais, verticais e linhas em branco:

SINTAXE:ULINE [AT [/] [<POS>] [(<LEN>)] ].* OUWRITE [AT [/] [<POS>] [(<LEN>)] ] SY-ULINE.

WRITE [AT [/] [<POS>]] SY-VLINE.* OUWRITE [AT [/] [<POS>] ] ‘|’.

SKIP [<N>].*OUSKIP TO LINE <N>.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 26 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 27/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Listagem de cores:

Tipo Ref. Cor UtilizaçãoOFF or COL_BACKGROUND 0 depends um GUI background1 or COL_HEADING 1 gray-blue headers2 or COL_NORMAL 2 light gray List bodies3 or COL_TOTAL 3 yellow totals4 or COL_KEY 4 blue-green Key columns5 or COL_POSITIVE 5 green Positive threshold value6 or COL_NEGATIVE 6 red Negative threshold value

7 or COL_GROUP 7 violet Control levels

EXEMPLO COM CORES:

REPORT DEMO_LIST_FORMAT_COLOR_1.

DATA I TYPE I VALUE 0.DATA COL(15) TYPE C.

WHILE I < 8.CASE I.

WHEN 0.COL = ‘COL_BACKGROUND’.

WHEN 1.COL = ‘COL_HEADING’.

WHEN 2.COL = ‘COL_NORMAL’.

WHEN 3.COL = ‘COL_TOTAL’.

WHEN 4.COL = ‘COL_KEY’.

WHEN 5.COL = ‘COL_POSITIVE’.WHEN 6.

COL = ‘COL_NEGATIVE’.WHEN 7.

COL = ‘COL_GROUP’.ENDCASE.

FORMAT INTENSIFIED COLOR = I.WRITE: /(4) I, AT 7 SY-VLINE,

COL, SY-VLINE,COL INTENSIFIED SY-VLINE,

COL INVERSE.

Página 27 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 28/53

I = I + 1.ENDWHILE.

 

REPORT AVANÇADO: OUTRAS FUNCIONALIDADES

Criando Transações

Após a criação do programa, precisamos associá-lo a uma transação. Assim ousuário final passa a ter acesso pelo menu de transações:

Passos para a criação de uma transação:

1. Acessar a transação SE93

2. Definir o nome de transação

Página 28 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 29/53

3. Determinar o tipo da transação e os parâmetros de suporte.

Página 29 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 30/53

4. Determinar o programa e salvar 

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

RELATÓRIOS ALV

Página 30 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 31/53

Objetivo: desenvolver relatórios em ABAP com um bom visual e recursos avançadosnão é nada trivial.

Imagine desenvolver um relatório com cores, cabeçalho, linha de totais, label decolunas e separadores de colunas. Para piorar um pouco, que permita classificar por qualquer campo, aumentar ou diminuir o tamanho de colunas, gostaria também depoder trocar a posição das colunas, omitir ou exibir campos, totalizar, agrupar,exportar para Excel, etc.

Totalmente possível e igualmente inviável sem o uso de funções ALV.

O ALV padroniza e simplifica a exibição e operação de listas e relatórios no sistemaR/3. Fornece interfaces e formatos padronizados para todas as listas e relatórios.

Relatórios tradicionais

Um relatório tradicional em ABAP não tem nenhum recurso ou formatação padrão.Tudo deve ser programado via código.

Um programa para listar um relatório como no exemplo acima, já exige muitacodificação. Veja que não tem nada de complexo.

Depois de pronto, uma simples alteração no posicionamento dos campos ou notamanho do papel, já demanda um novo processo de modificação. O usuário nãotem os recursos necessários para resolver o problema.Qualquer ação no relatório apresentado, diferente das opções do menu Standard doR/3 para esse tipo de listagem, deverá ser programado. Uma tarefa nada simples,visto que o programador deverá fazer o processo de ida e volta, ou seja, o relatóriodeve ficar dinâmico ao ponto do usuário voltar na situação inicial, após algumamodificação.

Listagens ALV são dinâmicas por definição. O programador vai escolher quais ou

Página 31 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 32/53

qualrecursos irá disponibilizar em seu relatório.

Muito similar a uma planilha do Microsoft Excel, cada coluna é perfeitamenteajustável, podem ser trocadas entre si, as linhas da grade e cores são automáticas.Recursos simples que já eliminam um grande esforço de programação,principalmente em alterações.

O ALV Grid é formado basicamente por : Uma barra de ferramenta Um título Uma lista de saída

 

Conceito de Variante de Exibição 

Página 32 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 33/53

A variante de exibição é utilizada para exibir o relatório em vários formatos diferente.Cada usuário pode criar a sua própria variante e utilizá-la para visualizar o relatório.Por exemplo : Um relatório que tenha 20 campos exibidos na tela. Você podeeliminar os campos que não irá utilizar, acrescentar totalizadores, ordenação, mudar 

os campos de posição, etc. Tela Normal do relatório 

Eliminando Campos, Ordenando pela Data Documento e Criando Totalizadores. 

Página 33 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 34/53

Tela de Seleção Relatório 

EVENTO – INITIALIZATION Neste evento você verificará se existe uma variante definida como default para orelatório através da função REUSE_ALV_VARIANT_DEFAULT_GET *Variável :def_variante LIKE disvariant. 

*Parâmetro da tela de seleção :PARAMETERS : p_vari LIKE disvariant-variant. *Função :CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'

EXPORTINGi_save = ‘A’

CHANGINGcs_variant = def_variante

EXCEPTIONSnot_found = 2.

IF sy-subrc = 0.p_vari = def_variante-variant.

ENDIF.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

EVENTO – AT SELECTION-SCREEN ON VALUE-REQUEST ...

Página 34 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 35/53

Neste evento você deverá criar uma rotina para exibir as variantes já existentes parao relatório em questão. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.

PERFORM f_f4_variant. 

*Variáveis :variant_exit(01) TYPE c,variante LIKE disvariant,

 *Função :CALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTINGis_variant = variantei_save = ‘A’

IMPORTINGe_exit = variant_exit

es_variant = def_varianteEXCEPTIONSnot_found = 2.

IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ELSE.

IF variant_exit = space.p_vari = def_variante-variant.

ENDIF.

FORMATAÇÃO DO RELATÓRIO EM ALV 

Página 35 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 36/53

Neste tópico iremos mostrar as rotinas necessárias para formatação de um relatórioem ALV. Formatação geral, de campos, botões e etc. 1. Definições de dados para o layout ALV

 1.1. Definição de Tipos*Grupos de tipoTYPE-POOLS: slis.TYPE-POOLS: kkblo. 1.2. WorkareasDATA: w_layout TYPE slis_layout_alv,

w_print TYPE slis_print_alvw_event TYPE slis_alv_event,w_line TYPE slis_listheader.

DATA: colinfo TYPE kkblo_specialcol. 1.3. Tabela InternaDATA: l_sort TYPE slis_t_sortinfo_alv,

l_event TYPE slis_t_event,l_top_of_page TYPE slis_t_listheader,t_campos TYPE slis_t_fieldcat_alv WITH HEADER LINE.

 

1.4. Tabela Interna para Impressão do Relatório

DATA : BEGIN OF t_relat OCCURS 0,Campo1Campo2Campo3..................................box(1) TYPE c, " Campo Selecao Linhacolinfo TYPE kkblo_t_specialcol, “ Formatação de Colunas

END OF t_relat. 

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

2. Rotinas para Formatação do Layout

Página 36 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 37/53

 2.1. PERFORM f_evento_lista. " Eventos da Lista

O evento mais comum a ser definido é o TOP_OF_PAGE para impressão do

cabeçalho na listaExecutar a função para selecionar todos os eventos possíveis de serem tratados

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'EXPORTING

I_LIST_TYPE = 0IMPORTING

ET_EVENTS = t_event. * Ler a tabela para o evento TOP_OF_PAGE

READ TABLE t_event WITH KEY NAME = SLIS_EV_TOP_OF_PAGEINTO w_event.

 Se o evento foi encontrado então cadastrar o nome do form do seu programa (quetrata o cabeçalho) no campo FORM

IF SY-SUBRC = 0.MOVE 'F_CABECALHO' TO w_event-form.APPEND w_event TO t_event.

ENDIF. Criar o FORM F_CABECALHOCriar o FORM f_cabeçalho e inserir o código abaixo.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'EXPORTING

it_list_commentary = l_top_of_page. 

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Outros eventos que retornarão da função e podem ser tratados :

Página 37 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 38/53

CALLER_EXIT

USER_COMMAND

TOP_OF_PAGE

TOP_OF_COVERPAGE

END_OF_COVERPAGE

FOREIGN_TOP_OF_PAGE

FOREIGN_END_OF_PAGE

PF_STATUS_SET

LIST_MODIFY

TOP_OF_LIST

END_OF_PAGE

END_OF_LIST

AFTER_LINE_OUTPUT

BEFORE_LINE_OUTPUT

REPREP_SEL_MODIFY

SUBTOTAL_TEXT

Estes eventos estão gravados dentro do Tipo SLIS

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

2.2. PERFORM f_cabec_lista. " Cabecalho da Lista

Página 38 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 39/53

 Neste FORM iremos criar os textos que deverão sair no cabeçalho do relatório. * Texto Principal - Header 

CLEAR w_line.w_line-typ = 'H'.w_line-info = text-001.APPEND w_line TO t_top_of_page.

 No campo TYP deverá ser informado:

H – Header S – SelectionA – Action

 

Estes tipos irão colocar os textos em formatos diferentes (letra, negrito ou itálico).Estas informações serão gravadas na tabela interna T_TOP_OF_PAGE 

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

2.3. PERFORM f_layout. " Layout Geral da Lista

Página 39 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 40/53

Neste FORM iremos formatar o relatório nos parâmetros gerais, ou seja, a aparênciado relatório. Veja abaixo os campos que podem ser formatados :

Campo DescriçãoParâmetros Gerais  

no_colhead Sem Títulos (Cabeçalho)no_hotspot Títulos sem Hotspotno_vline Colunas separadas por espaçosZebra Listrado (Uma linha clara outra escura)cell_merge Não suprimir a replicação de campoEdit Edição somente para o grid todoedit_mode Edição somente para o grid todonumc_sum Total para campos numéricos

no_input Somente exibição de camposf2code  

no_keyfix Não fixar coluna chaveexpand_all Expandir todas as posiçõesno_author Nenhuma verificação padrão da autoridadePF-status  

def_status Status Defaultitem_text  

Opções de Display  

colwidth_optimize Otimizar tamanho da Colunano_min_linesize Tamanho da linha = tamanho da lista

min_linesize Default 80max_linesize Default 250Exceções  

lights_fieldname Nome do campo para exceçãolights_tabname Nome da tabela para exceçãolights_rollname  

lights_condense  

Somatórios  

no_sumchoice Sem escolha para Somar para cimano_totalline Sem Total Linha

no_subtotals Sem Sub-Totaltotals_before_items Mostrar total antes dos itenstotals_only Mostrar somente os totaistotals_text Texto para a 1a. coluna na linha de totalsubtotals_text Texto para a 1a. coluna na linha de Sub-totalInterações  

box_fieldname Nome do Campo para Checkboxbox_tabname  

box_rollnameexpand_fieldnamehotspot_fieldname Nome do Campo para Hotspotconfirmation_prompt Confirmar Saída da lista

Página 40 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 41/53

key_hotspot keys as hotspot " K_KEYHOTflexible_key Mover as colunas chavesgroup_buttons Grupo de Botõesget_selinfos Ler tela de seleção

group_change_edit Settings by user for new groupno_scrolling Sem movimentar telaMostar Variantesheader_text Texto para o botãodefault_itemCoresinfo_fieldnameColtab_fieldname Nome do campo que conterá as cores das colunasOutroslist_append Sem chamada de tela

xifunckey Extended interaction(SAPQuery)xidirect Extended INTeraction(SAPQuery)dtc_layout Configuração de layout para Tabstrip 

2.4. PERFORM f_sort. " Ordenação/SubTotal Neste FORM você deve informar os campos pelos quais a lista deve ser ordenadainicialmente, bem como se deve-se gerar sub-total ou total para esta quebra. *Campo Centro

t_sort-spos = '1'.t_sort-fieldname = 'WERKS'.t_sort-tabname = 'T_RELAT'.t_sort-up = 'X'.t_sort-subtot = 'X'.APPEND t_sort.CLEAR t_sort.

Segue abaixo os campos que podem ser formatados para cada campo deordenação.Campo Descrição

Spos Seqüência de Ordenaçãofieldname Nome do campoTabname Nome da tabela a qual pertence o campoUp Ordenação Menor para Maior  Down Ordenação Maior para Menor  Group  

Subtot Gerar Sub TotalComp  

Expa  

Obligatory  

2.5. PERFORM f_info_campos. 

Página 41 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 42/53

Neste FORM você irá definir o layout de cada coluna do relatório. Veja abaixo os campos que podem ser formatados :Campo Descrição

row_pos Saída na linha (1,2,3,...)col_pos Posição da colunafieldname Nome do campotabname Nome da tabela internacurrency Moedacfieldname Campo com Unidade de Moedactabname Tabela referência para Unidade Moedaifieldname initial columnquantity Unidade de Medidaqfieldname Campo com Unidade Medida

qtabname Tabela com Unidade Medidaround Arredondar Campoexponent Expoente para floatskey Campo como Chaveicon Campo como Íconesymbol Campo como Símbolocheckbox Campo como Checkbox just Alinhamento – R (Direita) L (Esquerda) C (Centralizado)lzero leading zerono_sign Sem sinalno_zero Não imprimir campos zerados

no_convext  

edit_mask Máscara de Ediçãoemphasize Campo em destaquefix_column Fixar Colunado_sum Totalizar Colunano_out Não exibir o campotech  

outputlen Tamanho do campo para saída dos dadosOffset  

seltext_l Descrição Longa do Campo

seltext_m Descrição Média do Camposeltext_s Descrição Curta do CampoDdictxt Indicação de Qual descrição utilizar - (S)hort (M)iddle

(L)ongrollnamedatatype Tipo do Campointtype Tipo do Campointlen Tamanho do Campolowercase Letra Minúscularef_fieldname Campo referênciaref_tabname Tabela referênciaroundfieldname Nome campo para Arredondamento

Página 42 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 43/53

roundtabname Nome tabeladecimalsfieldname Nome campo para Decimaisdecimalstabname Nome tabeladecimals_out Número de decimais para escrever um número

text_fieldname  reptext_ddic Texto para a colunaddic_outputlen Tamanho do Campokey_sel field not obligatoryno_sum Não totalizar o camposp_group GrupoReprep  

Input Campo como input de dadosEdit Uso internoHotspot Campo como hotspot

 2.6. PERFORM f_print. 

Neste FORM você irá definir dados de impressão.Campo Descriçãoprnt_info Informações de Impressãoprint  

prnt_title  

no_coverpage  

no_new_page  

reserve_lines Linhas reservadas para o final da páginano_print_listinfos Não imprimir página com número de registrosselecionados

no_change_print_params Não alterar tamanho de linha 

 ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

3. Exibir Relatório

Página 43 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 44/53

 Neste FORM você irá exibir o relatório. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTINGI_CALLBACK_PROGRAM = v_repidI_CALLBACK_PF_STATUS_SET = 'F_SET_STATUS'I_CALLBACK_USER_COMMAND = 'F_USER_COMMAND'IS_LAYOUT = w_layoutIS_LAYOUT = w_printIT_FIELDCAT = t_campos[]IT_SORT = t_sort[]

 I_DEFAULT = 'X'I_SAVE = v_save

IS_VARIANT = varianteIT_EVENTS = t_event[]

TABLESt_outtab = t_relat

EXCEPTIONSPROGRAM_ERROR = 1OTHERS = 2.

IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.STOP.

ENDIF. 

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Como utilizar outros botões na tela 

Página 44 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 45/53

Para inserir novos botões na tela, você deve copiar o Status Gui StandardSTANDARD_FULLSCREEN para outro a ser utilizado no seu relatório. Após a cópiavocê deve retirar botões que não serão utilizados e inserir os seus novos botões : 

O tratamento destes novos botões deverá ser no FORM F_USER_COMMANDespecificado na chamada da função de exibição do relatório :

FORM f_user_command USING p_ucomm LIKE sy-ucommp_selfield TYPE slis_selfield.

 CASE p_ucomm.

* Modificar DocumentoWHEN 'ZVA02'.CHECK p_selfield-fieldname = 'VBELN'.

SET PARAMETER ID 'AUN' FIELD p_selfield-value.CALL TRANSACTION 'VA02' AND SKIP FIRST SCREEN.

 * Exibir Documento

WHEN 'ZVA03'.CHECK p_selfield-fieldname = 'VBELN'.SET PARAMETER ID 'AUN' FIELD p_selfield-value.CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

 * Exibir Remessa

WHEN 'ZVL01'.CHECK p_selfield-fieldname = 'VBELN'.READ TABLE t_relat INDEX p_selfield-tabindex.IF sy-subrc EQ 0.

SET PARAMETER ID 'AUF' FIELD t_relat-vbeln.SET PARAMETER ID 'VST' FIELD t_relat-vstel.SET PARAMETER ID 'LEDAT' FIELD t_relat-mbdat.CALL TRANSACTION 'VL01N' AND SKIP FIRST SCREEN.

ENDIF.WHEN OTHERS.

 

ENDCASE. ENDFORM. " f_user_command 

Programas Standard - ModeloBALVST02_GRID – Programa teste visor de listas ABAP: lista simples modelo vôoBALVST03_GRID - Programa teste visor de listas ABAP: lista simples modelo vôoBALVHT01 - Programa de teste ALV: lista seqüencial hierárquica modelo de vôo

A Maioria dos programas DEMO começam com BCALV*

PERFORMANCE

Página 45 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 46/53

Considerações Iniciais

Quando começamos a falar de banco de dados com R/3 nos preocupamos com

Performance, neste curso estaremos apresentando conceitos de análises paraidentificar problemas de Performance em transações, independente de banco dedados (Oracle, SQL, Informix, SAPDB, etc).

A análise começa quando identificamos problemas de performance mais localizadas,causados por uma ou algumas transações. Detectadas estas transações, devemossubmetê-las a uma análise mais detalhada, analisando trechos que realizamprocessamentos muitos longos, ligados a execução de programas ABAP ou aoacesso à tabelas no banco de Dados. Após detectar o gargalo dentro da transação,devemos levantar as possíveis ações para amenizá-lo ou até mesmo eliminá-lo (focodo treinamento).

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Página 46 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 47/53

Boas práticas de Codificação

Use o comando FREE para liberar espaço em tabelas internas; sempre utilizar 

os comandos CLEAR/REFRESH após o fim de um processamento.

Evite comparações em SELECT com campos numéricos X camposalfanuméricos; aumenta o tempo para conversão.

Testar SY-SUBRC após cada acesso ao banco de dados;

O comando MOVE-CORRESPONDING é bom para tabelas pequenas. Éinteressante que a tabela interna contenha os campos na seqüência em que serãomovimentados;

Ao utilizar o comando CASE, codificar sempre a cláusula WHEN OTHERS;

Sempre identifique se um SORT é ASCENDING ou DESCENDING eespecifique a cláusula BY <fields>. Caso contrário, todos os campos serãoclassificados.

Ao fazer leitura em tabela interna, utilizar a opção BINARY SEARCH, pois a

busca fica mais rápida; não esquecer de ordenar a tabela antes da procura.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 47 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 48/53

 ____________________________________________________________________

Introdução ao Join

Para a seleção em mais de uma tabela dispomos de alguns meios que prejudicam aperformance. O que podemos definir como regra é o que não fazer: utilizar selectsencadeados.

Os meios disponíveis dependem da versão do R/3 que está sendo utilizada:1. A cláusula “For al entries”2. A cláusula “Inner Join”3. A cláusula “Left Outer Join”4. Criação de Views no Dicionário de Dados.

Baseado em teses realizados com o Runtime Analise (transação SE30), foicomprovado que a melhor solução, quando possível, é utilizar as cláusulas de join nobanco de dados (Inner Join e Left Outer Join)

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 48 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 49/53

Cláusula “For All Entries”:

Esta cláusula deve ser utilizada sempre que a seleção de uma tabela dependediretamente dos dados que estão em outra. Por exemplo, tendo uma tabela internacom todas as ordens de venda (i_vbak) podemos utilizar este comando paraselecionar todos os itens destas ordens de venda (vbap) com apenas um comando.

Exemplo:

Em vez de utilizar:LOOP AT TI_VBAK.

SELECT VBELN POSNR MATNR APPENDING TABLE TI_VBAPFROM VBAP WHERE VBELN = TI_VBAK-VBELN.ENDLOOP.

Pode-se utilizar o comando:SELECT VBELN POSNR MATNR INTO TABLE TI_VBALP

FROM VBAPFOR ALL ENTRIES IN TI_VBAKWHERE VBELN = TI_VBAK-VBELN.

Além de permitir a seleção em apenas um comando, temos ainda um ganho deperformance. No primeiro exemplo, para cada select executado dentro do Loop, obanco de dados realiza um Fetch/Open/Close. O tempo do ganho é, basicamente otemos de todos os Close somados. Para analisar estes resultados, utilize atransação ST05 (SQL Trace).

Cuidados especiais com o For All Entries:

Registros repetidos: todos os registros repetidos na tabela de resultados sãoeliminados. Portanto é aconselhável a utilização de campos chaves na tabela finalpara evitar a duplicidade. Por exemplo, se a partir de uma tabela de ordens devenda, deseja-se selecionar todos os itens com suas quantidades, na tabela de itensdevemos utilizar os campos vbeln e posnr, pois somente assim ordens com o mesmomaterial e quantidade serão apresentadas.

Tabelas em branco: caso a tabela do for al entries esteja vazia, todos os registrosda tabela selecionada serão lidos. Portanto, deve-se tomar cuidado com o valor dosy-sobrc em selects sucessivos.

Dados inválidos: se a tabela do for al entries possuir algum dado inválido, o selectserá abortado.

Página 49 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 50/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Cláusula “Inner Join”:Esta cláusula tem o mesmo resultado de uma definição de view do Dicionário dedados. As duas tabelas são relacionadas e os registros que pertencem as duas sãoselecionados.

Exemplo:SINTAXE:SELECT A~CARRID A~CONNID A~DISTANCE

B~CARRID B~CONNID B~BOOKIDINTO TABLE TI_BOOKFLIGHTFROM SFLIGHT AS A

INNER JOIN SBOOK AS BON A~CARRID = B~CARRIDAND A~CONNID = B~CONNIDZND A~FLDATE = B~FLDATEWHERE A~FLDATE = ‘19990623’AND B~SMOKER = SPACE.

Cláusula “Left Outer Join”:Esta cláusula difere da anterior pelo fato de que para um registro entrar na tabela deresultados, não necessita estar nas duas tabelas, bastando estar em uma das duas.

Exemplo:SINTAXE:SELECT A~CARRID A~CONNID A~DISTANCE

B~CARRID B~CONNID B~BOOKIDINTO TABLE TI_BOOKFLIGHTFROM SFLIGHT AS ALEFT OUTER JOIN SBOOK AS BON A~CARRID = B~CARRIDAND A~CONNID = B~CONNID

ZND A~FLDATE = B~FLDATEWHERE A~FLDATE = ‘19990623’AND B~SMOKER = SPACE.

Criação de Views:Ao criar uma view no dicionário de dados, estamos criando também uma view nobanco de dados e, portanto o seu acesso torna-se rápido.

 ____________________________________________________________________

 ____________________________________________________________________

Página 50 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 51/53

 ____________________________________________________________________ ____________________________________________________________________

TABELAS CLUSTER

Aparentemente, sempre é mais vantajoso especificar todos os campos possíveis nascláusulas where, pois assim diminuímos o número de dados selecionados já noBanco de Dados. Esta regra possui uma única exceção: Cluster Tables. Este tipo detabela possui uma estrutura diferente no Banco de Dados. Os campos que elapossui são os campos chaves e outro que possui todos os demais camposcompactados. Tomando por exemplo a tabela BSEG, podemos dizer que ela possui6 campos: MANDT, BUKRS, BELNR, GJAHR, BUZEI e todos os demais camposcompactados em um só. Em termos práticos, se especificarmos na cláusula where

algum campo que não seja chave, o banco de dados terá que descompactar todo ocampo para realizar a comparação.

Exemplo:

O comando abaixo deve ser evitado:SELECT BELNR BUZEI ZUONRINTO TABLE TI_BSEGFROM BSEGFOR ALL ENTRIES IN TI_BKPFWHERE BUKRS = TI_BKPF-BUKRS

AND BELNR = TI_BKPF-BELNRAND ZTERM = ‘0001’.

E o comando abaixo deve ser utilizado:SELECT BELNR BUZEI ZUONR ZTERMINTO TABLE TI_BSEGFROM BSEGFOR ALL ENTRIES IN TI_BKPFWHERE BUKRS = TI_BKPF-BUKRSAND BELNR = TI_BKPF-BELNR

DELETE TI_BSEG WHERE ZTERM <> ‘0001’.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Página 51 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 52/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

BUFFERIZAÇÃO DE TABELAS

Tipos de bufferização: Completo: no primeiro acesso à tabela, todo o seu conteúdo é armazenado nobuffer; Genérico: é especificado um número ‘n’ de campos chaves igual aos ‘n’campos chaves do acesso são armazenados no buffer; Parcial: somente os registros lidos são armazenados no buffer.Para analisar se o tipo de bufferização está correto, pode-se utilizar a transaçãoST02.

Quando bufferizar? Tabelas pequenas; Tabelas acessadas muito mais para leitura que para escrita; Tabelas de controle (parametrização); Tabelas Master Data pequenas.

Processos que não usam o Buffer:Podemos destacar alguns comandos que ignoram a existência do buffer: Select...bypasssing buffer;

Select...from <database views> Select...distinct; Select...count,som,avg,min,Max; Select...order by (campos que não são chaves); Select...for update; Cláusula where que contém o comando IS NULL; SQL nativo (EXEC SQL...ENDEXEC).

Outros métodos

O primeiro critério para melhorar o acesso ao banco de dados é definir os critériosnas telas de seleção que não fazem acesso a tabelas sem utilização de índices ouentão uma busca de dados na tabela inteira.O simples estudo dos campos que devem ser colocados na tela para seleção dosvalores das tabelas ajudaria o processo de busca. A colocação de campos que nãoconstam em nenhum índice, por exemplo, é um convite a perda de performance emacessos a tabelas grandes.

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

 ____________________________________________________________________

Página 52 de 53

5/11/2018 Apostila - ABAP2 - slidepdf.com

http://slidepdf.com/reader/full/apostila-abap2 53/53

 ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________ ____________________________________________________________________

Página 53 de 53