二维码

alv实现采购申请关闭与打开

Twilight发表于 2014-02-04 19:17Twilight 最后回复于 2014-02-04 19:17 [复制链接] 6108 0

在业务中存在采购申请因某些原因需要关闭的情况,但用户打开采购订单进行删除时比较麻烦,如何进行操作?可将采购申请进行列表显示,让用户进行选择关闭,显示处理结果。

选择屏幕
purchasing_requisition_selection.jpg
自定义delpr和undpr两个按钮实现采购申请的关闭与打开
display_purchasing.jpg
消息提示
MESSAGE_CHANGE_SUCCESS.jpg

采购申请查看:me53n  用来判断某个采购申请是否打开 关闭

主程序代码:
  1. TYPE-POOLS:SLIS.
  2. TABLES:EBAN.
  3. DATA: BEGIN OF IT_LOG OCCURS 0,
  4.           BANFN LIKE EBAN-BANFN,
  5.           TYPE  LIKE BAPIRETURN-TYPE,
  6.           MESSAGE LIKE BAPIRETURN-MESSAGE,
  7.        END OF IT_LOG.
  8. DATA: BEGIN OF T_DATA OCCURS 0,
  9.        BANFN LIKE EBAN-BANFN,
  10.        BNFPO LIKE EBAN-BNFPO,
  11.        BSART LIKE EBAN-BSART,
  12.        LOEKZ LIKE EBAN-LOEKZ,"Deletion Indicator in Purchasing Document
  13.        ERDAT LIKE EBAN-ERDAT,
  14.        EKGRP LIKE EBAN-EKGRP,
  15.        WERKS LIKE EBAN-WERKS,
  16.        RESWK LIKE EBAN-RESWK,
  17.        MATNR LIKE EBAN-MATNR,
  18.        TEZ01 LIKE EBAN-TXZ01,
  19.        MENGE LIKE EBAN-MENGE,
  20.        MEINS LIKE EBAN-MEINS,
  21.        SFLAG TYPE CHECKBOX,
  22.        END OF T_DATA.


  23. DATA:IT_DATA LIKE STANDARD TABLE OF T_DATA,
  24.      WA_DATA LIKE T_DATA.
  25. *“非常重要:这里lt_data必须定义为 like table of 上面的t_data。
  26. *可能有疑问了,上面的occur 0不就是定义了一个内表了吗,
  27. *为什么这里还需要是table of t_data才是内表呢?
  28. *这是因为,occurs <n>声明的内表,如果用在定义上,
  29. *它是相当于一个structure的。

  30. SELECTION-SCREEN BEGIN OF BLOCK BLK_001 WITH FRAME TITLE TEXT-001.
  31. SELECT-OPTIONS:S_BSART FOR EBAN-BSART,
  32.                S_EKGRP FOR EBAN-EKGRP,
  33.                S_ERNAM FOR EBAN-ERNAM,
  34.                S_ERDAT FOR EBAN-ERDAT,
  35.                S_WERKS FOR EBAN-WERKS,
  36.                S_RESWK FOR EBAN-RESWK,
  37.                S_BANFN FOR EBAN-BANFN,
  38.                S_MATNR FOR EBAN-MATNR.
  39. PARAMETERS:P_OLDEL TYPE FLAG.
  40. SELECTION-SCREEN END OF BLOCK BLK_001.

  41. INITIALIZATION.
  42.   S_BSART-LOW = 'NB'.
  43.   APPEND S_BSART.

  44. START-OF-SELECTION.
  45.   PERFORM GET_DATA.

  46. END-OF-SELECTION.
  47.   PERFORM DISPALY_DATA.
  48. *&---------------------------------------------------------------------*
  49. *&      Form  GET_DATA
  50. *&---------------------------------------------------------------------*
  51. *       text
  52. *----------------------------------------------------------------------*
  53. *  -->  p1        text
  54. *  <--  p2        text
  55. *----------------------------------------------------------------------*
  56. FORM GET_DATA .
  57.   DATA:LV_WHERE TYPE STRING.
  58.   FIELD-SYMBOLS:<FS_DATA> LIKE LINE OF IT_DATA.
  59.   REFRESH: IT_DATA.
  60.   IF P_OLDEL = 'X'.
  61.     LV_WHERE = 'EBAN~LOEKZ = ''X'''.
  62.   ENDIF.

  63.   SELECT EBAN~BANFN
  64.          EBAN~BNFPO
  65.          EBAN~BSART
  66.          EBAN~LOEKZ
  67.          EBAN~ERDAT
  68.          EBAN~EKGRP
  69.          EBAN~WERKS
  70.          EBAN~RESWK
  71.          EBAN~MATNR
  72.          EBAN~TXZ01
  73.          EBAN~MENGE
  74.          EBAN~MEINS
  75.     INTO CORRESPONDING FIELDS OF TABLE IT_DATA
  76.     FROM EBAN
  77.     WHERE  EBAN~BANFN IN S_BANFN AND
  78.            EBAN~BSART IN S_BSART AND
  79.            EBAN~ERDAT IN S_ERDAT AND
  80.            EBAN~EKGRP IN S_EKGRP AND
  81.            EBAN~ERNAM IN S_ERNAM AND
  82.            EBAN~WERKS IN S_WERKS AND
  83.            EBAN~RESWK IN S_RESWK AND
  84.            EBAN~MATNR IN S_MATNR AND
  85.            (LV_WHERE).
  86. ENDFORM.                    " GET_DATA
  87. *&---------------------------------------------------------------------*
  88. *&      Form  DISPALY_DATA
  89. *&---------------------------------------------------------------------*
  90. *       text
  91. *----------------------------------------------------------------------*
  92. *  -->  p1        text
  93. *  <--  p2        text
  94. *----------------------------------------------------------------------*
  95. FORM DISPALY_DATA .
  96.   DATA:LS_LAYOUT TYPE SLIS_LAYOUT_ALV,
  97.        IT_FCAT TYPE SLIS_T_FIELDCAT_ALV.
  98.   FIELD-SYMBOLS: <SF_FACT> LIKE IT_FCAT.

  99.   LS_LAYOUT-ZEBRA = 'X'.
  100.   LS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  101.   LS_LAYOUT-BOX_FIELDNAME = 'SFLAG'. " fieldname for checkbox

  102.   CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  103.    EXPORTING
  104.      I_PROGRAM_NAME               = SY-REPID
  105.      I_INTERNAL_TABNAME           = 'T_DATA'
  106.   "这里的I_INTERNAL_TABNAME必须是定义为occurs <n>之类的内表结构。
  107. *   I_STRUCTURE_NAME             =
  108. *   I_CLIENT_NEVER_DISPLAY       = 'X'
  109.      I_INCLNAME                   = SY-REPID
  110. *   I_BYPASSING_BUFFER           =
  111. *   I_BUFFER_ACTIVE              =
  112.     CHANGING
  113.       CT_FIELDCAT                  = IT_FCAT
  114. * EXCEPTIONS
  115. *   INCONSISTENT_INTERFACE       = 1
  116. *   PROGRAM_ERROR                = 2
  117. *   OTHERS                       = 3
  118.             .
  119.   DELETE IT_FCAT WHERE FIELDNAME = 'SFLAG'.
  120.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  121.    EXPORTING
  122. *   I_INTERFACE_CHECK                 = ' '
  123. *   I_BYPASSING_BUFFER                = ' '
  124. *   I_BUFFER_ACTIVE                   = ' '
  125.      I_CALLBACK_PROGRAM                = SY-REPID
  126.      I_CALLBACK_PF_STATUS_SET          = 'CALLBACK_PF_STATUS'
  127.      I_CALLBACK_USER_COMMAND           = 'CALLBACK_USER_COMMAND'
  128. *   I_CALLBACK_TOP_OF_PAGE            = ' '
  129. *   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
  130. *   I_CALLBACK_HTML_END_OF_LIST       = ' '
  131. *   I_STRUCTURE_NAME                  =
  132. *   I_BACKGROUND_ID                   = ' '
  133. *   I_GRID_TITLE                      =
  134. *   I_GRID_SETTINGS                   =
  135.      IS_LAYOUT                         = LS_LAYOUT
  136.      IT_FIELDCAT                       = IT_FCAT
  137. *   IT_EXCLUDING                      =
  138. *   IT_SPECIAL_GROUPS                 =
  139. *   IT_SORT                           =
  140. *   IT_FILTER                         =
  141. *   IS_SEL_HIDE                       =
  142. *   I_DEFAULT                         = 'X'
  143. *   I_SAVE                            = ' '
  144. *   IS_VARIANT                        =
  145. *   IT_EVENTS                         =
  146. *   IT_EVENT_EXIT                     =
  147. *   IS_PRINT                          =
  148. *   IS_REPREP_ID                      =
  149. *   I_SCREEN_START_COLUMN             = 0
  150. *   I_SCREEN_START_LINE               = 0
  151. *   I_SCREEN_END_COLUMN               = 0
  152. *   I_SCREEN_END_LINE                 = 0
  153. *   I_HTML_HEIGHT_TOP                 = 0
  154. *   I_HTML_HEIGHT_END                 = 0
  155. *   IT_ALV_GRAPHICS                   =
  156. *   IT_HYPERLINK                      =
  157. *   IT_ADD_FIELDCAT                   =
  158. *   IT_EXCEPT_QINFO                   =
  159. *   IR_SALV_FULLSCREEN_ADAPTER        =
  160. * IMPORTING
  161. *   E_EXIT_CAUSED_BY_CALLER           =
  162. *   ES_EXIT_CAUSED_BY_USER            =
  163.     TABLES
  164.       T_OUTTAB                          = IT_DATA
  165. * EXCEPTIONS
  166. *   PROGRAM_ERROR                     = 1
  167. *   OTHERS                            = 2
  168.             .
  169.   IF SY-SUBRC <> 0.
  170. * Implement suitable error handling here
  171.   ENDIF.




  172. ENDFORM.                    " DISPALY_DATA

  173. *&---------------------------------------------------------------------*
  174. *&      Form  CALLBACK_PF_STATUS
  175. *&---------------------------------------------------------------------*
  176. *       text
  177. *----------------------------------------------------------------------*
  178. *      -->RT_EXTAB   text
  179. *----------------------------------------------------------------------*
  180. FORM CALLBACK_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  181.   SET PF-STATUS 'ALV_STATUS' EXCLUDING RT_EXTAB.
  182. ENDFORM.                    "CALLBACK_PF_STATUS

  183. *&---------------------------------------------------------------------*
  184. *&      Form  CALLBACK_USER_COMMAND
  185. *&---------------------------------------------------------------------*
  186. *       text
  187. *----------------------------------------------------------------------*
  188. *      -->P_UCOMM    text
  189. *      -->PS_SELFIED text
  190. *----------------------------------------------------------------------*
  191. FORM  CALLBACK_USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
  192.                               PS_SELFIED TYPE SLIS_SELFIELD.
  193.   DATA:REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
  194.   CASE P_UCOMM.
  195.     WHEN 'DELPR'.
  196.       PERFORM FCODE_DELETE_PR.
  197.     WHEN 'UNDPR'.
  198.       PERFORM FCODE_UNDELETE_PR.
  199.   ENDCASE.

  200. *->刷新ALV屏幕
  201.   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
  202. *   EXPORTING
  203. *     IR_SALV_FULLSCREEN_ADAPTER       =
  204.    IMPORTING
  205. *     ET_EXCLUDING                     =
  206. *     E_REPID                          =
  207. *     E_CALLBACK_PROGRAM               =
  208. *     E_CALLBACK_ROUTINE               =
  209.      E_GRID                           = REF_GRID
  210. *     ET_FIELDCAT_LVC                  =
  211. *     ER_TRACE                         =
  212. *     E_FLG_NO_HTML                    =
  213. *     ES_LAYOUT_KKBLO                  =
  214. *     ES_SEL_HIDE                      =
  215. *     ET_EVENT_EXIT                    =
  216. *     ER_FORM_TOL                      =
  217. *     ER_FORM_EOL                      =
  218.             .

  219.   CALL METHOD REF_GRID->CHECK_CHANGED_DATA.
  220.   CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY.

  221. ENDFORM.                    "CALLBACK_USER_COMMAND

  222. *&---------------------------------------------------------------------*
  223. *&      Form  FCODE_DELETE_PR
  224. *&---------------------------------------------------------------------*
  225. *       text
  226. *----------------------------------------------------------------------*
  227. FORM FCODE_DELETE_PR .
  228.   PERFORM CHANGE_PR USING 'X'.
  229. ENDFORM.                    " FCODE_DELETE_PR

  230. *&---------------------------------------------------------------------*
  231. *&      Form  FCODE_UNDELETE_PR
  232. *&---------------------------------------------------------------------*
  233. *       text
  234. *----------------------------------------------------------------------*
  235. FORM FCODE_UNDELETE_PR .
  236.   PERFORM CHANGE_PR USING ' '.
  237. ENDFORM.                    "FCODE_UNDELETE_PR

  238. *&---------------------------------------------------------------------*
  239. *&      Form  CHANGE_PR
  240. *&---------------------------------------------------------------------*
  241. *       text
  242. *----------------------------------------------------------------------*
  243. *      -->VALUE      text
  244. *      -->(P_DELFG)  text
  245. *----------------------------------------------------------------------*
  246. FORM CHANGE_PR  USING    VALUE(P_DELFG) TYPE FLAG.
  247.   DATA:IT_DATA_SEL LIKE TABLE OF T_DATA WITH HEADER LINE,
  248.        IT_ITEM LIKE TABLE OF BAPIEBAND WITH HEADER LINE,
  249.        "Transfer Structure: Delete/Close Requisition
  250.        IT_RETURN LIKE TABLE OF BAPIRETURN WITH HEADER LINE,
  251.        "Return Parameter
  252.        IT_FCAT TYPE SLIS_T_FIELDCAT_ALV,
  253.        LS_FCAT TYPE LINE OF SLIS_T_FIELDCAT_ALV,
  254.        LV_ERROR TYPE FLAG.
  255.   FIELD-SYMBOLS: <FS_DATA> LIKE T_DATA.

  256.   REFRESH IT_LOG.
  257.   LOOP AT IT_DATA INTO WA_DATA WHERE SFLAG = 'X'
  258.                                AND LOEKZ <> P_DELFG.
  259.     "LOEKZ Deletion Indicator in Purchasing Document
  260.     "P_DELFG 放开关闭的采购申请字段
  261.     APPEND WA_DATA TO IT_DATA_SEL.
  262.   ENDLOOP.

  263.   IF IT_DATA_SEL[] IS INITIAL.
  264.        MESSAGE '没有选中数据' TYPE 'E'.
  265.   ENDIF.

  266.   SORT IT_DATA_SEL BY BANFN BNFPO.
  267.   LOOP AT IT_DATA_SEL.
  268.     CLEAR IT_ITEM. "Transfer Structure: Delete/Close Requisition
  269.     IT_ITEM-PREQ_ITEM = IT_DATA_SEL-BNFPO.
  270.     "Item Number of Purchase Requisition
  271.     IT_ITEM-DELETE_IND = P_DELFG.
  272.     "Deletion Indicator in Purchasing Document
  273.     APPEND IT_ITEM.

  274.     AT END OF BANFN.
  275.       REFRESH:IT_RETURN.
  276.       CLEAR:LV_ERROR.
  277.       CALL FUNCTION 'BAPI_REQUISITION_DELETE'
  278.         EXPORTING
  279.           NUMBER                      = IT_DATA_SEL-BANFN
  280.         TABLES
  281.           REQUISITION_ITEMS_TO_DELETE = IT_ITEM
  282.           RETURN                      = IT_RETURN.
  283.       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  284.        EXPORTING
  285.          WAIT          = 'X'
  286. *     IMPORTING
  287. *       RETURN        =
  288.                 .
  289.       LOOP AT IT_RETURN.
  290.         CLEAR IT_LOG.
  291.         IT_LOG-BANFN = IT_DATA_SEL-BANFN.
  292.         IT_LOG-TYPE = IT_RETURN-TYPE.
  293.         MESSAGE ID IT_RETURN-CODE+0(2) TYPE IT_RETURN-TYPE NUMBER
  294.         IT_RETURN-CODE+2(3)
  295.               WITH IT_RETURN-MESSAGE_V1
  296.                    IT_RETURN-MESSAGE_V2
  297.                    IT_RETURN-MESSAGE_V3
  298.                    IT_RETURN-MESSAGE_V4
  299.               INTO IT_LOG-MESSAGE.
  300.         APPEND IT_LOG.

  301.         IF IT_RETURN-TYPE = 'E' OR IT_RETURN-TYPE = 'A'.
  302.           LV_ERROR = 'X'.
  303.         ENDIF.
  304.       ENDLOOP.

  305.       IF LV_ERROR = SPACE.
  306.         LOOP AT IT_ITEM.
  307.           READ TABLE IT_DATA ASSIGNING <FS_DATA>
  308.            WITH KEY BANFN = IT_DATA_SEL-BANFN
  309.                     BNFPO = IT_ITEM-PREQ_ITEM.
  310.           IF SY-SUBRC = 0.
  311.             <FS_DATA>-LOEKZ = P_DELFG.
  312.           ENDIF.
  313.         ENDLOOP.
  314.       ENDIF.
  315.       REFRESH:IT_ITEM.
  316.     ENDAT.
  317.   ENDLOOP.

  318.   CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  319.    EXPORTING
  320.      I_PROGRAM_NAME               = SY-REPID
  321.      I_INTERNAL_TABNAME           = 'IT_LOG'
  322.      I_INCLNAME                   = SY-REPID
  323. *   I_BYPASSING_BUFFER           =
  324. *   I_BUFFER_ACTIVE              =
  325.     CHANGING
  326.       CT_FIELDCAT                  = IT_FCAT
  327.       .

  328.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  329.    EXPORTING
  330.      I_CALLBACK_PROGRAM                = SY-REPID
  331.      IT_FIELDCAT                       = IT_FCAT
  332.     TABLES
  333.       T_OUTTAB                          = IT_LOG
  334.             .
  335. ENDFORM.                    "CHANGE_PR
复制代码

工具栏的定义,可以先copy标准工具栏,再添加两个按钮
define_toolbar.jpg

回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表