Текущее время: Пт, июл 18 2025, 17:17

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Динамическое мероприятие - создание новой записи в ИТ2001 subty 0097
СообщениеДобавлено: Вт, ноя 24 2015, 14:58 
Специалист
Специалист

Зарегистрирован:
Чт, июн 07 2007, 13:27
Сообщения: 136
Пол: Мужской
Здравствуйте !
При попытке создания в рамках динамического мероприятия новой записи в ИТ2001 subty 0097
при использовании FORM из пула модулей не создается эта запись ИТ2001 при использовании для создания этой записи
функциональных модулей :
BAPI_PTMGRATTABS_MNGCREATION
HR_INFOTYPE_OPERATION
Коды возврата при использовании этих ФМ - успешные.
Как решить эту проблему ?
C уважением
А. Дорин


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое мероприятие - создание новой записи в ИТ2001 subty 0097
СообщениеДобавлено: Вт, ноя 24 2015, 16:43 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, ноя 07 2006, 10:12
Сообщения: 1194
Откуда: Москва
Пол: Мужской
Можете прислать код процедуры?
1. Динамика не срабатывает если действия над инфотипами выполняются в фоновом режиме ни при каких раскладах, тоже самое касается и бади - все должно работать только в диалоговом режиме.
2. Если подпрограмма вызывается не верно, и табельный заблокирован транзакцией PA30 то ФМ никогда не вернет ошибку, он просто в логи все запишет и то если они будут.

_________________
С уважением, Р.В. Величко


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое мероприятие - создание новой записи в ИТ2001 subty 0097
СообщениеДобавлено: Вт, ноя 24 2015, 16:56 
Специалист
Специалист

Зарегистрирован:
Чт, июн 07 2007, 13:27
Сообщения: 136
Пол: Мужской
Code:
*&---------------------------------------------------------------------*
*& ПулМодул          ZHRPRG_PROLONGATIONLEAVE4                         *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

PROGRAM ZHRPRG_PROLONGATIONLEAVE4.

DATA:       pernr_local LIKE PSPAR-PERNR,
            p_beg LIKE PSPAR-BEGDA,
            p_end LIKE PSPAR-ENDDA.

INFOTYPES:  2001.
TABLES: PSPAR.
DATA: sum_day TYPE I,"КОЛЛИЧЕСТВО ДОБАВЛЯЕМЫХ ДНЕЙ
      var_sum_day TYPE I,
      new_begda LIKE SY-DATUM,
      new_endda LIKE SY-DATUM,
      zbapihrabsatt_in  LIKE BAPIHRABSATT_IN,
      ZBAPIHRITBASE     LIKE BAPIHRITBASE,
      zbapiret2         LIKE BAPIRET2 OCCURS 10 WITH HEADER LINE.

DATA:
  wa_thol like thol,
  currda  like p0007-begda.

DATA: FIELD_XX(14).
FIELD-SYMBOLS <FIELD_ID>.

FORM T2001_98.

pernr_local = PSPAR-PERNR.
CALL FUNCTION 'HR_READ_INFOTYPE'
    EXPORTING
          PERNR      = pernr_local
          INFTY      = '2001'
    TABLES
          INFTY_TAB  = P2001.

EXPORT P2001 TO MEMORY ID 'P2001'.

ENDFORM.

