Você está na página 1de 4

Tabelas Internas – Parte II

Tabelas Internas – Parte II 16 DE SEPTEMBER DE 2012 0 COMMENTS Processando registros Para acessar

16 DE SEPTEMBER DE 2012

0 COMMENTS
0 COMMENTS

Processando registros

Para acessar um registro dentro de uma tabela interna geralmente você vai precisar de umawork area, que nada mais é do que uma estrutura do mesmo tipo da tabela interna.

Os comandos a seguir são utilizados para manipular registro na tabela interna utilizando a work area (existe o conceito de header line, que está no fim do post).

APPEND

Adiciona o conteúdo da work area ao fim da tabela interna. Esse comando só pode ser usado com tabelas do tipo Standard.

APPENDwaTOitab.

E também pode ser usado para adicionar o conteúdo de várias linhas de uma tabela a outra tabela interna do tipo Standard.

APPENDLINESOFitab1 TOitab2.

INSERT

Insere o conteúdo da work area na tabela interna. No caso da tabela interna ser do tipo Standard, os valores são inseridos no fim. Se a tabela for do tipo Sorted os registros serão inseridos no lugar correto de acordo com a chave. Caso a tabela for Hashed, o conteúdo será inserido de acordo com o algoritimo de hash.

INSERTwaINTOTABLEitab

E também copia o conteúdo de várias linhas de uma tabela interna para outra tabela interna.

INSERTLINESOFitab1 TOitab2.

Exemplo:

DATA:IT_DD02DTYPESTANDARDTABLEOFdd02d,

WA_DD02DLIKELINEOFIT_DD02D.

DATA : IT_DD02D TYPESTANDARDTABLEOF dd02d , WA_DD02D LIKELINEOF IT_DD02D .

DELETE

Apaga linhas de uma tabela interna.

DELETEitab.

SORT

Ordena a tabela interna, tanto as Standards como as Hashed em ordem crescente e decrescente. Tabelas do tipo Sorted table já fazem isso automaticamente.

SORTitab.SORTitabBYcampo.SORTitabBYcampoASCENDING.

READ

Copia o conteúdo da linha da tabela para a work area (estrutura).

READTABLEitabINTOwa.

Exemplo:

DATA:it_dd02dTYPESTANDARDTABLEOFdd02d,

wa_dd02dLIKELINEOFit_dd02d.".

DATA : it_dd02d TYPESTANDARDTABLEOF dd02d , wa_dd02d LIKELINEOF it_dd02d . ".

LOOP… ENDLOOP

O loop copia o conteudo de cada linha (uma-a-uma) na work area definida pela clausula INTO. Dentro do loop o conteúdo da work area pode ser exibido ou alterado e também pode ser usado para atualizar a tabela interna.

LOOPATitabINTOwa. "

ENDLOOP.

Exemplo:

DATA:it_dd02dTYPESTANDARDTABLEOFdd02d,

wa_dd02dLIKELINEOFit_dd02d.".

DATA : it_dd02d TYPESTANDARDTABLEOF dd02d , wa_dd02d LIKELINEOF it_dd02d . ".

MODIFY

Sobrescreve (atualiza) o conteúdo da linha da tabela com o conteúdo da work area.

MODIFYTABLEitabFROMwa.

Exemplo:

DATA:it_dd02dTYPESTANDARDTABLEOFdd02d,

wa_dd02dLIKELINEOFit_dd02d.

DATA : it_dd02d TYPESTANDARDTABLEOF dd02d , wa_dd02d LIKELINEOF it_dd02d .

COLLECT

Insere o conteúdo de uma work area em uma tabela interna ou atualiza uma tabela interna onde as chaves primárias coincidem com a work area.

COLLECT waINTOitab.

REFRESH

Apaga todo o conteúdo da tabela interna e não libera a alocação de memória para ser usada novamente.

REFRESHitab.

CLEAR

Para as tabelas que não têm header line o funcionamento será o mesmo do comandoREFRESH. Agora, se a tabela interna possuir o header line, este comando apagará apenas o conteúdo do header line.

CLEARitab.

FREE

Este comando apaga todo o conteúdo da tabela interna e libera a memória que havia sido reservada anteriormente. Use esse comando para apagar tabelas internas que não serão mais usadas no programa.

FREEitab.

HEADER LINE

O Header Line é o Work Area embutido na Tabela Interna.

A instrução WITH HEADER LINE na definição da tabela interna te dá a opção de criar uma tabela com um header line. Quando criamos uma tabela interna com esta instrução, a mesma será criada automaticamente com um work area próprio.

Isso simplifica a sintaxe dos comandos INSERT, DELETE e READ.

Mesmo com essa pequena vantagem, a SAP está desmotivando o uso do header line pelos seguintes motivos:

A work area criada automaticamente tem o mesmo nome da tabela interna, o que as vezes deixa a leitura do programa dificil. Tabelas com header lines não são permitidas em data objecs complexos (que tem estruturas

dentro de estruturas, por exemplo) e também não é permitida na extensão orientada a objetos do ABAP (ABAP Objects).

Como vamos encontrar vários programas antigos usando header line, abaixo vemos a comparação entre header line e work area para que você possa distinguir:

*ComHeaderLineINSERTitabINDEXn.DELETETABLEitab.READTABLEitabINDEXn.W

*ComHeaderLine INSERT itab INDEX n . DELETE TABLE itab . READTABLE itab INDEX n . W

*ComWorkAreaINSERTwaINTOitabINDEXn.DELETETABLEitabFROMwa.READTABLEi

*ComWorkArea INSERT wa INTO itab INDEX n . DELETE TABLE itab FROM wa . READTABLE i

Até a proxima!