Język ABAP/4 - cs.put. · PDF fileElementy składni ABAP/4 Każdy program składa się z co...
Transcript of Język ABAP/4 - cs.put. · PDF fileElementy składni ABAP/4 Każdy program składa się z co...
Język ABAP/4
Bufor programu a roll area
Programy są buforowane na serwerze aplikacji w buforze programów
Dostęp do programu odbywa się podobnie jak do buforowanych tabel
Wszyscy użytkownicy korzystają z tej samej kopii programu, ale z różnych (dla każdego wywołania programu) obszarów pamięci roll-area
Obszary pamięci roll-area są używane do: przechowywania informacji o wykonywaniu programu i
przydziale pamięci (zmienne i ich wartości, wskaźnik do bieżącej instrukcji, lista wartości wyjściowych)
Każda instancja programu wymaga osobnego obszaru roll-area
Elementy składni ABAP/4
Każdy program składa się z co najmniej jednej instrukcji
Każda instrukcja składa się z co najmniej jednego słowa
Instrukcja zaczyna się od słowa kluczowego (wyjątek – niektóre wersje instrukcji przypisania)
Klauzule (w ABAP-ie nazywane uzupełnieniami) służą do modyfikowania funkcjonowania instrukcji z określonym słowem kluczowym
Instrukcja może rozpoczynać się w dowolnej kolumnie i rozciągać na kilka linii
Instrukcje kończą się kropką
W instrukcjach nie rozróżnia się wielkich i małych liter (nieliczne wyjątki)
Obiekty danych
Są to obszary pamięci używane do przechowywania danych podczas wykonywania programu
Dwa typy: modyfikowalne
niemodyfikowalne
Niemodyfikowalne obiekty danych: stałe
literały
Modyfikowalne obiekty danych zmienne
łańcuchy znaków (odpowiednik struktury)
tabele wewnętrzne (odpowiednik tablicy)
Uruchomienie programu wywołuje przydział pamięci w roll-area dla każdego obiektu danych tego programu
Zakończenie wykonywania programu wiąże się ze zwolnieniem obszarów pamięci używanych dla obiektów danych
Trzy poziomy widoczności obiektów: lokalny – obiekt dostępny tylko wewnątrz podprogramu, w którym jest zdefiniowany
globalny – obiekt dostępny w dowolnym miejscu programu
zewnętrzny – obiekt dostępny także poza programem, w którym został zdefiniowany
Literały
Literał – niemodyfikowalny obiekt danych
Może występować w dowolnym miejscu programu (tam gdzie jest potrzebny)
Typy literałów: łańcuch znaków
○ ciąg znaków (o rozróżnialnej wielkości) ujęty w parę znaków ’ ’
numeryczny ○ wartości mogą ale nie muszą być ujęte w apostrofy (wyjątek liczba z
częścią dziesiętną)
zmiennopozycyjny ○ postaci ‘mantysaEwykładnik’
○ apostrofy obowiązkowe
○ mantysa – może zawierać znak – lub + oraz miejsca dziesiętne
○ wykładnik – może zawierać znak – lub + oraz wiodące zera
○ E lub e
szesnastkowy○ apostrofy obowiązkowe
○ wielkie litery
○ parzysta liczba znaków
○ rzadko używane
Zmienne Definiowane za pomocą instrukcji:
DATA
PARAMETERS
Instrukcja DATA: składnia:
DATA v1[(l)] [TYPE t] [DECIMALS d] [VALUE ‘xxx’]
lub
DATA v1 LIKE v2 [VALUE ‘xxx’]
○ v1 oraz v2 nazwy zmiennych: długość do 30 znaków
zestaw znaków – alfanumeryczne oprócz + . , : ( )
nie mogą składać się wyłącznie z cyfr
nie mogą być takie same jak słowa kluczowe i klauzule instrukcji ABAP-owych
○ TYPE t dowolny predefiniowany typ języka ABAP
lokalny typ danych
typ danych słownika ABAP
○ DECIMALS d liczba miejsc dziesiętnych (tylko typ P)
Instrukcja DATA – c.d.
Wartości domyślne: długość: zależna od typu
typ danych: C
wartość:○ numeryczna: 0
○ znakowa: pusta
dla instrukcji z klauzulą LIKE:○ typ i długość przejmowane są ze zmiennej referencyjne
○ wartość początkowa nie jest przejmowana ze zmiennej referencyjnej
początkowa wartość domyślna może być jedynie stałą lub literałem
Zmienna może być zdefiniowana w dowolnym miejscu programu, ale musi być zdefiniowana przed jej pierwszym użyciem
Zalecane jest definiowanie zmiennych na początku programu
Typy znakowe
Typ Opis Domyślny
rozmiar
Max. dł. Dopuszczalne
wartości
Domyślna
wartość
początkowa
C znakowy 1 65535 Dowolny znak pusta
N tekst
numeryczny
1 65535 0-9 0
D data 8(stały) - 0-9 00000000
T czas 6(stały) - 0-9 000000
X szesnastkowy 1 65535 Dowolny znak
Bieżąca data sy-datum
Bieżący czas sy-uzeit
sy-datum i sy-uzeit są ustawiane na początku wykonywania programu i później nie są już zmieniane, aby je zaktualizować należy użyć instrukcji GET TIME
Typy numeryczne
Typ Opis Rozmiar
domyślny
Max. dł. Max. liczba
miejsc
dziesiętnych
Dopuszczalne
wartości
Domyślna wartość
początkowa
I całkowite 4(stały) - 0 -231 do +231 0
P spakowane 8 16 14 0-9 0
F zmienno-
pozycyjne
8 8 15* -1E-307 do
1E308
0.0
Instrukcja PARAMETERS
Działanie podobne do instrukcji DATA, z tą różnicą, że zanim program się rozpocznie pojawi się tzw. ekran wyboru, na którym można wprowadzić wartości zmiennych zdefiniowanych w instrukcji PARAMETERS
Nazwy parametrów (zmiennych): takie same reguły jak dla zmiennych
definiowanych w instrukcji DATA
różnice:○ maksymalnie 8 znaków
○ domyślna wartość początkowa może być również zmienną
Składnia instrukcji PARAMETERS
PARAMETERS p1[(l)] [TYPE t] [DECIMALS d] [DEFAULT ‘xxx’] [OBLIGATORY] [LOWER CASE] [AS CHECKBOX] [RADIOBUTTON GROUP g]
lub
PARAMETERS p1 LIKE v1 [DEFAULT ‘xxx’] [OBLIGATORY] [LOWER CASE] [AS CHECKBOX] [RADIOBUTTON GROUP g]
Objaśnienia: p1 – nazwa parametru
v1 – nazwa wcześniej zdefiniowanej zmiennej lub pola tabeli (struktury)
l – długość zmiennej
t – typ
d – liczba pól dziesiętnych (tylko dla typu P)
Klauzule instrukcji PARAMETERS
TYPE – jak w instrukcji DATA
DECIMALS – jak w instrukcji DATA
LIKE – jak w instrukcji DATA
DEFAULT – tak jak w klauzula VALUE instrukcji DATA
OBLIGATORY – użytkownik musi wprowadzić jakąś wartość przed wykonaniem programu
LOWER CASE – zapobiega automatycznej zamianie na wielkie litery
AS CHECKBOX – wyświetla parametr jako pole wyboru
RADIOBUTTON GROUP g – wyświetla parametr jako przycisk radiowy należący do grupy g (g -dowolna nazwa o długości 1-4 znaków)
Właściwości instrukcji PARAMETERS Pola obowiązkowe zaznaczone znakiem zapytania
Domyślny typ: C
Domyślna wartość początkowa: pusta dla typu C
0 dla pozostałych typów
Klauzula DEFAULT dopuszcza użycie stałych, literałów, zmiennych i zmiennych systemowych SY-…
Klauzula LIKE powoduje, że parametr przyjmuje taki sam typ i rozmiar jak zmienne referencyjna
Klauzula LIKE nie przyczynia się do ustalenia wartości początkowej
Może występować w dowolnym miejscu programu, ale jeszcze przed pierwszym miejscem użycia
Parametry występują w tym samym porządku na ekranie wyboru w jakim występują w instrukcji PARAMETERS
Interpreter ABAP-a gromadzi wszystkie wystąpienia instrukcji PARAMETERS i łączy je w jednym ekranie wyboru
Parametry wyświetlane w sposób domyślny
Domyślne wartości początkowe przy klauzuli AS CHECKBOX to ‘X’ lub ‘ ‘ (typ C długość 1)
Dla przycisków radiowych domyślny typ C a długość 1, jedyna wartość dopuszczalna jako domyślna wartość początkowa to ‘X’ dla przycisku, który ma być zaznaczony
Etykiety parametrów
Domyślnie takie jak nazwy parametrów
Mogą być zmienione: Otworzyć program w Edytorze ABAP
GotoText Elements
Selection Texts
W oknie Change PARAMETERS/SELECT-OPTIONS:○ ręcznie podać etykietę pola
○ lub skopiować ją (średnia etykieta) z elementu danych (Utilities Copy DD Text)
○ lub ręcznie wprowadzić część etykiet a resztę skopiować z elementów danych (Utilities Supplement DD Text)
Zapisać zmiany
Zmiana etykiety w obiekcie słownikowym wymaga ręcznej aktualizacji (Utilities Copy DD Text lub Utilities Copy DD Texts)
LIKE czy TYPE w instrukcji PARAMETERS
Zalecane LIKE
Zalety LIKE: Pomoc F1 przejmowana z elementu danych
Pomoc F4 przejmowana z obiektu o ile powiązano z nim tabelę kontrolną, ale bez mechanizmu walidacji
Etykiety pola przejmowane z elementu danych –gwarancja jednolitości wyglądu etykiety do tego samego pola we wszystkich programach
Modyfikacje typu i rozmiaru danych są automatycznie od razu widoczne w programie
Stałe
Definiowane instrukcją CONSTANTS
Składnia:
CONSTANTS c1[(l)] [TYPE t] [DECIMALS d]
VALUE ‘xxx’.
lub
CONSTANTS c1 LIKE cv VALUE ‘xxx’.
Jedna predefiniowana stała SPACE
Łańcuch pól
Odpowiada strukturze słownikowej
Ciąg pól zgrupowanych pod wspólną
nazwą
Definiowane instrukcjami DATA lub
TABLES
Łańcuch pól – definiowanie
instrukcją DATA Składnia:
DATA: BEGIN OF fs1,
f1[(l)] [TYPE t] [DECIMALS d] [VALUE ‘xxx’],
f2[(l)] [TYPE t] [DECIMALS d] [VALUE ‘xxx’],
…
END OF fs1.
lub
DATA BEGIN OF fs1.
DATA f1[(l)] [TYPE t] [DECIMALS d] [VALUE ‘xxx’].
DATA f2[(l)] [TYPE t] [DECIMALS d] [VALUE ‘xxx’].
…
[INCLUDE STRUCTURE st1.]
DATA END OF fs1.
lub
DATA fs1 LIKE fs2.
• fs1 – łańcuch pól
• f1, f2 – pola składowe łańcucha pól
• fs2 – zdefiniowany łańcuch pól lub nazwa tabeli (struktury) zdefiniowanej w słowniku
• (l) – długość
• t – typ danych
• d – liczba miejsc dziesiętnych (tylko typ P)
• ‘xxx’ – domyślna wartość
• st1 – nazwa tabeli (struktury)słownikowej
Łańcuch pól – właściwości
Odwołania do pól: fs1-fi
Łańcuchy pól można zagnieżdżać
Odwołania do pól zagnieżdżonego łańcucha pól wymaga podania nazw każdego łańcucha: fs1-fs2-fi
Stosując konstrukcję DATA … LIKE … łańcuch pól można zdefiniować dokładnie tak jak jest zdefiniowana odpowiednia tabela lub struktura słownika ABAP
Struktury i tabele słownika ABAP można również zagnieżdżać w łańcuchu pól (instrukcja INCLUDE STRUCTURE …)
Jeżeli struktura zostanie włączona do łańcucha pól instrukcją INCLUDE … to odwołanie do pól tej struktury jest standardowe fs1-fi, natomiast włączenie tej samej struktury instrukcją DATA fs2 LIKE … wymaga odwołań wielopoziomowych (np. fs1-fs2-fi)
Instrukcja przypisania wymaga takiej samej struktury w przypadku obydwu łańcuchów pól
Definiowanie łańcucha pól
instrukcją TABLES Składnia:
TABLES fs1.
fs1 – jest nazwą łańcucha pól
w Słowniku ABAP musi istnieć tabela lub struktura o takiej samej nazwie
definicja łańcucha pól fs1 jest identyczna z odpowiadającą jej definicją tabeli lub struktury Słownika ABAP
definicja łańcucha pól za pomocą instrukcji TABLES umożliwia dostęp do danych tabeli o tej samej nazwie
zasięg – bez względu na miejsce zdefiniowania zawsze globalny i zewnętrzny (współdzielenie tego samego obszaru pamięci przez dwa programy)
Definiowanie typów
Typy użytkownika można definiować za pomocą
instrukcji TYPES
Składnia:TYPES typ1[(dł)] [TYPE typ] [DECIMALS d].
lub
TYPES typ1 LIKE zmienna1.
Typ strukturalny – typ użytkownika oparty na
definicji łańcucha pól
Grupa typów
Grupa (pula) typów jest obiektem Słownika ABAP gromadzącym definicje typów użytkownika oraz stałych
Typy i stałe zdefiniowane w grupie typów mogą być używane w wielu programach
Program stanowiący grupę typów musi zaczynać się od instrukcji:
TYPE-POOL nazwa_grupy_typów.
Odwołanie do grupy typów z poziomu programu wymaga użycia instrukcji
TYPE-POOLS nazwa_grupy_typów.
Wielokrotne zdefiniowanie grupy typów nie powoduje pojawienia się komunikatu o błędzie
Nazwa grupy typów musi zaczynać się od Y lub Z i ni może być dłuższa niż 5 znaków.
Zasięg stałych i typów zdefiniowanych instrukcją TYPE-POOLSzawsze jest globalny
Zmienne systemowe
Nie wymagają definiowania
Zasięg globalny i zewnętrzny
Zdefiniowane w strukturze SYST
Słownika ABAP
Ponad 170 zmiennych
Zamiast nazwy struktury SYST można
stosować jej alias SY
Przykładowe zmienne systemowe
Zmienna Opis
SY-DATUM Bieżąca data
SY-UZEIT Bieżący czas
SY-UNAME Bieżące ID użytkownika
SY-SUBRC Poprzedni kod powrotu
SY-MANDT Numer mandanta
SY-PAGNO Numer bieżącej strony
SY-COLNO Numer bieżącej kolumny
SY-LINNO Numer bieżącej linii
SY-VLINE Linia pionowa
SY-ULINE Linia pozioma
SY-REPID Nazwa bieżącego raportu
SY-CPROG Nazwa programu głównego
SY-TCODE Kod bieżącej transakcji
SY-DBCNT W pętli SELECT – numer iteracji
Po zakończeniu pętli SELECT (po ENDSELECT) – liczba rekordów
spełniających warunek klauzuli WHERE
Instrukcje przypisania
Jedna z trzech instrukcji:
CLEAR
MOVE
MOVE-CORRESPONDING
Instrukcja CLEAR
Opis: przypisanie zmiennej wartości 0 lub pustych znaków (zmienna typu C)
Składnia:CLEAR z1 [WITH z2 | WITH ‘lit’ | WITH NULL]
○ z1 i z2 zmienne lub nazwy łańcucha pól
○ ‘lit’ – literał dowolnej długości
Działanie: gdy z1 jest typu znakowego zmienna wypełniana jest pustymi znakami,
w każdym innym przypadku (oprócz łańcucha znaków) zmienna wypełniana jest zerami
gdy z1 jest łańcuchem znaków to jego składowe wypełniane są w zależności od typu tej składowej
klauzula WITH z2 powoduje wypełnienie całej długości zmiennej pierwszym bajtem zmiennej z2
klauzula WITH ‘lit’ powoduje wypełnienie całej długości zmiennej pierwszym bajtem podanego literału
klauzula WITH NULL powoduje wypełnienie całej długości zmiennej zerami heksadecymalnymi
Instrukcja MOVE
Opis: służy przypisaniu zmiennej wartości reprezentowanej
przez: literał, stałą, zmienną, pole łańcucha, pole tabeli
Składnia:MOVE z1 TO z2.
lub
z2 = z1.
lub
z2 = z1 = zm = zn = … .
lub
MOVE z1[+n(l)] TO z2[+n(l)].
lub
z2[+n(l)] = z1[+n(l)].
Konwersja danych –
automatyczna zmiana rozmiaru
Typ Przypisanie do dłuższego
pola
Przypisanie do krótszego
pola
C Uzupełnienie z prawej
pustymi znakami
Obcięcie prawostronne
X Uzupełnienie z prawej
zerami
Obcięcie prawostronne
N Uzupełnienie z lewej
zerami
Obcięcie lewostronne
P Uzupełnienie z lewej
zerami
Przypisanie następuje o ile
wartość mieści się w rozmiarze
zmiennej, w przeciwnym
przypadku
F, I, D, T Typy o stałej długości – nie podlegają konwersji
Konwersja danych –
automatyczna zmiana typu (z typu C)
Z typu Na typ Reguły
C P Pole źródłowe nie może zawierać innych znaków niż: cyfry, kropka
dziesiętna, opcjonalny znak (z przodu/z tyłu), puste znaki (z przodu/ z tyłu).
Wyrównanie do prawej, uzupełnienie z lewej zerami. Łańcuch pustych
znaków konwertowany na 0.
C D Pole źródłowe powinno zawierać prawidłową datę w formacie RRRRMMDD,
w przeciwnym przypadku błąd nie wystąpi i nastąpi przypisanie
nieprawidłowej wartości.
C T Pole źródłowe powinno zawierać poprawny czas w formacie GGMMSS.
Reszta jak wyżej.
C N Pole źródłowe przeglądane z lewej do prawej, ale tylko cyfry przepisywane
do zmiennej docelowej (wyrównanie do prawej, uzupełnienie zerami),
pozostałe znaki ignorowane.
C X Z pola źródłowego do zmiennej docelowej przepisywane tylko cyfry i znaki
A-F (wyrównanie do lewej, uzupełnienie zerami/obcięcie z prawej),
pozostała część pola począwszy od pierwszego nieprawidłowego znaku
ignorowana
Konwersja danych –
automatyczna zmiana typu (pozostałe)
Z typu Na typ Reguły
P C Gdy rozmiar C mniejszy od liczby cyfr: wyrównanie do prawej, ostatni bajt
pozostawiony na znak („-” lub znak pusty), uzupełnienie z lewej zerami.
Gdy rozmiar C równy liczbie cyfr: gdy jest to liczba dodatnia nie zostawia się
ostatniego bajtu z prawej .
Gdy rozmiar C mniejszy od liczby cyfr: obcięcie z lewej, skrajny lewy bajt ma
wartość „*”.
Gdy liczba jest 0 to wpisuje się pojedyncze zero.
P D Liczba traktowana jest jako liczba dni od 1 stycznia 0001 i zamieniana na
datę formatu RRRRMMDD.
P T Liczba traktowana jako liczba sekund, jakie upłynęły od północy i
zamieniana na czas w 24-godzinnym formacie GGMMSS.
D P Data zamieniana jest na liczbę dni, jakie upłynęły od 01-01-0001.
T P Czas zamieniany jest na liczbę sekund, jakie upłynęły od północy.
I
*
*
I
Dla typu I obowiązują takie same zasady jak dla typu P.
Podpola
Podpole - część pola, do której następuje odwołanie przez podanie offsetu i/lub długości
Składnia:z1[+off][(dł)] = z2[+off][(dł)].
gdzie:
z1, z2 – zmienne lub pola łańcucha
off – offset względem początku pola
dł – długość podpola wyrażona w bajtach
Reguły: podpole może być określone dla pola źródłowego i/lub pola
docelowego
podpole może być określone przez offset i/lub długość
gdy brak offsetu podpole zaczyna się z początkiem pola
gdy brak długości podpole rozciąga się do końca pola
w specyfikacji podpola nie mogą pojawić się białe znaki
offset zawsze musi być poprzedzony znakiem „+”
długość musi być umieszczona w nawiasach
MOVE a łańcuchy pól
Jeżeli nie zostanie podana nazwa składowej to łańcuch pól traktowany jest jak zmienna typu C
Jeśli pole źródłowe jest kategorii znakowej (C, N, D, T, X), a pole docelowe jest łańcuchem zawierającym składowe numeryczne (typu I, P lub F), to nie jest wykonywana żadna konwersja a wynik jest nieprawidłowy i niezdefiniowany (zależny od maszyny).
W odwrotnej sytuacji wynik jest również nieprawidłowy i niezdefiniowany na skutek braku konwersji
Dopuszczalne jest użycie instrukcji MOVE dla dwóch łańcuchów pól pod warunkiem, że zawierają one tylko składowe typów znakowych
Pola numeryczne muszą (zależnie od maszyny) znaleźć się pod odpowiednim adresem (np. parzysty), zatem czasami kompilator musi dodać pewne dodatkowe bajty do łańcucha, co powoduje pewne niespodziewane zachowanie instrukcji MOVE
W przypadku łańcuchów o mieszanych (znakowych i numerycznych) polach przypisanie instrukcją MOVE dopuszczalne jest tylko wtedy, gdy dla wszystkich pól ich typy, rozmiary i położenie w łańcuchu są identyczne
Instrukcja MOVE-CORRESPONDING
Opis: przypisanie wartości tych pól łańcucha, które
mają taką samą nazwę jak pola drugiego łańcucha
Składnia:MOVE-CORRESPONDING z1 TO z2.
Właściwości: wykonanie MOVE-CORRESPONDING jest
równoważne wykonaniu ciągu odpowiednich instrukcji MOVE
jeżeli składowe o tej samej nazwie różnią się typem i/lub rozmiarem wykonywana jest automatyczna konwersja danych
Obliczenia
Zbiór instrukcji służących do wykonywania obliczeń składa się z instrukcji: COMPUTE
ADD
ADD-CORRESPONDING
SUBTRACT
SUBTRACT-CORRESPONDING
MULTIPLY
MULTIPLY-CORRESPONDING
DIVIDE
DIVIDE-CORRESPONDING
Instrukcja COMPUTE
Opis: instrukcja stosowana do wykonywania obliczeń
matematycznych
Składnia:COMPUTE z3 = z1 op z2 [op zn …]
lub
z3 = z1 op z2 [op zn …]
gdzie:
z3 – zmienna wynikowa
z1, z2, zn – operandy
op – operatory matematyczne
Instrukcja COMPUTE - właściwości
Operatory i operandy muszą być rozdzielone spacjami
Priorytety operacji: funkcje wbudowane (np. SQRT(x))
** (potęgowanie)
*, /, DIV, MOD (w porządku, w jakim występują w wyrażeniu)
+, - (w porządku, w jakim występują w wyrażeniu)
Porządek wykonywania obliczeń można zmienić stosując nawiasy „(” i „)” nawiasy muszą być odseparowane spacjami (wyjątek – nawias
poprzedzający argumenty wywołania funkcji)
Dzielenie przez zero jest niedopuszczalne Uwaga! Wyjątek – dzielenie 0 przez 0 jest dopuszczalne, a wynik też jest
zerem
O ile konieczne, to przeprowadzana jest konwersja danych
Parametr programu Fixed Point Arythmetic odpowiada za obliczenia z dokładnością do 31 miejsc po przecinku (gdy ustawiony) lub bez części ułamkowej (gdy nie ustawiony)
Instrukcje ADD, SUBTRACT,
MULTIPLY oraz DIVIDE Opis:
ADD – dodawanie dwóch liczb
SUBTRACT – odejmowanie dwóch liczb
MULTIPLY – mnożenie dwóch liczb
DIVIDE – dzielenie dwóch liczb
Składnia: ADD z1 TO z2.
SUBTRACT z1 FROM z2.
MULTIPLY z2 BY z1.
DIVIDE z2 BY z1.
Znaczenie: dodawanie z1 do z2
odejmowanie z1 od z2
mnożenie z2 przez z1
dzielenie z2 przez z1
Konwersje danych wykonywane w razie potrzeby
Instrukcje ADD-, SUBTRACT-, MULTIPLY-
oraz DIVIDE-CORRESPONDING
Opis: dodawanie (odejmowanie, mnożenie, dzielenie)
zawartości tych pól składowych dwóch łańcuchów, które mają taką samą nazwę
Składnia: ADD-CORRESPONDING fs1 TO fs2.
SUBTRACT-CORRESPONDING fs1 FROM fs2.
MULTIPLY-CORRESPONDING fs2 BY fs1.
DIVIDE-CORRESPONDING fs2 BY fs1.
Konwersja danych, o ile musi być przeprowadzona, jest realizowana według ogólnych zasad
Operacje matematyczne na datach
Na zmiennych typu D można wykonywać pewne operacje matematyczne
Operand lub wynik mogą być typu P
Przykład:DATA: d1 LIKE SY-DATUM,
d2 LIKE d1,
l_dni TYPE P.
d1 = d2 = SY-DATUM.
SUBTRACT 1 FROM d1.
d2+6 = ‘01’.
SUBTRACT 1 FROM d2.
l_dni = d1 – d2.
Przypisanie dynamiczne
Pole symbol (field-symbol) – wskaźnik, który może być dynamicznie przydzielony do pola.
Po przypisaniu pole symbol może być użyte w programie w miejscu aktualnej nazwy pola
Do zdefiniowania pola symbol używana jest instrukcja:
FIELD-SYMBOLS <nazwa_symbolu>.
Do przypisania wartości polu symbol stosowana jest instrukcja:
ASSIGN nazwa_pola TO <nazwa_symbolu>.
Zastosowanie: uniwersalne programy o bardzo ogólnym charakterze,
gdzie np. parametrem wejściowym jest nazwa tabeli