Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Bapi or FM to maintain BOM order (CU51).

Former Member
0 Kudos

Hi all,

I am looking for a easy way to update/maintain Bom order.

I ve been looking arround this forum but I didn't found anything interessting.

Can someone help me?

Thanks.

9 REPLIES 9

madhu_vadlamani
Active Contributor
0 Kudos

Hi Joskin,

There are some classes and fm are available.But none of them will full fill all the features of cu51.

Regards,

Madhu.

0 Kudos

Thanks for your answer.

I'd like to be able to add an item (material) in the configuration result list.

Thank you.

0 Kudos

I am trying to do it via Batch input, but result are really random.

Any help would be greatly appreciated.

Thank you.

Former Member
0 Kudos

Hi Joskin,

As told by Madhurao, But none of them will full fill all the features of cu51. You will have to call different process to each activity.

I had come accross the same difficulties and I could succeed by coding below. Hope this helps you too Attaching code in below post.

1. To add an item

2. To add an item with subitems

3. To delete an item

0 Kudos

Hi Priyanka Chowdry,

Thank you for your code.

But I have a question regarding this code : I don't see anything about an order.

You seem to work with material bom; but I need to work with order bom. And I don't see anything related to order (VBELN for example...)

Than you.

0 Kudos
TYPES:
  BEGIN OF TY_INFILE,
    FIELD1(50),
    FIELD2(50),
    FIELD3(50),
    FIELD4(50),
    FIELD5(50),
    FIELD6(50),
    FIELD7(50),
    FIELD8(50),
    FIELD9(50),
  END OF TY_INFILE,

  BEGIN OF TY_ITM,
    MATERIAL    TYPE CSAP_MBOM-MATNR,
    PLANT	      TYPE CSAP_MBOM-WERKS,
    USAGE       TYPE CSAP_MBOM-STLAN,
    CHANGE_NO   TYPE CSAP_MBOM-AENNR,
    CATEG	      TYPE POSTP,   "Item Category
    COMPONENT	  TYPE IDNRK,   "Component
    COMP_QTY    TYPE KMPMG,   "Component qty
    SUB_FLG,
    DEL_FLG,
    CONV_ERR,
    MSG         TYPE CHAR255,
  END OF TY_ITM,

  BEGIN OF TY_SUB,
    MATERIAL    TYPE CSAP_MBOM-MATNR,
    COMPONENT	  TYPE IDNRK,   "Component
    INST_PT	    TYPE EBORT,   "Installation Point
    QTY	        TYPE UPMNG,   "Sub-item Qty
    TEXT        TYPE UPTXT,   "Sub-item Text
    CONV_ERR,
    MSG         TYPE CHAR255,
  END OF TY_SUB.

DATA:
  GT_ITM_INFILE   TYPE TABLE OF TY_INFILE,
  GT_SUB_INFILE   TYPE TABLE OF TY_INFILE,
  GT_ITM          TYPE TABLE OF TY_ITM,
  GT_SUB          TYPE TABLE OF TY_SUB,
  GW_ITM          TYPE TY_ITM,
  GW_SUB          TYPE TY_SUB,

  GV_MSG      TYPE CHAR255,
  GV_CONV_ERR.

CONSTANTS:
  C_FTYPE(10) TYPE C VALUE 'ASC',
  C_DELIM     TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB,
  C_CRET      TYPE C VALUE CL_ABAP_CHAR_UTILITIES=>CR_LF.

