Application Development and Automation 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: 
Read only

Sample code creating BOM for CS01 using BDC recording.

Former Member
0 Likes
1,497

Hi,

Can anyone give me sample coding creating BOM for CS01 using BDC recording.

I want to display the flat file records,under one (Alternative BOM).

I m already working on it,but i m getting one A.BOM for each records.

[ Header data ] [ Item Data ]

SOFTDRINKS WIND 1 13 1 ml l

SOFTDRINKS WIND 1 11 1 ml l

SOFTDRINKS WIND 1 15 1 ml l

SOFTDRINKS WIND 1 14 1 ml l

Code:

report ZBOM

no standard page heading line-size 255.

*include bdcrecx1.

*DATA: BEGIN OF bdc OCCURS 0,

  • matnr(18),

  • werks(4),

  • stlan(1),

  • END OF BDC.

*

*DATA: BEGIN OF BDC1 OCCURS 0,

  • idnrk(18),

  • MENGE(18),

  • MEINS(3),

  • postp(1),

  • posnr(4),

  • END OF bdc1.

DATA: BEGIN OF BDCDATA OCCURS 0,

matnr(18),

werks(4),

stlan(1),

idnrk(18),

MENGE(18),

MEINS(3),

postp(1),

posnr(4),

END OF BDCDATA.

data ibdcdata type standard table of bdcdata WITH header line.

*start-of-selection.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'C:\Documents and Settings\dilipkumar.b\Desktop\soft.txt'

FILETYPE = 'ASC'

HAS_FIELD_SEPARATOR = ','

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • VIRUS_SCAN_PROFILE =

  • NO_AUTH_CHECK = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = BDCDATA

  • EXCEPTIONS

  • FILE_OPEN_ERROR = 1

  • FILE_READ_ERROR = 2

  • NO_BATCH = 3

  • GUI_REFUSE_FILETRANSFER = 4

  • INVALID_TYPE = 5

  • NO_AUTHORITY = 6

  • UNKNOWN_ERROR = 7

  • BAD_DATA_FORMAT = 8

  • HEADER_NOT_ALLOWED = 9

  • SEPARATOR_NOT_ALLOWED = 10

  • HEADER_TOO_LONG = 11

  • UNKNOWN_DP_ERROR = 12

  • ACCESS_DENIED = 13

  • DP_OUT_OF_MEMORY = 14

  • DISK_FULL = 15

  • DP_TIMEOUT = 16

  • OTHERS = 17

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

*perform open_group.

loop at bdcdata.

perform bdc_dynpro using 'SAPLCSDI' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RC29N-STLAN'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RC29N-MATNR'

'SOFTDRINKS'.

perform bdc_field using 'RC29N-WERKS'

'WIND'.

perform bdc_field using 'RC29N-STLAN'

'1'.

perform bdc_field using 'RC29N-DATUV'

'16.09.2008'.

perform bdc_dynpro using 'SAPLCSDI' '0110'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RC29K-BMENG'

'1'.

perform bdc_field using 'RC29K-STLST'

'1'.

perform bdc_field using 'BDC_CURSOR'

'RC29K-EXSTL'.

perform bdc_dynpro using 'SAPLCSDI' '0111'.

perform bdc_field using 'BDC_CURSOR'

'RC29K-LABOR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPLCSDI' '0140'.

perform bdc_field using 'BDC_CURSOR'

'RC29P-POSTP(01)'.

perform bdc_field using 'BDC_OKCODE'

'=FCBU'.

perform bdc_field using 'RC29P-IDNRK(001)'

BDCDATA-IDNRK.

perform bdc_field using 'RC29P-MENGE(001)'

BDCDATA-MENGE.

perform bdc_field using 'RC29P-MEINS(001)'

BDCDATA-MEINS.

perform bdc_field using 'RC29P-POSTP(001)'

BDCDATA-POSTP.

perform bdc_dynpro using 'SAPLCSDI' '0130'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'BDC_CURSOR'

'RC29P-POSNR'.

perform bdc_field using 'RC29P-POSNR'

BDCDATA-POSNR. "'0010'.

perform bdc_field using 'RC29P-IDNRK'

BDCDATA-IDNRK. "'15'.

perform bdc_field using 'RC29P-MENGE'

BDCDATA-MENGE. "'1'.

perform bdc_field using 'RC29P-MEINS'

BDCDATA-MEINS. "'ml'.

perform bdc_dynpro using 'SAPLCSDI' '0131'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'BDC_CURSOR'

'RC29P-POTX1'.

perform bdc_field using 'RC29P-SANKA'

'X'.

*perform bdc_transaction using 'CS01'.

*perform close_group.

CALL TRANSACTION 'CS01' USING IBDCDATA MODE 'A' UPDATE 'S'.

REFRESH IBDCDATA.

clear ibdcdata.

endloop.

----


  • Start new screen *

----


FORM BDC_DYNPRO USING PROGRAM DYNPRO.

CLEAR iBDCDATA.

iBDCDATA-PROGRAM = PROGRAM.

iBDCDATA-DYNPRO = DYNPRO.

iBDCDATA-DYNBEGIN = 'X'.

APPEND ibDCDATA .

ENDFORM.

----


  • Insert field *

----


FORM BDC_FIELD USING FNAM FVAL.

  • IF FVAL <> NODATA.

CLEAR iBDCDATA.

iBDCDATA-FNAM = FNAM.

iBDCDATA-FVAL = FVAL.

APPEND iBDCDATA .

  • ENDIF.

ENDFORM.

3 REPLIES 3
Read only

Former Member
0 Likes
820

Chk these threads.

Read only

Former Member
0 Likes
820

Hi,

