Текущее время: Вт, июн 24 2025, 11:48

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Блокировка инфотипа в BADI реализации PA30
СообщениеДобавлено: Пт, фев 05 2016, 09:14 
Ассистент
Ассистент

Зарегистрирован:
Пн, апр 15 2013, 14:49
Сообщения: 48
Откуда: Санкт-Петербург
Пол: Мужской
Добрый день господа!
(повторяю здесь данный вопрос так как в разделе HR мне на него к сожалению не ответили)
Прошу Вас помочь разобраться в проблеме, которую никак не могу решить.
Задача стоит такая:
Привет вводе отсутствия необходимо ввести автоматом еще и замещения на дату за день до начала отсутствия и на следующий день после вводимого отсутствия.
И если в дни ввода замещений уже были какие то замещения - их нужно блокировать
вот с блокировкой как рази проблема! Как ее сделать?

Вызов функции FUNCTION 'HR_INFOTYPE_OPERATION' в BADI невозможен
Я пользуюсь функциями insert_infotyp, modify_infotyp ... из программы SAPFP50P
Которые нашел в реализациях BADI расширения HRPAD00INFTY.

Но там есть удаление , добавление изменение а как сделать блокировку я не могу найти!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Блокировка инфотипа в BADI реализации PA30  Тема решена
СообщениеДобавлено: Пт, фев 12 2016, 09:39 
Начинающий
Начинающий

Зарегистрирован:
Ср, апр 15 2009, 18:02
Сообщения: 5
Добрый день!

Приведу тут код, может поможет. Тоже делали модификацию ИТ в HRPAD00INFTY.

Code:
METHOD if_ex_hrpad00infty~in_update.

  " При сохранении ИТ 0015 -- для премирования:
  " делать присвоение затрат, если работник переводился между БЕ
*
  DATA: lt_p0759 TYPE TABLE OF p0759,
        ls_p0759 TYPE p0759,
        lt_p0001 TYPE TABLE OF p0001,
        ls_p0001 TYPE p0001,
        ls_saved_pref TYPE pref
        .

  DATA: lv_bukrs TYPE bukrs,
        lv_bukrs1 TYPE bukrs,
        lv_kokrs TYPE kokrs,
        lv_kostl TYPE kostl,
        ls_pskey TYPE pskey.
  DATA: mit_count(3)   TYPE p.
  DATA: ls_pref  TYPE pref,
        lv_pdsnr TYPE pdsnr-pdsnr,
        lv_opera TYPE sy-msgty.
  DATA: retcode  TYPE nrreturn,
        range    TYPE nrnr VALUE '01',
        object   TYPE nrobj   VALUE 'PD_SEQ_NR',
        quantity TYPE nrquan  VALUE 1.
