ABAP

Практические рекомендации по поиску user-exit-ов (пользовательских расширений) в стандартном коде

Как показывает опыт внедрения и сопровождения систем SAP ERP, почти 30-50 % всех ABAP разработок составляют расширения стандартной функциональности при помощи пользовательских расширений (user-exit).

Механизмов, позволяющих пользователю влиять на работу стандартных программ (транзакций), - несколько. В данной статье мы рассмотрим только те механизмы, с которыми приходится сталкиваться ABAP-разработчикам в целях расширения исходного кода. Настройки, персонализацию, расширение объектов ABAP-словаря и т.п. мы рассматривать не будем.

Источник:http://sapland.ru

юмор для абапера

прикольная штука: можно создавать видимость абапера 85 левела.
http://entropii.net/sap/abap_typer/

определение последней даты месяца :)

Как искал я в интернете функциональный модуль, для определения последней даты месяца, а нашел вот такую статью на ithappens:

источник: http://ithappens.ru/story/9560

Последних лет десять я занимаюсь SAP. Практически вся прикладная часть системы доступна разработчикам конечного пользователя в исходных кодах. Язык программирования ABAP/4, правда, несколько специфический. Говорят, похож на Кобол. Если сравнивать с популярными ныне языками, то у меня он более всего ассоциируется с Бейсиком.

Двойной клик ALV Grid (cl_salv_table)

Привожу пример кода который позволят отрабатывать события , а так же выводить alv grid в модульном окне.
Для примера привожу код который выводит список дебиторов и по двойному клику выводит проводки по нему в модульном окне.

db_click_alv.jpg

нормальная, красивая и правильная кнопка на селективном экране

Собственно, нормальная, красивая и правильная кнопка на селективном экране:

  1. SELECTION-SCREEN PUSHBUTTON /1(20) utab_txt USER-COMMAND UTAB.
  2.  
  3. move 'Настроечная таблица' to utab_txt.

кнопка на селективном экране

Собственно кнопка на селективном экране.

  1. BUKRS LIKE BSEG-BUKRS DEFAULT '11',
  2. DATUM LIKE sy-datum DEFAULT sy-datum." no INTERVALS no-EXTENSION.
  3.  
  4. TABLES sscrfields.
  5.  
  6. sscrfields-functxt_01 = 'Отобразить лог санкционеров выгрузки'.
  7.  
  8. at selection-screen.
  9. if sscrfields-ucomm = 'FC01'.
  10. submit ZMY_PROGRAM and RETURN.

Пакетная парковка документов

Предварительная регистрация документов через пакетный ввод запрещена, система ругается:
FP140 Временное сохранение при пакетном вводе невозможно.

Для обхода этого сообщения:

1. при записи пакетного ввода через SM35 нужно выбрать опцию "Без режима пакетного ввода"

Прямоугольное выделение текста мышкой

Если зажать клавишу alt и нажать левую кнопку мыши, то можно выделить прямоугольную область кода

sel_alt_text.jpg

Вывод ALV Grig при помощи класса cl_salv_table

Ниже привожу пример кода который позволяет выводить данные из таблицы в alv grid,для этого используется класс cl_salv_table

alv_1.jpg

Делаем поле на селективном экране не активным

Привожу пример кода который делает поле на селективном экране не активным.

  1. REPORT Z_TEST.
  2. datum like sy-datum DEFAULT sy-datum,
  3. zkunnr like kna1-kunnr.
  4.  
  5. WRITE zkunnr.
  6. AT SELECTION-SCREEN OUTPUT.
  7. LOOP AT SCREEN.
  8. IF screen-name = 'DATUM'."Указываем поле которое нужно сделать не активным
  9. screen-input = 0.
  10. MODIFY SCREEN.

Вывод даты в нужном формате

Пример кода который позволяет преобразовывать дату в нужный нам формат с использованием функционального модуля FORMAT_DATE_4_OUTPUT

  1. date(10).
  2.  
  3. CALL FUNCTION 'FORMAT_DATE_4_OUTPUT'
  4. EXPORTING
  5. datin = sy-datum
  6. format = 'DD.MM.YYYY'
  7. IMPORTING
  8. datex = date.

Парсер XML с использованием ФМ SMUM_XML_PARSE

Ниже привожу пример кода который позволяет парсить xml при помощи функционального модуля SMUM_XML_PARSE

Вывод диаграмм на abap

Ниже кусок кода который выводит диаграммы с помощью функционального модуля GRAPH_MATRIX_3D который выводит вот такую диаграмму

graph_3d.jpg

