Welcome file

Tabela zewnętrzna w SAP ABAP

W ABAP obiekty lokalne (struktury, tabele, typy i inne) różnią się od obiektów globalnych (zewnętrznych) zakresem działania i dostępnością w systemie - globalne są dostępne w całym serwerze, w każdej aplikacji, dosłownie w całym systemie SAP i mogą być używane przez różne aplikacje oraz obiekty.

Przydatne linki

  1. DDIC - Domains | ABAP Keyword Documentation
  2. ABAP w SAP – podstawy dla początkujących - os-CMS

Spis treści

  1. Tworzenie data - elementów będących odpowiednikami kolumn.
  2. Tworzenie struktury - globalny typ struktury.
  3. Tworzenie tabeli globalnej.

TWORZENIE ELEMENTÓW

Temat tworzenia elementów będę rozwijać na podstawie zadania projektowego z artykułu “Struktura i tabela wewnętrzna”:
Struktura i tabela wewnętrzna w SAP ABAP

W tym momencie warto wspomnieć, że oprócz typów wyróżniamy także inne niż elementy typów - domenę.
W hierarchii typów w ABAP, domena (domain) znajduje się na niższym poziomie niż element danych (data element) i jest podstawowym budulcem typów elementarnych. Domena definiuje techniczne właściwości typu danych, takie jak

  • typ,
  • długość,
  • zakres wartości oraz
  • reguły walidacji (np. ograniczenia długości, domyślne wartości, lista dopuszczalnych wartości).​

Rola domeny w ABAP

  • Domena określa format i ograniczenia dla pól danych (np. długość pola tekstowego, typ liczbowy, zakres wartości).

  • Domena nie może być używana bezpośrednio w programie, tylko poprzez element danych, który odwołuje się do domeny.​

  • Przykład: domena typu CHAR(10) definiuje pole tekstowe o długości 10 znaków, które może być wykorzystane w wielu elementach danych.​

Hierarchia typów

  • Najniższy poziom: domena (określa techniczne właściwości typu danych).

  • Wyżej: element danych (nadaje domenie znaczenie biznesowe, np. “Numer klienta”).

  • Następnie: pola w tabelach lub strukturach, które używają elementów danych.​

Domena jest więc fundamentem typów elementarnych w ABAP, ale sama w sobie nie jest typem danych, który można używać bezpośrednio w programie - służy do budowania elementów danych, które są już używane w strukturach, tabelach i programach.

W moim zadaniu projektowym nie będę korzystać z domeny - skorzystam z opcji - Predefined Type, z kolei Data type wybieramy CHAR - ponieważ będę korzystać z bazowego typu CHAR10.

Klikam aktywację:

Następnie dodaję kolejny element: WORK_DATE

W predefiniowanym typie dla WORK_DATE wybieram datę i oczywiście aktywuję przyciskiem Activate lub Ctrl F3.

Dodaję ostatni element - hours_work

typ dla tego elementu był określony poprzednio na i - integer. W tej konfiguracji korzystam z opcji INT4 , ponieważ jest to 4‑bajtowa liczba całkowita ze znakiem, zakres mniej więcej od ok. -2 miliardów do +2 miliardów, co w praktyce w 100% wystarcza na liczbę godzin, ilości, identyfikatory itp. Jest to domyślny i najczęściej używany typ liczb całkowitych w ABAP (np. dla liczników, indeksów, ilości).

Aktywacja:

TWORZENIE GLOBALNEJ STRUKTURY

Tworzymy strukturę dla ilości przepracowanych godzin:

- modyfikujemy linię 4:

klikamy aktywację.

Podsumowując:
I. Utworzyłam elementy, które są odpowiednikami zapisów:

II. Utworzyłam także strukturę
III. Przede mną utworzenie typu tabelarycznego, czyli odpowiednika deklaracji z linii 14 w zadaniu projektowym w temacie struktury i tabeli wewnętrznej:

Tworzę typ tabelaryczny na podstawie struktury:

Nazewnictwo typów tabelarycznych w ABAP nie jest sztywno narzucone przez SAP, ale istnieją dość powszechne konwencje projektowe, które warto stosować dla czytelności i spójności kodu.

Typy tabel w DDIC (SE11)

  • Dla globalnych typów tabel (Table Types w słowniku) często stosuje się prefiks ZTY_ lub podobny (projektowy), np. ZTY_EMPLOYEE, zgodnie z wewnętrznymi wytycznymi projektu lub firmy.​

  • Nazwa powinna:

    • zaczynać się od Z/Y dla obiektów własnych,
    • zawierać skrót obszaru biznesowego oraz informację, że jest to typ tabeli, np. ZTY_HR_EMP.​

Lokalne / globalne typy w kodzie

  • Dla typów definiowanych instrukcją TYPES w klasie/raporcie spotyka się konwencję:

    • typ wiersza: ty_..., np. ty_employee
    • typ tabeli: tt_... lub ty_t_..., np. tt_employee.​
  • Dla samych zmiennych (obiektów danych):

    • tabela globalna: gt_...,
    • tabela lokalna: lt_..., zgodnie z popularnymi guideline’ami ABAP.

Moja nazwa zatem to: ZTY_TT_HOURS_WORK

Uzupełniam krótki opis:

w polu linia wskazuję nazwę mojej struktury czyli ZVC_STR_HOURS_WORK

I zapisuję dyskietką - w tym momencie system utworzy typ tabelaryczny na podstawie typu tej struktury:

TWORZENIE TABELI WEWNĘTRZNEJ

Tworzę tabelę wewnętrzną dla przechowywania danych

Definicję tabeli przekopiowuję z definicji struktury:

Pojawia się komunikat, że brakuje kluczy:

Dlatego dopisuję “key” przed employee_id oraz hours_work:

i aktywuję tabelę:

Wracam do programu z zadania projektowego z artykułu “Struktura i tabela wewnętrzna” i klikamy copy:

Wklejam i zmieniam nazwę na ZEW:

Kasuję część kodu i zostawiam tylko tyle:

Zmieniam w kodzie zapis, aby nasza struktura programu bazowała na naszej globalnej strukturze:

dopisujemy modfiy zvc_ czyli naszą globalną tabelę:

MODIFY zvc_working_hour from table lt_hours_work.

Aktywuję:

Wracam do tabeli globalnej i klikam Open with: Data preview:

Oto efekt, że dane do tabeli zostały wstawione poprawnie.