Conteúdo

Field Symbol - Assigning

FIELD-SYMBOLS nada mais é que um ponteiro/espelho e o ASSIGNING é a atribuição. Digamos que você precise alterar um valor de uma tabela já populada. Em vez de dar um loop na tabela interna e jogar em uma estrutura, afim de modificá-la (dentro do loop por exemplo), você pode utilizar field-symbol, pois com isto não precisaria atribuir valor à estrutura, e a tabela seria automaticamente atualizada naquele momento.

Ou um exemplo mais simples seria você imaginar você se olhando em um espelho. Imagine que o espelho fica parado e a cada reação sua é refletida no espelho.

rs Não sei se ajudei ou compliquei com essa do espelho. Malz ae se piorei. kkkk

No exemplo abaixo a tabela terá o conteúdo do registro ERSDA atualizado com a data atual. Veja que não tem nenhum modify.
REPORT ZSAPeiros.

DATA: lt_mara     TYPE TABLE OF mara, "Tabela Mara
      lv_ersda    TYPE mara-ersda.    "Dt crianção

FIELD-SYMBOLS: <lt_mara> TYPE mara.

SELECT *
  FROM mara
  INTO TABLE lt_mara
  UP TO 10 ROWS.

SORT lt_mara BY ersda.

* Exemplo com Loop
* Vai alterar o campo ERSDA com o valor da data atual + contador
LOOP AT lt_mara ASSIGNING <lt_mara>.
  <lt_mara>-ersda = sy-datum + sy-tabix.
ENDLOOP.

* Exemplo com Read Table
* Vai alterar o campo ERSDA com o valor da data atual apenas do terceiro registro do loop acima
lv_ersda = sy-datum + 3.

READ TABLE lt_mara
  WITH KEY ersda = lv_ersda
           BINARY SEARCH ASSIGNING <lt_mara>.

IF sy-subrc IS INITIAL.
  <lt_mara>-ersda = sy-datum.
ENDIF.