Создание REST (HTTP) клиента на ABAP

Сейчас я вас расскажу как создать REST клиент на abap, то есть сейчас мы научимся отправлять HTTP запросы на ABAP.
Для примера мы возьмем готовый REST сервис который предоставляет курс валюты на указанную дату.

загрузка файла на сервер SAP

Программа для загрузки файла на сервер SAP. аналог транзакции CG3Y, CG3Z, только с возможностью создать файл. посмотреть загруженный файл можно в транзакции AL11.

  1. PARAMETERS: p_file TYPE rlgrap-filename.
  2. PARAMETERS: sap_file(250) TYPE c.
  3.  
  4. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  5. CALL FUNCTION 'F4_FILENAME'
  6. EXPORTING
  7. field_name = 'P_FILE'
  8. IMPORTING
  9. file_name = p_file.
  10.  
  11.  
  12. TYPES: BEGIN OF txt_line,
  13. data(8192) TYPE c,
  14. END OF txt_line.
  15.  
  16. DATA: txt_table TYPE TABLE OF txt_line WITH HEADER LINE,
  17. txt_tablesize TYPE i.
  18. DATA: s_file TYPE string.
  19.  
  20. s_file = p_file.
  21.  
  22. CALL FUNCTION 'GUI_UPLOAD'
  23. EXPORTING
  24. filename = s_file
  25. filetype = 'ASC'
  26. read_by_line = 'X'
  27. IMPORTING
  28. filelength = txt_tablesize
  29. data_tab = txt_table
  30. EXCEPTIONS
  31. OTHERS = 11.
  32.  
  33. OPEN DATASET sap_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
  34. LOOP AT txt_table .
  35. TRANSFER txt_table TO sap_file.
  36. CLOSE DATASET sap_file.

Индикатор выполнения

Привожу пример кода который позволяет выводить индикатор выполнения задачи

  1.  
  2. go_progress TYPE REF TO CL_AKB_PROGRESS_INDICATOR.
  3.  
  4. co_max_times TYPE I VALUE 100000.
  5.  
  6. IF go_progress IS NOT BOUND.
  7. go_progress = CL_AKB_PROGRESS_INDICATOR=>get_instance( ).
  8.  
  9. WRITE 'TEST'.
  10.  
  11. DO co_max_times TIMES.
  12. go_progress->display(
  13. EXPORTING
  14. total = co_max_times
  15. processed = sy-INDEX
  16. MESSAGE = 'В процессе..' ).

Удаление ведущих нулей

  1. data a(9) value '000012345'.
  2. SHIFT a LEFT DELETING LEADING '0'.
  3. write:/ a.

На выходе получим : 12345

Добавление ведущих нулей

Привожу пример кода в котором используется функциональный модуль (CONVERSION_EXIT_ALPHA_INPUT) для добавления ведущих нулей

  1.  
  2. zmatnr type MATNR.
  3.  
  4. zmatnr = '123'.
  5. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
  6. EXPORTING
  7. INPUT = zmatnr
  8. IMPORTING
  9. OUTPUT = zmatnr. "На выходе получим 000000000000000123

FM для вывода диалога с несколькими опциями

Ниже код для получения вот такого результата.

Изменение длинного наименования ОЗМ

Для того чтобы поменять длинное наименование ОЗМ в транзакции mm02 нужно выбрать кладку "Основные данные 1" там нажать кнопку "Текст/ОснДанн" появится текстовое поле в которое можно ввести длинное наименование ОЗМ.

Ниже кусок кода который меняет длинное наименование ОЗМ.

Примечание: ОЗМ - Основная запись материала

Создание ассигнования средств при помощи bapi

Выкладываю кусок кода для резервирования (ассигнования средств) с использованием bapi,
Транзакция fmz1

XML парсер

Пример ABAP парсера XML файла следующего вида:

  1. <?xml version="1.0" encoding="windows-1251"?>
  2. <MSG FORMAT="SAP_FORMAT" SENDER="SYSTEM1" RECIPIENT="SAP">
  3. <INS
  4. CODE="TESTXXXXXX"
  5. FROMDATE="25.07.12"
  6. LONGNAME="TESTER 25"
  7. CUST_NAME="TESTER 25"
  8. CITY="ROME"
  9. TYPECODE="0"
  10. </MSG>

убил на него целый день, на будущее пригодится:

Загрузка Excel документа во внутреннею таблицу

Пример загрузки Excel документов во внутреннею таблицу,с использованием функционального модуля
ALSM_EXCEL_TO_INTERNAL_TABLE

Страницы

Подписка на ABAP