CO01批量创建工单BAPI/CO40计划工单转生产订单BDC

FORM frm_post_data .

  DATA:lt_rows TYPE lvc_t_roid,
       ls_rows TYPE lvc_s_roid.
  DATA:ls_orderdata TYPE bapi_pp_order_create.
  DATA:ls_return       TYPE bapiret2,
       lv_order_number TYPE bapi_order_key-order_number,
       ls_zppt025      TYPE zppt025.

  "获取选中行
  CALL METHOD go_grid->get_selected_rows
    IMPORTING
      et_row_no = lt_rows.
  IF lt_rows IS INITIAL.
    MESSAGE '没有选中行' TYPE 'S' DISPLAY LIKE 'E'.
    RETURN.
  ELSE.

    LOOP AT lt_rows INTO ls_rows.

      READ TABLE gt_data INTO gs_data INDEX ls_rows-row_id.
      IF sy-subrc EQ 0 AND gs_data-icon IS INITIAL.
        CLEAR:ls_orderdata,ls_return.
        "物料编码
        ls_orderdata-material_long = gs_data-matnr.
        "交货工厂
        ls_orderdata-plant = gs_data-werks_jh.
        "订单类型
        ls_orderdata-order_type = gs_data-auart.
        "数量
        ls_orderdata-quantity = gs_data-gamng.
        "订单开始日期
        ls_orderdata-basic_start_date = gs_data-gstrp.
        "订单结束日期
        ls_orderdata-basic_end_date = gs_data-gltrp.

        "调用BAPI创建工单
        CALL FUNCTION 'BAPI_PRODORD_CREATE'
          EXPORTING
            orderdata    = ls_orderdata
          IMPORTING
            return       = ls_return
            order_number = gs_data-aufnr.

        IF ls_return-type = 'E'.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

          gs_data-icon = icon_red_light.
          gs_data-msg = ls_return-message.

        ELSE.
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.

          "工单创建成功后,更新采购订单和行项目
          DO 50 TIMES.
            SELECT COUNT(*)
              FROM aufk
             WHERE aufnr EQ gs_data-aufnr.
            IF sy-subrc EQ 0.
              EXIT.
            ELSE.
              WAIT UP TO '0.3' SECONDS.
            ENDIF.
          ENDDO.

          "更新采购订单和行
          UPDATE aufk SET /zpc1/zglxd = gs_data-/zpc1/zglxd
                          /zpc1/zglhh = gs_data-/zpc1/zglhh
                    WHERE aufnr = gs_data-aufnr.
          IF sy-subrc EQ 0.
            COMMIT WORK AND WAIT.
          ENDIF.

          ls_zppt025 = CORRESPONDING #( gs_data ).

          "更新自建表数据
          MODIFY zppt025 FROM ls_zppt025.
          COMMIT WORK AND WAIT.

          gs_data-icon = icon_green_light.
          gs_data-msg = '工单创建成功'.

        ENDIF.
        MODIFY gt_data FROM gs_data INDEX ls_rows-row_id TRANSPORTING icon msg aufnr.
        CLEAR:gs_data.
      ENDIF.
      CLEAR:ls_rows.
    ENDLOOP.
  ENDIF.
ENDFORM.

 计划工单转生产订单 采用BDC