*

  DATA: ls_prelp      TYPE prelp,
        ls_p0015      TYPE p0015.
  TYPES: BEGIN OF lts_preftab  .
          INCLUDE TYPE pref AS pref.
  TYPES:   opera(1).
  TYPES: END OF lts_preftab,
                ltt_preftab TYPE STANDARD TABLE OF lts_preftab.
  FIELD-SYMBOLS : <ls_0015>   LIKE LINE OF new_image.
  FIELD-SYMBOLS : <ls_pref> TYPE pref,
                  <ls_pref_line> TYPE lts_preftab,
                  <lt_preftab> TYPE ltt_preftab.
  DATA lv_change.

  LOOP AT new_image ASSIGNING <ls_0015> WHERE infty = '0015' AND ( opera = 'I' OR opera = 'U').

  ENDLOOP.
  CHECK sy-subrc = 0.

  MOVE-CORRESPONDING <ls_0015> TO ls_prelp.
  CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
    EXPORTING
      prelp = ls_prelp
    IMPORTING
      pnnnn = ls_p0015.

  CHECK ls_p0015-zzcre IS NOT INITIAL. " Только для премирования

  CALL FUNCTION 'HR_READ_INFOTYPE'
    EXPORTING
      pernr           = ls_p0015-pernr
      infty           = '0759'
    TABLES
      infty_tab       = lt_p0759
    EXCEPTIONS
      infty_not_found = 1
      OTHERS          = 2.

  SORT lt_p0759 BY seqnr.

  CALL FUNCTION 'HR_READ_INFOTYPE'
    EXPORTING
      pernr           = ls_p0015-pernr
      infty           = '0001'
      begda           = ls_p0015-begda
      endda           = ls_p0015-begda
    TABLES
      infty_tab       = lt_p0001
    EXCEPTIONS
      infty_not_found = 1
      OTHERS          = 2.
  LOOP AT lt_p0001 INTO ls_p0001. ENDLOOP.
  lv_bukrs1 = ls_p0001-bukrs. " БЕ на дату выплаты

  LOOP AT lt_p0759 INTO ls_p0759 WHERE citem = ls_p0015-zzcre AND seqnr = ls_p0015-zzseqnr. ENDLOOP.
  CHECK sy-subrc = 0.

  CLEAR lt_p0001.
  CALL FUNCTION 'HR_READ_INFOTYPE'
    EXPORTING
      pernr           = ls_p0015-pernr
      infty           = '0001'
      begda           = ls_p0759-zzend
      endda           = ls_p0759-zzend
    TABLES
      infty_tab       = lt_p0001
    EXCEPTIONS
      infty_not_found = 1
      OTHERS          = 2.
  LOOP AT lt_p0001 INTO ls_p0001. ENDLOOP.
  lv_bukrs = ls_p0001-bukrs. " БЕ на дату из 759
  lv_kokrs = ls_p0001-kokrs.
  lv_kostl = ls_p0001-kostl.

  CLEAR lv_change.
    ASSIGN ('(SAPFP50P)PREF')      TO <ls_pref>.
    ASSIGN ('(SAPFP50P)PREFTAB[]') TO <lt_preftab>.
    IF <ls_pref> IS ASSIGNED AND <lt_preftab> IS ASSIGNED.
      ls_saved_pref = <ls_pref>.
    ENDIF.

  PERFORM open_infotyp IN PROGRAM sapfp50p
    USING ls_p0015-pernr ls_p0015-infty
          ls_p0015-begda ls_p0015-endda
          mit_count.

  IF lv_bukrs NE lv_bukrs1. " Если БЕ на конец периода != БЕ на текущую запись ИТ 15
    IF ls_p0015-refex NE 'X'.
      ls_p0015-refex = 'X'.
      lv_change = 'X'.
    ENDIF.

    IF <ls_pref> IS ASSIGNED AND <lt_preftab> IS ASSIGNED.
      LOOP AT   <lt_preftab> ASSIGNING <ls_pref_line>
                             WHERE pernr = ls_p0015-pernr
                                AND       infty = ls_p0015-infty
                                AND       subty = ls_p0015-subty
                                AND       objps = ls_p0015-objps
                                AND       sprps = ls_p0015-sprps
                                AND       endda = ls_p0015-endda
                                AND       begda = ls_p0015-begda
                                AND       seqnr = ls_p0015-seqnr
                                AND       opera <> 'D'.
      ENDLOOP.
      IF sy-subrc <> 0
        OR ( sy-subrc =  0 AND ( <ls_pref_line>-bukrs NE lv_bukrs ) OR
                               ( <ls_pref_line>-kokrs NE lv_kokrs ) OR
                               ( <ls_pref_line>-kostl NE lv_kostl ) ).

        MOVE-CORRESPONDING ls_p0015 TO <ls_pref>.
        <ls_pref>-bukrs = lv_bukrs.
        <ls_pref>-kokrs = lv_kokrs.
        <ls_pref>-kostl = lv_kostl.
        lv_change = 'X'.
       PERFORM update_pref IN PROGRAM sapfp50p
                                 USING ls_p0015.

      ENDIF.
    ENDIF.
  ELSE.
    IF ls_p0015-refex EQ 'X'.
      ls_p0015-refex = ' '.
      lv_change = 'X'.
      PERFORM delete_pref IN PROGRAM sapfp50p
                             USING ls_p0015.[/b]
    ENDIF.
  ENDIF.

  IF lv_change = 'X'.
    PERFORM update_infotyp IN PROGRAM sapfp50p
                            USING ls_p0015.[/b]
    IF <ls_pref> IS ASSIGNED AND <lt_preftab> IS ASSIGNED.
      <ls_pref> = ls_saved_pref.
    ENDIF.

    PERFORM put_infotyp_buffer IN PROGRAM sapfp50p.
  ENDIF.

ENDMETHOD.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB