‎2008 Jan 03 11:27 AM
Hi gurus !
i have create a RFC for creating order VA01using BDC.
In this RFC, Order is created using Import parameters and only 1 order is created at a time. Actually I want Document number is which create Order No as i have to export this Doc no.
data: bdcdata like bdcdata occurs 0 with header line.
FUNCTION ZCREATE_ORDER.
*"----
""Local interface:
*" IMPORTING
*" VALUE(SDTYPE) LIKE VBAK-AUART
*" VALUE(SDORG) LIKE VBAK-VKORG OPTIONAL
*" VALUE(DISTCHANNEL) LIKE VBAK-VTWEG OPTIONAL
*" VALUE(DIVISION) LIKE VBAK-SPART OPTIONAL
*" VALUE(SALESOFF) LIKE VBAK-VKBUR OPTIONAL
*" VALUE(SOLDTOPARTY) LIKE VBAK-KUNNR OPTIONAL
*" VALUE(PAYTERM) LIKE VBKD-ZTERM OPTIONAL
*" VALUE(DELPLANT) LIKE RV45A-DWERK OPTIONAL
*" VALUE(MATNO) LIKE MARA-MATNR OPTIONAL
*" VALUE(QTY) TYPE CHAR13 OPTIONAL
*" VALUE(DELDATE) LIKE RV45A-KETDAT OPTIONAL
*" VALUE(PRICEDATE) LIKE RV45A-KETDAT OPTIONAL
*"----
*****************BDCDATA STRUCTURE**********************
*data: bdcdata like bdcdata occurs 0 with header line.
*****************BDCMSGCOLL STRUCTURE***************************
data: it_bdcmsg like bdcmsgcoll occurs 0 with header line.
*****************INTERNAL TABLE FOR ERROR CATCH*****************
data : begin of m_tab1 occurs 10,
kunnr like rf02d-kunnr, "CUSTOMER ACC NO
dyname like bdcmsgcoll-dyname, " PROG NAME
dynumb like bdcmsgcoll-dynumb, " SCREEN NO
msgspra like bdcmsgcoll-msgspra, " LANGU
msgid like bdcmsgcoll-msgid, " MESSAGE ID
msgnr like bdcmsgcoll-msgnr, " MESSAGE NO
msgtyp like bdcmsgcoll-msgtyp, " MESSAGE TYPE
msgv1 like bdcmsgcoll-msgv1, " MESSAGE VARIABLE PART
w_msgtxt(273) type c, " Formatted message text
end of m_tab1.
data: w_msgtxt(273) type c, "Formatted message text
idx type i value'1'.
perform bdc_dynpro using 'SAPMV45A' '0101'.
perform bdc_field using 'BDC_CURSOR'
'VBAK-VKBUR'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'VBAK-AUART'
SDTYPE.
perform bdc_field using 'VBAK-VKORG'
SDORG.
perform bdc_field using 'VBAK-VTWEG'
DISTCHANNEL.
perform bdc_field using 'VBAK-SPART'
DIVISION.
perform bdc_field using 'VBAK-VKBUR'
SALESOFF.
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'KUAGV-KUNNR'
SOLDTOPARTY.
perform bdc_field using 'KUWEV-KUNNR'
''.
perform bdc_field using 'RV45A-KETDAT'
DELDATE.
perform bdc_field using 'RV45A-KPRGBZ'
'D'.
perform bdc_field using 'RV45A-DWERK'
DELPLANT.
perform bdc_field using 'VBKD-PRSDT'
PRICEDATE.
perform bdc_field using 'VBKD-ZTERM'
PAYTERM.
perform bdc_field using 'RV45A-MABNR(01)'
MATNO.
perform bdc_field using 'RV45A-KWMENG(01)'
QTY.
perform bdc_field using 'VBAP-VRKME(01)'
''.
perform bdc_dynpro using 'SAPMV45A' '4001'.
perform bdc_field using 'BDC_OKCODE'
'=SICH'.
perform bdc_field using 'KUAGV-KUNNR'
SOLDTOPARTY. "'700307'.
perform bdc_field using 'KUWEV-KUNNR'
SOLDTOPARTY. "'700307'.
perform bdc_field using 'RV45A-KETDAT'
DELDATE. " '04.12.2007'.
perform bdc_field using 'RV45A-KPRGBZ'
'D'.
perform bdc_field using 'RV45A-DWERK'
DELPLANT. "'DFTP'.
perform bdc_field using 'VBKD-PRSDT'
PRICEDATE. " '04.12.2007'.
perform bdc_field using 'VBKD-ZTERM'
PAYTERM. "'X009'.
perform bdc_field using 'BDC_CURSOR'
MATNO. "'RV45A-MABNR(01)'.
perform bdc_dynpro using 'SAPLSPO2' '0101'.
perform bdc_field using 'BDC_OKCODE'
'=OPT1'.
call transaction 'VA01' using bdcdata mode 'A'
update 'A'
messages into it_bdcmsg.
******************ERROR WRITE**********************
loop at it_bdcmsg.
move itab-kunnr to m_tab1-kunnr.
move it_bdcmsg-dyname to m_tab1-dyname.
move it_bdcmsg-dynumb to m_tab1-dynumb.
move it_bdcmsg-msgspra to m_tab1-msgspra.
move it_bdcmsg-msgid to m_tab1-msgid.
move it_bdcmsg-msgnr to m_tab1-msgnr.
move it_bdcmsg-msgtyp to m_tab1-msgtyp.
move it_bdcmsg-msgv1 to m_tab1-msgv1.
append m_tab1.
clear m_tab1.
endloop.
clear it_bdcmsg.
refresh it_bdcmsg.
refresh bdcdata.
loop at m_tab1.
call function 'MESSAGE_PREPARE'
exporting
language = sy-langu
msg_id = m_tab1-msgid
msg_no = m_tab1-msgnr
importing
msg_text = w_msgtxt
exceptions
function_not_completed = 1
message_not_found = 2
others = 3.
move w_msgtxt to m_tab1-w_msgtxt.
modify m_tab1.
endloop.
loop at m_tab1.
write:/1(4) idx,
7(12) m_tab1-kunnr,
22(5) m_tab1-msgid,
30(1) m_tab1-msgtyp,
34(3) m_tab1-msgnr,
40(10) m_tab1-dyname,
53(4) m_tab1-dynumb,
60(273) m_tab1-w_msgtxt.
idx = idx + 1.
endloop.
ENDFUNCTION.
-
Start new screen *
-
form bdc_dynpro using program dynpro.
clear bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
append bdcdata.
endform.
-
Insert field *
-
form bdc_field using fnam fval.
if fval space.
clear bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
append bdcdata.
endif.
endform.
‎2008 Jan 03 11:33 AM
hi this will help u.
Check the code :
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA : w_auart(4) TYPE c,
w_vkorg(4) TYPE c,
w_vtweg(2) TYPE c,
w_spart(2) TYPE c,
w_kunnr(10) TYPE c,
w_kunrg(10) TYPE c,
w_bstkd(35) TYPE c,
w_bstdk(10) TYPE c,
w_kwmeng(18) TYPE c,
w_zterm(4) TYPE c,
w_inco1(3) TYPE c,
w_inco2(28) TYPE c,
w_augru(3) TYPE c.
DATA : var1 TYPE string,
var2 TYPE c VALUE '(',
var3 TYPE c VALUE ')',
num(2) TYPE c,
flag(1) TYPE c.
DATA : BEGIN OF it_order, " Internal table Structure
auart(4) TYPE c, " Sales Order Type
vkorg(4) TYPE c, " Sales Organization
vtweg(2) TYPE c, " Distribution Channel
spart(2) TYPE c, " Division
kunnr(10) TYPE c, " Sold-to-Party
kunrg(10) TYPE c, " Ship-to-Party
bstkd(35) TYPE c, " Purchase Order No
bstdk(10) TYPE c, " Purchase Order Date
zterm(4) TYPE c, " Payment Terms
inco1(3) TYPE c, " Inco Terms1
inco2(20) TYPE c, " Inco Terms2
augru(3) TYPE c, " Order Reason
mabnr(18) TYPE c, " Material No
kwmeng(18) TYPE c, " Quantity
END OF it_order,
itab LIKE STANDARD TABLE OF it_order WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETER filename LIKE rlgrap-filename.
PARAMETER session LIKE apqi-groupid.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
************************************************************************
Get the file path
************************************************************************
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = filename
def_path = ' '
mask = ',.,..'
mode = 'O'
title = 'Select File'
IMPORTING
filename = filename
EXCEPTIONS
selection_cancel = 1.
CHECK sy-subrc = 0.
START-OF-SELECTION.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
codepage = ' '
filename = filename
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.
PERFORM open_group.
LOOP AT itab.
CLEAR : w_auart,w_vkorg,w_vtweg,w_spart,w_kunnr,w_kunrg,
w_bstkd,w_bstdk,w_zterm,w_inco1,w_inco2,w_augru.
w_auart = itab-auart.
w_vkorg = itab-vkorg.
w_vtweg = itab-vtweg.
w_spart = itab-spart.
w_kunnr = itab-kunnr.
w_kunrg = itab-kunrg.
w_bstkd = itab-bstkd.
w_bstdk = itab-bstdk.
w_zterm = itab-zterm.
w_inco1 = itab-inco1.
w_inco2 = itab-inco2.
w_augru = itab-augru.
ON CHANGE OF itab-kunnr OR itab-kunrg OR itab-bstkd .
flag = 0.
num = 1.
PERFORM bdc_dynpro USING 'SAPMV45A' '0101'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBAK-AUART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'VBAK-AUART' " Order Type
itab-auart.
PERFORM bdc_field USING 'VBAK-VKORG' " Sales Organization
itab-vkorg.
PERFORM bdc_field USING 'VBAK-VTWEG' " Distribution Channel
itab-vtweg.
PERFORM bdc_field USING 'VBAK-SPART' " Division
itab-spart.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'VBKD-BSTKD' " PO Number
itab-bstkd.
PERFORM bdc_field USING 'VBKD-BSTDK' " PO Date
itab-bstdk.
PERFORM bdc_field USING 'KUAGV-KUNNR' " Sold to Party
itab-kunnr.
PERFORM bdc_field USING 'KUWEV-KUNNR' " Ship to Party
itab-kunrg.
PERFORM bdc_field USING 'VBKD-ZTERM' " Payment Terms
itab-zterm.
PERFORM bdc_field USING 'VBKD-INCO1' " Inco Terms1
itab-inco1.
PERFORM bdc_field USING 'VBKD-INCO2' " Inco Terms2
itab-inco2.
PERFORM bdc_field USING 'VBAK-AUGRU' " Order Reason
itab-augru.
ENDON.
IF flag = 0.
LOOP AT itab WHERE bstkd = itab-bstkd AND kunnr = itab-kunnr .
var1 = 'RV45A-MABNR'.
CONCATENATE var1 var2 num var3 INTO var1.
PERFORM bdc_field USING var1
itab-mabnr.
var1 = 'RV45A-KWMENG'.
CONCATENATE var1 var2 num var3 INTO var1.
PERFORM bdc_field USING var1
itab-kwmeng.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
num = 2.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
flag = 1.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
PERFORM bdc_transaction USING 'VA01'.
ENDLOOP.
PERFORM close_group.
WRITE : / 'Session',session, 'was Created'.
FORM open_group.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = session
user = sy-uname
keep = 'X'.
ENDFORM.
FORM close_group.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDFORM.
FORM bdc_transaction USING tcode.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = bdcdata.
ENDFORM.
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
FORM bdc_field USING fnam fval.
IF fval <> ' '.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDIF.
ENDFORM.
with regards,
Hema Sundara.
reward if found helpful.