Nauka ABAP od podstaw – tworzymy pierwszy program w SE38

Czy konsultant SAP powinien znać ABAP? Czy trzeba od razu zostać programistą, żeby samodzielnie przeczytać fragment kodu, zrozumieć przyczynę błędu albo napisać prosty raport? Sam zadawałem sobie te pytania już wiele razy. Pracując z SAP EWM coraz częściej zaglądam do debugera, modułów funkcyjnych, klas oraz rozszerzeń. Problem w tym, że samo patrzenie na kod nie sprawia jeszcze, że człowiek zaczyna go rozumieć. Postanowiłem więc wreszcie zabrać się za naukę ABAP trochę bardziej na poważnie.

Dlaczego zaczynam naukę ABAP?

Na początku muszę zaznaczyć jedną ważną rzecz: nie jestem programistą ABAP.

Na co dzień pracuję jako konsultant SAP EWM. Potrafię analizować procesy, szukać przyczyn błędów, sprawdzać dane w tabelach, przeglądać kolejki qRFC i grzebać w systemie tak długo, aż znajdę miejsce, w którym coś się wysypało. Czasami jednak dochodzę do punktu, w którym dalsza analiza prowadzi już bezpośrednio do kodu.

Otwieram debugger, widzę kilkadziesiąt zmiennych, struktur, tabel wewnętrznych i referencji do obiektów. Przez chwilę nawet wyglądam, jakbym wiedział, co robię. Później pojawia się LOOP, ASSIGNING, jakaś referencja jest pusta, program wykonuje skok do kolejnej metody i cały mój profesjonalny wyraz twarzy bierze w łeb 😉

Doszedłem więc do wniosku, że czas przestać zgadywać.

Nie zamierzam od razu przebranżawiać się na pełnoetatowego programistę. Chcę jednak rozumieć kod, potrafić go analizować, sprawniej korzystać z debugera oraz samodzielnie pisać proste programy przydatne w codziennej pracy konsultanta.

Całą naukę chcę dokumentować na blogu. Dzięki temu powstanie seria przeznaczona dla osób, które — podobnie jak ja — znają SAP od strony użytkowej lub konsultingowej, ale podczas pierwszego spotkania z kodem ABAP nie bardzo wiedzą, od czego zacząć.

Dostęp do systemu SAP

Nauka samej teorii bez możliwości uruchomienia programu nie ma większego sensu. Można przeczytać nawet kilka książek, ale prędzej czy później trzeba samodzielnie wpisać kod, popełnić pierwszy błąd składniowy i przez pięć minut zastanawiać się, dlaczego system podkreśla coś, co przecież „wygląda dobrze”.

Ja uczę się, mając dostęp do systemu SAP, w którym mogę tworzyć własne programy testowe.

Jeżeli również chciałbyś rozpocząć naukę, ale nie masz dostępu do systemu, zajrzyj do mojego wcześniejszego artykułu:

ABAP kurs i darmowy dostęp do SAP

Opisałem w nim sposób, z którego sam korzystałem, aby uruchomić środowisko przeznaczone do nauki ABAP. Artykuł powstał jednak wcześniej, dlatego przed rozpoczęciem instalacji warto sprawdzić aktualność znajdujących się w nim linków, dostępnych wersji systemu oraz licencji.

Bez względu na to, z jakiego rozwiązania skorzystasz, potrzebujemy systemu, w którym mamy uprawnienia do utworzenia programu w przestrzeni nazw klienta, czyli programu rozpoczynającego się najczęściej od litery Z albo Y.

Pierwszy program ABAP

Koniec przynudzania. Czas napisać coś, co naprawdę uda się uruchomić.

W pierwszej lekcji nie będziemy tworzyć raportu analizującego zapasy, potwierdzającego zadania magazynowe ani naprawiającego niespójności w EWM. Na takie cuda przyjdzie jeszcze czas.

Zaczniemy od klasycznego programu wyświetlającego tekst.

Do utworzenia programu wykorzystamy transakcję SE38, czyli ABAP Editor. Jest to jedna z podstawowych transakcji używanych do tworzenia, zmiany, wyświetlania i uruchamiania programów ABAP.

