Была поставлена задача - проводить мероприятия в системе при помощи HR_MAINTAIN_MASTERDATA. Мероприятия работали корректно. После проведения все инфо-типы записывались. Однако, при проведении увольнения инфо-типы 0000 и 0001 не сохранялись. Ошибки при этом никакой не возникало, на первый взгляд все отрабатывало штатно. Пробовал менять параметр LUW_MODE, сбрасывал буфер перед вызовом ИТ, запускал в отдельном потоке и прочее. Результата это никакого не дало.
Нашел два выхода из этой проблемы:
1.) По какой-то причине внутри ФМ HR_MAINTAIN_MASTERDATA в обязательном порядке устанавливается параметр PSPAR-PBPFL = 'X'. Он то и влияет на сохранение этих ИТ. Если его выставить в FALSE, все отработает корректно. Но я решил не трогать его т.к. возможно, он влияет на какую-либо другую логику при сохранении ФМ. Похожая проблема на sap.com
2). Второй способ мне понравился больше. При проведении мероприятия в BADI HRPAD00INFTY, получаю значения экрана (Исходные не годятся т.к. пользователь мог что-то поменять в диалоговом режиме). И после успешной отработки ФМ HR_MAINTAIN_MASTERDATA , вызываю ФМ HR_INFOTYPE_OPERATION для 0000 и 0001 ИТ-ов.
Пример вызова ФМ HR_MAINTAIN_MASTERDATA. Для тех, кто его не использовал
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
REPORT ZHR_TEST_SF_INT. TABLES: pernr. NODES peras. DATA gv_massn TYPE massn. DATA gv_begda TYPE datum. DATA gv_endda TYPE datum. DATA lv_dialog_mode TYPE c VALUE '2'. DATA lt_pprop TYPE TABLE OF pprop. DATA: gs_return TYPE bapireturn, gs_return1 TYPE bapireturn1, gs_hr_return TYPE hrhrmm_msg. gv_begda = '20200202'. gv_endda = '99991231'. gv_massn = 'C1'. APPEND VALUE #( infty = '0000' fname = 'P0000-MASSN' fval = 'C1' ) TO lt_pprop. APPEND VALUE #( infty = '0000' fname = 'P0000-MASSG' fval = '01' ) TO lt_pprop. START-OF-SELECTION. GET peras. CALL FUNCTION 'HR_MAINTAIN_MASTERDATA'HR EXPORTING pernr = pernr-pernr massn = gv_massn ACTIO = 'INSS' * TCLAS = 'A' begda = gv_begda endda = gv_endda * OBJPS = * SEQNR = * SPRPS = * SUBTY = * WERKS = * PERSG = * PERSK = * PLANS = dialog_mode = lv_dialog_mode LUW_MODE = '0' * NO_EXISTENCE_CHECK = ' ' * NO_ENQUEUE = ' ' IMPORTING return = gs_return return1 = gs_return1 hr_return = gs_hr_return TABLES proposed_values = lt_pprop * MODIFIED_KEYS = . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. COMMIT WORK. EXIT. END-OF-SELECTION. |
В таблицу proposed_values можно передавать значения для полей инфо-типов.
UPD.
При проведении мероприятий HR_MAINTAIN_MASTERDATA игнорирует операцию LIS9. Например, при увольнении лимиты 2006 не ограничиваются. За это отвечает флаг ASKEY. Если его почистить, то ФМ будет работать как в pa40.
А 1 пункт предполагается реализовывать через enhancement? Внутри этого фма нашёл всего 3 точки, 2 в начале и 1 в самом конце. Получается, скопировать весь код и вставить в начало, зачистить поле pspar и выход через exit? И ещё заметил проблему, при проведении мероприятий через этот фм при сохранении инфотипов в badi in_update структура pspar приходит с пустыми полями кроме поля tclas = A…
Да, энхансментом оборачивал, очень некрасиво получалось, но как один из вариантов работало.
Спасибо за статью! Тоже сделал через enhancement и очистил эти 2 поля в структуре pspar. Мероприятие увольнения работает аналогично pa40. До этого пробовал сделать через batch input, но для batch input не работает динамика из t588z. Еще пытался через вызов формы rp_infotype, мероприятие проводилось, но нет возможности заполнять экраны инфотипов нужными значениями, пришлось бы тогда в badi before_output для каждого инфотипа прописывать заполнение полей, это плохой вариант, если много инфотипов в инфонаборе. Получается, доработка данного фма оптимальный вариант, ну или делать модификацию и отключать проверку на динамические мероприятия для пакетного ввода
Коллеги, прошу помочь. При проведении мероприятия Отпуск с использованием ‘HR_MAINTAIN_MASTERDATA’ не считаются использованные лимиты в ИТ2006, чистка переменных PSPAR-PBPFL и PSPAR-ASKEY не помогает. Как исправить ?