Você está na página 1de 25

Captulo 7

Tabelas Internas

7-2 Tabelas Internas

Estruturas de Dados em ABAP

String de campos ADDRESS


Names Last Name City Street

Tabelas internas ADDRESS_LIST


Names Last Name City Street

Linha de cabealho

7-3 Tabelas Internas

Declarao de uma string de campos

DATA:

BEGIN OF <nome>, ... , END OF <nome>.

... DATA: AMOUNT(5) TYPE P, BEGIN OF ADDRESS, NAMES(40), LAST_NAME(20), CITY LIKE TABNA-CITY STREET LIKE TABNA-STREET, END OF ADDRESS.

. . . MOVE ALBERTO SOARES' TO ADDRESS-NAME. MOVE LISBOA TO ADDRESS-STREET. . . . WRITE: ADDRESS-NAMES, ADDRESS-LAST_NAME, ADDRESS-STREET, ADDRESS-CITY.

7-4 Tabelas Internas

Declarao de uma tabela interna - I

DATA:

BEGIN OF <tabela interna> OCCURS <n>, , END OF <tabela interna>.

... DATA: BEGIN OF ADDRESS_LIST OCCURS 5, NAMES(40), LAST_NAME(20), CITY LIKE TABNA-CITY STREET LIKE TABNA-STREET, END OF ADDRESS_LIST. ...

ADDRESS_LIST
NAMES Linha de Cabealho LAST_NAME CITY STREET

7-5 Tabelas Internas

Declarao de uma tabela interna - II

... DATA: TAB_INT LIKE ADDRESS OCCURS 5 WITH HEADER LINE. ...

TAB_INT
NAMES LAST_NAME CITY STREET

Linha de Cabealho

7-6 Tabelas Internas

Transferncia de Estruturas do Dicionrio de Dados R/3

INCLUDE STRUCTURE <tabela BD>.


. . . DATA: BEGIN OF TAB OCCURS 5. INCLUDE STRUCTURE TABNA. DATA: END OF TAB. TAB-CITY = . . .

SHOW TABNA

TABNA - COUNTRY CHAR TABNA - ID TABNA - CITY TABNA - NAME1 CHAR CHAR CHAR

C C C C

3 8 25 30

7-7 Tabelas Internas

Como preencher uma tabela interna por leitura da tabela BD

SELECT * FROM <tabela> INTO TABLE <tabela interna>.


APPENDING TABLE <tabela interna>.

REPORT ZFTBIN00 . TABLES TABNA. DATA: BEGIN OF TAB OCCURS 0, COUNTRY LIKE TABNA-COUNTRY, NAME1 LIKE TABNA-NAME1, SALES LIKE TABNA-SALES, END OF TAB. SELECT COUNTRY NAME1 SALES FROM TABNA INTO TABLE TAB. ou SELECT * FROM TABNA INTO CORRESPONDING FIELDS OF TABLE TAB. SELECT COUNTRY NAME1 SALES FROM TABNA APPENDING TABLE TAB. ou SELECT * FROM TABNA APPENDING CORRESPONDING FIELDS OF TABLE TAB.

7-8 Tabelas Internas

Como preencher uma tabela interna: instruo APPEND

APPEND <tabela interna>.

APPEND <tabela interna> SORTED BY <campo>.

Country D USA GB D GB A

Sales 400 000 Linha cab. 1 000 000 1 500 000 2 7 800 000 3 50 000 4 140 000 5 6 7 8 9

Country D D USA GB A GB

Sales 400 000 7 800 000 1 000 000 500 000 140 000 50 000 Linha cab. 1 2 3 4 5

Ordem decrescente do campo Sales

7-9 Tabelas Internas

Instruo APPEND - sintaxe 1

APPEND

1. APPEND [wa TO / INITIAL LINE TO] itab.


Acrescenta uma linha nova no fim da tabela interna itab. Se especificar wa TO, a linha nova construda a partir do contedo da rea de trabalho explicitamente declarada wa. Se usar INITIAL LINE TO, acrescentada uma linha em que cada campo contm o valor inicial apropriado ao seu tipo. Se nem wa TO nem INITIAL LINE TO forem especificadas, o contedo da nova linha ser igual ao contedo corrente da linha cabealho da tabela interna. Aps a operao APPEND ter sido executada, o campo de sistema SY-TABIX contm o ndice da nova entrada.