Uruchomienie transakcji SE38

W pasku poleceń SAP wpisujemy: /nSE38

i zatwierdzamy klawiszem Enter.

Transakcja SE38 ABAP EDITOR

Po uruchomieniu transakcji zobaczymy ekran ABAP Editora. W polu oznaczonym na zdjęciu numerem 2 wprowadzamy nazwę programu. Zanim jednak cokolwiek utworzymy, przyjrzyjmy się jeszcze pozostałym elementom tego okna.

Co możemy zrobić z programem w SE38?

W panelu oznaczonym na zdjęciu numerem 1 znajdują się przyciski pozwalające wykonywać najważniejsze operacje na programie. Możemy między innymi utworzyć nowy program, wyświetlić już istniejący, przejść do jego zmiany albo go uruchomić. Dostępne są również funkcje związane ze sprawdzaniem składni, zapisywaniem i aktywowaniem programu. Po otwarciu kodu możemy także uruchomić program w trybie debugowania i krok po kroku obserwować, co dzieje się z jego zmiennymi podczas wykonywania kolejnych instrukcji.

Nie musisz na tym etapie zapamiętywać wszystkich ikon. W dalszej części wpisu skorzystamy z kilku najważniejszych, a do debugera wrócimy dokładniej w osobnej lekcji. Na razie wystarczy wiedzieć, że przy jego pomocy możemy zatrzymać wykonanie programu, przechodzić przez kod krok po kroku i podejrzeć aktualne wartości danych. Innymi słowy: zamiast zgadywać, dlaczego program robi coś dziwnego, możemy złapać go na gorącym uczynku.

Uruchomienie programu z wariantem – With Variants

Przycisk With Variants pozwala uruchomić program z zapisanym wcześniej wariantem. Wariant przechowuje wartości wprowadzone na ekranie selekcji, dzięki czemu nie trzeba za każdym razem wpisywać tych samych parametrów od początku.

Wyobraźmy sobie raport, w którym zawsze podajemy ten sam numer magazynu i typ składowania. Możemy zapisać te wartości jako wariant, nadać mu nazwę i wykorzystać przy następnym uruchomieniu programu. Nasz pierwszy raport nie posiada jeszcze ekranu selekcji, dlatego na razie nie będziemy korzystać z tej funkcji. Wrócimy do niej, gdy poznamy instrukcje PARAMETERS i SELECT-OPTIONS.

Sekcja Subobjects

W dolnej części ekranu znajduje się sekcja Subobjects. Pozwala ona wskazać, z którą częścią programu chcemy pracować. Znajdziemy tam między innymi:

  • Source Code – kod źródłowy programu, czyli miejsce, w którym będziemy pisać instrukcje ABAP;
  • Variants – zapisane zestawy wartości dla ekranu selekcji;
  • Documentation – dokumentację przypisaną do programu;
  • Text Elements – elementy tekstowe programu.

W sekcji Text Elements możemy opracować między innymi symbole tekstowe, opisy pól ekranu selekcji oraz nagłówki listy. Dzięki temu tekstów wyświetlanych użytkownikowi nie trzeba wpisywać na sztywno w kodzie. Ma to również znaczenie przy tłumaczeniu programu na inne języki. Na początku będziemy jeszcze używać prostych napisów bezpośrednio w instrukcji WRITE, ale z czasem zobaczymy, dlaczego elementy tekstowe są lepszym rozwiązaniem.

Nazwy i układ części przycisków mogą się nieznacznie różnić zależnie od wersji SAP GUI i języka logowania, jednak ich przeznaczenie pozostaje takie samo.

Programy tworzone przez klienta powinny znajdować się w przestrzeni nazw rozpoczynającej się od litery Z albo Y. Dzięki temu nie pomylimy własnego programu z obiektami dostarczonymi przez SAP.

Swój pierwszy program nazwę: ZABAP_LEKCJA_01

Oczywiście możesz wybrać inną nazwę. Ważne, żeby zaczynała się od Z lub Y i nie zawierała spacji.

