You are on page 1of 5

Instytut Informatyki - Politechnika Poznańska

Struktury i tabele wewnętrzne


Wprowadzenie
Duża część programów napisanych w ABAP-ie operuje na tabelach. Tabele są
najważniejszymi strukturami danych w systemie SAP R/3. W tabelach baz danych
zapisywane i przechowywane są dane wprowadzane do systemu na stałe.
Możliwe jest także stworzenie tabel wewnętrznych, które są obiektami istniejącymi
wyłącznie w czasie wykonywania programu. Można na nich wykonywać podobne operacje
jak na zwykłych tabelach.
Liczba linii w tabeli wewnętrznej nie jest stała. Można ją dynamicznie zwiększać w miarę
potrzeb podczas wykonywania programu. Oznacza to między innymi, że przed
wczytaniem tabeli bazy danych do tabeli wewnętrznej nie trzeba z góry znać rozmiaru
tabeli bazy danych, co znacznie upraszcza korzystanie tabel wewnętrznych.
Tabel wewnętrznych można używać do wykonywania operacji na podzbiorach tabel BD
(np. wczytać część jednej lub kilku tabel BD do jednej tabeli wewnętrznej i użyć jej
później do podsumowań lub posortowania). Można dopasować ich zawartość do potrzeb
programu użytkownika (np. wczytać odpowiednie rekordy z jednej lub z kilku dużych
tabel BD do jednej tabeli wewnętrznej i następnie korzystać z niej podczas wykonywania
programu bez konieczności wyszukiwania poszczególnych rekordów w BD).
Struktura jest przykładem obiektu złożonego. Składa się ona z kilku obiektów
podstawowych występujących w pewnym porządku.
Innym typem obiektu złożonego jest tabela wewnętrzna, która składa się z dowolnej
liczby obiektów tej samej struktury.
Dostęp do tabeli wewnętrznej uzyskuje się przez tzw. obszar roboczy. Obszar roboczy
musi mieć taką samą strukturę jak tabela wewnętrzna. Dostęp do obiektów z tabeli
wewnętrznej uzyskuje się po przeniesieniu ich do obszaru roboczego.

Deklarowanie struktury
Każda struktura i tabela wewnętrzna wymaga zadeklarowania. Celem tego ćwiczenia jest
zadeklarowanie struktury zawierającej jedną kolumnę dla miasta wylotu (CITYFROM),
jedną dla miasta przylotu (CITYTO), jedną dla oznaczenia linii lotniczych (CARRID) i
jedną dla numeru lotu (CONNID) w oparciu o elementy struktury tabeli bazy danych
SPFLI.
Ćwiczenie:
1. Stwórz nowy program o nazwie Z<nr_indeksu>INTTAB. Ustawiając właściwości
programu tak, by dane były wczytywane przy użyciu logicznej bazy danych F1S.
2. Zadeklaruj tabelę SPFLI.
3. Ustaw kursor w sekcji deklaracji twojego programu i wybierz przycisk Wzorzec.
4. Okno: Wstaw. wzorca
1. Strukturalny obiekt danych
1. Z polami ze struktury: SPFLI
2. Kontynuacja
5. Ekran: ABAP: Edytor - dodawanie instrukcji SELECT dla tabeli SPFLI

Systemy klasy ERP 1/5


Instytut Informatyki - Politechnika Poznańska

1. Zaznacz pola, które powinny się znaleźć w tabeli wewnętrznej.


2. Kopiowanie
6. Okno: Tworzenie strukturalnego obiektu danych
1. Wprowadź nazwę struktury
2. Kontynuacja
7. Słowo kluczowe DATA używane dla deklaracji tabeli wewnętrznej zastąp słowem
kluczowym TYPES używanym w deklaracjach struktur. A słowa kluczowe TYPE
zastąp przez LIKE.

Deklarowanie tabeli wewnętrznej


Celem tego ćwiczenia jest zadeklarowanie tabeli wewnętrznej w oparciu o strukturę
zadeklarowaną w poprzednim ćwiczeniu.

Ćwiczenie:
1. W edytorze ABAP otwórz program stworzony w poprzednim ćwiczeniu.
2. Poniżej deklaracji struktury zadeklaruj tabelę wewnętrzną korzystając ze składni:
DATA <nazwa_tabeli_wewnętrznej> TYPE <nazwa_struktury> OCCURS 0.
Słowo kluczowe OCCURS definiuje strukturę jako tabelę wewnętrzną. Liczba
występująca po OCCURS określa liczbę linii tabeli po jej zainicjowaniu. Brak słowa
kluczowego OCCURS w deklaracji sprawia, że zamiast tabeli wewnętrznej
zadeklarowany zostanie ciąg pól.

Definiowanie obszaru roboczego


