12-03-2007 11:10 AM
Hi Experts,
using FM Bapi_create_po1 I crated one Purchase order.
The Purchase order number is generated. But If I check the table Ekko its not getting stored.
Why its happening. Any one help me on this issue.
I wrote the code for commit work also.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
Thanks,
Points Assured.
12-03-2007 11:16 AM
hi Jasmine,
few things to check:
do the BAPI returns without any errro message?
did you check transaction SM13, if the DB changes are locked there?
did you chck transaction SM21 about system messages?
did you check the return code of BAPI_TRANSACTION_COMMIT?
ec
12-03-2007 11:18 AM
Hi
Try to delete the WAIT addition or check if the BAPI for commit returns an error
Max
12-03-2007 11:21 AM
Hi,
check the below sample code for ur reference
REPORT z_create_openppo NO STANDARD PAGE HEADING
LINE-SIZE 340
LINE-COUNT 60
MESSAGE-ID zricef.
----
SELECTION SCREEN *
----
SELECTION-SCREEN: BEGIN OF BLOCK mainblck WITH FRAME TITLE text-t01.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_app RADIOBUTTON GROUP cmp1.
PARAMETERS: p_pre RADIOBUTTON GROUP cmp1.
PARAMETERS: p_infile LIKE rlgrap-filename OBLIGATORY DEFAULT '/usr/sap/',
p_group(12) TYPE c,
p_user TYPE sy-uname.
PARAMETERS: p_errfl LIKE rlgrap-filename OBLIGATORY DEFAULT '/ricef/DEV/conversions/CV5060/data/cv5060_err.txt' .
PARAMETERS:p_tst RADIOBUTTON GROUP comp.
PARAMETERS:p_prd RADIOBUTTON GROUP comp.
SELECTION-SCREEN: END OF BLOCK mainblck.
----
CONSTANTS *
----
CONSTANTS:
con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.
----
WORK VARIABLES *
----
*Internal tabe to store upload header data
TYPES: BEGIN OF t_record,
header items
legpo(15) TYPE c,
bukrs TYPE bukrs,
bsart TYPE bsart,
cu_dat TYPE erdat,
lifnr TYPE lifnr,
vkorg TYPE vkorg,
ekgrp TYPE ekgrp,
waers TYPE waers,
doc_date TYPE ebdat,
s_werks TYPE werks,
*line items
legpo_item(4) TYPE c,
ematn TYPE matnr,
werks TYPE werks,
menge TYPE menge,
meins TYPE meins,
netpr TYPE poscurncy,
peinh TYPE peinh,
epstp TYPE epstp,
knttp TYPE knttp,
*delievery
eindt TYPE eindt,
message(72) TYPE c,
END OF t_record.
*Data table
TYPES: BEGIN OF t_src_header,
legpo(15) TYPE c,
bukrs(4) TYPE c,
bsart(4) TYPE c,
cu_dat(8) TYPE c,
lifnr(10) TYPE c,
vkorg(4) TYPE c,
ekgrp(3) TYPE c,
waers(3) TYPE c,
doc_date(8) TYPE c,
s_werks(4) TYPE c,
legpo_item(4) TYPE c,
ematn(18) TYPE c,
werks(4) TYPE c,
menge(13) TYPE c,
meins(3) TYPE c,
netpr(11) TYPE c,
peinh(5) TYPE c,
epstp(1) TYPE c,
knttp(1) TYPE c,
eindt(8) TYPE c,
END OF t_src_header.
TYPES: BEGIN OF lt_record,
header items
legpo(15) TYPE c,
bukrs(4) TYPE c, " TYPE bukrs,
bsart(2) TYPE c, "TYPE bsart,
cu_dat(8) TYPE c, " TYPE erdat,
lifnr(10) TYPE c, " TYPE lifnr,
vkorg(4) TYPE c, "TYPE vkorg,
ekgrp(3) TYPE c," TYPE ekgrp,
waers(3) TYPE c, " TYPE waers,
doc_date(8) TYPE c, "TYPE ebdat,
s_werks(4) TYPE c, " TYPE werks,
*line items
legpo_item(4) TYPE c,
ematn(18) TYPE c, " TYPE matnr,
werks(4) TYPE c, " TYPE werks,
menge(17) TYPE c, "TYPE menge,
meins(3) TYPE c, " TYPE meins,
netpr(11) TYPE c, " TYPE netpr,
peinh(5) TYPE c, " TYPE peinh,
epstp(1) TYPE c, " TYPE epstp,
knttp(1) TYPE c, "TYPE knttp,
*delivery
eindt(8) TYPE c, "TYPE eindt,
message(72) TYPE c,
END OF lt_record.
DATA: lt_record TYPE lt_record.
DATA: l_record TYPE t_record.
For the input purchase order data with a flag
TYPES : BEGIN OF t_pur_ord.
INCLUDE STRUCTURE l_record.
TYPES : mess(2500) TYPE c,
ok(1) TYPE c,
ebeln TYPE ekko-ebeln,
END OF t_pur_ord.
DATA: nodata VALUE '/' .
DATA: gd_file TYPE string.
DATA: w_menge TYPE char13.
DATA: w_netpr TYPE currency.
DATA: lv_knumv TYPE knumv.
DATA: gv_matnr TYPE matnr,
gv_ekgrp TYPE ekgrp.
*Internal Table for BAPI change.
DATA: i_tab TYPE STANDARD TABLE OF konv WITH KEY knumv kposn stunr zaehk,
st_temp TYPE konv.
DATA: it_record TYPE STANDARD TABLE OF t_record INITIAL SIZE 0,
st_error TYPE t_record,
i_error TYPE STANDARD TABLE OF t_record,
temp_error TYPE STANDARD TABLE OF t_record,
wa_record TYPE t_record.
Batchinputdata of single transaction
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
*Internal table to header upload data into
DATA: BEGIN OF it_datatab OCCURS 0,
row(500) TYPE c,
END OF it_datatab.
DATA: wa_uploadtxt TYPE t_src_header.
*String value to data in initially.
DATA: wa_string(255) TYPE c.
DATA: st_pur_ord TYPE t_pur_ord, "header for i_pur_ord
i_pur_ord TYPE STANDARD TABLE OF t_pur_ord.
CLASS cl_abap_char_utilities DEFINITION LOAD.
Structure For PO header
*structures for passing to BAPI
DATA: poheader TYPE bapimepoheader, "header data
poheaderx TYPE bapimepoheaderx.
PO number
DATA: po_number TYPE ekko-ebeln. "bapimepoheader-po_number. "created PO number
*Export header for BAPI Change
DATA: expheader TYPE bapimepoheader.
DATA:
*for messages
st_return TYPE bapiret2,
i_return TYPE STANDARD TABLE OF bapiret2,
i_return_ch TYPE STANDARD TABLE OF bapiret2,
wa_ret TYPE bapiret2.
DATA:
Internal table for PO items.
st_poitem TYPE bapimepoitem,
i_poitem TYPE STANDARD TABLE OF bapimepoitem,
st_poitemx TYPE bapimepoitemx,
i_poitemx TYPE STANDARD TABLE OF bapimepoitemx,
*schedule lines data
st_poschedule TYPE bapimeposchedule, "schedule lines
i_poschedule TYPE STANDARD TABLE OF bapimeposchedule,
st_poschedulx TYPE bapimeposchedulx,
i_poschedulx TYPE STANDARD TABLE OF bapimeposchedulx,
*conditions
st_condheader TYPE bapimepocondheader,
i_pocondheader TYPE STANDARD TABLE OF bapimepocondheader,
st_condheaderx TYPE bapimepocondheaderx,
i_pocondheaderx TYPE STANDARD TABLE OF bapimepocondheaderx,
*Internal table to hold messages from BAPI call
return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
----
FIELD-SYMBOLS *
----
FIELD-SYMBOLS: <fs_return> TYPE bapiret2.
----
AT SELECTION SCREEN *
----
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = p_infile
mask = ',*.txt.'
mode = 'O'
title = text-001
IMPORTING
filename = p_infile
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
************************************************************************
TOP OF PAGE廻 *
************************************************************************
TOP-OF-PAGE.
WRITE:/ sy-uline.
WRITE: / 'Program :', sy-repid,
52 'WB WHV - US Implementation',
116 'Page: ', sy-pagno.
WRITE:/ sy-uline.
SKIP 2.
************************************************************************
*START-OF-SELECTION
START-OF-SELECTION.
gd_file = p_infile.
PERFORM load_data.
Alternative method, where by you split fields at each TAB after you
have returned the data. No point unless you dont have access to
GUI_UPLOAD but just included for information
*
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = gd_file
filetype = 'ASC'
TABLES
data_tab = it_datatab "ITBL_IN_RECORD[]
EXCEPTIONS
file_open_error = 1
OTHERS = 2.
If upload is successful...
IF sy-subrc NE 0.
ELSE.
LOOP AT it_datatab.
CLEAR: wa_string, wa_uploadtxt.
wa_string = it_datatab.
Split the input string at TAB and push into variables
SPLIT wa_string AT con_tab INTO wa_uploadtxt-legpo
wa_uploadtxt-bukrs
wa_uploadtxt-bsart
wa_uploadtxt-cu_dat
wa_uploadtxt-lifnr
wa_uploadtxt-vkorg
wa_uploadtxt-ekgrp
wa_uploadtxt-waers
wa_uploadtxt-doc_date
wa_uploadtxt-s_werks
wa_uploadtxt-legpo_item
wa_uploadtxt-ematn
wa_uploadtxt-werks
wa_uploadtxt-menge
wa_uploadtxt-meins
wa_uploadtxt-netpr
wa_uploadtxt-peinh
wa_uploadtxt-epstp
wa_uploadtxt-knttp
wa_uploadtxt-eindt.
Move to workarea
MOVE-CORRESPONDING wa_uploadtxt TO wa_record.
APPEND wa_record TO it_record.
ENDLOOP.
ENDIF.
IF p_tst EQ 'X'.
PERFORM pre_validation.
ELSE.
*Peform BAPI CREATE
PERFORM call_bapi_po_create.
ENDIF.
----
END-OF-SELECTION *
----
*END-OF-SELECTION.
END-OF-SELECTION.
IF p_prd EQ 'X'.
*!! Text data is now contained within the internal table IT_RECORD
Display report data for illustration purposes
IF NOT i_error[] IS INITIAL.
PERFORM write_error_recs.
ENDIF.
DATA: lv_line TYPE i.
DESCRIBE TABLE it_record LINES lv_line.
WRITE:/ lv_line.
ENDIF.
&----
*& Form call_bapi_po_create
&----
Call the BAPI FM to create PO
----
FORM call_bapi_po_create .
DATA: curr_line TYPE t_record.
Open the error session
PERFORM open_group.
Iterate thru the input records...
LOOP AT it_record INTO curr_line.
APPEND curr_line TO temp_error.
st_pur_ord = curr_line.
*Load data into header
AT NEW legpo.
PERFORM fillheader.
ENDAT.
Populate the lineitem structures
PERFORM fillline.
On change of the legacy PO number, post one transaction into SAP
AT END OF legpo.
*When ZCM,ZCN, ZRP,ZRS call the Bapi
CASE poheader-doc_type.
WHEN 'ZCM' OR 'ZCN' OR 'ZRP' OR 'ZRS'.
PERFORM zcall_bapi.
WHEN OTHERS.
PERFORM gen_bdc.
ENDCASE.
*when ZPR,ZUB,ZIC call form gen_bdc
ENDAT.
ENDLOOP.
Close the BDC error session
PERFORM close_group.
ENDFORM. " call_bapi_po_create
&----
*& Form Fillheader
&----
Populate the PO header
----
FORM fillheader .
DATA: lv_date TYPE sy-datum,
lv1_date TYPE sy-datum,
lv_ekgrp TYPE ekgrp.
CLEAR: st_poitem,
st_poitemx,
st_poschedule,
st_poschedule,
st_condheader,
st_condheaderx.
REFRESH: i_poitem,
i_poitemx,
i_poschedule,
i_poschedulx,
i_pocondheader,
i_pocondheaderx.
**Purchasing group
SELECT SINGLE ekgrp FROM t024 INTO lv_ekgrp WHERE ekgrp = st_pur_ord-ekgrp.
*
*
IF sy-subrc NE 0.
APPEND LINES OF temp_error TO i_error.
MODIFY i_error FROM st_error TRANSPORTING message WHERE message = 'Purchasing Group is inocrrect'.
PERFORM write_error_recs.
ELSE.
gv_ekgrp = lv_ekgrp.
ENDIF.
Check the legacy type and populate the SAP document type for the PO
CASE st_pur_ord-bsart.
WHEN 'PO'.
st_pur_ord-bsart ='ZCM'.
WHEN 'CO'.
st_pur_ord-bsart ='ZCN'.
WHEN 'DO'.
st_pur_ord-bsart ='ZPR'.
WHEN 'RO'.
st_pur_ord-bsart ='ZRP'.
WHEN 'TO'.
st_pur_ord-bsart ='ZUB'.
ENDCASE.
Populate the header structure
poheader-comp_code = st_pur_ord-bukrs. "Company code
poheader-doc_type = st_pur_ord-bsart. "Doc type
poheader-creat_date = st_pur_ord-cu_dat. "Creation date
poheader-created_by = sy-uname. "Author
poheader-vendor = st_pur_ord-lifnr. "Vendor
poheader-langu = 'EN'. "Lang key
poheader-langu_iso = 'EN'. "Lang ISO key
poheader-purch_org = st_pur_ord-vkorg. "Sales Org
poheader-pur_group = st_pur_ord-ekgrp. "Purchasing Group
poheader-currency = st_pur_ord-waers. "Currency
poheader-currency_iso = st_pur_ord-waers. "Currency ISO
poheader-doc_date = st_pur_ord-doc_date. "Document date
poheader-suppl_plnt = st_pur_ord-s_werks. "Supplying plant
poheaderx-comp_code = 'X'.
poheaderx-doc_type ='X'.
poheaderx-creat_date = 'X'.
poheaderx-created_by = 'X'.
poheaderx-vendor = 'X'.
poheaderx-langu = 'X'.
poheaderx-langu_iso = 'X'.
poheaderx-purch_org = 'X'.
poheaderx-pur_group = 'X'.
poheaderx-currency = 'X'.
poheaderx-currency_iso = 'X'.
poheaderx-doc_date = 'X'.
poheaderx-suppl_plnt = 'X'.
ENDFORM. " Fillheader
&----
*& Form Fillline
&----
Populate the PO line items.
----
FORM fillline .
DATA: lv_date1 TYPE sy-datum,
lv_po TYPE ebeln,
lv_matnr TYPE matnr.
*material
CLEAR: lv_matnr,
gv_matnr.
SELECT SINGLE matnr FROM zmc_matlxref INTO lv_matnr
WHERE legmatnr = st_pur_ord-ematn.
IF sy-subrc NE 0.
APPEND LINES OF temp_error TO i_error.
MODIFY i_error FROM st_error TRANSPORTING message WHERE message = 'Material not in SAP'.
PERFORM write_error_recs.
ELSE.
gv_matnr = lv_matnr.
ENDIF.
Conversion for order unit
IF NOT st_pur_ord-meins IS INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = st_pur_ord-meins
IMPORTING
output = st_pur_ord-meins.
ENDIF.
*Item category depends on Doctype
CASE poheader-doc_type.
WHEN 'ZCN' OR 'ZPR' OR 'ZRP' OR 'ZRS'.
st_pur_ord-epstp = 'L'.
WHEN 'ZUB' OR 'ZCM'.
st_pur_ord-epstp = ' '.
ENDCASE.
w_menge = st_pur_ord-menge.
Populate the lineitem data
st_poitem-po_item = st_pur_ord-legpo_item * 10. "Item number
st_poitem-material = lv_matnr. "Material Number
st_poitem-ematerial = lv_matnr. "Material Number
st_poitem-plant = st_pur_ord-werks. "Plant
st_poitem-trackingno = st_pur_ord-legpo. "Legacy PO
st_poitem-quantity = w_menge. "Quantity
st_poitem-orderpr_un = st_pur_ord-meins. "Order unit
st_poitem-orderpr_un_iso = st_pur_ord-meins. "Order unit
st_poitem-net_price = st_pur_ord-netpr * 1000. "Net Price
st_poitem-price_unit = st_pur_ord-peinh.
st_poitem-price_unit = '1000'.
st_poitem-item_cat = st_pur_ord-epstp. "Item category
st_poitem-acctasscat = st_pur_ord-knttp. "Acct Assignment category
APPEND st_poitem TO i_poitem.
CLEAR st_poitem.
INTERFACE ITEM DATA
st_poitemx-po_item = st_pur_ord-legpo_item * 10.
st_poitemx-po_itemx = 'X'.
st_poitemx-ematerial = 'X'.
st_poitemx-plant = 'X'.
st_poitemx-trackingno = 'X'.
st_poitemx-quantity = 'X'.
st_poitemx-orderpr_un = 'X'.
st_poitemx-orderpr_un_iso = 'X'.
st_poitemx-net_price = 'X'.
st_poitemx-price_unit = 'X'.
st_poitemx-item_cat = 'X'.
st_poitemx-acctasscat = 'X'.
st_poitem-CALCTYPE = 'X'.
APPEND st_poitemx TO i_poitemx.
CLEAR st_poitemx.
*Convert date to user format
lv_date1 = st_pur_ord-eindt.
WRITE lv_date1 TO lv_date1.
DELIVERY DETAILS DATA
st_poschedule-po_item = st_pur_ord-legpo_item * 10.
st_poschedule-delivery_date = lv_date1.
APPEND st_poschedule TO i_poschedule.
CLEAR st_poschedule.
Delivery interface
st_poschedulx-po_item = st_pur_ord-legpo_item * 10.
st_poschedulx-delivery_date = 'X'.
st_poitemx-po_itemx = 'X'.
APPEND st_poschedulx TO i_poschedulx.
CLEAR st_poschedulx.
*CONDITIONS
st_condheader-itm_number = st_pur_ord-legpo_item * 10.
CASE poheader-doc_type.
WHEN 'ZCN' OR 'ZPR' OR 'ZRP' OR 'ZRS'.
st_condheader-cond_type = 'ZWUS'.
WHEN 'ZUB' OR 'ZCM'.
st_condheader-cond_type = 'PB00'.
ENDCASE.
st_condheader-cond_value = st_pur_ord-netpr * 1000.
st_condheader-currency = 'USD'.
st_condheader-currency_iso = 'USD'.
st_condheader-cond_unit = 'EA'.
st_condheader-cond_unit_iso = 'EA'.
st_condheader-cond_p_unt = '1000'.
Check to see if the material and plant combo exists in SAP
SELECT SINGLE ebeln INTO lv_po FROM ekpo
WHERE matnr = lv_matnr AND
werks = st_pur_ord-werks.
If yes...update
IF sy-subrc EQ 0.
st_condheader-change_id = 'U'.
ELSE. "Insert
st_condheader-change_id = 'I'.
ENDIF.
st_condheader-condchaman = 'X'.
APPEND st_condheader TO i_pocondheader.
CLEAR st_condheader.
*CONDITIONS INTERFACE
st_condheaderx-itm_number = st_pur_ord-legpo_item * 10.
st_condheaderx-itm_numberx = 'X'.
st_condheaderx-cond_type = 'X'.
st_condheaderx-cond_value = 'X'.
st_condheaderx-currency = 'X'.
st_condheaderx-currency_iso = 'X'.
st_condheaderx-cond_unit = 'X'.
st_condheaderx-cond_unit_iso = 'X'.
st_condheaderx-cond_p_unt = 'X'.
st_condheaderx-change_id = 'X'.
st_condheaderx-condchaman = 'X'.
APPEND st_condheaderx TO i_pocondheaderx.
CLEAR st_condheaderx.
ENDFORM. " Fillline
&----
*& Form ZCALL_BAPI
&----
BAPI to post
----
FORM zcall_bapi.
DATA: lv_flag TYPE c,
lst_return TYPE bapiret2.
DATA: i_ekko TYPE STANDARD TABLE OF ekko.
DATA: lv_zaehk LIKE konv-zaehk,
lv_changid TYPE cdchngind.
DATA: st_return_ch TYPE bapiret2.
REFRESH: i_return.
Call PO create FM to post the PO transaction
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = poheader
poheaderx = poheaderx
IMPORTING
exppurchaseorder = po_number
TABLES
return = i_return
poitem = i_poitem
poitemx = i_poitemx
poschedule = i_poschedule
poschedulex = i_poschedulx
pocondheader = i_pocondheader
pocondheaderx = i_pocondheaderx.
Read the return Internal table for the outcome of the post...
If it is E or A, then the posting errored
In this case, pass the error records to BDC session
READ TABLE i_return ASSIGNING <fs_return> WITH KEY type = 'E'.
IF sy-subrc NE 0.
READ TABLE i_return ASSIGNING <fs_return> WITH KEY type = 'A'.
IF sy-subrc EQ 0.
lv_flag = 'N'.
ENDIF.
ELSE.
lv_flag = 'N'.
ENDIF.
If NO errors occured during posting, commit the transaction
IF lv_flag NE 'N'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
READ TABLE i_return INTO wa_ret WITH KEY type = 'S'.
IF sy-subrc EQ 0.
WRITE:/ wa_ret-message.
ENDIF.
REFRESH temp_error.
ELSE.
Else rollback the data and generate BDC session
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT i_return INTO lst_return WHERE type = 'E'
OR type = 'A'.
CONCATENATE lst_return-message st_error-message
INTO st_error-message SEPARATED BY '-'.
ENDLOOP.
IF i_error[] IS INITIAL.
Open the error session
PERFORM open_group.
ENDIF.
Append error internal table
APPEND LINES OF temp_error TO i_error.
REFRESH: temp_error.
MODIFY i_error FROM st_error TRANSPORTING message WHERE message = ''.
Generate the BDC Session
PERFORM gen_bdc.
ENDIF.
CLEAR st_error.
LOOP AT i_return INTO wa_ret.
WRITE / wa_ret-message.
ENDLOOP.
******************************************************************
******************************************************************
*Change BAPI
******************************************************************
******************************************************************
If the BAPI posting was successful...
IF lv_flag NE 'N'.
Conversion function for the PO
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = po_number
IMPORTING
output = po_number.
CLEAR lv_knumv.
*BAPI Change for order type
CASE poheader-doc_type.
WHEN 'ZCN'.
Select the condition record number for the PO
SELECT SINGLE knumv INTO lv_knumv FROM ekko
WHERE ebeln = po_number.
Select the condition records for above condition record number
SELECT * FROM konv INTO TABLE i_tab WHERE knumv = lv_knumv.
Iterate thru the condition records and do....
LOOP AT i_tab INTO st_temp.
REFRESH: i_pocondheaderx, i_pocondheader.
WRITE:/ st_temp-kschl.
Depending on the condition record type...
CASE st_temp-kschl.
Delete the condition records if conditions are..
WHEN 'Z001' OR 'Z002' OR 'Z003' OR 'Z004' OR 'Z005' OR 'Z006' OR 'Z007' OR 'Z008' OR 'Z009' OR 'ZO10' OR
'Z011' OR 'Z012' OR 'Z013' OR 'Z014' OR 'Z015' OR 'Z016' OR 'Z017' OR 'Z018' OR 'Z019' OR 'ZO20' OR
'Z021' OR 'Z022' OR 'Z023' OR 'Z024' OR 'Z025' OR 'Z216' OR 'Z027' OR 'Z028' OR 'Z029' OR 'ZO30' OR
'Z031' OR 'Z032' OR 'Z033' OR 'Z034' OR 'Z035' OR 'Z036' OR 'Z037' OR 'Z038' OR 'Z039' OR 'ZO40' OR
'Z041' OR 'Z042' OR 'Z043' OR 'Z044' OR 'Z045' OR 'Z046' OR 'Z047' OR 'Z048' OR 'Z049' OR 'ZO50' OR
'Z051' OR 'Z052' OR 'Z053' OR 'Z054' OR 'Z055' OR 'Z056' OR 'Z057' OR 'Z058' OR 'Z059' OR 'ZO60' OR
'Z061' OR 'Z062' OR 'Z063' OR 'Z064' OR 'Z065' OR 'Z066' OR 'Z067' OR 'Z068' OR 'Z069' OR 'ZO70' OR
'Z071' OR 'Z072' OR 'Z073' OR 'Z074' OR 'Z075' OR 'Z076' OR 'Z077' OR 'Z078' OR 'Z079' OR 'ZO80' OR
'Z081' OR 'Z082' OR 'Z083' OR 'Z084' OR 'Z085' OR 'Z086' OR 'Z087' OR 'Z088' OR 'Z089' OR 'ZO90' OR
'Z091' OR 'Z092' OR 'Z093' OR 'Z094' OR 'Z095' OR 'Z096' OR 'Z097' OR 'Z098' OR 'Z099' OR 'Z1O0' OR
'Z101' OR 'Z102' OR 'Z103' OR 'Z104' OR 'Z105' OR 'Z106' OR 'Z107' OR 'Z108' OR 'Z109' OR 'Z110' OR
'Z111' OR 'Z112' OR 'Z113' OR 'Z114' OR 'Z115' OR 'Z116' OR 'Z117' OR 'Z118' OR 'Z119' OR 'Z120' OR
'Z121' OR 'Z122' OR 'Z123' OR 'Z124' OR 'Z125' OR 'Z126' OR 'Z127' OR 'Z128' OR 'Z129' OR 'Z130' OR
'Z131' OR 'Z132' OR 'Z313' OR 'Z134' OR 'Z135' OR 'Z136' OR 'Z137' OR 'Z138' OR 'Z139' OR 'Z140' OR
'Z141' OR 'Z142' OR 'Z143' OR 'Z144' OR 'Z145' OR 'Z146' OR 'Z147' OR 'Z148' OR 'Z149' OR 'Z150' OR
'Z151' OR 'Z152' OR 'Z153' OR 'Z154' OR 'Z154' OR 'Z156' OR 'Z157' OR 'Z158' OR 'Z159' OR 'Z160' OR
'Z161' OR 'Z162' OR 'Z163' OR 'Z164' OR 'Z165' OR 'Z166' OR 'Z167' OR 'Z168' OR 'Z169' OR 'Z170' OR
'FRA1' OR 'FRB1' OR 'FRC1' OR 'FRA2' OR 'FRB2' OR 'FRC2' OR 'RB00' OR 'ZB00' OR 'RA00' OR 'ZA00' OR
'RA01' OR 'ZA01' OR 'ZC00' OR 'HB01' OR 'RL01' OR 'MM00' OR 'MM01' OR 'ZUS0'.
lv_changid = 'D'.
PERFORM populate_condheader USING lv_changid.
Update in following case
WHEN 'ZWUS'.
lv_changid = 'U'.
PERFORM populate_condheader USING lv_changid.
ENDCASE.
REFRESH: i_return_ch.
CLEAR: lv_flag.
Call the BAPI PO change to Update/Insert the condition records
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = po_number
poheader = poheader
poheaderx = poheaderx
IMPORTING
expheader = expheader
TABLES
return = i_return_ch
poitem = i_poitem
poitemx = i_poitemx
poschedule = i_poschedule
poschedulex = i_poschedulx
pocondheader = i_pocondheader
pocondheaderx = i_pocondheaderx.
Read the return table to check if errors occurecd...
READ TABLE i_return_ch INTO st_return_ch WITH KEY type = 'E'.
IF sy-subrc NE 0.
READ TABLE i_return ASSIGNING <fs_return> WITH KEY type = 'A'.
IF sy-subrc EQ 0.
lv_flag = 'N'.
ENDIF.
ELSE.
lv_flag = 'N'.
ENDIF.
If NO errors occured...
IF lv_flag NE 'N'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
**NOTHING.
ENDIF.
CLEAR lv_zaehk.
ENDLOOP.
ENDCASE.
ENDIF.
ENDFORM. " ZCALL_BAPI
&----
*& Form gen_bdc
&----
Subroutine to generate the BDC error session
----
FORM gen_bdc .
DATA: cnt TYPE i.
DATA: st_item TYPE bapimepoitem,
lst_poschedule TYPE bapimeposchedule.
DATA: l_price(20) TYPE c,
l_price1 LIKE ekpo-netpr,
l_price2(11) TYPE c,
l_qty(13) TYPE c,
l_prev TYPE aufep. "(5) type n.
Loop at the items tab...
LOOP AT i_poitem INTO st_item.
l_prev = st_item-po_item.
l_prev = l_prev - 10.
Reformat the creation date...
WRITE poheader-creat_date TO poheader-creat_date.
cnt = cnt + 1.
l_price1 = st_item-net_price.
l_qty = st_item-quantity.
SHIFT l_qty LEFT DELETING LEADING space.
l_price2 = l_price1.
SHIFT l_price2 LEFT DELETING LEADING space.
For the first line item...
IF cnt = 1.
**New code for ZPR,ZIC,ZUB Item category,supplying plant
***supplying plant
CASE poheader-doc_type.
WHEN 'ZPR' OR 'ZUB' OR 'ZIC'.
PERFORM bdc_dynpro USING 'SAPMM06E' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKKO-EKGRP'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=KOPF'.
PERFORM bdc_field USING 'EKKO-LIFNR'
poheader-vendor. "'6055899'.
PERFORM bdc_field USING 'RM06E-BSART'
poheader-doc_type. "'zcm'.
PERFORM bdc_field USING 'RM06E-BEDAT'
poheader-creat_date. "'05/04/2007'.
PERFORM bdc_field USING 'EKKO-EKORG'
poheader-purch_org. "'3000'.
PERFORM bdc_field USING 'EKKO-EKGRP'
poheader-pur_group. "'004'.
PERFORM bdc_field USING 'RM06E-WERKS'
'0041' .
PERFORM bdc_dynpro USING 'SAPMM06E' '0101'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=AB'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKKO-ZWERKS'.
PERFORM bdc_field USING 'EKKO-ZWERKS'
'0041'.
WHEN OTHERS.
PERFORM bdc_dynpro USING 'SAPMM06E' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKKO-EKGRP'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'EKKO-LIFNR'
poheader-vendor. "'6055899'.
PERFORM bdc_field USING 'RM06E-BSART'
poheader-doc_type. "'zcm'.
PERFORM bdc_field USING 'RM06E-BEDAT'
poheader-creat_date. "'05/04/2007'.
PERFORM bdc_field USING 'EKKO-EKORG'
poheader-purch_org. "'3000'.
PERFORM bdc_field USING 'EKKO-EKGRP'
poheader-pur_group. "'004'.
PERFORM bdc_field USING 'RM06E-WERKS'
'0041' .
ENDCASE.
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKPO-NETPR(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RM06E-EBELP'
st_item-po_item.
READ TABLE i_poschedule INTO lst_poschedule WITH KEY po_item = st_item-po_item.
WRITE lst_poschedule-delivery_date TO lst_poschedule-delivery_date.
PERFORM bdc_field USING 'RM06E-EEIND(01)'
lst_poschedule-delivery_date.
PERFORM bdc_field USING 'EKPO-WERKS(01)'
st_item-plant.
PERFORM bdc_field USING 'EKPO-EMATN(01)'
gv_matnr.
PERFORM bdc_field USING 'EKPO-MENGE(01)'
l_qty. "st_item-quantity.
PERFORM bdc_field USING 'EKPO-NETPR(01)'
l_price2.
perform bdc_field using 'EKPO-PEINH(01)'
'1000'.
*
IF poheader-doc_type = 'ZCN' OR
poheader-doc_type = 'ZPR' OR
poheader-doc_type = 'ZRP' OR
poheader-doc_type = 'ZRS'.
PERFORM bdc_field USING 'RM06E-EPSTP(01)'
'L'.
ENDIF.
*new code
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKPO-MENGE(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=DETA'.
PERFORM bdc_field USING 'RM06E-EBELP'
'10'.
*item details
PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKPO-NETPR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'EKPO-NETPR'
l_price2.
perform bdc_field using 'EKPO-BEDNR'
st_item-trackingno.
ENDIF.
For second line item...
IF cnt = 2.
PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKPO-MATKL(02)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RM06E-EBELP'
st_item-po_item.
READ TABLE i_poschedule INTO lst_poschedule WITH KEY po_item = st_item-po_item.
WRITE lst_poschedule-delivery_date TO lst_poschedule-delivery_date.
PERFORM bdc_field USING 'RM06E-EEIND(02)'
lst_poschedule-delivery_date.
PERFORM bdc_field USING 'EKPO-WERKS(02)'
st_item-plant.
PERFORM bdc_field USING 'EKPO-EMATN(02)'
gv_matnr.
PERFORM bdc_field USING 'EKPO-MENGE(02)'
l_qty. "st_item-quantity.
PERFORM bdc_field USING 'EKPO-NETPR(02)'
l_price2.
perform bdc_field using 'EKPO-PEINH(02)'
'1000'.
IF poheader-doc_type = 'ZCN' OR
poheader-doc_type = 'ZPR' OR
poheader-doc_type = 'ZRP' OR
poheader-doc_type = 'ZRS'.
PERFORM bdc_field USING 'RM06E-EPSTP(02)'
'L'.
ENDIF.
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKPO-MENGE(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=DETA'.
PERFORM bdc_field USING 'RM06E-EBELP'
'20'.
PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKPO-NETPR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'EKPO-NETPR'
l_price2.
perform bdc_field using 'EKPO-BEDNR'
st_item-trackingno.
ENDIF.
For line items greater than 2..
IF cnt > 2.
PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RM06E-EBELP'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
DATA: l_prev1(5) TYPE c,
l_temp TYPE ebelp.
l_prev1 = l_prev.
SHIFT l_prev1 LEFT DELETING LEADING 0.
l_temp = st_item-po_item - 10.
PERFORM bdc_field USING 'RM06E-EBELP'
l_temp. "'20'.
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKPO-NETPR(02)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RM06E-EBELP'
st_item-po_item.
READ TABLE i_poschedule INTO lst_poschedule
WITH KEY po_item = st_item-po_item.
WRITE lst_poschedule-delivery_date TO lst_poschedule-delivery_date.
PERFORM bdc_field USING 'RM06E-EEIND(02)'
lst_poschedule-delivery_date.
PERFORM bdc_field USING 'EKPO-WERKS(02)'
st_item-plant.
PERFORM bdc_field USING 'EKPO-EMATN(02)'
st_item-material.
PERFORM bdc_field USING 'EKPO-MENGE(02)'
l_qty. "st_item-quantity.
PERFORM bdc_field USING 'EKPO-NETPR(02)'
l_price2.
perform bdc_field using 'EKPO-PEINH(02)'
'1000'.
IF poheader-doc_type = 'ZCN' OR
poheader-doc_type = 'ZPR' OR
poheader-doc_type = 'ZRP' OR
poheader-doc_type = 'ZRS'.
PERFORM bdc_field USING 'RM06E-EPSTP(02)'
'L'.
ENDIF.
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKPO-MENGE(01)'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=DETA'.
PERFORM bdc_field USING 'RM06E-EBELP'
'10'.
PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.
PERFORM bdc_field USING 'BDC_CURSOR'
'EKPO-NETPR'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'EKPO-NETPR'
l_price2.
perform bdc_field using 'EKPO-PEINH'
'1000'.
perform bdc_field using 'EKPO-BEDNR'
st_item-trackingno.
ENDIF.
ENDLOOP.
Save the BDC
PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.
PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RM06E-EBELP'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
PERFORM bdc_field USING 'RM06E-EBELP'
'20'.
PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=YES'.
Insert the BDC
PERFORM bdc_transaction USING 'ME21'.
ENDFORM. " gen_bdc
----
Start new screen *
----
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
----
Insert field *
----
FORM bdc_field USING fnam fval.
IF fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDIF.
ENDFORM. "BDC_FIELD
----
Start new transaction according to parameters *
----
FORM bdc_transaction USING tcode.
batch input session
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = bdcdata.
WRITE: / 'BDC_INSERT'(i03),
tcode,
'returncode:'(i05),
sy-subrc,
'RECORD:',
sy-index.
REFRESH bdcdata.
ENDFORM. "BDC_TRANSACTION
----
end batchinput session *
(call transaction using...: error session) *
----
FORM close_group.
close batchinput group
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDFORM. "CLOSE_GROUP
----
create batchinput session *
(not for call transaction using...) *
----
FORM open_group.
WRITE: /(20) 'Create group'(i01), p_group.
SKIP.
open batchinput group
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = p_group
user = p_user
keep = 'X'. "KEEP
HOLDDATE = HOLDDATE.
WRITE: /(30) 'BDC_OPEN_GROUP'(i02),
(12) 'returncode:'(i05),
sy-subrc.
ENDFORM. "OPEN_GROUP
&----
*& Form write_error_recs
&----
Write out the error records
----
FORM write_error_recs .
DATA: l_line TYPE string.
Open the app server file to write...
OPEN DATASET p_errfl FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
Loop thru the error records and write to the appserver file
LOOP AT i_error INTO st_error.
MOVE-CORRESPONDING st_error TO lt_record.
TRANSFER lt_record TO p_errfl.
ENDLOOP.
ENDIF.
ENDFORM. " write_error_recs
&----
*& Form populate_condheader
&----
Populate the condition headers
----
-->P_LV_CHANGID change id (D or U)
----
FORM populate_condheader USING p_lv_changid.
DATA: lv_zaehk TYPE konv-zaehk.
Select the current record from KONV
SELECT SINGLE zaehk INTO lv_zaehk FROM konv WHERE
kposn = st_temp-kposn AND
knumv = st_temp-knumv AND
stunr = st_temp-stunr AND
kschl = st_temp-kschl.
IF sy-subrc EQ 0.
CONDITIONS
st_condheader-itm_number = st_temp-kposn.
st_condheader-condition_no = st_temp-knumv.
st_condheader-cond_st_no = st_temp-stunr.
st_condheader-cond_count = lv_zaehk. "st_temp-ZAEHK.
st_condheader-cond_type = st_temp-kschl.
st_condheader-cond_value = st_pur_ord-netpr * 1000.
st_condheader-change_id = p_lv_changid..
APPEND st_condheader TO i_pocondheader.
CLEAR st_condheader.
CONDITIONS INTERFACE
st_condheaderx-itm_number = st_temp-kposn.
st_condheaderx-condition_no = st_temp-knumv.
st_condheaderx-cond_st_no = st_temp-stunr.
st_condheaderx-itm_numberx = 'X'.
st_condheaderx-condition_nox = 'X'.
st_condheaderx-cond_st_nox = 'X'.
st_condheaderx-cond_count = 'X'.
st_condheaderx-cond_type = 'X'.
st_condheaderx-cond_value = 'X'.
st_condheaderx-change_id = 'X'.
APPEND st_condheaderx TO i_pocondheaderx.
CLEAR st_condheaderx.
ENDIF.
ENDFORM. " populate_condheader
&----
*& Form pre_validation
&----
text
----
--> p1 text
<-- p2 text
----
FORM pre_validation .
DATA: lv_ekgrp LIKE t024-ekgrp,
lv_matnr LIKE mara-matnr,
lv_flg TYPE c,
lv_cnt_ekgrp TYPE i,
lv_cnt_matnr TYPE i,
lst_record TYPE t_record.
Open the app server file to write...
OPEN DATASET p_errfl FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE 0.
MESSAGE e000 WITH 'Unable to open output file during prevalidation'.
ENDIF.
LOOP AT it_record INTO lst_record.
*Purchasing group
SELECT SINGLE ekgrp FROM t024 INTO lv_ekgrp WHERE ekgrp = lst_record-ekgrp.
IF sy-subrc NE 0.
CONCATENATE lst_record-message 'Purchasing group incorrect' INTO lst_record-message SEPARATED BY '-'.
lv_flg = 'X'.
lv_cnt_ekgrp = lv_cnt_ekgrp + 1.
ENDIF.
SELECT SINGLE matnr FROM zmc_matlxref INTO lv_matnr
WHERE legmatnr = lst_record-ematn.
IF sy-subrc NE 0.
CONCATENATE lst_record-message 'Material is incorrect' INTO lst_record-message SEPARATED BY '-'.
lv_flg = 'X'.
lv_cnt_matnr = lv_cnt_matnr + 1.
ELSE.
ENDIF.
IF lv_flg = 'X'.
MOVE-CORRESPONDING lst_record TO lt_record.
append lst_record to i_error.
TRANSFER lt_record TO p_errfl.
ENDIF.
CLEAR lv_flg.
ENDLOOP.
CLOSE DATASET p_errfl.
IF ( NOT lv_cnt_ekgrp IS INITIAL OR NOT lv_cnt_matnr IS INITIAL ).
FORMAT COLOR COL_HEADING .
WRITE:/ 'Run Statistics:'.
FORMAT COLOR OFF.
SKIP 2.
FORMAT COLOR COL_NORMAL.
WRITE:/ 'Number of Purchase Orgs Errored:', lv_cnt_ekgrp.
WRITE:/ 'Number of Materials Errored', lv_cnt_matnr.
WRITE:/ 'Error file downloaded to:', p_errfl.
ELSE.
ULINE.
WRITE:/ 'No errors found in the input file...good to go!!'.
ULINE.
ENDIF.
FORMAT COLOR OFF.
ENDFORM. " pre_validation
&----
*& Form load_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM load_data .
*Internal table to header upload data into
DATA: st_temp TYPE string.
DATA: BEGIN OF it_datatab OCCURS 0,
row(500) TYPE c,
END OF it_datatab.
IF p_pre EQ 'X'.
Alternative method, where by you split fields at each TAB after you
have returned the data. No point unless you dont have access to
GUI_UPLOAD but just included for information
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = gd_file
filetype = 'ASC'
TABLES
data_tab = it_datatab "ITBL_IN_RECORD[]
EXCEPTIONS
file_open_error = 1
OTHERS = 2.
If upload is successful...
IF sy-subrc NE 0.
ELSE.
LOOP AT it_datatab.
CLEAR: wa_string, wa_uploadtxt.
wa_string = it_datatab.
PERFORM append_line.
ENDLOOP.
ENDIF.
ELSE.
OPEN DATASET p_infile FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc EQ 0.
DO.
READ DATASET p_infile INTO wa_string.
IF sy-subrc EQ 0.
PERFORM append_line.
ELSE.
EXIT.
ENDIF.
ENDDO.
ENDIF.
ENDIF.
ENDFORM. " load_data
&----
*& Form append_line
&----
text
----
--> p1 text
<-- p2 text
----
FORM append_line .
Split the input string at TAB and push into variables
SPLIT wa_string AT con_tab INTO wa_uploadtxt-legpo
wa_uploadtxt-bukrs
wa_uploadtxt-bsart
wa_uploadtxt-cu_dat
wa_uploadtxt-lifnr
wa_uploadtxt-vkorg
wa_uploadtxt-ekgrp
wa_uploadtxt-waers
wa_uploadtxt-doc_date
wa_uploadtxt-s_werks
wa_uploadtxt-legpo_item
wa_uploadtxt-ematn
wa_uploadtxt-werks
wa_uploadtxt-menge
wa_uploadtxt-meins
wa_uploadtxt-netpr
wa_uploadtxt-peinh
wa_uploadtxt-epstp
wa_uploadtxt-knttp
wa_uploadtxt-eindt.
Move to workarea
MOVE-CORRESPONDING wa_uploadtxt TO wa_record.
APPEND wa_record TO it_record.
CLEAR wa_record.
ENDFORM. " append_line
Regards,
Nagaraj
12-03-2007 11:31 AM
Hi Jasmine,
I have used the FM Bapi_create_po1 for creating PO.Itz working proper.Below is the whole code for it.Check it n u will be able to understand.
Reward if useful.
Thx.
method do_handle_event.
data: event_id type string.
data zpr_num1 type banfn.
data zreturn type zsn_bapiret2.
data ret type bapireturn-type.
data message type bapi_msg.
data returnval type bapimepoheader-po_number.
data: r_view type ref to if_bsp_page.
data: crt_view type ref to if_bsp_page.
data po_num_head type bapimepoheader.
data zpoheader_it type zbapimepoheader_tab.
data zpoheaderx_it type zbapimepoheaderx_tab.
to add a new item to list
if htmlb_event is bound and htmlb_event->server_event = 'onadd'.
zpr_num = request->get_form_field( 'PRNo' ) .
data: zpr_num3 type banfn.
call function 'ZCONVERT_ALPHA'
exporting
input = zpr_num
importing
output = zpr_num3.
zpr_num = zpr_num3.
data: temp_tab1 type zrmheader.
delete from zrmheader.
zpoheader-vendor = request->get_form_field( 'Vendor' ) .
zpoheader-purch_org = request->get_form_field( 'POrg' ).
zpoheader-pur_group = request->get_form_field( 'PGrp' ).
zpoheader-doc_type = 'NB'.
zpoheader-item_intvl = request->get_form_field( 'Item' ).
zpoheader-comp_code = request->get_form_field( 'CCode' ).
zpoheader-doc_date = request->get_form_field( 'DocDate' ).
delivdate_new = request->get_form_field( 'DelivDate' ).
temp_tab1-vendor = request->get_form_field( 'Vendor' ) .
temp_tab1-purch_org = request->get_form_field( 'POrg' ).
temp_tab1-pur_group = request->get_form_field( 'PGrp' ).
temp_tab1-doc_type = 'NB'.
temp_tab1-item_intvl = request->get_form_field( 'Item' ).
temp_tab1-comp_code = request->get_form_field( 'CCode' ).
temp_tab1-doc_date = request->get_form_field( 'DocDate' ).
data: temp_tabx1 type zrmheaderx.
delete from zrmheaderx.
temp_tabx1-vendor = 'x'.
temp_tabx1-purch_org = 'x'.
temp_tabx1-pur_group = 'x'.
temp_tabx1-doc_type = 'x'.
temp_tabx1-comp_code = 'x'.
temp_tabx1-doc_date = 'x'.
insert into zrmheader values temp_tab1.
insert into zrmheaderx values temp_tabx1.
data: temp_tab type zrmitem .
data: temp_tabx type zrmitemx.
zitem1-acctasscat = request->get_form_field( 'A' ).
temp_tab-acctasscat = request->get_form_field( 'A' ).
zitem1-item_cat = request->get_form_field( 'I' ).
temp_tab-item_cat = request->get_form_field( 'I' ).
zitem1-material = request->get_form_field( 'Material' ).
temp_tab-material = request->get_form_field( 'Material' ).
zitem1-quantity = request->get_form_field( 'POQuantity' ).
temp_tab-quantity = request->get_form_field( 'POQuantity' ).
zitem1-po_unit = request->get_form_field( 'OUN' ).
temp_tab-po_unit = request->get_form_field( 'OUN' ).
zitem1-net_price = request->get_form_field( 'NetPrice' ).
temp_tab-net_price = request->get_form_field( 'NetPrice' ).
zitem1-plant = request->get_form_field( 'Plnt' ).
temp_tab-plant = request->get_form_field( 'Plnt' ).
zitem1-po_item = request->get_form_field( 'Item' ).
temp_tab-po_item = request->get_form_field( 'Item' ).
zitem1-stge_loc = request->get_form_field( 'Sloc' ).
temp_tab-stge_loc = request->get_form_field( 'Sloc' ).
zitem1-customer = request->get_form_field( 'Customer' ).
temp_tab-customer = request->get_form_field( 'Customer' ).
zitem1-incoterms2 = 'XDFGRT'.
temp_tab-incoterms2 = 'XDFGRT'.
append zitem1 to zitem.
insert into zrmitem values temp_tab.
zitemx1-acctasscat = 'x'.
zitemx1-item_cat = 'x'.
zitemx1-material = 'x'.
zitemx1-quantity = 'x'.
zitemx1-net_price = 'x'.
zitemx1-plant = 'x'.
zitemx1-po_item = 00010.
zitemx1-po_itemx = 'x'.
zitemx1-stge_loc = 'x'.
zitemx1-customer = 'x'.
zitemx1-incoterms2 = 'x'.
append zitemx1 to zitemx.
temp_tabx-acctasscat = 'x'.
temp_tabx-item_cat = 'x'.
temp_tabx-material = 'x'.
temp_tabx-quantity = 'x'.
temp_tabx-net_price = 'x'.
temp_tabx-plant = 'x'.
temp_tabx-po_item = 00010.
temp_tabx-po_itemx = 'x'.
temp_tabx-stge_loc = 'x'.
temp_tabx-customer = 'x'.
temp_tabx-incoterms2 = 'x'.
insert into zrmitemx values temp_tabx.
select * from zrmitem into corresponding fields of table zitem.
zpr_num = request->get_form_field( 'PRNo' ) .
call function 'ZCONVERT_ALPHA'
exporting
input = zpr_num
importing
output = zpr_num1.
LEN =
.
call function 'BAPI_REQUISITION_GETDETAIL'
exporting
number = zpr_num1
ACCOUNT_ASSIGNMENT = ' '
ITEM_TEXTS = ' '
SERVICES = ' '
SERVICE_TEXTS = ' '
tables
requisition_items = item_tab
REQUISITION_ACCOUNT_ASSIGNMENT =
REQUISITION_TEXT =
REQUISITION_LIMITS =
REQUISITION_CONTRACT_LIMITS =
REQUISITION_SERVICES =
REQUISITION_SERVICES_TEXTS =
REQUISITION_SRV_ACCASS_VALUES =
RETURN =
.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
*IMPORTING
*RETURN = i_return
to save the item details and generate a PO number
elseif htmlb_event is bound and htmlb_event->server_event = 'onsave'.
zpr_num = request->get_form_field( 'PRNo' ) .
data: zpr_num4 type banfn.
call function 'ZCONVERT_ALPHA'
exporting
input = zpr_num
importing
output = zpr_num4.
zpr_num = zpr_num4.
data: temp_t2 type zrmsched,
count2 type n,
a2 type n value 1.
data:temp_t type zrmitem,
count type n,
a type n value 1.
select * from zrmitem into corresponding fields of table data_tab.
count = sy-dbcnt.
do count times.
read table data_tab into temp_t index a.
a = a + 1.
zitem1-po_item = temp_t-po_item.
zitem1-acctasscat = temp_t-acctasscat.
zitem1-item_cat = temp_t-item_cat.
zitem1-material = temp_t-material.
zitem1-quantity = temp_t-quantity.
zitem1-po_unit = temp_t-po_unit.
zitem1-net_price = temp_t-net_price.
zitem1-plant = temp_t-plant.
zitem1-stge_loc = temp_t-stge_loc.
zitem1-customer = temp_t-customer.
zitem1-incoterms2 = temp_t-incoterms2.
append zitem1 to zitem.
zitemx1-acctasscat = 'x'.
zitemx1-item_cat = 'x'.
zitemx1-material = 'x'.
zitemx1-quantity = 'x'.
zitemx1-net_price = 'x'.
zitemx1-plant = 'x'.
zitemx1-po_item = temp_t-po_item.
zitemx1-po_itemx = 'x'.
zitemx1-stge_loc = 'x'.
zitemx1-customer = 'x'.
zitemx1-incoterms2 = 'x'.
append zitemx1 to zitemx.
enddo.
count2 = sy-dbcnt.
zpoheader-vendor = request->get_form_field( 'Vendor' ) .
zpoheader-purch_org = request->get_form_field( 'POrg' ).
zpoheader-pur_group = request->get_form_field( 'PGrp' ).
zpoheader-doc_type = 'NB'.
zpoheader-item_intvl = request->get_form_field( 'Item' ).
zpoheader-comp_code = request->get_form_field( 'CCode' ).
zpoheader-doc_date = request->get_form_field( 'DocDate' ).
delivdate_new = request->get_form_field( 'DelivDate' ).
zpoheaderx-vendor = 'x'.
zpoheaderx-purch_org = 'x'.
zpoheaderx-pur_group = 'x'.
zpoheaderx-doc_type = 'x'.
zpoheaderx-comp_code = 'x'.
zpoheaderx-doc_date = 'x'.
data: zpovendor type elifn.
call function 'ZCONVERT_ALPHA'
exporting
input = zpoheader-vendor
importing
output = zpovendor.
zpoheader-vendor = zpovendor.
call function 'BAPI_PO_CREATE1'
exporting
poheader = zpoheader
poheaderx = zpoheaderx
POADDRVENDOR =
TESTRUN =
MEMORY_UNCOMPLETE =
MEMORY_COMPLETE =
POEXPIMPHEADER =
POEXPIMPHEADERX =
VERSIONS =
NO_MESSAGING =
NO_MESSAGE_REQ =
NO_AUTHORITY =
NO_PRICE_FROM_PO =
importing
exppurchaseorder = po_num
EXPHEADER = PO_NUM_HEAD
EXPPOEXPIMPHEADER =
tables
RETURN = zreturn
poitem = zitem
poitemx = zitemx
POADDRDELIVERY =
POSCHEDULE = zposched
POSCHEDULEX = zposchedx
POACCOUNT =
POACCOUNTPROFITSEGMENT =
POACCOUNTX =
POCONDHEADER =
POCONDHEADERX =
POCOND =
POCONDX =
POLIMITS =
POCONTRACTLIMITS =
POSERVICES =
POSRVACCESSVALUES =
POSERVICESTEXT =
EXTENSIONIN =
EXTENSIONOUT =
POEXPIMPITEM =
POEXPIMPITEMX =
POTEXTHEADER =
POTEXTITEM =
ALLVERSIONS =
POPARTNER =
POCOMPONENTS =
POCOMPONENTSX =
POSHIPPING =
POSHIPPINGX =
POSHIPPINGEXP =
.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'
IMPORTING
RETURN =
.
delete from zrmitem.
delete from zrmitemx.
select * from zrmitem into corresponding fields of table zitem.
if po_num = ' '.
po_num = 'Try Again'.
endif.
to store po_num and corresponding pr number
data: temp_tt type zpo_pr_nums.
temp_tt-pr_num = zpr_num.
temp_tt-po_num = po_num.
insert into zpo_pr_nums values temp_tt.
to store po num and corresponding delivery date
data: wa11 type zpo_delivdate.
wa11-po_number = po_num.
wa11-deliv_date = delivdate_new.
insert into zpo_delivdate values wa11.
zpoheader-vendor = ' '.
zpoheader-purch_org = ' '.
zpoheader-pur_group = ' '.
zpoheader-doc_type = ' '.
zpoheader-item_intvl = ' '.
zpoheader-comp_code = ' '.
zpoheader-doc_date = ' '.
delivdate_new = ' '.
to enter a PR Number
elseif htmlb_event is bound and htmlb_event->server_event = 'onenter'.
delete from zrmitem.
delete from zrmitemx.
select * from zrmitem into corresponding fields of table zitem.
zpr_num = request->get_form_field( 'PRNo' ) .
call function 'ZCONVERT_ALPHA'
exporting
input = zpr_num
importing
output = zpr_num1.
LEN =
.
call function 'BAPI_REQUISITION_GETDETAIL'
exporting
number = zpr_num1
ACCOUNT_ASSIGNMENT = ' '
ITEM_TEXTS = ' '
SERVICES = ' '
SERVICE_TEXTS = ' '
tables
requisition_items = item_tab
REQUISITION_ACCOUNT_ASSIGNMENT =
REQUISITION_TEXT =
REQUISITION_LIMITS =
REQUISITION_CONTRACT_LIMITS =
REQUISITION_SERVICES =
REQUISITION_SERVICES_TEXTS =
REQUISITION_SRV_ACCASS_VALUES =
RETURN =
.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
*IMPORTING
*RETURN = i_return
to select an item from drop down item menu
elseif htmlb_event is bound and htmlb_event->server_event = 'select'.
data: zselection2 type bnfpo.
data: data type ref to cl_htmlb_dropdownlistbox.
zpr_num = request->get_form_field( 'PRNo' ) .
data: zpr_num2 type banfn.
call function 'ZCONVERT_ALPHA'
exporting
input = zpr_num
importing
output = zpr_num2.
data ?= cl_htmlb_manager=>get_data(
request = runtime->server->request
name = 'dropdownlistbox'
id = 'ItemSel'
).
if data is not initial.
zselection2 = data->selection.
endif.
zpoheader-vendor = request->get_form_field( 'Vendor' ) .
zpoheader-purch_org = request->get_form_field( 'POrg' ).
zpoheader-pur_group = request->get_form_field( 'PGrp' ).
zpoheader-doc_type = 'NB'.
zpoheader-item_intvl = request->get_form_field( 'Item' ).
zpoheader-comp_code = request->get_form_field( 'CCode' ).
zpoheader-doc_date = request->get_form_field( 'DocDate' ).
call function 'BAPI_REQUISITION_GETDETAIL'
exporting
number = zpr_num2
ACCOUNT_ASSIGNMENT = ' '
ITEM_TEXTS = ' '
SERVICES = ' '
SERVICE_TEXTS = ' '
tables
requisition_items = item_tab
REQUISITION_ACCOUNT_ASSIGNMENT =
REQUISITION_TEXT =
REQUISITION_LIMITS =
REQUISITION_CONTRACT_LIMITS =
REQUISITION_SERVICES =
REQUISITION_SERVICES_TEXTS =
REQUISITION_SRV_ACCASS_VALUES =
RETURN =
.
data wa1 type bapieban.
loop at item_tab into wa1.
if wa1-preq_item = zselection2.
item_new = wa1-preq_item.
material_new = wa1-material.
plant_new = wa1-plant.
quantity_new = wa1-quantity.
unit_new = wa1-unit.
delivdate_new = wa1-deliv_date.
endif.
endloop.
endif.
endmethod.