Po wpisaniu nazwy wybieramy przycisk Create.

Tworzenie programu wykonywalnego

System poprosi nas o podanie podstawowych informacji o programie.

W polu Title możemy wpisać: Pierwszy program ABAP

Jako typ programu wybieramy Executable Program, czyli program wykonywalny.

Po zapisaniu system może poprosić o przypisanie programu do pakietu i zlecenia transportowego. Jeśli tworzymy program wyłącznie do lokalnej nauki i nie zamierzamy przenosić go do innego systemu, możemy zapisać go jako Local Object, wybierając pakiet $TMP.

Obiekty zapisane w $TMP nie są przypisywane do transportu. W systemie firmowym należy oczywiście stosować obowiązujące zasady dotyczące pakietów, nazw programów i zleceń transportowych. Nie polecam tworzenia własnych eksperymentów na produkcji. Szef może nie docenić naszego zapału do nauki tak bardzo, jak nam się wydaje.

Piszemy kod

Po utworzeniu programu zostaniemy przeniesieni do edytora ABAP.

Wpisujemy następujący kod:

 

Program składa się na razie tylko z dwóch instrukcji.

Pierwsza z nich: REPORT zabap_lekcja_01. – informuje system, że mamy do czynienia z wykonywalnym programem ABAP. Nazwa znajdująca się po słowie REPORT powinna odpowiadać nazwie utworzonego programu.

Druga instrukcja: WRITE / 'Witaj w świecie ABAP!'.wyświetla tekst na ekranie wynikowym.

Znak / powoduje rozpoczęcie wyświetlania od nowego wiersza. W tak krótkim programie nie robi to jeszcze większej różnicy, ale dobrze od początku wiedzieć, dlaczego się tam znajduje.

Warto zauważyć również, że każda instrukcja ABAP kończy się kropką. Brak jednej kropki potrafi wygenerować kilka komunikatów składniowych i skutecznie przekonać początkującego, że zepsuł cały system. Spokojnie — system przeżyje. Najczęściej brakuje po prostu tej cholernej kropki.

Sprawdzanie składni i aktywacja

Przed uruchomieniem programu sprawdzimy jego składnię.

Możemy skorzystać z przycisku na pasku narzędzi albo zeskrótu: Ctrl + F2

Jeżeli wszystko zostało wpisane poprawnie, system poinformuje nas, że nie znaleziono błędów składniowych.

Następnie aktywujemy program przy użyciu przycisku lub skrótu: Ctrl + F3

Samo zapisanie programu nie oznacza jeszcze, że jego aktualna wersja jest aktywna. Dopiero po aktywacji system może wykonać wprowadzony kod. Na końcu uruchamiamy program klawiszem: F8

Jeżeli wszystko poszło zgodnie z planem, na ekranie pojawi się tekst:

Witaj w świecie ABAP!

I tak oto napisaliśmy swój pierwszy program ABAP.

Nie pobiera jeszcze danych z tabeli, nie posiada ekranu wyboru i prawdopodobnie nie zrobi wielkiego wrażenia na doświadczonym developerze. Ale działa. A działający program jest zdecydowanie lepszy od trzydziestu stron teorii, których nie potrafimy wykorzystać.

Małe zadanie na zakończenie

Spróbuj teraz samodzielnie zmienić tekst wyświetlany przez program.

Możesz wpisać na przykład:

REPORT zabap_lekcja_01.

WRITE  'To jest mój pierwszy program ABAP.'.

WRITE  'I nawet udało się go uruchomić!'.

Sprawdź składnię, aktywuj program i uruchom go ponownie. Zauważ, że po WRITE nie wstawiliśmy znaku /.

Co to zmieniło? Możesz sprawdzić to samodzielnie, testując program, albo podać odpowiedź w komentarzu. 🙂

Czego nauczymy się w kolejnych lekcjach?

Nie chcę tworzyć kolejnego kursu, w którym już po kilku minutach pojawi się kilkadziesiąt nowych pojęć, a początkujący będzie musiał udawać, że wszystko rozumie.

