Niebezpieczna deklaracja TABLES

Deklaracja TABLES niegdyś powszechnie używana w archaicznych wersja systemu SAP ERP może obecnie przysporzyć problemów.

W archaicznych wersja systemu SAP ERP (wtedy jeszcze SAP R/3), czyli tak do 3.x – 4.5 wykonanie zapytania SELECT z tablicy wymagało zadeklarowania tej tablicy komendą TABLES. To wymaganie obowiązywało nawet jeśli wyniki zapytania były przekazywane do struktury lub tablicy wewnętrznej poprzez komendę INTO lub INTO TABLE. Myślę, że stąd właśnie wziął się nawyk nadużywania deklaracji TABLES w nowszych wersja systemu, gdzie to wymaganie już nie obowiązuje.

Dlaczego uważam, że TABLES jest nadużywane? Mianowicie dlatego, że ta deklaracja ma tę nieprzyjemną właściwość, iż tworzy strukturę globalną w programie niezależnie od miejsca jest użycia, nawet jeśli TABLES zostanie wpisane w ciele procedury czy funkcji. Jest to zasadnicza różnica między TABLES a DATA. DATA użyte w ciele procedury lub funkcji deklaruje dane lokalne.

W konsekwencji zadeklarowanie poprzez TABLES tej samej tablicy w dwóch różnych procedurach lub funkcjach, które są zawarte w tym samym programie głównym spowoduje błąd syntaktyczny ABAP. Ten efekt jest szczególnie widoczny rozszerzeniach customer-exit rozwijanych przez kilku programistów. Wtedy zwykle poszczególne elementy funkcjonalne rozszerzenia są zamykane w oddzielnych procedurach, a TABLES w tych procedurach mogą ze sobą kolidować.

Ponadto elegancja programowania wymaga, aby zmiennych globalnych nie deklarować z wnętrza procedur czy funkcji. Zawsze te zmienne powinny być deklarowane w programie głównym lub odpowiednim includ’zie.

Reasumując uważam, że TABLES powinno się używać tylko i wyłącznie do deklarowania pól ekranów dialogowych. W innych przypadkach deklaracja TABLES nie jest do niczego potrzebna i powinna być unikana.

Komentarze o “Niebezpieczna deklaracja TABLES

    1. Dziękuję za tę uwagę. Istotnie domyślnie WordPress ma włączoną obsługę tagów HTML w komentarzach. Znaki < i > oraz treść między nimi były traktowane jako tagi HTML. Przez to znikały. Obecnie HTML w komentarzach jest wyłączony, a treść komentarza jest publikowana literalnie, dokładnie tak jak została wpisana.

    1. Znać praktyka z długoletnim stażem ;))
      Tak jak piszesz było w istocie we wcześniejszych wersjach SAP. Obecnie wystarczy, że po FOR dasz zmienną globalną. TABLES jak napisałem w artykule również deklaruje zmienną globalną.

      Przykład z dokumentacji SAP dla SELECT-OPTIONS
      DATA spfli_wa TYPE spfli.
      SELECT-OPTIONS s_carrid FOR spfli_wa-carrid.

Zostaw komentarz