FUNCTION zmm_oatosap_077.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(IV_OA_NUM) TYPE ZEPP_OA_NUM
*" VALUE(IV_ZAFNAM) TYPE AFNAM
*" EXPORTING
*" VALUE(E_STATUS) TYPE BAPI_MTYPE
*" VALUE(E_MESSAGE) TYPE BAPI_MSG
*" TABLES
*" T_DATA_BASIS STRUCTURE ZSMM_057
*" T_DATA_FACTORY STRUCTURE ZSMM_058
*"----------------------------------------------------------------------
zfmparavalsave1 .
zfmparavalsave2 'START'.
DATA:ls_headdata TYPE bapimathead,
ls_clientdata TYPE bapi_mara,
ls_clientdatax TYPE bapi_marax,
lt_materialdescription TYPE TABLE OF bapi_makt,
ls_materialdescription TYPE bapi_makt,
lt_materiallongtext TYPE TABLE OF bapi_mltx ,
ls_materiallongtext TYPE bapi_mltx ,
ls_storagelocationdata TYPE bapi_mard,
ls_storagelocationdatax TYPE bapi_mardx,
ls_return TYPE bapiret2,
ls_plantdata TYPE bapi_marc,
ls_plantdatax TYPE bapi_marcx,
ls_valuationdata TYPE bapi_mbew,
ls_valuationdatax TYPE bapi_mbewx,
lt_returnmessages TYPE TABLE OF bapi_matreturn2.
DATA:ls_bapi_te_mara TYPE bapi_te_mara,
ls_bapi_te_maras(960) TYPE c,
ls_bapi_te_marax TYPE bapi_te_marax,
ls_bapi_te_maraxs(960) TYPE c,
ls_extensionin TYPE bapiparex ,
lt_extensionin TYPE TABLE OF bapiparex,
ls_extensioninx TYPE bapiparexx,
lt_extensioninx TYPE TABLE OF bapiparexx.
DATA:lv_key TYPE bapi1003_key-object,
lv_table TYPE bapi1003_key-objecttable VALUE 'MARA',
lv_class TYPE bapi1003_key-classnum VALUE 'Z_BATCH_CLASS',
lv_class_type TYPE bapi1003_key-classtype VALUE '022',
lv_status TYPE bapi1003_key-status,
lt_num LIKE bapi1003_alloc_values_num OCCURS 0 WITH HEADER LINE,
lt_char LIKE bapi1003_alloc_values_char OCCURS 0 WITH HEADER LINE,
lt_curr LIKE bapi1003_alloc_values_curr OCCURS 0 WITH HEADER LINE,
lt_ret LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA l_object LIKE bapi1003_key-object.
DATA ls_mara TYPE mara.
TYPES:BEGIN OF ty_class,
klart LIKE klah-klart, "类别种类
class LIKE klah-class, "类号
END OF ty_class.
DATA: ls_class TYPE ty_class,
lt_class TYPE STANDARD TABLE OF ty_class.
LOOP AT t_data_basis WHERE status <> 'S'.
SELECT
matnr
INTO TABLE @DATA(lt_mara_check)
FROM mara WHERE matnr = @t_data_basis-matnr.
IF lt_mara_check IS NOT INITIAL.
t_data_basis-status = 'E'.
t_data_basis-message = '物料基本视图已经存在!'.
MODIFY t_data_basis.
EXIT.
ENDIF.
IF t_data_basis-mtart = 'Z013'.
IF t_data_basis-zmatnr IS INITIAL or t_data_basis-zvcode IS INITIAL or t_data_basis-zwafer_type IS INITIAL.
t_data_basis-status = 'E'.
t_data_basis-message = 'WAFER类物料,WAFER TYPE、物料编码(不含简码)、供应商简码字段必填!' .
MODIFY t_data_basis.
EXIT.
ENDIF.
ENDIF.
* IF t_data_basis-matkl = 'M013' OR t_data_basis-matkl = 'M014'.
*
* ENDIF.
CLEAR ls_headdata.
ls_headdata-material = t_data_basis-matnr."物料号
ls_headdata-ind_sector = t_data_basis-mbrsh."'M'."行业领域 MARA-MBRSH
ls_headdata-matl_type = t_data_basis-mtart.".'Z011'."物料类型 MARA-MTART
ls_headdata-basic_view = 'X'.
ls_headdata-storage_view = 'X'.
CLEAR ls_clientdata.
ls_clientdata-matl_group = t_data_basis-matkl."'SC01'."物料组MARA-MATKL
ls_clientdata-base_uom = t_data_basis-meins. " 基本计量单位MARA-MEINS
ls_clientdata-division = t_data_basis-spart. "产品组 MARA-SPART
ls_clientdata-qm_procmnt = t_data_basis-qmpur. "产品组 MARA-SPART
ls_clientdata-minremlife = t_data_basis-mhdrz."最短剩余货架寿命 MARA-MHDRZ
ls_clientdata-shelf_life = t_data_basis-mhdhb."总货架寿命
ls_clientdata-period_ind_expiration_date = t_data_basis-iprkz. " 货架寿命到期日的期间标识
ls_clientdata-old_mat_no = t_data_basis-bismt. "旧物料号
ls_clientdata-po_unit = t_data_basis-bstme. ""采购订单的计量单位 MARA-BSTME
ls_clientdata-qm_procmnt = t_data_basis-qmpur. "质量数据 MARA-QMPUR
CLEAR ls_clientdatax.
ls_clientdatax-matl_group = 'X'."物料组MARA-MATKL
ls_clientdatax-base_uom = 'X'. "基本计量单位MARA-MEINS
ls_clientdatax-division = 'X'. "产品组 MARA-SPART
ls_clientdatax-minremlife = 'X'."最短剩余货架寿命 MARA-MHDRZ
ls_clientdatax-shelf_life = 'X'."总货架寿命
ls_clientdatax-period_ind_expiration_date = 'X'."货架寿命到期日的期间标识
ls_clientdatax-old_mat_no = 'X'.""旧物料号
ls_clientdatax-po_unit = 'X'.""旧物料号
ls_clientdatax-qm_procmnt = 'X'.""旧物料号
CLEAR: lt_materialdescription,ls_materialdescription.
ls_materialdescription-matl_desc = t_data_basis-maktx_c. "物料描述取text2字段前40位字符
ls_materialdescription-langu = '1'.
APPEND ls_materialdescription TO lt_materialdescription.
IF t_data_basis-maktx_e IS NOT INITIAL.
ls_materialdescription-matl_desc = t_data_basis-maktx_e."英文物料描述MAKT-MAKTX
ls_materialdescription-langu = 'E'.
APPEND ls_materialdescription TO lt_materialdescription.
ENDIF.
"物料长文本赋值
CLEAR:lt_materiallongtext,ls_materiallongtext.
ls_materiallongtext-applobject = 'MATERIAL'.
ls_materiallongtext-text_name = t_data_basis-matnr.
ls_materiallongtext-text_id = 'GRUN'.
ls_materiallongtext-langu = sy-langu.
ls_materiallongtext-format_col = '*'.
ls_materiallongtext-text_line = t_data_basis-maktx_c.
APPEND ls_materiallongtext TO lt_materiallongtext.
CLEAR: ls_extensionin,ls_extensioninx,lt_extensionin,lt_extensioninx,
ls_bapi_te_mara,ls_bapi_te_marax,ls_bapi_te_maras,ls_bapi_te_maraxs.
ls_bapi_te_mara-material = t_data_basis-matnr.
ls_bapi_te_mara-zts = t_data_basis-zts.
ls_bapi_te_mara-zwafer_type = t_data_basis-zwafer_type.
ls_bapi_te_mara-zmatnr = t_data_basis-zmatnr.
ls_bapi_te_mara-zvcode = t_data_basis-zvcode.
ls_bapi_te_mara-zwflx = t_data_basis-zwflx.
ls_bapi_te_mara-zsfkyr = t_data_basis-zsfkyr.
ls_bapi_te_mara-zsfkp = t_data_basis-zsfkp.
ls_bapi_te_mara-zgross_die = t_data_basis-zgross_die.
ls_bapi_te_marax-material = t_data_basis-matnr.
ls_bapi_te_marax-zts = 'X'.
ls_bapi_te_marax-zwafer_type = 'X'.
ls_bapi_te_marax-zmatnr = 'X'.
ls_bapi_te_marax-zvcode = 'X'.
ls_bapi_te_marax-zwflx = 'X'.
ls_bapi_te_marax-zsfkyr = 'X'.
ls_bapi_te_marax-zsfkp = 'X'.
ls_bapi_te_marax-zgross_die = 'X'.
CALL METHOD cl_abap_container_utilities=>fill_container_c
EXPORTING
im_value = ls_bapi_te_mara
IMPORTING
ex_container = ls_bapi_te_maras.
ls_extensionin-structure = 'BAPI_TE_MARA'.
ls_extensionin-valuepart1 = ls_bapi_te_maras+0(240).
ls_extensionin-valuepart2 = ls_bapi_te_maras+240(240).
APPEND ls_extensionin TO lt_extensionin.
CALL METHOD cl_abap_container_utilities=>fill_container_c
EXPORTING
im_value = ls_bapi_te_marax
IMPORTING
ex_container = ls_bapi_te_maraxs.
ls_extensioninx-structure = 'BAPI_TE_MARAX'.
ls_extensioninx-valuepart1 = ls_bapi_te_maraxs+0(240).
ls_extensioninx-valuepart2 = ls_bapi_te_maraxs+240(240).
APPEND ls_extensioninx TO lt_extensioninx.
CLEAR:ls_return,lt_returnmessages.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = ls_headdata
clientdata = ls_clientdata
clientdatax = ls_clientdatax
IMPORTING
return = ls_return
TABLES
materialdescription = lt_materialdescription
materiallongtext = lt_materiallongtext
returnmessages = lt_returnmessages
extensionin = lt_extensionin
extensioninx = lt_extensioninx.
IF ls_return-type = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
t_data_basis-status = 'S'.
t_data_basis-message = '物料基本视图创建成功!'.
"物料主数据传SRM
CLEAR ls_mara.
ls_mara-matnr = t_data_basis-matnr.
CALL FUNCTION 'ZMM_SAPTOSRM_010'
STARTING NEW TASK 'lv_srm_task'
EXPORTING
i_mara = ls_mara
* IV_UPD_MARA =
* I_MARC =
* IV_UPD_MARC =
* IV_UPD_MAKT =
* IV_UPD_MARM =
iv_zsynchrono = 'Z'
* IMPORTING
* E_STATUS =
* E_MESSAGE =
* TABLES
* T_MAKT =
* T_MARM =
.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
t_data_basis-status = 'E'.
t_data_basis-message = ls_return-message && ls_return-message_v1 && ls_return-message_v2
&& ls_return-message_v3 && ls_return-message_v4.
ENDIF.
CLEAR :lt_materialdescription,ls_materialdescription,lt_materiallongtext,ls_materiallongtext,lt_returnmessages,
lt_extensionin,ls_extensionin,lt_extensioninx,ls_extensioninx,ls_headdata,ls_clientdata,
ls_clientdatax.
IF ls_return-type = 'S'.
"读取该物料有没扩充分类视图
l_object = t_data_basis-matnr.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = l_object
objecttable = 'MARA'
classnum = t_data_basis-class
classtype = t_data_basis-klart
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_ret.
REFRESH:lt_num[],
lt_char[],
lt_curr[].
CLEAR:lt_num,
lt_char,
lt_curr.
"分类特性
"供应商料号
lt_char-charact = 'VMAT'.
lt_char-value_char = t_data_basis-vmat.
APPEND lt_char.
"供应商
lt_char-charact = 'VENDOR'.
lt_char-value_char = t_data_basis-vendor.
APPEND lt_char.
"专案名称
lt_char-charact = 'CASENAME'.
lt_char-value_char = t_data_basis-casename.
APPEND lt_char.
"是否保税
lt_char-charact = 'BONDED'.
lt_char-value_char = t_data_basis-is_bonded.
APPEND lt_char.
"备注
lt_char-charact = 'REMARK'.
lt_char-value_char = t_data_basis-remark.
APPEND lt_char.
"客户物料号(P/N)
lt_char-charact = 'CPARTID'.
lt_char-value_char = t_data_basis-cpartid.
APPEND lt_char.
"封装形式
lt_char-charact = 'PTYPE'.
lt_char-value_char = t_data_basis-ptype.
APPEND lt_char.
"location
lt_char-charact = 'LOCAT'.
lt_char-value_char = t_data_basis-location.
APPEND lt_char.
READ TABLE lt_ret WITH KEY type = 'S'
id = 'CL'
number = 731.
"当没有创建的,进入修改模式
IF sy-subrc <> 0.
"删除已有分类
REFRESH lt_ret[].
SELECT
a~klart "将已有分类与类号从表中取出
a~class
INTO TABLE lt_class
FROM klah AS a
JOIN kssk AS b ON a~clint = b~clint
WHERE b~objek = l_object.
"一个类号下只允许存在一个种类,所以需要删除该类号下已存在的种类
LOOP AT lt_class INTO ls_class WHERE klart = t_data_basis-klart.
CALL FUNCTION 'BAPI_OBJCL_DELETE' "删除已有分类
EXPORTING
objectkey = l_object
objecttable = 'MARA'
classnum = t_data_basis-class
classtype = t_data_basis-klart
* CHANGENUMBER =
* KEYDATE = SY-DATUM
TABLES
return = lt_ret.
READ TABLE lt_ret WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
REFRESH lt_ret[].
CLEAR: ls_class.
ENDLOOP.
"分类视图创建
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = l_object
objecttablenew = 'MARA'
classnumnew = t_data_basis-class
classtypenew = t_data_basis-klart
status = '1'
no_default_values = 'X'
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_ret.
READ TABLE lt_ret WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
t_data_basis-status = lt_ret-type.
CONCATENATE '物料' t_data_basis-matnr '基本视图维护成功!' INTO t_data_basis-message.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
t_data_basis-status = lt_ret-type.
CONCATENATE '物料' t_data_basis-matnr '基本视图维护失败!' INTO t_data_basis-message.
ENDIF.
ELSE.
"修改模式
REFRESH lt_ret[].
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = l_object
objecttable = 'MARA'
classnum = t_data_basis-class
classtype = t_data_basis-klart
no_default_values = 'X'
TABLES
allocvaluesnumnew = lt_num
allocvaluescharnew = lt_char
allocvaluescurrnew = lt_curr
return = lt_ret.
READ TABLE lt_ret WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
t_data_basis-status = lt_ret-type.
CONCATENATE '物料' t_data_basis-matnr '基本视图维护成功!' INTO t_data_basis-message.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
t_data_basis-status = lt_ret-type.
CONCATENATE '物料' t_data_basis-matnr '基本视图维护失败!' INTO t_data_basis-message.
ENDIF.
ENDIF.
ELSE.
ENDIF.
MODIFY t_data_basis.
WAIT UP TO '0.1' SECONDS.
ENDLOOP.
LOOP AT t_data_factory WHERE status <> 'S'.
IF t_data_factory-vprsv = 'S' AND t_data_factory-mmsta <> '99'.
t_data_factory-status = 'E'.
t_data_factory-message = '价格控制为S,物料状态必为99!'.
MODIFY t_data_factory.
CONTINUE.
ENDIF.
IF t_data_factory-vprsv = 'V' AND t_data_factory-ncost <> 'X'.
t_data_factory-status = 'E'.
t_data_factory-message = '价格控制为V时,无成本核算不能为空!'.
MODIFY t_data_factory.
CONTINUE.
ENDIF.
SELECT
werks,
matnr
INTO TABLE @DATA(lt_marc_check)
FROM marc WHERE matnr = @t_data_factory-matnr AND werks = @t_data_factory-werks.
IF lt_marc_check IS NOT INITIAL.
t_data_factory-status = 'E'.
t_data_factory-message = '物料工厂视图已经存在!'.
MODIFY t_data_factory.
EXIT.
ENDIF.
CLEAR :ls_headdata.
ls_headdata-material = t_data_factory-matnr."物料号
ls_headdata-work_sched_view = 'X'.
ls_headdata-purchase_view = 'X'.
ls_headdata-mrp_view = 'X'.
ls_headdata-quality_view = 'X'.
ls_headdata-storage_view = 'X'.
ls_headdata-account_view = 'X'.
ls_headdata-cost_view = 'X'.
"财务数据
CLEAR ls_valuationdata .
ls_valuationdata-val_class = t_data_factory-bklas. " MBEW-BKLAS 评估类
ls_valuationdata-price_ctrl = t_data_factory-vprsv. " MBEW-VPRSV 价格控制指示符
ls_valuationdata-ml_settle = t_data_factory-mlast. " MBEW-MLAST 价格确定
ls_valuationdata-price_unit = t_data_factory-peinh. " MBEW-PEINH 价格单位
ls_valuationdata-qty_struct = t_data_factory-ekalr. " MBEW-EKALR 用QS的成本估算
ls_valuationdata-orig_mat = t_data_factory-hkmat. " MBEW-HKMAT 物料相关的源
ls_valuationdata-overhead_grp = t_data_factory-kosgr. " MBEW-KOSGR 成本核算间接费用组
* valuationdata-plndprice1 = i_data2-zplp1. " MBEW-ZPLP1计划价格 1
* valuationdata-plndprdate1 = i_data2-zpld1. " MBEW-ZPLD1计划价格日期1
ls_valuationdata-val_area = t_data_factory-werks. " 评估范围
*
CLEAR ls_valuationdatax .
ls_valuationdatax-val_class = 'X'." MBEW-BKLAS 评估类
ls_valuationdatax-price_ctrl = 'X'." MBEW-VPRSV 价格控制指示符
ls_valuationdatax-ml_settle = 'X'." MBEW-MLAST 价格确定
ls_valuationdatax-price_unit = 'X'." MBEW-PEINH 价格单位
ls_valuationdatax-qty_struct = 'X'." MBEW-PEINH 用QS的成本估算
ls_valuationdatax-orig_mat = 'X'." MBEW-HKMAT 物料相关的源
ls_valuationdatax-overhead_grp = 'X'." MBEW-KOSGR 成本核算间接费用组
* valuationdatax-plndprice1 = 'X'." MBEW-ZPLP1 计划价格 1
* valuationdatax-plndprdate1 = 'X'." MBEW-ZPLD1 计划价格日期1
ls_valuationdatax-val_area = t_data_factory-werks."评估范围
CLEAR ls_plantdata .
ls_plantdata-plant = t_data_factory-werks. " MARC-WERKS 工厂
ls_plantdata-pur_group = t_data_factory-ekgrp. " MARC-EKGRP 采购组
ls_plantdata-auto_p_ord = t_data_factory-kautb. " MARC-KAUTB 采购数据
ls_plantdata-gr_pr_time = t_data_factory-webaz. " MARC-WEBAZ 收货处理时间
ls_plantdata-batch_mgmt = t_data_factory-xchpf. " MARC-XCHPF 标识:批次管理需求
ls_plantdata-minlotsize = t_data_factory-bstmi."'EX'. " MARC-BSTMI 最小批量大小(BTCI)
ls_plantdata-round_val = t_data_factory-bstrf. " MARC-BSTRF 舍入值
ls_plantdata-sloc_exprc = t_data_factory-lgfsb."'SF01'. " MARC-LGFSB 外部采购仓储地点
ls_plantdata-plnd_delry = t_data_factory-plifz. " MARC-PLIFZ 计划交货时间(天数)
ls_plantdata-mrp_type = t_data_factory-dismm."'PD'. " MARC-DISMM MRP 类型
* plantdata-reorder_pt = i_data2-minbe. " MARC-MINBE 再订货点 "
ls_plantdata-mrp_ctrler = t_data_factory-dispo."'001'. " MARC-DISPO MRP 控制者
ls_plantdata-lotsizekey = t_data_factory-disls."'EX'. " MARC-DISLS 批量大小
* plantdata-assy_scrap = i_data2-ausss. " MARC-AUSSS 装配报废t-text_id = 'GRUN'.
IF t_data_factory-beskz IS NOT INITIAL.
ls_plantdata-proc_type = t_data_factory-beskz."'E'. " MARC-BESKZ 采购类型
ENDIF.
ls_plantdata-spproctype = t_data_factory-sobsl. " MARC-SOBSL 特殊采购类型
ls_plantdata-inhseprodt = t_data_factory-dzeit. " MARC-DZEIT 自制生产时间
* ls_plantdata-safety_stk = t_data_factory-eisbe. " MARC-EISBE 安全库存
ls_plantdata-sm_key = t_data_factory-fhori."'000'. " MARC-FHORI 计划边际码
ls_plantdata-backflush = t_data_factory-rgekz ." MARC-RGEKZ 标识:反冲
ls_plantdata-plan_strgp = t_data_factory-strgr."'40'. " MARC-STRGR 策略组
ls_plantdata-consummode = t_data_factory-vrmod."'2'. " MARC-VRMOD 消耗模式*
ls_plantdata-fwd_cons = t_data_factory-vint2."'999'. " MARC-VINT2 向前消耗期间
ls_plantdata-bwd_cons = t_data_factory-vint1."'999'. " MARC-VINT1 逆向消耗期间
ls_plantdata-issue_unit = t_data_factory-ausme. " MARC-AUSME 发料单位
ls_plantdata-issue_unit_iso = t_data_factory-ausme. " MARC-AUSME 发料单位
ls_plantdata-availcheck = t_data_factory-mtvfp."'02'. " MARC-MTVFP 可用性检查
ls_plantdata-dep_req_id = t_data_factory-sbdkz."''. " MARC-SBDKZ 独立/集中
* plantdata-prod_unit = i_data2-frtme. " MARC-FRTME 生产 单位
ls_plantdata-production_scheduler = t_data_factory-fevor."'001'." MARC-FEVOR 生产调度员
IF t_data_factory-fevor IS NOT INITIAL.
ls_plantdata-prodprof = '000001'." MARC-SFCPF 生产计划参数文件
ENDIF.
ls_plantdata-iss_st_loc = t_data_factory-lgpro."'SF01'. " MARC-LGPRO 生产仓储地点
* plantdata-over_tol = i_data2-ueeto. " MARC-UEETO 过度交货允差 "
ls_plantdata-pur_status = t_data_factory-mmsta."'99' ." MARC-MMSTA 工厂特定的物料状态
ls_plantdata-lot_size = t_data_factory-losgr."'1'. " MARC-LOSGR 成本核算单位
ls_plantdata-no_costing = t_data_factory-ncost. " MARC-NCOST 无成本核算
ls_plantdata-variance_key = t_data_factory-awsls."'000001'. " MARC-AWSLS 差异码
ls_plantdata-ind_post_to_insp_stock = t_data_factory-insmk. " MARC-INSMK 活动
ls_plantdata-ctrl_key = '0001'. "QM控制码
CLEAR ls_plantdatax.
ls_plantdatax-plant = t_data_factory-werks. " MARC-WERKS 工厂
ls_plantdatax-lot_size = 'X'. " MARC-LOSGR 成本核算单位
ls_plantdatax-issue_unit = 'X'. " MARC-AUSME 发料单位
ls_plantdatax-issue_unit_iso = 'X'. " MARC-AUSME 发料单位
ls_plantdatax-pur_status = 'X' ." MARC-MMSTA 工厂特定的物料状态
ls_plantdatax-variance_key = 'X'. " MARC-AWSLS 差异码
ls_plantdatax-pur_group = 'X'. " MARC-EKGRP 采购组
ls_plantdatax-auto_p_ord = 'X'. " MARC-KAUTB 采购数据
ls_plantdatax-gr_pr_time = 'X'. " MARC-WEBAZ 收货处理时间
ls_plantdatax-batch_mgmt = 'X'. " MARC-XCHPF 标识:批次管理需求
ls_plantdatax-lotsizekey = 'X'. " MARC-DISLS 批量大小
ls_plantdatax-minlotsize = 'X'. " MARC-BSTMI 最小批量大小(BTCI)
ls_plantdatax-spproctype = 'X'. " MARC-SOBSL 特殊采购类型
ls_plantdatax-sloc_exprc = 'X'. " MARC-LGFSB 外部采购仓储地点
ls_plantdatax-plnd_delry = 'X'. " MARC-PLIFZ 计划交货时间(天数)
* ls_plantdatax-safety_stk = 'X'. " MARC-EISBE 安全库存
ls_plantdatax-mrp_type = 'X'. " MARC-DISMM MRP 类型
* plantdatax-reorder_pt = 'X'. " MARC-MINBE 再订货点
ls_plantdatax-mrp_ctrler = 'X'. " MARC-DISPO MRP 控制者
ls_plantdatax-proc_type = 'X'. " MARC-BESKZ 采购类型
ls_plantdatax-iss_st_loc = 'X'. " MARC-LGPRO 生产仓储地点
ls_plantdatax-sm_key = 'X'. " MARC-FHORI 计划边际码
ls_plantdatax-backflush = 'X' ." MARC-RGEKZ 标识:反冲
ls_plantdatax-plan_strgp = 'X'. " MARC-STRGR 策略组
ls_plantdatax-consummode = 'X'. " MARC-VRMOD 消耗模式
ls_plantdatax-bwd_cons = 'X'. " MARC-VINT1 逆向消耗期间
ls_plantdatax-fwd_cons = 'X'. " MARC-VINT2 向前消耗期间
ls_plantdatax-availcheck = 'X'. " MARC-MTVFP 可用性检查
ls_plantdatax-dep_req_id = 'X'. " MARC-SBDKZ 独立/集中
ls_plantdatax-production_scheduler = 'X'." MARC-FEVOR 生产调度员
IF t_data_factory-fevor IS NOT INITIAL.
ls_plantdatax-prodprof = 'X'." MARC-SFCPF 生产计划参数文件
ENDIF.
ls_plantdatax-round_val = 'X'. " MARC-BSTRF 舍入值
ls_plantdatax-no_costing = 'X'. " MARC-NCOST 无成本核算
* plantdatax-assy_scrap = 'X'. " MARC-AUSSS 装配报废率
ls_plantdatax-inhseprodt = 'X'. " MARC-DZEIT 自制生产时间
* plantdatax-prod_unit = 'X'. " MARC-FRTME 生产单位
* plantdatax-over_tol = 'X'. " MARC-UEETO 过度交货允差
ls_plantdatax-ind_post_to_insp_stock = 'X'. " MARC-AWSLS 差异码
ls_plantdatax-ctrl_key = 'X'. "QM控制码
"扩充库存地点
CLEAR ls_storagelocationdata.
ls_storagelocationdata-plant = t_data_factory-werks.
ls_storagelocationdata-stge_loc = t_data_factory-lgfsb.
CLEAR ls_storagelocationdatax.
ls_storagelocationdatax-plant = t_data_factory-werks.
ls_storagelocationdatax-stge_loc = t_data_factory-lgfsb.
CLEAR:ls_return,lt_returnmessages.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = ls_headdata
* clientdata = ls_clientdata
* clientdatax = ls_clientdatax
plantdata = ls_plantdata
plantdatax = ls_plantdatax
valuationdata = ls_valuationdata
valuationdatax = ls_valuationdatax
* salesdata = ls_salesdata
* salesdatax = ls_salesdatax
storagelocationdata = ls_storagelocationdata
storagelocationdatax = ls_storagelocationdatax
IMPORTING
return = ls_return
TABLES
materialdescription = lt_materialdescription
materiallongtext = lt_materiallongtext
returnmessages = lt_returnmessages
extensionin = lt_extensionin
extensioninx = lt_extensioninx.
IF ls_return-type = 'S'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
t_data_factory-status = 'S'.
t_data_factory-message = '物料工厂视图创建成功!'.
CLEAR ls_mara.
ls_mara-matnr = t_data_factory-matnr.
CALL FUNCTION 'ZMM_SAPTOSRM_010'
STARTING NEW TASK 'lv_srm_task'
EXPORTING
i_mara = ls_mara
* IV_UPD_MARA =
* I_MARC =
* IV_UPD_MARC =
* IV_UPD_MAKT =
* IV_UPD_MARM =
iv_zsynchrono = 'Z'
* IMPORTING
* E_STATUS =
* E_MESSAGE =
* TABLES
* T_MAKT =
* T_MARM =
.
IF t_data_factory-xchpf = 'X'.
CLEAR:lv_key.
lv_key+0(18) = t_data_factory-matnr. " 物料号
" 删除批次特性
REFRESH lt_ret[].
CALL FUNCTION 'BAPI_OBJCL_DELETE'
EXPORTING
objectkey = lv_key
objecttable = 'MARA'
classnum = lv_class
classtype = lv_class_type
* CHANGENUMBER =
* KEYDATE = SY-DATUM
* OBJECTKEY_LONG =
TABLES
return = lt_ret.
READ TABLE lt_ret WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
REFRESH lt_ret[].
"批次特性的新建
CLEAR :lt_num,lt_char,lt_curr,lt_num[],lt_char[],lt_curr[],lt_ret,lt_ret[].
CALL FUNCTION 'BAPI_OBJCL_CREATE'
EXPORTING
objectkeynew = lv_key
objecttablenew = 'MARA'
classnumnew = lv_class
classtypenew = lv_class_type
status = '1'
no_default_values = 'X'
TABLES
allocvaluesnum = lt_num
allocvalueschar = lt_char
allocvaluescurr = lt_curr
return = lt_ret.
READ TABLE lt_ret WITH KEY type = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
t_data_factory-status = 'S'.
t_data_factory-message = '物料工厂视图维护成功!'.
ELSE.
t_data_factory-status = 'E'.
t_data_factory-message = '物料工厂视图维护失败!'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDIF.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
t_data_factory-status = 'E'.
t_data_factory-message = ls_return-message && ls_return-message_v1 && ls_return-message_v2
&& ls_return-message_v3 && ls_return-message_v4.
ENDIF.
MODIFY t_data_factory.
WAIT UP TO '0.1' SECONDS.
ENDLOOP.
READ TABLE t_data_basis WITH KEY status = 'E'.
IF sy-subrc = 0.
e_status = 'E'.
e_message = '基本视图创建失败!'.
ENDIF.
READ TABLE t_data_factory WITH KEY status = 'E'.
IF sy-subrc = 0.
e_status = 'E'.
e_message = '工厂视图创建失败!'.
ENDIF.
IF e_status <> 'E'.
e_status = 'S'.
e_message = '创建成功!'.
ENDIF.
zfmparavalsave3 'END' e_status e_message.
ENDFUNCTION.这段代码我要新增一段逻辑:新定义一个字段zjylx,由OA传输这个字段给我。现在在SAP里已有个自建表ZTMM065,里面存了每个物料组对应的检验类型,我接收到OA传来的料号和物料组和检验类型,用他传来的物料组和检验类型去ztmm065比对表里的物料组是不是传来的检验类型,若不是ztmm065里的检验类型,则把这个料号+zjylx记入另一个自建表ZTMM066,同时记录创建时间和创建人