MM BAPI BAPI_MATERIAL_SAVEDATA 创建或更新物料主数据的毛重 体积 等数据问题

毛重和 业务量 体积单位在 BAPI_MARM BAPI_MARMX里面 

 

 更新时注意 :ALT_UNIT 和     ALT_UNIT_ISO  要和 head里面的BASE_UOM 保持一致 

 

 链接参考:How to update VOlume and Volume Unit through BAPI_MATERIAL_SAVEDATA ? | SAP Community

FUNCTION ZMATNR_PLM2SAP.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      MATERIAL STRUCTURE  ZMAT
*"      OUTPUT_MESSAGE STRUCTURE  ZMAT_MESSAGE
*"----------------------------------------------------------------------"定义数据TABLES:mara,marc,ZLOGOFMATNRORBOM.data: temp_mat type matnr,            "物料temp_werks type werks_d,        "工厂temp_mtart type mtart,          "物料类型temp_subrc like SYST-SUBRC,     "物料类型修改成功与否HEADDATA  LIKE  BAPIMATHEAD,   "带有控制信息的表头段CLIENTDATA  LIKE  BAPI_MARA,   "客户端物料数据CLIENTDATAX LIKE  BAPI_MARAX,  "客户端物料数据的更新信息return2 type bapiret2,         "返回信息MESSAGETAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE,      "返回物料类型的消息RETURNS LIKE BAPI_MATRETURN2 OCCURS 0 WITH HEADER LINE.    "返回消息data:  BEGIN OF zlog,MATNR TYPE MATNR,WERKS TYPE WERKS_D,INTERFACENAME(60) TYPE C,LOGDATE TYPE DATUM,LOGTIME TYPE UZEIT,maktx type maktx,MEINS type MEINS,MBRSH type MBRSH,lvorm type lvorm,mtart type mtart,SPART type SPART,MATKL type MATKL,BISMT type BISMT,LGFSB type LGFSB,EORIGINNO(40) type c,CREATER(20) type c,MESSAGETYPE(1) TYPE C,MESSAGE(220) TYPE C,END OF ZLOG.data: matdescription like table of BAPI_MAKT WITH HEADER LINE.    "物料描述data:ltWV like TABLE OF BAPI_MARM WITH HEADER LINE.   " 度量单位 毛重 体积data:ltWVX like TABLE OF BAPI_MARMX WITH HEADER LINE.  "度量单位 毛重 体积data: BEGIN OF newmat_record,MATNR like mara-matnr,werks type werks_d,MAKTX like makt-maktx,MEINS like mara-meins,MBRSH like mara-MBRSH,lvorm like mara-lvorm,mtart like mara-mtart,SPART like mara-spart,MATKL like mara-matkl,BISMT type BISMT,LGFSB TYPE LGFSB,EORIGINNO(40) type c,creater(20) type c,ISUPDATE(1) type C,CREATEDATE type D,CREATETIME type T,UPDATEDATE type D,UPDATETIME type T,END OF newmat_record.LOOP at MATERIAL.CLEAR ltwv[].clear ltwvx[].CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'EXPORTINGinput  = MATERIAL-matnrIMPORTINGoutput = MATERIAL-matnr.TRANSLATE MATERIAL-matnr TO UPPER CASE.CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'EXPORTINGinput  = MATERIAL-MEINSIMPORTINGoutput = MATERIAL-MEINS."判断必须的输入字段是否有数据if ( material-matnr is INITIAL ) or ( material-werks is INITIAL ).clear output_message.output_message-matnr = material-matnr.output_message-werks = material-werks.output_message-messagetype = 'E'.output_message-message = '物料和工厂为必填字段,请补充必填字段!'.append output_message.CONTINUE.endif.clear temp_mat.clear temp_mtart.CLEAR RETURNS.CLEAR RETURNS[].select SINGLE matnr mtart into (temp_mat,temp_mtart) from mara where matnr = material-matnr.if temp_mat is not initial.
*1.  更新物料
*1.1 准备输入数据"头数据:事实上这个数据创建后就修改不了了clear headdata.headdata-MATERIAL = material-matnr.     "物料(必填,且不可修改)headdata-IND_SECTOR = material-mbrsh.   "行业领域(必填,且不可修改)headdata-matl_type = material-mtart.    "物料类型(也必填,在这里直接修改不了,需调用创建的函数处理)headdata-BASIC_VIEW  = 'X'."基本数据clear clientdata.clear clientdatax.CLIENTDATA-BASE_UOM = material-meins.CLIENTDATAX-BASE_UOM = 'X'.CLIENTDATA-DEL_FLAG = material-lvorm.CLIENTDATAX-DEL_FLAG = 'X'.CLIENTDATA-DIVISION = material-SPART.CLIENTDATAX-DIVISION = 'X'.CLIENTDATA-OLD_MAT_NO = material-BISMT.CLIENTDATAX-OLD_MAT_NO = 'X'.*      由于存在物料组字段含义变更的问题,更新后会影响历史数据统计的准确性,此字段不更新到sap,新物料如果个别需更新,可以通知黄海燕更新CLIENTDATA-MATL_GROUP = material-MATKL.CLIENTDATAX-MATL_GROUP = 'X'.ltWv-alt_unit = material-meins.ltWvX-alt_unit = material-meins.ltWv-ALT_UNIT_ISO = material-meins.ltWvX-ALT_UNIT_ISO = material-meins.ltWv-VOLUME = material-VOLUM."体积ltWvX-VOLUME = 'X'.ltWv-VOLUMEUNIT = material-VOLEH."体积ltWvX-VOLUMEUNIT = 'X'.ltWv-GROSS_WT = material-BRGEW. "毛重ltWvX-GROSS_WT = 'X'.*      ltWv-NET_WEIGHT = material-NTGEW."净重
*      ltWvx-net_weight = 'X'.ltWv-UNIT_OF_WT = material-GEWEI.ltWvX-UNIT_OF_WT = 'X'.APPEND ltWv.APPEND ltWvX.CLIENTDATA-net_weight = material-NTGEW."净重CLIENTDATAX-net_weight = 'X'.CLIENTDATA-UNIT_OF_WT = material-gewei."毛重CLIENTDATAX-UNIT_OF_WT = 'X'."物料描述CLEAR matdescription.CLEAR matdescription[].matdescription-LANGU_ISO = 'ZH'.matdescription-MATL_DESC = material-maktx.
*      concatenate material-maktx material-EORIGINNO into matdescription-MATL_DESC.APPEND matdescription.*1.2 执行更新物料CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'EXPORTINGheaddata            = headdataclientdata          = clientdataclientdatax         = clientdataxIMPORTINGreturn              = return2TABLESmaterialdescription = matdescription[]UNITSOFMEASURE = ltwv[]UNITSOFMEASUREX = ltwvX[]RETURNMESSAGES      = RETURNS.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X'.if material-lvorm <> 'X'.UPDATE MARA SET lvorm = '' where matnr = material-matnr.UPDATE MARC SET lvorm = '' where matnr = material-matnr.COMMIT WORK and wait.ENDIF."单独处理更新物料类型if material-mtart <> temp_mtart.CALL FUNCTION 'ZBAPI_CHANGEMTART'EXPORTINGCTU       = 'X'MODE      = 'N'UPDATE    = 'L'NODATA    = '/'MATNR_001 = material-matnrNMTAR_002 = material-mtartIMPORTINGSUBRC     = temp_subrcTABLESMESSTAB   = MESSAGETAB.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X'.endif.*1.3 输出消息处理clear output_message.output_message-matnr = material-matnr.UPDATE mara SET zysj = material-zysj ZJKZYJ = material-ZJKZYJWHERE matnr =  MATERIAL-matnr.CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'EXPORTINGinput  = output_message-matnrIMPORTINGoutput = output_message-matnr.output_message-werks = material-werks.output_message-messagetype = return2-type.output_message-message = return2-message.IF return2-type = 'S' .LOOP AT RETURNS.IF RETURNS-TYPE = 'E' or RETURNS-TYPE = 'A'.output_message-messagetype = RETURNS-type.output_message-message = RETURNS-message.EXIT.ENDIF.ENDLOOP.ENDIF.if temp_subrc <> 0.if output_message-messagetype = 'S'.output_message-messagetype = 'E'.output_message-message = '物料类型更新不成功!'.else.output_message-messagetype = 'E'.CONCATENATE output_message-message  ',且物料类型更新不成功!' INTO output_message-message.endif.endif.append output_message.* 1.4 记录传入的数据及处理结果ZLOG-matnr = output_message-matnr.ZLOG-werks = output_message-werks.ZLOG-messagetype = output_message-messagetype.ZLOG-message = output_message-message.ZLOG-logdate = sy-DATUM.ZLOG-logtime = sy-UZEIT.ZLOG-interfacename = 'ZMATNR_PLM2SAP'.ZLOG-maktx = material-maktx.ZLOG-MEINS = material-MEINS.ZLOG-MBRSH = material-MBRSH.ZLOG-lvorm = material-lvorm.ZLOG-mtart = material-mtart.ZLOG-SPART = material-SPART.ZLOG-MATKL = material-MATKL.ZLOG-BISMT = material-BISMT.ZLOG-LGFSB = material-LGFSB.ZLOG-EORIGINNO = material-EORIGINNO.ZLOG-CREATER = material-CREATER.insert into ZLOGOFMATNRORBOM  values ZLOG.commit work and wait.CLEAR ZLOG.*1.5 对新添加的工厂数据进行更新,便于维护专员添加新的工厂视图IF output_message-messagetype = 'S'.clear temp_werks.select SINGLE werks into temp_werks from marc where matnr = material-matnr and werks = material-werks.if temp_werks is initial.clear newmat_record.newmat_record-matnr = material-matnr.newmat_record-werks = material-werks.newmat_record-maktx = material-maktx.newmat_record-MEINS  = material-MEINS.newmat_record-MBRSH  = material-MBRSH.newmat_record-lvorm  = material-lvorm.newmat_record-MTART  = material-MTART.newmat_record-SPART  = material-SPART.newmat_record-MATKL  = material-MATKL.newmat_record-BISMT = material-BISMT.newmat_record-lgfsb = material-lgfsb.newmat_record-EORIGINNO = material-EORIGINNO.newmat_record-creater = material-creater.newmat_record-isupdate = '0'.newmat_record-createdate = SY-DATUM.newmat_record-createtime = SY-UZEIT.insert into zmat_synchronize  values newmat_record.commit work and wait.endif.ENDIF."修改物料日期和修改时间及其他工厂数据字段更新到新物料同步表update zmat_synchronize set updatedate = SY-DATUM updatetime = SY-UZEIT lgfsb = material-lgfsb where matnr = material-matnr and werks = material-werks.commit work and wait.else.
*2.  新建物料"判断必须的输入字段是否都有数据:物料、物料描述、单位、行业领域、物料类型、部门、物料组;"工厂和采购库位不必填,但是还是要提供给物料维护专员生成其他视图数据if ( material-matnr is INITIAL ) or ( material-maktx is INITIAL ) or ( material-meins is INITIAL )or ( material-mbrsh is INITIAL ) or ( material-mtart is INITIAL ) or ( material-SPART is INITIAL ) or ( material-MATKL is INITIAL ).clear output_message.output_message-matnr = material-matnr.output_message-werks = material-werks.output_message-messagetype = 'E'.output_message-message = '新建物料所需的数据不全,请补充必填字段!'.append output_message.CONTINUE.endif.*2.1 准备输入数据"头数据clear headdata.headdata-MATERIAL = material-matnr.     "物料(必填,且不可修改)headdata-IND_SECTOR = material-mbrsh.   "行业领域(必填,且不可修改)headdata-matl_type = material-mtart.    "物料类型(也必填,且不可修改)headdata-BASIC_VIEW  = 'X'."基本数据clear clientdata.if material-lvorm is not INITIAL.CLIENTDATA-DEL_FLAG = material-lvorm.else.CLIENTDATA-DEL_FLAG =''.endif.CLIENTDATA-MATL_GROUP = material-MATKL.CLIENTDATA-BASE_UOM = material-meins.CLIENTDATA-DIVISION = material-SPART.CLIENTDATA-OLD_MAT_NO = material-BISMT."基本数据的更新项clear clientdatax.if material-lvorm is not INITIAL.CLIENTDATAX-DEL_FLAG = 'X'.else.CLIENTDATAX-DEL_FLAG =''.endif.CLIENTDATAX-MATL_GROUP = 'X'.CLIENTDATAX-BASE_UOM = 'X'.CLIENTDATAX-DIVISION = 'X'.CLIENTDATAX-OLD_MAT_NO = 'X'.ltWv-alt_unit = material-meins.ltWvX-alt_unit = material-meins.ltWv-ALT_UNIT_ISO = material-meins.ltWvX-ALT_UNIT_ISO = material-meins.ltWv-VOLUME = material-VOLUM."体积ltWvX-VOLUME = 'X'.ltWv-VOLUMEUNIT = material-VOLEH."体积ltWvX-VOLUMEUNIT = 'X'.ltWv-GROSS_WT = material-BRGEW. "毛重ltWvX-GROSS_WT = 'X'.*      ltWv-NET_WEIGHT = material-NTGEW."净重
*      ltWvx-net_weight = 'X'.ltWv-UNIT_OF_WT = material-GEWEI.ltWvX-UNIT_OF_WT = 'X'.APPEND ltWv.APPEND ltWvX.CLIENTDATA-net_weight = material-NTGEW."净重CLIENTDATAX-net_weight = 'X'.CLIENTDATA-UNIT_OF_WT = material-gewei."毛重CLIENTDATAX-UNIT_OF_WT = 'X'."物料描述CLEAR matdescription.CLEAR matdescription[].matdescription-LANGU_ISO = 'ZH'.matdescription-MATL_DESC = material-maktx .
*      concatenate material-maktx material-EORIGINNO into matdescription-MATL_DESC.APPEND matdescription.*2.2 执行新建物料CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'EXPORTINGheaddata            = headdataclientdata          = clientdataclientdatax         = clientdataxIMPORTINGreturn              = return2TABLESmaterialdescription = matdescription[]UNITSOFMEASURE = ltwv[]UNITSOFMEASUREX = ltwvX[]RETURNMESSAGES      = RETURNS.CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'EXPORTINGWAIT = 'X'.UPDATE mara SET zysj = material-zysj ZJKZYJ = material-ZJKZYJWHERE matnr =  MATERIAL-matnr.*2.3 输出消息处理clear output_message.output_message-matnr = material-matnr.CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'EXPORTINGinput  = output_message-matnrIMPORTINGoutput = output_message-matnr.output_message-werks = material-werks.output_message-messagetype = return2-type.output_message-message = return2-message.IF return2-type = 'S'.LOOP AT RETURNS.IF RETURNS-TYPE = 'E' or RETURNS-TYPE = 'A'.output_message-messagetype = RETURNS-type.output_message-message = RETURNS-message.EXIT.ENDIF.ENDLOOP.ENDIF.append output_message.* 2.4 记录传入的数据及处理结果ZLOG-matnr = output_message-matnr.ZLOG-werks = output_message-werks.ZLOG-messagetype = output_message-messagetype.ZLOG-message = output_message-message.ZLOG-logdate = sy-DATUM.ZLOG-logtime = sy-UZEIT.ZLOG-interfacename = 'ZMATNR_PLM2SAP'.ZLOG-maktx = material-maktx.ZLOG-MEINS = material-MEINS.ZLOG-MBRSH = material-MBRSH.ZLOG-lvorm = material-lvorm.ZLOG-mtart = material-mtart.ZLOG-SPART = material-SPART.ZLOG-MATKL = material-MATKL.ZLOG-BISMT = material-BISMT.ZLOG-LGFSB = material-LGFSB.ZLOG-EORIGINNO = material-EORIGINNO.ZLOG-CREATER = material-CREATER.insert into ZLOGOFMATNRORBOM  values ZLOG.commit work and wait.CLEAR ZLOG.*2.5 对新建的物料进行记录,便于维护专员更新各视图数据IF output_message-messagetype = 'S'.clear newmat_record.newmat_record-matnr = material-matnr.newmat_record-werks = material-werks.newmat_record-maktx = material-maktx.newmat_record-MEINS  = material-MEINS.newmat_record-MBRSH  = material-MBRSH.newmat_record-lvorm  = material-lvorm.newmat_record-MTART  = material-MTART.newmat_record-SPART  = material-SPART.newmat_record-MATKL  = material-MATKL.newmat_record-BISMT = material-BISMT.newmat_record-lgfsb = material-lgfsb.newmat_record-EORIGINNO = material-EORIGINNO.newmat_record-creater = material-creater.newmat_record-isupdate = '0'.newmat_record-createdate = SY-DATUM.newmat_record-createtime = SY-UZEIT.insert into zmat_synchronize  values newmat_record.commit work and wait.ENDIF.endif.ENDLOOP.ENDFUNCTION.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部