FORM POST_DATA .
  DATA: LF_SUB_EXISTS.
  DATA: LF_TABIX(10).
  DATA: LF_GUIMSG(50).


  CALL FUNCTION 'CALO_INIT_API'
   EXCEPTIONS
     LOG_OBJECT_NOT_FOUND           = 1
     LOG_SUB_OBJECT_NOT_FOUND       = 2
     OTHERS                         = 3.
  IF SY-SUBRC <> 0.
  ENDIF.
  ULINE.
  WRITE / 'Processing Items' COLOR 1.
  LOOP AT GT_ITM INTO GW_ITM.
    WRITE SY-TABIX TO LF_TABIX LEFT-JUSTIFIED.

    WRITE: / LF_TABIX,
            GW_ITM-MATERIAL,
            GW_ITM-PLANT,
            GW_ITM-USAGE,
            GW_ITM-CHANGE_NO,
            GW_ITM-CATEG,
            GW_ITM-COMPONENT.
    IF GW_ITM-DEL_FLG EQ 'X'.
      "Delete Component
      CONCATENATE 'Processing Item:' LF_TABIX '- DEL Component'
                  INTO LF_GUIMSG SEPARATED BY SPACE.
      CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
        EXPORTING
          TEXT = LF_GUIMSG.
      PERFORM DEL_BOM_COMP.
    ELSE.
      IF GW_ITM-SUB_FLG IS INITIAL.
        "Add Component
        CONCATENATE 'Processing Item:' LF_TABIX '- ADD Component'
                    INTO LF_GUIMSG SEPARATED BY SPACE.
        CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
          EXPORTING
            TEXT = LF_GUIMSG.
        PERFORM ADD_BOM_COMP.
      ELSE.
        LOOP AT GT_SUB INTO GW_SUB WHERE MATERIAL EQ GW_ITM-MATERIAL
                                     AND COMPONENT EQ GW_ITM-COMPONENT.
          LF_SUB_EXISTS = 'X'.
          CLEAR GW_SUB.
        ENDLOOP.
        IF LF_SUB_EXISTS IS INITIAL.
          "Add Component
          CONCATENATE 'Processing Item:' LF_TABIX '- ADD Component'
                      INTO LF_GUIMSG SEPARATED BY SPACE.
          CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
            EXPORTING
              TEXT = LF_GUIMSG.
          PERFORM ADD_BOM_COMP.
        ELSE.
          "Add Component with Subitems
          CONCATENATE 'Processing Item:' LF_TABIX '- ADD Comp & Sub'
                      INTO LF_GUIMSG SEPARATED BY SPACE.
          CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
            EXPORTING
              TEXT = LF_GUIMSG.
          PERFORM ADD_BOM_COMP_WITH_SUB.
        ENDIF.
      ENDIF.
    ENDIF.
    CLEAR GW_ITM.
  ENDLOOP.

ENDFORM.                    " POST_DATA

0 Kudos
FORM DEL_BOM_COMP .

  DATA: LF_WARNING  TYPE CAPIFLAG-FLWARNING.
  DATA: LW_STKO1    TYPE STKO_API01,
        LW_STKO2    TYPE STKO_API02,
        LT_STKO2    TYPE TABLE OF STKO_API02.
  DATA: LW_STPO2    TYPE STPO_API02,
        LW_STPO3    TYPE STPO_API03,
        LT_STPO2    TYPE TABLE OF STPO_API02,
        LT_STPO3    TYPE TABLE OF STPO_API03.

  WRITE 'DEL Component :' COLOR 4.

  CALL FUNCTION 'CSAP_MAT_BOM_READ'
    EXPORTING
      MATERIAL    = GW_ITM-MATERIAL
      PLANT       = GW_ITM-PLANT
      BOM_USAGE   = GW_ITM-USAGE
      ALTERNATIVE = '01'
      CHANGE_NO   = GW_ITM-CHANGE_NO
    IMPORTING
      FL_WARNING  = LF_WARNING
    TABLES
      T_STPO      = LT_STPO2
      T_STKO      = LT_STKO2
    EXCEPTIONS
      ERROR       = 1
      OTHERS      = 2.
  IF SY-SUBRC <> 0.
    WRITE 'BOM Read Failed' COLOR 6.
  ELSE.

    CLEAR: LW_STPO2, LW_STPO3, LT_STPO3.
    READ TABLE LT_STPO2 INTO LW_STPO2
                WITH KEY ITEM_CATEG = GW_ITM-CATEG
                         COMPONENT  = GW_ITM-COMPONENT.
    IF SY-SUBRC NE 0.
      WRITE 'Comp Not EXIST' COLOR 6.
    ELSE.
      READ TABLE LT_STKO2 INTO LW_STKO2 INDEX 1.
      MOVE-CORRESPONDING LW_STKO2 TO LW_STKO1.

      MOVE-CORRESPONDING LW_STPO2 TO LW_STPO3.
      LW_STPO3-FLDELETE   = 'X'.
      APPEND LW_STPO3 TO LT_STPO3.

      CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
        EXPORTING
          MATERIAL           = GW_ITM-MATERIAL
          PLANT              = GW_ITM-PLANT
          BOM_USAGE          = GW_ITM-USAGE
          ALTERNATIVE        = '01'
          CHANGE_NO          = GW_ITM-CHANGE_NO
          I_STKO             = LW_STKO1
          FL_COMMIT_AND_WAIT = 'X'
        IMPORTING
          FL_WARNING         = LF_WARNING
          O_STKO             = LW_STKO2
        TABLES
          T_STPO             = LT_STPO3
        EXCEPTIONS
          ERROR              = 1
          OTHERS             = 2.
      IF SY-SUBRC <> 0.
        WRITE 'BOM Change Failed' COLOR 6.
      ELSE.
        WRITE 'Processing Sucess' COLOR 5.
      ENDIF.
    ENDIF.
  ENDIF.

ENDFORM.                    " DEL_BOM_COMP

FORM ADD_BOM_COMP .

  DATA: LF_WARNING  TYPE CAPIFLAG-FLWARNING.
  DATA: LW_STKO1    TYPE STKO_API01,
        LW_STKO2    TYPE STKO_API02,
        LT_STKO2    TYPE TABLE OF STKO_API02.
  DATA: LW_STPO2    TYPE STPO_API02,
        LW_STPO3    TYPE STPO_API03,
        LT_STPO2    TYPE TABLE OF STPO_API02,
        LT_STPO3    TYPE TABLE OF STPO_API03.
  DATA: LW_STPU1    TYPE STPU_API01,
        LT_STPU1    TYPE TABLE OF STPU_API01.

  WRITE 'ADD Component :' COLOR 4.

  CALL FUNCTION 'CSAP_MAT_BOM_READ'
    EXPORTING
      MATERIAL    = GW_ITM-MATERIAL
      PLANT       = GW_ITM-PLANT
      BOM_USAGE   = GW_ITM-USAGE
      ALTERNATIVE = '01'
      CHANGE_NO   = GW_ITM-CHANGE_NO
    IMPORTING
      FL_WARNING  = LF_WARNING
    TABLES
      T_STPO      = LT_STPO2
      T_STKO      = LT_STKO2
    EXCEPTIONS
      ERROR       = 1
      OTHERS      = 2.
  IF SY-SUBRC <> 0.
    WRITE 'BOM Read Failed' COLOR 6.
  ELSE.

    READ TABLE LT_STKO2 INTO LW_STKO2 INDEX 1.
    MOVE-CORRESPONDING LW_STKO2 TO LW_STKO1.

    LW_STPO3-COMPONENT  = GW_ITM-COMPONENT.
    LW_STPO3-ITEM_CATEG = GW_ITM-CATEG.
    LW_STPO3-COMP_QTY   = GW_ITM-COMP_QTY.
    APPEND LW_STPO3 TO LT_STPO3.

    CALL FUNCTION 'CSAP_MAT_BOM_MAINTAIN'
      EXPORTING
        MATERIAL           = GW_ITM-MATERIAL
        PLANT              = GW_ITM-PLANT
        BOM_USAGE          = GW_ITM-USAGE
        ALTERNATIVE        = '01'
        CHANGE_NO          = GW_ITM-CHANGE_NO
        I_STKO             = LW_STKO1
        FL_COMMIT_AND_WAIT = 'X'
        FL_NEW_ITEM        = 'X'
      IMPORTING
        FL_WARNING         = LF_WARNING
        O_STKO             = LW_STKO2
      TABLES
        T_STPO             = LT_STPO3
      EXCEPTIONS
        ERROR              = 1
        OTHERS             = 2.
    IF SY-SUBRC <> 0.
      WRITE 'BOM Change Failed' COLOR 6.
    ELSE.
      WRITE 'Processing Sucess' COLOR 5.
    ENDIF.
  ENDIF.

ENDFORM.                    " ADD_BOM_COMP

