批量修改CS02 BOM状态

复制代码
  DATA:lt_bom TYPE TABLE OF typ_out.

  DATA: lv_datum   TYPE sy-datum,
        lv_message TYPE char128,
        lv_date    TYPE csap_mbom-datuv.


  DATA: ls_stko    TYPE stko_api01,
        ls_warning TYPE capiflag-flwarning,
        ls_stko2   TYPE stko_api02.


  lv_datum  = sy-datum .

  IF sy-batch IS NOT INITIAL.
    LOOP AT gt_out INTO gs_out.
      IF gs_out-stktx < lv_datum  AND gs_out-stktx IS NOT INITIAL.
        APPEND gs_out TO lt_bom.
        CLEAR gs_out.
      ENDIF.
    ENDLOOP.

  ELSE.
    LOOP AT gt_out INTO gs_out WHERE cbox = 'X'.
      IF gs_out-stktx < lv_datum  AND gs_out-stktx IS NOT INITIAL.
        APPEND gs_out TO lt_bom.
        CLEAR gs_out.
      ENDIF.
    ENDLOOP.
  ENDIF.



  LOOP AT lt_bom ASSIGNING FIELD-SYMBOL(<fs_bom>).

    CLEAR: ls_stko,lv_date,lv_message.

    ls_stko-base_quan = <fs_bom>-bmeng.
    ls_stko-alt_text  = <fs_bom>-stktx.
    ls_stko-bom_status = '02'.
*    lv_date = <fs_bom>-datuv.
*    lv_date = sy-datum.
   WRITE SY-DATUM TO lv_date.
    CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
      EXPORTING
        material           = <fs_bom>-matnr
        plant              = <fs_bom>-werks
        bom_usage          = <fs_bom>-stlan
        alternative        = <fs_bom>-stlal
        valid_from         = lv_date
        i_stko             = ls_stko
        fl_commit_and_wait = 'X'
        fl_default_values  = 'X'
      IMPORTING
       fl_warning         = ls_warning
       o_stko             = ls_stko2
      EXCEPTIONS
        error              = 1
        OTHERS             = 2.


    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        msgid               = sy-msgid
        msgnr               = sy-msgno
        msgv1               = sy-msgv1
        msgv2               = sy-msgv2
        msgv3               = sy-msgv3
        msgv4               = sy-msgv4
      IMPORTING
        message_text_output = lv_message.
    IF sy-subrc <> 0.

      gs_out-type  = 'E'.
      gs_out-msg   = '更新失败:' && lv_message.
      MODIFY gt_out FROM gs_out TRANSPORTING  type msg WHERE matnr = <fs_bom>-matnr AND werks = <fs_bom>-werks.

    ELSE.

      SEARCH lv_message FOR 'changed'.
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        gs_out-type  = 'S'.
        gs_out-stlst  = '02'.
        gs_out-msg   = '更新成功:'&& lv_message .
        MODIFY gt_out FROM gs_out TRANSPORTING  type  stlst  msg WHERE matnr = <fs_bom>-matnr AND werks = <fs_bom>-werks.
      ELSE.
        gs_out-type  = 'E'.
        gs_out-msg   = '更新失败:' && lv_message.
        MODIFY gt_out FROM gs_out TRANSPORTING  type msg WHERE matnr = <fs_bom>-matnr AND werks = <fs_bom>-werks.
      ENDIF.
    ENDIF.




  ENDLOOP.
复制代码

 

posted @   YangMeiko  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示