2007 Jun 07 1:11 PM
Hi all,
I am working on BDC for sales order creation using VA01.
how to manage Header level and Item level in program?
how to write a code for multiple line item for single or multiple sales oder.
Regards,
Archana.
Hi all,
I am working on BDC for sales order creation using VA01.
how to manage Header level and Item level in program?
how to write a code for multiple line item for single or multiple sales oder.
Regards,
Archana.
2007 Jun 07 1:14 PM
Hi,
I'd suggest to consider of using BAPI FM BAPI_SALESORDER_CREATEFROMDAT2, where you can handle multiple line items easily and it has a better performance and control.
Best regards,
Peter
2007 Jun 07 1:16 PM
See the example program and i did for purchase order change and it has multiple line items..
report zpochange.
data : i_error like bdcmsgcoll occurs 0 with header line.
data : i_bdcdata like bdcdata occurs 0 with header line.
tables : ekko, ekpo.
data :c1(10) value 'ME22',
c2(1) value ',',c3(10).
data : var1(20). " LIKE EKKO-EBELN.
data : var2 like ekko-ebeln.
data : begin of i_ekko occurs 0,
header(2),
ebeln like ekko-ebeln,
end of i_ekko.
data : begin of i_ekpo occurs 0,
item(2),
ebeln like ekpo-ebeln,
ebelp like ekpo-ebelp,
menge(10), " LIKE EKPO-MENGE,
end of i_ekpo.
data : v like ekpo-ebelp.
data: begin of itab occurs 0,
text(300),
end of itab.
parameters: p_file like ibipparms-path.
*PARAMETERS: PONUMBER LIKE EKPO-EBELN.
at selection-screen on value-request for p_file.
call function 'F4_FILENAME'
exporting
program_name = syst-cprog
dynpro_number = syst-dynnr
FIELD_NAME = ' '
importing
file_name = p_file
.
start-of-selection.
*SELECT EBELN FROM EKKO INTO TABLE I_EKKO WHERE EBELN = PONUMBER.
*
SELECT EBELN EBELP MENGE FROM EKPO INTO TABLE I_EKPO WHERE EBELN
*= PONUMBER.
*
perform get_data.
*LOOP AT ITAB.
WRITE 😕 ITAB.
ENDLOOP.
loop at itab.
var1 = itab-text+0(1).
if var1 = 'H'.
*I_EKKO-EBELN = ITAB-TEXT.
split itab at c2 into i_ekko-header
i_ekko-ebeln.
SPLIT ITAB AT ',' INTO I_EKKO-EBELN.
" I_EKPO-EBELP
" I_EKPO-MENGE
" var1.
append i_ekko.
else.
split itab at c2 into i_ekpo-item
i_ekpo-ebeln
i_ekpo-ebelp
i_ekpo-menge.
append i_ekpo.
endif.
*var2 = i_ekpo-ebeln.
MOVE VAR1 TO I_EKPO-EBELN.
MOVE VAR1 TO I_EKKO-EBELN.
APPEND: I_EKPO.
*if not var1 is initial.
split var1 at ',' into i_ekpo-ebelp
i_ekpo-menge.
i_ekpo-ebeln = var2.
append i_ekpo.
*endif.
endloop.
loop at i_ekpo.
write 😕 i_ekpo.
endloop.
*
loop at i_ekko.
perform fill_data. " TABLES I_EKPO.
endloop.
LOOP AT I_EKPO.
WRITE 😕 I_EKPO.
ENDLOOP.
*&----
*& Form GET_DATA
*&----
text
*----
--> p1 text
<-- p2 text
*----
*LOOP AT I_ERROR.
WRITE 😕 I_ERROR.
ENDLOOP.
*
form get_data.
call function 'WS_UPLOAD'
exporting
codepage = ' '
filename = p_file
filetype = 'ASC'
headlen = ' '
line_exit = ' '
trunclen = ' '
user_form = ' '
user_prog = ' '
dat_d_format = ' '
IMPORTING
FILELENGTH =
tables
data_tab = itab
exceptions
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
others = 10
.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
endform. " GET_DATA
*&----
*& Form FILL_DATA
*&----
text
*----
-->P_I_EKPO text
*----
form fill_data. " tables i_ekpo .
perform bdcscreen using 'SAPMM06E' '0105'.
perform bdcfield using 'RM06E-BSTNR' i_ekko-ebeln.
perform bdcfield using 'BDC_OKCODE' '/00'.
loop at i_ekpo where ebeln = i_ekko-ebeln.
V = I_EKPO-EBELP.
perform bdcscreen using 'SAPMM06E' 0120.
perform bdcfield using 'BDC_CURSOR' 'RM06E-EBELP'.
perform bdcfield using 'RM06E-EBELP' i_ekpo-ebelp.
perform bdcfield using 'BDC_OKCODE' '/00'.
perform bdcscreen using 'SAPMM06E' 0120.
perform bdcfield using 'BDC_CURSOR' 'EKPO-MENGE(01)'.
perform bdcfield using 'RM06E-EBELP' i_ekpo-ebelp.
perform bdcfield using 'EKPO-MENGE(01)' i_ekpo-menge.
perform bdcfield using 'BDC_OKCODE' '/00'.
*PERFORM BDCSCREEN USING 'SAPMM06E' 0120.
*
*PERFORM BDCFIELD USING 'BDC_CURSOR' 'RMO6E-EBELP'.
*
*CLEAR V.
endloop.
perform bdcfield using 'BDC_OKCODE' '=BU'.
call transaction c1 using i_bdcdata mode 'A'
messages into i_error.
refresh i_bdcdata.
endform. " FILL_DATA
*&----
*& Form BDCSCREEN
*&----
text
*----
-->P_0140 text
-->P_0120 text
*----
form bdcscreen using p_program p_screen.
i_bdcdata-program = p_program.
i_bdcdata-dynpro = p_screen.
i_bdcdata-dynbegin = 'X'.
append i_bdcdata.
clear i_bdcdata.
endform. " BDCSCREEN
*&----
*& Form BDCFIELD
*&----
text
*----
-->P_0145 text
-->P_I_EKPO_EBELN text
*----
form bdcfield using fnam fval.
i_bdcdata-fnam = fnam.
i_bdcdata-fval = fval.
append i_bdcdata.
clear i_bdcdata.
endform. " BDCFIELD
Even va01 is also same logic
Reward Points if it is helpful
Thanks
Seshu
2007 Jun 08 10:23 AM
Hello Seshu ,
I did my BDC Program for Sales Order Creation.
i used two Inernal tables & loops . one for Header and another for Item level.
when i try to upload file , it upload Header data but it gives an error while uploading file for item level.
Here is code.
REPORT /ZSALESORDER_BDC .
DATA : BEGIN OF ITAB OCCURS 0,
AUART LIKE VBAK-AUART,
VKORG LIKE VBAK-VKORG,
VTWEG LIKE VBAK-VTWEG,
SPART LIKE VBAK-SPART,
BSTKD LIKE VBKD-BSTKD,
BSTDK LIKE VBAK-BSTDK,
KUNNR LIKE KUAGV-KUNNR,
KUNNR1 LIKE KUWEV-KUNNR,
KETDAT LIKE RV45A-KETDAT,
KPRGBZ LIKE RV45A-KPRGBZ,
DWERK LIKE T001W-WERKS,
PRSDT LIKE VBKD-PRSDT,
END OF ITAB.
DATA : BEGIN OF ITAB_ITEM OCCURS 0,
COUNT(5) TYPE P,
MABNR LIKE RV45A-MABNR,
KWMENG LIKE RV45A-KWMENG,
END OF ITAB_ITEM.
*CALLING FUNCTION FOR UPLOADING HEADER DATA
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = 'C:\SALESORDER\HEADER.TXT'
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = '#'
TABLES
DATA_TAB = ITAB.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION FOR UPLOADING DATA FOR ITEMS
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = 'C:\SALESORDER\ITEM.TXT'
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = '#'
TABLES
DATA_TAB = ITAB_ITEM.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
include bdcrecx1.
start-of-selection.
perform open_group.
LOOP AT ITAB.
perform bdc_dynpro using 'SAPMV45A' '0101'.
perform bdc_field using 'BDC_CURSOR'
'VBAK-SPART'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'VBAK-AUART'
ITAB-AUART. "'zosd'.
perform bdc_field using 'VBAK-VKORG'
ITAB-VKORG. "'expo'.
perform bdc_field using 'VBAK-VTWEG'
ITAB-VTWEG. "'si'.
perform bdc_field using 'VBAK-SPART'
ITAB-SPART. "'em'.
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'VBKD-BSTKD'
ITAB-BSTKD. "'4500000100'.
perform bdc_field using 'VBKD-BSTDK'
ITAB-BSTDK. "'01.04.2007'.
perform bdc_field using 'KUAGV-KUNNR'
ITAB-KUNNR. "'300161'.
perform bdc_field using 'KUWEV-KUNNR'
ITAB-KUNNR1. "'TV(TEVA)'.
perform bdc_field using 'RV45A-KETDAT'
ITAB-KETDAT. "'08.06.2007'.
perform bdc_field using 'RV45A-KPRGBZ'
ITAB-KPRGBZ. "'D'.
perform bdc_field using 'RV45A-DWERK'
ITAB-DWERK. "'ep04'.
perform bdc_field using 'VBKD-PRSDT'
ITAB-PRSDT. "'08.06.2007'.
LOOP AT ITAB_ITEM.
perform bdc_field using 'BDC_CURSOR'
'RV45A-KWMENG(02)'.
perform bdc_field using 'RV45A-MABNR(01)'
ITAB_ITEM-MABNR. "'420001245'.
perform bdc_field using 'RV45A-MABNR(02)'
'420001252'.
perform bdc_field using 'RV45A-KWMENG(01)'
ITAB_ITEM-KWMENG. "' 1000'.
perform bdc_field using 'RV45A-KWMENG(02)'
' 10,000'.
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
perform bdc_field using 'VBKD-BSTKD'
'4500000100'.
perform bdc_field using 'VBKD-BSTDK'
'01.04.2007'.
perform bdc_field using 'KUAGV-KUNNR'
'300161'.
perform bdc_field using 'KUWEV-KUNNR'
'TV(TEVA)'.
perform bdc_field using 'RV45A-KETDAT'
'08.06.2007'.
perform bdc_field using 'RV45A-KPRGBZ'
'D'.
perform bdc_field using 'RV45A-DWERK'
'EP04'.
perform bdc_field using 'VBKD-PRSDT'
'08.06.2007'.
perform bdc_field using 'VBKD-ZTERM'
'Z002'.
perform bdc_field using 'VBKD-INCO1'
'FOR'.
perform bdc_field using 'VBKD-INCO2'
'Pune'.
ENDLOOP.
perform bdc_field using 'BDC_CURSOR'
'RV45A-MABNR(02)'.
perform bdc_transaction using 'VA01'.
ENDLOOP.
perform close_group.
Regards,
Archana.
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |