‎2014 Apr 16 5:02 AM
i have created a bdc program for uploading data through cs01. in debugging mode , the header details is uploading and then corresponding item details are uploading. but when i check in sm35 it is uploading only one item and header. i attached the program. please check and tell me.... its very urgent...
REPORT ZR_CS01_UPLOAD NO STANDARD PAGE HEADING.
**********************************************************************
***declaration part***
**********************************************************************
***declaration of flatfile***
types: begin of ty_flatfile,
matnr type RC29N-MATNR, "MATERIAL NUMBER
werks type RC29N-WERKS, "PLANT
stlan type RC29N-STLAN, "BOM QUANTITY
DATUV TYPE RC29N-DATUV, "VALID FROM DATE
ZTEXT TYPE RC29K-ZTEXT, "BOM TEXT
BMENG(10) TYPE c, "Base quantity
STLST TYPE RC29K-STLST, "BOM status
idnrk type RC29P-IDNRK, "BOM component
menge(10) type c, "Component quantity
postp type RC29P-POSTP, "Item Category (Bill of Material)
POSNR TYPE RC29P-POSNR, " BOM ITEM NUMBER
END OF ty_flatfile.
data: ta_flatfile TYPE TABLE OF ty_flatfile,
wa_flatfile type ty_flatfile,
* ta_flatfile type TABLE OF ty_flatfile,
wa_flatfile1 type ty_flatfile.
***declaration of bdc data***
data: ta_bdcdata TYPE TABLE OF bdcdata,
wa_bdcdata type bdcdata.
***declaration of excel file handling table***
FIELD-SYMBOLS: <fs> type any. "field symbol for alsm_excel
DATA: TA_EXCEL TYPE TABLE OF ALSMEX_TABLINE, "table to contain excel sheet values
WA_EXCEL TYPE ALSMEX_TABLINE.
***declaration of other parameters***
data: V_brow type i VALUE 2, "BEGIN OF ROW
V_bcol type i value 1, "BEGIN OF COL
V_erow type i value 65536, "END OF ROW
V_ecol type i value 256. "END OF COLUMN
data: V_tabix type sy-tabix, "current line.
v_lines type i, "total number of records
v_index type i, "hold column in excel conversion
v_flag ,
V_sear type string,
G_FIELD TYPE STRING,
G_COUNTER(2) TYPE N VALUE 00.
**********************************************************************
***SELECTION SCREEN***
**********************************************************************
***SELECTION SCREEN DESIGN***
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP 3.
PARAMETERS: p_file type IBIPPARMS-PATH . "input file
SELECTION-SCREEN SKIP 3.
SELECTION-SCREEN END OF BLOCK b1.
***SELECTION SCREEN VALUE REQUEST***
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'F4_FILENAME' "f4 help for file name
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = 'P_FILE'
IMPORTING
FILE_NAME = P_FILE.
***SELECTION SCREEN EVENT***
AT SELECTION-SCREEN. "validation
if p_file <> ''.
V_sear = p_file.
SEARCH V_sear for '.xls'.
if sy-subrc <> 0.
message 'please provide excel file. it is not valid' type 'E'.
ENDIF.
ENDIF.
**********************************************************************
***START OF SELECTION***
**********************************************************************
START-OF-SELECTION.
PERFORM EXCEL_UPLOAD.
PERFORM EXCEL_CONVERSION.
PERFORM NO_RECORDS.
**********************************************************************
***END OF SELECTION***
END-OF-SELECTION.
* if ta_flatfile is NOT INITIAL.
* loop at ta_flatfile INTO wa_flatfile.
* MOVE-CORRESPONDING wa_flatfile to wa_flaTfile1.
* APPEND wa_flatfile1 to ta_flatfile.
* ENDLOOP.
* ENDIF.
if ta_flatfile is NOT INITIAL.
* sort ta_flatfile by matnr.
loop at ta_flatfile INTO wa_flatfile.
MOVE-CORRESPONDING wa_flatfile to wa_flatfile1.
at FIRST.
perform bdc_open_group. "bdc new session
ENDAT.
at NEW matnr.
clear wa_bdcdata.
v_flag = 'X'.
perform bdc_header_insert.
ENDat.
* perform bdc_item_insert.
G_COUNTER = G_COUNTER + 1.
perform bdc_dynpro using 'SAPLCSDI' '0140'.
perform bdc_field using 'BDC_CURSOR'
'RC29P-POSTP(01)'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
CONCATENATE 'RC29P-IDNRK(' g_counter ')' into g_field.
perform bdc_field using G_FIELD
WA_FLATFILE1-IDNRK.
CONCATENATE 'RC29P-MENGE(' g_counter ')' into g_field.
perform bdc_field using G_FIELD
WA_FLATFILE1-MENGE.
CONCATENATE 'RC29P-POSTP(' g_counter ')' into g_field.
perform bdc_field using G_FIELD
WA_FLATFILE1-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'
WA_FLATFILE1-POSNR.
perform bdc_field using 'RC29P-IDNRK'
WA_FLATFILE1-IDNRK.
perform bdc_field using 'RC29P-MENGE'
WA_FLATFILE1-MENGE.
perform bdc_field using 'RC29P-MEINS'
'EA'.
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' '0140'.
CONCATENATE 'RC29P-POSNR(' g_counter ')' into g_field.
perform bdc_field using 'BDC_CURSOR'
G_FIELD.
perform bdc_field using 'BDC_OKCODE'
'=FCBU'.
at END OF matnr.
perform bdc_insert.
ENDAT.
at LAST.
PERFORM bdc_close_group.
ENDAT.
ENDLOOP.
else.
MESSAGE 'no data for uploading' type 'E'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form EXCEL_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXCEL_UPLOAD .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = V_BCOL
I_BEGIN_ROW = V_BROW
I_END_COL = V_ECOL
I_END_ROW = V_EROW
TABLES
INTERN = TA_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
ENDFORM. " EXCEL_UPLOAD
*&---------------------------------------------------------------------*
*& Form EXCEL_CONVERSION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXCEL_CONVERSION .
if ta_excel is NOT INITIAL.
sort ta_excel by row col.
clear wa_excel.
clear wa_flatfile.
LOOP AT ta_excel INTO wa_excel.
move wa_excel-col to v_index.
ASSIGN COMPONENT v_index OF STRUCTURE wa_flatfile to <fs>.
if sy-subrc = 0.
move wa_excel-value to <fs>.
ENDIF.
at END OF row.
append wa_flatfile to ta_flatfile.
clear wa_flatfile.
ENDAT.
ENDLOOP.
else.
MESSAGE 'no data for conversion' type 'I'.
ENDIF.
ENDFORM. " EXCEL_CONVERSION
*&---------------------------------------------------------------------*
*& Form NO_RECORDS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM NO_RECORDS .
DESCRIBE TABLE ta_flatfile LINES v_lines.
if v_lines = 0.
MESSAGE 'NO RECORDS TO UPLOAD' TYPE 'E'.
V_FLAG = 'X'.
ENDIF.
ENDFORM. " NO_RECORDS
*&---------------------------------------------------------------------*
*& Form BDC_OPEN_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BDC_OPEN_GROUP .
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
* DEST = FILLER8
GROUP = 'ZCS01'
* HOLDDATE = FILLER8
KEEP = 'X'
USER = SY-UNAME
* RECORD = FILLER1
PROG = SY-CPROG
* DCPFM = '%'
* DATFM = '%'
* IMPORTING
* QID =
EXCEPTIONS
CLIENT_INVALID = 1
DESTINATION_INVALID = 2
GROUP_INVALID = 3
GROUP_IS_LOCKED = 4
HOLDDATE_INVALID = 5
INTERNAL_ERROR = 6
QUEUE_ERROR = 7
RUNNING = 8
SYSTEM_LOCK_ERROR = 9
USER_INVALID = 10
OTHERS = 11
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " BDC_OPEN_GROUP
*&---------------------------------------------------------------------*
*& Form BDC_HEADER_INSERT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BDC_HEADER_INSERT .
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'
WA_FLATFILE1-MATNR.
perform bdc_field using 'RC29N-WERKS'
WA_FLATFILE1-WERKS.
perform bdc_field using 'RC29N-STLAN'
WA_FLATFILE1-STLAN.
perform bdc_field using 'RC29N-DATUV'
WA_FLATFILE1-DATUV.
perform bdc_dynpro using 'SAPLCSDI' '0110'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RC29K-ZTEXT'
WA_FLATFILE1-ZTEXT.
perform bdc_field using 'RC29K-BMENG'
WA_FLATFILE1-BMENG.
perform bdc_field using 'RC29K-STLST'
WA_FLATFILE1-STLST.
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'.
FORM BDC_INSERT .
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'CS01'
* POST_LOCAL = NOVBLOCAL
* PRINTING = NOPRINT
* SIMUBATCH = ' '
* CTUPARAMS = ' '
TABLES
DYNPROTAB = TA_BDCDATA
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
PRINTING_INVALID = 5
POSTING_INVALID = 6
OTHERS = 7
.
* IF SY-SUBRC <> 0.
** Implement suitable error handling here
* ENDIF.
*
FORM BDC_CLOSE_GROUP .
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3
.
* IF SY-SUBRC <> 0.
** Implement suitable error handling here
* ENDIF.
ENDFORM. " BDC_CLOSE_GROUP
FORM BDC_DYNPRO USING PROGRAM
SCREEN.
WA_BDCDATA-PROGRAM = PROGRAM.
WA_BDCDATA-DYNPRO = SCREEN.
WA_BDCDATA-DYNBEGIN = 'X'.
APPEND WA_BDCDATA TO TA_BDCDATA.
CLEAR WA_BDCDATA.
ENDFORM. " BDC_DYNPRO
*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0297 text
* -->P_0298 text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM FVAL.
WA_BDCDATA-FNAM = FNAM.
WA_BDCDATA-FVAL = FVAL.
APPEND WA_BDCDATA TO TA_BDCDATA.
CLEAR WA_BDCDATA.
ENDFORM. " BDC_FIELD
ENDFORM. "
‎2014 Apr 16 5:24 AM
Hi Dhivya,
Seems to be the problems is in the below code:
* sort ta_flatfile by matnr.
loop at ta_flatfile INTO wa_flatfile.
MOVE-CORRESPONDING wa_flatfile to wa_flatfile1.
at FIRST.
perform bdc_open_group. "bdc new session
ENDAT.
at NEW matnr.
clear wa_bdcdata.
v_flag = 'X'.
perform bdc_header_insert.
ENDat.
Can you please check in debug mode, whether these control break events are working correctly?
Because, wa_flatfile will have ***** only.
‎2014 Apr 16 5:36 AM
ya its working fine... and now i have done one thing....
perform bdc_field using 'BDC_OKCODE'
'=FCBU'.
i just comment this one. all items are uploaded now...
but in sm35, it is not completing... it shows the error
it stuck here... what ok code i have to give to exit this session???
‎2014 Apr 16 5:41 AM
Pass this in AT End of MATNR before the bdc_insert perform
perform bdc_field using 'BDC_OKCODE'
'=FCBU'.
‎2014 Apr 16 5:31 AM
Hi,
please activate the sort line:
sort ta_flatfile by matnr.
And add the following line after at NEW matnr.
REFRESH TA_BDCDATA.
Regards,
Klaus
‎2014 Apr 16 5:47 AM
hey i put that
perform bdc_field using 'BDC_OKCODE'
'=FCBU'.
in at last.... end at...
now its working....
‎2014 Apr 16 5:39 AM
Hi Dhviya,
use this save button perform in AT END of Matnr,as your inserting save button after each item.
and also refresh TA_BDCDATA table in AT NEW Matnr.
perform bdc_field using 'BDC_OKCODE'
'=FCBU'.
once try and reply.
Regards
Pavan.
‎2014 Apr 16 5:46 AM
Hi,
Use this BAPI 'CAD_CREATE_BOM_WITH_SUB_ITEMS' may be helpful.
data: bom_header like bicsk,
bom_item like csrfcitem occurs 0 with header line,
bom_sub_item 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.
clear: bom_header, bom_item, bom_sub_item.
refresh: bom_item, bom_sub_item.
* fill BOM header
bom_header-matnr = 'AH10'.
bom_header-stlal = '01'.
bom_header-stlan = '1'.
bom_header-bmeng = '1'.
bom_header-stktx = 'BOM text'.
bom_header-ztext = 'BOM textt'.
clear: bom_item, bom_sub_item.
refresh: bom_item, bom_sub_item.
* fill item
bom_item-upskz = 'X'.
bom_item-idnrk = 'AH20'.
bom_item-posnr = '10'.
bom_item-postp = 'L'.
bom_item-menge = '1'.
append bom_item.
bom_item-upskz = 'X'.
bom_item-idnrk = 'AH30'.
bom_item-posnr = '20'.
bom_item-postp = 'L'.
bom_item-menge = '1'.
append bom_item.
* fill sub item
bom_sub_item-posid = '1'.
bom_sub_item-ebort = 'test'.
bom_sub_item-upmng = '1'.
bom_sub_item-uposz = '1'.
bom_sub_item-uptxt = 'test'.
append bom_sub_item.
bom_sub_item-posid = '2'.
bom_sub_item-ebort = 'left'.
bom_sub_item-upmng = '1'.
bom_sub_item-uposz = '1'.
bom_sub_item-uptxt = 'left side'.
append bom_sub_item.
bom_sub_item-posid = '2'.
bom_sub_item-ebort = 'right'.
bom_sub_item-upmng = '1'.
bom_sub_item-uposz = '2'.
bom_sub_item-uptxt = 'right side'.
* Call function
call function 'CAD_CREATE_BOM_WITH_SUB_ITEMS'
exporting
i_bom_header = bom_header
I_AUTO_POSNR = ' '
IMPORTING
E_RETURN = e_return
E_MESSAGE = e_message
E_MESSAGE_LEN = e_message_len
E_BOM_HEADER = bom_header
tables
bom_item = bom_item
bom_sub_item = bom_sub_item
dms_class_data = dms_class_data
sap_field_data = sap_field_data
exceptions
others = 1.
Thanks&Regards,
Krishna