Translate this blog

segunda-feira, 15 de abril de 2013

Modificar tabelas internas com Field Symbol / Modify internal tables with Field Symbol ( Field Symbol - Part III )


 Português  Quando comecei a aprender ABAP, me deparei com as tais das tabelas transparentes e tabelas internas. Para quem não conhece, aqui vai uma breve (e pobre) explicação: tabela transparente detém a informação do SAP, são as tabelas que compõe o banco de dados; tabela interna são as que utilizamos nos programas, para obter informações, montar relatórios ou até mesmo modificar o conteúdo das tabelas transparentes.

Com as tabelas internas, vieram as estruturas/Work Areas, Header Lines, e suas maneiras específicas de utilização. Foquei na explicação das estruturas/Work Areas, pois o Header Line estava se tornando obsoleto pela SAP, mas sua utilização ainda é possível (corrijam-me se estiver errado sobre essas infos!).

As Work Areas são estruturas declaradas com a mesma estrutura da tabela que queremos manipular. Fazendo um looping em uma tabela por exemplo, cada linha pode ser lida com auxílio desta Work Area, modificada e, se for o caso, alterar o conteúdo da tabela interna (e também da tabela transparente). No caso de se manter as informações da tabela interna é necessário uma linha de comando para efetuar esse processo, que no caso é: MODIFY ... INDEX ...

Quando aprendi sobre o Field Symbol, fiquei com preguiça de usá-lo... Mas com o tempo me convenci que deveria usar, tanto pra melhorar performance, quanto para expandir meu conhecimento. Como dito antes, é um baita recurso pois não necessita do comando MODIFY..., você simplesmente altera a informação como se estivesse lidando com a linha diretamente da tabela!

Abaixo temos um exemplo prático, onde mostro duas formas distintas de se fazer a mesma operação:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
*Suponhamos que neste momento a tabela it_mara tenha10 linhas
  DATA: ls_mara TYPE mara.
  FIELD-SYMBOLS: <fs_mara> TYPE mara.
 
*Usando Work Area para alterar dados da tabela interna
  LOOP AT it_mara INTO ls_mara.
   ls_mara-ersda = '2013.04.15'.
    MODIFY it_mara FROM ls_mara INDEX sy-tabix.
  ENDLOOP.
 
*Usando Field Symbol p/ alterar dados da tabela interna
  LOOP AT it_mara ASSIGNING <fs_mara>.
   <fs_mara>-ersd> = '2013.04.15'.
  ENDLOOP.

Visualmente podemos notar a facilidade e a economia de esforço é empregada com a utilização de ponteiros na atualização em massa de uma informação em tabelas internas. Lembrando que também é possível utilizar este recurso com o comando READ TABLE...

Nenhum comentário:

Postar um comentário