批量修改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 @ 2024-07-17 15:31  YangMeiko  阅读(56)  评论(0)    收藏  举报