BOM加入项目长文本的BAPI

BOM相关的部分BAPI:

  1. 创建物料BOM:BAPI_MATERIAL_BOM_GROUP_CREATE2.

  2. 创建BOM:CSAP_MAT_BOM_CREATE

  3. 更改BOM:CSAP_MAT_BOM_MAINTAIN

  4. 展开BOM:CS_BOM_EXPL_MAT_V2,用SE38:rcs13001传入参数也可以查询。

讲一下1与2区别:1是创建BOM组;2是简单的只创建BOM。

如果在创建时,项目长文本未超过两行,使用1;否则,请使用2。

那么当使用1创建BOM组,又要项目长文本超两行以上了,那就需要用到CSAP_MAT_BOM_MAINTAIN,更改BOM项目长文本。

详细操作步骤及代码

1.对BAPI:CSAP_MAT_BOM_MAINTAIN先做测试,SE37->执行BAPI,输入相关参数;

Table:T_STPO

字段ITEM_NODE(项目ID),字段ITEM_COUNT(内部计数器)

运行结果:

2.接下来是要注意点,传长文本;

超3行及以上才是长文本的溢出的部分

点击项目长文本只能看到溢出部分长文本,第1行与第二行留在CS03界面上的

3.测试BAPI成功后,接下就是代码调用BAPI;(代码部分)


REPORT Z.

DATA  L_FL_WARNING TYPE CAPIFLAG-FLWARNING.
DATA  LT_STPO_UPDT TYPE TABLE OF STPO_API03 WITH HEADER LINE.
DATA OT_STPO1 TYPE TABLE OF STPO_API03 WITH HEADER LINE.
DATA  LW_STKO_UPDT TYPE STKO_API01.

TYPES:BEGIN OF T_STR,
        STR(220) TYPE C,
      END OF T_STR.

DATA: LT_LONGTEXT TYPE STANDARD TABLE OF CSLTX_LINE,
      OT_LTX_LINE TYPE STANDARD TABLE OF CSLTX_LINE,

      LV_TEXT     TYPE CHAR220 VALUE 'CA9,CA11, CA12, CA20, CA22,CD1,CD2,CD3,CD4,CD5, CE1, CE2, CE8, CL1, CL4, CL6, CQ1, CQ5, CQ6test123'.

DATA LT_TEXT TYPE TABLE OF T_STR.


CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
  EXPORTING
    TEXT      = CONV STRING( LV_TEXT )
* IMPORTING
*   LENGTH    =
  TABLES
    FTEXT_TAB = LT_TEXT.

CALL FUNCTION 'CONVERSION_EXIT_NUMCV_INPUT'
  EXPORTING
    INPUT  = '0280'
  IMPORTING
    OUTPUT = LT_STPO_UPDT-IDENTIFIER.

APPEND VALUE #( OBJECT_ID = '2'  IDENTIFIER = LT_STPO_UPDT-IDENTIFIER TDFORMAT = '*' TDLINE = SPACE ) TO LT_LONGTEXT.

APPEND VALUE #( OBJECT_ID = '2'  IDENTIFIER = LT_STPO_UPDT-IDENTIFIER TDFORMAT = '*' TDLINE = SPACE ) TO LT_LONGTEXT.

LOOP AT LT_TEXT ASSIGNING FIELD-SYMBOL(<FS_TEXT>).
  APPEND VALUE #( OBJECT_ID = '2' IDENTIFIER = LT_STPO_UPDT-IDENTIFIER TDFORMAT = '*' TDLINE = <FS_TEXT> ) TO LT_LONGTEXT.
ENDLOOP.


*LW_STKO_UPDT-BASE_QUAN = '8'.
*LW_STKO_UPDT-BOM_STATUS = '01'.
*LW_STKO_UPDT-ALT_TEXT = '123456'.


CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
  EXPORTING
    INPUT        = '123456abc-test'   "组件物料
  IMPORTING
    OUTPUT       = LT_STPO_UPDT-COMPONENT
  EXCEPTIONS
    LENGTH_ERROR = 1
    OTHERS       = 2.

LT_STPO_UPDT-ITEM_CATEG = 'L'.
LT_STPO_UPDT-ITEM_NO = '0280'.
*LT_STPO_UPDT-COMPONENT = '123456abc-test'."组件物料
LT_STPO_UPDT-COMP_QTY = '13'.
LT_STPO_UPDT-BOM_NO = '00067093'.
LT_STPO_UPDT-ITEM_NODE = '00000001'.
LT_STPO_UPDT-ITEM_COUNT = '00000002'.
APPEND LT_STPO_UPDT.

