inikolax

Аватар пользователя inikolax
Имя: 
Николай
Фамилия: 
Черкашин
Телефон: 
+707 21 5555 2
Компания: 
ENRC BTS
Должность: 
ABAP разработчик
Gtalk: 
inikolax@gmail.com
Skype: 
nikola_x_
О себе: 
ABAP разработчик

Материалы пользователя

Пример программы для чтения результатов расчета заработной платы с помощью GET PAYROLL (ЛБД PNP)

В системе есть стандартная программа пример в которой для чтения результатов расчета зарплаты используется операция GET PAYROLL

Название программы:EXAMPLE_PNP_GET_PAYROLL

Ниже исходный код программы:

Расшифровка кодов инфотипов HR (HCM)

C По Модуль
0 999 PA (Менеджмент персонала)
1000 1999 OM (Организационный менеджмент)
2000 2999

ФМ для получения полного имени по табельному номеру - HR_RU_GET_PERNR_NAME

Для получения полного имени по табельному номеру используется ФМ HR_RU_GET_PERNR_NAME

  1. CALL FUNCTION 'HR_RU_GET_PERNR_NAME'
  2. EXPORTING
  3. I_PERNR =
  4. I_BEGDA =
  5. I_ENDDA =
  6. I_LANGU = SY-LANGU
  7. I_MOLGA = 'KZ'
  8. I_NAMEL =
  9. I_PPINFTV =
  10. I0002 = ' '
  11. I0021 = ' '
  12. IMPORTING
  13. E_NACHN =
  14. E_VORNA =
  15. E_MIDNM =
  16. E_CNAME =
  17. E_INITI =
  18. E_I0002 =
  19. EXCEPTIONS
  20. INFTY_0002_NOT_FOUND = 1
  21. OTHERS = 2
  22. .
  23. IF SY-SUBRC <> 0.
  24.  

Расстояние Левенштейна — определяем «похожесть» строк

Интересный и очень полезный алгоритм «дистанция Левенштейна» (Levenshtein distance), так же известная как редакционное расстояние или дистанция редактирования.

Эта «дистанция» — это минимальное количество правок одной строки (под правками подразумеваются три возможные операции: стирание символа, замена символа и вставка символа), чтобы превратить ее во вторую.

Вот ниже пример его реализации на abap

  1. REPORT zlevenshtein.
  2. *----------------------------------------------------------------------*
  3. * CLASS lcl_levenshtein DEFINITION
  4. *----------------------------------------------------------------------*
  5. *
  6. *----------------------------------------------------------------------*
  7. CLASS lcl_levenshtein DEFINITION.
  8. PUBLIC SECTION.
  9. distance IMPORTING i_s TYPE csequence
  10. i_t TYPE csequence
  11. RETURNING value(r) TYPE i.
  12. ENDCLASS. "lcl_c DEFINITION
  13. *----------------------------------------------------------------------*
  14. * CLASS lcl_levenshtein IMPLEMENTATION
  15. *----------------------------------------------------------------------*
  16. *
  17. *----------------------------------------------------------------------*
  18. CLASS lcl_levenshtein IMPLEMENTATION.
  19. METHOD distance.
  20. DEFINE m_get.
  21. l_m_index = ( ( l_l_t * ( l_m_i + ( &2 ) ) ) + l_m_j + ( &1 ) ) + 1 .
  22. read table l_d into r index l_m_index.
  23. add &3 to r.
  24. insert r into table l_v.
  25. DATA: l_d TYPE STANDARD TABLE OF i,
  26. l_v TYPE SORTED TABLE OF i WITH UNIQUE KEY table_line,
  27. l_cost TYPE i,
  28. l_m_i TYPE i,
  29. l_m_j TYPE i,
  30. l_m_index TYPE i,
  31. l_l_s TYPE i,
  32. l_l_t TYPE i.
  33.  
  34. l_l_s = STRLEN( i_s ).
  35. l_l_t = STRLEN( i_t ).
  36.  
  37. DO l_l_s TIMES.
  38. l_m_i = sy-index - 1.
  39.  
  40. DO l_l_t TIMES. "#EC CI_NESTED
  41. l_m_j = sy-index - 1.
  42.  
  43. IF l_m_j = 0.
  44. r = l_m_i.
  45. ELSEIF l_m_i = 0.
  46. r = l_m_j.
  47. IF i_s+l_m_i(1) = i_t+l_m_j(1).
  48. l_cost = 0.
  49. l_cost = 1.
  50.  
  51. CLEAR l_v.
  52. m_get: -1 0 1, 0 -1 1, -1 -1 l_cost.
  53. READ TABLE l_v INTO r INDEX 1.
  54. APPEND r TO l_d.
  55.  
  56. ENDMETHOD. "distance
  57. ENDCLASS. "lcl_levenshtein IMPLEMENTATION
  58.  
  59. DATA: d TYPE i.
  60.  
  61. d = lcl_levenshtein=>distance( i_s = 'sitting' i_t = 'kitten' ).
  62. WRITE: / d.

Так же есть статья в которой описано как реализовать этот алгоритм в других языках программирования: Algorithm Implementation/Strings/Levenshtein distance

Еще одна ссылка по этому алгоритму :Расстояние Левенштейна — определяем «похожесть» строк

Программа для поиска по исходникам

Если у вас появилась необходимость найти какой либо кусок кода в системе,для этого можно использовать стандартную программу RPR_ABAP_SOURCE_SCAN

code_search.jpg

