Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
guilherme_frisoni
Contributor

Here is a code snippet to update a BOM related to Sales Order or Quotation (transaction CS62).

You can load current BOM an change any field you need, or insert new itens to this BOM.

" Local Vars

DATA: lt_stb     TYPE TABLE OF stpox,

      ls_stb     TYPE stpox,

      lt_matcat  TYPE TABLE OF cscmat,

      ls_vbap    TYPE vbap,

      ls_stko    TYPE stko_api01,

      ls_stpo    TYPE stpo_api03,

      lt_stpo    TYPE TABLE OF stpo_api03,

      ln_item_no TYPE stpo_api03-item_no.

ls_vbap-vbeln = '0020000001'.  " Sales Order/Quotation

ls_vbap-posnr = '000010'.      " Item

" Fetch Salesorder data

SELECT SINGLE *

  FROM vbap

  INTO ls_vbap

  WHERE vbeln = ls_vbap-vbeln AND

        posnr = ls_vbap-posnr.

" Load BOM

CALL FUNCTION 'CS_BOM_EXPL_KND_V1'

  EXPORTING

    capid                 = 'PP01'

    cuobj                 = ls_vbap-cuobj

    datuv                 = sy-datum

    ehndl                 = '1'

    mktls                 = ' '

    mehrs                 = 'X'

    mmory                 = 'X'

    mtnrv                 = ls_vbap-matnr

    stlan                 = '1'

    werks                 = ls_vbap-werks

    vbeln                 = ls_vbap-vbeln

    vbpos                 = ls_vbap-posnr

    vrsvo                 = ' '

  TABLES

    stb                   = lt_stb

    matcat                = lt_matcat

  EXCEPTIONS

    alt_not_found         = 1

    call_invalid          = 2

    material_not_found    = 3

    missing_authorization = 4

    no_bom_found          = 5

    no_plant_data         = 6

    no_suitable_bom_found = 7

    conversion_error      = 8

    OTHERS                = 9.

CLEAR ln_item_no.

" Loop through BOM Itens

LOOP AT lt_stb INTO ls_stb

  WHERE stufe = '1' AND

        bmtyp = 'K'.

  ADD 1 TO ln_item_no.

  " Fill Bom Item to update

  CLEAR ls_stpo.

  ls_stpo-item_categ      = ls_stb-postp.

  ls_stpo-item_no         = ln_item_no.

  ls_stpo-component       = ls_stb-idnrk.

  " ... Fill any fields you need

  ls_stpo-bom_no          = ls_stb-stlnr.

  ls_stpo-item_node       = ls_stb-stlkn.

  ls_stpo-item_count      = ls_stb-stpoz.

  ls_stpo-bom_alt         = ls_stb-stlal.

  APPEND ls_stpo TO lt_stpo.

ENDLOOP.

" Save Order

CALL FUNCTION 'CSAP_ORD_BOM_MAINTAIN'

  EXPORTING

    order       = ls_vbap-vbeln

    position    = ls_vbap-posnr

    material    = ls_vbap-matnr

    plant       = ls_vbap-werks

    bom_usage   = '1'

    valid_from  = '01.01.2013'   " Caution on date format

    i_stko      = ls_stko

    fl_new_item = 'X'            " Check this if you insert new itens in BOM

  TABLES

    t_stpo      = lt_stpo

  EXCEPTIONS

    error       = 1

    OTHERS      = 2.

   

   

It's Done.