二维码

批量修改生产订单状态

Twilight发表于 2026-03-12 16:59Twilight 最后回复于 2026-03-12 16:59 [复制链接] 13 0

标准程序:PPARCHP1 生产订单:设置删除标记和删除标识
取消删除生产订单,试一试 ORDER_CHANGE_FOR_ACTIVITY
  1.   REPORT zppr004 MESSAGE-ID 00.

  2. *&---------------------------------------------------------------------*
  3. *& INCLUDE
  4. *&---------------------------------------------------------------------*
  5.   INCLUDE zppr004_top.
  6.   INCLUDE zppr004_selscr.
  7.   INCLUDE zppr004_form.
  8. *&---------------------------------------------------------------------*
  9. *& 初始化处理
  10. *&---------------------------------------------------------------------*
  11.   INITIALIZATION.

  12. *&---------------------------------------------------------------------*
  13. *& 选择屏幕控制
  14. *&---------------------------------------------------------------------*
  15.   AT SELECTION-SCREEN OUTPUT.

  16. *----------------------------------------------------------------------*
  17. *         AT SELECTION-SCREEN ON VALUE-REQUEST                         *
  18. *----------------------------------------------------------------------*
  19. *  AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  20. *&---------------------------------------------------------------------*
  21. *& 参数输入检查
  22. *&---------------------------------------------------------------------*
  23.   AT SELECTION-SCREEN.
  24. *&---------------------------------------------------------------------*
  25. *& 程序开始处理
  26. *&---------------------------------------------------------------------*
  27.   START-OF-SELECTION.
  28.     IF s_aufnr[] IS INITIAL.
  29.       MESSAGE '生产订单必填' TYPE 'E'.
  30.     ENDIF.
  31.     PERFORM frm_data_check.
  32. *&---------------------------------------------------------------------*
  33. *& 程序结束处理
  34. *&---------------------------------------------------------------------*
  35.   END-OF-SELECTION.
  36.     PERFORM frm_show_ALV.
复制代码
  1. *&---------------------------------------------------------------------*
  2. *& 包含               ZPPR004_TOP
  3. *&---------------------------------------------------------------------*
  4. ****************上载相关**********************************
  5. TABLES:aufk."屏幕表
  6. TYPE-POOLS:slis,truxs,icon.
  7. DATA functxt TYPE smp_dyntxt.
  8. ****************上载相关**********************************

  9. *****************定义结构************************************
  10. TYPES:BEGIN OF ty_alv,
  11.         aufnr    TYPE aufk-aufnr,
  12.         bukrs    TYPE aufk-bukrs,
  13.         werks    TYPE aufk-werks,
  14.         erdat    TYPE aufk-erdat,
  15.         flag(1),
  16.         zid      TYPE icon-id,         " 信号
  17.         zmessage TYPE zmmt004-zmessage, " 提示文本
  18.       END OF ty_alv.

  19. *****************定义结构************************************
  20. DATA:gt_alv TYPE TABLE OF ty_alv WITH HEADER LINE.
复制代码
  1. *&---------------------------------------------------------------------*
  2. *& 包含               ZPPR004_SELSCR
  3. *&---------------------------------------------------------------------*
  4. SELECTION-SCREEN FUNCTION KEY 1.
  5. SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE TEXT-001.
  6. SELECT-OPTIONS:s_aufnr FOR aufk-aufnr.
  7. SELECTION-SCREEN END OF BLOCK blk01.
  8. SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE TEXT-002.
  9. PARAMETERS p_del RADIOBUTTON GROUP typ USER-COMMAND sele DEFAULT 'X'."设置删除
  10. PARAMETERS p_cal RADIOBUTTON GROUP typ."取消删除
  11. SELECTION-SCREEN END OF BLOCK blk02.