DATA:   bdcdata LIKE bdcdata    OCCURS 0 WITH HEADER LINE.
DATA:   messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
*&---------------------------------------------------------------------*
*& Form frm_PRODORD_FROM_PLORD
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> GS_DATA
*&---------------------------------------------------------------------*
FORM frm_prodord_from_plord  USING    ps_data TYPE ty_data.

  DATA: lt_return TYPE TABLE of BAPIRET2.
  DATA:ls_return TYPE bapiret2.

  DATA:lv_mode TYPE c.

  REFRESH : bdcdata, messtab.

  PERFORM bdc_dynpro      USING 'SAPLCOKO1' '0150'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=ENTK'.
  PERFORM bdc_field       USING 'AFPOD-PLNUM' ps_data-plnum.
  PERFORM bdc_field       USING 'AFPOD-TPAUF' 'X'.
  PERFORM bdc_field       USING 'AUFPAR-PP_AUFART' ps_data-auart.

  PERFORM bdc_dynpro      USING 'SAPLCOUP' '1000'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '/00'.
  PERFORM bdc_field       USING 'ABBT-GSMNG(01)' ps_data-gamng.

  IF ps_data-gstrp is NOT INITIAL.
    PERFORM bdc_field       USING 'ABBT-PSTTR(01)' ps_data-gstrp.
  ENDIF.

  IF ps_data-gltrp is NOT INITIAL.
    PERFORM bdc_field       USING 'ABBT-PEDTR(01)' ps_data-gltrp.
  ENDIF.

  PERFORM bdc_dynpro      USING 'SAPLCOUP' '1000'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=GEN'.

  PERFORM bdc_dynpro      USING 'SAPLCOUP' '1000'.
  PERFORM bdc_field       USING 'BDC_OKCODE' '=BU'.

  lv_mode = 'N'.

  CALL TRANSACTION 'CO40' USING bdcdata
        MODE   lv_mode
        UPDATE 'S'
        MESSAGES INTO messtab.

  CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
    TABLES
      imt_bdcmsgcoll = messtab
      ext_return     = lt_return.

  LOOP AT lt_return INTO ls_return WHERE type = 'E' OR TYPE = 'A'.
    ps_data-zmsg = ps_data-zmsg && ls_return-message.
  ENDLOOP.
  IF ps_data-zmsg IS NOT INITIAL.
    ps_data-type = 'E'.
  ELSEIF ps_data-zmsg IS INITIAL.

    READ TABLE lt_return INTO LS_RETURN WITH KEY TYPE = 'S' ID = 'COTU' NUMBER = '014' .
    IF SY-subrc = 0.
      ps_data-TYPE = LS_RETURN-TYPE.
      ps_data-zmsg = LS_RETURN-MESSAGE.
      ps_data-aufnr = LS_RETURN-message_v2.

       "工单创建成功后,添加工单的长文本
      PERFORM frm_save_text USING ps_data-aufnr ps_data-ZBZZD.
    ENDIF.

  ENDIF.

ENDFORM.
*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
  " IF FVAL <> NODATA.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.

  bdcdata-fval = fval.
  IF FNAM = 'ABBT-GSMNG(01)'.
    CONDENSE bdcdata-fval.
  ENDIF.
  APPEND bdcdata.
  "  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form frm_save_text
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> PS_DATA_AUFNR
*&---------------------------------------------------------------------*
FORM frm_save_text  USING    pv_aufnr pv_zbzzd.

  DATA: lv_tdname TYPE THEAD-TDNAME,
        lt_lines  TYPE TABLE of TLINE,
        ls_lines  TYPE tline.

  DATA:LV_ZBZZD TYPE char300.

  CHECK pv_zbzzd is NOT INITIAL.

  LV_ZBZZD = pv_zbzzd.

  lv_tdname = sy-mandt && pv_aufnr.

  WHILE LV_ZBZZD <> '' .
    CLEAR ls_lineS .
    ls_lineS-tdformat = '*'.
    ls_lineS-tdline = LV_ZBZZD+0(132).
    APPEND ls_lineS TO lt_lineS .
    LV_ZBZZD  = LV_ZBZZD+132(132) .
  ENDWHILE .


  WAIT UP TO '0.5' SECONDS.

  CALL FUNCTION 'CREATE_TEXT'
  EXPORTING
    fid       = 'KOPF'
    flanguage = sy-langu
    fname     = lv_tdname
    fobject   = 'AUFK'
    SAVE_DIRECT = 'X'
  TABLES
    flines    = lt_lines
  EXCEPTIONS
    no_init   = 1
    no_save   = 2
    OTHERS    = 3.

  IF sy-subrc = 0.
    "SAP bug,需暴力更新值才能CO03显示长文本
    UPDATE aufk SET ltext = sy-langu WHERE aufnr EQ pv_aufnr . "CO03 显示长文本.
  ENDIF.

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值