MEQ1配额BDC删除和创建

删除:

FUNCTION zfm_mm_008_del.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_MATNR) TYPE  MATNR
*"     VALUE(I_WERKS) TYPE  WERKS_D
*"  EXPORTING
*"     VALUE(E_CODE) TYPE  CHAR1
*"     VALUE(E_MSG) TYPE  STRING
*"----------------------------------------------------------------------
  CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
      input        = i_matnr
    IMPORTING
      output       = i_matnr
    EXCEPTIONS
      length_error = 1
      OTHERS       = 2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.
  SELECT COUNT(*) FROM equk WHERE matnr EQ @i_matnr AND werks EQ @i_werks.
  IF sy-subrc NE 0.
    e_code = 'S'.
    e_msg = '配额不存在,不需要删除!'.
    RETURN.
  ENDIF.

  DATA lv_mode TYPE rfpdo-allgazmd VALUE 'N'.
  IF sy-uname EQ 'PAK'.
    lv_mode = 'A'.
  ENDIF.

  PERFORM bdc_dynpro USING 'SAPDM06Q'   '0200'.
  PERFORM bdc_field  USING 'BDC_CURSOR' 'EQUK-MATNR'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field  USING 'EQUK-MATNR' i_matnr.
  PERFORM bdc_field  USING 'EQUK-WERKS' i_werks.

  PERFORM bdc_dynpro      USING 'SAPDM06Q' '0205'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'EQUK-BDATU(01)'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=SA'.

  PERFORM bdc_dynpro USING 'SAPDM06Q'   '0205'.
  PERFORM bdc_field  USING 'BDC_CURSOR' 'EQUK-BDATU(01)'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '=LOES'.

  PERFORM bdc_dynpro USING 'SAPLSPO1'   '0200'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '=YES'.

  PERFORM bdc_dynpro USING 'SAPDM06Q'   '0205'.
  PERFORM bdc_field  USING 'BDC_CURSOR' 'EQUK-BDATU(01)'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '=BU'.

  CALL TRANSACTION 'MEQ1' USING bdcdata MODE lv_mode UPDATE 'S' MESSAGES INTO msgtab.
  CLEAR:bdcdata,bdcdata[].
  IF NOT line_exists( msgtab[ msgtyp = 'E' ] ).
    e_code = 'S'.
    e_msg = '配额删除成功!'.
  ELSE.
    DATA: lc_message TYPE char100.
    e_code = 'E'.
    e_msg = '配额删除失败!'.
    LOOP AT msgtab INTO wa_mess.
      CLEAR lc_message.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = wa_mess-msgid
          msgnr               = wa_mess-msgnr
          msgv1               = wa_mess-msgv1
          msgv2               = wa_mess-msgv2
          msgv3               = wa_mess-msgv3
          msgv4               = wa_mess-msgv4
        IMPORTING
          message_text_output = lc_message.
      e_msg = e_msg && lc_message.
      CLEAR:wa_mess,lc_message.
    ENDLOOP.
  ENDIF.

ENDFUNCTION.


创建

FUNCTION zfm_mm_008_create.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IS_HEAD) TYPE  ZSMM0010
*"  EXPORTING
*"     VALUE(E_CODE) TYPE  CHAR1
*"     VALUE(E_MSG) TYPE  STRING
*"  TABLES
*"      IT_ITEM STRUCTURE  ZSMM0011
*"----------------------------------------------------------------------

  DATA:
    lv_bdatu     TYPE c LENGTH 10,
    lv_scmng     TYPE c LENGTH 10,
    lv_quote     TYPE c LENGTH 3,
    lv_line      TYPE n LENGTH 2,
    lv_p         TYPE p DECIMALS 0,
    lv_fieldname TYPE c LENGTH 30.

  lv_p = is_head-scmng.
  lv_scmng = lv_p.

  CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
    EXPORTING
      date_internal            = is_head-bdatu
    IMPORTING
      date_external            = lv_bdatu
    EXCEPTIONS
      date_internal_is_invalid = 1
      OTHERS                   = 2.

  DATA: lc_message TYPE char100.
  DATA lv_mode TYPE rfpdo-allgazmd VALUE 'N'.

  IF sy-uname EQ 'PAK'.
    lv_mode = 'A'.
  ENDIF.