Celem ćwiczenia jest zdefiniowanie obszaru roboczego, który posłuży do operacji na
zawartości tabeli wewnętrznej. W czasie pracy na tabeli wewnętrznej system zawsze
wypełnia obszar roboczy zawartością bieżącej linii tabeli.
Istnieją dwa sposoby definiowania obszaru roboczego:
• Użycie tabeli wewnętrznej z linią nagłówka - System automatycznie tworzy obszar
roboczy (linię nagłówka) o takiej samej nazwie jak tabela wewnętrzna.
• Zdefiniowanie własnej struktury takiej samej jak struktura tabeli wewnętrznej -
można jej później użyć jako obszaru roboczego dla tabeli wewnętrznej.
W ćwiczeniu należy stworzyć strukturę dla obszaru roboczego dla tabeli wewnętrznej bez
linii nagłówkowych zdefiniowanej w poprzednim ćwiczeniu.

Ćwiczenie:
1. Otwórz program utworzony w poprzednim ćwiczeniu
2. Zadeklaruj obszar roboczy korzystając ze składni:
DATA: <nazwa_obszaru_roboczego> TYPE <nazwa_struktury>.
3. Sprawdź poprawność składniową i zapisz program.
W ten sposób zdefiniowano obszar roboczy o takiej samej strukturze jak struktura tabeli
wewnętrznej. Obszar ten może być wykorzystany do wyświetlania lub zmiany zawartości
tabeli wewnętrznej. Dostęp do pól obszaru roboczego następuje w taki sam sposób jak
do pól tabeli bazodanowej poprzez <nazwa_obszaru_roboczego>—<nazwa_pola>.

Systemy klasy ERP 2/5


Instytut Informatyki - Politechnika Poznańska

Wypełnianie tabel wewnętrznych


Do tej pory zadeklarowano tabelę wewnętrzną bez linii nagłówkowej oraz obszar roboczy
dla tej tabeli. Zatem można już przejść do pracy z tabelą. Aby wypełnić tabelę należy
użyć składni ze słowem kluczowym APPEND, które powoduje dodanie zawartości obszaru
roboczego w nowej linii na końcu tabeli. W ćwiczeniu należy dodać dane na końcu tabeli.

APPEND
Składnia:
APPEND <obszar_roboczy> TO <tabela_wewnętrzna>

Ćwiczenie:
1. Otwórz program utworzony w poprzednim ćwiczeniu.
2. W zdarzeniu GET SPFLI przesuń zawartość tabeli SPFLI do odpowiednich pól
obszaru roboczego tabeli wewnętrznej używając słowa kluczowego MOVE.
3. Dodaj zawartość obszaru roboczego na końcu tabeli wewnętrznej.
4. Sprawdź składnię i zapisz program.

Uwaga: Zamiast przenosić pojedynczo zawartość każdego pola można użyć składni
polecenia MOVE-CORRESPONDING.

MOVE-CORRESPONDING
Składnia:
MOVE-CORRESPONDING <struktura_1> TO <struktura_2>

Polecenie przesuwa zawartość składowych struktury_1 do składowych struktury_2 pod


warunkiem, że mają tę samą nazwę.

Przetwarzanie danych tabeli wewnętrznej.


Przetwarzanie danych z tabeli na ogół odbywa się w pętli. W pętli, wszystkie elementy
tabeli wewnętrznej są odczytywane po kolei począwszy od pierwszej linii. W przypadku
zadeklarowania tabeli wewnętrznej i obszaru roboczego zawartość bieżącej linii tabeli
trafia do obszaru roboczego o ile spełniony jest <warunek>.

LOOP
Składnia:
LOOP AT <tabela_wewnętrzna> INTO <obszar_roboczy> <warunek>.
<blok_instrukcji>
ENDLOOP.

Wyświetlanie zawartości tabeli


Zawartość tabeli wewnętrznej można wyświetlić w pętli LOOP przy użyciu polecenia
WRITE. Należy jednak pamiętać, że w przypadku stosowania obszaru roboczego w
poleceniu WRITE musimy się odwołać do poszczególnych pól obszaru roboczego.
Ćwiczenie polega na wyświetleniu zawartości tabeli wewnętrznej.

Systemy klasy ERP 3/5


Instytut Informatyki - Politechnika Poznańska

Ćwiczenie:
1. Otwórz opracowywany program w Edytorze ABAP.
2. Wybierz odpowiednie zdarzenie spośród: AT SELECTION SCREEN, START OF
SELECTION, GET … , GET … LATE, END-OF-SELECTION, TOP-OF-PAGE, które
zostanie użyte przy wyświetlaniu zawartości tabeli. Bliższy opis tych zdarzeń
można znaleźć w dokumentacji poprzedniego ćwiczenia laboratoryjnego.
3. Dodaj to programu pętlę dla tabeli wewnętrznej z obszarem roboczym.
4. Spowoduj wypisanie na ekranie pól obszaru roboczego w bloku instrukcji pętli
LOOP.
5. Sprawdź poprawność składniową i zapisz program.
6. Uruchom program dla lotów Lufthansy od numeru 400 do 2000 (zapisz ten wybór
jako wariant).

