Quando Usar Type, Like e Begin Of?

Você já sabe a diferença entre TYPE e LIKE no ABAP? E para que serve o comando BEGIN OF e END OF? Estes comandos são geralmente vistos em conjunto e é crucial que você os entenda, pois sem este conhecimento a sua evolução no ABAP será bem mais lenta. Não deixe de ler este post e assimilar estes importantes conceitos.

A principal tarefa de qualquer programa, independente da linguagem, é trabalhar com dados. Cada linguagem possui as suas formas de criar e manipulá-los. ABAP utiliza tipos como base para criação dos dados que o programa manipulará.

DATA

Para criar algum objeto de dado no ABAP, você utiliza o comando DATA:

DATA v_texto(20) TYPE c VALUE 'Objeto de Dados'.
DATA v_idade TYPE i.
DATA v_data_criacao TYPE d.

Na declaração acima, vários objeto de dados (variáveis) são declarados. Por exemplo, v_texto um caracter de comprimento 20, com valor inicial “Objeto de Dados”. Da mesma maneira podemos criar variáveis para operações matemáticas ou para manipulação de datas.

Além dos tipos primitivos da linguagem ABAP (veja mais na discussão desse post), podemos criar qualquer tipo de estrutura de dados, como por exemplo, estruturas (que são moldes para o que chamamos de work areas ou área de trabalho) e internal tables (tabelas internas).

Suponha que queiramos calcular a diferença entre os campos SFLIGHT-SEATSMAX e SFLIGHT-SEATSOCC, de todo as linhas da tabela SFLIGHT. Como solução, criamos uma tabela interna que contenha as chaves da tabela SFLIGHT e também um campo DIFF, quem contém a diferença. Depois de todas as diferenças calculadas, imprimimos o resultado na saída do programa:

TYPE

Temos o uso da instrução TYPES, usada para criar tipos locais. Esses tipos somente podem ser utilizados no programa no qual ele foi declarado.

TYPES: ty_nome TYPE c LENGTH 20.

DATA v_primeiro_nome TYPE ty_nome.
DATA v_ultimo_nome TYPE ty_nome.

TYPE ty_total TYPE f.

DATA v_area_total TYPE ty_total.
DATA v_saldo_cliente TYPE ty_total.

TYPES: BEGIN OF ty_s_sflight_dif.
INCLUDE TYPE sflight.
TYPES: diff TYPE i,
END OF ty_s_sflight_dif.

TYPES ty_t_sflight_dif TYPE TABLE OF ty_s_sflight_dif.

 BEGIN OF / END OF

Como tipos locais temos ty_s_sflight_dif, que descreve uma estrutura de dados e ty_t_sflight_dif uma tabela interna com a estrutura de ty_s_sflight_dif. Para declararmos um tipo estruturado local, usando BEGIN OF / END OF.

Já os tipos globais podem ser provenientes do dicionário de dados do SAP. Podemos usar a tabela SFLIGHT e alguns de seus campos, como sflight-carrid, sflight-connid etc. Os tipos globais podem ser usados (DATA… TYPE….) em qualquer programa o sistema, não há necessidade de nenhuma declaração no programa.

Quando usamos o TYPE com uma tabela transparente (tabela de banco de dados), o objeto de dado declarado será uma workarea, com a estrutura da tabela transparente. Por outro lado, quando usamos TYPE TABLE OF, estamos declarando uma tabela interna, com estrutura da tabela transparente.

Veja o código abaixo.

DATA: w_sflight TYPE sflight,mas
t_sflight TYPE TABLE OF sflight,

Temos uma workarea w_sflight e uma internal table t_sflight, com estrutura da tabela transparente SFLIGHT.

LIKE

Por último, temos a seguinte declaração de variável:

DATA: v_diff LIKE w_sflight_dif-diff.

O LIKE indica que o objeto de dado declarado possui o mesmo tipo de outro objeto de dado já declarado, podendo este ser local ou global.

No caso acima, a variável v_diff, possui o mesmo tipo do campo da workarea w_sflight_dif-diff, ou seja, sflight-seatsmax.

Agora já sabemos quando usar TYPE, LIKE e BEGIN OF.

1 Resultado

  1. Marcio Briller disse:

    Legal Flávio,

    Deu uma clareada nas idéias agora!!!

    Obrigado

    Um abraço