二维码

批量修改销售订单行项目系统状态

Twilight发表于 2026-03-12 10:43Twilight 最后回复于 2026-03-12 10:43 [复制链接] 2 0

  1.   REPORT zsdr028 MESSAGE-ID 00.

  2. *&---------------------------------------------------------------------*
  3. *& INCLUDE
  4. *&---------------------------------------------------------------------*
  5.   INCLUDE zsdr028_top.
  6.   INCLUDE zsdr028_selscr.
  7.   INCLUDE zsdr028_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_vbeln[] 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. *& 包含               ZHRR041_TOP
  3. *&---------------------------------------------------------------------*
  4. ****************上载相关**********************************
  5. TABLES:vbak."屏幕表
  6. TYPE-POOLS:slis,truxs,icon.
  7. DATA functxt TYPE smp_dyntxt.
  8. ****************上载相关**********************************

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

  20. *****************定义结构************************************
  21. DATA:gt_alv TYPE TABLE OF ty_alv WITH HEADER LINE.
复制代码
  1. *&---------------------------------------------------------------------*
  2. *& 包含               ZHRR041_SELSCR
  3. *&---------------------------------------------------------------------*
  4. SELECTION-SCREEN FUNCTION KEY 1.
  5. SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME TITLE TEXT-001.
  6. SELECT-OPTIONS:s_vbeln FOR vbak-vbeln.
  7. SELECTION-SCREEN END OF BLOCK blk01.
  8. SELECTION-SCREEN BEGIN OF BLOCK blk02 WITH FRAME TITLE TEXT-002.
  9. PARAMETERS p_rtco RADIOBUTTON GROUP typ USER-COMMAND sele DEFAULT 'X'."技术实现 重置
  10. PARAMETERS p_rstl RADIOBUTTON GROUP typ."已完成 重置
  11. SELECTION-SCREEN END OF BLOCK blk02.
