SAP中使用Function Module创建物料的过程

简介: SAP中SE80查看该function具体代码如下所示: FUNCTION Z_PDM_MATERIAL. *"---------------------------------------------------------------------- *"*"Local interface: *.

SAP中SE80查看该function
image
具体代码如下所示:

FUNCTION Z_PDM_MATERIAL.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  TABLES
*"      IM_TAB STRUCTURE  ZPDM_MATERIAL
*"      IT_RETURN STRUCTURE  ZPDM_RETURN
*"----------------------------------------------------------------------
*  2018年4月12日 之前传递给  MM03-工厂数据/存储2 tab页中的 “净重” 字段的数据,现在需要修改;
*  改为传递给同tab页面中的 “毛重”字段;
*  净重  字段  存在于 bapi_mara中
*  需要在 BAPI_TE_MARA 和 BAPI_TE_MARAX中追加这个字段
*
*"----------------------------------------------------------------------
  DATA: l_head        LIKE bapimathead,                            "1初始屏幕
     "   l_dl_maozhong LIKE BAPI_TE_MARA,
        l_clinetdata  LIKE bapi_mara,
        l_clinetdatax LIKE bapi_marax,
        l_plantdata   LIKE bapi_marc,
        l_plantdatax  LIKE bapi_marcx,                       "5工厂视图
        it_makt       LIKE bapi_makt OCCURS 0 WITH HEADER LINE,
        l_bapiret2    LIKE bapiret2.

  DATA  BEGIN OF w_extensionin OCCURS 0.
          INCLUDE STRUCTURE bapiparex.  "BAPI 参数 ExtensionIn/ExtensionOut 的参考结构
  DATA  END OF w_extensionin.

  DATA  BEGIN OF w_extensioninx OCCURS 0.
          INCLUDE STRUCTURE bapiparexx. "Extension In/Extension Out 的复选框结构
  DATA  END OF w_extensioninx.
  "毛重 字段 添加到下面的增强中 参考 MARA-BRGEW 毛重
  DATA zzbapi_te_mara LIKE bapi_te_mara.   "客户定义字段:客户级别的物料数据
  DATA zzbapi_te_marax LIKE bapi_te_marax. "客户定义字段:客户级别的物料数据


  REFRESH it_return .

  LOOP AT im_tab.


    SELECT SINGLE matnr INTO l_head-material FROM mara WHERE matnr = im_tab-matnr.


    l_head-material = im_tab-matnr.       "物料号
    l_head-ind_sector  = 'M'.             "行业类型
    l_head-matl_type  = im_tab-mtart.     "物料类型




    "l_clinetdata-matl_group = '$$'.
    "l_clinetdatax-matl_group = 'X'.

    l_head-basic_view = 'X'.                  "基本数据视图
    l_clinetdata-base_uom = im_tab-meins.     "基本计量单位
    l_clinetdatax-base_uom = 'X'.

*    "净重字段去掉
*    l_clinetdata-net_weight = im_tab-ntgew . "净重
*    l_clinetdatax-net_weight = 'X'.

    l_clinetdata-unit_of_wt = 'KG' . "重量单位
    l_clinetdatax-unit_of_wt = 'X'.


    l_clinetdata-temp_conds = im_tab-tempb . "温度条件标识
    l_clinetdatax-temp_conds = 'X'.

    l_clinetdata-basic_matl = im_tab-wrkst . "基本物料
    l_clinetdatax-basic_matl = 'X'.

    l_clinetdata-DOCUMENT = im_tab-zeinr." 凭证
    l_clinetdatax-DOCUMENT = 'X'.

    l_plantdata-NEG_STOCKS = im_tab-XMCNG." 是否允许负库存
    l_plantdatax-NEG_STOCKS = 'X'.



    "l_clinetdata-prod_memo = '无'.
    "l_clinetdatax-prod_memo = 'X'.

    it_makt-langu = '1'.
    it_makt-matl_desc = im_tab-maktx.       "物料描述(中文)*
    APPEND it_makt.

    zzbapi_te_mara-material = im_tab-matnr.
    zzbapi_te_mara-volum = im_tab-volum.     "业务量(增强)
    zzbapi_te_mara-voleh = 'M3'.             "体积(增强)
    zzbapi_te_mara-BRGEW = im_tab-ntgew.     "毛重

    zzbapi_te_marax-material = im_tab-matnr.
    zzbapi_te_marax-volum = 'X'.             "业务量(增强)
    zzbapi_te_marax-voleh = 'X'.             "体积(增强)
    zzbapi_te_marax-BRGEW = 'X'.             "毛重


    w_extensionin-structure = 'BAPI_TE_MARA'.
    w_extensionin-valuepart1 = zzbapi_te_mara.
    APPEND w_extensionin.

    w_extensioninx-structure = 'BAPI_TE_MARAX'.
    w_extensioninx-valuepart1 = zzbapi_te_marax.
    APPEND w_extensioninx.

    l_head-storage_view = 'X'.
    "l_head-ACCOUNT_VIEW = 'X'.
    "l_head-COST_VIEW = 'X'.

    l_plantdata-plant = im_tab-werks."工厂
    l_plantdatax-plant = im_tab-werks.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "利润中心
      EXPORTING
        input  = im_tab-prctr
      IMPORTING
        output = l_plantdata-profit_ctr.
    l_plantdatax-profit_ctr = 'X'.



    CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
      EXPORTING
        headdata            = l_head
        clientdata          = l_clinetdata
        clientdatax         = l_clinetdatax
        plantdata           = l_plantdata
        plantdatax          = l_plantdatax
      IMPORTING
        return              = l_bapiret2
      TABLES
        materialdescription = it_makt
        extensionin         = w_extensionin
        extensioninx        = w_extensioninx.

    IF  l_bapiret2-type CA 'EA'.

      it_return-type = 'E'.
      it_return-matnr = im_tab-matnr.
      it_return-message = l_bapiret2-message.

      APPEND it_return.

    ELSE.
      it_return-type = 'S'.
      it_return-matnr = im_tab-matnr.
      it_return-message = ''.

      APPEND it_return.

    ENDIF.

    CLEAR:l_head,l_clinetdata,l_clinetdatax,l_plantdata,l_plantdatax,l_bapiret2.
    REFRESH:it_makt,w_extensionin,w_extensioninx.

  ENDLOOP.