" пролонгация отпуска
FORM PROL.
  pernr_local  = PSPAR-PERNR.
  p_beg   = PSPAR-BEGDA.
  p_end   = PSPAR-ENDDA.

  data  p_beg1 LIKE PSPAR-BEGDA.  "DORIN  15.06.2012
  data  p_end1 LIKE PSPAR-ENDDA.  "DORIN  15.06.2012
  p_beg1 = PSPAR-BEGDA.           "DORIN  15.06.2012 начало больничн 2001 0025
  p_end1 = PSPAR-ENDDA.           "DORIN  15.06.2012 конец  больничн 2011 0025


  CLEAR: sum_day, P2001.

  IMPORT P2001 FROM MEMORY ID 'P2001_FR_FOR_0025'.                                  "include ZXPADU01

  LOOP AT P2001 WHERE  SUBTY = '0098' OR SUBTY = '0097' .

    CHECK  P2001-BEGDA <= p_end  AND  P2001-ENDDA >= p_beg . " есть ли смысл разделять

    CLEAR var_sum_day.

     " БОЛЬНИЧНЫЙ ВХОДИТ В ОТПУСК
     IF p_beg >= P2001-BEGDA AND p_end <= P2001-ENDDA.

        PERFORM CALC_VACATION_DAYS using var_sum_day p_beg p_end.
        sum_day = sum_day + var_sum_day.

     ENDIF.

     " БОЛЬНИЧНЫЙ ПОГЛОЩАЕТ ОТПУСК
     IF p_beg < P2001-BEGDA AND p_end > P2001-ENDDA.

        PERFORM CALC_VACATION_DAYS using var_sum_day P2001-BEGDA P2001-ENDDA.
        sum_day = sum_day + var_sum_day.

     ENDIF.

     " БОЛЬНИЧНЫЙ ЗДВИНУТ ВЛЕВО
     IF p_beg < P2001-BEGDA AND p_end >= P2001-BEGDA AND p_end <= P2001-ENDDA.

        PERFORM CALC_VACATION_DAYS using var_sum_day P2001-BEGDA p_end.
        sum_day = sum_day + var_sum_day.

     ENDIF.

     " БОЛНИЧНЫЙ ЗДВИНУТ ВПРАВО
     IF p_beg >= P2001-BEGDA AND p_end > P2001-ENDDA AND p_beg <= P2001-ENDDA.

        PERFORM CALC_VACATION_DAYS using var_sum_day p_beg P2001-ENDDA.
        sum_day = sum_day + var_sum_day.

     ENDIF.

  ENDLOOP.

"=============================================================================================DORIN 01.08.2012
"data s(20) type c.
"s = LINES( p2001 ). data s_msg(200) type c.
"CONCATENATE '***ZHRPRG_PROLONGATIONLEAVE4 ХРАНИМАЯ ТАБЛ  p2001 ' s INTO s_msg.

if LINES( p2001 ) = 0.                                    "здесь проверяем только -- "БОЛЬНИЧНЫЙ CДВИНУТ ВЛЕВО
   data zp2001 type p2001 OCCURS 0 WITH HEADER LINE.
   refresh zp2001.
   IMPORT  zp2001 FROM MEMORY ID 'P2001_DORIN_FOR_0025'.  "include  MPTIME00 логика экрана 2000 mp200000

   loop at zp2001 WHERE  SUBTY = '0098' OR SUBTY = '0097'.
        "БОЛЬНИЧНЫЙ CДВИНУТ ВЛЕВО
        IF p_beg < ZP2001-BEGDA AND p_end >= ZP2001-BEGDA AND p_end <= ZP2001-ENDDA.
           PERFORM CALC_VACATION_DAYS using var_sum_day ZP2001-BEGDA p_end.
           sum_day = sum_day + var_sum_day.
           P2001[] = ZP2001[].
           exit.                             "выход из цикла LOOP
        ENDIF.
   endloop.

endif.
"===========================================================================================================
  CLEAR: new_begda, new_endda.

  " отсутствие пролонгирунтся после последнего отсутствия
  LOOP AT P2001 WHERE  SUBTY = '0098' OR SUBTY = '0097' .
    IF P2001-ENDDA > new_begda.
       new_begda = P2001-ENDDA.
    ENDIF.
  ENDLOOP.

  IF p_end > new_begda.
     new_begda = p_end.
  ENDIF.

  new_begda = new_begda + 1.

  currda = new_begda.

  data currda_old  like p0007-begda.
  currda_old = new_begda.

  var_sum_day = sum_day.

  while var_sum_day > 0.

    select single * from thol
      into wa_thol
      where sort = 'UA ' and monat = currda+4(2) and motag = currda+6(2).


    if sy-subrc <> 0.
      var_sum_day = var_sum_day - 1.
    endif.

    currda = currda + 1.

  endwhile.

  new_endda = currda - 1.


">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Религ праздники ПАСХА ТРОИЦА  DORIN  30.03.2012
  var_sum_day = sum_day.

  while var_sum_day > 0.

        data rez_out  type  I.  rez_out = 0.
        CALL FUNCTION 'ZHR_HOLY_REL'
        EXPORTING
        DATE_IN       = currda_old
        IMPORTING
        REZ_OUT       = rez_out.
        if rez_out = 1.
           new_endda = new_endda + 1.
        endif.
        currda_old  = currda_old  + 1.
        var_sum_day = var_sum_day - 1.

  endwhile.
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
"ЕСЛИ в 2001 0025 есть праздники  уменьшаем длит отпкска 2001 0097     15.06.2012
if sum_day > 0.
   while P_BEG1 =< P_END1.
         rez_out = 0.
         CALL FUNCTION 'ZHR_HOLY_REL'           "пасха троица
         EXPORTING
         DATE_IN       = P_BEG1
         IMPORTING
         REZ_OUT       = rez_out.
         if rez_out = 1.                        "пасха троица
            new_endda = new_endda - 1.
            P_BEG1 = P_BEG1  + 1.
            CONTINUE.
         endif.

         P_BEG1 = P_BEG1  + 1.

    endwhile.
