Текущее время: Ср, июн 25 2025, 06:02

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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