ENDFUNCTION.

下面测试上述代码
image
image
image
image
image
image
image
这样就创建了一个物料
使用MM03查询这个物料
image

image
可以看到这个物料已经创建好了
上述内容,仅仅是abap代码本身以及这段代码所代表的Function Module的调用调试过程。
Function Module相当于一个java中的方法,对应的有输入参数,输出参数和源代码。
源代码已经在上面列举出来了。我们先看看输入输出参数。
image
如上图,Function Module的输入输出参数,也就是局部变量,拥有参数名,和类型。
参数名干什么用呢?如下图所示,tables中的参数名,会直接被source code中的代码使用
image

类型有什么用呢?或者说,这个类型是从何而来呢?
这个类型,就相当于java世界中的自定义的PO,你想想,我们在写java代码的时候,是不是也经常会使用自定义的PO类作为返回值或者输入参数的类型呢?当然。
明白了这一点,我们先去看看之前提到的参数类型,在哪里定义的。
打开SE11,查看类型的定义,如下图
image
具体的定义可以看到如下:
image
image
上面是输入参数的参数类型
同理,查看一下返回类型的定义

image
image
通过上面的描述,Function Module的输入参数和返回值的变量名、参数类型都看到了。
下面我们具体看一下source code,也就是abap的源代码
定义了两个变量,变量类型如下所示


  DATA zzbapi_te_mara LIKE bapi_te_mara.   "客户定义字段:客户级别的物料数据
  DATA zzbapi_te_marax LIKE bapi_te_marax. "客户定义字段:客户级别的物料数据

上面提到的内容,需要abaper手动扩展
image
具体的定义如下所示,其中后面三个蓝色的变量成员是需要我们手动添加到这个结构中去的,另一个变量的类型x也是同理。
image
Function Module的具体代码含义,就是从输入参数获取数据,然后
调用下面的function生成物料

    CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
      EXPORTING
        headdata            = l_head
        clientdata          = l_clinetdata
        clientdatax         = l_clinetdatax
        plantdata           = l_plantdata
        plantdatax          = l_plantdatax
      IMPORTING
        return              = l_bapiret2
      TABLES
        materialdescription = it_makt
        extensionin         = w_extensionin
        extensioninx        = w_extensioninx.

上述内容,就是使用代码创建物料的基本描述。

目录
相关文章
|
26天前
|
Linux Python
【Azure Function】Python Function部署到Azure后报错No module named '_cffi_backend'
ERROR: Error: No module named '_cffi_backend', Cannot find module. Please check the requirements.txt file for the missing module.
|
3月前
|
关系型数据库 MySQL Linux
【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'
【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'
|
11月前
|
前端开发 JavaScript
Module build failed: TypeError: this.getResolve is not a function,vue写css时启动出错
Module build failed: TypeError: this.getResolve is not a function,vue写css时启动出错
45 0
SAP 解决物料主数据扩展字段无法写入到MARA配置问题详解
配置物料主数据的自建字段(避免创建时传入字段但是无法写入MARA表)
498 0
SAP 更新已过账物料凭证文本
更新已过账物料凭证文本
232 0
|
Python
[oeasy]python0024_ 输出时间_time_模块_module_函数_function
[oeasy]python0024_ 输出时间_time_模块_module_函数_function
100 0
[oeasy]python0024_ 输出时间_time_模块_module_函数_function
SAP 批量更改物料描述
由于公司业务部门需要,向我提出的这个要求,我就在网上查了下,看到了一位知乎的前辈大神写了但是不是特别详细,笔者测试了下,把过程更详细的记录了一下,也挺好用,就在这里记录和分享一下! 比如现在业务部门提出物料主数据中物料描述维护错了,要批量进行修改,而且每个物料这个字段的值是不一样的,此时可以使用MASS事物码通过EXCEL进行批量维护。经常使用MASS将主数据的某个字段修改为相同的值,其实可以使用MASS导入EXCEL进行字段修改,也可将统一字段修改为不同的值,主数据的更改可以不通过LSMW实现。MASS可以实现很多主数据的修改,进入事物码MASS选择对象类型,可实现对不同主数据的更改!
SAP 批量更改物料描述
SAP WM中阶明明设置了TO自动产生为啥冻结物料后没有TO单据产生?
SAP WM中阶明明设置了TO自动产生为啥冻结物料后没有TO单据产生?
SAP WM中阶明明设置了TO自动产生为啥冻结物料后没有TO单据产生?
SAP WM高阶IM层面冻结物料库存过账后WM层面有三个不同的移动类型?
SAP WM高阶IM层面冻结物料库存过账后WM层面有三个不同的移动类型?
SAP WM高阶IM层面冻结物料库存过账后WM层面有三个不同的移动类型?