REPORT ZTREXPA700 . *======================================================================* * Titre : Modifier statut IDoc * * Programme : ZTREXPA700 * * Description : Programme permettant de modifier le statut * * des IDocs afin de pouvoir les archiver * *======================================================================* * Date Création : 29.08.2003 * Auteur : Abdel SIDHOM * *======================================================================* TABLES : EDIDC, EDIDS, TBD05, USR02. DATA : BEGIN OF WT_IDOCS OCCURS 0, DOCNUM LIKE EDIDC-DOCNUM, MESTYP LIKE EDIDC-MESTYP, DIRECT LIKE EDIDC-DIRECT, STATUS LIKE EDIDC-STATUS, NEW_STATUS LIKE EDIDC-STATUS, SUBRC LIKE SY-SUBRC, END OF WT_IDOCS. DATA WT_IDOC_STATUS LIKE BDIDOCSTAT OCCURS 0 WITH HEADER LINE. *DATA WK_CLASS LIKE USR02-CLASS VALUE 'CCO-COND-EXP'. DATA WK_CLASS LIKE USR02-CLASS VALUE 'CCO'. "ASI xxxx ************************************************************************ * ECRAN DE SELECTION * ************************************************************************ SELECT-OPTIONS : S_DOCNUM FOR EDIDC-DOCNUM, S_CREDAT FOR EDIDC-CREDAT, S_MESTYP FOR EDIDC-MESTYP, S_STATUS FOR EDIDC-STATUS, S_SNDPRN FOR TBD05-SNDSYSTEM, S_RCVPRN FOR TBD05-SNDSYSTEM, S_DIRECT FOR EDIDC-DIRECT. SELECTION-SCREEN SKIP. PARAMETERS : P_ARCH RADIOBUTTON GROUP G1, P_ANNUL RADIOBUTTON GROUP G1. AT SELECTION-SCREEN. IF S_DOCNUM IS INITIAL AND S_MESTYP IS INITIAL. MESSAGE E398(00) WITH 'Renseigner le N° d''IDoc ou le type de message'. ENDIF. IF S_DOCNUM IS INITIAL AND S_STATUS IS INITIAL. MESSAGE E398(00) WITH 'Renseigner le N° d''IDoc ou le statut'. ENDIF. ************************************************************************ * CORPS DU PROGRAMME * ************************************************************************ START-OF-SELECTION. PERFORM : AUTHORITY_CHECK, IDOC_LIST, CHANGE_STATUS, REPORT. END-OF-SELECTION. ************************************************************************ * FORMS * *********************************************************************** *&---------------------------------------------------------------------* *& Form IDOC_LIST *&---------------------------------------------------------------------* FORM IDOC_LIST. SELECT DOCNUM MESTYP DIRECT STATUS FROM EDIDC INTO TABLE WT_IDOCS WHERE DOCNUM IN S_DOCNUM AND CREDAT IN S_CREDAT AND MESTYP IN S_MESTYP AND STATUS IN S_STATUS AND SNDPRN IN S_SNDPRN AND RCVPRN IN S_RCVPRN AND DIRECT IN S_DIRECT. IF P_ARCH = 'X'. DELETE WT_IDOCS WHERE STATUS = 38 OR STATUS = 73. ELSEIF P_ANNUL = 'X'. DELETE WT_IDOCS WHERE STATUS NE 38 AND STATUS NE 73. ENDIF. IF WT_IDOCS[] IS INITIAL. MESSAGE I398(00) WITH 'Liste vide'. ENDIF. SORT WT_IDOCS BY DOCNUM. ENDFORM. " IDOC_LIST *&---------------------------------------------------------------------* *& Form CHANGE_STATUS *&---------------------------------------------------------------------* FORM CHANGE_STATUS. LOOP AT WT_IDOCS. IF P_ARCH = 'X'. "Archivage IF WT_IDOCS-DIRECT = 1. WT_IDOCS-NEW_STATUS = 38. ELSEIF WT_IDOCS-DIRECT = 2. WT_IDOCS-NEW_STATUS = 73. ENDIF. ELSE. "Annulation d'archivage * Récupération de l'ancien statut de l'idoc avant l'archivage PERFORM GET_OLD_STATUS. ENDIF. REFRESH WT_IDOC_STATUS. CLEAR WT_IDOC_STATUS. WT_IDOC_STATUS-DOCNUM = WT_IDOCS-DOCNUM. WT_IDOC_STATUS-STATUS = WT_IDOCS-NEW_STATUS. WT_IDOC_STATUS-MSGTY = 'I'. WT_IDOC_STATUS-MSGID = '00'. WT_IDOC_STATUS-MSGNO = '398'. IF P_ARCH = 'X'. "Archivage WT_IDOC_STATUS-MSGV1 = 'Statut modifié par'. ELSE. "Annulation d'archivage WT_IDOC_STATUS-MSGV1 = 'Statut restauré par'. ENDIF. WT_IDOC_STATUS-MSGV2 = SY-UNAME. WT_IDOC_STATUS-MSGV3 = 'le'. WT_IDOC_STATUS-MSGV4 = SY-DATUM. APPEND WT_IDOC_STATUS. CALL FUNCTION 'IDOC_STATUS_WRITE_TO_DATABASE' EXPORTING IDOC_NUMBER = WT_IDOCS-DOCNUM * IDOC_OPENED_FLAG = ' ' * NO_DEQUEUE_FLAG = 'X' * IMPORTING * IDOC_CONTROL = TABLES IDOC_STATUS = WT_IDOC_STATUS EXCEPTIONS IDOC_FOREIGN_LOCK = 1 IDOC_NOT_FOUND = 2 IDOC_STATUS_RECORDS_EMPTY = 3 IDOC_STATUS_INVALID = 4 DB_ERROR = 5 OTHERS = 6 . IF SY-SUBRC <> 0. WT_IDOCS-SUBRC = SY-SUBRC. ENDIF. MODIFY WT_IDOCS. ENDLOOP. ENDFORM. " CHANGE_STATUS *&---------------------------------------------------------------------* *& Form REPORT *&---------------------------------------------------------------------* FORM REPORT. DATA: WW_X TYPE I, WW_Y TYPE I. * Macro pour l'affichage des tableaux * --> &1 Champ à éditer * --> &2 Longueur d'édition DEFINE M_WRITE_LINE. WRITE '|' NO-GAP. WW_X = SY-COLNO. WRITE &1 NO-GAP. WW_X = WW_X + &2. POSITION WW_X. END-OF-DEFINITION. * Macro pour passer à une nouvelle line DEFINE M_NEW_LINE. WRITE '|'. WW_X = SY-COLNO - 2. WRITE :/ SY-ULINE(WW_X). WW_Y = SY-LINNO + 1. SKIP TO LINE WW_Y. END-OF-DEFINITION. *-------------------------------------- * Affichage de l'entête SKIP. FORMAT COLOR 1. DESCRIBE TABLE WT_IDOCS LINES SY-TFILL. WRITE :/ SY-TFILL, 'IDoc(s)'. WRITE :/ SY-ULINE(83). "L=Somme(l)+n+1 WW_Y = SY-LINNO + 1. SKIP TO LINE WW_Y. M_WRITE_LINE : 'Idoc' 16, 'Type de message' 30, 'Sens' 4, 'Statut' 6, 'Nv statut' 10, 'Cd retour' 10. M_NEW_LINE. * Affichage des lignes FORMAT RESET. LOOP AT WT_IDOCS. M_WRITE_LINE: WT_IDOCS-DOCNUM 16, WT_IDOCS-MESTYP 30, WT_IDOCS-DIRECT 4, WT_IDOCS-STATUS 6, WT_IDOCS-NEW_STATUS 10, WT_IDOCS-SUBRC 10. M_NEW_LINE. ENDLOOP. ENDFORM. " REPORT *&---------------------------------------------------------------------* *& Form GET_OLD_STATUS *&---------------------------------------------------------------------* FORM GET_OLD_STATUS. DATA W_COUNTR LIKE EDIDS-COUNTR. CLEAR W_COUNTR. SELECT MAX( COUNTR ) INTO W_COUNTR FROM EDIDS WHERE DOCNUM = WT_IDOCS-DOCNUM. W_COUNTR = W_COUNTR - 1. SELECT STATUS INTO WT_IDOCS-NEW_STATUS UP TO 1 ROWS FROM EDIDS WHERE DOCNUM = WT_IDOCS-DOCNUM AND COUNTR = W_COUNTR. ENDSELECT. ENDFORM. " GET_OLD_STATUS *&---------------------------------------------------------------------* *& Form AUTHORITY_CHECK *&---------------------------------------------------------------------* FORM AUTHORITY_CHECK. ENDFORM. " AUTHORITY_CHECK