Skip to content

工作中心

使用 CL_PP_WORK_CENTER_BO 导入工作中心

上面类通过封装 CRAP_WORKCENTER_CREATE 实现,并多了返回信息

示例代码
TYPES:
  BEGIN OF ty_data,
    " 创建工作中心必填字段
    arbpl TYPE crhd-arbpl, " 工作中心
    werks TYPE crhd-werks, " 工厂
    kostl TYPE crco-kostl, " 成本中心
    " 处理返回
    mtype TYPE bapi_mtype,
    msg   TYPE bapi_msg,
  END OF ty_data.
DATA lt_data TYPE STANDARD TABLE OF ty_data.

DATA ls_crhd_api01 TYPE crhd_api01.
DATA ls_crhd_api02 TYPE crhd_api02.
DATA ls_crhd_api03 TYPE crhd_api03.
DATA ls_crhd_api05 TYPE crhd_api05.

DATA lt_kapa_api01 TYPE STANDARD TABLE OF kapa_api01.
DATA lt_kapa_api02 TYPE STANDARD TABLE OF kapa_api02.
DATA lt_crhd_api04 TYPE STANDARD TABLE OF crhd_api04.
DATA lt_crco_api01 TYPE STANDARD TABLE OF crco_api01.

DATA ls_kapa_api01 TYPE kapa_api01.
DATA ls_kapa_api02 TYPE kapa_api02.
DATA ls_crhd_api04 TYPE crhd_api04.
DATA ls_crco_api01 TYPE crco_api01.

DATA lt_return TYPE bapiret2_tab.

DATA l_mtype TYPE bapi_mtype.
DATA l_msg TYPE bapi_msg.

" 查找工厂对应日历
IF lt_data[] IS NOT INITIAL.
  SELECT
    werks,
    fabkl
    FROM t001w
    FOR ALL ENTRIES IN @lt_data[]
    WHERE werks = @lt_data-werks
    INTO TABLE @DATA(lt_t001w).
  SORT lt_t001w BY werks.
  DELETE ADJACENT DUPLICATES FROM lt_t001w COMPARING werks.
ENDIF.

