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.

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

目录
相关文章
|
2月前
|
数据库
如何通过增强(Enhancement)的方式,给 ABAP Function Module 增添新的功能试读版
如何通过增强(Enhancement)的方式,给 ABAP Function Module 增添新的功能试读版
26 0
|
6月前
|
数据库
关于 SAP ABAP Enqueue Function Module 的输入参数 _wait
关于 SAP ABAP Enqueue Function Module 的输入参数 _wait
32 0
|
6月前
|
BI
SAP ABAP 系统里和传输请求读写相关的 Function Module
SAP ABAP 系统里和传输请求读写相关的 Function Module
44 0
|
1月前
|
BI
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示试读版
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示试读版
15 0
|
3月前
|
数据库
SAP ABAP 更新函数(Update Function Module)执行出错的原因分析试读版
SAP ABAP 更新函数(Update Function Module)执行出错的原因分析试读版
35 0
|
3月前
|
数据库
130. SAP ABAP 更新函数(Update Function Module)执行出错的原因分析
130. SAP ABAP 更新函数(Update Function Module)执行出错的原因分析
25 0
|
3月前
答网友疑问:ABAP Function Module 如何支持内表结构不确定的动态输入参数试读版
答网友疑问:ABAP Function Module 如何支持内表结构不确定的动态输入参数试读版
12 0
|
3月前
127. 答网友疑问:ABAP Function Module 如何支持内表结构不确定的动态输入参数
127. 答网友疑问:ABAP Function Module 如何支持内表结构不确定的动态输入参数
18 0
|
6月前
|
开发者
如何使用 ABAP Function Module SEO_CLASS_CREATE_COMPLETE 创建 ABAP class
如何使用 ABAP Function Module SEO_CLASS_CREATE_COMPLETE 创建 ABAP class
39 0
|
1月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
27 0