7-10 Tabelas Internas

Instruo APPEND - sintaxe 2

APPEND 2. APPEND LINES OF itab1 [FROM idx1] [TO idx2] TO itab2. Acrescenta a tabela interna itab1 ou um subconjunto desta tabela ao fim da tabela interna itab2. Ao especificar FROM idx1 ou TO idx2 pode restringir o intervalo de linhas a transferir da tabela itab1. Se a clusula FROM for omitida, a transferncia inicia-se com a primeira linha de itab1. Do mesmo modo se a clusula TO no for definida, a transferncia finaliza com a ltima linha de iatb1. Depois da execuo da instruo APPEND,o campo de sistema SY-TABIX contm o ndice da ltima entrada acrescentada, i.e. o n original de linhas de itab2 acrescido das linhas de itab1 que foram transferidas pelo APPEND.

7-11 Tabelas Internas

Instruo APPEND - sintaxe 3

APPEND 3. APPEND [wa TO] itab SORTED BY f.

Insere a nova entrada na tabela itab e reordena a tabela pelo sub-campo f por ordem decrescente. Esta variante da instruo APPEND s tem interesse no caso de a tabela itab j estar previamente ordenada.
Quando o nmero de entradas na tabela atinge o valor estabelecido no parmetro OCCURS, a ltima linha da tabela eliminada se o valor do sub-campo f da nova linha for superior (particularmente til no caso de listas do tipo AS 50 MAIS).

7-12 Tabelas Internas

Transporte campo a campo

MOVE-CORRESPONDING <f1> TO <f2>.

TABLES: DATA:

TABNA BEGIN OF ADDRESS, FLAG TYPE C, ID LIKE TABNA-ID, NAME LIKE TABNA-NAME1, CITY LIKE TABNA-CITY, . . . , END OF ADDRESS.

TABNA ID
00000001

NAME1
WILLY

CITY
WALLDORF

MOVE-CORRESPONDING TABNA TO ADDRESS. ADDRESS


FLAG ID 00000001 NAME CITY WALLDORF

7-13 Tabelas Internas

Compresso de dados numa tabela interna

COLLECT <tab>.

Country D GB D

Sales

(TYP P) Linha cabealho 1 2 3 4 5 6 7 8 9 SELECT * FROM TABNA. MOVE-CORRESPONDING TABNA TO TAB. COLLECT TAB. ENDSELECT. 8 200 000 TABLES: TABNA.

400 000 550 000 7 800 000

USA 1 000 000

DATA: BEGIN OF TAB OCCURS 10, COUNTRY LIKE TABNA-COUNTRY, SALES LIKE TABNA-SALES, END OF TAB.

7-14 Tabelas Internas

Instruo COLLECT - sintaxe

COLLECT COLLECT [wa INTO] itab. A instruo COLLECT utilizada para criar tabelas internas compactadas. Ao usar apenas COLLECT para preencher uma tabela interna, garantese que a tabela interna no contm entradas com contedos idnticos para os campos-chave por default. Por campos-chave por default, entendem-se todos os campos no numricos da tabela. Se, para alm dos campos-chave por default, a tabela interna contiver campos numricos, o contedo destes campos adicionado para entradas com o mesmo contedo nos campos-chave por default.

7-15 Tabelas Internas

Ordenao de uma tabela interna


SORT <tabela interna> BY <campo 1> <campo 2> . . . .

REPORT ZTBORD00.
TABLES: DATA: TABNA. BEGIN OF TAB COUNTRY ID NAME1 SALES END OF TAB. OCCURS 5, LIKE TABNA-COUNTRY, LIKE TABNA-ID, LIKE TABNA-NAME1 LIKE TABNA-SALES,

. . . SORT TAB. . .ou . SORT TAB BY COUNTRY NAME1. . .ou . SORT TAB BY COUNTRY ASCENDING NAME1 DESCENDING.

7-16 Tabelas Internas

Processamento de tabelas internas


LOOP AT <tabela interna>. ...ENDLOOP.
REPORT ZTBPROC0.

TABLES:
DATA:

TABNA.
BEGIN OF TAB COUNTRY CITY NAME1 SALES END OF TAB. OCCURS 5, LIKE TABNA-COUNTRY, LIKE TABNA-CITY, LIKE TABNA-NAME1, LIKE TABNA-SALES,

