11-08-2011 12:17 PM
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.
11-08-2011 12:31 PM
Hi Joskin,
There are some classes and fm are available.But none of them will full fill all the features of cu51.
Regards,
Madhu.
11-08-2011 12:38 PM
Thanks for your answer.
I'd like to be able to add an item (material) in the configuration result list.
Thank you.
11-09-2011 1:20 PM
I am trying to do it via Batch input, but result are really random.
Any help would be greatly appreciated.
Thank you.
11-09-2011 1:47 PM
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
11-09-2011 1:57 PM
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.
11-09-2011 2:01 PM
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
11-09-2011 2:03 PM
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
11-09-2011 2:03 PM
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
11-09-2011 2:06 PM
Hi Joskin, Leave it, if it does not help. But try searching the FMs to fulfill your requirement too....