hi anitha,
<b>Field Symbols</b>
Field symbols são espaços reservados ou nomes simbólicos para outros campos. Eles não reservam espaço fisicamente para um campo, mas apontam para seu conteúdo. Um field symbol pode apontar para qualquer objeto de dados. O objeto de dados para o qual um field symbol aponta é atribuído a ele após ser declarado no programa.
Sempre que você se refere a um field symbol em um programa, está se referindo ao campo atribuído ao field symbol. Após a atribuição bem-sucedida, não há diferença no ABAP se você está referenciando o field symbol ou o campo em si. Você deve atribuir um campo a cada field symbol antes de poder se referir a este último em programas.
Os field symbols são semelhantes aos ponteiros desreferenciados em C (ou seja, ponteiros aos quais o operador de conteúdo * é aplicado). No entanto, o único equivalente real de ponteiros em ABAP, ou seja, variáveis que contêm um endereço de memória (referência) e que podem ser usadas sem o operador de conteúdo, são variáveis de referência em ABAP Objects.
Todas as operações programadas com field symbols são aplicadas ao campo atribuído a ele. Por exemplo, uma instrução MOVE entre dois field symbols move o conteúdo do campo atribuído ao primeiro field symbol para o campo atribuído ao segundo field symbol. Os field symbols continuam apontando para os mesmos campos após a instrução MOVE como faziam antes.
Você pode criar field symbols com ou sem especificações de tipo. Se você não especificar um tipo, o field symbol herda todos os atributos técnicos do campo atribuído a ele. Se você especificar um tipo, o sistema verifica a compatibilidade do field symbol e do campo que está atribuindo a ele durante a instrução ASSIGN.
<b>Os field symbols fornecem maior flexibilidade ao acessar objetos de dados:</b>
Se você deseja processar seções de campos, pode especificar o deslocamento e o comprimento do campo dinamicamente.
Você pode atribuir um field symbol a outro, o que permite acessar partes de campos.
Atribuições a field symbols podem se estender além dos limites do campo. Isso permite acessar sequências regulares de campos na memória de forma eficiente.
Você também pode forçar um field symbol a ter atributos técnicos diferentes daqueles do campo atribuído a ele.
A flexibilidade dos field symbols fornece soluções elegantes para certos problemas. Por outro lado, significa que erros podem ocorrer facilmente. Como os campos não são atribuídos aos field symbols até o tempo de execução, a eficácia das verificações de sintaxe e segurança é muito limitada para operações envolvendo field symbols. Isso pode levar a erros de execução ou atribuições de dados incorretas.
Embora os erros de execução indiquem um problema óbvio, as atribuições de dados incorretas são perigosas porque podem ser muito difíceis de detectar. Por esse motivo, você deve usar field symbols apenas se não puder obter o mesmo resultado usando outras instruções ABAP.
Por exemplo, você pode querer processar parte de uma string em que o deslocamento e o comprimento dependem do conteúdo do campo. Você poderia usar field symbols nesse caso. No entanto, como a instrução MOVE também suporta especificações de deslocamento e comprimento variáveis, você deve usá-la em vez disso. A instrução MOVE (com suas próprias variáveis auxiliares, se necessário) é muito mais segura do que usar field symbols, pois não pode acessar a memória além do limite de um campo. No entanto, field symbols podem melhorar o desempenho em alguns casos.
<b>exemplo:</b>
REPORT demo_field_symbols_stat_assign .
FIELD-SYMBOLS: <f1> TYPE ANY, <f2> TYPE i.
DATA: text(20) TYPE c VALUE 'Olá, como você está?',
num TYPE i VALUE 5,
BEGIN OF line1,
col1 TYPE f VALUE '1.1e+10',
col2 TYPE i VALUE '1234',
END OF line1,
line2 LIKE line1.
ASSIGN text TO <f1>.
ASSIGN num TO <f2>.
DESCRIBE FIELD <f1> LENGTH <f2>.
WRITE: / <f1>, 'tem comprimento', num.
ASSIGN line1 TO <f1>.
ASSIGN line2-col2 TO <f2>.
MOVE <f1> TO line2.
ASSIGN 'LINE2-COL2 =' TO <f1>.
WRITE: / <f1>, <f2>.
A saída é:
Olá, como você está? tem comprimento 20
LINE-COL2 = 1.234
O exemplo declara dois field symbols <F1> e <F2>. <F2> tem o tipo I, o que significa que apenas campos do tipo I podem ser atribuídos a ele. <F1> e <F2> apontam para diferentes campos durante o programa.