复制代码
  1. *&---------------------------------------------------------------------*
  2. *&  包含                ZPPR004_FORM
  3. *&---------------------------------------------------------------------*
  4. *&---------------------------------------------------------------------*
  5. *&      Form  FRM_DATA_CHECK
  6. *&---------------------------------------------------------------------*
  7. *       text
  8. *----------------------------------------------------------------------*
  9. *  -->  p1        text
  10. *  <--  p2        text
  11. *----------------------------------------------------------------------*
  12. FORM frm_data_check .

  13.   SELECT aufk~aufnr,
  14.          aufk~bukrs,
  15.          aufk~werks,
  16.          aufk~erdat,
  17.          aufk~objnr
  18.     FROM aufk
  19.     WHERE aufk~autyp = '10'
  20.       AND aufk~aufnr IN @s_aufnr
  21.     INTO TABLE @DATA(lt_aufk).


  22.   SORT lt_aufk BY aufnr.
  23.   LOOP AT lt_aufk ASSIGNING FIELD-SYMBOL(<fs_aufk>).
  24.     CLEAR:gt_alv.
  25.     gt_alv-aufnr = <fs_aufk>-aufnr.
  26.     gt_alv-bukrs = <fs_aufk>-bukrs.
  27.     gt_alv-werks = <fs_aufk>-werks.
  28.     gt_alv-erdat = <fs_aufk>-erdat.

  29.     CALL FUNCTION 'K_ORDER_CHECK'
  30.       EXPORTING
  31.         aufnr       = gt_alv-aufnr
  32.       EXCEPTIONS
  33.         not_allowed = 1
  34.         not_found   = 2
  35.         no_gsber    = 3
  36.         wrong_auart = 4
  37.         wrong_autyp = 5
  38.         wrong_bukrs = 6
  39.         wrong_gsber = 7
  40.         wrong_kokrs = 8
  41.         OTHERS      = 9.
  42.     IF sy-subrc NE 0.
  43.       gt_alv-zid = icon_red_light.
  44.       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO gt_alv-zmessage.
  45.     ELSE.
  46.       IF p_del = 'X'.
  47.         CALL FUNCTION 'STATUS_CHECK'
  48.           EXPORTING
  49.             client            = sy-mandt
  50.             objnr             = <fs_aufk>-objnr
  51.             status            = 'I0076' "DLFL        删除标记
  52.           EXCEPTIONS
  53.             object_not_found  = 1
  54.             status_not_active = 2
  55.             OTHERS            = 3.
  56.         IF sy-subrc = 0.
  57.           gt_alv-zid = icon_red_light.
  58.           gt_alv-zmessage  = '已是删除状态'.
  59.         ENDIF.
  60.       ENDIF.
  61.     ENDIF.

  62.     APPEND gt_alv.
  63.   ENDLOOP.

  64. ENDFORM.                    " FRM_DATA_CHECK
  65. *&---------------------------------------------------------------------*
  66. *&      Form  FRM_SHOW_ALV
  67. *&---------------------------------------------------------------------*
  68. *       text
  69. *----------------------------------------------------------------------*
  70. *  -->  p1        text
  71. *  <--  p2        text
  72. *----------------------------------------------------------------------*
  73. FORM frm_show_alv .
  74. *局部变量定义
  75.   DATA: ls_layout   TYPE lvc_s_layo,
  76.         lt_fieldcat TYPE lvc_t_fcat,
  77.         ls_fieldcat TYPE lvc_s_fcat,
  78.         lt_event    TYPE slis_t_event WITH HEADER LINE,
  79.         pos         TYPE i,
  80.         w_repid     LIKE sy-repid VALUE sy-repid.

  81.   " 初始化
  82.   CLEAR: ls_layout,
  83.          lt_fieldcat[],ls_fieldcat,
  84.          lt_event[],lt_event,pos.

  85. * ALV参数设置
  86.   ls_layout-box_fname   = 'FLAG'.
  87.   ls_layout-cwidth_opt    = 'X'.
  88.   ls_layout-detailinit    = 'X'.

  89.   "  fieldcat设置
  90.   DEFINE d_get_field.
  91.     pos = pos + 1.
  92.     CLEAR ls_fieldcat.
  93.     ls_fieldcat-col_pos = pos.
  94.     ls_fieldcat-coltext = &1.
  95.     ls_fieldcat-fieldname = &2.
  96.     ls_fieldcat-key       = &3.
  97.     APPEND ls_fieldcat TO lt_fieldcat.
  98.   END-OF-DEFINITION.
  99.   d_get_field '错误信号'          'ZID'        ''.
  100.   d_get_field '消息文本'          'ZMESSAGE'   ''.
  101.   d_get_field '生产订单'          'AUFNR'      'X'.
  102.   d_get_field '公司代码'          'BUKRS'      ''.
  103.   d_get_field '工厂'              'WERKS'      ''.
  104.   d_get_field '创建日期'          'ERDAT'      ''.

  105. * ALV 展示
  106.   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  107.     EXPORTING
  108.       i_callback_program       = w_repid
  109.       i_callback_pf_status_set = 'SUB_STATUS'
  110.       i_callback_user_command  = 'SUB_COMMAND'
  111.       is_layout_lvc            = ls_layout
  112.       it_fieldcat_lvc          = lt_fieldcat
  113.       i_save                   = 'A'
  114.       it_events                = lt_event[]
  115.     TABLES
  116.       t_outtab                 = gt_alv[]
  117.     EXCEPTIONS
  118.       program_error            = 1
  119.       OTHERS                   = 2.
  120.   IF sy-subrc <> 0.
  121.     LEAVE TO SCREEN 0.
  122.   ENDIF.
  123. ENDFORM.                    " FRM_SHOW_ALV
  124. *&---------------------------------------------------------------------*
  125. *&      Form  SUB_STATUS
  126. *&---------------------------------------------------------------------*
  127. *       text
  128. *----------------------------------------------------------------------*
  129. *  -->  p1        text
  130. *  <--  p2        text
  131. *----------------------------------------------------------------------*
  132. FORM sub_status USING re_extab TYPE slis_t_extab.
  133.   SET PF-STATUS 'ZSTATUS01'.
  134. ENDFORM.
  135. *&---------------------------------------------------------------------*
  136. *&      Form  SUB_COMMAND
  137. *&---------------------------------------------------------------------*
  138. *       text
  139. *----------------------------------------------------------------------*
  140. *  -->  p1        text
  141. *  <--  p2        text
  142. *----------------------------------------------------------------------*
  143. FORM sub_command USING r_ucomm LIKE sy-ucomm
  144.                        rs_selfield TYPE slis_selfield.

  145.   CASE r_ucomm.
  146.     WHEN 'BACK'.
  147.       LEAVE TO SCREEN 0.
  148.     WHEN '&DATA_SAVE'.
  149.       SORT gt_alv BY flag zid.
  150.       READ TABLE gt_alv WITH KEY flag = 'X' zid = icon_red_light BINARY SEARCH.
  151.       IF sy-subrc = 0.
  152.         MESSAGE '请检查报错信息的条目!' TYPE 'E'.
  153.       ENDIF.
  154.       READ TABLE gt_alv WITH KEY  flag = 'X' BINARY SEARCH.
  155.       IF sy-subrc NE 0.
  156.         MESSAGE '请选择需要导入的数据!' TYPE 'E'.
  157.       ENDIF.
  158.       PERFORM frm_save_data.
  159.     WHEN OTHERS.
  160.   ENDCASE.

  161.   rs_selfield-refresh = 'X'.  " 刷新.
  162. ENDFORM.
  163. *&---------------------------------------------------------------------*
  164. *&      Form  FRM_SAVE_DATA
  165. *&---------------------------------------------------------------------*
  166. *       text
  167. *----------------------------------------------------------------------*
  168. *  -->  p1        text
  169. *  <--  p2        text
  170. *----------------------------------------------------------------------*
  171. FORM frm_save_data .
  172.   DATA:lv_objnr   TYPE jsto-objnr.
  173.   DATA:ls_message TYPE zots001.

  174.   LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv>) WHERE flag = 'X'.
  175.     CLEAR:ls_message,lv_objnr.
  176.     IF p_del = 'X'. "设置删除
  177.       CALL FUNCTION 'ZPPFM008'
  178.         EXPORTING
  179.           i_order_number = <fs_alv>-aufnr
  180.         IMPORTING
  181.           e_message      = ls_message.
  182.       IF ls_message-type = 'S'.
  183.         <fs_alv>-zid = icon_green_light.
  184.       ELSE.
  185.         <fs_alv>-zid = icon_red_light.
  186.       ENDIF.
  187.       <fs_alv>-zmessage = ls_message-message.
  188.     ELSEIF p_cal = 'X'."取消删除
  189.       "LVMS 删除标识   LVMZ 去掉删除标记
  190.       lv_objnr = 'OR' && <fs_alv>-aufnr.
  191.       CALL FUNCTION 'STATUS_CHANGE_FOR_ACTIVITY'
  192.         EXPORTING
  193.           objnr                = lv_objnr
  194.           vrgng                = 'LVMZ'
  195.         EXCEPTIONS
  196.           activity_not_allowed = 1
  197.           object_not_found     = 2
  198.           status_inconsistent  = 3
  199.           status_not_allowed   = 4
  200.           wrong_input          = 5
  201.           warning_occured      = 6
  202.           OTHERS               = 7.
  203.       IF sy-subrc = 0.
  204.         UPDATE aufk SET loekz = '' WHERE aufnr = <fs_alv>-aufnr.
  205.         COMMIT WORK.

  206.         <fs_alv>-zid = icon_green_light.
  207.         <fs_alv>-zmessage = '取消删除成功'.
  208.       ELSE.
  209.         <fs_alv>-zid = icon_red_light.
  210.         MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO <fs_alv>-zmessage.
  211.       ENDIF.
  212.     ENDIF.
  213.   ENDLOOP.

  214. ENDFORM.                    " FRM_SAVE_DATA
复制代码
ZPPFM008 生产订单删除
回复

使用道具 举报

快速回帖

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

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