Będziemy poruszać się krok po kroku, a każdy nowy element wykorzystamy później w praktycznym programie.

W kolejnych lekcjach zajmiemy się między innymi:

  1. Budową prostego programu wykonywalnego ABAP – omówimy, z jakich części może składać się program, gdzie umieszcza się deklaracje, ekran selekcji, bloki zdarzeń oraz właściwą logikę programu.
  2. Różnicą między strukturą a tabelą wewnętrzną – wyjaśnimy, do czego służy każda z nich, kiedy ich używać oraz jak je deklarować.
  3. Deklarowaniem zmiennych za pomocą DATA, deklaracjami inline DATA(...) oraz podstawowymi typami danych.
  4. Instrukcjami warunkowymi IF, ELSEIF i ELSE.
  5. Tworzeniem własnych typów i struktur za pomocą TYPES.
  6. Tabelami wewnętrznymi: STANDARD, SORTED oraz HASHED TABLE.
  7. Dodawaniem, odczytywaniem, zmienianiem i usuwaniem wierszy tabel.
  8. Pętlą LOOP AT, instrukcją CHECK oraz field-symbolami.
  9. Instrukcją READ TABLE, wyrażeniami tabelowymi i funkcją line_exists.
  10. Pobieraniem danych z tabel SAP za pomocą instrukcji SELECT.
  11. Tworzeniem ekranu selekcji z użyciem PARAMETERS i SELECT-OPTIONS.
  12. Obsługą sytuacji, w których system nie odnajdzie oczekiwanych danych.
  13. Korzystaniem z debugera i obserwowaniem wartości zmiennych podczas wykonywania programu.
  14. Podziałem programu na mniejsze, czytelniejsze fragmenty.
  15. Podstawami programowania obiektowego: klasami, obiektami, metodami i referencjami.

Ponieważ na co dzień pracuję z SAP EWM, z czasem spróbujemy wykorzystać zdobytą wiedzę do bardziej praktycznych przykładów. Pobierzemy między innymi potwierdzone zadania magazynowe z tabeli /SCWM/ORDIM_C, zastosujemy filtry dla magazynu oraz typów składowania, a otrzymane dane umieścimy w odpowiednio zdefiniowanej tabeli wewnętrznej.

Kod będziemy pisać możliwie nowocześnie i czytelnie, opierając się na zaleceniach Clean ABAP. Nie oznacza to, że od pierwszej lekcji wszystko musi wyglądać jak kod napisany przez developera z dwudziestoletnim doświadczeniem. Najpierw trzeba zrozumieć podstawy. Dopiero później można świadomie zastępować starsze konstrukcje nowszymi.

Podsumowanie

Pierwszy krok mamy już za sobą.

Wiemy, jak utworzyć program wykonywalny w transakcji SE38, zapisać go jako obiekt lokalny, sprawdzić składnię, aktywować i uruchomić. Dowiedzieliśmy się również, do czego służą instrukcje REPORT i WRITE.

Nie jest to jeszcze wiedza, z którą pójdziemy poprawiać standard SAP, ale każdy musi od czegoś zacząć. Najważniejsze, że zamiast wyłącznie czytać o ABAP, napisaliśmy kod i zobaczyliśmy rezultat jego działania.

W następnej części zajmiemy się zmiennymi i podstawowymi typami danych. Sprawdzimy, jak przechowywać tekst oraz liczby, jak przypisywać im wartości i jak wyświetlać je w programie.

Zobaczymy również pierwszy błąd wynikający z próby przypisania niewłaściwej wartości do zmiennej. Oczywiście wyłącznie w celach edukacyjnych. W normalnej pracy błędy pojawiają się przecież zupełnie same 😉

Źródła i materiały dodatkowe

Chcesz być informowany o nowych wpisach?

Ja nie spamuje! Przeczytaj zasady polityki prywatności tego bloga.

0 0 głosy
Article Rating
Subskrybuj
Powiadom o
guest
0 komentarzy
Najstarsze
Najnowsze Najwięcej głosów
0
Chętnie poznam Twoje przemyślenia, skomentuj.x