" 分组处理
LOOP AT lt_data INTO DATA(ls_data) WHERE mtype <> 'E'
  GROUP BY (
    arbpl = ls_data-arbpl
    werks = ls_data-werks
    group_size = GROUP SIZE
    ) INTO DATA(ls_data_grp).

  " 重复代码,退出时写入处理结果
  DATA lr_data LIKE REF TO ls_data.
  DEFINE _contiune.
    CLEAR l_mtype.
    CLEAR l_msg.
    l_mtype = &1.
    l_msg = &2.
    LOOP AT GROUP ls_data_grp REFERENCE INTO lr_data.
      lr_data->mtype = l_mtype.
      lr_data->msg = l_msg.
    ENDLOOP.
    CONTINUE.
  END-OF-DEFINITION.

  " 取工厂相关数据
  READ TABLE lt_t001w INTO DATA(ls_t001w) WITH KEY werks = ls_data_grp-werks BINARY SEARCH.
  IF sy-subrc <> 0.
    l_msg = |工厂{ ls_data_grp-werks }不存在|.
    _contiune 'E' l_msg.
  ENDIF.

  CLEAR ls_crhd_api01.
  ls_crhd_api01-arbpl = ls_data_grp-arbpl.
  ls_crhd_api01-werks = ls_data_grp-werks.
  ls_crhd_api01-verwe = '0001'.
  ls_crhd_api01-ktext = |{ ls_data_grp-arbpl }-{ ls_data_grp-werks }|. " 工作中心文本

  CLEAR ls_crhd_api02.
  ls_crhd_api02-planv = '009'.
  ls_crhd_api02-veran = 'ZZ'.
  ls_crhd_api02-vgwts = 'ZZZZ'.

  CLEAR ls_crhd_api03.
  ls_crhd_api03-steus = 'ZZ01'.
  ls_crhd_api03-vge01 = 'STD'. " h - 内码
  ls_crhd_api03-vge02 = 'STD'. " h - 内码
  ls_crhd_api03-vge03 = 'STD'. " h - 内码
  ls_crhd_api03-vge04 = 'KG'. " kg - 内码
  ls_crhd_api03-vge05 = 'STD'. " h - 内码
  ls_crhd_api03-vge06 = 'KG'. " kg - 内码

  CLEAR ls_crhd_api05.
  ls_crhd_api05-kapart = '001'.
  ls_crhd_api05-fort2 = 'ZZ_PP'.

  CLEAR lt_kapa_api01.
  CLEAR ls_kapa_api01.
  ls_kapa_api01-canum = '1'.
  ls_kapa_api01-kapart = '001'.
  " 这个不填,下面FM才会会自动创建能力
  " 或者手工调用CRAP_CAPACITY_CREATE创建能力
  " ls_kapa_api01-kapname = '机器'.
  ls_kapa_api01-werks = ls_data_grp-werks.
  ls_kapa_api01-ktext = '机器'.
  ls_kapa_api01-kapid = ls_t001w-fabkl. " 使用工厂日历
  INSERT ls_kapa_api01 INTO TABLE lt_kapa_api01.

  CLEAR lt_kapa_api02.
  CLEAR ls_kapa_api02.
  ls_kapa_api02-canum = '1'.
  ls_kapa_api02-planr = 'ZZ'.
  ls_kapa_api02-kalid = ls_t001w-fabkl.
  ls_kapa_api02-meins = 'STD'. " h - 内码
  ls_kapa_api02-begzt = '000000'.
  ls_kapa_api02-endzt = '240000'.
  ls_kapa_api02-ngrad = '100'.
  ls_kapa_api02-aznor = ls_data_grp-group_size. " 有多少行项目
  INSERT ls_kapa_api02 INTO TABLE lt_kapa_api02.

  CLEAR lt_crhd_api04.
  CLEAR ls_crhd_api04.
  ls_crhd_api04-canum = '1'.
  ls_crhd_api04-fork2 = 'ZZ_PP'.
  INSERT ls_crhd_api04 INTO TABLE lt_crhd_api04.

  CLEAR lt_crco_api01.
  LOOP AT GROUP ls_data_grp INTO ls_data.
    CLEAR ls_crco_api01.
    ls_crco_api01-kostl = ls_data-kostl.
    ls_crco_api01-begda = sy-datum.
    ls_crco_api01-endda = '99991231'.

    ls_crco_api01-lstar1 = '1000'.
    ls_crco_api01-lstar_ref1 = 'X'.
    ls_crco_api01-leinh1 = 'STD'. " h - 内码
    ls_crco_api01-forml1 = 'ZZ_CO1'.

    ls_crco_api01-lstar2 = '2000'.
    ls_crco_api01-lstar_ref2 = 'X'.
    ls_crco_api01-leinh2 = 'STD'. " h - 内码
    ls_crco_api01-forml2 = 'ZZ_CO2'.

    ls_crco_api01-lstar3 = '3000'.
    ls_crco_api01-lstar_ref3 = 'X'.
    ls_crco_api01-leinh3 = 'STD'. " h - 内码
    ls_crco_api01-forml3 = 'ZZ_CO3'.

    ls_crco_api01-lstar4 = '4000'.
    ls_crco_api01-lstar_ref4 = 'X'.
    ls_crco_api01-leinh4 = 'KG'. " kg - 内码
    ls_crco_api01-forml4 = 'ZZ_CO4'.

    ls_crco_api01-lstar5 = '5000'.
    ls_crco_api01-lstar_ref5 = 'X'.
    ls_crco_api01-leinh5 = 'STD'. " h - 内码
    ls_crco_api01-forml5 = 'ZZ_CO5'.

    ls_crco_api01-lstar6 = '6000'.
    ls_crco_api01-lstar_ref6 = 'X'.
    ls_crco_api01-leinh6 = 'KG'. " kg - 内码
    ls_crco_api01-forml6 = 'ZZ_CO6'.

    INSERT ls_crco_api01 INTO TABLE lt_crco_api01.
  ENDLOOP.

  " 可能不同行只是设备码不一样,而成本中心是一致的
  SORT lt_crco_api01 BY kostl.
  DELETE ADJACENT DUPLICATES FROM lt_crco_api01 COMPARING kostl.

* CALL FUNCTION 'CRAP_WORKCENTER_CREATE'
* EXPORTING
* in_crhd_api01 = ls_crhd_api01
* in_crhd_api02 = ls_crhd_api02
* in_crhd_api03 = ls_crhd_api03
* in_crhd_api05 = ls_crhd_api05
* test          = i_test
* TABLES
* in_kapa_api01 = lt_kapa_api01
* in_kapa_api02 = lt_kapa_api02
* in_crhd_api04 = lt_crhd_api04
* in_crco_api01 = lt_crco_api01.

  " 换个标准带返回的,方便展示消息
  DATA(lo_work_center) = cl_pp_work_center_bo=>get_instance( ).
  CLEAR lt_return.
  lo_work_center->create_work_center(
    EXPORTING
      is_crhd_api01 = ls_crhd_api01
      is_crhd_api02 = ls_crhd_api02
      is_crhd_api03 = ls_crhd_api03
      it_crhd_api04 = lt_crhd_api04
      is_crhd_api05 = ls_crhd_api05
      it_kapa_api01 = lt_kapa_api01
      it_kapa_api02 = lt_kapa_api02
      it_crco_api01 = lt_crco_api01
    IMPORTING
      et_return     = lt_return
  ).

  CLEAR l_mtype.
  CLEAR l_msg.
  LOOP AT lt_return INTO DATA(ls_return) WHERE type CA 'EA'.
    l_msg = |{ l_msg }{ ls_return-message };|.
  ENDLOOP.
  IF sy-subrc = 0.
    _contiune 'E' l_msg.
  ELSE.
    _contiune 'S' '工作中心导入成功'.
  ENDIF.

ENDLOOP.