sie

1

Programowanie ABAP – pętla LOOP…ENDLOOP (1)

Autor: admin

W poprzednim wpisie używaliśmy SELECT do pobierania danych z tabeli MARA do naszej wewnętrznej tabeli lt_mara – jeżeli chcielibyśmy wyświetlić dane z naszej tabeli wewnętrznej za pomocą WRITE to niestety system zwróci nam błąd syntetyczny, ponieważ może być więcej niż jeden rekord – do tego celu użyjemy pętli LOOP.

Pętla to jedna z tych konstrukcji bez której nie da się żyć w programowaniu, dzisiaj skupię się na pętli LOOP….ENDLOOP dzięki której możemy odczytać wszystkie rekordy z tabeli wewnętrznej.

Sama konstrukcja jest prosta, bo zaczyna się zawsze od LOOP AT później wstawiamy nazwę tabeli wewnętrznej i kończymy zawsze ENDLOOP. Jeżeli tabela wewnętzna nie ma w definicji nagłówka to musimy jeszcze wspomóc się obszarem roboczym do którego pętla będzie kopiować dane. Zrobię 2 przykłady żeby pokazać jak to będzie wyglądać:

Przykład 1 – tabela wewnętrzna bez definicji nagłówka:

DATA: wa_mara TYPE mara,            ”Obszar roboczy
      lt_mara TYPE TABLE OF mara.   ”Tabela lokalna

SELECT-OPTIONS: material FOR wa_mara-matnr.

SELECT * FROM mara INTO TABLE lt_mara
                   WHERE matnr IN material.

LOOP AT lt_mara INTO wa_mara.
  WRITE:/ wa_mara-matnr, wa_mara-mtart.
ENDLOOP.

Czyli dla definicji tabeli bez nagłówka, musimy użyć dodatkowo INTO ‘obszar roboczy’, za pomocą którego wyświetlimy dane na ekranie. Zauważcie że do funkcji WRITE używamy obszaru roboczego wa_mara, do którego kopiowane są dane z pętli.

Przykład 2 – tabela wewnętrzna z definicją nagłówka:

TABLES: mara.
DATA: lt_mara TYPE TABLE OF mara WITH HEADER LINE.   ”Tabela lokalna z nagłówkiem

SELECT-OPTIONS: material FOR mara-matnr.

SELECT * FROM mara INTO TABLE lt_mara
                   WHERE matnr IN material.

LOOP AT lt_mara.
  WRITE:/ lt_mara-matnr, lt_mara-mtart.
ENDLOOP.

Dodaliśmy tylko do definicji tabeli nagłówek WITH HEADER LINE i na tym poziomie pętla może zapisywać sobie tymczasowe dane – dzięki temu zmienia nam się źródło danyc do funkcji WRITE – system korzysta z lt_mara

Zostaw komentarz