复制代码
  1. *&---------------------------------------------------------------------*
  2. *&  包含                ZSDR028_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.   DATA:lv_vrgng TYPE tj01-vrgng.

  14.   SELECT vbak~vbeln,
  15.          vbak~bukrs_vf,
  16.          vbak~vkorg,
  17.          vbak~erdat,
  18.          vbap~posnr
  19.     FROM vbak
  20.     INNER JOIN vbap ON vbak~vbeln = vbap~vbeln
  21.     WHERE vbak~vbeln IN @s_vbeln
  22.     INTO TABLE @DATA(lt_vbap).

  23.   IF p_rtco = 'X'. "技术实现 重置
  24.     lv_vrgng = 'BUTA'.
  25.   ELSEIF p_rstl = 'X'. "已完成 重置
  26.     lv_vrgng = 'BUAB'.
  27.   ENDIF.

  28.   SORT lt_vbap BY vbeln posnr.
  29.   LOOP AT lt_vbap ASSIGNING FIELD-SYMBOL(<fs_vbap>).
  30.     CLEAR:gt_alv.
  31.     gt_alv-vbeln = <fs_vbap>-vbeln.
  32.     gt_alv-bukrs = <fs_vbap>-bukrs_vf.
  33.     gt_alv-vkorg = <fs_vbap>-vkorg.
  34.     gt_alv-erdat = <fs_vbap>-erdat.
  35.     gt_alv-posnr = <fs_vbap>-posnr.

  36.     CALL FUNCTION 'SD_ITEM_CHANGE_STATUS'
  37.       EXPORTING
  38.         i_vrgng           = lv_vrgng
  39.         i_document_number = <fs_vbap>-vbeln
  40.         i_item_number     = <fs_vbap>-posnr
  41.         i_external_call   = 'X'
  42.         i_check_only      = 'X'
  43.       EXCEPTIONS
  44.         no_status_object  = 1
  45.         no_activity       = 2
  46.         missing_data      = 3
  47.         not_allowed       = 4
  48.         fatal_error       = 5
  49.         OTHERS            = 6.
  50.     IF sy-subrc NE 0.
  51.       gt_alv-zid = icon_red_light.
  52.       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO gt_alv-zmessage.
  53.     ENDIF.

  54.     APPEND gt_alv.
  55.   ENDLOOP.

  56. ENDFORM.                    " FRM_DATA_CHECK
  57. *&---------------------------------------------------------------------*
  58. *&      Form  FRM_SHOW_ALV
  59. *&---------------------------------------------------------------------*
  60. *       text
  61. *----------------------------------------------------------------------*
  62. *  -->  p1        text
  63. *  <--  p2        text
  64. *----------------------------------------------------------------------*
  65. FORM frm_show_alv .
  66. *局部变量定义
  67.   DATA: ls_layout   TYPE lvc_s_layo,
  68.         lt_fieldcat TYPE lvc_t_fcat,
  69.         ls_fieldcat TYPE lvc_s_fcat,
  70.         lt_event    TYPE slis_t_event WITH HEADER LINE,
  71.         pos         TYPE i,
  72.         w_repid     LIKE sy-repid VALUE sy-repid.

  73.   " 初始化
  74.   CLEAR: ls_layout,
  75.          lt_fieldcat[],ls_fieldcat,
  76.          lt_event[],lt_event,pos.

  77. * ALV参数设置
  78.   ls_layout-box_fname   = 'FLAG'.
  79.   ls_layout-cwidth_opt    = 'X'.
  80.   ls_layout-detailinit    = 'X'.

  81.   "  fieldcat设置
  82.   DEFINE d_get_field.
  83.     pos = pos + 1.
  84.     CLEAR ls_fieldcat.
  85.     ls_fieldcat-col_pos = pos.
  86.     ls_fieldcat-coltext = &1.
  87.     ls_fieldcat-fieldname = &2.
  88.     ls_fieldcat-key       = &3.
  89.     APPEND ls_fieldcat TO lt_fieldcat.
  90.   END-OF-DEFINITION.
  91.   d_get_field '错误信号'          'ZID'        ''.
  92.   d_get_field '消息文本'          'ZMESSAGE'   ''.
  93.   d_get_field '销售订单'          'VBELN'      'X'.
  94.   d_get_field '行项目'            'POSNR'      'X'.
  95.   d_get_field '公司代码'          'BUKRS'      ''.
  96.   d_get_field '销售组织'          'VKORG'      ''.
  97.   d_get_field '创建日期'          'ERDAT'      ''.

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

  138.   CASE r_ucomm.
  139.     WHEN 'BACK'.
  140.       LEAVE TO SCREEN 0.
  141.     WHEN '&DATA_SAVE'.
  142.       SORT gt_alv BY flag zid.
  143.       READ TABLE gt_alv WITH KEY flag = 'X' zid = '@0A@' BINARY SEARCH.
  144.       IF sy-subrc = 0.
  145.         MESSAGE '请检查报错信息的条目!' TYPE 'E'.
  146.       ENDIF.
  147.       READ TABLE gt_alv WITH KEY  flag = 'X' BINARY SEARCH.
  148.       IF sy-subrc NE 0.
  149.         MESSAGE '请选择需要导入的数据!' TYPE 'E'.
  150.       ENDIF.
  151.       PERFORM frm_save_data.
  152.     WHEN OTHERS.
  153.   ENDCASE.

  154.   rs_selfield-refresh = 'X'.  " 刷新.
  155. ENDFORM.
  156. *&---------------------------------------------------------------------*
  157. *&      Form  FRM_SAVE_DATA
  158. *&---------------------------------------------------------------------*
  159. *       text
  160. *----------------------------------------------------------------------*
  161. *  -->  p1        text
  162. *  <--  p2        text
  163. *----------------------------------------------------------------------*
  164. FORM frm_save_data .
  165.   DATA:lt_status    TYPE TABLE OF jstat.
  166.   DATA:lt_jest_ins  TYPE TABLE OF jest_upd.
  167.   DATA:lt_jest_upd  TYPE TABLE OF jest_upd.
  168.   DATA:lt_jsto_ins  TYPE TABLE OF jsto.
  169.   DATA:lt_jsto_upd  TYPE TABLE OF jsto_upd.
  170.   DATA:lt_obj_del   TYPE TABLE OF onr00.
  171.   DATA:ls_jest_upd  TYPE jest_upd.
  172.   DATA:lv_objnr     TYPE jsto-objnr.

  173. *I0002  REL 已释放
  174. *I0045  TECO  技术性完成
  175. *I0046  结算  已结算
  176. *I0043 锁定  已锁定
  177. *I0097 FNBL  最后开票
  178. *
  179. *I0012  DLV 交货
  180. *I0028  SETC  结算规则维护
  181. *I0082  RESA  进行结果分析
  182. *I0234  Mto0  定货生产
  183. *I0295  RAOC  对象值中的 RA 数据

  184.   LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv>) WHERE flag = 'X'.
  185.     CLEAR:lt_status[],lt_jest_upd[].
  186.     lv_objnr = 'VB' && <fs_alv>-vbeln && <fs_alv>-posnr.
  187.     CALL FUNCTION 'STATUS_READ'
  188.       EXPORTING
  189.         client           = sy-mandt
  190.         objnr            = lv_objnr
  191.         only_active      = 'X'
  192.       TABLES
  193.         status           = lt_status
  194.       EXCEPTIONS
  195.         object_not_found = 1
  196.         OTHERS           = 2.

  197.     LOOP AT lt_status ASSIGNING FIELD-SYMBOL(<fs_status>) WHERE stat = 'I0002' OR stat = 'I0045' OR stat = 'I0046' OR stat = 'I0043' OR stat = 'I0097'.
  198.       CLEAR:ls_jest_upd.
  199.       ls_jest_upd-mandt = sy-mandt.
  200.       ls_jest_upd-objnr = lv_objnr.
  201.       ls_jest_upd-stat  = <fs_status>-stat.
  202.       ls_jest_upd-inact = 'X'.
  203.       APPEND ls_jest_upd TO lt_jest_upd.
  204.     ENDLOOP.

  205.     CLEAR:ls_jest_upd.
  206.     ls_jest_upd-mandt = sy-mandt.
  207.     ls_jest_upd-objnr = lv_objnr.
  208.     ls_jest_upd-stat  = 'I0002'."REL  已释放
  209.     ls_jest_upd-inact = ''.
  210.     APPEND ls_jest_upd TO lt_jest_upd.

  211.     CALL FUNCTION 'STATUS_UPDATE'
  212.       TABLES
  213.         jest_ins = lt_jest_ins
  214.         jest_upd = lt_jest_upd
  215.         jsto_ins = lt_jsto_ins
  216.         jsto_upd = lt_jsto_upd
  217.         obj_del  = lt_obj_del.

  218.     IF sy-subrc = 0.
  219.       <fs_alv>-zid = icon_green_light.
  220.       <fs_alv>-zmessage = '保存成功'.
  221.     ELSE.
  222.       <fs_alv>-zid = icon_red_light.
  223.       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO <fs_alv>-zmessage.
  224.     ENDIF.
  225.   ENDLOOP.


  226. ENDFORM.                    " FRM_SAVE_DATA
复制代码
回复

使用道具 举报

快速回帖

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

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