*开始新的画面
  PERFORM bdc_dynpro USING 'SAPDM06Q'   '0200'.
  PERFORM bdc_field  USING 'BDC_CURSOR' 'EQUK-MATNR'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field  USING 'EQUK-MATNR' is_head-matnr.
  PERFORM bdc_field  USING 'EQUK-WERKS' is_head-werks.

**开始新的画面
  PERFORM bdc_dynpro USING 'SAPDM06Q' '0205'.
  PERFORM bdc_field  USING 'BDC_CURSOR' 'EQUK-SCMNG(01)'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field  USING 'EQUK-BDATU(01)' lv_bdatu.
  PERFORM bdc_field  USING 'EQUK-SCMNG(01)' lv_scmng.

*开始新的画面
  PERFORM bdc_dynpro USING 'SAPDM06Q' '0205'.
  PERFORM bdc_field  USING 'BDC_CURSOR' 'EQUK-SCMNG(01)'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '=ZEIT'.

*开始新的画面
  PERFORM bdc_dynpro USING 'SAPDM06Q' '0501'.
  PERFORM bdc_field  USING 'BDC_CURSOR' 'RM06Q-BDATU'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '=ENTE'.
  PERFORM bdc_field  USING 'RM06Q-VDATU' '20220101'.
  PERFORM bdc_field  USING 'RM06Q-BDATU' lv_bdatu.

*开始新的画面
  PERFORM bdc_dynpro USING 'SAPDM06Q'   '0215'.
  PERFORM bdc_field  USING 'BDC_CURSOR' 'RM06Q-SOBIN(01)'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '/00'.

  lv_line  = 0 .
  LOOP AT it_item INTO DATA(ls_item).

    lv_line = lv_line + 1.
    lv_quote = ls_item-quote.
    CONCATENATE 'EQUP-BESKZ('  lv_line  ')' INTO lv_fieldname.
    PERFORM bdc_field USING lv_fieldname  ls_item-beskz.

    CONCATENATE 'RM06Q-SOBIN('  lv_line  ')' INTO lv_fieldname.
    PERFORM bdc_field USING lv_fieldname ls_item-sobes.

    CONCATENATE 'EQUP-LIFNR('  lv_line  ')' INTO lv_fieldname.
    PERFORM bdc_field USING lv_fieldname  ls_item-lifnr.

    CONCATENATE 'EQUP-QUOTE('  lv_line  ')' INTO lv_fieldname.
    PERFORM bdc_field USING lv_fieldname  lv_quote.

  ENDLOOP.

*开始新的画面事件
  PERFORM bdc_dynpro USING 'SAPDM06Q' '0215'.
  PERFORM bdc_field  USING 'BDC_OKCODE' '=BU'.

  CLEAR msgtab[].

  CALL TRANSACTION 'MEQ1' USING bdcdata
  MODE lv_mode UPDATE 'S' MESSAGES INTO msgtab.

  CLEAR:bdcdata,bdcdata[].
  IF NOT line_exists( msgtab[ msgtyp = 'E' ] ).
    e_code = 'S'.
    e_msg = e_msg && '配额协议维护成功!'.
  ELSE.

    e_code = 'E'.
    e_msg = '配额协议维护失败!'.
    LOOP AT msgtab INTO wa_mess.
      CLEAR lc_message.
      CALL FUNCTION 'MESSAGE_TEXT_BUILD'
        EXPORTING
          msgid               = wa_mess-msgid
          msgnr               = wa_mess-msgnr
          msgv1               = wa_mess-msgv1
          msgv2               = wa_mess-msgv2
          msgv3               = wa_mess-msgv3
          msgv4               = wa_mess-msgv4
        IMPORTING
          message_text_output = lc_message.
      e_msg = e_msg && lc_message.
      CLEAR:wa_mess,lc_message.
    ENDLOOP.
  ENDIF.
ENDFUNCTION.


关键词: ABAP MM

网友评论

发表评论