endif.
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  IF sum_day > 0.  " нужно делать разделение

    DATA: zlockindicator  LIKE BAPIHRITBASE-LOCKINDICATOR.
    DATA: zbapiret1       LIKE BAPIRETURN1 .

    " если это для обновления типа V1, то блокировать уже не надо. Это наследуется из программы диалога
**    CALL FUNCTION 'BAPI_EMPLOYEET_ENQUEUE'
**        exporting
**          number         = pernr_local
**          validitybegin  = '18000101'
**       importing
**         return          = zbapiret1   .

    zbapihrabsatt_in-from_date  = new_begda.
    zbapihrabsatt_in-to_date    = new_endda.


    CALL FUNCTION 'HR_PSBUFFER_INITIALIZE' .   " ничего кроме 0097

    call function 'BAPI_PTMGRATTABS_MNGCREATION'
      exporting
        employeenumber  = pernr_local
        abs_att_type    = '0097'
        hrabsatt_in     = zbapihrabsatt_in
        lockindicator   = ' '
        simulate        = space
      importing
        lockindicator   = zlockindicator
      tables
        return          = zbapiret2.

    " произвести диагностику ошибок
    DATA  err .
    CLEAR err .
    LOOP AT zbapiret2.
      IF zbapiret2-TYPE = 'E'.
         MESSAGE E001(ZHR2001) WITH zbapiret2-MESSAGE .
         err = 'X'.

      ELSEIF zbapiret2-TYPE = 'S'.
         MESSAGE S001(ZHR2001) WITH zbapiret2-MESSAGE .

      ELSEIF zbapiret2-TYPE = 'W'.
         MESSAGE W001(ZHR2001) WITH zbapiret2-MESSAGE .

      ELSEIF zbapiret2-TYPE = 'I'.
      ENDIF.
    ENDLOOP.

    IF err is INITIAL .
       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
    ELSE.
       CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.
    " sprps = space - only unlocked records (Индикатор блокирования для основной записи сотрудника)

**    CALL FUNCTION 'BAPI_EMPLOYEET_DEQUEUE'
**      exporting
**        number        =  pernr_local
**        validitybegin =  '18000101' .



  ENDIF. " IF sum_day > 0.

  FREE MEMORY ID 'P2001'.
  FREE MEMORY ID 'ZP2001'.                        "01.08.2012  DORIN