SELECT  MAST~MATNR,
        MAST~WERKS,
        STPO~STLTY,
        STPO~STLNR,
        STPO~STLKN, "BOM项目节点号
        STPO~STPOZ , "内部计数器
        STPO~IDNRK ,"组件
        STPO~POSNR ,"行项目编号
        STPO~POSTP "行项目类别
    FROM MAST
    LEFT JOIN STPO
    ON STPO~STLNR = MAST~STLNR
    INTO TABLE @DATA(LT_STPO3)
    WHERE MAST~MATNR = 'abc-test123'   "父阶物料
    AND   MAST~WERKS = '1011'.
SORT LT_STPO3 BY STLNR STPOZ.


CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
  EXPORTING
    MATERIAL           = 'abc-test123'  "父阶物料
    PLANT              = '1011'
    BOM_USAGE          = '1'
    ALTERNATIVE        = '01'
    VALID_FROM         = '2020.02.25'
*   CHANGE_NO          =
*   REVISION_LEVEL     =
    I_STKO             = LW_STKO_UPDT
*   FL_NO_CHANGE_DOC   = ' '
    FL_COMMIT_AND_WAIT = 'X'
*   FL_CAD             = ' '
*   FL_BOM_CREATE      = ' '
    FL_NEW_ITEM        = 'X'
*   FL_COMPLETE        = 'X'
*   FL_DEFAULT_VALUES  = 'X'
*   FL_IDENTIFY_BY_GUID       = ' '
*   FL_RECURSIVE       = ' '
  IMPORTING
    FL_WARNING         = L_FL_WARNING
*   O_STKO             =
  TABLES
    T_STPO             = LT_STPO_UPDT
*   T_DEP_DATA         =
*   T_DEP_DESCR        =
*   T_DEP_ORDER        =
*   T_DEP_SOURCE       =
*   T_DEP_DOC          =
*   T_DOC_LINK         =
*   T_DMU_TMX          =
    T_LTX_LINE         = LT_LONGTEXT
*   T_STPU             =
*   T_FSH_BOMD         =
*   T_SGT_BOMC         =
  EXCEPTIONS
    ERROR              = 1
    OTHERS             = 2.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      WAIT = 'X'.
ENDIF.

*读取BOM
CALL FUNCTION 'CSAP_MAT_BOM_READ'
  EXPORTING
    MATERIAL    = 'abc-test123'  "父阶物料
    PLANT       = '1011'
    BOM_USAGE   = '1'
    ALTERNATIVE = '01'
    VALID_FROM  = '2020.02.25'
"   CHANGE_NO   = IS_ZRFC_S_PP005-AENNR
  TABLES
    T_STPO      = OT_STPO1
    T_LTX_LINE  = OT_LTX_LINE
  EXCEPTIONS
    ERROR       = 1
    OTHERS      = 2.

BREAK-POINT.

真是的,数量不传(LT_STPO_UPDT-COMP_QTY = '13'.),长文本改变不了,一直卡在这个点上!!

SELECT  MAST~MATNR,
        MAST~WERKS,
        STPO~STLTY,
        STPO~STLNR,
        STPO~STLKN, "BOM项目节点号
        STPO~STPOZ , "内部计数器
        STPO~IDNRK ,"组件
        STPO~POSNR ,"行项目编号
        STPO~POSTP "行项目类别
    FROM MAST
    LEFT JOIN STPO
    ON STPO~STLNR = MAST~STLNR
    INTO TABLE @DATA(LT_STPO3)
    WHERE MAST~MATNR = 'abc-test123'   "父阶物料
    AND   MAST~WERKS = '1011'.
SORT LT_STPO3 BY STLNR STPOZ.

以上这段,也可以使用展BOM BAPI获取,看自己习惯哈~

4.抬头文本也是如此;

APPEND VALUE #( OBJECT_ID = '2'  IDENTIFIER =

注解一下OBJECT_ID,指长文本是在抬头上,还是行项目上:

'1':指BOM抬头文本上(STPO);

'2':指BOM行项目文本上(STKO);

'0':暂没用到过(STZU).

IDENTIFIER是用于项目长文本的,指明在哪个BOM的ITEM上。

PS:还有如果改的是表头,一定要注意激活BOM(代码中要添加激活BOM),不然BOM是为2,未激活状态

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值