Удаление дубликатов во внутренней таблице

В такой строке кода нет ничего удивительного:

  1. delete adjacent duplicates from lt_table.

Здесь всё просто и понятно. Дубликаты удаляются, уникальные записи остаются.

Однако если попытаться с помощью добавки comparing удалять дубликаты только по нужным полям, то есть свои тонкости:

  1. delete adjacent duplicates from lt_bseg comparing lifnr zuonr.

Тонкость первая: Дубликаты могут и не совсем удалиться. Удаление будет происходить только в сортированной последовательности. Таким образом результат будет слабопредсказуемым. То есть из последовательности А-А-Б-Б-А-А будет создана последовательность А-Б-А.

Тонкость вторая: Дубликаты удаляются после первого совпадения. Таким образом во внутренней таблице будет оставлено именно первое совпадение.

Следовательно вместо вышеуказанного примера кода всегда следует писать примерно так:

  1. sort lt_bseg by lifnr zuonr zfbdt.
  2. delete adjacent duplicates from lt_bseg comparing lifnr zuonr.

Больше полей в операторе SORT даёт большую предсказуемость и адекватность результата.

Краткий список основных транзакций по работе с ABAP в SAP

LSMW    Legacy System Migration Workbench
OSS1    Logon to SAPNet
OY19    Общесист. ср-во просмотра настройки
S001
S002    Меню/Администрирование
SA38   ABAP-отчеты
SCAT  Computer Aided Testtool
SCU0   Общесист. ср-во просмотра настройки
SE01    Организатор переносов (расш. ракурс)
SE03    Инструменты организатора переносов
SE09    Организатор переносов
SE10    Организатор переносов
SE11    ABAP-словарь: ведение
SE12    ABAP-словарь: просмотр
SE13    Параметры ЗУ для ведения таблиц
SE14    Утилиты для таблиц словаря
SE15    Информационная система ABAP-словаря
SE16    Браузер данных
SE16N    Общий просмотр таблиц
SE17    Общий просмотр таблиц
SE24    Построитель классов
SE30    ABAP Objects: динамический анализ
SE32    ABAP Ведение текстовых элементов
SE35    Диалоговые модули АВАР/4
SE36    Построитель логической базы данных
SE37    ABAP-функциональные модули
SE38    ABAP-редактор
SE39    Полиэкранный редактор (новый)
SE41    Редактор меню
SE43    ВедениеМенюОбластей
SE51    Редактор экранов
SE54    Генерация - ракурс таблицы
SE61    Документация SAP
SE62    Отраслевые утилиты
SE63    Перевод: первый экран
SE64    Терминология
SE71    SAPscript-формуляр
SE72    SAPscript-стили
SE73    SAPscript: ведение шрифтов
SE74    SAPscript: преобразование формата
SE75    SAPscript: параметры
SE76    SAPscript: перевод формуляров
SE77    SAPscript: перевод стилей
SE80    Навигатор по объектам
SE81    Иерархия приложений
SE82    Иерархия приложений
SE83    Библиотека REUSE
SE84    Информационная система репозитария
SE85    Информационная система ABAP-словаря
SE91    Ведение сообщений
SE92    НовВедение сообщений СистЖурн с 46A
SE93    Ведение кодов транзакций
SEARCH_SAP_MENU    Поиск в SAP-меню
SHD0    Варианты транзакций и экранов
SM04    Список пользователей
SM12    Просмотр и удаление блокировок
SM13    Администрирование записей обновления
SM21    Онлайн-анализ системного журнала
SM30    Вызов ведения ракурсов
SM31    Вызов ведения ракурсов, аналог SM30
SM32    Ведение таблицы ИД парам. TAB
SM35    Мониторинг пакетного ввода
SM37    Обзор выборки заданий
SM50    Обзор рабочих процессов
SM51    Список SAP-систем
SM62    История событий и фоновые события
SMEN    Диспетчер сеансов: ПросмДереваМеню
SNRO    Объекты диапазона номеров
SPRO    Настройка - обработка проектов
SQ00    SAP Query: запуск queries
SQ01    SAP Query: ведение queries
SQ02    SAP Query: ведение инфо-набора
SQ03    SAP Query: ВедениеГруппПользоват
SQ07    SAP Query: сравнение языков
ST05    Трассировка SQL
ST22    Aнализ ABAP-дампа
SU53    Анализ проверки полномочий
USMM    Начальный экран мониторинга клиента
WE02    Просмотреть IDOC
WE07    IDOC-статистика
WEDI    Базис EDI

SALV Table - PF-STATUS

На этапе создания экземпляра объекта (фабричным методом) мы определяем, как мы хотим использовать объект ALV таблицы, будет ли это полноэкранный режим, либо мы хотим поместить объект в подготовленный заранее контейнер. Данный выбор влияет на способ установки GUI статуса для ALV таблицы.

В полноэкранном режиме для установки GUI статуса необходимо использовать метод SET_SCREEN_STATUS, параметр REPORT отвечает за то из какой программы будет взят GUI статус, PFSTATUS – имя GUI статуса, SET_FUNCTIONS – определяет какие стандартные функции будут использованы в программе. Может принимать значения: C_FUNCTIONS_DEFAULT – сортировки, фильтры, выбор формата. C_FUNCTIONS_ALL – все функции ALV, C_FUNCTIONS_NONE – по умолчанию, только пользовательские функции. Константы определены в классе: CL_SALV_MODEL_BASE

Страницы