[Из песочницы] SAP ERP / ABAP полезные ресурсы

Честно говоря, эту статью я пишу даже больше для себя — чтобы как то систематизировать информацию по внутреннему языку программирования ABAP/4 системы SAP R/3 в одном месте. Тем не менее, я буду очень рад, если кому то ещё она окажется полезной и сэкономит время. Сразу оговорюсь, что статья ориентирована на новичков, которые только начинают изучать ABAP/4 (коим, в некоторой мере, я и сам являюсь).
Меня сразу заинтересовали "/4" и "/3" в названиях продукта и языка программирования (далее ЯП) для него. Однако, всё весьма банально. Согласно википедии, буква R из R/3 является начальной буквой слова «Realtime» и означает немедленную проводку и актуализацию данных, которые в рамках интеграции немедленно доступны всем заинтересованным отделам предприятия. Цифра 3 означает, что в системе реализована архитектура клиент/сервер приложений/система управления базами данных (трёхзвенная модель), в отличие от R/2, которая работала на мейнфреймах. А название ABAP расшифровывается как Advanced Business Application Programming, а цифра «4» символизирует отношение к четвёртому поколению ЯП. Язык был создан в 1980 году для работы с системой SAP R/2, позднее унаследован в SAP R/3. С более подробной информацией все желающие могут ознакомиться непосредственно на вики.

Чуть более подробную информацию в сравнении с вики можно найти здесь. Кроме того, на этом же сайте можно найти книгу, с которой я бы рекомендовал начать изучение материала. Несмотря на то, что выпущена она 17(!) лет назад, большая часть информации в ней остаётся актуальной. Кроме того, существенный ее плюс в том, что это одна из немногих книг по сабжу, переведённая на русский язык. Конечно, тот факт, что ЯП почти не претерпел изменений за такой промежуток времени и при этом остаётся актуальным по сей день вызвал немалое удивление (во всяком случае у меня), но, по крайней мере, чувствуется его «фундаментальность». Тем не менее, существует перечень функциональных модулей (ФМ) в системе, которые считаются устаревшими. Ознакомится можно здесь.

Собственно, моя карьера сложилась так, что внезапно пришлось переквалифицироваться из программиста C# в «абаперы». Во многом это случилось из-за кризиса (с моей прежней должности меня сократили), но, как ни странно, оказалась востребованной разработка для SAP. Для провинциального города, где я живу, большинство заводов и 1С считают роскошью, а тут SAP… Впрочем, довольно лирики.

Вообще, обычно рекомендуют начинать изучение с курсов ВС400, ВС401, ВС402 и т.д. У меня есть переведённые на русский язык 400 и 402. Желающим могу скинуть на почту. Переведённый 401 курс нашёл в электронном виде здесь: Часть 1_______Часть 2
Если же устраивает и английский (на самом деле так даже лучше — всё же переводчики частенько играют роль «сломанного телефона»), то здесь есть большой перечень разных курсов; все можно скачать по прямым ссылкам.

Также к полезным для начинающих я бы отнёс этот ресурс. Здесь автор последовательно шаг за шагом обучает работе в системе (по его словам это необходимый минимум для Junior ABAP programmer-а). Последняя статья там была написана 7 июня 2015 года и как раз про alv. Поначалу очень полезно, но, конечно, хотелось бы, чтобы сайт не «забросили». Кстати, некоторые, указанные мной ссылки есть и в похожей теме, а также базовая информация по синтаксису языка.

Небольшие понятные примеры можно найти здесь (правда, их не так уж много, но зато аккуратно оформлено): abapmaster.com.

Хочу сразу заметить, что методом вывода информации на экран с помощью ключевого слова WRITE сейчас стараются не пользоваться — его практически полностью вытесняют т.н. ALV-отчёты.
Официальная справка по ALV.