0 Kudos
FORM ADD_BOM_COMP_WITH_SUB .

  DATA: LT_STPO2 TYPE TABLE OF STPO_API02,
        LW_STPO2 TYPE STPO_API02.
  DATA: LW_BOM_HDR     LIKE CAD_BICSK,
        LT_BOM_ITEM    LIKE CAD_BOM_ITEM OCCURS 0 WITH HEADER LINE,
        LT_BOM_SUB     LIKE CSSUBITEM OCCURS 0 WITH HEADER LINE,
        DMS_CLASS_DATA LIKE CLS_CHARAC OCCURS 0 WITH HEADER LINE,
        SAP_FIELD_DATA LIKE RFCDMSDATA OCCURS 0 WITH HEADER LINE,
        E_RETURN       LIKE CAD_RETURN-VALUE,
        E_MESSAGE      LIKE MESSAGE-MSGTX,
        E_MESSAGE_LEN  LIKE CAD_RETURN-MESSAGE_LEN,
        I_DATE         LIKE BICSK-DATUV.
  WRITE 'ADD Comp & Sub:' COLOR 4.
  CALL FUNCTION 'CSAP_MAT_BOM_ITEM_SELECT'
    EXPORTING
      MATERIAL  = GW_ITM-MATERIAL
      PLANT     = GW_ITM-PLANT
      BOM_USAGE = GW_ITM-USAGE
    TABLES
      T_STPO    = LT_STPO2
    EXCEPTIONS
      ERROR     = 1
      OTHERS    = 2.
  IF SY-SUBRC EQ 0.
    SORT LT_STPO2 BY ITEM_NO DESCENDING.
    READ TABLE LT_STPO2 INTO LW_STPO2 INDEX 1.
  ELSE.
  ENDIF.

  CLEAR: LW_BOM_HDR, LT_BOM_ITEM, LT_BOM_SUB.
  REFRESH: LT_BOM_ITEM, LT_BOM_SUB.

  CALL FUNCTION 'CAD_DISPLAY_BOM_WITH_SUB_ITEMS'
    EXPORTING
      I_MATERIAL        = GW_ITM-MATERIAL
      I_PLANT           = GW_ITM-PLANT
      I_BOM_ALTERNATIVE = '01'
      I_BOM_TYPE        = GW_ITM-USAGE
      I_CHANGE_NUMBER   = GW_ITM-CHANGE_NO
      I_REVISION_LEVEL  = ' '
      I_DISPLAY_FLAG    = ' '
   IMPORTING
      E_RETURN          = E_RETURN
      E_MESSAGE         = E_MESSAGE
      E_MESSAGE_LEN     = E_MESSAGE_LEN
      E_BOM_HEADER      = LW_BOM_HDR
    TABLES
      BOM_ITEM          = LT_BOM_ITEM
      BOM_SUB_ITEM      = LT_BOM_SUB
      DMS_CLASS_DATA    = DMS_CLASS_DATA
      SAP_FIELD_DATA    = SAP_FIELD_DATA
    EXCEPTIONS
          OTHERS            = 1.
  IF E_RETURN NE 0.
    WRITE: E_MESSAGE.
    EXIT.
  ENDIF.

  CLEAR: LW_BOM_HDR.
  CLEAR:   LT_BOM_ITEM, LT_BOM_SUB.
  REFRESH: LT_BOM_ITEM, LT_BOM_SUB.

"------- fill BOM header -------
  LW_BOM_HDR-MATNR = GW_ITM-MATERIAL.
  LW_BOM_HDR-WERKS = GW_ITM-PLANT.
  LW_BOM_HDR-STLAL = '01'.
  LW_BOM_HDR-STLAN = GW_ITM-USAGE.
  LW_BOM_HDR-AENNR = GW_ITM-CHANGE_NO.
  "BOM_HEADER-BMENG = '1'.
  "BOM_HEADER-STKTX = 'new alternative text'.
  "BOM_HEADER-ZTEXT = 'new BOM text'.

"----- fill item ------
  LT_BOM_ITEM-UPSKZ     = 'X'.
  LT_BOM_ITEM-IDNRK     = GW_ITM-COMPONENT.
  LT_BOM_ITEM-POSNR     = LW_STPO2-ITEM_NO + 10.
  LT_BOM_ITEM-POSTP     = GW_ITM-CATEG.
  APPEND LT_BOM_ITEM.

"---- fill sub item -----
  LOOP AT GT_SUB INTO GW_SUB WHERE MATERIAL EQ GW_ITM-MATERIAL
                               AND COMPONENT EQ GW_ITM-COMPONENT.
    LT_BOM_SUB-POSID = '1'.
    "BOM_SUB_ITEM-UPOSZ = '1'.
    LT_BOM_SUB-EBORT = GW_SUB-INST_PT. "Installation Point
    LT_BOM_SUB-UPMNG = GW_SUB-QTY.     "Sub-item Qty
    LT_BOM_SUB-UPTXT = GW_SUB-TEXT.    "Sub-item Text
    APPEND LT_BOM_SUB.
    CLEAR: LT_BOM_SUB, GW_SUB.
  ENDLOOP.
" Post data
  CALL FUNCTION 'CAD_CHANGE_BOM_WITH_SUB_ITEMS'
    EXPORTING
      I_BOM_HEADER   = LW_BOM_HDR
    IMPORTING
      E_RETURN       = E_RETURN
      E_MESSAGE      = E_MESSAGE
      E_MESSAGE_LEN  = E_MESSAGE_LEN
      E_BOM_HEADER   = LW_BOM_HDR
    TABLES
      BOM_ITEM       = LT_BOM_ITEM
      BOM_SUB_ITEM   = LT_BOM_SUB
      DMS_CLASS_DATA = DMS_CLASS_DATA
      SAP_FIELD_DATA = SAP_FIELD_DATA
    EXCEPTIONS
      OTHERS         = 1.
  WRITE: "'Message   : ',
         E_MESSAGE+0(100).", 'Returncode: ', E_RETURN.
ENDFORM.                    " ADD_BOM_COMP_WITH_SUB

0 Kudos

Hi Joskin, Leave it, if it does not help. But try searching the FMs to fulfill your requirement too....