Hi Hari
We have a same case & we are uploading schedule line by using BDC in VA32 ( Scheduling Agreement). You can use the same.
REPORT ZSD_BDC_SO_SCH_UPLOAD
no standard page heading line-size 255.
include bdcrecx1.
types: begin of ty_va32,
vbeln TYPE vbeln_va,
kdmat TYPE matnr_ku,
prgbz TYPE prgbz,
etdat TYPE etdat,
wmeng TYPE char13,
END OF ty_va32.
data: gt_va32 type standard table of ty_va32,
gs_va32 type ty_va32,
gt_vbap type standard table of vbap,
gs_vbap type vbap,
gt_vbep type standard table of vbep,
gs_vbep type vbep.
data: gt_data type standard table of alsmex_tabline initial size 0,
gs_data type alsmex_tabline,
gt_data1 type standard table of alsmex_tabline,
gs_data1 type alsmex_tabline.
parameters: p_file like rlgrap-filename obligatory.
at selection-screen on value-request for p_file.
PERFORM get_file.
at selection-screen output.
CLEAR nodata.
start-of-selection.
PERFORM excel_to_internal_table.
PERFORM upload_data.
*&---------------------------------------------------------------------*
*& Form EXCEL_TO_INTERNAL_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM EXCEL_TO_INTERNAL_TABLE .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = p_file
I_BEGIN_COL = 1
I_BEGIN_ROW = 2
I_END_COL = 6
I_END_ROW = 50000
TABLES
INTERN = gt_data
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
gt_data1 = gt_data.
sort gt_data by row.
delete adjacent duplicates from gt_data comparing row.
loop at gt_data into gs_data.
loop at gt_data1 into gs_data1 where row = gs_data-row.
case gs_data1-col.
when 0001.
gs_va32-vbeln = gs_data1-value.
PERFORM conversion USING gs_va32-vbeln
CHANGING gs_va32-vbeln.
when 0002.
gs_va32-kdmat = gs_data1-value.
* PERFORM conversion USING gs_va32-kdmat
* CHANGING gs_va32-kdmat.
when 0003.
gs_va32-prgbz = gs_data1-value.
when 0004.
gs_va32-etdat = gs_data1-value.
when 0005.
gs_va32-wmeng = gs_data1-value.
endcase.
endloop.
append gs_va32 to gt_va32.
clear gs_va32.
endloop.
IF gt_va32 IS NOT INITIAL.
SELECT *
FROM vbap
INTO TABLE gt_vbap
FOR ALL ENTRIES IN gt_va32
WHERE vbeln = gt_va32-vbeln
AND kdmat = gt_va32-kdmat.
SELECT *
FROM vbep
INTO TABLE gt_vbep
FOR ALL ENTRIES IN gt_vbap
WHERE vbeln = gt_vbap-vbeln
AND posnr = gt_vbap-posnr
AND wmeng <> 0.
ENDIF.
ENDFORM. " EXCEL_TO_INTERNAL_TABLE
*&---------------------------------------------------------------------*
*& Form UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM UPLOAD_DATA .
data: lt_va32 type standard table of ty_va32,
ls_va32 type ty_va32.
data: lv_kdmat type matnr_ku,
lv_tabix type sy-tabix,
lv_etdat type etdat,
lv_month(2) type c,
lv_date(2) type c,
lv_year(4) type c.
lt_va32 = gt_va32.
sort lt_va32 by vbeln.
delete adjacent duplicates from lt_va32 comparing vbeln.
perform open_group.
LOOP AT lt_va32 INTO ls_va32.
perform bdc_dynpro using 'SAPMV45A' '0125'.
perform bdc_field using 'BDC_CURSOR'
'VBAK-VBELN'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'VBAK-VBELN'
ls_va32-vbeln. "'2895'.
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'=POPO'.
* perform bdc_field using 'VBKD-BSTDK'
* '09.08.2012'.
* perform bdc_field using 'KUWEV-KUNNR'
* '100031'.
* perform bdc_field using 'RV45A-KETDAT'
* '14.08.2012'.
* perform bdc_field using 'RV45A-KPRGBZ'
* 'D'.
* perform bdc_field using 'VBKD-PRSDT'
* '14.08.2012'.
* perform bdc_field using 'VBKD-ZTERM'
* '0008'.
perform bdc_field using 'BDC_CURSOR'
'RV45A-MABNR(01)'.
"Start - Item Loop
CLEAR lv_tabix.
LOOP AT gt_va32 INTO gs_va32 WHERE vbeln = ls_va32-vbeln.
lv_tabix = lv_tabix + 1.
CONDENSE gs_va32-kdmat.
READ TABLE gt_vbap INTO gs_vbap WITH KEY vbeln = gs_va32-vbeln
kdmat = gs_va32-kdmat.
IF sy-subrc = 0.
IF lv_tabix <> 1.
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'=POPO'.
ENDIF.
perform bdc_dynpro using 'SAPMV45A' '0251'.
perform bdc_field using 'BDC_CURSOR'
'RV45A-PO_KDMAT'.
perform bdc_field using 'BDC_OKCODE'
'=POSI'.
perform bdc_field using 'RV45A-PO_KDMAT'
gs_va32-kdmat. "'123456'.
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'=PEIN'.
perform bdc_field using 'BDC_CURSOR'
'VBAP-POSNR(01)'.
perform bdc_field using 'RV45A-VBAP_SELKZ(01)'
'X'.
CLEAR: lv_date, lv_month, lv_year, lv_etdat.
IF gs_va32-prgbz = 'M'.
SPLIT gs_va32-etdat AT '.' INTO lv_month lv_year.
PERFORM conversion USING lv_month
CHANGING lv_month.
CONCATENATE lv_year lv_month INTO lv_etdat.
ELSEIF gs_va32-prgbz = 'D'.
SPLIT gs_va32-etdat AT '.' INTO lv_date lv_month lv_year.
PERFORM conversion USING lv_date
CHANGING lv_date.
PERFORM conversion USING lv_month
CHANGING lv_month.
CONCATENATE lv_year lv_month lv_date INTO lv_etdat.
ENDIF.
READ TABLE gt_vbep INTO gs_vbep WITH KEY vbeln = gs_vbap-vbeln
posnr = gs_vbap-posnr
edatu+0(6) = lv_etdat.
IF sy-subrc = 0.
perform bdc_dynpro using 'SAPMV45A' '4003'.
perform bdc_field using 'BDC_OKCODE'
'=EIPO'. "'=EIAN'.
perform bdc_field using 'BDC_CURSOR'
'RV45A-ETDAT(01)'.
perform bdc_dynpro using 'SAPMV45A' '0252'.
perform bdc_field using 'BDC_OKCODE'
'=POSI'.
perform bdc_field using 'RV45A-PRGBZ'
gs_va32-prgbz. "'M'.
perform bdc_field using 'RV45A-ETDAT'
gs_va32-etdat. "'01.2013'.
"Code Commented
* perform bdc_dynpro using 'SAPMV45A' '4003'.
* perform bdc_field using 'BDC_OKCODE'
* '=EIAN'. "'/00'.
perform bdc_dynpro using 'SAPMV45A' '4003'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'BDC_CURSOR'
'VBEP-WMENG(01)'.
perform bdc_field using 'RV45A-PRGBZ(01)'
gs_va32-prgbz.
perform bdc_field using 'RV45A-ETDAT(01)'
gs_va32-etdat. "'01.2013'.
perform bdc_field using 'VBEP-WMENG(01)'
gs_va32-wmeng. "' 100'.
ELSE.
perform bdc_dynpro using 'SAPMV45A' '4003'.
perform bdc_field using 'BDC_OKCODE'
'=EIAN'.
perform bdc_field using 'BDC_CURSOR'
'RV45A-ETDAT(01)'.
perform bdc_dynpro using 'SAPMV45A' '4003'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'BDC_CURSOR'
'VBEP-WMENG(02)'.
perform bdc_field using 'RV45A-PRGBZ(02)'
gs_va32-prgbz.
perform bdc_field using 'RV45A-ETDAT(02)'
gs_va32-etdat. "'01.2013'.
perform bdc_field using 'VBEP-WMENG(02)'
gs_va32-wmeng. "' 100'.
ENDIF.
perform bdc_dynpro using 'SAPMV45A' '4003'.
perform bdc_field using 'BDC_OKCODE'
'/EBACK'.
perform bdc_field using 'BDC_CURSOR'
'RV45A-ETDAT(02)'.
ELSE.
WRITE :/ 'Customer Material:',
gs_va32-kdmat,
'Not Found In Sales Order:',
gs_va32-vbeln.
ENDIF.
ENDLOOP.
"End - Item Loop
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
perform bdc_transaction1 using 'VA32'.
ENDLOOP.
perform close_group.
ENDFORM. " UPLOAD_DATA
*&---------------------------------------------------------------------*
*& Form GET_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_FILE .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = syst-cprog
DYNPRO_NUMBER = syst-dynnr
* FIELD_NAME = ' '
IMPORTING
FILE_NAME = p_file.
ENDFORM. " GET_FILE
*&---------------------------------------------------------------------*
*& Form BDC_FIELD1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FNAM text
* -->FVAL text
*----------------------------------------------------------------------*
FORM BDC_FIELD1 USING FNAM FVAL.
* IF FVAL <> NODATA.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
SHIFT BDCDATA-FVAL LEFT DELETING LEADING SPACE.
APPEND BDCDATA.
* ENDIF.
ENDFORM. "bdc_field1
*&---------------------------------------------------------------------*
*& Form CONVERSION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GS_VA32_VBELN text
* <--P_GS_VA32_VBELN text
*----------------------------------------------------------------------*
FORM CONVERSION USING P_VAL1
CHANGING P_VAL2.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = p_val1
IMPORTING
OUTPUT = p_val2.
ENDFORM. " CONVERSION
*&---------------------------------------------------------------------*
*& Form BDC_TRANSACTION1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->TCODE text
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION1 USING TCODE.
DATA: L_MSTRING(480).
DATA: L_SUBRC LIKE SY-SUBRC.
REFRESH MESSTAB.
CALL TRANSACTION TCODE USING BDCDATA
MODE CTUMODE
MESSAGES INTO MESSTAB.
L_SUBRC = SY-SUBRC.
SKIP.
IF L_SUBRC <> 0. "AND E_GROUP <> SPACE.
IF E_GROUP_OPENED = ' '.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT.
E_GROUP_OPENED = 'X'.
ENDIF.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = TCODE
TABLES
DYNPROTAB = BDCDATA.
ENDIF.
REFRESH BDCDATA.
ENDFORM. "BDC_TRANSACTION1
Manjit Dhiman