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

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

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

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

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

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

Вызов любой ABAP программы из внешней системы посредством RFC

Задача:
Вызывать, из удаленной системы посредством RFC на выполнение любую SAP транзакцию (ABAP отчет) и возвратить данные, которые эта программа (отчет) должна была выводить на экран пользователю в SAP GUI, в удаленную систему в виде XML.
Ниже рассмотрен полный пример решения подобной задачи. Как со стороны ABAP части, так и пример вызова ABAP отчета из внешней системы.
Решение (альтернатива для SAP WEB Services):
ABAP часть:
0) Используем класс ZCL_CLST_CMD описанный здесь: http://www.sapboard.ru/forum/viewtopic.php?f=13&t=68638&view=previous

FI планирование бюджета

KP06 - планирование бюджета по МВЗ
KPF6 - планирование бюджета по заказам
S_ALR_87012993 - стандартный отчет для просмотра действий по статье затрат

Необязательные узлы в XSLT трансформации

Если нужно воспользоваться XSLT трансформацией (как для парсинга, так и создания xml). Юзаем транзашку XSLT_TOOL.
Как обозначить опциональные элементы через сам визард - я так и не узнала, так что просто редактируем код :)

Последний день месяца

Чтобы потом самой не вспоминать.

  1. PARAMETERS: last type datum OBLIGATORY.
  2. last+6(2) = '01'.
  3. last = last + 31. "перепрыгиваем на след месяц
  4. last+6(2) = '01'.
  5. last = last - 1.
  6. write: last+6(2), '.', last+4(2), '.', last(4).

Разбиваем дату на структуру

  1. DATA: BEGIN OF now_date,
  2. year(4),
  3. month(2),
  4. day(2),
  5. END OF now_date.
  6.  
  7. now_date = SY-DATUM.
  8.  
  9. WRITE now_date-year.

Таблица в которой хранятся параметры ФМ

В таблице FUPARAREF,хранятся параметры функциональных модулей

Быстрая функция расстояния Левенштейна

Здравствуйте.

Мне удалось значительно оптимизировать свою процедуру нахождения расстояния Левенштейна.
Я добился двукратного увеличения производительности.

Далее прикладываю код оптимизированной процедуры. Пользуйтесь на здоровье.

  1. form dist using s1 type csequence s2 type csequence CHANGING res TYPE i.
  2. ntab TYPE table OF i,
  3. otab TYPE table of i,
  4. ls1 type i, ls2 type i,
  5. t1 type i, t2 type i,
  6. tt2 type i,
  7. x1 type i, x2 type i,
  8. x type i,
  9. inp type i.
  10.  
  11. ls1 = strlen( s1 ) - 1.
  12. ls2 = strlen( s2 ) - 1.
  13. do.
  14. do.
  15. if s1+t1(1) = s2+t2(1).
  16. if t1 = 0.
  17. inp = t2.
  18. elseif t2 = 0.
  19. inp = t1.
  20. read table otab into inp index t2.
  21. insert inp into table ntab.
  22. if t1 = 0.
  23. inp = t2 + 1.
  24. elseif t2 = 0.
  25. inp = t1 + 1.
  26. tt2 = t2 + 1.
  27. read table ntab into x index t2.
  28. read table otab into x1 index t2.
  29. read table otab into x2 index tt2.
  30. if x < x1.
  31. if x < X2.
  32. inp = x + 1.
  33. inp = x2 + 1.
  34. if x1 < x2.
  35. inp = x1 + 1.
  36. inp = x2 + 1.
  37. insert inp into table ntab.
  38. if t2 = ls2.
  39. t2 = 0.
  40. t2 = t2 + 1.
  41. refresh otab.
  42. otab[] = ntab[].
  43. refresh ntab.
  44. if t1 = ls1.
  45. t1 = t1 + 1.
  46. res = inp.

Правильная функция расстояния Левенштейна

Здравствуйте.

На нашем сайте недавно публиковался материал посвященный алгоритму определения похожести строк - расстоянию Левенштейна: http://abap.kz/blog/74/user/inikolax . Автор материала inikolax

Я обнаружил ошибку в предоставленном по ссылке алгоритме, неверно определяется расстояние, в ситуациях с различающимся первым знаком двух сравниваемых строк.

Чтобы исправить ошибку я переписал функцию, заодно оптимизировал выполнение с помощью хэшированной таблицы.

Мне удалось добиться прироста производительности в 6%. Что сэкономило час времени для массовой обработки.
Я использовал для удобства составной ключ хэшированной таблицы, думаю, что если переписать алгоритм так, чтобы для ключа использовалось одно поле, можно добиться ещё большего прироста.

Далее прикладываю исходный код процедуры, вы можете его оптимизировать ещё больше, и опубликовать на нашем сайте.

Спасибо за внимание.

  1. form dist using s1 type csequence s2 type csequence CHANGING res TYPE i.
  2. BEGIN OF rec,
  3. i1 type i,
  4. i2 type i,
  5. d type i,
  6. end of rec.
  7. ztab type HASHED TABLE OF rec WITH UNIQUE key i1 i2,
  8. rtab type rec,
  9. mtab type rec,
  10. mtab1 type rec,
  11. mtab2 type rec,
  12. ls1 type i, ls2 type i, t1 type i, t2 type i, tt1 type i, tt2 type i.
  13.  
  14. ls1 = strlen( s1 ).
  15. ls2 = strlen( s2 ).
  16. t1 = 1.
  17. t2 = 1.
  18. do.
  19. do.
  20. tt1 = t1 - 1.
  21. tt2 = t2 - 1.
  22. rtab-i1 = t1.
  23. rtab-i2 = t2.
  24. if s1+tt1(1) = s2+tt2(1).
  25. if tt1 = 0.
  26. rtab-d = tt2.
  27. elseif tt2 = 0.
  28. rtab-d = tt1.
  29. read table ztab WITH TABLE KEY i1 = tt1 i2 = tt2 into mtab.
  30. rtab-d = mtab-d.
  31. insert rtab into table ztab.
  32. if tt1 = 0.
  33. rtab-d = t2.
  34. elseif tt2 = 0.
  35. rtab-d = t1.
  36. read table ztab WITH TABLE KEY i1 = tt1 i2 = tt2 into mtab.
  37. read table ztab WITH TABLE KEY i1 = tt1 i2 = t2 into mtab1.
  38. read table ztab WITH TABLE KEY i1 = t1 i2 = tt2 into mtab2.
  39. if mtab-d < mtab1-d.
  40. if mtab-d < mtab2-d.
  41. rtab-d = mtab-d + 1.
  42. rtab-d = mtab2-d + 1.
  43. if mtab1-d < mtab2-d.
  44. rtab-d = mtab1-d + 1.
  45. rtab-d = mtab2-d + 1.
  46. insert rtab into table ztab.
  47. if t2 = ls2.
  48. t2 = 1.
  49. t2 = t2 + 1.
  50. if t1 = ls1.
  51. t1 = t1 + 1.
  52. res = rtab-d.

Страницы