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

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


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

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


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

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