. . . LOOP AT TAB. WRITE: /TAB-COUNTRY, TAB-CITY, ... . ENDLOOP. . ou . LOOP AT TAB WHERE COUNTRY BETWEEN 'A' AND 'D'. WRITE: /TAB-COUNTRY, TAB-CITY, ... . ENDLOOP. IF SY-SUBRC NE 0. . . . ENDIF.

7-17 Tabelas Internas

Campo de sistema SY-TABIX

REPORT ZTBPROC1. . . . LOOP AT TAB. WRITE: / SY-TABIX, TAB-COUNTRY, ... . ENDLOOP.

REPORT ZTBPROC2. . . . PARAMETERS: INICIO LIKE SY-TABIX DEFAULT '10', FIM LIKE SY-TABIX DEFAULT '20'. LOOP AT TAB FROM INICIO TO FIM. WRITE: / SY-TABIX, TAB-COUNTRY, ... . ENDLOOP.

7-18 Tabelas Internas

Leitura de entradas especficas de uma tabela interna

Instruo READ TABLE - alguns exemplos:

1.

READ TABLE <tab>.

2. READ TABLE <tab> WITH KEY <chv1> = <v1>

<chv2> = <v2> ...

3.

READ TABLE <tab> INDEX <idx> .

7-19 Tabelas Internas

Instruo READ TABLE - exemplo 1 READ TABLE <tab>. ...


REPORT ZREADTB1. TABLES: TABNA. * Definio da tabela interna DATA: BEGIN OF TAB OCCURS 5, COUNTRY LIKE TABNA-COUNTRY, CITY LIKE TABNA-CITY, NAME1 LIKE TABNA-NAME1, SALES LIKE TABNA-SALES, END OF TAB. * Parmetros da tela de seleo PARAMETERS: COUNTRY LIKE TABNA-COUNTRY, CITY LIKE TABNA-CITY, NAME1 LIKE TABNA-NAME1. CLEAR TAB. Limpa linha cabealho * Carrega valores para linha cabealho. * Estes vo constituir o critrio de * seleo do registo da tabela interna SELECT * FROM TABNA INTO CORRESPONDING FIELDS OF TABLE TAB. MOVE COUNTRY TO TAB-COUNTRY. MOVE CITY TO TAB-CITY. MOVE NAME1 TO TAB-NAME1. READ TABLE TAB. WRITE:/ TAB-COUNTRY, TAB-CITY, TAB-NAME1, TAB-SALES.

7-20 Tabelas Internas

Instruo READ TABLE - exemplo 2

READ TABLE <tab> WITH KEY k1 = v1 kn = vn

Coloca parmetros na mesma linha do ecran de seleco

Loop de leitura tabela interna TAB

REPORT ZREADTB2. TABLES TABNA. DATA: BEGIN OF TAB OCCURS 5. INCLUDE STRUCTURE TABNA. DATA: END OF TAB. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: CAMPO1(8) DEFAULT 'COUNTRY',VALOR1(30) LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: CAMPO2(8) DEFAULT 'FORMA', VALOR2(30) LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: CAMPO3(8) DEFAULT 'CITY', VALOR3(30) LOWER CASE. SELECTION-SCREEN END OF LINE. SELECTION-SCREEN BEGIN OF LINE. PARAMETERS: CAMPO4(8) DEFAULT 'NAME1', VALOR4(30) LOWER CASE. SELECTION-SCREEN END OF LINE. SELECT * FROM TABNA INTO TABLE TAB. LOOP AT TAB. Lista de toda a tabela interna WRITE:/ TAB-COUNTRY, TAB-FORMA, TAB-CITY,TAB-NAME1, TAB-SALES. ENDLOOP. CLEAR TAB. Limpa registo cabealho READ TABLE TAB WITH KEY (CAMPO1) = VALOR1 (CAMPO2) = VALOR2 (CAMPO3) = VALOR3 (CAMPO4) = VALOR4. WRITE:/ TAB-COUNTRY, TAB-FORMA, TAB-CITY, TAB-NAME1.

7-21 Tabelas Internas

Instruo READ TABLE - exemplo 3 READ TABLE <tab> INDEX <idx>.


