Upload
rogerio-freitas
View
58
Download
0
Embed Size (px)
Citation preview
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