ENDFORM.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое мероприятие - создание новой записи в ИТ2001 subty 0097
СообщениеДобавлено: Вт, ноя 24 2015, 20:07 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, ноя 07 2006, 10:12
Сообщения: 1194
Откуда: Москва
Пол: Мужской
Серьезно :-( и как это вызывается? Из динамики? Тогда это работать и не должно, табельные блокированы, сбрось PS буфера внутри динамики приведет к не верным результатам и все в таком духе + ко всему коммиты внутри динамики это всегда зло. Есть же стандартный способо делать свою собственную динамику абапом, я приводил примеры на просторах форума, хотя подозреваю что проект реализован и переделывать вот это все еще тот цирк будет ;-(

_________________
С уважением, Р.В. Величко


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое мероприятие - создание новой записи в ИТ2001 subty 0097
СообщениеДобавлено: Вт, ноя 24 2015, 20:41 
Специалист
Специалист

Зарегистрирован:
Чт, июн 07 2007, 13:27
Сообщения: 136
Пол: Мужской
"Есть же стандартный способ делать свою собственную динамику абапом" --
пожалуйста, подcкажите, как ?
ps. 1. таб номер блокирован, можно деблокировать и, по необходимости, блокировать, это уже опробовано - проблема, наверное, в особых свойствах адресного пространства, для выполнения
FORM, указанной в настроечной табл для динамических мероприятий.
2. я не нашел ни одной сапосвской реализации в FORM для вставки новой записи в таблицу бд, отличной от insert.
3. замена фм на тривиальный insert в приведеной FORM работает.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое мероприятие - создание новой записи в ИТ2001 subty 0097
СообщениеДобавлено: Вт, ноя 24 2015, 21:01 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, ноя 07 2006, 10:12
Сообщения: 1194
Откуда: Москва
Пол: Мужской
http://sapboard.ru/forum/viewtopic.php?f=11&t=72289 Брат Мигель пишет что это изврат, но это стандарт SAP

Как пример создание 0041 инфотипа, но думаю тут по аналогии сто% сделаете. Этот способ считаю самым правильным, потому что система сама на себя берет работу с блокировками, с буферами, с журналированием изменений инфотипов, с ale change pointers.

Code:
Creating Dynamic Actions in runtime:

With the help of tables and dynmeas initial_values​​, and declaring the mppdat00 include:

>>BEGIN CODE
PROGRAM Z_MEDIDA.
INCLUDE MPPDAT00.

*/ Generación de Infotipo 0041 dinámicamente
FORM GENERATE_0041.
     DATA: X0016 LIKE P0016 OCCURS 0 WITH HEADER LINE.
     DATA: AUX_FECHA TYPE D.

*/ Aux_Fecha nos da la fecha para buscar el IT0016
CLEAR AUX_FECHA.
AUX_FECHA = PSPAR-BEGDA - 1.
IF PSPAR-MASSN = 'E2' OR PSPAR-MASSN = 'E7'.

CALL FUNCTION 'HR_READ_INFOTYPE'
     EXPORTING
           PERNR = PSPAR-PERNR
           INFTY = '0016'
           BEGDA = AUX_FECHA
          ENDDA = AUX_FECHA
TABLES
           INFTY_TAB = X0016
EXCEPTIONS
           INFTY_NOT_FOUND = 1
           OTHERS = 2.

READ TABLE X0016 INDEX 1.

*/ Tabla initial_values
CLEAR INITIAL_VALUES. REFRESH INITIAL_VALUES.
INITIAL_VALUES-FIELD_NAME = 'P0041-DAR01'.
INITIAL_VALUES-FIELD_VALUE = 'Z1'.
ADD 1 TO INITIAL_VALUES-SEQNR. APPEND INITIAL_VALUES. CLEAR INITIAL_VALUES.
INITIAL_VALUES-FIELD_NAME = 'P0041-DAT01'.
INITIAL_VALUES-FIELD_VALUE = X0016-EINDT.
ADD 1 TO INITIAL_VALUES-SEQNR.
APPEND INITIAL_VALUES. CLEAR INITIAL_VALUES.

*/ Tabla Dynmeas
DYNMEAS-ACTIO = 'INS'.
DYNMEAS-INFTY = '0041'.
DYNMEAS-BEGDA = AUX_FECHA.
DYNMEAS-ENDDA = AUX_FECHA.

* dynmeas-supdg = 'X'. "Poner 'D' si queremos suprimir diálogo
ADD 1 TO DYNMEAS-SEQNR.
APPEND DYNMEAS. CLEAR DYNMEAS.


ENDIF.

_________________
С уважением, Р.В. Величко


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое мероприятие - создание новой записи в ИТ2001 subty 0097
СообщениеДобавлено: Пт, ноя 27 2015, 09:43 
Специалист
Специалист

Зарегистрирован:
Чт, июн 07 2007, 13:27
Сообщения: 136
Пол: Мужской
Привожу то, что работает нормально :
Содержимое табл T588Z :
Code:
------------------------------------------------------------------------------------------
|  MANDT|INFTY|SUBTY|FNAME|OPERA|SEQNO|KENNZ|VINFO                       |
------------------------------------------------------------------------------------------
|  700  |2001 |0025 |     |06   |  100|F    |PROL(ZHRPRG_PROLONGATIONLEAVE4)             
|  700  |2001 |0025 |     |06   |  105|P    |RP50D-FLAG1='X'                                                     
|  700  |2001 |0025 |     |06   |  110|I    |INS,2001,0097,,(RP50D-DATE1),(RP50D-DATE2)/D

И код :
Code:
*&---------------------------------------------------------------------*
*& ПулМодул          ZHRPRG_PROLONGATIONLEAVE4                         *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*

PROGRAM ZHRPRG_PROLONGATIONLEAVE4.
*
*INCLUDE ZBDCRECXX.

DATA:       pernr_local LIKE PSPAR-PERNR,
            p_beg LIKE PSPAR-BEGDA,
            p_end LIKE PSPAR-ENDDA.

INFOTYPES:  2001.
TABLES: PSPAR.
DATA: sum_day TYPE I,"КОЛЛИЧЕСТВО ДОБАВЛЯЕМЫХ ДНЕЙ
      var_sum_day TYPE I,
      new_begda LIKE SY-DATUM,
      new_endda LIKE SY-DATUM,
      zbapihrabsatt_in  LIKE BAPIHRABSATT_IN,
      ZBAPIHRITBASE     LIKE BAPIHRITBASE,
      zbapiret2         LIKE BAPIRET2 OCCURS 10 WITH HEADER LINE.

DATA:
  wa_thol like thol,
  currda  like p0007-begda.

DATA: FIELD_XX(14).
FIELD-SYMBOLS <FIELD_ID>.

"===========================================================================================================
FORM T2001_98.
pernr_local = PSPAR-PERNR.
CALL FUNCTION 'HR_READ_INFOTYPE'
    EXPORTING
          PERNR      = pernr_local
          INFTY      = '2001'
    TABLES
          INFTY_TAB  = P2001.

EXPORT P2001 TO MEMORY ID 'P2001'.
ENDFORM.

" пролонгация отпуска
FORM PROL.
  pernr_local  = PSPAR-PERNR.
  p_beg   = PSPAR-BEGDA.
  p_end   = PSPAR-ENDDA.

  data  p_beg1 LIKE PSPAR-BEGDA.  "DORIN  15.06.2012
  data  p_end1 LIKE PSPAR-ENDDA.  "DORIN  15.06.2012
  p_beg1 = PSPAR-BEGDA.           "DORIN  15.06.2012 начало больничн 2001 0025
  p_end1 = PSPAR-ENDDA.           "DORIN  15.06.2012 конец  больничн 2011 0025


  CLEAR: sum_day, P2001.

  IMPORT P2001 FROM MEMORY ID 'P2001_FR_FOR_0025'.                                  "include ZXPADU01

  LOOP AT P2001 WHERE  SUBTY = '0098' OR SUBTY = '0097' .

    CHECK  P2001-BEGDA <= p_end  AND  P2001-ENDDA >= p_beg . " есть ли смысл разделять

    CLEAR var_sum_day.

     " БОЛЬНИЧНЫЙ ВХОДИТ В ОТПУСК
     IF p_beg >= P2001-BEGDA AND p_end <= P2001-ENDDA.

        PERFORM CALC_VACATION_DAYS using var_sum_day p_beg p_end.
        sum_day = sum_day + var_sum_day.

     ENDIF.

     " БОЛЬНИЧНЫЙ ПОГЛОЩАЕТ ОТПУСК
     IF p_beg < P2001-BEGDA AND p_end > P2001-ENDDA.

        PERFORM CALC_VACATION_DAYS using var_sum_day P2001-BEGDA P2001-ENDDA.
        sum_day = sum_day + var_sum_day.

     ENDIF.

     " БОЛЬНИЧНЫЙ ЗДВИНУТ ВЛЕВО
     IF p_beg < P2001-BEGDA AND p_end >= P2001-BEGDA AND p_end <= P2001-ENDDA.

        PERFORM CALC_VACATION_DAYS using var_sum_day P2001-BEGDA p_end.
        sum_day = sum_day + var_sum_day.

     ENDIF.

     " БОЛНИЧНЫЙ ЗДВИНУТ ВПРАВО
     IF p_beg >= P2001-BEGDA AND p_end > P2001-ENDDA AND p_beg <= P2001-ENDDA.

        PERFORM CALC_VACATION_DAYS using var_sum_day p_beg P2001-ENDDA.
        sum_day = sum_day + var_sum_day.

     ENDIF.

  ENDLOOP.

"=============================================================================================DORIN 01.08.2012
"data s(20) type c.
"s = LINES( p2001 ). data s_msg(200) type c.
"CONCATENATE '***ZHRPRG_PROLONGATIONLEAVE4 ХРАНИМАЯ ТАБЛ  p2001 ' s INTO s_msg.

if LINES( p2001 ) = 0.                                    "здесь проверяем только -- "БОЛЬНИЧНЫЙ CДВИНУТ ВЛЕВО
   data zp2001 type p2001 OCCURS 0 WITH HEADER LINE.
   refresh zp2001.
   IMPORT  zp2001 FROM MEMORY ID 'P2001_DORIN_FOR_0025'.  "include  MPTIME00 логика экрана 2000 mp200000

   loop at zp2001 WHERE  SUBTY = '0098' OR SUBTY = '0097'.
        "БОЛЬНИЧНЫЙ CДВИНУТ ВЛЕВО
        IF p_beg < ZP2001-BEGDA AND p_end >= ZP2001-BEGDA AND p_end <= ZP2001-ENDDA.
           PERFORM CALC_VACATION_DAYS using var_sum_day ZP2001-BEGDA p_end.
           sum_day = sum_day + var_sum_day.
           P2001[] = ZP2001[].
           exit.                             "выход из цикла LOOP
        ENDIF.
   endloop.

endif.
"===========================================================================================================
  CLEAR: new_begda, new_endda.

  " отсутствие пролонгирунтся после последнего отсутствия
  LOOP AT P2001 WHERE  SUBTY = '0098' OR SUBTY = '0097' .
    IF P2001-ENDDA > new_begda.
       new_begda = P2001-ENDDA.
    ENDIF.
  ENDLOOP.

  IF p_end > new_begda.
     new_begda = p_end.
  ENDIF.

  new_begda = new_begda + 1.

  currda = new_begda.

  data currda_old  like p0007-begda.
  currda_old = new_begda.

  var_sum_day = sum_day.

  while var_sum_day > 0.

    select single * from thol
      into wa_thol
      where sort = 'UA ' and monat = currda+4(2) and motag = currda+6(2).


    if sy-subrc <> 0.
      var_sum_day = var_sum_day - 1.
    endif.

    currda = currda + 1.

  endwhile.

  new_endda = currda - 1.


">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Религ праздники ПАСХА ТРОИЦА  DORIN  30.03.2012
  var_sum_day = sum_day.

  while var_sum_day > 0.

        data rez_out  type  I.  rez_out = 0.
        CALL FUNCTION 'ZHR_HOLY_REL'
        EXPORTING
        DATE_IN       = currda_old
        IMPORTING
        REZ_OUT       = rez_out.
        if rez_out = 1.
           new_endda = new_endda + 1.
        endif.
        currda_old  = currda_old  + 1.
        var_sum_day = var_sum_day - 1.

  endwhile.
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
"ЕСЛИ в 2001 0025 есть праздники  уменьшаем длит отпкска 2001 0097     15.06.2012
if sum_day > 0.
   while P_BEG1 =< P_END1.
         rez_out = 0.
         CALL FUNCTION 'ZHR_HOLY_REL'           "пасха троица
         EXPORTING
         DATE_IN       = P_BEG1
         IMPORTING
         REZ_OUT       = rez_out.
         if rez_out = 1.                        "пасха троица
            new_endda = new_endda - 1.
            P_BEG1 = P_BEG1  + 1.
            CONTINUE.
         endif.
         P_BEG1 = P_BEG1  + 1.
    endwhile.
endif.
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  IF sum_day > 0.  " нужно делать разделение

  "для строки в табл T588Z
  tables rp50d.               "СТРУКТУРА   HR: поля возврата для динамических мероприятий
  rp50d-field1 = 'INS'.
  rp50d-date1 = new_begda.
  rp50d-date2 = new_endda.
  rp50d-flag1 = 'X'.

  ENDIF. " IF sum_day > 0.

  IF sum_day = 0.  " НЕ нужно делать разделение
     "для строки в табл T588Z
     rp50d-field1 = 'INS'.
     rp50d-date1 = new_begda.
     rp50d-date2 = new_endda.
     rp50d-flag1 = ''.
  ENDIF.

  FREE MEMORY ID 'P2001'.
  FREE MEMORY ID 'ZP2001'.                        "01.08.2012  DORIN

ENDFORM.

FORM CALC_VACATION_DAYS using sum_vacation_day begdat enddat.
data: currdat like p0007-begda.
currdat = begdat.
sum_vacation_day = 0.
while currdat <= enddat.
  select single * from thol into wa_thol
  where sort = 'UA ' and monat = currdat+4(2) and motag = currdat+6(2).

  if sy-subrc <> 0.
    sum_vacation_day = sum_vacation_day + 1.
  endif.

  currdat = currdat + 1.

endwhile.

ENDFORM.                    " CALC_VACATION_DAYS


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическое мероприятие - создание новой записи в ИТ2001 subty 0097
СообщениеДобавлено: Пт, ноя 27 2015, 10:01 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, ноя 07 2006, 10:12
Сообщения: 1194
Откуда: Москва
Пол: Мужской
Так это другая тема, создание инфотипа выполняется стандартными средставами и процедура просто заполняет переменные в структуре RP50D.

_________________
С уважением, Р.В. Величко


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

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


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

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


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

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