PP独立需求批导,md74,md62

FORM import .
  DATA:ls_alv TYPE T_show,
       ls_tab TYPE T_show,
       lt_alv TYPE STANDARD TABLE OF T_show WITH HEADER LINE.

  DATA:lv_matnr TYPE bapisitemr-material.
  DATA: ls_item                     LIKE   bapisitemr,
        lt_requirements_schedule_in LIKE TABLE OF  bapisshdin,
        ls_REQUIREMENTS_SCHEDULE_IN LIKE   bapisshdin,
        lt_return                   LIKE TABLE OF bapireturn1,
        ls_return                   LIKE  bapireturn1.
  DATA: param TYPE cm60r.
  DATA:l_msg TYPE string.
  DATA:ls_out TYPE bapisitemr.
  CLEAR:ls_alv,lt_alv[].
  LOOP AT  gt_alv INTO gs_alv WHERE box = 'X' AND msg = ''.
    MOVE-CORRESPONDING gs_alv TO ls_alv.
    APPEND ls_alv TO lt_alv.
    CLEAR:ls_alv,gs_alv.
  ENDLOOP.
  SORT   lt_alv BY matnr werks .
  DELETE ADJACENT DUPLICATES FROM  lt_alv COMPARING  matnr werks.
  IF lt_alv[] IS NOT INITIAL.
    CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
      EXPORTING
        date      = sy-datum
        days      = 0
        months    = 0
        signum    = '+'
        years     = 1
      IMPORTING
        calc_date = gv_endate.

    LOOP AT  lt_alv INTO ls_alv.
      PERFORM  del USING ls_alv."先调用MD74将关键日期之前的独立需求删除
      CLEAR:ls_item,lt_requirements_schedule_in[],ls_requirements_schedule_in,lt_return[],ls_return.
      ls_item-material = ls_alv-matnr."物料编码
      ls_item-plant = ls_alv-werks."工厂
*      ls_item-mrp_area = ls_alv-mrp."MRP
      ls_item-version =  '00'."独立需求的版本号
      ls_item-vers_activ =  'X'."版本激活标识
      LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<fs_alv>)  WHERE matnr = ls_alv-matnr AND werks = ls_alv-werks ."AND mrp = ls_alv-mrp.
        ls_requirements_schedule_in-date_type =  '1'."日期类型
        ls_requirements_schedule_in-req_date =  <fs_alv>-date."计划行日期
        ls_requirements_schedule_in-req_qty =  <fs_alv>-jhsl."计划数量
        APPEND ls_requirements_schedule_in TO lt_requirements_schedule_in.
      ENDLOOP.
      SELECT SINGLE COUNT(*) INTO @DATA(lv_count) FROM pbim WHERE matnr = @ls_alv-matnr AND werks = @ls_alv-werks AND versb = '00'.
      IF lv_count = 0. "新建
        CALL FUNCTION 'BAPI_REQUIREMENTS_CREATE'
          EXPORTING
            requirements_item        = ls_item
          TABLES
            requirements_schedule_in = lt_requirements_schedule_in
            return                   = lt_return.
        LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A'.
          <fs_alv>-msg = <fs_alv>-msg && ls_return-message .
        ENDLOOP.
        IF sy-subrc <> 0.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
          l_msg = l_msg && '导入完成;' .
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          l_msg = l_msg && '导入失败;' .
        ENDIF.
      ELSE."修改

        CLEAR:gv_messg.
        PERFORM bdc_md62 TABLES lt_requirements_schedule_in[]  USING  ls_alv.
        IF gv_messg =  ''.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
          l_msg = l_msg && '导入完成;' .
        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          l_msg = l_msg && '导入失败;' .
        ENDIF.
      ENDIF.
      LOOP AT gt_alv ASSIGNING FIELD-SYMBOL(<gs_alv>)  WHERE matnr = ls_alv-matnr AND werks = ls_alv-werks ."AND mrp = ls_alv-mrp.
        <gs_alv>-msg = l_msg.
      ENDLOOP.

    ENDLOOP.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form del
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LT_ALV[]
*&---------------------------------------------------------------------*
FORM del  USING  lw_alv TYPE t_show.

  DATA:lt_return TYPE TABLE OF   bapiret2,
       ls_return TYPE bapiret2.
  DATA lv_mode TYPE c VALUE 'E'.

  opt-dismode  = 'N'. "不显示调用屏幕N
  opt-updmode  = 'A'. "异步
  opt-racommit = 'X'.

  REFRESH: gt_bdc,gt_bdcmsg,lt_return.

  PERFORM bdc_dynpro      USING 'RM60RR20' '1000'.

  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'TESTFLAG'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                'ONLI'.
  PERFORM bdc_field       USING 'WERKS-LOW' lw_alv-werks.

  PERFORM bdc_field       USING 'MATNR-LOW' lw_alv-matnr.

  PERFORM bdc_field       USING 'DATE1'     gv_endate.

  PERFORM bdc_field       USING 'HISTFLAG' 'X'.

  PERFORM bdc_field       USING 'INACFLAG' ''.

  PERFORM bdc_field       USING 'TESTFLAG' ''.


  CALL TRANSACTION 'MD74' USING gt_bdc OPTIONS FROM opt  MESSAGES INTO gt_bdcmsg.

  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
    TABLES
      imt_bdcmsgcoll = gt_bdcmsg
      ext_return     = lt_return.
  LOOP AT lt_return INTO ls_return WHERE type = 'E' OR  type = 'A'.
    gv_messg = gv_messg && ls_return-message.
  ENDLOOP.
  COMMIT WORK .