Zmiana pojedynczych linii w tabeli wewnętrznej


Do zmiany pojedynczych linii tabeli wewnętrznej służy polecenie MODIFY, które
modyfikuje bieżącą linię w instrukcji pętli LOOP. Jednak zanim to nastąpi najpierw należy
przeprowadzić odpowiednie zmiany w bieżącej linii obszaru roboczego tabeli
wewnętrznej. Dopiero wtedy można zawartość obszaru roboczego przypisać do bieżącej
linii tabeli używając składni MODIFY <nazwa_tabeli_wewnętrznej> FROM
<nazwa_obszaru_roboczego>.

W tym ćwiczeniu po pierwszym wyświetleniu zawartości tabeli, wg. zdefiniowanego w


poprzedniej sekcji wariantu, zmieniony zostanie numer lotu z ‘0400’ na ‘0401’. Następnie
zmodyfikowana zawartość tabeli wewnętrznej zostanie wyświetlona w następnej pętli
LOOP.

1. Otwórz opracowywany program w Edytorze ABAP.


2. W pętli LOOP wstaw instrukcję IF, która będzie spełniona tylko dla lotu o numerze
‘0400’.
3. Wewnątrz bloku instrukcji warunkowej IF, zmodyfikuj zawartość obszaru
roboczego zgodnie z celem ćwiczenia.
4. Zmodyfikuj tabelę wewnętrzną tylko dla tych linii, dla których numer lotu jest
równy ‘0400’.
5. Dodaj do programu jeszcze jedną pętlę LOOP, w której wyświetlona zostanie
zawartość zmodyfikowanej tabeli. Pomiędzy jedną a drugą zawartością tabeli
wstaw znak podziału strony.
6. Sprawdź poprawność składniową i zapisz program.
7. Uruchom program korzystając z wariantu zdefiniowanego w poprzedniej sekcji.

Usuwanie pojedynczych linii z tabeli wewnętrznej


Pojedyncze linie tabeli wewnętrznej można usuwać korzystając z instrukcji DELETE
wykonywanej w pętli LOOP. DELETE usuwa bieżącą linię tabeli wewnętrznej. Składnia
instrukcji DELETE w tym przypadku to po prostu DELETE <nazwa_tabeli_wewnętrznej>.
Celem ćwiczenia jest usunięcie z tabeli wewnętrznej lotu numer ‘0402’, a następnie
wyświetlenie wyniku w pętli LOOP.
Ćwiczenie:
1. Otwórz opracowywany program w Edytorze ABAP.

Systemy klasy ERP 4/5


Instytut Informatyki - Politechnika Poznańska

2. W drugiej pętli LOOP wstaw instrukcję warunkową IF, która będzie spełniona dla
lotu numer ‘0402’.
3. Usuń z tabeli wewnętrznej linie dotyczące lotu numer ‘0402’.
4. Dodaj następną pętlę LOOP, w której zostanie wyświetlona zawartość
zmodyfikowanej tabeli wewnętrznej. Oddziel tę treść od wcześniejszych znakiem
podziału strony.
5. Sprawdź poprawność składniową i zapisz program.
6. Uruchom program korzystając z wcześniej zdefiniowanego wariantu.

Sortowanie tabel wewnętrznych


Tabelę wewnętrzną można posortować według jednego lub kilku pól stosując instrukcję
SORT na zewnątrz pętli LOOP.

SORT
Składnia:
SORT <tabela_wewnętrzna> [ASCENDING|DESCENDING] [AS TEXT] [STABLE]
[BY <pole_1> [ASCENDING|DESCENDING] [AS TEXT]
...
<pole_n> [ASCENDING|DESCENDING] [AS TEXT]].

Powoduje posortowanie tabeli wewnętrznej rosnąco lub malejąco według klucza tabeli lub
według innych pól (pole_1 do pole_n). Opcja AS TEXT wymusza sortowanie alfabetycznie
zgodnie z ustawieniami systemu, w przeciwnym przypadku sortowanie jest zależne od
platformy sprzętowej. Opcja STABLE powoduje zachowanie tej samej kolejności po
każdym sortowaniu.

Celem ćwiczenia jest posortowanie połączeń lotniczych według miejsca przylotu.

Ćwiczenie:
1. Otwórz opracowywany program w Edytorze ABAP.
2. Po ostatniej instrukcji LOOP wstaw instrukcję SORT, która spowoduje
posortowanie według miejsca przylotu.
3. Dołącz do programu kolejną pętlę LOOP, w której wyświetlony zostanie wynik
sortowania, podobnie jak poprzednio oddziel tę informację od poprzednich
znakiem podziału strony
4. Sprawdź poprawność składniową i zapisz program.
5. Wykonaj program korzystając z wcześniej zdefiniowanego wariantu.

Systemy klasy ERP 5/5

You might also like