REPORT ZREADTB3. TABLES: TABNA. DATA: BEGIN OF TAB OCCURS 5, COUNTRY LIKE TABNA-COUNTRY, CITY LIKE TABNA-CITY, NAME1 LIKE TABNA-NAME1, SALES LIKE TABNA-SALES, END OF TAB. PARAMETERS: TAB_IDX LIKE SY-TABIX. SELECT COUNTRY CITY NAME1 SALES FROM TABNA INTO CORRESPONDING FIELDS OF TABLE TAB. LOOP AT TAB. WRITE:/ SY-TABIX, TAB-COUNTRY, TAB-CITY. ENDLOOP. CLEAR TAB. READ TABLE TAB INDEX TAB_IDX. WRITE: : / TAB-COUNTRY, TAB-CITY, TAB-NAME1, TAB-SALES.

7-22 Tabelas Internas

Alterao do contedo de uma tabela interna


REPORT Z_TABINT. TABLES: TABNA. DATA: BEGIN OF TAB OCCURS 5. INCLUDE STRUCTURE TABNA. DATA: END OF TAB. DATA: START LIKE SY-TABIX, ENDE LIKE SY-TABIX, NAME1_OLD LIKE TABNA-NAME1. PARAMETERS: TAB_IDX LIKE SY-TABIX, NAME1 LIKE TABNA-NAME1. SELECT * FROM TABNA INTO TABLE TAB. Carrega tabela interna * Modify READ TABLE TAB INDEX TAB_IDX. MOVE TAB-NAME1 TO NAME1_OLD. WRITE:/ 'Antes MODIFY', 20 SY-TABIX, TAB-COUNTRY, TAB-CITY, TAB-NAME1. MOVE NAME1 TO TAB-NAME1. MODIFY TAB INDEX SY-TABIX. READ TABLE TAB INDEX SY-TABIX. WRITE:/ 'Depois MODIFY', 20 SY-TABIX, TAB-COUNTRY, TAB-CITY, TAB-NAME1. * Insert MOVE NAME1_OLD TO TAB-NAME1. INSERT TAB INDEX TAB_IDX. START = TAB_IDX - 1. ENDE = TAB_IDX + 1. SKIP 2. WRITE: 'Depois INSERT pos.', 20 SY-TABIX. LOOP AT TAB FROM START TO ENDE. WRITE: /20 SY-TABIX, TAB-COUNTRY, TAB-CITY, TAB-NAME1. ENDLOOP. * Delete DELETE TAB INDEX TAB_IDX. SKIP 2. WRITE: 'Depois DELETE pos.', 20 SY-TABIX. LOOP AT TAB FROM START TO ENDE. WRITE: /20 SY-TABIX, TAB-COUNTRY, TAB-CITY, TAB-NAME1. ENDLOOP.

7-23 Tabelas Internas

Eliminar uma tabela interna

CLEAR <tabela interna>. Inicializa a linha de cabealho

REFRESH <tabela interna>.

Elimina todas as linhas da tabela Espao para armazenamento no liberado Paging liberado

FREE <tabela interna>.

Elimina todas as linhas Espao para armazenamento liberado

7-24 Tabelas Internas

Informao sobre tabelas internas

DESCRIBE TABLE <tab>... .


REPORT ZDESCRTB.

TABLES: TABNA. DATA: DATA: BEGIN OF TAB OCCURS 5. INCLUDE STRUCTURE TABNA. END OF TAB, LINE_COUNT TYPE I, OCCURS_COUNT TYPE I.

SELECT * FROM TABNA INTO TABLE TAB. DESCRIBE TABLE TAB LINES LINE_COUNT OCCURS OCCURS_COUNT.

7-25 Tabelas Internas

Nveis de quebra TABNA_INT


COUNTRY
Linha de cabealho

CITY

NAME1

SALES

SORT TABNA_INT BY COUNTRY CITY NAME1.

LOOP AT TABNA_INT. AT FIRST. Bloco 1. ENDAT. AT NEW COUNTRY. Bloco 2. ENDAT. AT NEW CITY. Bloco 3. ENDAT. AT END OF CITY. Bloco 4. ENDAT. AT END OF COUNTRY. Bloco 4. ENDAT. AT LAST. Bloco 4. ENDAT. ENDLOOP.

Bloco 4: SUM Totaliza todos os campos numricos colocando o resultado na rea de trabalho

Você também pode gostar