You can find a sample program [HERE.|http://www.sap-img.com/abap/program-loads-the-bill-of-material.htm]

Regards

Karthik D

Read only

0 Likes
820

Hi,

I tried with the sample code but i m not getting the required result.

Can anyone give some other soln.

Code:

REPORT ZBOM2

no standard page heading line-size 255.

*include bdcrecx1.

TYPES: BEGIN OF TY_FLAT, " structure for flat file

STRING(200),

END OF TY_FLAT.

TYPES: BEGIN OF TY_HEAD, " structure for header file

IND(2) TYPE N,

MATNR(18),

WERKS(4),

STLAN(1),

END OF TY_HEAD.

TYPES : BEGIN OF TY_ITEM, "structure for item file

IND(2) TYPE N,

POSTP(1),

IDNRK(18),

MENGE(13),

meins(3),

END OF TY_ITEM.

TYPES :BEGIN OF TY_FLAT1, " structure for final file

MATNR(18),

WERKS(4),

STLAN(1),

posnr(4),

POSTP(1),

IDNRK(18),

MENGE(13),

meins(3),

END OF TY_FLAT1.

  • INTERNAL TABLE DECLERATIONS:

DATA : T_FLAT TYPE STANDARD TABLE OF TY_FLAT,

T_FLAT1 TYPE STANDARD TABLE OF TY_FLAT1,

T_HEAD TYPE STANDARD TABLE OF TY_HEAD,

T_ITEM TYPE STANDARD TABLE OF TY_ITEM,

T_BDCDATA TYPE STANDARD TABLE OF BDCDATA with header line ,

T_BDCMSG TYPE STANDARD TABLE OF BDCMSGCOLL.

  • WORK AREA DECLERATIONS:

DATA : ST_FLAT TYPE TY_FLAT,

ST_FLAT1 TYPE TY_FLAT1,

ST_HEAD TYPE TY_HEAD,

ST_ITEM TYPE TY_ITEM,

ST_BDCDATA TYPE BDCDATA,

ST_BDCMSG TYPE BDCMSGCOLL.

  • VARIABLES:

DATA : FNAM TYPE LOCALFILE, "rlgrap-filename,

FTYP TYPE RLGRAP-FILETYPE,

LF_FNAM TYPE STRING.

DATA : V_IND(2) TYPE N, " value 1,

V_FLD(20),

V_NO(2) TYPE N.

*start-of-selection.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'C:\Documents and Settings\dilipkumar.b\Desktop\soft.txt'

FILETYPE = 'ASC'

HAS_FIELD_SEPARATOR = ','

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • VIRUS_SCAN_PROFILE =

  • NO_AUTH_CHECK = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

DATA_TAB = T_FLAT

  • EXCEPTIONS

  • FILE_OPEN_ERROR = 1

  • FILE_READ_ERROR = 2

  • NO_BATCH = 3

  • GUI_REFUSE_FILETRANSFER = 4

  • INVALID_TYPE = 5

  • NO_AUTHORITY = 6

  • UNKNOWN_ERROR = 7

  • BAD_DATA_FORMAT = 8

  • HEADER_NOT_ALLOWED = 9

  • SEPARATOR_NOT_ALLOWED = 10

  • HEADER_TOO_LONG = 11

  • UNKNOWN_DP_ERROR = 12

  • ACCESS_DENIED = 13

  • DP_OUT_OF_MEMORY = 14

  • DISK_FULL = 15

  • DP_TIMEOUT = 16

  • OTHERS = 17

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

LOOP AT T_FLAT INTO ST_FLAT.

SPLIT ST_FLAT AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB

INTO ST_FLAT1-MATNR ST_FLAT1-WERKS

ST_FLAT1-STLAN ST_FLAT1-POSTP

ST_FLAT1-IDNRK ST_FLAT1-MENGE ST_FLAT1-MEINS.

APPEND ST_FLAT1 TO T_FLAT1.

CLEAR ST_FLAT1.

ENDLOOP.

SORT T_FLAT1 BY MATNR WERKS STLAN POSTP IDNRK MENGE MEINS.

LOOP AT T_FLAT1 INTO ST_FLAT1.

MOVE :

ST_FLAT1-MATNR TO ST_HEAD-MATNR,

ST_FLAT1-WERKS TO ST_HEAD-WERKS,

ST_FLAT1-STLAN TO ST_HEAD-STLAN,

ST_FLAT1-POSTP TO ST_ITEM-POSTP,

ST_FLAT1-IDNRK TO ST_ITEM-IDNRK,

ST_FLAT1-MENGE TO ST_ITEM-MENGE,

ST_FLAT1-MENGE TO ST_ITEM-MEINS.

AT new STLAN.

ADD 1 TO V_IND.

ENDAT.

MOVE V_IND TO ST_HEAD-IND.

MOVE V_IND TO ST_ITEM-IND.

APPEND ST_HEAD TO T_HEAD.

APPEND ST_ITEM TO T_ITEM.

CLEAR ST_HEAD.

CLEAR ST_ITEM.

ENDLOOP.

CLEAR V_IND.

*perform open_group.

SORT T_ITEM BY IND.

SORT T_HEAD BY IND.

DELETE ADJACENT DUPLICATES FROM T_HEAD.

LOOP AT T_HEAD INTO ST_HEAD.

perform bdc_dynpro using 'SAPLCSDI' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RC29N-STLAN'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RC29N-MATNR'

ST_HEAD-MATNR.

perform bdc_field using 'RC29N-WERKS'

ST_HEAD-WERKS.

perform bdc_field using 'RC29N-STLAN'

ST_HEAD-STLAN.

perform bdc_field using 'RC29N-DATUV'

'16.09.2008'.

perform bdc_dynpro using 'SAPLCSDI' '0110'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RC29K-BMENG'

'1'.

perform bdc_field using 'RC29K-STLST'

'1'.

perform bdc_field using 'BDC_CURSOR'

'RC29K-EXSTL'.

perform bdc_dynpro using 'SAPLCSDI' '0111'.

perform bdc_field using 'BDC_CURSOR'

'RC29K-LABOR'.

LOOP AT T_ITEM INTO ST_ITEM WHERE IND = ST_HEAD-IND.

ADD 1 TO V_NO.

perform bdc_dynpro using 'SAPLCSDI' '0140'.

perform bdc_field using 'BDC_CURSOR'

'RC29K-MENGE(01)'.

perform bdc_field using 'BDC_OKCODE'

'=FCBU'.

perform bdc_dynpro using 'SAPLCSDI' '0140'.

perform bdc_field using 'BDC_CURSOR'

'RC29P-POSNR(01)'.

perform bdc_field using 'BDC_OKCODE'

'=FCBU'.

perform bdc_field using 'RC29P-IDNRK(01)'

ST_ITEM-IDNRK.

perform bdc_field using 'RC29P-MENGE(01)'

ST_ITEM-MENGE.

perform bdc_field using 'RC29P-MEINS(01)'

ST_ITEM-MEINS.

perform bdc_field using 'RC29P-POSTP(01)'

ST_ITEM-POSTP.

CONCATENATE 'RC29K-IDNRK(' V_NO ')' INTO V_FLD.

CONDENSE V_FLD.

PERFORM BDC_FIELD USING V_FLD

ST_ITEM-IDNRK.

CONCATENATE 'RC29K-MENGE(' V_NO ')' INTO V_FLD.

CONDENSE V_FLD.

PERFORM BDC_FIELD USING V_FLD

ST_ITEM-MENGE.

CONCATENATE 'RC29K-MEINS(' V_NO ')' INTO V_FLD.

CONDENSE V_FLD.

PERFORM BDC_FIELD USING V_FLD

ST_ITEM-MEINS.

CONCATENATE 'RC29K-POSTP(' V_NO ')' INTO V_FLD.

CONDENSE V_FLD.

PERFORM BDC_FIELD USING V_FLD

ST_ITEM-POSTP.

V_NO = 1.

ENDLOOP.

CLEAR V_NO.

*perform bdc_dynpro using 'SAPLCSDI' '0130'.

*perform bdc_field using 'BDC_OKCODE'

  • '/00'.

*perform bdc_field using 'BDC_CURSOR'

  • 'RC29P-POSNR'.

*perform bdc_field using 'RC29P-POSNR'

  • POSNR.

*perform bdc_field using 'RC29P-IDNRK'

  • bdcdata-IDNRK.

*perform bdc_field using 'RC29P-MENGE'

  • bdcdata-MENGE.

*perform bdc_field using 'RC29P-MEINS'

  • bdcdata-MEINS.

perform bdc_dynpro using 'SAPLCSDI' '0131'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'BDC_CURSOR'

'RC29P-POTX1'.

perform bdc_field using 'RC29P-SANKA'

'X'.

perform bdc_dynpro using 'SAPLCSDI' '0133'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'BDC_CURSOR'

'RC29P-matkl'.

perform bdc_field using 'RC29P-SANKA'

'zv01'.

perform bdc_dynpro using 'SAPLCSDI' '0140'.

perform bdc_field using 'BDC_CURSOR'

'RC29N-POSNR(01)'.

perform bdc_field using 'BDC_OKCODE'

'=FCBU'.

*perform bdc_transaction using 'CS01'.

  • perform close_group.

CALL TRANSACTION 'CS01' USING t_bdcdata MODE 'A' UPDATE 'S'.

REFRESH t_bdcdata.

clear t_bdcdata.

endloop.

----


  • Start new screen *

----


FORM BDC_DYNPRO USING PROGRAM DYNPRO.

CLEAR st_bdcdata.

st_bdcdata-PROGRAM = PROGRAM.

st_bdcdata-DYNPRO = DYNPRO.

st_bdcdata-DYNBEGIN = 'X'.

APPEND st_bdcdata to t_bdcdata .

ENDFORM.

----


  • Insert field *

----


FORM BDC_FIELD USING FNAM FVAL.

  • IF FVAL <> NODATA.

CLEAR st_bdcdata.

st_bdcdata-FNAM = FNAM.

st_bdcdata-FVAL = FVAL.

APPEND st_bdcdata to t_bdcdata.

  • ENDIF.

  • ENDFORM.