Транзакция ZCOPY_AFFWPRO
При удалении удаляется все что старше количества месяцев в параметре.
При восстановлении восстанавливаются записи за последние количество месяцев в параметре.
Для выполнения необходим объект полномочий ZPP_ADMIN операция ’02’.
Запуск возможен только в одном экземпляре.
ABAP Code:
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | *&---------------------------------------------------------------------* *& Report ZCOPY_AFFWPRO *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZCOPY_AFFWPRO. data: it_affwpro type table of affwpro, it_affwpro_copy type table of zaffwpro_copy, data type datum, aufnr type aufnr, ls_affwpro type affwpro, mes type char03, ls_affwpro_copy type zaffwpro_copy. field-symbols: <fs_affwpro> type affwpro, <fs_affwpro_copy> type zaffwpro_copy. parameters: p_mes type char02 default '13', p_vernut as checkbox default ''. *-->Блокировка повторного запуска программы data: repid type indx_srtfd, msg(255) type c. repid = sy-repid. call function 'ENQUEUE_ESINDX' exporting relid = 'Z1' srtfd = repid srtf2 = 0 exceptions foreign_lock = 1 system_failure = 2. *break zhmailik_vv. if sy-subrc ne 0. concatenate 'Программа уже запущена пользователем' sy-msgv1 into msg. message msg type 'E'. leave program. endif. *<--Блокировка повторного запуска программы authority-check object 'ZPP_ADMIN' id 'ACTVT' field '02'. if sy-subrc <> 0. message 'Ошибка авторизации' type 'E'. else. concatenate '-' p_mes into mes. if p_vernut = ''. data = sy-datum. CALL FUNCTION 'MONTH_PLUS_DETERMINE' EXPORTING months = mes olddate = data IMPORTING newdate = data. select * from affwpro into corresponding fields of table it_affwpro where updda < data. if sy-subrc = 0. loop at it_affwpro assigning <fs_affwpro>. move-corresponding <fs_affwpro> to ls_affwpro_copy. ls_affwpro_copy-user_create = sy-uname. ls_affwpro_copy-data_create = sy-datum. ls_affwpro_copy-time_create = sy-uzeit. insert zaffwpro_copy from ls_affwpro_copy. * if sy-subrc = 0. commit work and wait. clear aufnr. select single aufnr into aufnr from zaffwpro_copy where aufnr = ls_affwpro_copy-aufnr and weblnr = ls_affwpro_copy-weblnr and weblpos = ls_affwpro_copy-weblpos and updda = ls_affwpro_copy-updda and updzt = ls_affwpro_copy-updzt. if sy-subrc = 0 and aufnr is not initial. write / 'Удалена запись:'. write ls_affwpro_copy-aufnr. write ls_affwpro_copy-weblnr. write ls_affwpro_copy-weblpos. delete from affwpro where aufnr = ls_affwpro_copy-aufnr and weblnr = ls_affwpro_copy-weblnr and weblpos = ls_affwpro_copy-weblpos and updda = ls_affwpro_copy-updda and updzt = ls_affwpro_copy-updzt. endif. * endif. endloop. else. write / 'Нет записей для удаления'. endif. else. do. select * from zaffwpro_copy into corresponding fields of table it_affwpro_copy up to 100000 rows where updda > data. if sy-subrc <> 0.write / 'Больше нет записей для возврата'.exit.endif. loop at it_affwpro_copy assigning <fs_affwpro_copy>. move-corresponding <fs_affwpro_copy> to ls_affwpro. insert affwpro from ls_affwpro. * if sy-subrc = 0. commit work and wait. clear aufnr. select single aufnr into aufnr from affwpro where aufnr = ls_affwpro-aufnr and weblnr = ls_affwpro-weblnr and weblpos = ls_affwpro-weblpos and updda = ls_affwpro-updda and updzt = ls_affwpro-updzt. if sy-subrc = 0 and aufnr is not initial. write / 'Восстановлена запись:'. write ls_affwpro-aufnr. write ls_affwpro-weblnr. write ls_affwpro-weblpos. delete from zaffwpro_copy where aufnr = ls_affwpro-aufnr and weblnr = ls_affwpro-weblnr and weblpos = ls_affwpro-weblpos and updda = ls_affwpro-updda and updzt = ls_affwpro-updzt. endif. * endif. endloop. enddo. endif. endif. break zhmailik_vv. *-->Разблокировка повторного запуска программы call function 'DEQUEUE_ESINDX' exporting relid = 'Z1' srtfd = repid srtf2 = 1. *<--Разблокировка повторного запуска программы |