Кстати, здесь можно увидеть перечень всех ключевых слов, используемых в ЯП АВАР/4. А здесь всё то же самое, только с краткими примерами, но не так удобно для просмотра. Вообще, по alv есть достаточно много информации (я начинал отсюда) и большую часть времени разработчик будет иметь дело именно с этим. У пользователей всегда есть желания типа «А можно мне вот такой z-отчётик, чтобы как в ххх транзакции, только попроще и с другими таблицами?»

(Примечание: В SAP R/3 все программы, таблицы и прочее, созданное пользователями, должно начинаться с букв y или z).

Много примеров с исходниками можно взять отсюда. На этом ресурсе предлагают выучить всё за 21 день… Весьма оптимистично, но статьи и правда неплохие. Всё на английском.

Вот тут и тут блоги АВАР-разработчиков; можно найти некоторые полезные советы.
Кстати, тем, кто не хочет долго разбираться во всех этих делах есть особая волшебная ссылка. Тем, кто настроен крайне серьёзно и решительно, заходить по ней не обязательно.

Далее идут уже большие сайты — не только для новичков, но и для матёрых «саперов». Про ABAP в общем и про ALV в частности. Немного про BADI и WebDyn технологии написано здесь (английский). Тут тоже нашёл полезные вещи, но ресурс англоязычный.
Отсюда я очень много взял примеров (в частности, маленькие хитрости по работе с транзакциями). Отзывчивый форум. Хорошие ресурсы на русском языке.

Официальная справка по АВАР. Желающие проверить себя или подготовиться к сертификации, могут скачать приложение или ознакомиться с книгой.

Ещё в САПе очень любят давать таблицам и переменным «неговорящие» названия, но зато придумали

мнемонический стишок на английском, чтобы запомнить названия некоторых основных таблиц

Ring the bells of all SAP tables.
Remember Bank tables start with B, say «BKNF, BKPF».
Remember Customer tables start with K, say «KNA1,KONV».
Remember Material tables start with M, say «MARA, MAKT, MARC».
Remember Master data tables start with T, say «T001, T001W».
Remember Purchasing tables start with E, say «EKKO, EKPO»
Remember Sales table start with V, say «VBAK,VBAP».
Remember Vendor tables start with L, say «LFA1».
Ring the bells of all SAP tables.
Six main FI tables, six important FI tables.
They contain an I if it is an open item.
They contain an A if it is a closed item.
They contain an S if a GL account say «BSIS, BSAS».
Ring the bells of all SAP tables.
As i was remembering the table names of Billing, Delivery, Sales and Purchasing.
Each table had a K if it is a header data, say «VBAK, VBAP, LIKP, VBRK, EKKO».
Each table had a P if it is an item data, say «VBAP, LIPS, VBRP, EKPO».
Ring the bells of all SAP tables.
With a D at the end, the table is a Customer
With a K at the end, the table is a Vendor.
Finally TSTC tables danced for keeping the list of all transaction codes
Ring the bells of all SAP tables.


Кроме того, много информации есть и в самой системе:

Транзакция ABAPDOCU – ABAP документация и примеры.
Транзакция ABAPHELP — Документация по ключевому слову.
Транзакция BIBS – примеры пользовательского интерфейса для ABAP программ.
Транзакция DWDM – демо примеры с использованием Enjoy контролов.
Транзакция SE83 – библиотека REUSE примеров с ALV и прочими контролами.
Программа ADBC_DEMO – демо программа ADBC API (для подключения к внешним базам данных).
Программа BALVBT01 – демонстрация множественного использования ALV.
Программа SHOWICON – список всех иконок.
Программа SHOWCOLO – все цвета используемые во WRITE или ALV.
Программа SHOWLINE – всевозможные линии во write отчётах.
Программа SHOWSYMB – символы.
Программа RPR_ABAP_SOURCE_SCAN – поиск в исходных кодах.
Программа RSBDCOS0 – выполнение системных команд на сервере.
Программа REPTRAN – массовая выгрузка исходников.
Программа RSINCL00 – получить внешние вызовы ФМ, транзакций и проч.


