‎2007 Jul 26 5:15 PM
Hi gurus,
I have uploaded sales order data using BDC call transaction but now I want to use BAPI for this, so can you please the desired changes in the following code which I used to upload data using BDC.
Thanks
Rajeev Gupta
&----
*& Report ZBDC_SORDER *
*& *
&----
*& *
*& *
&----
REPORT zbdc_sorder .
************************************************************************
Definition of Structures *
************************************************************************
DATA: bdctab LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: messtab1 LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF itab OCCURS 0,
ord_typ(2),
sales_org(4),
dist_chan(2),
divison(2),
po_no(35),
sp(10),
sh(10),
mat_no(18),
quant(15),
price(10),
END OF itab.
DATA: itab2 LIKE itab OCCURS 0 WITH HEADER LINE.
************************************************************************
Definition of Variables *
************************************************************************
DATA: v_tabix LIKE syst-tabix,
v_tabix2(2) TYPE n,
v_kunnr LIKE vbak-kunnr,
v_vkorg LIKE vbak-vkorg,
v_vtweg LIKE vbak-vtweg,
v_spart LIKE vbak-spart,
v_index LIKE syst-index,
l1 LIKE syst-tabix,
v_counter(2) TYPE n,
v_counter_100(3) TYPE n,
c_tabix(2),
v_mat_no(18),
v_mat_quant(16),
v_mat_price(14),
v_messtab1_text(73).
************************************************************************
Definition of Constants *
************************************************************************
************************************************************************
START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.
PERFORM get_data.
PERFORM create_bdcdata.
PERFORM process_messtab.
END-OF-SELECTION.
&----
*& Form get_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data .
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = 'C:\Documents and Settings\ekansh\Desktop\sales_ord.txt'
filetype = 'DAT'
TABLES
data_tab = itab
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
gui_refuse_filetransfer = 8
OTHERS = 9.
write:/ itab-divison.
itab2[] = itab[].
ENDFORM. " get_data
*&----
**& Form create_bdcdata
*&----
text
*----
--> p1 text
<-- p2 text
*----
FORM create_bdcdata .
DESCRIBE TABLE itab LINES l1.
LOOP AT itab.
v_tabix = syst-tabix.
IF v_tabix = 1.
MOVE v_tabix TO v_tabix2.
PERFORM bdc_dynpro USING:
'X' 'SAPMV45A' '0101',
'' 'BDC_OKCODE' '/00',
'' 'VBAK-AUART' itab-ord_typ,
'' 'VBAK-VKORG' itab-sales_org,
'' 'VBAK-VTWEG' itab-dist_chan,
'' 'VBAK-SPART' itab-divison.
PERFORM line_bdc_tab.
v_kunnr = itab-sp.
v_vkorg = itab-sales_org.
v_vtweg = itab-dist_chan.
v_spart = itab-divison.
ELSE.
IF v_kunnr = itab-sp AND
v_vkorg = itab-sales_org AND
v_vtweg = itab-dist_chan AND
v_spart = itab-divison.
v_tabix2 = v_tabix2 + 1.
PERFORM line_bdc_tab.
ELSE.
PERFORM bdc_dynpro USING:
'X' 'SAPMV45A' '0101',
'' 'BDC_OKCODE' '/00',
'' 'VBAK-AUART' itab-ord_typ,
'' 'VBAK-VKORG' itab-sales_org,
'' 'VBAK-VTWEG' itab-dist_chan,
'' 'VBAK-SPART' itab-divison.
CLEAR v_tabix2.
v_tabix2 = v_tabix2 + 1.
PERFORM line_bdc_tab.
v_kunnr = itab-sp.
v_vkorg = itab-sales_org.
v_vtweg = itab-dist_chan.
v_spart = itab-divison.
ENDIF.
ENDIF.
READ TABLE itab2 WITH KEY sp = itab-sp
sales_org = itab-sales_org
dist_chan = itab-dist_chan
divison = itab-divison.
IF v_tabix = 1.
MOVE syst-tabix TO v_index.
ENDIF.
v_index = v_index + 1.
READ TABLE itab2 INDEX v_index.
IF itab2-sp = itab-sp AND
itab2-sales_org = itab-sales_org AND
itab2-dist_chan = itab-dist_chan AND
itab2-divison = itab-divison.
IF l1 = v_tabix.
PERFORM call_save.
CALL TRANSACTION 'VA01' USING bdctab
MODE 'E'
UPDATE 'S'
MESSAGES INTO messtab.
APPEND LINES OF messtab TO messtab1.
CLEAR: bdctab, messtab.
REFRESH: messtab,bdctab.
ENDIF.
ELSE.
PERFORM call_save.
CALL TRANSACTION 'VA01' USING bdctab
MODE 'E'
UPDATE 'S'
MESSAGES INTO messtab.
APPEND LINES OF messtab TO messtab1.
CLEAR: bdctab, messtab.
REFRESH: messtab,bdctab.
ENDIF.
ENDLOOP.
ENDFORM. " create_bdcdata
*&----
**& Form line_bdc_tab
*&----
text
*----
--> p1 text
<-- p2 text
*----
FORM line_bdc_tab .
PERFORM bdc_dynpro USING:
'X' 'SAPMV45A' '4001',
'' 'BDC_OKCODE' '=T\02',
'' 'VBKD-BSTKD' itab-po_no,
'' 'KUAGV-KUNNR' itab-sp,
'' 'KUWEV-KUNNR' itab-sh,
'X' 'SAPMV45A' '4001',
'' 'BDC_OKCODE' '/00'.
MOVE v_tabix2 TO c_tabix.
CONCATENATE 'RV45A-MABNR(' c_tabix ')' INTO v_mat_no.
CONCATENATE 'RV45A-KWMENG(' c_tabix ')' INTO v_mat_quant.
CONCATENATE 'KOMV-KBETR(' c_tabix ')' INTO v_mat_price.
CONDENSE v_mat_no.
CONDENSE v_mat_quant.
CONDENSE v_mat_price.
PERFORM bdc_dynpro USING:
'' v_mat_no itab-mat_no,
'' v_mat_quant itab-quant,
'' v_mat_price itab-price.
'X' 'SAPMV45A' '4001',
'' 'BDC_OKCODE' '=SICH'.
ENDFORM. " line_bdc_tab
&----
*& Form bdc_dynpro
&----
text
----
-->P_0382 text
-->P_0383 text
-->P_0384 text
----
FORM bdc_dynpro USING p1
p2
p3.
IF p1 = 'X'.
bdctab-dynbegin = p1.
bdctab-program = p2.
bdctab-dynpro = p3.
ELSE.
bdctab-fnam = p2.
bdctab-fval = p3.
ENDIF.
APPEND bdctab.
CLEAR bdctab.
ENDFORM. " bdc_dynpro
&----
*& Form call_save
&----
text
----
--> p1 text
<-- p2 text
----
FORM call_save .
PERFORM bdc_dynpro USING:
'X' 'SAPMV45A' '4001',
'' 'BDC_OKCODE' '=SICH'.
ENDFORM. " call_save
&----
*& Form process_messtab
&----
text
----
--> p1 text
<-- p2 text
----
FORM process_messtab .
LOOP AT messtab1 WHERE msgtyp = 'S'.
CALL FUNCTION 'SX_MESSAGE_TEXT_BUILD'
EXPORTING
msgid = messtab1-msgid
msgnr = messtab1-msgnr
msgv1 = messtab1-msgv1
msgv2 = messtab1-msgv2
msgv3 = messtab1-msgv3
msgv4 = messtab1-msgv4
IMPORTING
message_text_output = v_messtab1_text.
WRITE:/10 v_messtab1_text.
ENDLOOP.
ENDFORM. " process_messtab
‎2007 Jul 26 5:22 PM
Hello,
Try to pass the values to the BAPI like this.
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT1'
EXPORTING
ORDER_HEADER_IN = G_SO_HEADER
IMPORTING
SALESDOCUMENT = G_ORDER_NUMBER
SOLD_TO_PARTY = G_SO_SOLD_TO
SHIP_TO_PARTY = G_SO_SHIP_TO
BILLING_PARTY = G_SO_PAYER
RETURN = RETURN
TABLES
ORDER_ITEMS_IN = PI_T_SO_ITEM_IN
ORDER_PARTNERS = PI_T_SO_PARTNER
ORDER_ITEMS_OUT = PE_T_SO_ITEM_OUT
ORDER_CCARD = PI_T_SO_CCARD
EXCEPTIONS
OTHERS = 1.
Regards,
Vasanth
‎2007 Jul 26 5:28 PM
See tha sample code for sales order creation
SALES ORDER INPUT CREATION.
PARAMETERS: p_auart TYPE auart OBLIGATORY.
PARAMETERS: p_vkorg TYPE vkorg OBLIGATORY.
PARAMETERS: p_vtweg TYPE vtweg OBLIGATORY.
PARAMETERS: p_spart TYPE vtweg OBLIGATORY.
PARAMETERS: p_sold TYPE kunnr OBLIGATORY.
PARAMETERS: p_ship TYPE kunnr OBLIGATORY.
*ITEM
PARAMETERS: p_matnr TYPE matnr OBLIGATORY.
PARAMETERS: p_menge TYPE kwmeng OBLIGATORY.
PARAMETERS: p_plant TYPE werks_d OBLIGATORY.
PARAMETERS: p_itcat TYPE pstyv OBLIGATORY.
DATA DECLARATIONS.
DATA: v_vbeln LIKE vbak-vbeln.
DATA: header LIKE bapisdhead1.
DATA: headerx LIKE bapisdhead1x.
DATA: item LIKE bapisditem OCCURS 0 WITH HEADER LINE.
DATA: itemx LIKE bapisditemx OCCURS 0 WITH HEADER LINE.
DATA: partner LIKE bapipartnr OCCURS 0 WITH HEADER LINE.
DATA: return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: lt_schedules_inx TYPE STANDARD TABLE OF bapischdlx
WITH HEADER LINE.
DATA: lt_schedules_in TYPE STANDARD TABLE OF bapischdl
WITH HEADER LINE.
HEADER DATA
header-doc_type = p_auart.
headerx-doc_type = 'X'.
header-sales_org = p_vkorg.
headerx-sales_org = 'X'.
header-distr_chan = p_vtweg.
headerx-distr_chan = 'X'.
header-division = p_spart.
headerx-division = 'X'.
headerx-updateflag = 'I'.
PARTNER DATA
partner-partn_role = 'AG'.
partner-partn_numb = p_sold.
APPEND partner.
partner-partn_role = 'WE'.
partner-partn_numb = p_ship.
APPEND partner.
ITEM DATA
itemx-updateflag = 'I'.
item-itm_number = '000010'.
itemx-itm_number = 'X'.
item-material = p_matnr.
itemx-material = 'X'.
item-plant = p_plant.
itemx-plant = 'X'.
item-target_qty = p_menge.
itemx-target_qty = 'X'.
item-target_qu = 'EA'.
itemx-target_qu = 'X'.
item-item_categ = p_itcat.
itemx-item_categ = 'X'.
APPEND item.
APPEND itemx.
Fill schedule lines
lt_schedules_in-itm_number = '000010'.
lt_schedules_in-sched_line = '0001'.
lt_schedules_in-req_qty = p_menge.
APPEND lt_schedules_in.
Fill schedule line flags
lt_schedules_inx-itm_number = '000010'.
lt_schedules_inx-sched_line = '0001'.
lt_schedules_inx-updateflag = 'X'.
lt_schedules_inx-req_qty = 'X'.
APPEND lt_schedules_inx.
Call the BAPI
CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA1'
EXPORTING
sales_header_in = header
sales_header_inx = headerx
IMPORTING
salesdocument_ex = v_vbeln
TABLES
return = return
sales_items_in = item
sales_items_inx = itemx
sales_schedules_in = lt_schedules_in
sales_schedules_inx = lt_schedules_inx
sales_partners = partner.
Check the return table.
LOOP AT return WHERE type = 'E' OR type = 'A'.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
WRITE: / 'Error in creating document'.
ELSE.
COMMIT WORK AND WAIT.
WRITE: / 'Document ', v_vbeln, ' created'.
ENDIF.
after that check in the table VBAP whether serial number is cretaed or not
Thanks
Mahesh