ENDFORM.

*&------
*---------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&      --> P_
*&---------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR gs_bdc.
  gs_bdc-program  = program.
  gs_bdc-dynpro   = dynpro.
  gs_bdc-dynbegin = 'X'.
  APPEND gs_bdc TO gt_bdc.
ENDFORM.

FORM bdc_field USING fnam fval.
  CLEAR gs_bdc.
  gs_bdc-fnam = fnam.
  gs_bdc-fval = fval.
  CONDENSE gs_bdc-fval .
  APPEND gs_bdc TO gt_bdc.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bdc_md62
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM bdc_md62  TABLES   lt_schedule_in     STRUCTURE bapisshdin USING  lw_alv TYPE t_show.
  DATA:ls_schedule_in LIKE   bapisshdin.
  DATA:lt_return TYPE TABLE OF   bapiret2,
       ls_return TYPE bapiret2.
  DATA lv_mode TYPE c VALUE 'E'.
  DATA: num TYPE i.
  DATA: field1 TYPE string.
  DATA: field2 TYPE string.
  DATA: field3 TYPE string.
  CLEAR:ls_schedule_in,num.
  opt-dismode  = 'N'. "不显示调用屏幕N
  opt-updmode  = 'A'. "异步
  opt-racommit = 'X'.

  REFRESH: gt_bdc,gt_bdcmsg,lt_return.

  PERFORM bdc_dynpro      USING 'SAPMM60X' '0106'.

  PERFORM bdc_field       USING 'BDC_CURSOR'   'AM60X-MATNR'.

  PERFORM bdc_field       USING 'BDC_OKCODE'  '=ANF1'.

  PERFORM bdc_field       USING 'AM60X-MATAW'  'X'.

  PERFORM bdc_field       USING 'AM60X-MATNR' lw_alv-matnr.

*  PERFORM bdc_field       USING 'RM60X-BERID' lw_alv-mrp.

  PERFORM bdc_field       USING 'AM60X-WERKS' lw_alv-werks.

  PERFORM bdc_field       USING 'AM60X-VERAW'   'X'.

  PERFORM bdc_field       USING 'RM60X-VERSB'  '00'.

  PERFORM bdc_field       USING 'RM60X-DATVE'  sy-datum.

  PERFORM bdc_field       USING 'RM60X-DATBE'  gv_endate.

  PERFORM bdc_field       USING 'RM60X-ENTLU'  'M'.


  PERFORM bdc_dynpro      USING 'SAPLM60E'    '0200'.

  PERFORM bdc_field       USING 'BDC_OKCODE'   '=PEIN'.

  PERFORM bdc_field       USING 'BDC_SUBSCR'   'SAPLM60E                                0204KOPF1'.

  PERFORM bdc_field       USING 'BDC_SUBSCR'   'SAPLM60E                                0202SUB2'.

  PERFORM bdc_field       USING 'BDC_CURSOR'  'PBPT-MATNR(01)'.


  PERFORM bdc_dynpro        USING 'SAPLM60E'    '0200'.

  PERFORM bdc_field       USING 'BDC_OKCODE'   '=SICH'.

  PERFORM bdc_field       USING 'BDC_SUBSCR'   'SAPLM60E                                0204KOPF1'.

  PERFORM bdc_field       USING 'BDC_SUBSCR'   'SAPLM60E                                0102SUB2'.

  PERFORM bdc_field       USING 'BDC_CURSOR'   'RM60E-PLNMG(01)'.

  PERFORM bdc_field       USING 'PBPT-VERVS'   'X'.

  LOOP AT  lt_schedule_in INTO ls_schedule_in.
    num = num + 1.
    field1 = 'RM60E-ENTLU(' &&  num  && ')'."日期类型
    field2 = 'RM60E-EDATU(' &&  num  && ')'."日期
    field3 = 'RM60E-PLNMG(' &&  num  && ')'."数量

    PERFORM bdc_field       USING  field1  'D'.

    PERFORM bdc_field       USING  field2  ls_schedule_in-req_date.

    PERFORM bdc_field       USING  field3   ls_schedule_in-req_qty.

  ENDLOOP.

  CALL TRANSACTION 'MD62' USING gt_bdc OPTIONS FROM opt  MESSAGES INTO gt_bdcmsg.

  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
    TABLES
      imt_bdcmsgcoll = gt_bdcmsg
      ext_return     = lt_return.
  LOOP AT lt_return INTO ls_return WHERE type = 'E' OR  type = 'A'.
    gv_messg = gv_messg && ls_return-message.
  ENDLOOP.
  COMMIT WORK .

ENDFORM.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值