Пример удобного способа последовательного выбора параметров:
  1. REPORT zre_test.
  2. PARAMETERS:
  3.   p_matnr TYPE matnr,       " Материал
  4.   p_werks TYPE werks,       " Завод
  5.   p_lgort TYPE mard-lgort.  " Склад
  6. AT SELECTION-SCREEN OUTPUT.
  7.   LOOP AT SCREEN.
  8.     IF screen-NAME = 'P_WERKS' AND p_matnr IS INITIAL.
  9.       screen-INPUT = '0'.
  10.       CLEAR p_werks.
  11.       MODIFY SCREEN.
  12.     ENDIF.
  13.     IF screen-NAME = 'P_LGORT' AND p_werks IS INITIAL.
  14.       screen-INPUT = '0'.
  15.       CLEAR p_lgort.
  16.       MODIFY SCREEN.
  17.     ENDIF.
  18.   ENDLOOP.
  19. AT SELECTION-SCREEN ON p_matnr.
  20.   SELECT SINGLE matnr INTO (p_matnr) FROM mara WHERE matnr = p_matnr.
  21.   IF sy-subrc NE 0.
  22.     p_matnr = ''.
  23.   ELSE.
  24.     LOOP AT SCREEN.
  25.       IF screen-NAME = 'P_WERKS'.
  26.         screen-INPUT = '1'.
  27.         MODIFY SCREEN.
  28.       ENDIF.
  29.     ENDLOOP.
  30.   ENDIF.
  31. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_werks.
  32.   CALL FUNCTION 'EINGABEWERTE_WERK'
  33.     EXPORTING
  34.       kzall         = ' '
  35.       kzbew_werk    = ' '
  36.       matnr         = p_matnr
  37.     IMPORTING
  38.       werks         = p_werks.
  39. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_lgort.
  40.   CALL FUNCTION 'EINGABEWERTE_LGORT'
  41.     EXPORTING
  42.       kzall         = ' '
  43.       matnr         = p_matnr
  44.       werks         = p_werks
  45.     IMPORTING
  46.       lagerort      = p_lgort
  47.       werks         = p_werks
  48.     EXCEPTIONS
  49.       ERROR_MESSAGE = 1.


Стандартные темы оформления IDE в SAP GUI не подразумевают тёмной темы, но я предпочитаю использовать именно её.

Здесь можно скачать настройки.

Ссылка на статью о том, как следует, а как не следует программировать (актуальна не только для АВАР). Ну и в продолжение темы вот несколько примеров реализации «шаблонов проектирования» на АВАР/4:


Ещё больше про шаблоны (и не только) можно узнать здесь.

Пара ссылок по функциональным модулям (ФМ), для вывода всплывающих окон в АВАР:

  1. Здесь представлено скриншотами и небольшими примерами по использованию каждого ФМ
  2. Здесь листинг комплексного примера с различными видами pop-up'ов


По ссылке больше материалов, связанных с администрированием системы (составленных автором сайта), но и по программированию тоже есть вещи.

Небольшая программка для импорта/экспорта SAP таблиц в текстовые файлы — мне пару раз пригодилось.

Пример реализации экрана выборки (selection screen) и alv-отчёта в пределах одного экрана.

В целом изложение получилось немного скомканным, но, скажу честно, я не писатель. Ещё раз замечу, практически все ссылки будут интересны исключительно новичкам(я был бы счастлив, если бы нашёл подобную статью в своё время). Те, кто хотя бы полгода уже занимается изучением сабжа, скорее всего, уже нашли весь материал самостоятельно на просторах интернета. Буду рад любым вашим исправлениям/дополнениям в комментариях. Спасибо.

P.S. Это моя первая статья на вашем ресурсе, но, надеюсь, не последняя.

© Habrahabr.ru